diff --git a/platformio.ini b/platformio.ini index 5d39398..4265ec0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -55,6 +55,7 @@ build_flags = -DSPI_FREQUENCY=27000000 -DSPI_READ_FREQUENCY=20000000 -DSPI_TOUCH_FREQUENCY=2500000 + -DDEFAULT_SWAPSCREENBYTES=false -DPINS_RX1=4 -DPINS_TX1=5 -DPINS_RX2=25 @@ -132,6 +133,7 @@ build_flags = -DSPI_FREQUENCY=27000000 -DSPI_READ_FREQUENCY=20000000 -DSPI_TOUCH_FREQUENCY=2500000 + -DDEFAULT_SWAPSCREENBYTES=false -DPINS_RX1=18 -DPINS_TX1=19 -DPINS_RX2=23 @@ -182,6 +184,7 @@ build_flags = -DTOUCH_CS=22 -DSPI_FREQUENCY=20000000 -DSPI_TOUCH_FREQUENCY=2500000 + -DDEFAULT_SWAPSCREENBYTES=false ; TODO: actually assign pins -DPINS_RX1=22 -DPINS_TX1=25 diff --git a/src/displays/calibratedisplay.h b/src/displays/calibratedisplay.h index 717f45f..7b93b7a 100644 --- a/src/displays/calibratedisplay.h +++ b/src/displays/calibratedisplay.h @@ -14,7 +14,7 @@ namespace { class StatusDisplay; -class PotiSettingsMenu; +class BoardcomputerHardwareSettingsMenu; } namespace { @@ -102,6 +102,6 @@ void CalibrateDisplay::triggered() if (m_bootup) switchScreen(); else - switchScreen(); + switchScreen(); } } diff --git a/src/displays/menus/potisettingsmenu.h b/src/displays/menus/boardcomputerhardwaresettingsmenu.h similarity index 77% rename from src/displays/menus/potisettingsmenu.h rename to src/displays/menus/boardcomputerhardwaresettingsmenu.h index d570e58..79548b7 100644 --- a/src/displays/menus/potisettingsmenu.h +++ b/src/displays/menus/boardcomputerhardwaresettingsmenu.h @@ -6,14 +6,16 @@ #include "changevaluedisplay.h" #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" +#include "actions/toggleboolaction.h" #include "icons/back.h" +#include "checkboxicon.h" #include "texts.h" #include "settingsaccessors.h" namespace { -class PotiSettingsMenu; +class BoardcomputerHardwareSettingsMenu; class CalibrateDisplay; -class HardwareSettingsMenu; +class SettingsMenu; } namespace { @@ -26,15 +28,15 @@ public: String text() const override { return String{"brems: "} + raw_brems + ": " + brems; } }; -using SampleCountChangeScreen = makeComponent, StaticText, SampleCountAccessor, SwitchScreenAction>; -using GasMinChangeScreen = makeComponent, StaticText, GasMinAccessor, SwitchScreenAction>; -using GasMaxChangeScreen = makeComponent, StaticText, GasMaxAccessor, SwitchScreenAction>; -using BremsMinChangeScreen = makeComponent, StaticText, BremsMinAccessor, SwitchScreenAction>; -using BremsMaxChangeScreen = makeComponent, StaticText, BremsMaxAccessor, SwitchScreenAction>; +using SampleCountChangeScreen = makeComponent, StaticText, SampleCountAccessor, SwitchScreenAction>; +using GasMinChangeScreen = makeComponent, StaticText, GasMinAccessor, SwitchScreenAction>; +using GasMaxChangeScreen = makeComponent, StaticText, GasMaxAccessor, SwitchScreenAction>; +using BremsMinChangeScreen = makeComponent, StaticText, BremsMinAccessor, SwitchScreenAction>; +using BremsMaxChangeScreen = makeComponent, StaticText, BremsMaxAccessor, SwitchScreenAction>; -class PotiSettingsMenu : +class BoardcomputerHardwareSettingsMenu : public MenuDisplay, - public StaticText, + public StaticText, public StaticMenuDefinition< makeComponent, DummyAction>, makeComponent, DummyAction>, @@ -44,7 +46,8 @@ class PotiSettingsMenu : makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + makeComponent, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; } diff --git a/src/displays/menus/hardwaresettingsmenu.h b/src/displays/menus/controllerhardwaresettingsmenu.h similarity index 82% rename from src/displays/menus/hardwaresettingsmenu.h rename to src/displays/menus/controllerhardwaresettingsmenu.h index feb13cb..599a359 100644 --- a/src/displays/menus/hardwaresettingsmenu.h +++ b/src/displays/menus/controllerhardwaresettingsmenu.h @@ -15,25 +15,24 @@ #include "settingsaccessors.h" namespace { -class HardwareSettingsMenu; -class PotiSettingsMenu; +class ControllerHardwareSettingsMenu; +class BoardcomputerHardwareSettingsMenu; class EnableMenu; class InvertMenu; class SettingsMenu; } namespace { -using WheelDiameterMmChangeScreen = makeComponent, StaticText, WheelDiameterMmAccessor, SwitchScreenAction>; -using WheelDiameterInchChangeScreen = makeComponent, StaticText, WheelDiameterInchAccessor, RatioNumberStep>, SwitchScreenAction>; -using NumMagnetPolesChangeScreen = makeComponent, StaticText, NumMagnetPolesAccessor, SwitchScreenAction>; +using WheelDiameterMmChangeScreen = makeComponent, StaticText, WheelDiameterMmAccessor, SwitchScreenAction>; +using WheelDiameterInchChangeScreen = makeComponent, StaticText, WheelDiameterInchAccessor, RatioNumberStep>, SwitchScreenAction>; +using NumMagnetPolesChangeScreen = makeComponent, StaticText, NumMagnetPolesAccessor, SwitchScreenAction>; -class HardwareSettingsMenu : +class ControllerHardwareSettingsMenu : public MenuDisplay, - public StaticText, + public StaticText, public StaticMenuDefinition< makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, diff --git a/src/displays/menus/enablemenu.h b/src/displays/menus/enablemenu.h index c06f163..82504da 100644 --- a/src/displays/menus/enablemenu.h +++ b/src/displays/menus/enablemenu.h @@ -12,7 +12,7 @@ #include "settingsaccessors.h" namespace { -class HardwareSettingsMenu; +class ControllerHardwareSettingsMenu; } namespace { @@ -24,7 +24,7 @@ class EnableMenu : makeComponent, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>, makeComponent, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>, makeComponent, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; } diff --git a/src/displays/menus/invertmenu.h b/src/displays/menus/invertmenu.h index 244cf0d..286f204 100644 --- a/src/displays/menus/invertmenu.h +++ b/src/displays/menus/invertmenu.h @@ -12,7 +12,7 @@ #include "settingsaccessors.h" namespace { -class HardwareSettingsMenu; +class ControllerHardwareSettingsMenu; } namespace { @@ -24,7 +24,7 @@ class InvertMenu : makeComponent, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>, makeComponent, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>, makeComponent, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; } diff --git a/src/displays/menus/presetsmenu.h b/src/displays/menus/presetsmenu.h index 80dd806..35db7e4 100644 --- a/src/displays/menus/presetsmenu.h +++ b/src/displays/menus/presetsmenu.h @@ -23,26 +23,26 @@ class ApplyPresetAction : public virtual ActionInterface {public: void triggered template class ApplyLimitsPresetAction : public virtual ActionInterface {public: void triggered() override { settings.limits = *preset; saveSettings(); } }; -template -class ApplyPotiPresetAction : public virtual ActionInterface {public: void triggered() override { settings.hardware.poti = *preset; saveSettings(); } }; +template +class ApplyControllerHardwarePresetAction : public virtual ActionInterface {public: void triggered() override { settings.controllerHardware = *preset; saveSettings(); } }; -template -class ApplyHardwarePresetAction : public virtual ActionInterface {public: void triggered() override { settings.hardware = *preset; saveSettings(); } }; +template +class ApplyBoardcomputerHardwarePresetAction : public virtual ActionInterface {public: void triggered() override { settings.boardcomputerHardware = *preset; saveSettings(); } }; class PresetsMenu : public MenuDisplay, public StaticText, public StaticMenuDefinition< - makeComponent, ApplyPresetAction<&presets::defaultSettings>>, - makeComponent, ApplyLimitsPresetAction<&presets::defaultLimits>>, - makeComponent, ApplyLimitsPresetAction<&presets::kidsLimits>>, - makeComponent, ApplyPotiPresetAction<&presets::defaultPoti>>, - makeComponent, ApplyHardwarePresetAction<&presets::defaultHardware>>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + makeComponent, ApplyPresetAction<&presets::defaultSettings>>, + makeComponent, ApplyLimitsPresetAction<&presets::defaultLimits>>, + makeComponent, ApplyLimitsPresetAction<&presets::kidsLimits>>, + makeComponent, ApplyControllerHardwarePresetAction<&presets::defaultControllerHardware>>, + makeComponent, ApplyBoardcomputerHardwarePresetAction<&presets::defaultBoardcomputerHardware>>, + makeComponent, DisabledColor, DummyAction>, + makeComponent, DisabledColor, DummyAction>, + makeComponent, DisabledColor, DummyAction>, + makeComponent, DisabledColor, DummyAction>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; } diff --git a/src/displays/menus/settingsmenu.h b/src/displays/menus/settingsmenu.h index 26a3bf8..12c8e2f 100644 --- a/src/displays/menus/settingsmenu.h +++ b/src/displays/menus/settingsmenu.h @@ -23,7 +23,8 @@ class LimitsSettingsMenu; class WifiSettingsMenu; class BluetoothSettingsMenu; class ModesSettingsMenu; -class HardwareSettingsMenu; +class ControllerHardwareSettingsMenu; +class BoardcomputerHardwareSettingsMenu; class BuzzerMenu; class AboutMenu; class MainMenu; @@ -37,17 +38,18 @@ class SettingsMenu : public MenuDisplay, public StaticText, public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::wifi>>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::bluetooth>>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>, - makeComponent, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::buzzer>>, - makeComponent, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, BackLedAccessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::info>>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::wifi>>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::bluetooth>>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>, + makeComponent, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::buzzer>>, + makeComponent, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>, + makeComponent, ToggleBoolAction, CheckboxIcon, BackLedAccessor>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::info>>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; } diff --git a/src/displays/statusdisplay.h b/src/displays/statusdisplay.h index a221b41..154e382 100644 --- a/src/displays/statusdisplay.h +++ b/src/displays/statusdisplay.h @@ -224,9 +224,9 @@ void StatusDisplay::BoardStatus::drawWarning() tft.drawString("No data!", 60, m_y+50, 4); tft.setTextColor(TFT_WHITE, TFT_BLACK); - tft.setSwapBytes(true); + tft.setSwapBytes(!settings.boardcomputerHardware.swapScreenBytes); tft.pushImage(10, m_y+40, icons::alert.WIDTH, icons::alert.HEIGHT, icons::alert.buffer); - tft.setSwapBytes(false); + tft.setSwapBytes(settings.boardcomputerHardware.swapScreenBytes); } void StatusDisplay::BoardStatus::MotorStatus::start() diff --git a/src/globals.h b/src/globals.h index d810b1c..cfc4932 100644 --- a/src/globals.h +++ b/src/globals.h @@ -23,8 +23,8 @@ float avgSpeed, avgSpeedKmh, sumCurrent, sumAbsoluteCurrent; Settings settings; SettingsSaver settingsSaver; -Controller front{Serial1, settings.hardware.enableFrontLeft, settings.hardware.enableFrontRight, settings.hardware.invertFrontLeft, settings.hardware.invertFrontRight}; -Controller back{Serial2, settings.hardware.enableBackLeft, settings.hardware.enableBackRight, settings.hardware.invertBackLeft, settings.hardware.invertBackRight}; +Controller front{Serial1, settings.controllerHardware.enableFrontLeft, settings.controllerHardware.enableFrontRight, settings.controllerHardware.invertFrontLeft, settings.controllerHardware.invertFrontRight}; +Controller back{Serial2, settings.controllerHardware.enableBackLeft, settings.controllerHardware.enableBackRight, settings.controllerHardware.invertBackLeft, settings.controllerHardware.invertBackRight}; struct { unsigned long lastTime = millis(); diff --git a/src/menudisplay.h b/src/menudisplay.h index a7e526d..37e61eb 100644 --- a/src/menudisplay.h +++ b/src/menudisplay.h @@ -191,9 +191,9 @@ void MenuDisplay::redraw() auto icon = item.icon(); if (icon) { - tft.setSwapBytes(true); + tft.setSwapBytes(!settings.boardcomputerHardware.swapScreenBytes); tft.pushImage(6, labelsIter->y()+1, icon->WIDTH, icon->HEIGHT, icon->buffer); - tft.setSwapBytes(false); + tft.setSwapBytes(settings.boardcomputerHardware.swapScreenBytes); } *iconsIter = icon; } diff --git a/src/presets.h b/src/presets.h index 9b70d3b..0a7530b 100644 --- a/src/presets.h +++ b/src/presets.h @@ -18,15 +18,7 @@ constexpr Settings::Limits kidsLimits { .phaseAdvMax = 20 }; -constexpr Settings::Hardware::Poti defaultPoti { - .sampleCount = 100, - .gasMin = DEFAULT_GASMIN, - .gasMax = DEFAULT_GASMAX, - .bremsMin = DEFAULT_BREMSMIN, - .bremsMax = DEFAULT_BREMSMAX -}; - -constexpr Settings::Hardware defaultHardware { +constexpr Settings::ControllerHardware defaultControllerHardware { .enableFrontLeft = true, .enableFrontRight = true, .enableBackLeft = true, @@ -37,13 +29,20 @@ constexpr Settings::Hardware defaultHardware { .invertBackLeft = false, .invertBackRight = true, - .poti = defaultPoti, - .wheelDiameter = 165, .numMagnetPoles = 15, .swapFrontBack = false }; +constexpr Settings::BoardcomputerHardware defaultBoardcomputerHardware { + .sampleCount = 100, + .gasMin = DEFAULT_GASMIN, + .gasMax = DEFAULT_GASMAX, + .bremsMin = DEFAULT_BREMSMIN, + .bremsMax = DEFAULT_BREMSMAX, + .swapScreenBytes = DEFAULT_SWAPSCREENBYTES +}; + constexpr Settings::DefaultMode defaultDefaultMode { .ctrlTyp = ControlType::FieldOrientedControl, .ctrlMod = ControlMode::Torque, @@ -76,7 +75,8 @@ constexpr Settings defaultSettings{ .reverseBeepDuration0 = 500, .reverseBeepDuration1 = 500, .limits = defaultLimits, - .hardware = defaultHardware, + .controllerHardware = defaultControllerHardware, + .boardcomputerHardware = defaultBoardcomputerHardware, .defaultMode = defaultDefaultMode, .tempomatMode = defaultTempomatMode, .larsmMode = defaultLarsmMode diff --git a/src/screens.h b/src/screens.h index 0a9e58d..ac9fe46 100644 --- a/src/screens.h +++ b/src/screens.h @@ -14,7 +14,7 @@ #include "displays/menus/feedbackdebugmenu.h" #include "displays/menus/genericwifisettingsmenu.h" #include "displays/menus/graphsmenu.h" -#include "displays/menus/hardwaresettingsmenu.h" +#include "displays/menus/controllerhardwaresettingsmenu.h" #include "displays/menus/invertmenu.h" #include "displays/menus/larsmmodesettingsmenu.h" #include "displays/menus/limitssettingsmenu.h" @@ -24,7 +24,7 @@ #include "displays/menus/motorfeedbackdebugmenu.h" #include "displays/menus/motorstatedebugmenu.h" #include "displays/menus/presetsmenu.h" -#include "displays/menus/potisettingsmenu.h" +#include "displays/menus/boardcomputerhardwaresettingsmenu.h" #include "displays/menus/selectmodemenu.h" #include "displays/menus/settingsmenu.h" #include "displays/menus/stationwifisettingsmenu.h" @@ -59,6 +59,7 @@ union X { BuzzerMenu buzzerMenu; FrontCommandDebugMenu frontCommandDebugMenu; BackCommandDebugMenu backCommandDebugMenu; + ControllerHardwareSettingsMenu controllerHardwareSettingsMenu; DebugMenu debugMenu; DefaultModeSettingsMenu defaultModeSettingsMenu; DemosMenu demosMenu; @@ -68,7 +69,6 @@ union X { BackFeedbackDebugMenu backFeedbackDebugMenu; GenericWifiSettingsMenu genericWifiSettingsMenu; GraphsMenu graphsMenu; - HardwareSettingsMenu hardwareSettingsMenu; InvertMenu invertMenu; LarsmModeSettingsMenu larsmModeSettingsMenu; LimitsSettingsMenu limitsSettingsMenu; @@ -83,7 +83,7 @@ union X { FrontRightMotorFeedbackDebugMenu frontRightMotorFeedbackDebugMenu; BackLeftMotorFeedbackDebugMenu backLeftMotorFeedbackDebugMenu; BackRightMotorFeedbackDebugMenu backRightMotorFeedbackDebugMenu; - PotiSettingsMenu potiSettingsMenu; + BoardcomputerHardwareSettingsMenu boardcomputerHardwareSettingsMenu; PresetsMenu presetsMenu; SelectModeMenu selectModeMenu; SettingsMenu settingsMenu; @@ -171,6 +171,8 @@ template<> decltype(displays.accessPointWifiSettingsMenu) & template<> decltype(displays.bluetoothSettingsMenu) &getRefByType() { return displays.bluetoothSettingsMenu; } template<> decltype(displays.bmsMenu) &getRefByType() { return displays.bmsMenu; } template<> decltype(displays.buzzerMenu) &getRefByType() { return displays.buzzerMenu; } +template<> decltype(displays.boardcomputerHardwareSettingsMenu) &getRefByType() { return displays.boardcomputerHardwareSettingsMenu; } +template<> decltype(displays.controllerHardwareSettingsMenu) &getRefByType() { return displays.controllerHardwareSettingsMenu; } template<> decltype(displays.frontCommandDebugMenu) &getRefByType() { return displays.frontCommandDebugMenu; } template<> decltype(displays.backCommandDebugMenu) &getRefByType() { return displays.backCommandDebugMenu; } template<> decltype(displays.debugMenu) &getRefByType() { return displays.debugMenu; } @@ -182,7 +184,6 @@ template<> decltype(displays.frontFeedbackDebugMenu) & template<> decltype(displays.backFeedbackDebugMenu) &getRefByType() { return displays.backFeedbackDebugMenu; } template<> decltype(displays.genericWifiSettingsMenu) &getRefByType() { return displays.genericWifiSettingsMenu; } template<> decltype(displays.graphsMenu) &getRefByType() { return displays.graphsMenu; } -template<> decltype(displays.hardwareSettingsMenu) &getRefByType() { return displays.hardwareSettingsMenu; } template<> decltype(displays.invertMenu) &getRefByType() { return displays.invertMenu; } template<> decltype(displays.larsmModeSettingsMenu) &getRefByType() { return displays.larsmModeSettingsMenu; } template<> decltype(displays.limitsSettingsMenu) &getRefByType() { return displays.limitsSettingsMenu; } @@ -197,7 +198,6 @@ template<> decltype(displays.frontLeftMotorFeedbackDebugMenu) & template<> decltype(displays.frontRightMotorFeedbackDebugMenu) &getRefByType() { return displays.frontRightMotorFeedbackDebugMenu; } template<> decltype(displays.backLeftMotorFeedbackDebugMenu) &getRefByType() { return displays.backLeftMotorFeedbackDebugMenu; } template<> decltype(displays.backRightMotorFeedbackDebugMenu) &getRefByType() { return displays.backRightMotorFeedbackDebugMenu; } -template<> decltype(displays.potiSettingsMenu) &getRefByType() { return displays.potiSettingsMenu; } template<> decltype(displays.presetsMenu) &getRefByType() { return displays.presetsMenu; } template<> decltype(displays.selectModeMenu) &getRefByType() { return displays.selectModeMenu; } template<> decltype(displays.settingsMenu) &getRefByType() { return displays.settingsMenu; } @@ -372,6 +372,9 @@ void updateDisplay() void redrawDisplay() { if (currentDisplay) + { + tft.setSwapBytes(settings.boardcomputerHardware.swapScreenBytes); currentDisplay->redraw(); + } } } diff --git a/src/settings.h b/src/settings.h index 525c5ad..079ab13 100644 --- a/src/settings.h +++ b/src/settings.h @@ -24,19 +24,20 @@ struct Settings int16_t phaseAdvMax; // [deg] Maximum Phase Advance angle (only for SIN). Higher angle results in higher maximum speed. } limits; - struct Hardware { + struct ControllerHardware { bool enableFrontLeft, enableFrontRight, enableBackLeft, enableBackRight; bool invertFrontLeft, invertFrontRight, invertBackLeft, invertBackRight; - struct Poti { - int16_t sampleCount; - int16_t gasMin, gasMax, bremsMin, bremsMax; - } poti; - int16_t wheelDiameter; // in mm int16_t numMagnetPoles; // virtual RPM per one real RPM bool swapFrontBack; - } hardware; + } controllerHardware; + + struct BoardcomputerHardware { + int16_t sampleCount; + int16_t gasMin, gasMax, bremsMin, bremsMax; + bool swapScreenBytes; + } boardcomputerHardware; struct DefaultMode { ControlType ctrlTyp; @@ -83,23 +84,24 @@ void Settings::executeForEverySetting(T &&callable) callable("fieldWeakMax", limits.fieldWeakMax); callable("phaseAdvMax", limits.phaseAdvMax); - callable("enableFrontLeft", hardware.enableFrontLeft); - callable("enableFrontRigh", hardware.enableFrontRight); - callable("enableBackLeft", hardware.enableBackLeft); - callable("enableBackRight", hardware.enableBackRight); + callable("enableFrontLeft", controllerHardware.enableFrontLeft); + callable("enableFrontRigh", controllerHardware.enableFrontRight); + callable("enableBackLeft", controllerHardware.enableBackLeft); + callable("enableBackRight", controllerHardware.enableBackRight); - callable("invertFrontLeft", hardware.invertFrontLeft); - callable("invertFrontRigh", hardware.invertFrontRight); - callable("invertBackLeft", hardware.invertBackLeft); - callable("invertBackRight", hardware.invertBackRight); + callable("invertFrontLeft", controllerHardware.invertFrontLeft); + callable("invertFrontRigh", controllerHardware.invertFrontRight); + callable("invertBackLeft", controllerHardware.invertBackLeft); + callable("invertBackRight", controllerHardware.invertBackRight); - callable("sampleCount", hardware.poti.sampleCount); - callable("gasMin", hardware.poti.gasMin); - callable("gasMax", hardware.poti.gasMax); - callable("bremsMin", hardware.poti.bremsMin); - callable("bremsMax", hardware.poti.bremsMax); + callable("swapFrontBack", controllerHardware.swapFrontBack); - callable("swapFrontBack", hardware.swapFrontBack); + callable("sampleCount", boardcomputerHardware.sampleCount); + callable("gasMin", boardcomputerHardware.gasMin); + callable("gasMax", boardcomputerHardware.gasMax); + callable("bremsMin", boardcomputerHardware.bremsMin); + callable("bremsMax", boardcomputerHardware.bremsMax); + callable("swapScreenBytes", boardcomputerHardware.swapScreenBytes); callable("default.ctrlTyp", defaultMode.ctrlTyp); callable("default.ctrlMod", defaultMode.ctrlMod); diff --git a/src/settingsaccessors.h b/src/settingsaccessors.h index 18452af..3587046 100644 --- a/src/settingsaccessors.h +++ b/src/settingsaccessors.h @@ -30,34 +30,35 @@ struct NMotMaxRpmAccessor : public RefAccessorSaveSettings { int16_t &g struct FieldWeakMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.limits.fieldWeakMax; } }; struct PhaseAdvMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.limits.phaseAdvMax; } }; -struct FrontLeftEnabledAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.hardware.enableFrontLeft; } }; -struct FrontRightEnabledAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.hardware.enableFrontRight; } }; -struct BackLeftEnabledAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.hardware.enableBackLeft; } }; -struct BackRightEnabledAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.hardware.enableBackRight; } }; +struct FrontLeftEnabledAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.controllerHardware.enableFrontLeft; } }; +struct FrontRightEnabledAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.controllerHardware.enableFrontRight; } }; +struct BackLeftEnabledAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.controllerHardware.enableBackLeft; } }; +struct BackRightEnabledAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.controllerHardware.enableBackRight; } }; -struct FrontLeftInvertedAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.hardware.invertFrontLeft; } }; -struct FrontRightInvertedAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.hardware.invertFrontRight; } }; -struct BackLeftInvertedAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.hardware.invertBackLeft; } }; -struct BackRightInvertedAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.hardware.invertBackRight; } }; +struct FrontLeftInvertedAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.controllerHardware.invertFrontLeft; } }; +struct FrontRightInvertedAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.controllerHardware.invertFrontRight; } }; +struct BackLeftInvertedAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.controllerHardware.invertBackLeft; } }; +struct BackRightInvertedAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.controllerHardware.invertBackRight; } }; -struct SampleCountAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.hardware.poti.sampleCount; } }; -struct GasMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.hardware.poti.gasMin; } }; -struct GasMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.hardware.poti.gasMax; } }; -struct BremsMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.hardware.poti.bremsMin; } }; -struct BremsMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.hardware.poti.bremsMax; } }; - -struct WheelDiameterMmAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.hardware.wheelDiameter; } }; +struct WheelDiameterMmAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.controllerHardware.wheelDiameter; } }; struct WheelDiameterInchAccessor : public virtual AccessorInterface { - float getValue() const override { return convertToInch(settings.hardware.wheelDiameter); } - void setValue(float value) override { settings.hardware.wheelDiameter = convertFromInch(value); saveSettings(); } + float getValue() const override { return convertToInch(settings.controllerHardware.wheelDiameter); } + void setValue(float value) override { settings.controllerHardware.wheelDiameter = convertFromInch(value); saveSettings(); } }; -struct NumMagnetPolesAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.hardware.numMagnetPoles; } }; +struct NumMagnetPolesAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.controllerHardware.numMagnetPoles; } }; struct SwapFrontBackAccessor : public RefAccessorSaveSettings { - bool &getRef() const override { return settings.hardware.swapFrontBack; } + bool &getRef() const override { return settings.controllerHardware.swapFrontBack; } void setValue(bool value) override { RefAccessorSaveSettings::setValue(value); updateSwapFrontBack(); }; }; +struct SampleCountAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.sampleCount; } }; +struct GasMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gasMin; } }; +struct GasMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gasMax; } }; +struct BremsMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMin; } }; +struct BremsMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMax; } }; +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 DefaultModeEnableSmoothingAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.defaultMode.enableSmoothing; } }; diff --git a/src/texts.h b/src/texts.h index f27b52e..93b17ec 100644 --- a/src/texts.h +++ b/src/texts.h @@ -66,7 +66,8 @@ constexpr char TEXT_LIMITSSETTINGS[] = "Limits settings"; constexpr char TEXT_WIFISETTINGS[] = "WiFi settings"; //constexpr char TEXT_BLUETOOTHSETTINGS[] = "Bluetooth settings"; constexpr char TEXT_MODESSETTINGS[] = "Modes settings"; -constexpr char TEXT_HARDWARESETTINGS[] = "Hardware settings"; +constexpr char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings"; +constexpr char TEXT_BOARDCOMPUTERHARDWARESETTINGS[] = "Boardcomputer H/W settings"; constexpr char TEXT_AUTOCONNECTBMS[] = "Auto connect BMS"; constexpr char TEXT_BUZZER[] = "Buzzer"; constexpr char TEXT_FRONTLED[] = "Front LED"; @@ -74,14 +75,13 @@ constexpr char TEXT_BACKLED[] = "Back LED"; //constexpr char TEXT_ABOUT[] = "About"; //constexpr char TEXT_BACK[] = "Back"; -//HardwareSettings -//constexpr char TEXT_HARDWARESETTINGS[] = "Hardware settings"; +//ControllerHardwareSettings +//constexpr char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings"; constexpr char TEXT_WHEELDIAMETERMM[] = "Wheel diameter (mm)"; constexpr char TEXT_WHEELDIAMETERINCH[] = "Wheel diameter (inch)"; constexpr char TEXT_NUMMAGNETPOLES[] = "Num magnet poles"; constexpr char TEXT_SETENABLED[] = "Set enabled"; constexpr char TEXT_SETINVERTED[] = "Set inverted"; -constexpr char TEXT_POTISETTINGS[] = "Poti settings"; constexpr char TEXT_SWAPFRONTBACK[] = "Swap front/back"; //constexpr char TEXT_BACK[] = "Back"; @@ -215,14 +215,15 @@ constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; //constexpr char TEXT_GENERICWIFISETTINGS[] = "Generic WiFi settings"; //constexpr char TEXT_BACK[] = "Back"; -//PotiSettingsMenu -//constexpr char TEXT_POTISETTINGS[] = "Poti settings"; +//BoardcomputerHardwareSettingsMenu +//constexpr char TEXT_BOARDCOMPUTERHARDWARESETTINGS[] = "Boardcomputer H/W settings"; +constexpr char TEXT_CALIBRATE[] = "Calibrate"; constexpr char TEXT_SETSAMPLECOUNT[] = "Set sampleCount"; constexpr char TEXT_SETGASMIN[] = "Set gasMin"; constexpr char TEXT_SETGASMAX[] = "Set gasMax"; constexpr char TEXT_SETBREMSMIN[] = "Set bremsMin"; constexpr char TEXT_SETBREMSMAX[] = "Set bremsMax"; -constexpr char TEXT_CALIBRATE[] = "Calibrate"; +constexpr char TEXT_SWAPSCREENBYTES[] = "Swap screen bytes"; //constexpr char TEXT_BACK[] = "Back"; //PresetsMenu @@ -231,7 +232,8 @@ constexpr char TEXT_DEFAULTEVERYTHING[] = "Default everything"; constexpr char TEXT_DEFAULTLIMITS[] = "Default limits"; constexpr char TEXT_KIDSLIMITS[] = "Kids limits"; constexpr char TEXT_DEFAULTPOTI[] = "Default poti"; -constexpr char TEXT_DEFAULTHARDWARE[] = "Default hardware"; +constexpr char TEXT_DEFAULTCONTROLLERHARDWARE[] = "Default controller H/W"; +constexpr char TEXT_DEFAULTBOARDCOMPUTERHARDWARE[] = "Default boardcomputer H/W"; constexpr char TEXT_STREET[] = "Street"; constexpr char TEXT_SIDEWALK[] = "Sidewalk"; constexpr char TEXT_POLICE[] = "Police"; diff --git a/src/utils.h b/src/utils.h index b0fc43d..6b6135c 100644 --- a/src/utils.h +++ b/src/utils.h @@ -30,12 +30,12 @@ T scaleBetween(T x, T in_min, T in_max, T out_min, T out_max) { float convertToKmh(float val) { - return val /* / settings.hardware.numMagnetPoles */ / 60.f * settings.hardware.wheelDiameter / 1000.f * 3.14159265359f * 3.6f; + return val /* / settings.controllerHardware.numMagnetPoles */ / 60.f * settings.controllerHardware.wheelDiameter / 1000.f * 3.14159265359f * 3.6f; } float convertFromKmh(float val) { - return val /* * settings.hardware.numMagnetPoles */ * 60.f / settings.hardware.wheelDiameter * 1000.f / 3.14159265359f / 3.6f; + return val /* * settings.controllerHardware.numMagnetPoles */ * 60.f / settings.controllerHardware.wheelDiameter * 1000.f / 3.14159265359f / 3.6f; } float convertToInch(float val) @@ -220,18 +220,18 @@ void fixCommonParams() currentlyReverseBeeping = false; } - front.command.left.enable = settings.hardware.enableFrontLeft; - front.command.right.enable = settings.hardware.enableFrontRight; - back.command.left.enable = settings.hardware.enableBackLeft; - back.command.right.enable = settings.hardware.enableBackRight; + front.command.left.enable = settings.controllerHardware.enableFrontLeft; + front.command.right.enable = settings.controllerHardware.enableFrontRight; + back.command.left.enable = settings.controllerHardware.enableBackLeft; + back.command.right.enable = settings.controllerHardware.enableBackRight; - if (settings.hardware.invertFrontLeft) + if (settings.controllerHardware.invertFrontLeft) front.command.left.pwm = -front.command.left.pwm; - if (settings.hardware.invertFrontRight) + if (settings.controllerHardware.invertFrontRight) front.command.right.pwm = -front.command.right.pwm; - if (settings.hardware.invertBackLeft) + if (settings.controllerHardware.invertBackLeft) back.command.left.pwm = -back.command.left.pwm; - if (settings.hardware.invertBackRight) + if (settings.controllerHardware.invertBackRight) back.command.right.pwm = -back.command.right.pwm; } @@ -250,8 +250,8 @@ void switchScreen(Args&&... args); void updateSwapFrontBack() { - front.serial = settings.hardware.swapFrontBack ? Serial2 : Serial1; - back.serial = settings.hardware.swapFrontBack ? Serial1 : Serial2; + front.serial = settings.controllerHardware.swapFrontBack ? Serial2 : Serial1; + back.serial = settings.controllerHardware.swapFrontBack ? Serial1 : Serial2; } void loadSettings() @@ -305,15 +305,15 @@ void readPotis() const auto sampleMultipleTimes = [](int pin){ analogRead(pin); double sum{}; - for (int i = 0; i < settings.hardware.poti.sampleCount; i++) + for (int i = 0; i < settings.boardcomputerHardware.sampleCount; i++) sum += analogRead(pin); - return sum/settings.hardware.poti.sampleCount; + return sum/settings.boardcomputerHardware.sampleCount; }; raw_gas = sampleMultipleTimes(PINS_GAS); - gas = scaleBetween(raw_gas, settings.hardware.poti.gasMin, settings.hardware.poti.gasMax, 0., 1000.); + gas = scaleBetween(raw_gas, settings.boardcomputerHardware.gasMin, settings.boardcomputerHardware.gasMax, 0., 1000.); raw_brems = sampleMultipleTimes(PINS_BREMS); - brems = scaleBetween(raw_brems, settings.hardware.poti.bremsMin, settings.hardware.poti.bremsMax, 0., 1000.); + brems = scaleBetween(raw_brems, settings.boardcomputerHardware.bremsMin, settings.boardcomputerHardware.bremsMax, 0., 1000.); } }