diff --git a/src/bobbycar-protocol b/src/bobbycar-protocol index 28052f8..2e0f97d 160000 --- a/src/bobbycar-protocol +++ b/src/bobbycar-protocol @@ -1 +1 @@ -Subproject commit 28052f8625a29744667730a2d7e085cd801bfaf0 +Subproject commit 2e0f97d6dd3e71cf01d0859bd332548be2187d24 diff --git a/src/can.h b/src/can.h index 10606dd..c54694e 100644 --- a/src/can.h +++ b/src/can.h @@ -63,7 +63,7 @@ bool parseCanMessage(const can_message_t &message, Controller &controller) { switch (message.identifier) { - using namespace bobbycar::can; + using namespace bobbycar::protocol::can; case MotorController::Feedback::DcLink: controller.feedback.left.dcLink = *((int16_t*)message.data); return true; @@ -200,7 +200,7 @@ void sendCanCommands() return result; }; - using namespace bobbycar::can; + using namespace bobbycar::protocol::can; send(MotorController::Command::InpTgt, controllers.front.command.left.pwm); send(MotorController::Command::InpTgt, controllers.front.command.right.pwm); diff --git a/src/changevaluedisplay_controlmode.h b/src/changevaluedisplay_controlmode.h index 6176fdc..3c36d3a 100644 --- a/src/changevaluedisplay_controlmode.h +++ b/src/changevaluedisplay_controlmode.h @@ -10,9 +10,9 @@ namespace { template<> -class ChangeValueDisplay : +class ChangeValueDisplay : public MenuDisplay, - public virtual AccessorInterface, + public virtual AccessorInterface, public virtual ActionInterface { using Base = MenuDisplay; @@ -23,8 +23,9 @@ public: void start() override; }; -ChangeValueDisplay::ChangeValueDisplay() +ChangeValueDisplay::ChangeValueDisplay() { + using bobbycar::protocol::ControlMode; constructMenuItem, StaticText>>(ControlMode::OpenMode, *this, *this); constructMenuItem, StaticText>>(ControlMode::Voltage, *this, *this); constructMenuItem, StaticText>>(ControlMode::Speed, *this, *this); @@ -32,12 +33,13 @@ ChangeValueDisplay::ChangeValueDisplay() constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); } -void ChangeValueDisplay::start() +void ChangeValueDisplay::start() { Base::start(); switch (const auto value = getValue()) { + using bobbycar::protocol::ControlMode; case ControlMode::OpenMode: setSelectedIndex(0); break; case ControlMode::Voltage: setSelectedIndex(1); break; case ControlMode::Speed: setSelectedIndex(2); break; diff --git a/src/changevaluedisplay_controltype.h b/src/changevaluedisplay_controltype.h index 2ff213a..f90cb46 100644 --- a/src/changevaluedisplay_controltype.h +++ b/src/changevaluedisplay_controltype.h @@ -10,9 +10,9 @@ namespace { template<> -class ChangeValueDisplay : +class ChangeValueDisplay : public MenuDisplay, - public virtual AccessorInterface, + public virtual AccessorInterface, public virtual ActionInterface { using Base = MenuDisplay; @@ -23,20 +23,22 @@ public: void start() override; }; -ChangeValueDisplay::ChangeValueDisplay() +ChangeValueDisplay::ChangeValueDisplay() { + using bobbycar::protocol::ControlType; constructMenuItem, StaticText>>(ControlType::Commutation, *this, *this); constructMenuItem, StaticText>>(ControlType::Sinusoidal, *this, *this); constructMenuItem, StaticText>>(ControlType::FieldOrientedControl, *this, *this); constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); } -void ChangeValueDisplay::start() +void ChangeValueDisplay::start() { Base::start(); switch (const auto value = getValue()) { + using bobbycar::protocol::ControlType; case ControlType::Commutation: setSelectedIndex(0); break; case ControlType::Sinusoidal: setSelectedIndex(1); break; case ControlType::FieldOrientedControl: setSelectedIndex(2); break; diff --git a/src/controller.h b/src/controller.h index d045c7c..8a27cb3 100644 --- a/src/controller.h +++ b/src/controller.h @@ -36,13 +36,13 @@ struct Controller { #endif bool &enableLeft, &enableRight, &invertLeft, &invertRight; - Command command{}; + bobbycar::protocol::serial::Command command{}; #ifdef FEATURE_CAN millis_t lastCanFeedback{}; #endif bool feedbackValid{}; - Feedback feedback{}; + bobbycar::protocol::serial::Feedback feedback{}; #ifndef FEATURE_CAN FeedbackParser parser{serial, feedbackValid, feedback}; diff --git a/src/debugtexthelpers.h b/src/debugtexthelpers.h index 30ddb97..dfe144e 100644 --- a/src/debugtexthelpers.h +++ b/src/debugtexthelpers.h @@ -17,8 +17,8 @@ struct ControllerTexts struct LedText : public virtual TextInterface { public: std::string text() const override { return "led: " + std::to_string(controller::get().command.led); } }; private: - struct LeftCommandGetter { static const MotorState &get() { return controller::get().command.left; } }; - struct RightCommandGetter { static const MotorState &get() { return controller::get().command.right; } }; + struct LeftCommandGetter { static const bobbycar::protocol::serial::MotorState &get() { return controller::get().command.left; } }; + struct RightCommandGetter { static const bobbycar::protocol::serial::MotorState &get() { return controller::get().command.right; } }; template struct CommandTexts @@ -48,8 +48,8 @@ public: struct TimeoutCntSerialText : public virtual TextInterface { public: std::string text() const override { std::string line{"timeoutCntSerial: "}; if (controller::get().feedbackValid) line += std::to_string(controller::get().feedback.timeoutCntSerial); return line; } }; private: - struct LeftFeedbackGetter { static const MotorFeedback &get() { return controller::get().feedback.left; } }; - struct RightFeedbackGetter { static const MotorFeedback &get() { return controller::get().feedback.right; } }; + struct LeftFeedbackGetter { static const bobbycar::protocol::serial::MotorFeedback &get() { return controller::get().feedback.left; } }; + struct RightFeedbackGetter { static const bobbycar::protocol::serial::MotorFeedback &get() { return controller::get().feedback.right; } }; template struct FeedbackTexts diff --git a/src/displays/calibratedisplay.h b/src/displays/calibratedisplay.h index 3f12937..89082b8 100644 --- a/src/displays/calibratedisplay.h +++ b/src/displays/calibratedisplay.h @@ -42,7 +42,7 @@ private: const bool m_bootup{false}; ModeInterface *m_oldMode; - IgnoreInputMode m_mode{0, ControlType::FieldOrientedControl, ControlMode::Torque}; + IgnoreInputMode m_mode{0, bobbycar::protocol::ControlType::FieldOrientedControl, bobbycar::protocol::ControlMode::Torque}; std::array m_labels {{ Label{25, 72}, // 100, 23 diff --git a/src/displays/lockscreen.h b/src/displays/lockscreen.h index a91d155..4aa6e36 100644 --- a/src/displays/lockscreen.h +++ b/src/displays/lockscreen.h @@ -50,7 +50,7 @@ private: int m_rotated; ModeInterface *m_oldMode; - IgnoreInputMode m_mode{0, ControlType::FieldOrientedControl, ControlMode::Speed}; + IgnoreInputMode m_mode{0, bobbycar::protocol::ControlType::FieldOrientedControl, bobbycar::protocol::ControlMode::Speed}; }; void Lockscreen::start() diff --git a/src/displays/statusdisplay.h b/src/displays/statusdisplay.h index ebe20c9..3c3e432 100644 --- a/src/displays/statusdisplay.h +++ b/src/displays/statusdisplay.h @@ -57,7 +57,7 @@ private: {} void start(); - void redraw(const MotorFeedback &motor); + void redraw(const bobbycar::protocol::serial::MotorFeedback &motor); private: Label m_labelError; @@ -246,7 +246,7 @@ void StatusDisplay::BoardStatus::MotorStatus::start() m_labelHallSensors.start(); } -void StatusDisplay::BoardStatus::MotorStatus::redraw(const MotorFeedback &motor) +void StatusDisplay::BoardStatus::MotorStatus::redraw(const bobbycar::protocol::serial::MotorFeedback &motor) { tft.setTextFont(4); tft.setTextColor(motor.error?TFT_RED:TFT_GREEN, TFT_BLACK); diff --git a/src/modes/defaultmode.h b/src/modes/defaultmode.h index f4756e4..0039af2 100644 --- a/src/modes/defaultmode.h +++ b/src/modes/defaultmode.h @@ -78,13 +78,13 @@ void DefaultMode::update() lastTime = now; const auto pair = split(settings.defaultMode.modelMode); - for (MotorState &motor : motorsInController(controllers.front)) + for (bobbycar::protocol::serial::MotorState &motor : motorsInController(controllers.front)) { motor.ctrlTyp = pair.first; motor.ctrlMod = pair.second; motor.pwm = pwm / 100. * settings.defaultMode.frontPercentage; } - for (MotorState &motor : motorsInController(controllers.back)) + for (bobbycar::protocol::serial::MotorState &motor : motorsInController(controllers.back)) { motor.ctrlTyp = pair.first; motor.ctrlMod = pair.second; diff --git a/src/modes/gametrakmode.h b/src/modes/gametrakmode.h index a96b0b3..a4166d6 100644 --- a/src/modes/gametrakmode.h +++ b/src/modes/gametrakmode.h @@ -66,10 +66,10 @@ void GametrakMode::update() pwm = 0; } - for (MotorState &motor : motors()) + for (bobbycar::protocol::serial::MotorState &motor : motors()) { - motor.ctrlTyp = ControlType::FieldOrientedControl; - motor.ctrlMod = ControlMode::Speed; + motor.ctrlTyp = bobbycar::protocol::ControlType::FieldOrientedControl; + motor.ctrlMod = bobbycar::protocol::ControlMode::Speed; motor.pwm = pwm; } diff --git a/src/modes/ignoreinputmode.h b/src/modes/ignoreinputmode.h index 17a5075..f22b4c0 100644 --- a/src/modes/ignoreinputmode.h +++ b/src/modes/ignoreinputmode.h @@ -10,7 +10,7 @@ namespace { class IgnoreInputMode : public ModeInterface { public: - IgnoreInputMode(int16_t pwm, ControlType ctrlTyp, ControlMode ctrlMod) : + IgnoreInputMode(int16_t pwm, bobbycar::protocol::ControlType ctrlTyp, bobbycar::protocol::ControlMode ctrlMod) : m_pwm{pwm}, m_ctrlTyp{ctrlTyp}, m_ctrlMod{ctrlMod} { } @@ -21,13 +21,13 @@ public: private: const int16_t m_pwm; - const ControlType m_ctrlTyp; - const ControlMode m_ctrlMod; + const bobbycar::protocol::ControlType m_ctrlTyp; + const bobbycar::protocol::ControlMode m_ctrlMod; }; void IgnoreInputMode::update() { - for (MotorState &motor : motors()) + for (bobbycar::protocol::serial::MotorState &motor : motors()) { motor.ctrlTyp = m_ctrlTyp; motor.ctrlMod = m_ctrlMod; diff --git a/src/modes/larsmmode.h b/src/modes/larsmmode.h index ef775eb..5fb219c 100644 --- a/src/modes/larsmmode.h +++ b/src/modes/larsmmode.h @@ -96,7 +96,7 @@ void LarsmMode::update() speed = CLAMP(speed, -1000, 1000); // clamp output } - for (MotorState &motor : motors()) + for (bobbycar::protocol::serial::MotorState &motor : motors()) { const auto pair = split(settings.larsmMode.modelMode); motor.ctrlTyp = pair.first; diff --git a/src/modes/tempomatmode.h b/src/modes/tempomatmode.h index 42682f4..acc1e5b 100644 --- a/src/modes/tempomatmode.h +++ b/src/modes/tempomatmode.h @@ -43,7 +43,7 @@ void TempomatMode::update() pwm += (gas/1000.) - (brems/1000.); - for (MotorState &motor : motors()) + for (bobbycar::protocol::serial::MotorState &motor : motors()) { const auto pair = split(settings.tempomatMode.modelMode); motor.ctrlTyp = pair.first; diff --git a/src/settingspersister.h b/src/settingspersister.h index 05e0e4f..87bed2d 100644 --- a/src/settingspersister.h +++ b/src/settingspersister.h @@ -115,20 +115,20 @@ template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle ha *out_value = tempValue; return err; }}; -template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, ControlType* out_value) +template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, bobbycar::protocol::ControlType* out_value) { uint8_t tempValue; esp_err_t err = nvs_get_u8(handle, key, &tempValue); if (err == ESP_OK) - *out_value = ControlType(tempValue); + *out_value = bobbycar::protocol::ControlType(tempValue); return err; }}; -template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, ControlMode* out_value) +template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, bobbycar::protocol::ControlMode* out_value) { uint8_t tempValue; esp_err_t err = nvs_get_u8(handle, key, &tempValue); if (err == ESP_OK) - *out_value = ControlMode(tempValue); + *out_value = bobbycar::protocol::ControlMode(tempValue); return err; }}; template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, LarsmModeMode* out_value) @@ -197,11 +197,11 @@ template<> struct nvsSetterHelper { static constexpr auto nvs_set = &n template<> struct nvsSetterHelper { static constexpr auto nvs_set = &nvs_set_i32; }; template<> struct nvsSetterHelper { static constexpr auto nvs_set = &nvs_set_u32; }; template<> struct nvsSetterHelper { static constexpr auto nvs_set = &nvs_set_u8; }; -template<> struct nvsSetterHelper { static esp_err_t nvs_set(nvs_handle handle, const char* key, ControlType value) +template<> struct nvsSetterHelper { static esp_err_t nvs_set(nvs_handle handle, const char* key, bobbycar::protocol::ControlType value) { return nvs_set_u8(handle, key, uint8_t(value)); }}; -template<> struct nvsSetterHelper { static esp_err_t nvs_set(nvs_handle handle, const char* key, ControlMode value) +template<> struct nvsSetterHelper { static esp_err_t nvs_set(nvs_handle handle, const char* key, bobbycar::protocol::ControlMode value) { return nvs_set_u8(handle, key, uint8_t(value)); }}; diff --git a/src/unifiedmodelmode.h b/src/unifiedmodelmode.h index 0a66074..e402ce2 100644 --- a/src/unifiedmodelmode.h +++ b/src/unifiedmodelmode.h @@ -16,8 +16,11 @@ enum class UnifiedModelMode : uint8_t FocTorque }; -std::pair split(UnifiedModelMode mode) +std::pair split(UnifiedModelMode mode) { + using bobbycar::protocol::ControlType; + using bobbycar::protocol::ControlMode; + switch (mode) { case UnifiedModelMode::Commutation: return std::make_pair(ControlType::Commutation, ControlMode::Voltage); diff --git a/src/utils.h b/src/utils.h index dcd8579..7b79d32 100644 --- a/src/utils.h +++ b/src/utils.h @@ -87,7 +87,7 @@ float fixBoardTemp(int16_t value) return value/10.; } -std::string hallString(const MotorFeedback &motor) +std::string hallString(const bobbycar::protocol::serial::MotorFeedback &motor) { return std::string{} + (motor.hallA ? '1' : '0') + (motor.hallB ? '1' : '0') + (motor.hallC ? '1' : '0'); } @@ -97,10 +97,11 @@ std::string to_string(const String &value) return std::string{value.c_str(), value.length()}; } -std::string to_string(ControlType value) +std::string to_string(bobbycar::protocol::ControlType value) { switch (value) { + using namespace bobbycar::protocol; case ControlType::Commutation: return "Commutation"; case ControlType::Sinusoidal: return "Sinusoidal"; case ControlType::FieldOrientedControl: return "FieldOrientedControl"; @@ -108,10 +109,11 @@ std::string to_string(ControlType value) return "Unknown ControlType(" + std::to_string(int(value)) + ')'; } -std::string to_string(ControlMode value) +std::string to_string(bobbycar::protocol::ControlMode value) { switch (value) { + using namespace bobbycar::protocol; case ControlMode::OpenMode: return "OpenMode"; case ControlMode::Voltage: return "Voltage"; case ControlMode::Speed: return "Speed"; @@ -161,27 +163,27 @@ std::string to_string(IPv6Address value) return to_string(value.toString()); } -std::array, 2> motorsInController(Controller &controller) +std::array, 2> motorsInController(Controller &controller) { return {std::ref(controller.command.left), std::ref(controller.command.right)}; } -std::array, 2> motorsInController(const Controller &controller) +std::array, 2> motorsInController(const Controller &controller) { return {std::ref(controller.command.left), std::ref(controller.command.right)}; } -std::array, 2> motorFeedbacksInController(Controller &controller) +std::array, 2> motorFeedbacksInController(Controller &controller) { return {std::ref(controller.feedback.left), std::ref(controller.feedback.right)}; } -std::array, 2> motorFeedbacksInController(const Controller &controller) +std::array, 2> motorFeedbacksInController(const Controller &controller) { return {std::ref(controller.feedback.left), std::ref(controller.feedback.right)}; } -std::array, 4> motors() +std::array, 4> motors() { return { std::ref(controllers.front.command.left), std::ref(controllers.front.command.right), @@ -191,7 +193,7 @@ std::array, 4> motors() void fixCommonParams() { - for (MotorState &motor : motors()) + for (bobbycar::protocol::serial::MotorState &motor : motors()) { motor.iMotMax = settings.limits.iMotMax; motor.iDcMax = settings.limits.iDcMax; @@ -203,7 +205,7 @@ void fixCommonParams() if (settings.reverseBeep) { const auto x = motors(); - const auto shouldBeep = std::all_of(std::begin(x), std::end(x), [](const MotorState &motor){ return motor.pwm < 0; }); + const auto shouldBeep = std::all_of(std::begin(x), std::end(x), [](const bobbycar::protocol::serial::MotorState &motor){ return motor.pwm < 0; }); if (shouldBeep != currentlyReverseBeeping) {