diff --git a/src/changevaluedisplay.h b/src/changevaluedisplay.h index 3de6a21..65dfc1a 100644 --- a/src/changevaluedisplay.h +++ b/src/changevaluedisplay.h @@ -140,5 +140,6 @@ void ChangeValueDisplay::confirm() #include "changevaluedisplay_controlmode.h" #include "changevaluedisplay_controltype.h" #include "changevaluedisplay_larsmmode_mode.h" +#include "changevaluedisplay_unifiedmodelmode.h" #include "changevaluedisplay_wifi_mode_t.h" #include "changevaluedisplay_wifi_power_t.h" diff --git a/src/changevaluedisplay_unifiedmodelmode.h b/src/changevaluedisplay_unifiedmodelmode.h new file mode 100644 index 0000000..94d2bed --- /dev/null +++ b/src/changevaluedisplay_unifiedmodelmode.h @@ -0,0 +1,69 @@ +#pragma once + +#include "changevaluedisplay.h" +#include "menudisplay.h" +#include "staticmenudefinition.h" +#include "utils.h" +#include "actions/dummyaction.h" +#include "icons/back.h" +#include "texts.h" +#include "unifiedmodelmode.h" + +namespace { +template<> +class ChangeValueDisplay : + public MenuDisplay, + public StaticMenuDefinition< + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction, StaticMenuItemIcon<&icons::back>> + >, + public virtual AccessorInterface, + public virtual ActionInterface +{ + using Base = MenuDisplay; + +public: + void start() override; + + void itemPressed(int index) override; +}; + +void ChangeValueDisplay::start() +{ + Base::start(); + + if (getValue() == UnifiedModelMode::Commutation) + setSelectedIndex(0); + else if (getValue() == UnifiedModelMode::Sinusoidal) + setSelectedIndex(1); + else if (getValue() == UnifiedModelMode::FocVoltage) + setSelectedIndex(2); + else if (getValue() == UnifiedModelMode::FocSpeed) + setSelectedIndex(3); + else if (getValue() == UnifiedModelMode::FocTorque) + setSelectedIndex(4); + else + { + Serial.printf("Unknown UnifiedModelMode: %i", int(getValue())); + setSelectedIndex(5); + } +} + +void ChangeValueDisplay::itemPressed(int index) +{ + switch (index) + { + case 0: setValue(UnifiedModelMode::Commutation); break; + case 1: setValue(UnifiedModelMode::Sinusoidal); break; + case 2: setValue(UnifiedModelMode::FocVoltage); break; + case 3: setValue(UnifiedModelMode::FocSpeed); break; + case 4: setValue(UnifiedModelMode::FocTorque); break; + } + + triggered(); +} +} diff --git a/src/displays/menus/defaultmodesettingsmenu.h b/src/displays/menus/defaultmodesettingsmenu.h index e648e1e..538b52b 100644 --- a/src/displays/menus/defaultmodesettingsmenu.h +++ b/src/displays/menus/defaultmodesettingsmenu.h @@ -18,17 +18,10 @@ class ModesSettingsMenu; } namespace { -using DefaultModeCtrlTypChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - DefaultModeCtrlTypAccessor, - BackActionInterface>, - SwitchScreenAction ->; -using DefaultModeCtrlModChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - DefaultModeCtrlModAccessor, +using DefaultModeModelModeChangeDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + DefaultModeModelModeAccessor, BackActionInterface>, SwitchScreenAction >; @@ -94,9 +87,8 @@ class DefaultModeSettingsMenu : public StaticText, public BackActionInterface>, public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingAccessor>, + makeComponent, SwitchScreenAction>, + makeComponent, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingAccessor>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, diff --git a/src/displays/menus/larsmmodesettingsmenu.h b/src/displays/menus/larsmmodesettingsmenu.h index 1fd0c97..1b80bd7 100644 --- a/src/displays/menus/larsmmodesettingsmenu.h +++ b/src/displays/menus/larsmmodesettingsmenu.h @@ -16,16 +16,23 @@ class ModesSettingsMenu; } namespace { +using LarsmModeModelModeChangeDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + LarsmModeModelModeAccessor, + BackActionInterface>, + SwitchScreenAction +>; using LarsmModeModeChangeDisplay = makeComponent< ChangeValueDisplay, - StaticText, + StaticText, LarsmModeModeAccessor, BackActionInterface>, SwitchScreenAction >; using LarsmModeIterationsChangeDisplay = makeComponent< ChangeValueDisplay, - StaticText, + StaticText, LarsmModeIterationsAccessor, BackActionInterface>, SwitchScreenAction @@ -36,9 +43,10 @@ class LarsmModeSettingsMenu : public StaticText, public BackActionInterface>, public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; } diff --git a/src/displays/menus/presetsmenu.h b/src/displays/menus/presetsmenu.h index 97d19c2..6ee8b46 100644 --- a/src/displays/menus/presetsmenu.h +++ b/src/displays/menus/presetsmenu.h @@ -79,7 +79,7 @@ class PresetsMenu : makeComponent, ApplyControllerHardwarePresetAction<&presets::spinnerControllerHardware>>, makeComponent, ApplyBoardcomputerHardwarePresetAction<&presets::defaultBoardcomputerHardware>>, makeComponent, ApplyDefaultModePresetAction<&presets::defaultDefaultMode>>, - makeComponent, ApplyDefaultModePresetAction<&presets::sinusodialDefaultMode>>, + makeComponent, ApplyDefaultModePresetAction<&presets::sinusoidalDefaultMode>>, makeComponent, ApplyTempomatModePresetAction<&presets::defaultTempomatMode>>, makeComponent, ApplyLarsmModePresetAction<&presets::defaultLarsmMode>>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> diff --git a/src/displays/menus/tempomatmodesettingsmenu.h b/src/displays/menus/tempomatmodesettingsmenu.h index a2a947a..7664871 100644 --- a/src/displays/menus/tempomatmodesettingsmenu.h +++ b/src/displays/menus/tempomatmodesettingsmenu.h @@ -16,17 +16,10 @@ class ModesSettingsMenu; } namespace { -using TempomatModeCtrlTypChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - TempomatModeCtrlTypAccessor, - BackActionInterface>, - SwitchScreenAction ->; -using TempomatModeCtrlModChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - TempomatModeCtrlModAccessor, +using TempomatModeModelModeChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + TempomatModeModelModeAccessor, BackActionInterface>, SwitchScreenAction >; @@ -36,9 +29,8 @@ class TempomatModeSettingsMenu : public StaticText, public BackActionInterface>, public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; } diff --git a/src/modes/defaultmode.h b/src/modes/defaultmode.h index 15858b0..4a2e57e 100644 --- a/src/modes/defaultmode.h +++ b/src/modes/defaultmode.h @@ -78,8 +78,9 @@ void DefaultMode::update() for (Controller &controller : controllers()) for (MotorState &motor : motorsInController(controller)) { - motor.ctrlTyp = settings.defaultMode.ctrlTyp; - motor.ctrlMod = settings.defaultMode.ctrlMod; + const auto pair = split(settings.defaultMode.modelMode); + motor.ctrlTyp = pair.first; + motor.ctrlMod = pair.second; motor.pwm = pwm / 100. * (&controller == &front ? settings.defaultMode.frontPercentage : settings.defaultMode.backPercentage); } diff --git a/src/modes/larsmmode.h b/src/modes/larsmmode.h index f4161ce..269f62e 100644 --- a/src/modes/larsmmode.h +++ b/src/modes/larsmmode.h @@ -98,8 +98,9 @@ void LarsmMode::update() for (MotorState &motor : motors()) { - motor.ctrlTyp = ControlType::Commutation; - motor.ctrlMod = ControlMode::Voltage; + const auto pair = split(settings.larsmMode.modelMode); + motor.ctrlTyp = pair.first; + motor.ctrlMod = pair.second; motor.pwm = speed + weak; } diff --git a/src/modes/tempomatmode.h b/src/modes/tempomatmode.h index 2038f8b..e8ef9c9 100644 --- a/src/modes/tempomatmode.h +++ b/src/modes/tempomatmode.h @@ -45,8 +45,9 @@ void TempomatMode::update() for (MotorState &motor : motors()) { - motor.ctrlTyp = settings.tempomatMode.ctrlTyp; - motor.ctrlMod = settings.tempomatMode.ctrlMod; + const auto pair = split(settings.tempomatMode.modelMode); + motor.ctrlTyp = pair.first; + motor.ctrlMod = pair.second; motor.pwm = pwm; } diff --git a/src/presets.h b/src/presets.h index 8f20357..b924cbc 100644 --- a/src/presets.h +++ b/src/presets.h @@ -85,8 +85,7 @@ constexpr Settings::BoardcomputerHardware defaultBoardcomputerHardware { }; constexpr Settings::DefaultMode defaultDefaultMode { - .ctrlTyp = ControlType::FieldOrientedControl, - .ctrlMod = ControlMode::Torque, + .modelMode = UnifiedModelMode::FocTorque, .enableSmoothing = true, .smoothing = 20, .frontPercentage = 100, @@ -98,9 +97,8 @@ constexpr Settings::DefaultMode defaultDefaultMode { .brems2_wert = 750 }; -constexpr Settings::DefaultMode sinusodialDefaultMode { - .ctrlTyp = ControlType::Sinusoidal, - .ctrlMod = ControlMode::Voltage, +constexpr Settings::DefaultMode sinusoidalDefaultMode { + .modelMode = UnifiedModelMode::Sinusoidal, .enableSmoothing = true, .smoothing = 20, .frontPercentage = 100, @@ -113,11 +111,11 @@ constexpr Settings::DefaultMode sinusodialDefaultMode { }; constexpr Settings::TempomatMode defaultTempomatMode { - .ctrlTyp = ControlType::FieldOrientedControl, - .ctrlMod = ControlMode::Speed + .modelMode = UnifiedModelMode::FocSpeed }; constexpr Settings::LarsmMode defaultLarsmMode { + .modelMode = UnifiedModelMode::Commutation, .mode = LarsmModeMode::Mode4, .iterations = 100 }; diff --git a/src/screens.h b/src/screens.h index ca5094c..57ffa18 100644 --- a/src/screens.h +++ b/src/screens.h @@ -144,8 +144,7 @@ union X { WheelDiameterInchChangeScreen wheelDiameterInchChangeScreen; NumMagnetPolesChangeScreen numMagnetPolesChangeScreen; - DefaultModeCtrlTypChangeDisplay changeDefaultModeCtrlTyp; - DefaultModeCtrlModChangeDisplay changeDefaultModeCtrlMod; + DefaultModeModelModeChangeDisplay changeDefaultModeModelMode; DefaultModeSmoothingChangeDisplay changeDefaultModeSmoothing; DefaultModeFrontPercentageChangeDisplay changeDefaultModeFrontPercentage; DefaultModeBackPercentageChangeDisplay changeDefaultModeBackPercentage; @@ -155,9 +154,9 @@ union X { DefaultModeBrems1WertChangeDisplay changeDefaultModeBrems1Wert; DefaultModeBrems2WertChangeDisplay changeDefaultModeBrems2Wert; - TempomatModeCtrlTypChangeScreen changeManualModeCtrlTyp; - TempomatModeCtrlModChangeScreen changeManualModeCtrlMod; + TempomatModeModelModeChangeScreen changeManualModeModelMode; + LarsmModeModelModeChangeDisplay larsmModeModelModeChangeDisplay; LarsmModeModeChangeDisplay larsmModeModeChangeDisplay; LarsmModeIterationsChangeDisplay larsmModeIterationsChangeDisplay; @@ -285,8 +284,7 @@ template<> decltype(displays.wheelDiameterMmChangeScreen) & template<> decltype(displays.wheelDiameterInchChangeScreen) &getRefByType() { return displays.wheelDiameterInchChangeScreen; } template<> decltype(displays.numMagnetPolesChangeScreen) &getRefByType() { return displays.numMagnetPolesChangeScreen; } -template<> decltype(displays.changeDefaultModeCtrlTyp) &getRefByType() { return displays.changeDefaultModeCtrlTyp; } -template<> decltype(displays.changeDefaultModeCtrlMod) &getRefByType() { return displays.changeDefaultModeCtrlMod; } +template<> decltype(displays.changeDefaultModeModelMode) &getRefByType() { return displays.changeDefaultModeModelMode; } template<> decltype(displays.changeDefaultModeSmoothing) &getRefByType() { return displays.changeDefaultModeSmoothing; } template<> decltype(displays.changeDefaultModeFrontPercentage) &getRefByType() { return displays.changeDefaultModeFrontPercentage; } template<> decltype(displays.changeDefaultModeBackPercentage) &getRefByType() { return displays.changeDefaultModeBackPercentage; } @@ -296,9 +294,9 @@ template<> decltype(displays.changeDefaultModeGas2Wert) & template<> decltype(displays.changeDefaultModeBrems1Wert) &getRefByType() { return displays.changeDefaultModeBrems1Wert; } template<> decltype(displays.changeDefaultModeBrems2Wert) &getRefByType() { return displays.changeDefaultModeBrems2Wert; } -template<> decltype(displays.changeManualModeCtrlTyp) &getRefByType() { return displays.changeManualModeCtrlTyp; } -template<> decltype(displays.changeManualModeCtrlMod) &getRefByType() { return displays.changeManualModeCtrlMod; } +template<> decltype(displays.changeManualModeModelMode) &getRefByType() { return displays.changeManualModeModelMode; } +template<> decltype(displays.larsmModeModelModeChangeDisplay) &getRefByType() { return displays.larsmModeModelModeChangeDisplay; } template<> decltype(displays.larsmModeModeChangeDisplay) &getRefByType() { return displays.larsmModeModeChangeDisplay; } template<> decltype(displays.larsmModeIterationsChangeDisplay) &getRefByType() { return displays.larsmModeIterationsChangeDisplay; } diff --git a/src/settings.h b/src/settings.h index 836443d..629f9cb 100644 --- a/src/settings.h +++ b/src/settings.h @@ -5,6 +5,7 @@ #include "bobbycar-protocol/protocol.h" #include "bluetoothmode.h" +#include "unifiedmodelmode.h" namespace { enum class LarsmModeMode : uint8_t { Mode1, Mode2, Mode3, Mode4 }; @@ -50,8 +51,7 @@ struct Settings } boardcomputerHardware; struct DefaultMode { - ControlType ctrlTyp; - ControlMode ctrlMod; + UnifiedModelMode modelMode; bool enableSmoothing; int16_t smoothing; int16_t frontPercentage; @@ -64,11 +64,11 @@ struct Settings } defaultMode; struct TempomatMode { - ControlType ctrlTyp; - ControlMode ctrlMod; + UnifiedModelMode modelMode; } tempomatMode; struct LarsmMode { + UnifiedModelMode modelMode; LarsmModeMode mode; uint8_t iterations; } larsmMode; @@ -126,8 +126,7 @@ void Settings::executeForEverySetting(T &&callable) #endif callable("swapScreenBytes", boardcomputerHardware.swapScreenBytes); - callable("default.ctrlTyp", defaultMode.ctrlTyp); - callable("default.ctrlMod", defaultMode.ctrlMod); + callable("default.modelMo", defaultMode.modelMode); callable("default.enableS", defaultMode.enableSmoothing); callable("default.smoothi", defaultMode.smoothing); callable("default.frontPe", defaultMode.frontPercentage); @@ -138,9 +137,9 @@ void Settings::executeForEverySetting(T &&callable) callable("default.brems1_", defaultMode.brems1_wert); callable("default.brems2_", defaultMode.brems2_wert); - callable("tempoma.ctrlTyp", tempomatMode.ctrlTyp); - callable("tempomt.ctrlMod", tempomatMode.ctrlMod); + callable("tempoma.modelMo", tempomatMode.modelMode); + callable("larsm.modelMode", larsmMode.modelMode); callable("larsm.mode", larsmMode.mode); callable("larsm.iters", larsmMode.iterations); } diff --git a/src/settingsaccessors.h b/src/settingsaccessors.h index 6305b07..bb02a2e 100644 --- a/src/settingsaccessors.h +++ b/src/settingsaccessors.h @@ -70,8 +70,7 @@ struct GametrakDistMaxAccessor : public RefAccessorSaveSettings { int16 #endif struct SwapScreenBytesAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.boardcomputerHardware.swapScreenBytes; } }; -struct DefaultModeCtrlTypAccessor : public RefAccessorSaveSettings { ControlType &getRef() const override { return settings.defaultMode.ctrlTyp; } }; -struct DefaultModeCtrlModAccessor : public RefAccessorSaveSettings { ControlMode &getRef() const override { return settings.defaultMode.ctrlMod; } }; +struct DefaultModeModelModeAccessor : public RefAccessorSaveSettings { UnifiedModelMode &getRef() const override { return settings.defaultMode.modelMode; } }; struct DefaultModeEnableSmoothingAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.defaultMode.enableSmoothing; } }; struct DefaultModeSmoothingAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.defaultMode.smoothing; } }; struct DefaultModeFrontPercentageAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.defaultMode.frontPercentage; } }; @@ -82,9 +81,9 @@ struct DefaultModeGas2WertAccessor : public RefAccessorSaveSettings { i struct DefaultModeBrems1WertAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.defaultMode.brems1_wert; } }; struct DefaultModeBrems2WertAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.defaultMode.brems2_wert; } }; -struct TempomatModeCtrlTypAccessor : public RefAccessorSaveSettings { ControlType &getRef() const override { return settings.tempomatMode.ctrlTyp; } }; -struct TempomatModeCtrlModAccessor : public RefAccessorSaveSettings { ControlMode &getRef() const override { return settings.tempomatMode.ctrlMod; } }; +struct TempomatModeModelModeAccessor : public RefAccessorSaveSettings { UnifiedModelMode &getRef() const override { return settings.tempomatMode.modelMode; } }; +struct LarsmModeModelModeAccessor : public RefAccessorSaveSettings { UnifiedModelMode &getRef() const override { return settings.larsmMode.modelMode; } }; struct LarsmModeModeAccessor : public RefAccessorSaveSettings { LarsmModeMode &getRef() const override { return settings.larsmMode.mode; } }; struct LarsmModeIterationsAccessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return settings.larsmMode.iterations; } }; } diff --git a/src/settingssaver.h b/src/settingssaver.h index 71cf731..28b669e 100644 --- a/src/settingssaver.h +++ b/src/settingssaver.h @@ -8,6 +8,7 @@ #include "settings.h" #include "bluetoothmode.h" +#include "unifiedmodelmode.h" namespace { class SettingsSaver @@ -61,45 +62,53 @@ template<> struct nvsGetterHelper { static constexpr auto nvs_get = &n template<> struct nvsGetterHelper { static constexpr auto nvs_get = &nvs_get_i32; }; template<> struct nvsGetterHelper { static constexpr auto nvs_get = &nvs_get_u32; }; template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, bool* out_value) - { - uint8_t tempValue; - esp_err_t err = nvs_get_u8(handle, key, &tempValue); - if (err == ESP_OK) - *out_value = tempValue; - return err; - }}; +{ + uint8_t tempValue; + esp_err_t err = nvs_get_u8(handle, key, &tempValue); + if (err == ESP_OK) + *out_value = tempValue; + return err; +}}; template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, ControlType* out_value) - { - uint8_t tempValue; - esp_err_t err = nvs_get_u8(handle, key, &tempValue); - if (err == ESP_OK) - *out_value = ControlType(tempValue); - return err; - }}; +{ + uint8_t tempValue; + esp_err_t err = nvs_get_u8(handle, key, &tempValue); + if (err == ESP_OK) + *out_value = ControlType(tempValue); + return err; +}}; template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, ControlMode* out_value) - { - uint8_t tempValue; - esp_err_t err = nvs_get_u8(handle, key, &tempValue); - if (err == ESP_OK) - *out_value = ControlMode(tempValue); - return err; - }}; +{ + uint8_t tempValue; + esp_err_t err = nvs_get_u8(handle, key, &tempValue); + if (err == ESP_OK) + *out_value = ControlMode(tempValue); + return err; +}}; template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, LarsmModeMode* out_value) - { - uint8_t tempValue; - esp_err_t err = nvs_get_u8(handle, key, &tempValue); - if (err == ESP_OK) - *out_value = LarsmModeMode(tempValue); - return err; - }}; +{ + uint8_t tempValue; + esp_err_t err = nvs_get_u8(handle, key, &tempValue); + if (err == ESP_OK) + *out_value = LarsmModeMode(tempValue); + return err; +}}; template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, BluetoothMode* out_value) - { - uint8_t tempValue; - esp_err_t err = nvs_get_u8(handle, key, &tempValue); - if (err == ESP_OK) - *out_value = BluetoothMode(tempValue); - return err; - }}; +{ + uint8_t tempValue; + esp_err_t err = nvs_get_u8(handle, key, &tempValue); + if (err == ESP_OK) + *out_value = BluetoothMode(tempValue); + return err; +}}; +template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, UnifiedModelMode* out_value) +{ + uint8_t tempValue; + esp_err_t err = nvs_get_u8(handle, key, &tempValue); + if (err == ESP_OK) + *out_value = UnifiedModelMode(tempValue); + return err; +}}; bool SettingsSaver::load(Settings &settings) { @@ -127,21 +136,25 @@ template<> struct nvsSetterHelper { static constexpr auto nvs_set = &nv 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) - { - return nvs_set_u8(handle, key, uint8_t(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) - { - return nvs_set_u8(handle, key, uint8_t(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, LarsmModeMode value) - { - return nvs_set_u8(handle, key, uint8_t(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, BluetoothMode value) - { - return nvs_set_u8(handle, key, uint8_t(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, UnifiedModelMode value) +{ + return nvs_set_u8(handle, key, uint8_t(value)); +}}; bool SettingsSaver::save(Settings &settings) { diff --git a/src/texts.h b/src/texts.h index 5b45d93..523eff2 100644 --- a/src/texts.h +++ b/src/texts.h @@ -134,8 +134,7 @@ constexpr char TEXT_DYNAMICMENU[] = "Dynamic menu"; //DefaultModeSettingsMenu //constexpr char TEXT_DEFAULTMODESETTINGS[] = "Default mode settings"; -constexpr char TEXT_SETCONTROLTYPE[] = "Set control type"; -constexpr char TEXT_SETCONTROLMODE[] = "Set control mode"; +constexpr char TEXT_SETMODELMODE[] = "Set model mode"; constexpr char TEXT_ENABLESMOOTHING[] = "Enable smoothing"; constexpr char TEXT_SETSMOOTHING[] = "Set smoothing"; constexpr char TEXT_SETFRONTPERCENTAGE[] = "Set front percentage"; @@ -198,8 +197,9 @@ constexpr char TEXT_INVERTBACKRIGHT[] = "Invert back right"; //LarsmModeSettingsMenu constexpr char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings"; -constexpr char TEXT_LARSMMODECHANGEMODE[] = "Change mode"; -constexpr char TEXT_LARSMMODECHANGEITERATIONS[] = "Change iterations"; +//constexpr char TEXT_SETMODELMODE[] = "Set model mode"; +constexpr char TEXT_SETMODE[] = "Set mode"; +constexpr char TEXT_SETITERATIONS[] = "Set iterations"; //constexpr char TEXT_BACK[] = "Back"; //ModesSettingsMenu @@ -218,8 +218,7 @@ constexpr char TEXT_MOSFET2[] = "Mosfet2"; //TempomatModeSettingsMenu //constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; -//constexpr char TEXT_SETCONTROLTYPE[] = "Set control type"; -//constexpr char TEXT_SETCONTROLMODE[] = "Set control mode"; +//constexpr char TEXT_SETMODELMODE[] = "Set model mode"; //constexpr char TEXT_BACK[] = "Back"; //WiFiSettingsMenu @@ -256,7 +255,7 @@ constexpr char TEXT_MOSFETSOFFCONTROLLERHARDWARE[] = "MOSFETs off controller H/W constexpr char TEXT_SPINNERCONTROLLERHARDWARE[] = "Spinner controller H/W"; constexpr char TEXT_DEFAULTBOARDCOMPUTERHARDWARE[] = "Default boardcomputer H/W"; constexpr char TEXT_DEFAULTDEFAULTMODE[] = "Default defaultMode"; -constexpr char TEXT_SINUSODIALDEFAULTMODE[] = "Sinusodial defaultMode"; +constexpr char TEXT_SINUSOIDALDEFAULTMODE[] = "Sinusoidal defaultMode"; constexpr char TEXT_DEFAULTTEMPOMATMODE[] = "Default tempomatMode"; constexpr char TEXT_DEFAULTLARSMMODE[] = "Default larsmMode"; constexpr char TEXT_STREET[] = "Street"; @@ -302,6 +301,14 @@ constexpr char TEXT_LARSMMODE3[] = "Mode3"; constexpr char TEXT_LARSMMODE4[] = "Mode4"; //constexpr char TEXT_BACK[] = "Back"; +//ChangeValueDisplay +//constexpr char TEXT_COMMUTATION[] = "Commutation"; +//constexpr char TEXT_SINUSOIDAL[] = "Sinusoidal"; +constexpr char TEXT_FOCVOLTAGE[] = "FOC/Voltage"; +constexpr char TEXT_FOCSPEED[] = "FOC/Speed"; +constexpr char TEXT_FOCTORQUE[] = "FOC/Torque"; +//constexpr char TEXT_BACK[] = "Back"; + //ChangeValueDisplay constexpr char TEXT_WIFI_MODE_NULL[] = "WIFI_MODE_NULL"; constexpr char TEXT_WIFI_MODE_STA[] = "WIFI_MODE_STA"; diff --git a/src/unifiedmodelmode.h b/src/unifiedmodelmode.h new file mode 100644 index 0000000..8aae672 --- /dev/null +++ b/src/unifiedmodelmode.h @@ -0,0 +1,34 @@ +#pragma once + +#include + +#include + +#include "bobbycar-protocol/protocol.h" + +namespace { +enum class UnifiedModelMode : uint8_t +{ + Commutation, + Sinusoidal, + FocVoltage, + FocSpeed, + FocTorque +}; + +std::pair split(UnifiedModelMode mode) +{ + switch (mode) + { + case UnifiedModelMode::Commutation: return std::make_pair(ControlType::Commutation, ControlMode::Voltage); + case UnifiedModelMode::Sinusoidal: return std::make_pair(ControlType::Sinusoidal, ControlMode::Voltage); + case UnifiedModelMode::FocVoltage: return std::make_pair(ControlType::FieldOrientedControl, ControlMode::Voltage); + case UnifiedModelMode::FocSpeed: return std::make_pair(ControlType::FieldOrientedControl, ControlMode::Speed); + case UnifiedModelMode::FocTorque: return std::make_pair(ControlType::FieldOrientedControl, ControlMode::Torque); + } + + Serial.printf("Unknown UnifiedModelMode: %i\r\n", int(mode)); + + return std::make_pair(ControlType::FieldOrientedControl, ControlMode::OpenMode); +} +}