From 28052f8625a29744667730a2d7e085cd801bfaf0 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sat, 26 Jun 2021 03:27:19 +0200 Subject: [PATCH 1/2] more types of current in state --- bobbycar-serial.h | 48 ++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/bobbycar-serial.h b/bobbycar-serial.h index 58a904a..9ae5a20 100644 --- a/bobbycar-serial.h +++ b/bobbycar-serial.h @@ -67,7 +67,10 @@ struct MotorFeedback { int16_t angle = 0; int16_t speed = 0; uint8_t error = 0; - int16_t current = 0; + int16_t dcLink = 0; + int16_t dcPhaA = 0; + int16_t dcPhaB = 0; + int16_t dcPhaC = 0; uint16_t chops = 0; bool hallA = false; bool hallB = false; @@ -76,8 +79,9 @@ struct MotorFeedback { inline uint16_t calculateChecksum(MotorFeedback feedback) { return feedback.angle ^ feedback.speed ^ - feedback.error ^ feedback.current ^ - feedback.chops ^ + feedback.error ^ feedback.dcLink ^ + feedback.dcPhaA ^ feedback.dcPhaB ^ + feedback.dcPhaC ^ feedback.chops ^ feedback.hallA ^ feedback.hallB ^ feedback.hallC; } @@ -107,29 +111,35 @@ inline uint16_t calculateChecksum(Feedback feedback) { } -#define ASSERT_LAYOUT(st, memb, off) \ -static_assert(offsetof(st, memb) == off, "struct layout wrong"); +#define ASSERT_LAYOUT(st, memb, off) //\ +//static_assert(offsetof(st, memb) == off, "struct layout wrong"); ASSERT_LAYOUT(Feedback, start, 0); ASSERT_LAYOUT(Feedback, left, 2); ASSERT_LAYOUT(Feedback, left.angle, 2); ASSERT_LAYOUT(Feedback, left.speed, 4); ASSERT_LAYOUT(Feedback, left.error, 6); -ASSERT_LAYOUT(Feedback, left.current, 8); -ASSERT_LAYOUT(Feedback, left.chops, 10); -ASSERT_LAYOUT(Feedback, left.hallA, 12); -ASSERT_LAYOUT(Feedback, left.hallB, 13); -ASSERT_LAYOUT(Feedback, left.hallC, 14); +ASSERT_LAYOUT(Feedback, left.dcLink, 8); +ASSERT_LAYOUT(Feedback, left.dcPhaA, 10); +ASSERT_LAYOUT(Feedback, left.dcPhaB, 12); +ASSERT_LAYOUT(Feedback, left.dcPhaC, 14); +ASSERT_LAYOUT(Feedback, left.chops, 16); +ASSERT_LAYOUT(Feedback, left.hallA, 18); +ASSERT_LAYOUT(Feedback, left.hallB, 20); +ASSERT_LAYOUT(Feedback, left.hallC, 22); -ASSERT_LAYOUT(Feedback, right, 16); -ASSERT_LAYOUT(Feedback, right.angle, 16); -ASSERT_LAYOUT(Feedback, right.speed, 18); -ASSERT_LAYOUT(Feedback, right.error, 20); -ASSERT_LAYOUT(Feedback, right.current, 22); -ASSERT_LAYOUT(Feedback, right.chops, 24); -ASSERT_LAYOUT(Feedback, right.hallA, 26); -ASSERT_LAYOUT(Feedback, right.hallB, 27); -ASSERT_LAYOUT(Feedback, right.hallC, 28); +ASSERT_LAYOUT(Feedback, right, 24); +ASSERT_LAYOUT(Feedback, right.angle, 26); +ASSERT_LAYOUT(Feedback, right.speed, 28); +ASSERT_LAYOUT(Feedback, right.error, 30); +ASSERT_LAYOUT(Feedback, right.dcLink, 32); +ASSERT_LAYOUT(Feedback, right.dcPhaA, 34); +ASSERT_LAYOUT(Feedback, right.dcPhaB, 36); +ASSERT_LAYOUT(Feedback, right.dcPhaC, 38); +ASSERT_LAYOUT(Feedback, right.chops, 40); +ASSERT_LAYOUT(Feedback, right.hallA, 42); +ASSERT_LAYOUT(Feedback, right.hallB, 44); +ASSERT_LAYOUT(Feedback, right.hallC, 48); ASSERT_LAYOUT(Feedback, batVoltage, 30); ASSERT_LAYOUT(Feedback, boardTemp, 32); -- 2.50.0 From 7f90b2b8825c21bc9a50bd546d478b5f24d2b8cc Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 28 Jun 2021 10:23:39 +0200 Subject: [PATCH 2/2] fixed layout assertions and added namespaces --- bobbycar-can.h | 8 ++++++-- bobbycar-common.h | 6 ++++++ bobbycar-serial.h | 48 +++++++++++++++++++++++++++-------------------- 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/bobbycar-can.h b/bobbycar-can.h index 9369b6f..7f1abc5 100644 --- a/bobbycar-can.h +++ b/bobbycar-can.h @@ -3,7 +3,9 @@ #include namespace bobbycar { +namespace protocol { namespace can { + template class MotorController { @@ -196,5 +198,7 @@ inline const char *bobbycarCanIdDesc(uint16_t id) } return "Unknown"; } -} -} + +} // namespace can +} // namespace protocol +} // namespace bobbycar diff --git a/bobbycar-common.h b/bobbycar-common.h index b62bfd7..a89079d 100644 --- a/bobbycar-common.h +++ b/bobbycar-common.h @@ -2,6 +2,9 @@ #include +namespace bobbycar { +namespace protocol { + enum class ControlType : uint8_t { Commutation, Sinusoidal, @@ -14,3 +17,6 @@ enum class ControlMode : uint8_t { Speed, // Only with FieldOrientedControl Torque // Only with FieldOrientedControl }; + +} // namespace protocol +} // namespace bobbycar diff --git a/bobbycar-serial.h b/bobbycar-serial.h index 9ae5a20..b5abe2d 100644 --- a/bobbycar-serial.h +++ b/bobbycar-serial.h @@ -4,6 +4,10 @@ #include "bobbycar-common.h" +namespace bobbycar { +namespace protocol { +namespace serial { + struct MotorState { bool enable = false; int16_t pwm = 0; @@ -111,8 +115,8 @@ inline uint16_t calculateChecksum(Feedback feedback) { } -#define ASSERT_LAYOUT(st, memb, off) //\ -//static_assert(offsetof(st, memb) == off, "struct layout wrong"); +#define ASSERT_LAYOUT(st, memb, off) \ + static_assert(offsetof(st, memb) == off, "struct layout wrong"); ASSERT_LAYOUT(Feedback, start, 0); ASSERT_LAYOUT(Feedback, left, 2); @@ -125,26 +129,26 @@ ASSERT_LAYOUT(Feedback, left.dcPhaB, 12); ASSERT_LAYOUT(Feedback, left.dcPhaC, 14); ASSERT_LAYOUT(Feedback, left.chops, 16); ASSERT_LAYOUT(Feedback, left.hallA, 18); -ASSERT_LAYOUT(Feedback, left.hallB, 20); -ASSERT_LAYOUT(Feedback, left.hallC, 22); +ASSERT_LAYOUT(Feedback, left.hallB, 19); +ASSERT_LAYOUT(Feedback, left.hallC, 20); -ASSERT_LAYOUT(Feedback, right, 24); -ASSERT_LAYOUT(Feedback, right.angle, 26); -ASSERT_LAYOUT(Feedback, right.speed, 28); -ASSERT_LAYOUT(Feedback, right.error, 30); -ASSERT_LAYOUT(Feedback, right.dcLink, 32); -ASSERT_LAYOUT(Feedback, right.dcPhaA, 34); -ASSERT_LAYOUT(Feedback, right.dcPhaB, 36); -ASSERT_LAYOUT(Feedback, right.dcPhaC, 38); -ASSERT_LAYOUT(Feedback, right.chops, 40); -ASSERT_LAYOUT(Feedback, right.hallA, 42); -ASSERT_LAYOUT(Feedback, right.hallB, 44); -ASSERT_LAYOUT(Feedback, right.hallC, 48); +ASSERT_LAYOUT(Feedback, right, 22); +ASSERT_LAYOUT(Feedback, right.angle, 22); +ASSERT_LAYOUT(Feedback, right.speed, 24); +ASSERT_LAYOUT(Feedback, right.error, 26); +ASSERT_LAYOUT(Feedback, right.dcLink, 28); +ASSERT_LAYOUT(Feedback, right.dcPhaA, 30); +ASSERT_LAYOUT(Feedback, right.dcPhaB, 32); +ASSERT_LAYOUT(Feedback, right.dcPhaC, 34); +ASSERT_LAYOUT(Feedback, right.chops, 36); +ASSERT_LAYOUT(Feedback, right.hallA, 38); +ASSERT_LAYOUT(Feedback, right.hallB, 39); +ASSERT_LAYOUT(Feedback, right.hallC, 40); -ASSERT_LAYOUT(Feedback, batVoltage, 30); -ASSERT_LAYOUT(Feedback, boardTemp, 32); -ASSERT_LAYOUT(Feedback, timeoutCntSerial, 34); -ASSERT_LAYOUT(Feedback, checksum, 36); +ASSERT_LAYOUT(Feedback, batVoltage, 42); +ASSERT_LAYOUT(Feedback, boardTemp, 44); +ASSERT_LAYOUT(Feedback, timeoutCntSerial, 46); +ASSERT_LAYOUT(Feedback, checksum, 48); static_assert(sizeof(Command) == 32, "sizeof(Command) wrong"); @@ -178,3 +182,7 @@ ASSERT_LAYOUT(Command, buzzer.pattern, 27); ASSERT_LAYOUT(Command, poweroff, 28); ASSERT_LAYOUT(Command, led, 29); ASSERT_LAYOUT(Command, checksum, 30); + +} // namespace serial +} // namespace protocol +} // namespace bobbycar -- 2.50.0