Added build flags for BMS and OTA

This commit is contained in:
2020-05-24 16:47:33 +02:00
parent 3334bf3c3a
commit 04bec4e0c1
22 changed files with 82 additions and 2 deletions

View File

@@ -58,6 +58,7 @@ build_flags =
-DPINS_TX2=26 -DPINS_TX2=26
-DPINS_GAS=35 -DPINS_GAS=35
-DPINS_BREMS=33 -DPINS_BREMS=33
-DFEATURE_OTA
@@ -83,6 +84,7 @@ build_flags =
-DDEFAULT_GASMAX=3700 -DDEFAULT_GASMAX=3700
-DDEFAULT_BREMSMIN=1300 -DDEFAULT_BREMSMIN=1300
-DDEFAULT_BREMSMAX=4000 -DDEFAULT_BREMSMAX=4000
-DFEATURE_BMS
[env:feedc0de_usb] [env:feedc0de_usb]
platform = ${common_env_data.platform} platform = ${common_env_data.platform}
@@ -152,7 +154,7 @@ build_flags =
platform = ${common_env_data.platform} platform = ${common_env_data.platform}
board = ${common_env_data.board} board = ${common_env_data.board}
framework = ${common_env_data.framework} 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_deps = ${common_env_data.lib_deps}
lib_compat_mode = ${common_env_data.lib_compat_mode} lib_compat_mode = ${common_env_data.lib_compat_mode}
build_unflags = ${common_env_data.build_unflags} build_unflags = ${common_env_data.build_unflags}

View File

@@ -6,6 +6,7 @@
#include "globals.h" #include "globals.h"
namespace { namespace {
#ifdef FEATURE_BMS
class BluetoothConnectBmsAction : public virtual ActionInterface class BluetoothConnectBmsAction : public virtual ActionInterface
{ {
public: public:
@@ -19,4 +20,5 @@ public:
} }
} }
}; };
#endif
} }

View File

@@ -4,6 +4,7 @@
#include "bmsutils.h" #include "bmsutils.h"
namespace { namespace {
#ifdef FEATURE_BMS
class BmsTurnOffChargeAction : public virtual ActionInterface class BmsTurnOffChargeAction : public virtual ActionInterface
{ {
public: public:
@@ -16,4 +17,5 @@ public:
} }
} }
}; };
#endif
} }

View File

@@ -4,6 +4,7 @@
#include "bmsutils.h" #include "bmsutils.h"
namespace { namespace {
#ifdef FEATURE_BMS
class BmsTurnOffDischargeAction : public virtual ActionInterface class BmsTurnOffDischargeAction : public virtual ActionInterface
{ {
public: public:
@@ -16,4 +17,5 @@ public:
} }
} }
}; };
#endif
} }

View File

@@ -4,6 +4,7 @@
#include "bmsutils.h" #include "bmsutils.h"
namespace { namespace {
#ifdef FEATURE_BMS
class BmsTurnOnChargeAction : public virtual ActionInterface class BmsTurnOnChargeAction : public virtual ActionInterface
{ {
public: public:
@@ -16,4 +17,5 @@ public:
} }
} }
}; };
#endif
} }

View File

@@ -4,6 +4,7 @@
#include "bmsutils.h" #include "bmsutils.h"
namespace { namespace {
#ifdef FEATURE_BMS
class BmsTurnOnDischargeAction : public virtual ActionInterface class BmsTurnOnDischargeAction : public virtual ActionInterface
{ {
public: public:
@@ -16,4 +17,5 @@ public:
} }
} }
}; };
#endif
} }

View File

@@ -3,6 +3,7 @@
#include "globals.h" #include "globals.h"
namespace { namespace {
#ifdef FEATURE_BMS
namespace bms { namespace bms {
constexpr auto autoReconnect = false; // causes hangs when not available constexpr auto autoReconnect = false; // causes hangs when not available
@@ -119,4 +120,5 @@ void update()
} }
} }
} }
#endif
} }

View File

@@ -14,6 +14,7 @@ class MetersDisplay;
class StatusDisplay; class StatusDisplay;
} }
namespace { namespace {
#ifdef FEATURE_BMS
class BmsDisplay : public DemoDisplay, public SwitchScreenAction<MainMenu> class BmsDisplay : public DemoDisplay, public SwitchScreenAction<MainMenu>
{ {
public: public:
@@ -86,4 +87,5 @@ void BmsDisplay::rotate(int offset)
else if (offset > 0) else if (offset > 0)
switchScreen<StatusDisplay>(); switchScreen<StatusDisplay>();
} }
#endif
} }

View File

