Added option to set display byte swapping

This commit is contained in:
2020-05-20 00:54:45 +02:00
parent 2c781a5ca5
commit a6f3bd658f
17 changed files with 153 additions and 138 deletions

View File

@@ -55,6 +55,7 @@ build_flags =
-DSPI_FREQUENCY=27000000 -DSPI_FREQUENCY=27000000
-DSPI_READ_FREQUENCY=20000000 -DSPI_READ_FREQUENCY=20000000
-DSPI_TOUCH_FREQUENCY=2500000 -DSPI_TOUCH_FREQUENCY=2500000
-DDEFAULT_SWAPSCREENBYTES=false
-DPINS_RX1=4 -DPINS_RX1=4
-DPINS_TX1=5 -DPINS_TX1=5
-DPINS_RX2=25 -DPINS_RX2=25
@@ -132,6 +133,7 @@ build_flags =
-DSPI_FREQUENCY=27000000 -DSPI_FREQUENCY=27000000
-DSPI_READ_FREQUENCY=20000000 -DSPI_READ_FREQUENCY=20000000
-DSPI_TOUCH_FREQUENCY=2500000 -DSPI_TOUCH_FREQUENCY=2500000
-DDEFAULT_SWAPSCREENBYTES=false
-DPINS_RX1=18 -DPINS_RX1=18
-DPINS_TX1=19 -DPINS_TX1=19
-DPINS_RX2=23 -DPINS_RX2=23
@@ -182,6 +184,7 @@ build_flags =
-DTOUCH_CS=22 -DTOUCH_CS=22
-DSPI_FREQUENCY=20000000 -DSPI_FREQUENCY=20000000
-DSPI_TOUCH_FREQUENCY=2500000 -DSPI_TOUCH_FREQUENCY=2500000
-DDEFAULT_SWAPSCREENBYTES=false
; TODO: actually assign pins ; TODO: actually assign pins
-DPINS_RX1=22 -DPINS_RX1=22
-DPINS_TX1=25 -DPINS_TX1=25

View File

@@ -14,7 +14,7 @@
namespace { namespace {
class StatusDisplay; class StatusDisplay;
class PotiSettingsMenu; class BoardcomputerHardwareSettingsMenu;
} }
namespace { namespace {
@@ -102,6 +102,6 @@ void CalibrateDisplay::triggered()
if (m_bootup) if (m_bootup)
switchScreen<StatusDisplay>(); switchScreen<StatusDisplay>();
else else
switchScreen<PotiSettingsMenu>(); switchScreen<BoardcomputerHardwareSettingsMenu>();
} }
} }

View File

@@ -6,14 +6,16 @@
#include "changevaluedisplay.h" #include "changevaluedisplay.h"
#include "actions/dummyaction.h" #include "actions/dummyaction.h"
#include "actions/switchscreenaction.h" #include "actions/switchscreenaction.h"
#include "actions/toggleboolaction.h"
#include "icons/back.h" #include "icons/back.h"
#include "checkboxicon.h"
#include "texts.h" #include "texts.h"
#include "settingsaccessors.h" #include "settingsaccessors.h"
namespace { namespace {
class PotiSettingsMenu; class BoardcomputerHardwareSettingsMenu;
class CalibrateDisplay; class CalibrateDisplay;
class HardwareSettingsMenu; class SettingsMenu;
} }
namespace { namespace {
@@ -26,15 +28,15 @@ public:
String text() const override { return String{"brems: "} + raw_brems + ": " + brems; } String text() const override { return String{"brems: "} + raw_brems + ": " + brems; }
}; };
using SampleCountChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETSAMPLECOUNT>, SampleCountAccessor, SwitchScreenAction<PotiSettingsMenu>>; using SampleCountChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETSAMPLECOUNT>, SampleCountAccessor, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>>;
using GasMinChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETGASMIN>, GasMinAccessor, SwitchScreenAction<PotiSettingsMenu>>; using GasMinChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETGASMIN>, GasMinAccessor, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>>;
using GasMaxChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETGASMAX>, GasMaxAccessor, SwitchScreenAction<PotiSettingsMenu>>; using GasMaxChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETGASMAX>, GasMaxAccessor, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>>;
using BremsMinChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETBREMSMIN>, BremsMinAccessor, SwitchScreenAction<PotiSettingsMenu>>; using BremsMinChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETBREMSMIN>, BremsMinAccessor, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>>;
using BremsMaxChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETBREMSMAX>, BremsMaxAccessor, SwitchScreenAction<PotiSettingsMenu>>; using BremsMaxChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETBREMSMAX>, BremsMaxAccessor, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>>;
class PotiSettingsMenu : class BoardcomputerHardwareSettingsMenu :
public MenuDisplay, public MenuDisplay,
public StaticText<TEXT_POTISETTINGS>, public StaticText<TEXT_BOARDCOMPUTERHARDWARESETTINGS>,
public StaticMenuDefinition< public StaticMenuDefinition<
makeComponent<MenuItem, GasText, DisabledColor, StaticFont<2>, DummyAction>, makeComponent<MenuItem, GasText, DisabledColor, StaticFont<2>, DummyAction>,
makeComponent<MenuItem, BremsText, DisabledColor, StaticFont<2>, DummyAction>, makeComponent<MenuItem, BremsText, DisabledColor, StaticFont<2>, DummyAction>,
@@ -44,7 +46,8 @@ class PotiSettingsMenu :
makeComponent<MenuItem, StaticText<TEXT_SETGASMAX>, SwitchScreenAction<GasMaxChangeScreen>>, makeComponent<MenuItem, StaticText<TEXT_SETGASMAX>, SwitchScreenAction<GasMaxChangeScreen>>,
makeComponent<MenuItem, StaticText<TEXT_SETBREMSMIN>, SwitchScreenAction<BremsMinChangeScreen>>, makeComponent<MenuItem, StaticText<TEXT_SETBREMSMIN>, SwitchScreenAction<BremsMinChangeScreen>>,
makeComponent<MenuItem, StaticText<TEXT_SETBREMSMAX>, SwitchScreenAction<BremsMaxChangeScreen>>, makeComponent<MenuItem, StaticText<TEXT_SETBREMSMAX>, SwitchScreenAction<BremsMaxChangeScreen>>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<HardwareSettingsMenu>, StaticMenuItemIcon<&icons::back>> makeComponent<MenuItem, StaticText<TEXT_SWAPSCREENBYTES>, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&icons::back>>
> >
{}; {};
} }

