diff --git a/platformio.ini b/platformio.ini index 76be88b..4d9ebfe 100644 --- a/platformio.ini +++ b/platformio.ini @@ -58,6 +58,7 @@ build_flags = -DPINS_TX2=26 -DPINS_GAS=35 -DPINS_BREMS=33 + -DFEATURE_OTA @@ -83,6 +84,7 @@ build_flags = -DDEFAULT_GASMAX=3700 -DDEFAULT_BREMSMIN=1300 -DDEFAULT_BREMSMAX=4000 + -DFEATURE_BMS [env:feedc0de_usb] platform = ${common_env_data.platform} @@ -152,7 +154,7 @@ build_flags = platform = ${common_env_data.platform} board = ${common_env_data.board} framework = ${common_env_data.framework} -board_build.partitions = ${common_env_data.board_build.partitions} +board_build.partitions = bobbycar_noota.csv lib_deps = ${common_env_data.lib_deps} lib_compat_mode = ${common_env_data.lib_compat_mode} build_unflags = ${common_env_data.build_unflags} diff --git a/src/actions/bluetoothconnectbmsaction.h b/src/actions/bluetoothconnectbmsaction.h index f000fa8..a2daf71 100644 --- a/src/actions/bluetoothconnectbmsaction.h +++ b/src/actions/bluetoothconnectbmsaction.h @@ -6,6 +6,7 @@ #include "globals.h" namespace { +#ifdef FEATURE_BMS class BluetoothConnectBmsAction : public virtual ActionInterface { public: @@ -19,4 +20,5 @@ public: } } }; +#endif } diff --git a/src/actions/bmsturnoffchargeaction.h b/src/actions/bmsturnoffchargeaction.h index 5a828c0..06da7d2 100644 --- a/src/actions/bmsturnoffchargeaction.h +++ b/src/actions/bmsturnoffchargeaction.h @@ -4,6 +4,7 @@ #include "bmsutils.h" namespace { +#ifdef FEATURE_BMS class BmsTurnOffChargeAction : public virtual ActionInterface { public: @@ -16,4 +17,5 @@ public: } } }; +#endif } diff --git a/src/actions/bmsturnoffdischargeaction.h b/src/actions/bmsturnoffdischargeaction.h index 1231511..d19c228 100644 --- a/src/actions/bmsturnoffdischargeaction.h +++ b/src/actions/bmsturnoffdischargeaction.h @@ -4,6 +4,7 @@ #include "bmsutils.h" namespace { +#ifdef FEATURE_BMS class BmsTurnOffDischargeAction : public virtual ActionInterface { public: @@ -16,4 +17,5 @@ public: } } }; +#endif } diff --git a/src/actions/bmsturnonchargeaction.h b/src/actions/bmsturnonchargeaction.h index a66f6ca..79d9867 100644 --- a/src/actions/bmsturnonchargeaction.h +++ b/src/actions/bmsturnonchargeaction.h @@ -4,6 +4,7 @@ #include "bmsutils.h" namespace { +#ifdef FEATURE_BMS class BmsTurnOnChargeAction : public virtual ActionInterface { public: @@ -16,4 +17,5 @@ public: } } }; +#endif } diff --git a/src/actions/bmsturnondischargeaction.h b/src/actions/bmsturnondischargeaction.h index b8ec469..6c87d50 100644 --- a/src/actions/bmsturnondischargeaction.h +++ b/src/actions/bmsturnondischargeaction.h @@ -4,6 +4,7 @@ #include "bmsutils.h" namespace { +#ifdef FEATURE_BMS class BmsTurnOnDischargeAction : public virtual ActionInterface { public: @@ -16,4 +17,5 @@ public: } } }; +#endif } diff --git a/src/bmsutils.h b/src/bmsutils.h index b4a528f..4d657f6 100644 --- a/src/bmsutils.h +++ b/src/bmsutils.h @@ -3,6 +3,7 @@ #include "globals.h" namespace { +#ifdef FEATURE_BMS namespace bms { constexpr auto autoReconnect = false; // causes hangs when not available @@ -119,4 +120,5 @@ void update() } } } +#endif } diff --git a/src/displays/bmsdisplay.h b/src/displays/bmsdisplay.h index 74c1ddf..1c47c8b 100644 --- a/src/displays/bmsdisplay.h +++ b/src/displays/bmsdisplay.h @@ -14,6 +14,7 @@ class MetersDisplay; class StatusDisplay; } namespace { +#ifdef FEATURE_BMS class BmsDisplay : public DemoDisplay, public SwitchScreenAction { public: @@ -86,4 +87,5 @@ void BmsDisplay::rotate(int offset) else if (offset > 0) switchScreen(); } +#endif } diff --git a/src/displays/menus/bmsmenu.h b/src/displays/menus/bmsmenu.h index f0bbd63..f67c543 100644 --- a/src/displays/menus/bmsmenu.h +++ b/src/displays/menus/bmsmenu.h @@ -21,6 +21,7 @@ class MainMenu; } namespace { +#ifdef FEATURE_BMS class BmsMenu : public MenuDisplay, public StaticText, @@ -36,4 +37,5 @@ class BmsMenu : makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; +#endif } diff --git a/src/displays/menus/graphsmenu.h b/src/displays/menus/graphsmenu.h index 539f3a1..afd788c 100644 --- a/src/displays/menus/graphsmenu.h +++ b/src/displays/menus/graphsmenu.h @@ -23,6 +23,7 @@ using SumCurrentGraphDisplay = makeComponent, StaticText, StaticText, MultiStatisticsSingleImpl, SumAbsoluteCurrentStatistics>; using FrontVoltageGraphDisplay = makeComponent, StaticText, MultiStatisticsSingleImpl, FrontVoltageStatistics>; using BackVoltageGraphDisplay = makeComponent, StaticText, MultiStatisticsSingleImpl, BackVoltageStatistics>; +#ifdef FEATURE_BMS using BmsVoltageGraphDisplay = makeComponent, StaticText, MultiStatisticsSingleImpl, BmsVoltageStatistics>; using BmsCurrentGraphDisplay = makeComponent, StaticText, MultiStatisticsSingleImpl, BmsCurrentStatistics>; using BmsPowerGraphDisplay = makeComponent, StaticText, MultiStatisticsSingleImpl, BmsPowerStatistics>; @@ -35,6 +36,7 @@ class SumCurrentsComparisonStatistics : public virtual MultiStatisticsInterface< } }; using SumCurrentsComparisonGraphDisplay = makeComponent, StaticText, SumCurrentsComparisonStatistics>; +#endif class MotorCurrentsStatistics : public virtual MultiStatisticsInterface<4> { @@ -58,10 +60,12 @@ class GraphsMenu : makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, +#ifdef FEATURE_BMS makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, +#endif makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> diff --git a/src/displays/menus/mainmenu.h b/src/displays/menus/mainmenu.h index 5cd5ea0..99f7923 100644 --- a/src/displays/menus/mainmenu.h +++ b/src/displays/menus/mainmenu.h @@ -40,7 +40,9 @@ class MainMenu : makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::modes>>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::presets>>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::graph>>, +#ifdef FEATURE_BMS makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::bms>>, +#endif makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::settings>>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::lock>>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::demos>>, diff --git a/src/displays/menus/settingsmenu.h b/src/displays/menus/settingsmenu.h index d367802..a56808a 100644 --- a/src/displays/menus/settingsmenu.h +++ b/src/displays/menus/settingsmenu.h @@ -45,7 +45,9 @@ class SettingsMenu : makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>, +#ifdef FEATURE_BMS makeComponent, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>, +#endif makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::buzzer>>, makeComponent, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>, makeComponent, ToggleBoolAction, CheckboxIcon, BackLedAccessor>, diff --git a/src/displays/metersdisplay.h b/src/displays/metersdisplay.h index f815c74..598083e 100644 --- a/src/displays/metersdisplay.h +++ b/src/displays/metersdisplay.h @@ -87,7 +87,11 @@ void MetersDisplay::rotate(int offset) if (offset < 0) switchScreen(); else if (offset > 0) +#ifdef FEATURE_BMS switchScreen(); +#else + switchScreen(); +#endif } void MetersDisplay::analogMeter() diff --git a/src/displays/statusdisplay.h b/src/displays/statusdisplay.h index 8e00c32..8430745 100644 --- a/src/displays/statusdisplay.h +++ b/src/displays/statusdisplay.h @@ -163,7 +163,11 @@ void StatusDisplay::redraw() void StatusDisplay::rotate(int offset) { if (offset < 0) +#ifdef FEATURE_BMS switchScreen(); +#else + switchScreen(); +#endif else if (offset > 0) switchScreen(); } diff --git a/src/displays/updatedisplay.h b/src/displays/updatedisplay.h index 7994998..46af5e1 100644 --- a/src/displays/updatedisplay.h +++ b/src/displays/updatedisplay.h @@ -18,6 +18,7 @@ class StatusDisplay; } namespace { +#ifdef FEATURE_OTA class UpdateDisplay : public Display { public: @@ -90,4 +91,5 @@ void UpdateDisplay::confirm() if (m_finished) switchScreen(); } +#endif } diff --git a/src/main.cpp b/src/main.cpp index b798bcf..f45a2f4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -67,8 +67,10 @@ void setup() //WiFi.begin("McDonalds Free WiFi 2.4GHz", "Passwort_123"); BluetoothBeginMasterAction{}.triggered(); +#ifdef FEATURE_BMS if (settings.autoConnectBms) BluetoothConnectBmsAction{}.triggered(); +#endif front.serial.get().begin(38400, SERIAL_8N1, PINS_RX1, PINS_TX1); back.serial.get().begin(38400, SERIAL_8N1, PINS_RX2, PINS_TX2); @@ -83,7 +85,9 @@ void setup() currentMode = &modes::defaultMode; +#ifdef FEATURE_OTA initOta(); +#endif initWebserver(); @@ -160,9 +164,13 @@ void loop() handleSerial(); +#ifdef FEATURE_OTA handleOta(); +#endif handleWebserver(); +#ifdef FEATURE_BMS bms::update(); +#endif } diff --git a/src/ota.h b/src/ota.h index 8b7578f..f63c2a3 100644 --- a/src/ota.h +++ b/src/ota.h @@ -1,11 +1,14 @@ #pragma once +#ifdef FEATURE_OTA #include +#endif #include "screens.h" #include "displays/updatedisplay.h" namespace { +#ifdef FEATURE_OTA void initOta() { ArduinoOTA @@ -42,4 +45,5 @@ void handleOta() { ArduinoOTA.handle(); } +#endif } diff --git a/src/presets.h b/src/presets.h index 0a7530b..abaf51b 100644 --- a/src/presets.h +++ b/src/presets.h @@ -68,7 +68,9 @@ constexpr Settings::LarsmMode defaultLarsmMode { }; constexpr Settings defaultSettings{ +#ifdef FEATURE_BMS .autoConnectBms = false, +#endif .reverseBeep = true, .reverseBeepFreq0 = 3, .reverseBeepFreq1 = 0, diff --git a/src/screens.h b/src/screens.h index e85a4ff..515f86e 100644 --- a/src/screens.h +++ b/src/screens.h @@ -55,7 +55,9 @@ union X { AboutMenu aboutMenu; AccessPointWifiSettingsMenu accessPointWifiSettingsMenu; BluetoothSettingsMenu bluetoothSettingsMenu; +#ifdef FEATURE_BMS BmsMenu bmsMenu; +#endif BuzzerMenu buzzerMenu; FrontCommandDebugMenu frontCommandDebugMenu; BackCommandDebugMenu backCommandDebugMenu; @@ -91,7 +93,9 @@ union X { WifiScanMenu wifiScanMenu; WifiSettingsMenu wifiSettingsMenu; +#ifdef FEATURE_BMS BmsDisplay bmsDisplay; +#endif CalibrateDisplay calibrateDisplay; DualGraphDisplay dualGraphDisplay; GameOfLifeDisplay gameOfLifeDisplay; @@ -102,7 +106,9 @@ union X { SpiroDisplay spiroDisplay; StarfieldDisplay starFieldDisplay; StatusDisplay statusDisplay; +#ifdef FEATURE_OTA UpdateDisplay updateDisplay; +#endif FrontFreqChangeScreen changeFrontFreq; FrontPatternChangeScreen changeFrontPattern; @@ -158,10 +164,12 @@ union X { SumAbsoluteCurrentGraphDisplay sumAbsoluteCurrentGraphDisplay; FrontVoltageGraphDisplay frontVoltageGraphDisplay; BackVoltageGraphDisplay backVoltageGraphDisplay; +#ifdef FEATURE_BMS BmsVoltageGraphDisplay bmsVoltageGraphDisplay; BmsCurrentGraphDisplay bmsCurrentGraphDisplay; BmsPowerGraphDisplay bmsPowerGraphDisplay; SumCurrentsComparisonGraphDisplay sumCurrentsComparisonGraphDisplay; +#endif MotorCurrentsGraphDisplay motorCurrentsGraphDisplay; } displays; @@ -169,7 +177,9 @@ template T &getRefByType() = delete; template<> decltype(displays.aboutMenu) &getRefByType() { return displays.aboutMenu; } template<> decltype(displays.accessPointWifiSettingsMenu) &getRefByType() { return displays.accessPointWifiSettingsMenu; } template<> decltype(displays.bluetoothSettingsMenu) &getRefByType() { return displays.bluetoothSettingsMenu; } +#ifdef FEATURE_BMS template<> decltype(displays.bmsMenu) &getRefByType() { return displays.bmsMenu; } +#endif template<> decltype(displays.buzzerMenu) &getRefByType() { return displays.buzzerMenu; } template<> decltype(displays.boardcomputerHardwareSettingsMenu) &getRefByType() { return displays.boardcomputerHardwareSettingsMenu; } template<> decltype(displays.controllerHardwareSettingsMenu) &getRefByType() { return displays.controllerHardwareSettingsMenu; } @@ -205,7 +215,9 @@ template<> decltype(displays.stationWifiSettingsMenu) & template<> decltype(displays.wifiScanMenu) &getRefByType() { return displays.wifiScanMenu; } template<> decltype(displays.wifiSettingsMenu) &getRefByType() { return displays.wifiSettingsMenu; } +#ifdef FEATURE_BMS template<> decltype(displays.bmsDisplay) &getRefByType() { return displays.bmsDisplay; } +#endif template<> decltype(displays.calibrateDisplay) &getRefByType() { return displays.calibrateDisplay; } template<> decltype(displays.dualGraphDisplay) &getRefByType() { return displays.dualGraphDisplay; } template<> decltype(displays.gameOfLifeDisplay) &getRefByType() { return displays.gameOfLifeDisplay; } @@ -216,7 +228,9 @@ template<> decltype(displays.poweroffDisplay) & template<> decltype(displays.spiroDisplay) &getRefByType() { return displays.spiroDisplay; } template<> decltype(displays.starFieldDisplay) &getRefByType() { return displays.starFieldDisplay; } template<> decltype(displays.statusDisplay) &getRefByType() { return displays.statusDisplay; } +#ifdef FEATURE_OTA template<> decltype(displays.updateDisplay) &getRefByType() { return displays.updateDisplay; } +#endif template<> decltype(displays.changeFrontFreq) &getRefByType() { return displays.changeFrontFreq; } template<> decltype(displays.changeFrontPattern) &getRefByType() { return displays.changeFrontPattern; } @@ -272,10 +286,12 @@ template<> decltype(displays.sumCurrentGraphDisplay) & template<> decltype(displays.sumAbsoluteCurrentGraphDisplay) &getRefByType() { return displays.sumAbsoluteCurrentGraphDisplay; } template<> decltype(displays.frontVoltageGraphDisplay) &getRefByType() { return displays.frontVoltageGraphDisplay; } template<> decltype(displays.backVoltageGraphDisplay) &getRefByType() { return displays.backVoltageGraphDisplay; } +#ifdef FEATURE_BMS template<> decltype(displays.bmsVoltageGraphDisplay) &getRefByType() { return displays.bmsVoltageGraphDisplay; } template<> decltype(displays.bmsCurrentGraphDisplay) &getRefByType() { return displays.bmsCurrentGraphDisplay; } template<> decltype(displays.bmsPowerGraphDisplay) &getRefByType() { return displays.bmsPowerGraphDisplay; } template<> decltype(displays.sumCurrentsComparisonGraphDisplay) &getRefByType() { return displays.sumCurrentsComparisonGraphDisplay; } +#endif template<> decltype(displays.motorCurrentsGraphDisplay) &getRefByType() { return displays.motorCurrentsGraphDisplay; } diff --git a/src/settings.h b/src/settings.h index 079ab13..5de3f77 100644 --- a/src/settings.h +++ b/src/settings.h @@ -9,7 +9,9 @@ enum class LarsmModeMode : uint8_t { Mode1, Mode2, Mode3, Mode4 }; struct Settings { +#ifdef FEATURE_BMS bool autoConnectBms; +#endif bool reverseBeep; uint8_t reverseBeepFreq0; uint8_t reverseBeepFreq1; @@ -71,7 +73,9 @@ struct Settings template void Settings::executeForEverySetting(T &&callable) { +#ifdef FEATURE_BMS callable("autoConnectBms", autoConnectBms); +#endif callable("reverseBeep", reverseBeep); callable("revBeepFreq0", reverseBeepFreq0); callable("revBeepFreq1", reverseBeepFreq1); diff --git a/src/settingsaccessors.h b/src/settingsaccessors.h index 3587046..3335dbf 100644 --- a/src/settingsaccessors.h +++ b/src/settingsaccessors.h @@ -12,7 +12,9 @@ struct RefAccessorSaveSettings : public virtual RefAccessor void setValue(T value) override { RefAccessor::setValue(value); saveSettings(); }; }; +#ifdef FEATURE_BMS struct AutoConnectBmsAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.autoConnectBms; } }; +#endif struct ReverseBeepAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.reverseBeep; } }; struct ReverseBeepFreq0Accessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return settings.reverseBeepFreq0; } }; struct ReverseBeepFreq1Accessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return settings.reverseBeepFreq1; } }; diff --git a/src/statistics.h b/src/statistics.h index 38a4c51..c562a93 100644 --- a/src/statistics.h +++ b/src/statistics.h @@ -9,7 +9,11 @@ namespace { namespace statistics { using ContainerType = ring_buffer; -ContainerType gas, brems, avgSpeed, avgSpeedKmh, sumCurrent, sumAbsoluteCurrent, frontVoltage, backVoltage, frontLeftCurrent, frontRightCurrent, backLeftCurrent, backRightCurrent, bmsVoltage, bmsCurrent, bmsPower; +ContainerType gas, brems, avgSpeed, avgSpeedKmh, sumCurrent, sumAbsoluteCurrent, frontVoltage, backVoltage, frontLeftCurrent, frontRightCurrent, backLeftCurrent, backRightCurrent +#ifdef FEATURE_BMS +, bmsVoltage, bmsCurrent, bmsPower +#endif +; } void pushStats() @@ -32,9 +36,11 @@ void pushStats() statistics::backLeftCurrent.push_back(fixCurrent(back.feedback.left.current)); statistics::backRightCurrent.push_back(fixCurrent(back.feedback.right.current)); } +#ifdef FEATURE_BMS statistics::bmsVoltage.push_back(bms::voltage); statistics::bmsCurrent.push_back(bms::current); statistics::bmsPower.push_back(bms::power); +#endif } class BufferAccessorInterface @@ -58,9 +64,11 @@ using SumCurrentStatistics = BufferAccessorImpl; using SumAbsoluteCurrentStatistics = BufferAccessorImpl; using FrontVoltageStatistics = BufferAccessorImpl; using BackVoltageStatistics = BufferAccessorImpl; +#ifdef FEATURE_BMS using BmsVoltageStatistics = BufferAccessorImpl; using BmsCurrentStatistics = BufferAccessorImpl; using BmsPowerStatistics = BufferAccessorImpl; +#endif using FrontLeftCurrentStatistics = BufferAccessorImpl; using FrontRightCurrentStatistics = BufferAccessorImpl; using BackLeftCurrentStatistics = BufferAccessorImpl;