@@ -21,6 +21,7 @@ class MainMenu;
} }
namespace { namespace {
#ifdef FEATURE_BMS
class BmsMenu : class BmsMenu :
public MenuDisplay, public MenuDisplay,
public StaticText<TEXT_BMS>, public StaticText<TEXT_BMS>,
@@ -36,4 +37,5 @@ class BmsMenu :
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>> makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>
> >
{}; {};
#endif
} }

View File

@@ -23,6 +23,7 @@ using SumCurrentGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_SU
using SumAbsoluteCurrentGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_SUMABSOLUTECURRENT>, MultiStatisticsSingleImpl, SumAbsoluteCurrentStatistics>; using SumAbsoluteCurrentGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_SUMABSOLUTECURRENT>, MultiStatisticsSingleImpl, SumAbsoluteCurrentStatistics>;
using FrontVoltageGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_FRONTVOLTAGE>, MultiStatisticsSingleImpl, FrontVoltageStatistics>; using FrontVoltageGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_FRONTVOLTAGE>, MultiStatisticsSingleImpl, FrontVoltageStatistics>;
using BackVoltageGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_BACKVOLTAGE>, MultiStatisticsSingleImpl, BackVoltageStatistics>; using BackVoltageGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_BACKVOLTAGE>, MultiStatisticsSingleImpl, BackVoltageStatistics>;
#ifdef FEATURE_BMS
using BmsVoltageGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_BMSVOLTAGE>, MultiStatisticsSingleImpl, BmsVoltageStatistics>; using BmsVoltageGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_BMSVOLTAGE>, MultiStatisticsSingleImpl, BmsVoltageStatistics>;
using BmsCurrentGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_BMSCURRENT>, MultiStatisticsSingleImpl, BmsCurrentStatistics>; using BmsCurrentGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_BMSCURRENT>, MultiStatisticsSingleImpl, BmsCurrentStatistics>;
using BmsPowerGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_BMSPOWER>, MultiStatisticsSingleImpl, BmsPowerStatistics>; using BmsPowerGraphDisplay = makeComponent<GraphDisplay<1>, StaticText<TEXT_BMSPOWER>, MultiStatisticsSingleImpl, BmsPowerStatistics>;
@@ -35,6 +36,7 @@ class SumCurrentsComparisonStatistics : public virtual MultiStatisticsInterface<
} }
}; };
using SumCurrentsComparisonGraphDisplay = makeComponent<GraphDisplay<2>, StaticText<TEXT_SUMCURRENTSCOMPARISON>, SumCurrentsComparisonStatistics>; using SumCurrentsComparisonGraphDisplay = makeComponent<GraphDisplay<2>, StaticText<TEXT_SUMCURRENTSCOMPARISON>, SumCurrentsComparisonStatistics>;
#endif
class MotorCurrentsStatistics : public virtual MultiStatisticsInterface<4> class MotorCurrentsStatistics : public virtual MultiStatisticsInterface<4>
{ {
@@ -58,10 +60,12 @@ class GraphsMenu :
makeComponent<MenuItem, StaticText<TEXT_SUMABSOLUTECURRENT>, SwitchScreenAction<SumAbsoluteCurrentGraphDisplay>>, makeComponent<MenuItem, StaticText<TEXT_SUMABSOLUTECURRENT>, SwitchScreenAction<SumAbsoluteCurrentGraphDisplay>>,
makeComponent<MenuItem, StaticText<TEXT_FRONTVOLTAGE>, SwitchScreenAction<FrontVoltageGraphDisplay>>, makeComponent<MenuItem, StaticText<TEXT_FRONTVOLTAGE>, SwitchScreenAction<FrontVoltageGraphDisplay>>,
makeComponent<MenuItem, StaticText<TEXT_BACKVOLTAGE>, SwitchScreenAction<BackVoltageGraphDisplay>>, makeComponent<MenuItem, StaticText<TEXT_BACKVOLTAGE>, SwitchScreenAction<BackVoltageGraphDisplay>>,
#ifdef FEATURE_BMS
makeComponent<MenuItem, StaticText<TEXT_BMSVOLTAGE>, SwitchScreenAction<BmsVoltageGraphDisplay>>, makeComponent<MenuItem, StaticText<TEXT_BMSVOLTAGE>, SwitchScreenAction<BmsVoltageGraphDisplay>>,
makeComponent<MenuItem, StaticText<TEXT_BMSCURRENT>, SwitchScreenAction<BmsCurrentGraphDisplay>>, makeComponent<MenuItem, StaticText<TEXT_BMSCURRENT>, SwitchScreenAction<BmsCurrentGraphDisplay>>,
makeComponent<MenuItem, StaticText<TEXT_BMSPOWER>, SwitchScreenAction<BmsPowerGraphDisplay>>, makeComponent<MenuItem, StaticText<TEXT_BMSPOWER>, SwitchScreenAction<BmsPowerGraphDisplay>>,
makeComponent<MenuItem, StaticText<TEXT_SUMCURRENTSCOMPARISON>, SwitchScreenAction<SumCurrentsComparisonGraphDisplay>>, makeComponent<MenuItem, StaticText<TEXT_SUMCURRENTSCOMPARISON>, SwitchScreenAction<SumCurrentsComparisonGraphDisplay>>,
#endif
makeComponent<MenuItem, StaticText<TEXT_MOTORCURRENTS>, SwitchScreenAction<MotorCurrentsGraphDisplay>>, makeComponent<MenuItem, StaticText<TEXT_MOTORCURRENTS>, SwitchScreenAction<MotorCurrentsGraphDisplay>>,
makeComponent<MenuItem, StaticText<TEXT_DUALGRAPHS>, SwitchScreenAction<DualGraphDisplay>>, makeComponent<MenuItem, StaticText<TEXT_DUALGRAPHS>, SwitchScreenAction<DualGraphDisplay>>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>> makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>

View File

@@ -40,7 +40,9 @@ class MainMenu :
makeComponent<MenuItem, StaticText<TEXT_SELECTMODE>, SwitchScreenAction<SelectModeMenu>, StaticMenuItemIcon<&icons::modes>>, makeComponent<MenuItem, StaticText<TEXT_SELECTMODE>, SwitchScreenAction<SelectModeMenu>, StaticMenuItemIcon<&icons::modes>>,
makeComponent<MenuItem, StaticText<TEXT_PRESETS>, SwitchScreenAction<PresetsMenu>, StaticMenuItemIcon<&icons::presets>>, makeComponent<MenuItem, StaticText<TEXT_PRESETS>, SwitchScreenAction<PresetsMenu>, StaticMenuItemIcon<&icons::presets>>,
makeComponent<MenuItem, StaticText<TEXT_GRAPHS>, SwitchScreenAction<GraphsMenu>, StaticMenuItemIcon<&icons::graph>>, makeComponent<MenuItem, StaticText<TEXT_GRAPHS>, SwitchScreenAction<GraphsMenu>, StaticMenuItemIcon<&icons::graph>>,
#ifdef FEATURE_BMS
makeComponent<MenuItem, StaticText<TEXT_BMS>, SwitchScreenAction<BmsMenu>, StaticMenuItemIcon<&icons::bms>>, makeComponent<MenuItem, StaticText<TEXT_BMS>, SwitchScreenAction<BmsMenu>, StaticMenuItemIcon<&icons::bms>>,
#endif
makeComponent<MenuItem, StaticText<TEXT_SETTINGS>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&icons::settings>>, makeComponent<MenuItem, StaticText<TEXT_SETTINGS>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&icons::settings>>,
makeComponent<MenuItem, StaticText<TEXT_LOCKVEHICLE>, SwitchScreenAction<Lockscreen>, StaticMenuItemIcon<&icons::lock>>, makeComponent<MenuItem, StaticText<TEXT_LOCKVEHICLE>, SwitchScreenAction<Lockscreen>, StaticMenuItemIcon<&icons::lock>>,
makeComponent<MenuItem, StaticText<TEXT_DEMOS>, SwitchScreenAction<DemosMenu>, StaticMenuItemIcon<&icons::demos>>, makeComponent<MenuItem, StaticText<TEXT_DEMOS>, SwitchScreenAction<DemosMenu>, StaticMenuItemIcon<&icons::demos>>,

View File

@@ -45,7 +45,9 @@ class SettingsMenu :
makeComponent<MenuItem, StaticText<TEXT_MODESSETTINGS>, SwitchScreenAction<ModesSettingsMenu>>, makeComponent<MenuItem, StaticText<TEXT_MODESSETTINGS>, SwitchScreenAction<ModesSettingsMenu>>,
makeComponent<MenuItem, StaticText<TEXT_CONTROLLERHARDWARESETTINGS>, SwitchScreenAction<ControllerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>, makeComponent<MenuItem, StaticText<TEXT_CONTROLLERHARDWARESETTINGS>, SwitchScreenAction<ControllerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>,
makeComponent<MenuItem, StaticText<TEXT_BOARDCOMPUTERHARDWARESETTINGS>, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>, makeComponent<MenuItem, StaticText<TEXT_BOARDCOMPUTERHARDWARESETTINGS>, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>,
#ifdef FEATURE_BMS
makeComponent<MenuItem, StaticText<TEXT_AUTOCONNECTBMS>, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>, makeComponent<MenuItem, StaticText<TEXT_AUTOCONNECTBMS>, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>,
#endif
makeComponent<MenuItem, StaticText<TEXT_BUZZER>, SwitchScreenAction<BuzzerMenu>, StaticMenuItemIcon<&icons::buzzer>>, makeComponent<MenuItem, StaticText<TEXT_BUZZER>, SwitchScreenAction<BuzzerMenu>, StaticMenuItemIcon<&icons::buzzer>>,
makeComponent<MenuItem, StaticText<TEXT_FRONTLED>, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>, makeComponent<MenuItem, StaticText<TEXT_FRONTLED>, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_BACKLED>, ToggleBoolAction, CheckboxIcon, BackLedAccessor>, makeComponent<MenuItem, StaticText<TEXT_BACKLED>, ToggleBoolAction, CheckboxIcon, BackLedAccessor>,

View File

@@ -87,7 +87,11 @@ void MetersDisplay::rotate(int offset)
if (offset < 0) if (offset < 0)
switchScreen<StatusDisplay>(); switchScreen<StatusDisplay>();
else if (offset > 0) else if (offset > 0)
#ifdef FEATURE_BMS
switchScreen<BmsDisplay>(); switchScreen<BmsDisplay>();
#else
switchScreen<StatusDisplay>();
#endif
} }
void MetersDisplay::analogMeter() void MetersDisplay::analogMeter()