View File

@@ -15,25 +15,24 @@
#include "settingsaccessors.h" #include "settingsaccessors.h"
namespace { namespace {
class HardwareSettingsMenu; class ControllerHardwareSettingsMenu;
class PotiSettingsMenu; class BoardcomputerHardwareSettingsMenu;
class EnableMenu; class EnableMenu;
class InvertMenu; class InvertMenu;
class SettingsMenu; class SettingsMenu;
} }
namespace { namespace {
using WheelDiameterMmChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_WHEELDIAMETERMM>, WheelDiameterMmAccessor, SwitchScreenAction<HardwareSettingsMenu>>; using WheelDiameterMmChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_WHEELDIAMETERMM>, WheelDiameterMmAccessor, SwitchScreenAction<ControllerHardwareSettingsMenu>>;
using WheelDiameterInchChangeScreen = makeComponent<ChangeValueDisplay<float>, StaticText<TEXT_WHEELDIAMETERINCH>, WheelDiameterInchAccessor, RatioNumberStep<float, std::ratio<1,10>>, SwitchScreenAction<HardwareSettingsMenu>>; using WheelDiameterInchChangeScreen = makeComponent<ChangeValueDisplay<float>, StaticText<TEXT_WHEELDIAMETERINCH>, WheelDiameterInchAccessor, RatioNumberStep<float, std::ratio<1,10>>, SwitchScreenAction<ControllerHardwareSettingsMenu>>;
using NumMagnetPolesChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_NUMMAGNETPOLES>, NumMagnetPolesAccessor, SwitchScreenAction<HardwareSettingsMenu>>; using NumMagnetPolesChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_NUMMAGNETPOLES>, NumMagnetPolesAccessor, SwitchScreenAction<ControllerHardwareSettingsMenu>>;
class HardwareSettingsMenu : class ControllerHardwareSettingsMenu :
public MenuDisplay, public MenuDisplay,
public StaticText<TEXT_HARDWARESETTINGS>, public StaticText<TEXT_CONTROLLERHARDWARESETTINGS>,
public StaticMenuDefinition< public StaticMenuDefinition<
makeComponent<MenuItem, StaticText<TEXT_SETENABLED>, SwitchScreenAction<EnableMenu>>, makeComponent<MenuItem, StaticText<TEXT_SETENABLED>, SwitchScreenAction<EnableMenu>>,
makeComponent<MenuItem, StaticText<TEXT_SETINVERTED>, SwitchScreenAction<InvertMenu>>, makeComponent<MenuItem, StaticText<TEXT_SETINVERTED>, SwitchScreenAction<InvertMenu>>,
makeComponent<MenuItem, StaticText<TEXT_POTISETTINGS>, SwitchScreenAction<PotiSettingsMenu>>,
makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERMM>, SwitchScreenAction<WheelDiameterMmChangeScreen>>, makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERMM>, SwitchScreenAction<WheelDiameterMmChangeScreen>>,
makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERINCH>, SwitchScreenAction<WheelDiameterInchChangeScreen>>, makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERINCH>, SwitchScreenAction<WheelDiameterInchChangeScreen>>,
makeComponent<MenuItem, StaticText<TEXT_NUMMAGNETPOLES>, SwitchScreenAction<NumMagnetPolesChangeScreen>>, makeComponent<MenuItem, StaticText<TEXT_NUMMAGNETPOLES>, SwitchScreenAction<NumMagnetPolesChangeScreen>>,

View File

@@ -12,7 +12,7 @@
#include "settingsaccessors.h" #include "settingsaccessors.h"
namespace { namespace {
class HardwareSettingsMenu; class ControllerHardwareSettingsMenu;
} }
namespace { namespace {
@@ -24,7 +24,7 @@ class EnableMenu :
makeComponent<MenuItem, StaticText<TEXT_ENABLEFRONTRIGHT>, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>, makeComponent<MenuItem, StaticText<TEXT_ENABLEFRONTRIGHT>, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>,
makeComponent<MenuItem, StaticText<TEXT_ENABLEBACKLEFT>, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>, makeComponent<MenuItem, StaticText<TEXT_ENABLEBACKLEFT>, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>,
makeComponent<MenuItem, StaticText<TEXT_ENABLEBACKRIGHT>, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>, makeComponent<MenuItem, StaticText<TEXT_ENABLEBACKRIGHT>, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<HardwareSettingsMenu>, StaticMenuItemIcon<&icons::back>> makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ControllerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::back>>
> >
{}; {};
} }

View File

@@ -12,7 +12,7 @@
#include "settingsaccessors.h" #include "settingsaccessors.h"
namespace { namespace {
class HardwareSettingsMenu; class ControllerHardwareSettingsMenu;
} }
namespace { namespace {
@@ -24,7 +24,7 @@ class InvertMenu :
makeComponent<MenuItem, StaticText<TEXT_INVERTFRONTRIGHT>, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>, makeComponent<MenuItem, StaticText<TEXT_INVERTFRONTRIGHT>, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_INVERTBACKLEFT>, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>, makeComponent<MenuItem, StaticText<TEXT_INVERTBACKLEFT>, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_INVERTBACKRIGHT>, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>, makeComponent<MenuItem, StaticText<TEXT_INVERTBACKRIGHT>, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<HardwareSettingsMenu>, StaticMenuItemIcon<&icons::back>> makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ControllerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::back>>
> >
{}; {};
} }

View File

@@ -23,26 +23,26 @@ class ApplyPresetAction : public virtual ActionInterface {public: void triggered
template<const Settings::Limits *preset> template<const Settings::Limits *preset>
class ApplyLimitsPresetAction : public virtual ActionInterface {public: void triggered() override { settings.limits = *preset; saveSettings(); } }; class ApplyLimitsPresetAction : public virtual ActionInterface {public: void triggered() override { settings.limits = *preset; saveSettings(); } };
template<const Settings::Hardware::Poti *preset> template<const Settings::ControllerHardware *preset>
class ApplyPotiPresetAction : public virtual ActionInterface {public: void triggered() override { settings.hardware.poti = *preset; saveSettings(); } }; class ApplyControllerHardwarePresetAction : public virtual ActionInterface {public: void triggered() override { settings.controllerHardware = *preset; saveSettings(); } };
template<const Settings::Hardware *preset> template<const Settings::BoardcomputerHardware *preset>
class ApplyHardwarePresetAction : public virtual ActionInterface {public: void triggered() override { settings.hardware = *preset; saveSettings(); } }; class ApplyBoardcomputerHardwarePresetAction : public virtual ActionInterface {public: void triggered() override { settings.boardcomputerHardware = *preset; saveSettings(); } };
class PresetsMenu : class PresetsMenu :
public MenuDisplay, public MenuDisplay,
public StaticText<TEXT_PRESETS>, public StaticText<TEXT_PRESETS>,
public StaticMenuDefinition< public StaticMenuDefinition<
makeComponent<MenuItem, StaticText<TEXT_DEFAULTEVERYTHING>, ApplyPresetAction<&presets::defaultSettings>>, makeComponent<MenuItem, StaticText<TEXT_DEFAULTEVERYTHING>, ApplyPresetAction<&presets::defaultSettings>>,
makeComponent<MenuItem, StaticText<TEXT_DEFAULTLIMITS>, ApplyLimitsPresetAction<&presets::defaultLimits>>, makeComponent<MenuItem, StaticText<TEXT_DEFAULTLIMITS>, ApplyLimitsPresetAction<&presets::defaultLimits>>,
makeComponent<MenuItem, StaticText<TEXT_KIDSLIMITS>, ApplyLimitsPresetAction<&presets::kidsLimits>>, makeComponent<MenuItem, StaticText<TEXT_KIDSLIMITS>, ApplyLimitsPresetAction<&presets::kidsLimits>>,
makeComponent<MenuItem, StaticText<TEXT_DEFAULTPOTI>, ApplyPotiPresetAction<&presets::defaultPoti>>, makeComponent<MenuItem, StaticText<TEXT_DEFAULTCONTROLLERHARDWARE>, ApplyControllerHardwarePresetAction<&presets::defaultControllerHardware>>,
makeComponent<MenuItem, StaticText<TEXT_DEFAULTHARDWARE>, ApplyHardwarePresetAction<&presets::defaultHardware>>, makeComponent<MenuItem, StaticText<TEXT_DEFAULTBOARDCOMPUTERHARDWARE>, ApplyBoardcomputerHardwarePresetAction<&presets::defaultBoardcomputerHardware>>,
makeComponent<MenuItem, StaticText<TEXT_STREET>, DisabledColor, DummyAction>, makeComponent<MenuItem, StaticText<TEXT_STREET>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_SIDEWALK>, DisabledColor, DummyAction>, makeComponent<MenuItem, StaticText<TEXT_SIDEWALK>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_POLICE>, DisabledColor, DummyAction>, makeComponent<MenuItem, StaticText<TEXT_POLICE>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_RACE>, DisabledColor, DummyAction>, makeComponent<MenuItem, StaticText<TEXT_RACE>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>> makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>
> >
{}; {};
} }

View File

@@ -23,7 +23,8 @@ class LimitsSettingsMenu;
class WifiSettingsMenu; class WifiSettingsMenu;
class BluetoothSettingsMenu; class BluetoothSettingsMenu;
class ModesSettingsMenu; class ModesSettingsMenu;
class HardwareSettingsMenu; class ControllerHardwareSettingsMenu;
class BoardcomputerHardwareSettingsMenu;
class BuzzerMenu; class BuzzerMenu;
class AboutMenu; class AboutMenu;
class MainMenu; class MainMenu;
@@ -37,17 +38,18 @@ class SettingsMenu :
public MenuDisplay, public MenuDisplay,
public StaticText<TEXT_SETTINGS>, public StaticText<TEXT_SETTINGS>,
public StaticMenuDefinition< public StaticMenuDefinition<
makeComponent<MenuItem, StaticText<TEXT_LIMITSSETTINGS>, SwitchScreenAction<LimitsSettingsMenu>>, makeComponent<MenuItem, StaticText<TEXT_LIMITSSETTINGS>, SwitchScreenAction<LimitsSettingsMenu>>,
makeComponent<MenuItem, StaticText<TEXT_WIFISETTINGS>, SwitchScreenAction<WifiSettingsMenu>, StaticMenuItemIcon<&icons::wifi>>, makeComponent<MenuItem, StaticText<TEXT_WIFISETTINGS>, SwitchScreenAction<WifiSettingsMenu>, StaticMenuItemIcon<&icons::wifi>>,
makeComponent<MenuItem, StaticText<TEXT_BLUETOOTHSETTINGS>, SwitchScreenAction<BluetoothSettingsMenu>, StaticMenuItemIcon<&icons::bluetooth>>, makeComponent<MenuItem, StaticText<TEXT_BLUETOOTHSETTINGS>, SwitchScreenAction<BluetoothSettingsMenu>, StaticMenuItemIcon<&icons::bluetooth>>,
makeComponent<MenuItem, StaticText<TEXT_MODESSETTINGS>, SwitchScreenAction<ModesSettingsMenu>>, makeComponent<MenuItem, StaticText<TEXT_MODESSETTINGS>, SwitchScreenAction<ModesSettingsMenu>>,
makeComponent<MenuItem, StaticText<TEXT_HARDWARESETTINGS>, SwitchScreenAction<HardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>, makeComponent<MenuItem, StaticText<TEXT_CONTROLLERHARDWARESETTINGS>, SwitchScreenAction<ControllerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>,
makeComponent<MenuItem, StaticText<TEXT_AUTOCONNECTBMS>, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>, makeComponent<MenuItem, StaticText<TEXT_BOARDCOMPUTERHARDWARESETTINGS>, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>,
makeComponent<MenuItem, StaticText<TEXT_BUZZER>, SwitchScreenAction<BuzzerMenu>, StaticMenuItemIcon<&icons::buzzer>>, makeComponent<MenuItem, StaticText<TEXT_AUTOCONNECTBMS>, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>,
makeComponent<MenuItem, StaticText<TEXT_FRONTLED>, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>, makeComponent<MenuItem, StaticText<TEXT_BUZZER>, SwitchScreenAction<BuzzerMenu>, StaticMenuItemIcon<&icons::buzzer>>,
makeComponent<MenuItem, StaticText<TEXT_BACKLED>, ToggleBoolAction, CheckboxIcon, BackLedAccessor>, makeComponent<MenuItem, StaticText<TEXT_FRONTLED>, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_ABOUT>, SwitchScreenAction<AboutMenu>, StaticMenuItemIcon<&icons::info>>, makeComponent<MenuItem, StaticText<TEXT_BACKLED>, ToggleBoolAction, CheckboxIcon, BackLedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>> makeComponent<MenuItem, StaticText<TEXT_ABOUT>, SwitchScreenAction<AboutMenu>, StaticMenuItemIcon<&icons::info>>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>
> >
{}; {};
} }

