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

View File

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

View File

@@ -6,14 +6,16 @@
#include "changevaluedisplay.h"
#include "actions/dummyaction.h"
#include "actions/switchscreenaction.h"
#include "actions/toggleboolaction.h"
#include "icons/back.h"
#include "checkboxicon.h"
#include "texts.h"
#include "settingsaccessors.h"
namespace {
class PotiSettingsMenu;
class BoardcomputerHardwareSettingsMenu;
class CalibrateDisplay;
class HardwareSettingsMenu;
class SettingsMenu;
}
namespace {
@@ -26,15 +28,15 @@ public:
String text() const override { return String{"brems: "} + raw_brems + ": " + brems; }
};
using SampleCountChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETSAMPLECOUNT>, SampleCountAccessor, SwitchScreenAction<PotiSettingsMenu>>;
using GasMinChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETGASMIN>, GasMinAccessor, SwitchScreenAction<PotiSettingsMenu>>;
using GasMaxChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETGASMAX>, GasMaxAccessor, SwitchScreenAction<PotiSettingsMenu>>;
using BremsMinChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETBREMSMIN>, BremsMinAccessor, SwitchScreenAction<PotiSettingsMenu>>;
using BremsMaxChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETBREMSMAX>, BremsMaxAccessor, 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<BoardcomputerHardwareSettingsMenu>>;
using GasMaxChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETGASMAX>, GasMaxAccessor, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>>;
using BremsMinChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETBREMSMIN>, BremsMinAccessor, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>>;
using BremsMaxChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_SETBREMSMAX>, BremsMaxAccessor, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>>;
class PotiSettingsMenu :
class BoardcomputerHardwareSettingsMenu :
public MenuDisplay,
public StaticText<TEXT_POTISETTINGS>,
public StaticText<TEXT_BOARDCOMPUTERHARDWARESETTINGS>,
public StaticMenuDefinition<
makeComponent<MenuItem, GasText, 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_SETBREMSMIN>, SwitchScreenAction<BremsMinChangeScreen>>,
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"
namespace {
class HardwareSettingsMenu;
class PotiSettingsMenu;
class ControllerHardwareSettingsMenu;
class BoardcomputerHardwareSettingsMenu;
class EnableMenu;
class InvertMenu;
class SettingsMenu;
}
namespace {
using WheelDiameterMmChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_WHEELDIAMETERMM>, WheelDiameterMmAccessor, SwitchScreenAction<HardwareSettingsMenu>>;
using WheelDiameterInchChangeScreen = makeComponent<ChangeValueDisplay<float>, StaticText<TEXT_WHEELDIAMETERINCH>, WheelDiameterInchAccessor, RatioNumberStep<float, std::ratio<1,10>>, SwitchScreenAction<HardwareSettingsMenu>>;
using NumMagnetPolesChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_NUMMAGNETPOLES>, NumMagnetPolesAccessor, 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<ControllerHardwareSettingsMenu>>;
using NumMagnetPolesChangeScreen = makeComponent<ChangeValueDisplay<int16_t>, StaticText<TEXT_NUMMAGNETPOLES>, NumMagnetPolesAccessor, SwitchScreenAction<ControllerHardwareSettingsMenu>>;
class HardwareSettingsMenu :
class ControllerHardwareSettingsMenu :
public MenuDisplay,
public StaticText<TEXT_HARDWARESETTINGS>,
public StaticText<TEXT_CONTROLLERHARDWARESETTINGS>,
public StaticMenuDefinition<
makeComponent<MenuItem, StaticText<TEXT_SETENABLED>, SwitchScreenAction<EnableMenu>>,
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_WHEELDIAMETERINCH>, SwitchScreenAction<WheelDiameterInchChangeScreen>>,
makeComponent<MenuItem, StaticText<TEXT_NUMMAGNETPOLES>, SwitchScreenAction<NumMagnetPolesChangeScreen>>,

View File

@@ -12,7 +12,7 @@
#include "settingsaccessors.h"
namespace {
class HardwareSettingsMenu;
class ControllerHardwareSettingsMenu;
}
namespace {
@@ -24,7 +24,7 @@ class EnableMenu :
makeComponent<MenuItem, StaticText<TEXT_ENABLEFRONTRIGHT>, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>,
makeComponent<MenuItem, StaticText<TEXT_ENABLEBACKLEFT>, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>,
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"
namespace {
class HardwareSettingsMenu;
class ControllerHardwareSettingsMenu;
}
namespace {
@@ -24,7 +24,7 @@ class InvertMenu :
makeComponent<MenuItem, StaticText<TEXT_INVERTFRONTRIGHT>, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_INVERTBACKLEFT>, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>,
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>
class ApplyLimitsPresetAction : public virtual ActionInterface {public: void triggered() override { settings.limits = *preset; saveSettings(); } };
template<const Settings::Hardware::Poti *preset>
class ApplyPotiPresetAction : public virtual ActionInterface {public: void triggered() override { settings.hardware.poti = *preset; saveSettings(); } };
template<const Settings::ControllerHardware *preset>
class ApplyControllerHardwarePresetAction : public virtual ActionInterface {public: void triggered() override { settings.controllerHardware = *preset; saveSettings(); } };
template<const Settings::Hardware *preset>
class ApplyHardwarePresetAction : public virtual ActionInterface {public: void triggered() override { settings.hardware = *preset; saveSettings(); } };
template<const Settings::BoardcomputerHardware *preset>
class ApplyBoardcomputerHardwarePresetAction : public virtual ActionInterface {public: void triggered() override { settings.boardcomputerHardware = *preset; saveSettings(); } };
class PresetsMenu :
public MenuDisplay,
public StaticText<TEXT_PRESETS>,
public StaticMenuDefinition<
makeComponent<MenuItem, StaticText<TEXT_DEFAULTEVERYTHING>, ApplyPresetAction<&presets::defaultSettings>>,
makeComponent<MenuItem, StaticText<TEXT_DEFAULTLIMITS>, ApplyLimitsPresetAction<&presets::defaultLimits>>,
makeComponent<MenuItem, StaticText<TEXT_KIDSLIMITS>, ApplyLimitsPresetAction<&presets::kidsLimits>>,
makeComponent<MenuItem, StaticText<TEXT_DEFAULTPOTI>, ApplyPotiPresetAction<&presets::defaultPoti>>,
makeComponent<MenuItem, StaticText<TEXT_DEFAULTHARDWARE>, ApplyHardwarePresetAction<&presets::defaultHardware>>,
makeComponent<MenuItem, StaticText<TEXT_STREET>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_SIDEWALK>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_POLICE>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_RACE>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>
makeComponent<MenuItem, StaticText<TEXT_DEFAULTEVERYTHING>, ApplyPresetAction<&presets::defaultSettings>>,
makeComponent<MenuItem, StaticText<TEXT_DEFAULTLIMITS>, ApplyLimitsPresetAction<&presets::defaultLimits>>,
makeComponent<MenuItem, StaticText<TEXT_KIDSLIMITS>, ApplyLimitsPresetAction<&presets::kidsLimits>>,
makeComponent<MenuItem, StaticText<TEXT_DEFAULTCONTROLLERHARDWARE>, ApplyControllerHardwarePresetAction<&presets::defaultControllerHardware>>,
makeComponent<MenuItem, StaticText<TEXT_DEFAULTBOARDCOMPUTERHARDWARE>, ApplyBoardcomputerHardwarePresetAction<&presets::defaultBoardcomputerHardware>>,
makeComponent<MenuItem, StaticText<TEXT_STREET>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_SIDEWALK>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_POLICE>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_RACE>, DisabledColor, DummyAction>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>
>
{};
}

View File

@@ -23,7 +23,8 @@ class LimitsSettingsMenu;
class WifiSettingsMenu;
class BluetoothSettingsMenu;
class ModesSettingsMenu;
class HardwareSettingsMenu;
class ControllerHardwareSettingsMenu;
class BoardcomputerHardwareSettingsMenu;
class BuzzerMenu;
class AboutMenu;
class MainMenu;
@@ -37,17 +38,18 @@ class SettingsMenu :
public MenuDisplay,
public StaticText<TEXT_SETTINGS>,
public StaticMenuDefinition<
makeComponent<MenuItem, StaticText<TEXT_LIMITSSETTINGS>, SwitchScreenAction<LimitsSettingsMenu>>,
makeComponent<MenuItem, StaticText<TEXT_WIFISETTINGS>, SwitchScreenAction<WifiSettingsMenu>, StaticMenuItemIcon<&icons::wifi>>,
makeComponent<MenuItem, StaticText<TEXT_BLUETOOTHSETTINGS>, SwitchScreenAction<BluetoothSettingsMenu>, StaticMenuItemIcon<&icons::bluetooth>>,
makeComponent<MenuItem, StaticText<TEXT_MODESSETTINGS>, SwitchScreenAction<ModesSettingsMenu>>,
makeComponent<MenuItem, StaticText<TEXT_HARDWARESETTINGS>, SwitchScreenAction<HardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>,
makeComponent<MenuItem, StaticText<TEXT_AUTOCONNECTBMS>, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>,
makeComponent<MenuItem, StaticText<TEXT_BUZZER>, SwitchScreenAction<BuzzerMenu>, StaticMenuItemIcon<&icons::buzzer>>,
makeComponent<MenuItem, StaticText<TEXT_FRONTLED>, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_BACKLED>, ToggleBoolAction, CheckboxIcon, BackLedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_ABOUT>, SwitchScreenAction<AboutMenu>, StaticMenuItemIcon<&icons::info>>,
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>
makeComponent<MenuItem, StaticText<TEXT_LIMITSSETTINGS>, SwitchScreenAction<LimitsSettingsMenu>>,
makeComponent<MenuItem, StaticText<TEXT_WIFISETTINGS>, SwitchScreenAction<WifiSettingsMenu>, StaticMenuItemIcon<&icons::wifi>>,
makeComponent<MenuItem, StaticText<TEXT_BLUETOOTHSETTINGS>, SwitchScreenAction<BluetoothSettingsMenu>, StaticMenuItemIcon<&icons::bluetooth>>,
makeComponent<MenuItem, StaticText<TEXT_MODESSETTINGS>, SwitchScreenAction<ModesSettingsMenu>>,
makeComponent<MenuItem, StaticText<TEXT_CONTROLLERHARDWARESETTINGS>, SwitchScreenAction<ControllerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>,
makeComponent<MenuItem, StaticText<TEXT_BOARDCOMPUTERHARDWARESETTINGS>, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>,
makeComponent<MenuItem, StaticText<TEXT_AUTOCONNECTBMS>, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>,
makeComponent<MenuItem, StaticText<TEXT_BUZZER>, SwitchScreenAction<BuzzerMenu>, StaticMenuItemIcon<&icons::buzzer>>,
makeComponent<MenuItem, StaticText<TEXT_FRONTLED>, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>,
makeComponent<MenuItem, StaticText<TEXT_BACKLED>, ToggleBoolAction, CheckboxIcon, BackLedAccessor>,
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.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setSwapBytes(true);
tft.setSwapBytes(!settings.boardcomputerHardware.swapScreenBytes);
tft.pushImage(10, m_y+40, icons::alert.WIDTH, icons::alert.HEIGHT, icons::alert.buffer);
tft.setSwapBytes(false);
tft.setSwapBytes(settings.boardcomputerHardware.swapScreenBytes);
}
void StatusDisplay::BoardStatus::MotorStatus::start()

View File

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

View File

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

View File

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

View File

@@ -14,7 +14,7 @@
#include "displays/menus/feedbackdebugmenu.h"
#include "displays/menus/genericwifisettingsmenu.h"
#include "displays/menus/graphsmenu.h"
#include "displays/menus/hardwaresettingsmenu.h"
#include "displays/menus/controllerhardwaresettingsmenu.h"
#include "displays/menus/invertmenu.h"
#include "displays/menus/larsmmodesettingsmenu.h"
#include "displays/menus/limitssettingsmenu.h"
@@ -24,7 +24,7 @@
#include "displays/menus/motorfeedbackdebugmenu.h"
#include "displays/menus/motorstatedebugmenu.h"
#include "displays/menus/presetsmenu.h"
#include "displays/menus/potisettingsmenu.h"
#include "displays/menus/boardcomputerhardwaresettingsmenu.h"
#include "displays/menus/selectmodemenu.h"
#include "displays/menus/settingsmenu.h"
#include "displays/menus/stationwifisettingsmenu.h"
@@ -59,6 +59,7 @@ union X {
BuzzerMenu buzzerMenu;
FrontCommandDebugMenu frontCommandDebugMenu;
BackCommandDebugMenu backCommandDebugMenu;
ControllerHardwareSettingsMenu controllerHardwareSettingsMenu;
DebugMenu debugMenu;
DefaultModeSettingsMenu defaultModeSettingsMenu;
DemosMenu demosMenu;
@@ -68,7 +69,6 @@ union X {
BackFeedbackDebugMenu backFeedbackDebugMenu;
GenericWifiSettingsMenu genericWifiSettingsMenu;
GraphsMenu graphsMenu;
HardwareSettingsMenu hardwareSettingsMenu;
InvertMenu invertMenu;
LarsmModeSettingsMenu larsmModeSettingsMenu;
LimitsSettingsMenu limitsSettingsMenu;
@@ -83,7 +83,7 @@ union X {
FrontRightMotorFeedbackDebugMenu frontRightMotorFeedbackDebugMenu;
BackLeftMotorFeedbackDebugMenu backLeftMotorFeedbackDebugMenu;
BackRightMotorFeedbackDebugMenu backRightMotorFeedbackDebugMenu;
PotiSettingsMenu potiSettingsMenu;
BoardcomputerHardwareSettingsMenu boardcomputerHardwareSettingsMenu;
PresetsMenu presetsMenu;
SelectModeMenu selectModeMenu;
SettingsMenu settingsMenu;
@@ -171,6 +171,8 @@ template<> decltype(displays.accessPointWifiSettingsMenu) &
template<> decltype(displays.bluetoothSettingsMenu) &getRefByType<decltype(displays.bluetoothSettingsMenu)>() { return displays.bluetoothSettingsMenu; }
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.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.backCommandDebugMenu) &getRefByType<decltype(displays.backCommandDebugMenu)>() { return displays.backCommandDebugMenu; }
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.genericWifiSettingsMenu) &getRefByType<decltype(displays.genericWifiSettingsMenu)>() { return displays.genericWifiSettingsMenu; }
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.larsmModeSettingsMenu) &getRefByType<decltype(displays.larsmModeSettingsMenu)>() { return displays.larsmModeSettingsMenu; }
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.backLeftMotorFeedbackDebugMenu) &getRefByType<decltype(displays.backLeftMotorFeedbackDebugMenu)>() { return displays.backLeftMotorFeedbackDebugMenu; }
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.selectModeMenu) &getRefByType<decltype(displays.selectModeMenu)>() { return displays.selectModeMenu; }
template<> decltype(displays.settingsMenu) &getRefByType<decltype(displays.settingsMenu)>() { return displays.settingsMenu; }
@@ -372,6 +372,9 @@ void updateDisplay()
void redrawDisplay()
{
if (currentDisplay)
{
tft.setSwapBytes(settings.boardcomputerHardware.swapScreenBytes);
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.
} limits;
struct Hardware {
struct ControllerHardware {
bool enableFrontLeft, enableFrontRight, enableBackLeft, enableBackRight;
bool invertFrontLeft, invertFrontRight, invertBackLeft, invertBackRight;
struct Poti {
int16_t sampleCount;
int16_t gasMin, gasMax, bremsMin, bremsMax;
} poti;
int16_t wheelDiameter; // in mm
int16_t numMagnetPoles; // virtual RPM per one real RPM
bool swapFrontBack;
} hardware;
} controllerHardware;
struct BoardcomputerHardware {
int16_t sampleCount;
int16_t gasMin, gasMax, bremsMin, bremsMax;
bool swapScreenBytes;
} boardcomputerHardware;
struct DefaultMode {
ControlType ctrlTyp;
@@ -83,23 +84,24 @@ void Settings::executeForEverySetting(T &&callable)
callable("fieldWeakMax", limits.fieldWeakMax);
callable("phaseAdvMax", limits.phaseAdvMax);
callable("enableFrontLeft", hardware.enableFrontLeft);
callable("enableFrontRigh", hardware.enableFrontRight);
callable("enableBackLeft", hardware.enableBackLeft);
callable("enableBackRight", hardware.enableBackRight);
callable("enableFrontLeft", controllerHardware.enableFrontLeft);
callable("enableFrontRigh", controllerHardware.enableFrontRight);
callable("enableBackLeft", controllerHardware.enableBackLeft);
callable("enableBackRight", controllerHardware.enableBackRight);
callable("invertFrontLeft", hardware.invertFrontLeft);
callable("invertFrontRigh", hardware.invertFrontRight);
callable("invertBackLeft", hardware.invertBackLeft);
callable("invertBackRight", hardware.invertBackRight);
callable("invertFrontLeft", controllerHardware.invertFrontLeft);
callable("invertFrontRigh", controllerHardware.invertFrontRight);
callable("invertBackLeft", controllerHardware.invertBackLeft);
callable("invertBackRight", controllerHardware.invertBackRight);
callable("sampleCount", hardware.poti.sampleCount);
callable("gasMin", hardware.poti.gasMin);
callable("gasMax", hardware.poti.gasMax);
callable("bremsMin", hardware.poti.bremsMin);
callable("bremsMax", hardware.poti.bremsMax);
callable("swapFrontBack", controllerHardware.swapFrontBack);
callable("swapFrontBack", hardware.swapFrontBack);
callable("sampleCount", boardcomputerHardware.sampleCount);
callable("gasMin", boardcomputerHardware.gasMin);
callable("gasMax", boardcomputerHardware.gasMax);
callable("bremsMin", boardcomputerHardware.bremsMin);
callable("bremsMax", boardcomputerHardware.bremsMax);
callable("swapScreenBytes", boardcomputerHardware.swapScreenBytes);
callable("default.ctrlTyp", defaultMode.ctrlTyp);
callable("default.ctrlMod", defaultMode.ctrlMod);

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 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 FrontRightEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.enableFrontRight; } };
struct BackLeftEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.enableBackLeft; } };
struct BackRightEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.enableBackRight; } };
struct FrontLeftEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableFrontLeft; } };
struct FrontRightEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableFrontRight; } };
struct BackLeftEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableBackLeft; } };
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 FrontRightInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.invertFrontRight; } };
struct BackLeftInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.invertBackLeft; } };
struct BackRightInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.hardware.invertBackRight; } };
struct FrontLeftInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.invertFrontLeft; } };
struct FrontRightInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.invertFrontRight; } };
struct BackLeftInvertedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.invertBackLeft; } };
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 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 WheelDiameterMmAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.controllerHardware.wheelDiameter; } };
struct WheelDiameterInchAccessor : public virtual AccessorInterface<float>
{
float getValue() const override { return convertToInch(settings.hardware.wheelDiameter); }
void setValue(float value) override { settings.hardware.wheelDiameter = convertFromInch(value); saveSettings(); }
float getValue() const override { return convertToInch(settings.controllerHardware.wheelDiameter); }
void setValue(float value) override { settings.controllerHardware.wheelDiameter = convertFromInch(value); saveSettings(); }
};
struct NumMagnetPolesAccessor : public RefAccessorSaveSettings<int16_t> { 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> {
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(); };
};
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 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; } };