View File

@@ -163,7 +163,11 @@ void StatusDisplay::redraw()
void StatusDisplay::rotate(int offset) void StatusDisplay::rotate(int offset)
{ {
if (offset < 0) if (offset < 0)
#ifdef FEATURE_BMS
switchScreen<BmsDisplay>(); switchScreen<BmsDisplay>();
#else
switchScreen<MetersDisplay>();
#endif
else if (offset > 0) else if (offset > 0)
switchScreen<MetersDisplay>(); switchScreen<MetersDisplay>();
} }

View File

@@ -18,6 +18,7 @@ class StatusDisplay;
} }
namespace { namespace {
#ifdef FEATURE_OTA
class UpdateDisplay : public Display class UpdateDisplay : public Display
{ {
public: public:
@@ -90,4 +91,5 @@ void UpdateDisplay::confirm()
if (m_finished) if (m_finished)
switchScreen<StatusDisplay>(); switchScreen<StatusDisplay>();
} }
#endif
} }

View File

@@ -67,8 +67,10 @@ void setup()
//WiFi.begin("McDonalds Free WiFi 2.4GHz", "Passwort_123"); //WiFi.begin("McDonalds Free WiFi 2.4GHz", "Passwort_123");
BluetoothBeginMasterAction{}.triggered(); BluetoothBeginMasterAction{}.triggered();
#ifdef FEATURE_BMS
if (settings.autoConnectBms) if (settings.autoConnectBms)
BluetoothConnectBmsAction{}.triggered(); BluetoothConnectBmsAction{}.triggered();
#endif
front.serial.get().begin(38400, SERIAL_8N1, PINS_RX1, PINS_TX1); front.serial.get().begin(38400, SERIAL_8N1, PINS_RX1, PINS_TX1);
back.serial.get().begin(38400, SERIAL_8N1, PINS_RX2, PINS_TX2); back.serial.get().begin(38400, SERIAL_8N1, PINS_RX2, PINS_TX2);
@@ -83,7 +85,9 @@ void setup()
currentMode = &modes::defaultMode; currentMode = &modes::defaultMode;
#ifdef FEATURE_OTA
initOta(); initOta();
#endif
initWebserver(); initWebserver();
@@ -160,9 +164,13 @@ void loop()
handleSerial(); handleSerial();
#ifdef FEATURE_OTA
handleOta(); handleOta();
#endif
handleWebserver(); handleWebserver();
#ifdef FEATURE_BMS
bms::update(); bms::update();
#endif
} }