View File

@@ -224,9 +224,9 @@ void StatusDisplay::BoardStatus::drawWarning()
tft.drawString("No data!", 60, m_y+50, 4); tft.drawString("No data!", 60, m_y+50, 4);
tft.setTextColor(TFT_WHITE, TFT_BLACK); 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.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() void StatusDisplay::BoardStatus::MotorStatus::start()

View File

@@ -23,8 +23,8 @@ float avgSpeed, avgSpeedKmh, sumCurrent, sumAbsoluteCurrent;
Settings settings; Settings settings;
SettingsSaver settingsSaver; SettingsSaver settingsSaver;
Controller front{Serial1, settings.hardware.enableFrontLeft, settings.hardware.enableFrontRight, settings.hardware.invertFrontLeft, settings.hardware.invertFrontRight}; Controller front{Serial1, settings.controllerHardware.enableFrontLeft, settings.controllerHardware.enableFrontRight, settings.controllerHardware.invertFrontLeft, settings.controllerHardware.invertFrontRight};
Controller back{Serial2, settings.hardware.enableBackLeft, settings.hardware.enableBackRight, settings.hardware.invertBackLeft, settings.hardware.invertBackRight}; Controller back{Serial2, settings.controllerHardware.enableBackLeft, settings.controllerHardware.enableBackRight, settings.controllerHardware.invertBackLeft, settings.controllerHardware.invertBackRight};
struct { struct {
unsigned long lastTime = millis(); unsigned long lastTime = millis();

View File

@@ -191,9 +191,9 @@ void MenuDisplay::redraw()
auto icon = item.icon(); auto icon = item.icon();
if (icon) if (icon)
{ {
tft.setSwapBytes(true); tft.setSwapBytes(!settings.boardcomputerHardware.swapScreenBytes);
tft.pushImage(6, labelsIter->y()+1, icon->WIDTH, icon->HEIGHT, icon->buffer); tft.pushImage(6, labelsIter->y()+1, icon->WIDTH, icon->HEIGHT, icon->buffer);
tft.setSwapBytes(false); tft.setSwapBytes(settings.boardcomputerHardware.swapScreenBytes);
} }
*iconsIter = icon; *iconsIter = icon;
} }