View File

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

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)
{
return val /* / settings.hardware.numMagnetPoles */ / 60.f * settings.hardware.wheelDiameter / 1000.f * 3.14159265359f * 3.6f;
return val /* / settings.controllerHardware.numMagnetPoles */ / 60.f * settings.controllerHardware.wheelDiameter / 1000.f * 3.14159265359f * 3.6f;
}
float convertFromKmh(float val)
{
return val /* * settings.hardware.numMagnetPoles */ * 60.f / settings.hardware.wheelDiameter * 1000.f / 3.14159265359f / 3.6f;
return val /* * settings.controllerHardware.numMagnetPoles */ * 60.f / settings.controllerHardware.wheelDiameter * 1000.f / 3.14159265359f / 3.6f;
}
float convertToInch(float val)
@@ -220,18 +220,18 @@ void fixCommonParams()
currentlyReverseBeeping = false;
}
front.command.left.enable = settings.hardware.enableFrontLeft;
front.command.right.enable = settings.hardware.enableFrontRight;
back.command.left.enable = settings.hardware.enableBackLeft;
back.command.right.enable = settings.hardware.enableBackRight;
front.command.left.enable = settings.controllerHardware.enableFrontLeft;
front.command.right.enable = settings.controllerHardware.enableFrontRight;
back.command.left.enable = settings.controllerHardware.enableBackLeft;
back.command.right.enable = settings.controllerHardware.enableBackRight;
if (settings.hardware.invertFrontLeft)
if (settings.controllerHardware.invertFrontLeft)
front.command.left.pwm = -front.command.left.pwm;
if (settings.hardware.invertFrontRight)
if (settings.controllerHardware.invertFrontRight)
front.command.right.pwm = -front.command.right.pwm;
if (settings.hardware.invertBackLeft)
if (settings.controllerHardware.invertBackLeft)
back.command.left.pwm = -back.command.left.pwm;
if (settings.hardware.invertBackRight)
if (settings.controllerHardware.invertBackRight)
back.command.right.pwm = -back.command.right.pwm;
}
@@ -250,8 +250,8 @@ void switchScreen(Args&&... args);
void updateSwapFrontBack()
{
front.serial = settings.hardware.swapFrontBack ? Serial2 : Serial1;
back.serial = settings.hardware.swapFrontBack ? Serial1 : Serial2;
front.serial = settings.controllerHardware.swapFrontBack ? Serial2 : Serial1;
back.serial = settings.controllerHardware.swapFrontBack ? Serial1 : Serial2;
}
void loadSettings()
@@ -305,15 +305,15 @@ void readPotis()
const auto sampleMultipleTimes = [](int pin){
analogRead(pin);
double sum{};
for (int i = 0; i < settings.hardware.poti.sampleCount; i++)
for (int i = 0; i < settings.boardcomputerHardware.sampleCount; i++)
sum += analogRead(pin);
return sum/settings.hardware.poti.sampleCount;
return sum/settings.boardcomputerHardware.sampleCount;
};
raw_gas = sampleMultipleTimes(PINS_GAS);
gas = scaleBetween<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);
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.);
}
}