View File

@@ -1,11 +1,14 @@
#pragma once #pragma once
#ifdef FEATURE_OTA
#include <ArduinoOTA.h> #include <ArduinoOTA.h>
#endif
#include "screens.h" #include "screens.h"
#include "displays/updatedisplay.h" #include "displays/updatedisplay.h"
namespace { namespace {
#ifdef FEATURE_OTA
void initOta() void initOta()
{ {
ArduinoOTA ArduinoOTA
@@ -42,4 +45,5 @@ void handleOta()
{ {
ArduinoOTA.handle(); ArduinoOTA.handle();
} }
#endif
} }

View File

@@ -68,7 +68,9 @@ constexpr Settings::LarsmMode defaultLarsmMode {
}; };
constexpr Settings defaultSettings{ constexpr Settings defaultSettings{
#ifdef FEATURE_BMS
.autoConnectBms = false, .autoConnectBms = false,
#endif
.reverseBeep = true, .reverseBeep = true,
.reverseBeepFreq0 = 3, .reverseBeepFreq0 = 3,
.reverseBeepFreq1 = 0, .reverseBeepFreq1 = 0,

View File

@@ -55,7 +55,9 @@ union X {
AboutMenu aboutMenu; AboutMenu aboutMenu;
AccessPointWifiSettingsMenu accessPointWifiSettingsMenu; AccessPointWifiSettingsMenu accessPointWifiSettingsMenu;
BluetoothSettingsMenu bluetoothSettingsMenu; BluetoothSettingsMenu bluetoothSettingsMenu;
#ifdef FEATURE_BMS
BmsMenu bmsMenu; BmsMenu bmsMenu;
#endif
BuzzerMenu buzzerMenu; BuzzerMenu buzzerMenu;
FrontCommandDebugMenu frontCommandDebugMenu; FrontCommandDebugMenu frontCommandDebugMenu;
BackCommandDebugMenu backCommandDebugMenu; BackCommandDebugMenu backCommandDebugMenu;
@@ -91,7 +93,9 @@ union X {
WifiScanMenu wifiScanMenu; WifiScanMenu wifiScanMenu;
WifiSettingsMenu wifiSettingsMenu; WifiSettingsMenu wifiSettingsMenu;
#ifdef FEATURE_BMS
BmsDisplay bmsDisplay; BmsDisplay bmsDisplay;
#endif
CalibrateDisplay calibrateDisplay; CalibrateDisplay calibrateDisplay;
DualGraphDisplay dualGraphDisplay; DualGraphDisplay dualGraphDisplay;
GameOfLifeDisplay gameOfLifeDisplay; GameOfLifeDisplay gameOfLifeDisplay;
@@ -102,7 +106,9 @@ union X {
SpiroDisplay spiroDisplay; SpiroDisplay spiroDisplay;
StarfieldDisplay starFieldDisplay; StarfieldDisplay starFieldDisplay;
StatusDisplay statusDisplay; StatusDisplay statusDisplay;
#ifdef FEATURE_OTA
UpdateDisplay updateDisplay; UpdateDisplay updateDisplay;
#endif
FrontFreqChangeScreen changeFrontFreq; FrontFreqChangeScreen changeFrontFreq;
FrontPatternChangeScreen changeFrontPattern; FrontPatternChangeScreen changeFrontPattern;
@@ -158,10 +164,12 @@ union X {
SumAbsoluteCurrentGraphDisplay sumAbsoluteCurrentGraphDisplay; SumAbsoluteCurrentGraphDisplay sumAbsoluteCurrentGraphDisplay;
FrontVoltageGraphDisplay frontVoltageGraphDisplay; FrontVoltageGraphDisplay frontVoltageGraphDisplay;
BackVoltageGraphDisplay backVoltageGraphDisplay; BackVoltageGraphDisplay backVoltageGraphDisplay;
#ifdef FEATURE_BMS
BmsVoltageGraphDisplay bmsVoltageGraphDisplay; BmsVoltageGraphDisplay bmsVoltageGraphDisplay;
BmsCurrentGraphDisplay bmsCurrentGraphDisplay; BmsCurrentGraphDisplay bmsCurrentGraphDisplay;
BmsPowerGraphDisplay bmsPowerGraphDisplay; BmsPowerGraphDisplay bmsPowerGraphDisplay;
SumCurrentsComparisonGraphDisplay sumCurrentsComparisonGraphDisplay; SumCurrentsComparisonGraphDisplay sumCurrentsComparisonGraphDisplay;
#endif
MotorCurrentsGraphDisplay motorCurrentsGraphDisplay; MotorCurrentsGraphDisplay motorCurrentsGraphDisplay;
} displays; } displays;
@@ -169,7 +177,9 @@ template<typename T> T &getRefByType() = delete;
template<> decltype(displays.aboutMenu) &getRefByType<decltype(displays.aboutMenu)>() { return displays.aboutMenu; } template<> decltype(displays.aboutMenu) &getRefByType<decltype(displays.aboutMenu)>() { return displays.aboutMenu; }
template<> decltype(displays.accessPointWifiSettingsMenu) &getRefByType<decltype(displays.accessPointWifiSettingsMenu)>() { return displays.accessPointWifiSettingsMenu; } template<> decltype(displays.accessPointWifiSettingsMenu) &getRefByType<decltype(displays.accessPointWifiSettingsMenu)>() { return displays.accessPointWifiSettingsMenu; }
template<> decltype(displays.bluetoothSettingsMenu) &getRefByType<decltype(displays.bluetoothSettingsMenu)>() { return displays.bluetoothSettingsMenu; } template<> decltype(displays.bluetoothSettingsMenu) &getRefByType<decltype(displays.bluetoothSettingsMenu)>() { return displays.bluetoothSettingsMenu; }
#ifdef FEATURE_BMS
template<> decltype(displays.bmsMenu) &getRefByType<decltype(displays.bmsMenu)>() { return displays.bmsMenu; } template<> decltype(displays.bmsMenu) &getRefByType<decltype(displays.bmsMenu)>() { return displays.bmsMenu; }
#endif
template<> decltype(displays.buzzerMenu) &getRefByType<decltype(displays.buzzerMenu)>() { return displays.buzzerMenu; } template<> decltype(displays.buzzerMenu) &getRefByType<decltype(displays.buzzerMenu)>() { return displays.buzzerMenu; }
template<> decltype(displays.boardcomputerHardwareSettingsMenu) &getRefByType<decltype(displays.boardcomputerHardwareSettingsMenu)>() { return displays.boardcomputerHardwareSettingsMenu; } template<> decltype(displays.boardcomputerHardwareSettingsMenu) &getRefByType<decltype(displays.boardcomputerHardwareSettingsMenu)>() { return displays.boardcomputerHardwareSettingsMenu; }
template<> decltype(displays.controllerHardwareSettingsMenu) &getRefByType<decltype(displays.controllerHardwareSettingsMenu)>() { return displays.controllerHardwareSettingsMenu; } template<> decltype(displays.controllerHardwareSettingsMenu) &getRefByType<decltype(displays.controllerHardwareSettingsMenu)>() { return displays.controllerHardwareSettingsMenu; }
@@ -205,7 +215,9 @@ template<> decltype(displays.stationWifiSettingsMenu) &
template<> decltype(displays.wifiScanMenu) &getRefByType<decltype(displays.wifiScanMenu)>() { return displays.wifiScanMenu; } template<> decltype(displays.wifiScanMenu) &getRefByType<decltype(displays.wifiScanMenu)>() { return displays.wifiScanMenu; }
template<> decltype(displays.wifiSettingsMenu) &getRefByType<decltype(displays.wifiSettingsMenu)>() { return displays.wifiSettingsMenu; } template<> decltype(displays.wifiSettingsMenu) &getRefByType<decltype(displays.wifiSettingsMenu)>() { return displays.wifiSettingsMenu; }
#ifdef FEATURE_BMS
template<> decltype(displays.bmsDisplay) &getRefByType<decltype(displays.bmsDisplay)>() { return displays.bmsDisplay; } template<> decltype(displays.bmsDisplay) &getRefByType<decltype(displays.bmsDisplay)>() { return displays.bmsDisplay; }
#endif
template<> decltype(displays.calibrateDisplay) &getRefByType<decltype(displays.calibrateDisplay)>() { return displays.calibrateDisplay; } template<> decltype(displays.calibrateDisplay) &getRefByType<decltype(displays.calibrateDisplay)>() { return displays.calibrateDisplay; }
template<> decltype(displays.dualGraphDisplay) &getRefByType<decltype(displays.dualGraphDisplay)>() { return displays.dualGraphDisplay; } template<> decltype(displays.dualGraphDisplay) &getRefByType<decltype(displays.dualGraphDisplay)>() { return displays.dualGraphDisplay; }
template<> decltype(displays.gameOfLifeDisplay) &getRefByType<decltype(displays.gameOfLifeDisplay)>() { return displays.gameOfLifeDisplay; } template<> decltype(displays.gameOfLifeDisplay) &getRefByType<decltype(displays.gameOfLifeDisplay)>() { return displays.gameOfLifeDisplay; }
@@ -216,7 +228,9 @@ template<> decltype(displays.poweroffDisplay) &
template<> decltype(displays.spiroDisplay) &getRefByType<decltype(displays.spiroDisplay)>() { return displays.spiroDisplay; } template<> decltype(displays.spiroDisplay) &getRefByType<decltype(displays.spiroDisplay)>() { return displays.spiroDisplay; }
template<> decltype(displays.starFieldDisplay) &getRefByType<decltype(displays.starFieldDisplay)>() { return displays.starFieldDisplay; } template<> decltype(displays.starFieldDisplay) &getRefByType<decltype(displays.starFieldDisplay)>() { return displays.starFieldDisplay; }
template<> decltype(displays.statusDisplay) &getRefByType<decltype(displays.statusDisplay)>() { return displays.statusDisplay; } template<> decltype(displays.statusDisplay) &getRefByType<decltype(displays.statusDisplay)>() { return displays.statusDisplay; }
#ifdef FEATURE_OTA
template<> decltype(displays.updateDisplay) &getRefByType<decltype(displays.updateDisplay)>() { return displays.updateDisplay; } template<> decltype(displays.updateDisplay) &getRefByType<decltype(displays.updateDisplay)>() { return displays.updateDisplay; }
#endif
template<> decltype(displays.changeFrontFreq) &getRefByType<decltype(displays.changeFrontFreq)>() { return displays.changeFrontFreq; } template<> decltype(displays.changeFrontFreq) &getRefByType<decltype(displays.changeFrontFreq)>() { return displays.changeFrontFreq; }
template<> decltype(displays.changeFrontPattern) &getRefByType<decltype(displays.changeFrontPattern)>() { return displays.changeFrontPattern; } template<> decltype(displays.changeFrontPattern) &getRefByType<decltype(displays.changeFrontPattern)>() { return displays.changeFrontPattern; }
@@ -272,10 +286,12 @@ template<> decltype(displays.sumCurrentGraphDisplay) &
template<> decltype(displays.sumAbsoluteCurrentGraphDisplay) &getRefByType<decltype(displays.sumAbsoluteCurrentGraphDisplay)>() { return displays.sumAbsoluteCurrentGraphDisplay; } template<> decltype(displays.sumAbsoluteCurrentGraphDisplay) &getRefByType<decltype(displays.sumAbsoluteCurrentGraphDisplay)>() { return displays.sumAbsoluteCurrentGraphDisplay; }
template<> decltype(displays.frontVoltageGraphDisplay) &getRefByType<decltype(displays.frontVoltageGraphDisplay)>() { return displays.frontVoltageGraphDisplay; } template<> decltype(displays.frontVoltageGraphDisplay) &getRefByType<decltype(displays.frontVoltageGraphDisplay)>() { return displays.frontVoltageGraphDisplay; }
template<> decltype(displays.backVoltageGraphDisplay) &getRefByType<decltype(displays.backVoltageGraphDisplay)>() { return displays.backVoltageGraphDisplay; } template<> decltype(displays.backVoltageGraphDisplay) &getRefByType<decltype(displays.backVoltageGraphDisplay)>() { return displays.backVoltageGraphDisplay; }
#ifdef FEATURE_BMS
template<> decltype(displays.bmsVoltageGraphDisplay) &getRefByType<decltype(displays.bmsVoltageGraphDisplay)>() { return displays.bmsVoltageGraphDisplay; } template<> decltype(displays.bmsVoltageGraphDisplay) &getRefByType<decltype(displays.bmsVoltageGraphDisplay)>() { return displays.bmsVoltageGraphDisplay; }
template<> decltype(displays.bmsCurrentGraphDisplay) &getRefByType<decltype(displays.bmsCurrentGraphDisplay)>() { return displays.bmsCurrentGraphDisplay; } template<> decltype(displays.bmsCurrentGraphDisplay) &getRefByType<decltype(displays.bmsCurrentGraphDisplay)>() { return displays.bmsCurrentGraphDisplay; }
template<> decltype(displays.bmsPowerGraphDisplay) &getRefByType<decltype(displays.bmsPowerGraphDisplay)>() { return displays.bmsPowerGraphDisplay; } template<> decltype(displays.bmsPowerGraphDisplay) &getRefByType<decltype(displays.bmsPowerGraphDisplay)>() { return displays.bmsPowerGraphDisplay; }
template<> decltype(displays.sumCurrentsComparisonGraphDisplay) &getRefByType<decltype(displays.sumCurrentsComparisonGraphDisplay)>() { return displays.sumCurrentsComparisonGraphDisplay; } template<> decltype(displays.sumCurrentsComparisonGraphDisplay) &getRefByType<decltype(displays.sumCurrentsComparisonGraphDisplay)>() { return displays.sumCurrentsComparisonGraphDisplay; }
#endif
template<> decltype(displays.motorCurrentsGraphDisplay) &getRefByType<decltype(displays.motorCurrentsGraphDisplay)>() { return displays.motorCurrentsGraphDisplay; } template<> decltype(displays.motorCurrentsGraphDisplay) &getRefByType<decltype(displays.motorCurrentsGraphDisplay)>() { return displays.motorCurrentsGraphDisplay; }

View File

@@ -9,7 +9,9 @@ enum class LarsmModeMode : uint8_t { Mode1, Mode2, Mode3, Mode4 };
struct Settings struct Settings
{ {
#ifdef FEATURE_BMS
bool autoConnectBms; bool autoConnectBms;
#endif
bool reverseBeep; bool reverseBeep;
uint8_t reverseBeepFreq0; uint8_t reverseBeepFreq0;
uint8_t reverseBeepFreq1; uint8_t reverseBeepFreq1;
@@ -71,7 +73,9 @@ struct Settings
template<typename T> template<typename T>
void Settings::executeForEverySetting(T &&callable) void Settings::executeForEverySetting(T &&callable)
{ {
#ifdef FEATURE_BMS
callable("autoConnectBms", autoConnectBms); callable("autoConnectBms", autoConnectBms);
#endif
callable("reverseBeep", reverseBeep); callable("reverseBeep", reverseBeep);
callable("revBeepFreq0", reverseBeepFreq0); callable("revBeepFreq0", reverseBeepFreq0);
callable("revBeepFreq1", reverseBeepFreq1); callable("revBeepFreq1", reverseBeepFreq1);

View File

@@ -12,7 +12,9 @@ struct RefAccessorSaveSettings : public virtual RefAccessor<T>
void setValue(T value) override { RefAccessor<T>::setValue(value); saveSettings(); }; void setValue(T value) override { RefAccessor<T>::setValue(value); saveSettings(); };
}; };
#ifdef FEATURE_BMS
struct AutoConnectBmsAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.autoConnectBms; } }; struct AutoConnectBmsAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.autoConnectBms; } };
#endif
struct ReverseBeepAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.reverseBeep; } }; struct ReverseBeepAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.reverseBeep; } };
struct ReverseBeepFreq0Accessor : public RefAccessorSaveSettings<uint8_t> { uint8_t &getRef() const override { return settings.reverseBeepFreq0; } }; struct ReverseBeepFreq0Accessor : public RefAccessorSaveSettings<uint8_t> { uint8_t &getRef() const override { return settings.reverseBeepFreq0; } };
struct ReverseBeepFreq1Accessor : public RefAccessorSaveSettings<uint8_t> { uint8_t &getRef() const override { return settings.reverseBeepFreq1; } }; struct ReverseBeepFreq1Accessor : public RefAccessorSaveSettings<uint8_t> { uint8_t &getRef() const override { return settings.reverseBeepFreq1; } };