View File

@@ -18,15 +18,7 @@ constexpr Settings::Limits kidsLimits {
.phaseAdvMax = 20 .phaseAdvMax = 20
}; };
constexpr Settings::Hardware::Poti defaultPoti { constexpr Settings::ControllerHardware defaultControllerHardware {
.sampleCount = 100,
.gasMin = DEFAULT_GASMIN,
.gasMax = DEFAULT_GASMAX,
.bremsMin = DEFAULT_BREMSMIN,
.bremsMax = DEFAULT_BREMSMAX
};
constexpr Settings::Hardware defaultHardware {
.enableFrontLeft = true, .enableFrontLeft = true,
.enableFrontRight = true, .enableFrontRight = true,
.enableBackLeft = true, .enableBackLeft = true,
@@ -37,13 +29,20 @@ constexpr Settings::Hardware defaultHardware {
.invertBackLeft = false, .invertBackLeft = false,
.invertBackRight = true, .invertBackRight = true,
.poti = defaultPoti,
.wheelDiameter = 165, .wheelDiameter = 165,
.numMagnetPoles = 15, .numMagnetPoles = 15,
.swapFrontBack = false .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 { constexpr Settings::DefaultMode defaultDefaultMode {
.ctrlTyp = ControlType::FieldOrientedControl, .ctrlTyp = ControlType::FieldOrientedControl,
.ctrlMod = ControlMode::Torque, .ctrlMod = ControlMode::Torque,
@@ -76,7 +75,8 @@ constexpr Settings defaultSettings{
.reverseBeepDuration0 = 500, .reverseBeepDuration0 = 500,
.reverseBeepDuration1 = 500, .reverseBeepDuration1 = 500,
.limits = defaultLimits, .limits = defaultLimits,
.hardware = defaultHardware, .controllerHardware = defaultControllerHardware,
.boardcomputerHardware = defaultBoardcomputerHardware,
.defaultMode = defaultDefaultMode, .defaultMode = defaultDefaultMode,
.tempomatMode = defaultTempomatMode, .tempomatMode = defaultTempomatMode,
.larsmMode = defaultLarsmMode .larsmMode = defaultLarsmMode

View File

@@ -14,7 +14,7 @@
#include "displays/menus/feedbackdebugmenu.h" #include "displays/menus/feedbackdebugmenu.h"
#include "displays/menus/genericwifisettingsmenu.h" #include "displays/menus/genericwifisettingsmenu.h"
#include "displays/menus/graphsmenu.h" #include "displays/menus/graphsmenu.h"
#include "displays/menus/hardwaresettingsmenu.h" #include "displays/menus/controllerhardwaresettingsmenu.h"
#include "displays/menus/invertmenu.h" #include "displays/menus/invertmenu.h"
#include "displays/menus/larsmmodesettingsmenu.h" #include "displays/menus/larsmmodesettingsmenu.h"
#include "displays/menus/limitssettingsmenu.h" #include "displays/menus/limitssettingsmenu.h"
@@ -24,7 +24,7 @@
#include "displays/menus/motorfeedbackdebugmenu.h" #include "displays/menus/motorfeedbackdebugmenu.h"
#include "displays/menus/motorstatedebugmenu.h" #include "displays/menus/motorstatedebugmenu.h"
#include "displays/menus/presetsmenu.h" #include "displays/menus/presetsmenu.h"
#include "displays/menus/potisettingsmenu.h" #include "displays/menus/boardcomputerhardwaresettingsmenu.h"
#include "displays/menus/selectmodemenu.h" #include "displays/menus/selectmodemenu.h"
#include "displays/menus/settingsmenu.h" #include "displays/menus/settingsmenu.h"
#include "displays/menus/stationwifisettingsmenu.h" #include "displays/menus/stationwifisettingsmenu.h"
@@ -59,6 +59,7 @@ union X {
BuzzerMenu buzzerMenu; BuzzerMenu buzzerMenu;
FrontCommandDebugMenu frontCommandDebugMenu; FrontCommandDebugMenu frontCommandDebugMenu;
BackCommandDebugMenu backCommandDebugMenu; BackCommandDebugMenu backCommandDebugMenu;
ControllerHardwareSettingsMenu controllerHardwareSettingsMenu;
DebugMenu debugMenu; DebugMenu debugMenu;
DefaultModeSettingsMenu defaultModeSettingsMenu; DefaultModeSettingsMenu defaultModeSettingsMenu;
DemosMenu demosMenu; DemosMenu demosMenu;
@@ -68,7 +69,6 @@ union X {
BackFeedbackDebugMenu backFeedbackDebugMenu; BackFeedbackDebugMenu backFeedbackDebugMenu;
GenericWifiSettingsMenu genericWifiSettingsMenu; GenericWifiSettingsMenu genericWifiSettingsMenu;
GraphsMenu graphsMenu; GraphsMenu graphsMenu;
HardwareSettingsMenu hardwareSettingsMenu;
InvertMenu invertMenu; InvertMenu invertMenu;
LarsmModeSettingsMenu larsmModeSettingsMenu; LarsmModeSettingsMenu larsmModeSettingsMenu;
LimitsSettingsMenu limitsSettingsMenu; LimitsSettingsMenu limitsSettingsMenu;
@@ -83,7 +83,7 @@ union X {
FrontRightMotorFeedbackDebugMenu frontRightMotorFeedbackDebugMenu; FrontRightMotorFeedbackDebugMenu frontRightMotorFeedbackDebugMenu;
BackLeftMotorFeedbackDebugMenu backLeftMotorFeedbackDebugMenu; BackLeftMotorFeedbackDebugMenu backLeftMotorFeedbackDebugMenu;
BackRightMotorFeedbackDebugMenu backRightMotorFeedbackDebugMenu; BackRightMotorFeedbackDebugMenu backRightMotorFeedbackDebugMenu;
PotiSettingsMenu potiSettingsMenu; BoardcomputerHardwareSettingsMenu boardcomputerHardwareSettingsMenu;
PresetsMenu presetsMenu; PresetsMenu presetsMenu;
SelectModeMenu selectModeMenu; SelectModeMenu selectModeMenu;
SettingsMenu settingsMenu; SettingsMenu settingsMenu;
@@ -171,6 +171,8 @@ template<> decltype(displays.accessPointWifiSettingsMenu) &
template<> decltype(displays.bluetoothSettingsMenu) &getRefByType<decltype(displays.bluetoothSettingsMenu)>() { return displays.bluetoothSettingsMenu; } template<> decltype(displays.bluetoothSettingsMenu) &getRefByType<decltype(displays.bluetoothSettingsMenu)>() { return displays.bluetoothSettingsMenu; }
template<> decltype(displays.bmsMenu) &getRefByType<decltype(displays.bmsMenu)>() { return displays.bmsMenu; } template<> decltype(displays.bmsMenu) &getRefByType<decltype(displays.bmsMenu)>() { return displays.bmsMenu; }
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.controllerHardwareSettingsMenu) &getRefByType<decltype(displays.controllerHardwareSettingsMenu)>() { return displays.controllerHardwareSettingsMenu; }
template<> decltype(displays.frontCommandDebugMenu) &getRefByType<decltype(displays.frontCommandDebugMenu)>() { return displays.frontCommandDebugMenu; } template<> decltype(displays.frontCommandDebugMenu) &getRefByType<decltype(displays.frontCommandDebugMenu)>() { return displays.frontCommandDebugMenu; }
template<> decltype(displays.backCommandDebugMenu) &getRefByType<decltype(displays.backCommandDebugMenu)>() { return displays.backCommandDebugMenu; } template<> decltype(displays.backCommandDebugMenu) &getRefByType<decltype(displays.backCommandDebugMenu)>() { return displays.backCommandDebugMenu; }
template<> decltype(displays.debugMenu) &getRefByType<decltype(displays.debugMenu)>() { return displays.debugMenu; } template<> decltype(displays.debugMenu) &getRefByType<decltype(displays.debugMenu)>() { return displays.debugMenu; }
@@ -182,7 +184,6 @@ template<> decltype(displays.frontFeedbackDebugMenu) &
template<> decltype(displays.backFeedbackDebugMenu) &getRefByType<decltype(displays.backFeedbackDebugMenu)>() { return displays.backFeedbackDebugMenu; } template<> decltype(displays.backFeedbackDebugMenu) &getRefByType<decltype(displays.backFeedbackDebugMenu)>() { return displays.backFeedbackDebugMenu; }
template<> decltype(displays.genericWifiSettingsMenu) &getRefByType<decltype(displays.genericWifiSettingsMenu)>() { return displays.genericWifiSettingsMenu; } template<> decltype(displays.genericWifiSettingsMenu) &getRefByType<decltype(displays.genericWifiSettingsMenu)>() { return displays.genericWifiSettingsMenu; }
template<> decltype(displays.graphsMenu) &getRefByType<decltype(displays.graphsMenu)>() { return displays.graphsMenu; } template<> decltype(displays.graphsMenu) &getRefByType<decltype(displays.graphsMenu)>() { return displays.graphsMenu; }
template<> decltype(displays.hardwareSettingsMenu) &getRefByType<decltype(displays.hardwareSettingsMenu)>() { return displays.hardwareSettingsMenu; }
template<> decltype(displays.invertMenu) &getRefByType<decltype(displays.invertMenu)>() { return displays.invertMenu; } template<> decltype(displays.invertMenu) &getRefByType<decltype(displays.invertMenu)>() { return displays.invertMenu; }
template<> decltype(displays.larsmModeSettingsMenu) &getRefByType<decltype(displays.larsmModeSettingsMenu)>() { return displays.larsmModeSettingsMenu; } template<> decltype(displays.larsmModeSettingsMenu) &getRefByType<decltype(displays.larsmModeSettingsMenu)>() { return displays.larsmModeSettingsMenu; }
template<> decltype(displays.limitsSettingsMenu) &getRefByType<decltype(displays.limitsSettingsMenu)>() { return displays.limitsSettingsMenu; } template<> decltype(displays.limitsSettingsMenu) &getRefByType<decltype(displays.limitsSettingsMenu)>() { return displays.limitsSettingsMenu; }
@@ -197,7 +198,6 @@ template<> decltype(displays.frontLeftMotorFeedbackDebugMenu) &
template<> decltype(displays.frontRightMotorFeedbackDebugMenu) &getRefByType<decltype(displays.frontRightMotorFeedbackDebugMenu)>() { return displays.frontRightMotorFeedbackDebugMenu; } template<> decltype(displays.frontRightMotorFeedbackDebugMenu) &getRefByType<decltype(displays.frontRightMotorFeedbackDebugMenu)>() { return displays.frontRightMotorFeedbackDebugMenu; }
template<> decltype(displays.backLeftMotorFeedbackDebugMenu) &getRefByType<decltype(displays.backLeftMotorFeedbackDebugMenu)>() { return displays.backLeftMotorFeedbackDebugMenu; } template<> decltype(displays.backLeftMotorFeedbackDebugMenu) &getRefByType<decltype(displays.backLeftMotorFeedbackDebugMenu)>() { return displays.backLeftMotorFeedbackDebugMenu; }
template<> decltype(displays.backRightMotorFeedbackDebugMenu) &getRefByType<decltype(displays.backRightMotorFeedbackDebugMenu)>() { return displays.backRightMotorFeedbackDebugMenu; } template<> decltype(displays.backRightMotorFeedbackDebugMenu) &getRefByType<decltype(displays.backRightMotorFeedbackDebugMenu)>() { return displays.backRightMotorFeedbackDebugMenu; }
template<> decltype(displays.potiSettingsMenu) &getRefByType<decltype(displays.potiSettingsMenu)>() { return displays.potiSettingsMenu; }
template<> decltype(displays.presetsMenu) &getRefByType<decltype(displays.presetsMenu)>() { return displays.presetsMenu; } template<> decltype(displays.presetsMenu) &getRefByType<decltype(displays.presetsMenu)>() { return displays.presetsMenu; }
template<> decltype(displays.selectModeMenu) &getRefByType<decltype(displays.selectModeMenu)>() { return displays.selectModeMenu; } template<> decltype(displays.selectModeMenu) &getRefByType<decltype(displays.selectModeMenu)>() { return displays.selectModeMenu; }
template<> decltype(displays.settingsMenu) &getRefByType<decltype(displays.settingsMenu)>() { return displays.settingsMenu; } template<> decltype(displays.settingsMenu) &getRefByType<decltype(displays.settingsMenu)>() { return displays.settingsMenu; }
@@ -372,6 +372,9 @@ void updateDisplay()
void redrawDisplay() void redrawDisplay()
{ {
if (currentDisplay) if (currentDisplay)
{
tft.setSwapBytes(settings.boardcomputerHardware.swapScreenBytes);
currentDisplay->redraw(); currentDisplay->redraw();
}
} }
} }

View File

@@ -24,19 +24,20 @@ struct Settings
int16_t phaseAdvMax; // [deg] Maximum Phase Advance angle (only for SIN). Higher angle results in higher maximum speed. int16_t phaseAdvMax; // [deg] Maximum Phase Advance angle (only for SIN). Higher angle results in higher maximum speed.
} limits; } limits;
struct Hardware { struct ControllerHardware {
bool enableFrontLeft, enableFrontRight, enableBackLeft, enableBackRight; bool enableFrontLeft, enableFrontRight, enableBackLeft, enableBackRight;
bool invertFrontLeft, invertFrontRight, invertBackLeft, invertBackRight; bool invertFrontLeft, invertFrontRight, invertBackLeft, invertBackRight;
struct Poti {
int16_t sampleCount;
int16_t gasMin, gasMax, bremsMin, bremsMax;
} poti;
int16_t wheelDiameter; // in mm int16_t wheelDiameter; // in mm
int16_t numMagnetPoles; // virtual RPM per one real RPM int16_t numMagnetPoles; // virtual RPM per one real RPM
bool swapFrontBack; bool swapFrontBack;
} hardware; } controllerHardware;
struct BoardcomputerHardware {
int16_t sampleCount;
int16_t gasMin, gasMax, bremsMin, bremsMax;
bool swapScreenBytes;
} boardcomputerHardware;
struct DefaultMode { struct DefaultMode {
ControlType ctrlTyp; ControlType ctrlTyp;
@@ -83,23 +84,24 @@ void Settings::executeForEverySetting(T &&callable)
callable("fieldWeakMax", limits.fieldWeakMax); callable("fieldWeakMax", limits.fieldWeakMax);
callable("phaseAdvMax", limits.phaseAdvMax); callable("phaseAdvMax", limits.phaseAdvMax);
callable("enableFrontLeft", hardware.enableFrontLeft); callable("enableFrontLeft", controllerHardware.enableFrontLeft);
callable("enableFrontRigh", hardware.enableFrontRight); callable("enableFrontRigh", controllerHardware.enableFrontRight);
callable("enableBackLeft", hardware.enableBackLeft); callable("enableBackLeft", controllerHardware.enableBackLeft);
callable("enableBackRight", hardware.enableBackRight); callable("enableBackRight", controllerHardware.enableBackRight);
callable("invertFrontLeft", hardware.invertFrontLeft); callable("invertFrontLeft", controllerHardware.invertFrontLeft);
callable("invertFrontRigh", hardware.invertFrontRight); callable("invertFrontRigh", controllerHardware.invertFrontRight);
callable("invertBackLeft", hardware.invertBackLeft); callable("invertBackLeft", controllerHardware.invertBackLeft);
callable("invertBackRight", hardware.invertBackRight); callable("invertBackRight", controllerHardware.invertBackRight);
callable("sampleCount", hardware.poti.sampleCount); callable("swapFrontBack", controllerHardware.swapFrontBack);
callable("gasMin", hardware.poti.gasMin);
callable("gasMax", hardware.poti.gasMax);
callable("bremsMin", hardware.poti.bremsMin);
callable("bremsMax", hardware.poti.bremsMax);
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.ctrlTyp", defaultMode.ctrlTyp);
callable("default.ctrlMod", defaultMode.ctrlMod); callable("default.ctrlMod", defaultMode.ctrlMod);

View File

@@ -30,34 +30,35 @@ struct NMotMaxRpmAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &g
struct FieldWeakMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.limits.fieldWeakMax; } }; struct FieldWeakMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.limits.fieldWeakMax; } };
struct PhaseAdvMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.limits.phaseAdvMax; } }; struct PhaseAdvMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.limits.phaseAdvMax; } };
struct FrontLeftEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.enableFrontLeft; } }; struct FrontLeftEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableFrontLeft; } };
struct FrontRightEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.enableFrontRight; } }; struct FrontRightEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableFrontRight; } };
struct BackLeftEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.enableBackLeft; } }; struct BackLeftEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableBackLeft; } };
struct BackRightEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.enableBackRight; } }; struct BackRightEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableBackRight; } };
struct FrontLeftInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.invertFrontLeft; } }; struct FrontLeftInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.invertFrontLeft; } };
struct FrontRightInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.invertFrontRight; } }; struct FrontRightInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.invertFrontRight; } };
struct BackLeftInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.invertBackLeft; } }; struct BackLeftInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.invertBackLeft; } };
struct BackRightInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.invertBackRight; } }; struct BackRightInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.invertBackRight; } };
struct SampleCountAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.hardware.poti.sampleCount; } }; struct WheelDiameterMmAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.controllerHardware.wheelDiameter; } };
struct GasMinAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.hardware.poti.gasMin; } };
struct GasMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.hardware.poti.gasMax; } };
struct BremsMinAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.hardware.poti.bremsMin; } };
struct BremsMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.hardware.poti.bremsMax; } };
struct WheelDiameterMmAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.hardware.wheelDiameter; } };
struct WheelDiameterInchAccessor : public virtual AccessorInterface<float> struct WheelDiameterInchAccessor : public virtual AccessorInterface<float>
{ {
float getValue() const override { return convertToInch(settings.hardware.wheelDiameter); } float getValue() const override { return convertToInch(settings.controllerHardware.wheelDiameter); }
void setValue(float value) override { settings.hardware.wheelDiameter = convertFromInch(value); saveSettings(); } void setValue(float value) override { settings.controllerHardware.wheelDiameter = convertFromInch(value); saveSettings(); }
}; };
struct NumMagnetPolesAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.hardware.numMagnetPoles; } }; struct NumMagnetPolesAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.controllerHardware.numMagnetPoles; } };
struct SwapFrontBackAccessor : public RefAccessorSaveSettings<bool> { struct SwapFrontBackAccessor : public RefAccessorSaveSettings<bool> {
bool &getRef() const override { return settings.hardware.swapFrontBack; } bool &getRef() const override { return settings.controllerHardware.swapFrontBack; }
void setValue(bool value) override { RefAccessorSaveSettings<bool>::setValue(value); updateSwapFrontBack(); }; void setValue(bool value) override { RefAccessorSaveSettings<bool>::setValue(value); updateSwapFrontBack(); };
}; };
struct SampleCountAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.sampleCount; } };
struct GasMinAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.gasMin; } };
struct GasMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.gasMax; } };
struct BremsMinAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMin; } };
struct BremsMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMax; } };
struct SwapScreenBytesAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.boardcomputerHardware.swapScreenBytes; } };
struct DefaultModeCtrlTypAccessor : public RefAccessorSaveSettings<ControlType> { ControlType &getRef() const override { return settings.defaultMode.ctrlTyp; } }; struct DefaultModeCtrlTypAccessor : public RefAccessorSaveSettings<ControlType> { ControlType &getRef() const override { return settings.defaultMode.ctrlTyp; } };
struct DefaultModeCtrlModAccessor : public RefAccessorSaveSettings<ControlMode> { ControlMode &getRef() const override { return settings.defaultMode.ctrlMod; } }; struct DefaultModeCtrlModAccessor : public RefAccessorSaveSettings<ControlMode> { ControlMode &getRef() const override { return settings.defaultMode.ctrlMod; } };
struct DefaultModeEnableSmoothingAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.defaultMode.enableSmoothing; } }; struct DefaultModeEnableSmoothingAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.defaultMode.enableSmoothing; } };