View File

@@ -9,7 +9,11 @@
namespace { namespace {
namespace statistics { namespace statistics {
using ContainerType = ring_buffer<float, 200>; using ContainerType = ring_buffer<float, 200>;
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() void pushStats()
@@ -32,9 +36,11 @@ void pushStats()
statistics::backLeftCurrent.push_back(fixCurrent(back.feedback.left.current)); statistics::backLeftCurrent.push_back(fixCurrent(back.feedback.left.current));
statistics::backRightCurrent.push_back(fixCurrent(back.feedback.right.current)); statistics::backRightCurrent.push_back(fixCurrent(back.feedback.right.current));
} }
#ifdef FEATURE_BMS
statistics::bmsVoltage.push_back(bms::voltage); statistics::bmsVoltage.push_back(bms::voltage);
statistics::bmsCurrent.push_back(bms::current); statistics::bmsCurrent.push_back(bms::current);
statistics::bmsPower.push_back(bms::power); statistics::bmsPower.push_back(bms::power);
#endif
} }
class BufferAccessorInterface class BufferAccessorInterface
@@ -58,9 +64,11 @@ using SumCurrentStatistics = BufferAccessorImpl<statistics::sumCurrent>;
using SumAbsoluteCurrentStatistics = BufferAccessorImpl<statistics::sumAbsoluteCurrent>; using SumAbsoluteCurrentStatistics = BufferAccessorImpl<statistics::sumAbsoluteCurrent>;
using FrontVoltageStatistics = BufferAccessorImpl<statistics::frontVoltage>; using FrontVoltageStatistics = BufferAccessorImpl<statistics::frontVoltage>;
using BackVoltageStatistics = BufferAccessorImpl<statistics::backVoltage>; using BackVoltageStatistics = BufferAccessorImpl<statistics::backVoltage>;
#ifdef FEATURE_BMS
using BmsVoltageStatistics = BufferAccessorImpl<statistics::bmsVoltage>; using BmsVoltageStatistics = BufferAccessorImpl<statistics::bmsVoltage>;
using BmsCurrentStatistics = BufferAccessorImpl<statistics::bmsCurrent>; using BmsCurrentStatistics = BufferAccessorImpl<statistics::bmsCurrent>;
using BmsPowerStatistics = BufferAccessorImpl<statistics::bmsPower>; using BmsPowerStatistics = BufferAccessorImpl<statistics::bmsPower>;
#endif
using FrontLeftCurrentStatistics = BufferAccessorImpl<statistics::frontLeftCurrent>; using FrontLeftCurrentStatistics = BufferAccessorImpl<statistics::frontLeftCurrent>;
using FrontRightCurrentStatistics = BufferAccessorImpl<statistics::frontRightCurrent>; using FrontRightCurrentStatistics = BufferAccessorImpl<statistics::frontRightCurrent>;
using BackLeftCurrentStatistics = BufferAccessorImpl<statistics::backLeftCurrent>; using BackLeftCurrentStatistics = BufferAccessorImpl<statistics::backLeftCurrent>;