View File

@@ -66,7 +66,8 @@ constexpr char TEXT_LIMITSSETTINGS[] = "Limits settings";
constexpr char TEXT_WIFISETTINGS[] = "WiFi settings"; constexpr char TEXT_WIFISETTINGS[] = "WiFi settings";
//constexpr char TEXT_BLUETOOTHSETTINGS[] = "Bluetooth settings"; //constexpr char TEXT_BLUETOOTHSETTINGS[] = "Bluetooth settings";
constexpr char TEXT_MODESSETTINGS[] = "Modes 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_AUTOCONNECTBMS[] = "Auto connect BMS";
constexpr char TEXT_BUZZER[] = "Buzzer"; constexpr char TEXT_BUZZER[] = "Buzzer";
constexpr char TEXT_FRONTLED[] = "Front LED"; constexpr char TEXT_FRONTLED[] = "Front LED";
@@ -74,14 +75,13 @@ constexpr char TEXT_BACKLED[] = "Back LED";
//constexpr char TEXT_ABOUT[] = "About"; //constexpr char TEXT_ABOUT[] = "About";
//constexpr char TEXT_BACK[] = "Back"; //constexpr char TEXT_BACK[] = "Back";
//HardwareSettings //ControllerHardwareSettings
//constexpr char TEXT_HARDWARESETTINGS[] = "Hardware settings"; //constexpr char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings";
constexpr char TEXT_WHEELDIAMETERMM[] = "Wheel diameter (mm)"; constexpr char TEXT_WHEELDIAMETERMM[] = "Wheel diameter (mm)";
constexpr char TEXT_WHEELDIAMETERINCH[] = "Wheel diameter (inch)"; constexpr char TEXT_WHEELDIAMETERINCH[] = "Wheel diameter (inch)";
constexpr char TEXT_NUMMAGNETPOLES[] = "Num magnet poles"; constexpr char TEXT_NUMMAGNETPOLES[] = "Num magnet poles";
constexpr char TEXT_SETENABLED[] = "Set enabled"; constexpr char TEXT_SETENABLED[] = "Set enabled";
constexpr char TEXT_SETINVERTED[] = "Set inverted"; constexpr char TEXT_SETINVERTED[] = "Set inverted";
constexpr char TEXT_POTISETTINGS[] = "Poti settings";
constexpr char TEXT_SWAPFRONTBACK[] = "Swap front/back"; constexpr char TEXT_SWAPFRONTBACK[] = "Swap front/back";
//constexpr char TEXT_BACK[] = "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_GENERICWIFISETTINGS[] = "Generic WiFi settings";
//constexpr char TEXT_BACK[] = "Back"; //constexpr char TEXT_BACK[] = "Back";
//PotiSettingsMenu //BoardcomputerHardwareSettingsMenu
//constexpr char TEXT_POTISETTINGS[] = "Poti settings"; //constexpr char TEXT_BOARDCOMPUTERHARDWARESETTINGS[] = "Boardcomputer H/W settings";
constexpr char TEXT_CALIBRATE[] = "Calibrate";
constexpr char TEXT_SETSAMPLECOUNT[] = "Set sampleCount"; constexpr char TEXT_SETSAMPLECOUNT[] = "Set sampleCount";
constexpr char TEXT_SETGASMIN[] = "Set gasMin"; constexpr char TEXT_SETGASMIN[] = "Set gasMin";
constexpr char TEXT_SETGASMAX[] = "Set gasMax"; constexpr char TEXT_SETGASMAX[] = "Set gasMax";
constexpr char TEXT_SETBREMSMIN[] = "Set bremsMin"; constexpr char TEXT_SETBREMSMIN[] = "Set bremsMin";
constexpr char TEXT_SETBREMSMAX[] = "Set bremsMax"; constexpr char TEXT_SETBREMSMAX[] = "Set bremsMax";
constexpr char TEXT_CALIBRATE[] = "Calibrate"; constexpr char TEXT_SWAPSCREENBYTES[] = "Swap screen bytes";
//constexpr char TEXT_BACK[] = "Back"; //constexpr char TEXT_BACK[] = "Back";
//PresetsMenu //PresetsMenu
@@ -231,7 +232,8 @@ constexpr char TEXT_DEFAULTEVERYTHING[] = "Default everything";
constexpr char TEXT_DEFAULTLIMITS[] = "Default limits"; constexpr char TEXT_DEFAULTLIMITS[] = "Default limits";
constexpr char TEXT_KIDSLIMITS[] = "Kids limits"; constexpr char TEXT_KIDSLIMITS[] = "Kids limits";
constexpr char TEXT_DEFAULTPOTI[] = "Default poti"; 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_STREET[] = "Street";
constexpr char TEXT_SIDEWALK[] = "Sidewalk"; constexpr char TEXT_SIDEWALK[] = "Sidewalk";
constexpr char TEXT_POLICE[] = "Police"; constexpr char TEXT_POLICE[] = "Police";

View File

@@ -30,12 +30,12 @@ T scaleBetween(T x, T in_min, T in_max, T out_min, T out_max) {
float convertToKmh(float val) 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) 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) float convertToInch(float val)
@@ -220,18 +220,18 @@ void fixCommonParams()
currentlyReverseBeeping = false; currentlyReverseBeeping = false;
} }
front.command.left.enable = settings.hardware.enableFrontLeft; front.command.left.enable = settings.controllerHardware.enableFrontLeft;
front.command.right.enable = settings.hardware.enableFrontRight; front.command.right.enable = settings.controllerHardware.enableFrontRight;
back.command.left.enable = settings.hardware.enableBackLeft; back.command.left.enable = settings.controllerHardware.enableBackLeft;
back.command.right.enable = settings.hardware.enableBackRight; back.command.right.enable = settings.controllerHardware.enableBackRight;
if (settings.hardware.invertFrontLeft) if (settings.controllerHardware.invertFrontLeft)
front.command.left.pwm = -front.command.left.pwm; front.command.left.pwm = -front.command.left.pwm;
if (settings.hardware.invertFrontRight) if (settings.controllerHardware.invertFrontRight)
front.command.right.pwm = -front.command.right.pwm; front.command.right.pwm = -front.command.right.pwm;
if (settings.hardware.invertBackLeft) if (settings.controllerHardware.invertBackLeft)
back.command.left.pwm = -back.command.left.pwm; back.command.left.pwm = -back.command.left.pwm;
if (settings.hardware.invertBackRight) if (settings.controllerHardware.invertBackRight)
back.command.right.pwm = -back.command.right.pwm; back.command.right.pwm = -back.command.right.pwm;
} }
@@ -250,8 +250,8 @@ void switchScreen(Args&&... args);
void updateSwapFrontBack() void updateSwapFrontBack()
{ {
front.serial = settings.hardware.swapFrontBack ? Serial2 : Serial1; front.serial = settings.controllerHardware.swapFrontBack ? Serial2 : Serial1;
back.serial = settings.hardware.swapFrontBack ? Serial1 : Serial2; back.serial = settings.controllerHardware.swapFrontBack ? Serial1 : Serial2;
} }
void loadSettings() void loadSettings()
@@ -305,15 +305,15 @@ void readPotis()
const auto sampleMultipleTimes = [](int pin){ const auto sampleMultipleTimes = [](int pin){
analogRead(pin); analogRead(pin);
double sum{}; double sum{};
for (int i = 0; i < settings.hardware.poti.sampleCount; i++) for (int i = 0; i < settings.boardcomputerHardware.sampleCount; i++)
sum += analogRead(pin); sum += analogRead(pin);
return sum/settings.hardware.poti.sampleCount; return sum/settings.boardcomputerHardware.sampleCount;
}; };
raw_gas = sampleMultipleTimes(PINS_GAS); raw_gas = sampleMultipleTimes(PINS_GAS);
gas = scaleBetween<float>(raw_gas, settings.hardware.poti.gasMin, settings.hardware.poti.gasMax, 0., 1000.); gas = scaleBetween<float>(raw_gas, settings.boardcomputerHardware.gasMin, settings.boardcomputerHardware.gasMax, 0., 1000.);
raw_brems = sampleMultipleTimes(PINS_BREMS); raw_brems = sampleMultipleTimes(PINS_BREMS);
brems = scaleBetween<float>(raw_brems, settings.hardware.poti.bremsMin, settings.hardware.poti.bremsMax, 0., 1000.); brems = scaleBetween<float>(raw_brems, settings.boardcomputerHardware.bremsMin, settings.boardcomputerHardware.bremsMax, 0., 1000.);
} }
} }