From 71a4601aa71905dec53ee1840a8e83d97f443906 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 25 May 2020 21:14:59 +0200 Subject: [PATCH 1/7] Added gametrak driving mode --- platformio.ini | 1 + src/displays/menus/selectmodemenu.h | 7 ++++++ src/modes/gametrakmode.h | 37 +++++++++++++++++++++++++++++ src/texts.h | 2 +- 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/modes/gametrakmode.h diff --git a/platformio.ini b/platformio.ini index 4d9ebfe..ecaa4ca 100644 --- a/platformio.ini +++ b/platformio.ini @@ -85,6 +85,7 @@ build_flags = -DDEFAULT_BREMSMIN=1300 -DDEFAULT_BREMSMAX=4000 -DFEATURE_BMS + -DFEATURE_GAMETRAK [env:feedc0de_usb] platform = ${common_env_data.platform} diff --git a/src/displays/menus/selectmodemenu.h b/src/displays/menus/selectmodemenu.h index 81a5f48..13f544f 100644 --- a/src/displays/menus/selectmodemenu.h +++ b/src/displays/menus/selectmodemenu.h @@ -12,6 +12,7 @@ #include "modes/defaultmode.h" #include "modes/tempomatmode.h" #include "modes/larsmmode.h" +#include "modes/gametrakmode.h" namespace { class MainMenu; @@ -27,6 +28,9 @@ public: using SetDefaultModeAction = SetterAction; using SetTempomatModeAction = SetterAction; using SetLarsmModeAction = SetterAction; +#ifdef FEATURE_GAMETRAK +using SetGametrakModeAction = SetterAction; +#endif class SelectModeMenu : public MenuDisplay, @@ -36,6 +40,9 @@ class SelectModeMenu : makeComponent, MultiAction>>, makeComponent, MultiAction>>, makeComponent, MultiAction>>, +#ifdef FEATURE_GAMETRAK + makeComponent, MultiAction>>, +#endif makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > { diff --git a/src/modes/gametrakmode.h b/src/modes/gametrakmode.h new file mode 100644 index 0000000..475e611 --- /dev/null +++ b/src/modes/gametrakmode.h @@ -0,0 +1,37 @@ +#pragma once + +#include "modeinterface.h" +#include "globals.h" +#include "utils.h" + +#include "bobbycar-protocol/protocol.h" + +namespace { +#ifdef FEATURE_GAMETRAK +class GametrakMode : public ModeInterface +{ +public: + void update() override; + + const char *displayName() const override { return "Gametrak"; } +}; + +namespace modes { +GametrakMode gametrakMode; +} + +void GametrakMode::update() +{ + for (MotorState &motor : motors()) + { + motor.ctrlTyp = ControlType::FieldOrientedControl; + motor.ctrlMod = ControlMode::Speed; + motor.pwm = 0; + } + + fixCommonParams(); + + sendCommands(); +} +#endif +} diff --git a/src/texts.h b/src/texts.h index 2165973..37590e3 100644 --- a/src/texts.h +++ b/src/texts.h @@ -246,7 +246,7 @@ constexpr char TEXT_RACE[] = "Race"; constexpr char TEXT_DEFAULT[] = "Default"; constexpr char TEXT_TEMPOMAT[] = "Tempomat"; constexpr char TEXT_LARSM[] = "Larsm"; -constexpr char TEXT_BLUETOOTH[] = "Bluetooth"; +constexpr char TEXT_GAMETRAK[] = "Gametrak"; //constexpr char TEXT_BACK[] = "Back"; //ChangeValueDisplay From d8ed3d770c57c4670999039d3a397ca132f039e7 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 25 May 2020 21:27:44 +0200 Subject: [PATCH 2/7] Added gametrak poti readout and range settings --- platformio.ini | 9 +++++++++ src/globals.h | 4 ++++ src/presets.h | 8 ++++++++ src/settings.h | 9 +++++++++ src/utils.h | 11 +++++++++++ 5 files changed, 41 insertions(+) diff --git a/platformio.ini b/platformio.ini index ecaa4ca..057ac93 100644 --- a/platformio.ini +++ b/platformio.ini @@ -86,6 +86,15 @@ build_flags = -DDEFAULT_BREMSMAX=4000 -DFEATURE_BMS -DFEATURE_GAMETRAK + -DPINS_GAMETRAKX=31 + -DPINS_GAMETRAKY=32 + -DPINS_GAMETRAKDIST=34 + -DDEFAULT_GAMETRAKXMIN=0 + -DDEFAULT_GAMETRAKXMAX=4095 + -DDEFAULT_GAMETRAKYMIN=0 + -DDEFAULT_GAMETRAKYMAX=4095 + -DDEFAULT_GAMETRAKDISTMIN=0 + -DDEFAULT_GAMETRAKDISTMAX=4095 [env:feedc0de_usb] platform = ${common_env_data.platform} diff --git a/src/globals.h b/src/globals.h index 6855776..134402f 100644 --- a/src/globals.h +++ b/src/globals.h @@ -18,6 +18,10 @@ using pin_t = int; int16_t raw_gas, raw_brems; float gas, brems; +#ifdef FEATURE_GAMETRAK +int16_t raw_gametrakX, raw_gametrakY, raw_gametrakDist; +float gametrakX, gametrakY, gametrakDist; +#endif float avgSpeed, avgSpeedKmh, sumCurrent, sumAbsoluteCurrent; Settings settings; diff --git a/src/presets.h b/src/presets.h index a194fcf..409e58e 100644 --- a/src/presets.h +++ b/src/presets.h @@ -73,6 +73,14 @@ constexpr Settings::BoardcomputerHardware defaultBoardcomputerHardware { .gasMax = DEFAULT_GASMAX, .bremsMin = DEFAULT_BREMSMIN, .bremsMax = DEFAULT_BREMSMAX, +#ifdef FEATURE_GAMETRAK + .gametrakXMin = DEFAULT_GAMETRAKXMIN, + .gametrakXMax = DEFAULT_GAMETRAKXMAX, + .gametrakYMin = DEFAULT_GAMETRAKYMIN, + .gametrakYMax = DEFAULT_GAMETRAKYMAX, + .gametrakDistMin = DEFAULT_GAMETRAKDISTMIN, + .gametrakDistMax = DEFAULT_GAMETRAKDISTMAX, +#endif .swapScreenBytes = DEFAULT_SWAPSCREENBYTES }; diff --git a/src/settings.h b/src/settings.h index 5de3f77..0672b6c 100644 --- a/src/settings.h +++ b/src/settings.h @@ -38,6 +38,9 @@ struct Settings struct BoardcomputerHardware { int16_t sampleCount; int16_t gasMin, gasMax, bremsMin, bremsMax; +#ifdef FEATURE_GAMETRAK + int16_t gametrakXMin, gametrakXMax, gametrakYMin, gametrakYMax, gametrakDistMin, gametrakDistMax; +#endif bool swapScreenBytes; } boardcomputerHardware; @@ -105,6 +108,12 @@ void Settings::executeForEverySetting(T &&callable) callable("gasMax", boardcomputerHardware.gasMax); callable("bremsMin", boardcomputerHardware.bremsMin); callable("bremsMax", boardcomputerHardware.bremsMax); + callable("gametrakXMin", boardcomputerHardware.gametrakXMin); + callable("gametrakXMax", boardcomputerHardware.gametrakXMax); + callable("gametrakYMin", boardcomputerHardware.gametrakYMin); + callable("gametrakYMax", boardcomputerHardware.gametrakYMax); + callable("gametrakDistMin", boardcomputerHardware.gametrakDistMin); + callable("gametrakDistMax", boardcomputerHardware.gametrakDistMax); callable("swapScreenBytes", boardcomputerHardware.swapScreenBytes); callable("default.ctrlTyp", defaultMode.ctrlTyp); diff --git a/src/utils.h b/src/utils.h index 6b6135c..9c9c5f1 100644 --- a/src/utils.h +++ b/src/utils.h @@ -315,5 +315,16 @@ void readPotis() raw_brems = sampleMultipleTimes(PINS_BREMS); brems = scaleBetween(raw_brems, settings.boardcomputerHardware.bremsMin, settings.boardcomputerHardware.bremsMax, 0., 1000.); + +#ifdef FEATURE_GAMETRAK + raw_gametrakX = sampleMultipleTimes(PINS_GAMETRAKX); + gametrakX = scaleBetween(raw_gametrakX, settings.boardcomputerHardware.gametrakXMin, settings.boardcomputerHardware.gametrakXMax, 0., 1000.); + + raw_gametrakY = sampleMultipleTimes(PINS_GAMETRAKY); + gametrakY = scaleBetween(raw_gametrakY, settings.boardcomputerHardware.gametrakYMin, settings.boardcomputerHardware.gametrakYMax, 0., 1000.); + + raw_gametrakDist = sampleMultipleTimes(PINS_GAMETRAKDIST); + gametrakDist = scaleBetween(raw_gametrakDist, settings.boardcomputerHardware.gametrakDistMin, settings.boardcomputerHardware.gametrakDistMax, 0., 1000.); +#endif } } From d86eef844e637b1a1828033002351161fa85f00e Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 25 May 2020 21:48:12 +0200 Subject: [PATCH 3/7] Added gametrak poti settings displays --- .../menus/boardcomputerhardwaresettingsmenu.h | 72 ++++++++++++++++--- src/screens.h | 16 +++++ src/settingsaccessors.h | 8 +++ src/texts.h | 6 ++ 4 files changed, 92 insertions(+), 10 deletions(-) diff --git a/src/displays/menus/boardcomputerhardwaresettingsmenu.h b/src/displays/menus/boardcomputerhardwaresettingsmenu.h index 139b085..56ec50d 100644 --- a/src/displays/menus/boardcomputerhardwaresettingsmenu.h +++ b/src/displays/menus/boardcomputerhardwaresettingsmenu.h @@ -63,22 +63,74 @@ using BremsMaxChangeScreen = makeComponent< BackActionInterface>, SwitchScreenAction >; +#ifdef FEATURE_GAMETRAK +using GametrakXMinChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + GametrakXMinAccessor, + BackActionInterface>, + SwitchScreenAction +>; +using GametrakXMaxChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + GametrakXMaxAccessor, + BackActionInterface>, + SwitchScreenAction +>; +using GametrakYMinChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + GametrakYMinAccessor, + BackActionInterface>, + SwitchScreenAction +>; +using GametrakYMaxChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + GametrakYMaxAccessor, + BackActionInterface>, + SwitchScreenAction +>; +using GametrakDistMinChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + GametrakDistMinAccessor, + BackActionInterface>, + SwitchScreenAction +>; +using GametrakDistMaxChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + GametrakDistMaxAccessor, + BackActionInterface>, + SwitchScreenAction +>; +#endif class BoardcomputerHardwareSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, public StaticMenuDefinition< - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, +#ifdef FEATURE_GAMETRAK + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, +#endif + makeComponent, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; } diff --git a/src/screens.h b/src/screens.h index 515f86e..3dc5dfc 100644 --- a/src/screens.h +++ b/src/screens.h @@ -152,6 +152,14 @@ union X { GasMaxChangeScreen changeGasMax; BremsMinChangeScreen changeBremsMin; BremsMaxChangeScreen changeBremsMax; +#ifdef FEATURE_GAMETRAK + GametrakXMinChangeScreen changeGametrakXMin; + GametrakXMaxChangeScreen changeGametrakXMax; + GametrakYMinChangeScreen changeGametrakYMin; + GametrakYMaxChangeScreen changeGametrakYMax; + GametrakDistMinChangeScreen changeGametrakDistMin; + GametrakDistMaxChangeScreen changeGametrakDistMax; +#endif WifiModeChangeScreen wifiModeChangeScreen; WifiTxPowerChangeScreen wifiTxPowerChangeScreen; @@ -274,6 +282,14 @@ template<> decltype(displays.changeGasMin) & template<> decltype(displays.changeGasMax) &getRefByType() { return displays.changeGasMax; } template<> decltype(displays.changeBremsMin) &getRefByType() { return displays.changeBremsMin; } template<> decltype(displays.changeBremsMax) &getRefByType() { return displays.changeBremsMax; } +#ifdef FEATURE_GAMETRAK +template<> decltype(displays.changeGametrakXMin) &getRefByType() { return displays.changeGametrakXMin; } +template<> decltype(displays.changeGametrakXMax) &getRefByType() { return displays.changeGametrakXMax; } +template<> decltype(displays.changeGametrakYMin) &getRefByType() { return displays.changeGametrakYMin; } +template<> decltype(displays.changeGametrakYMax) &getRefByType() { return displays.changeGametrakYMax; } +template<> decltype(displays.changeGametrakDistMin) &getRefByType() { return displays.changeGametrakDistMin; } +template<> decltype(displays.changeGametrakDistMax) &getRefByType() { return displays.changeGametrakDistMax; } +#endif template<> decltype(displays.wifiModeChangeScreen) &getRefByType() { return displays.wifiModeChangeScreen; } template<> decltype(displays.wifiTxPowerChangeScreen) &getRefByType() { return displays.wifiTxPowerChangeScreen; } diff --git a/src/settingsaccessors.h b/src/settingsaccessors.h index 3335dbf..94cbb03 100644 --- a/src/settingsaccessors.h +++ b/src/settingsaccessors.h @@ -59,6 +59,14 @@ struct GasMinAccessor : public RefAccessorSaveSettings { int16_t &getRe struct GasMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gasMax; } }; struct BremsMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMin; } }; struct BremsMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMax; } }; +#ifdef FEATURE_GAMETRAK +struct GametrakXMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakXMin; } }; +struct GametrakXMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakXMax; } }; +struct GametrakYMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakYMin; } }; +struct GametrakYMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakYMax; } }; +struct GametrakDistMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakDistMin; } }; +struct GametrakDistMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakDistMax; } }; +#endif struct SwapScreenBytesAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.boardcomputerHardware.swapScreenBytes; } }; struct DefaultModeCtrlTypAccessor : public RefAccessorSaveSettings { ControlType &getRef() const override { return settings.defaultMode.ctrlTyp; } }; diff --git a/src/texts.h b/src/texts.h index 37590e3..6d1cd28 100644 --- a/src/texts.h +++ b/src/texts.h @@ -223,6 +223,12 @@ 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_SETGAMETRAKXMIN[] = "Set gametrakXMin"; +constexpr char TEXT_SETGAMETRAKXMAX[] = "Set gametrakXMax"; +constexpr char TEXT_SETGAMETRAKYMIN[] = "Set gametrakYMin"; +constexpr char TEXT_SETGAMETRAKYMAX[] = "Set gametrakYMax"; +constexpr char TEXT_SETGAMETRAKDISTMIN[] = "Set gametrakDistMin"; +constexpr char TEXT_SETGAMETRAKDISTMAX[] = "Set gametrakDistMax"; constexpr char TEXT_SWAPSCREENBYTES[] = "Swap screen bytes"; //constexpr char TEXT_BACK[] = "Back"; From a1c2a1e43a55c95373b034e6605fd66669a4edec Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 25 May 2020 22:02:30 +0200 Subject: [PATCH 4/7] Added gametrak mode settings menu --- src/displays/menus/gametrakmodesettingsmenu.h | 24 +++++++++++++++++++ src/displays/menus/modessettingsmenu.h | 4 ++++ src/screens.h | 3 +++ src/texts.h | 4 ++++ 4 files changed, 35 insertions(+) create mode 100644 src/displays/menus/gametrakmodesettingsmenu.h diff --git a/src/displays/menus/gametrakmodesettingsmenu.h b/src/displays/menus/gametrakmodesettingsmenu.h new file mode 100644 index 0000000..d26e832 --- /dev/null +++ b/src/displays/menus/gametrakmodesettingsmenu.h @@ -0,0 +1,24 @@ +#pragma once + +#include "menudisplay.h" +#include "staticmenudefinition.h" +#include "utils.h" +#include "menuitem.h" +#include "actions/switchscreenaction.h" +#include "icons/back.h" +#include "texts.h" + +namespace { +class ModesSettingsMenu; +} + +namespace { +class GametrakModeSettingsMenu : + public MenuDisplay, + public StaticText, + public BackActionInterface>, + public StaticMenuDefinition< + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + > +{}; +} diff --git a/src/displays/menus/modessettingsmenu.h b/src/displays/menus/modessettingsmenu.h index b5dd684..63b372b 100644 --- a/src/displays/menus/modessettingsmenu.h +++ b/src/displays/menus/modessettingsmenu.h @@ -11,6 +11,7 @@ namespace { class DefaultModeSettingsMenu; class TempomatModeSettingsMenu; class LarsmModeSettingsMenu; +class GametrakModeSettingsMenu; class SettingsMenu; } @@ -23,6 +24,9 @@ class ModesSettingsMenu : makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, +#ifdef FEATURE_GAMETRAK + makeComponent, SwitchScreenAction>, +#endif makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; diff --git a/src/screens.h b/src/screens.h index 3dc5dfc..d9358e3 100644 --- a/src/screens.h +++ b/src/screens.h @@ -12,6 +12,7 @@ #include "displays/menus/dynamicdebugmenu.h" #include "displays/menus/enablemenu.h" #include "displays/menus/feedbackdebugmenu.h" +#include "displays/menus/gametrakmodesettingsmenu.h" #include "displays/menus/genericwifisettingsmenu.h" #include "displays/menus/graphsmenu.h" #include "displays/menus/controllerhardwaresettingsmenu.h" @@ -69,6 +70,7 @@ union X { EnableMenu enableMenu; FrontFeedbackDebugMenu frontFeedbackDebugMenu; BackFeedbackDebugMenu backFeedbackDebugMenu; + GametrakModeSettingsMenu gametrakModeSettingsMenu; GenericWifiSettingsMenu genericWifiSettingsMenu; GraphsMenu graphsMenu; InvertMenu invertMenu; @@ -200,6 +202,7 @@ template<> decltype(displays.dynamicDebugMenu) & template<> decltype(displays.enableMenu) &getRefByType() { return displays.enableMenu; } template<> decltype(displays.frontFeedbackDebugMenu) &getRefByType() { return displays.frontFeedbackDebugMenu; } template<> decltype(displays.backFeedbackDebugMenu) &getRefByType() { return displays.backFeedbackDebugMenu; } +template<> decltype(displays.gametrakModeSettingsMenu) &getRefByType() { return displays.gametrakModeSettingsMenu; } template<> decltype(displays.genericWifiSettingsMenu) &getRefByType() { return displays.genericWifiSettingsMenu; } template<> decltype(displays.graphsMenu) &getRefByType() { return displays.graphsMenu; } template<> decltype(displays.invertMenu) &getRefByType() { return displays.invertMenu; } diff --git a/src/texts.h b/src/texts.h index 6d1cd28..f8c6360 100644 --- a/src/texts.h +++ b/src/texts.h @@ -157,6 +157,9 @@ constexpr char TEXT_ENABLEBACKLEFT[] = "Enable back left"; constexpr char TEXT_ENABLEBACKRIGHT[] = "Enable back right"; //constexpr char TEXT_BACK[] = "Back"; +//GametrakModeSettingsMenu +constexpr char TEXT_GAMETRAKMODESETTINGS[] = "Gametrak mode settings"; + //GenericWifiSettingsMenu constexpr char TEXT_GENERICWIFISETTINGS[] = "Generic WiFi settings"; constexpr char TEXT_WIFICHANGEMODE[] = "Change mode"; @@ -202,6 +205,7 @@ constexpr char TEXT_LARSMMODECHANGEITERATIONS[] = "Change iterations"; constexpr char TEXT_DEFAULTMODESETTIGNS[] = "Default mode settings"; constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; //constexpr char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings"; +//constexpr char TEXT_GAMETRAKMODESETTINGS[] = "Gametrak mode settings"; //constexpr char TEXT_BACK[] = "Back"; //TempomatModeSettingsMenu From 65875fc995a1b646401cdf08fdaa2d14ce5c4e4d Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 25 May 2020 22:12:10 +0200 Subject: [PATCH 5/7] Fixes when compiling without gametrak --- src/displays/menus/gametrakmodesettingsmenu.h | 2 ++ src/screens.h | 4 ++++ src/settings.h | 2 ++ 3 files changed, 8 insertions(+) diff --git a/src/displays/menus/gametrakmodesettingsmenu.h b/src/displays/menus/gametrakmodesettingsmenu.h index d26e832..698cac0 100644 --- a/src/displays/menus/gametrakmodesettingsmenu.h +++ b/src/displays/menus/gametrakmodesettingsmenu.h @@ -13,6 +13,7 @@ class ModesSettingsMenu; } namespace { +#ifdef FEATURE_GAMETRAK class GametrakModeSettingsMenu : public MenuDisplay, public StaticText, @@ -21,4 +22,5 @@ class GametrakModeSettingsMenu : makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; +#endif } diff --git a/src/screens.h b/src/screens.h index d9358e3..f9a94f3 100644 --- a/src/screens.h +++ b/src/screens.h @@ -70,7 +70,9 @@ union X { EnableMenu enableMenu; FrontFeedbackDebugMenu frontFeedbackDebugMenu; BackFeedbackDebugMenu backFeedbackDebugMenu; +#ifdef FEATURE_GAMETRAK GametrakModeSettingsMenu gametrakModeSettingsMenu; +#endif GenericWifiSettingsMenu genericWifiSettingsMenu; GraphsMenu graphsMenu; InvertMenu invertMenu; @@ -202,7 +204,9 @@ template<> decltype(displays.dynamicDebugMenu) & template<> decltype(displays.enableMenu) &getRefByType() { return displays.enableMenu; } template<> decltype(displays.frontFeedbackDebugMenu) &getRefByType() { return displays.frontFeedbackDebugMenu; } template<> decltype(displays.backFeedbackDebugMenu) &getRefByType() { return displays.backFeedbackDebugMenu; } +#ifdef FEATURE_GAMETRAK template<> decltype(displays.gametrakModeSettingsMenu) &getRefByType() { return displays.gametrakModeSettingsMenu; } +#endif template<> decltype(displays.genericWifiSettingsMenu) &getRefByType() { return displays.genericWifiSettingsMenu; } template<> decltype(displays.graphsMenu) &getRefByType() { return displays.graphsMenu; } template<> decltype(displays.invertMenu) &getRefByType() { return displays.invertMenu; } diff --git a/src/settings.h b/src/settings.h index 0672b6c..0a2a81f 100644 --- a/src/settings.h +++ b/src/settings.h @@ -108,12 +108,14 @@ void Settings::executeForEverySetting(T &&callable) callable("gasMax", boardcomputerHardware.gasMax); callable("bremsMin", boardcomputerHardware.bremsMin); callable("bremsMax", boardcomputerHardware.bremsMax); +#ifdef FEATURE_GAMETRAK callable("gametrakXMin", boardcomputerHardware.gametrakXMin); callable("gametrakXMax", boardcomputerHardware.gametrakXMax); callable("gametrakYMin", boardcomputerHardware.gametrakYMin); callable("gametrakYMax", boardcomputerHardware.gametrakYMax); callable("gametrakDistMin", boardcomputerHardware.gametrakDistMin); callable("gametrakDistMax", boardcomputerHardware.gametrakDistMax); +#endif callable("swapScreenBytes", boardcomputerHardware.swapScreenBytes); callable("default.ctrlTyp", defaultMode.ctrlTyp); From ace299f922175cc91dfbf842554b7d80c80c7141 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 25 May 2020 22:40:02 +0200 Subject: [PATCH 6/7] Added GametrakCalibrateDisplay --- src/displays/calibratedisplay.h | 14 ++-- src/displays/gametrakcalibratedisplay.h | 80 +++++++++++++++++++ .../menus/boardcomputerhardwaresettingsmenu.h | 2 + src/presets.h | 4 +- src/screens.h | 7 ++ src/texts.h | 1 + 6 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 src/displays/gametrakcalibratedisplay.h diff --git a/src/displays/calibratedisplay.h b/src/displays/calibratedisplay.h index b45d85c..61f1c20 100644 --- a/src/displays/calibratedisplay.h +++ b/src/displays/calibratedisplay.h @@ -47,8 +47,10 @@ private: Label{25, 125} // 100, 23 }}; - ProgressBar m_progressBar0{20, 200, 200, 10, 0, 1000}; - ProgressBar m_progressBar1{20, 230, 200, 10, 0, 1000}; + std::array m_progressBars {{ + ProgressBar{20, 200, 200, 10, 0, 1000}, + ProgressBar{20, 230, 200, 10, 0, 1000} + }}; }; CalibrateDisplay::CalibrateDisplay(bool bootup) : @@ -77,8 +79,8 @@ void CalibrateDisplay::initScreen() for (auto &label : m_labels) label.start(); - m_progressBar0.start(); - m_progressBar1.start(); + for (auto &progressBar : m_progressBars) + progressBar.start(); } void CalibrateDisplay::redraw() @@ -89,8 +91,8 @@ void CalibrateDisplay::redraw() m_labels[2].redraw(String{brems}); m_labels[3].redraw(String{raw_brems}); - m_progressBar0.redraw(gas); - m_progressBar1.redraw(brems); + m_progressBars[0].redraw(gas); + m_progressBars[1].redraw(brems); } void CalibrateDisplay::stop() diff --git a/src/displays/gametrakcalibratedisplay.h b/src/displays/gametrakcalibratedisplay.h new file mode 100644 index 0000000..72a40fc --- /dev/null +++ b/src/displays/gametrakcalibratedisplay.h @@ -0,0 +1,80 @@ +#pragma once + +#include + +#include + +#include "demodisplay.h" +#include "actions/switchscreenaction.h" +#include "globals.h" +#include "texts.h" +#include "widgets/label.h" +#include "widgets/progressbar.h" +#include "modes/ignoreinputmode.h" + +namespace { +class StatusDisplay; +class BoardcomputerHardwareSettingsMenu; +} + +namespace { +class GametrakCalibrateDisplay : public DemoDisplay, public SwitchScreenAction, public BackActionInterface> +{ + using Base = DemoDisplay; + +public: + void initScreen() override; + void redraw() override; + +private: + std::array m_labels {{ + Label{25, 50}, // 100, 23 + Label{120, 50}, // 100, 23 + Label{25, 75}, // 100, 23 + Label{120, 75}, // 100, 23 + Label{25, 100}, // 100, 23 + Label{120, 100} // 100, 23 + }}; + + std::array m_progressBars {{ + ProgressBar{20, 200, 200, 10, 0, 1000}, + ProgressBar{20, 230, 200, 10, 0, 1000}, + ProgressBar{20, 260, 200, 10, 0, 1000} + }}; +}; + +void GametrakCalibrateDisplay::initScreen() +{ + tft.fillScreen(TFT_BLACK); + tft.setTextFont(4); + tft.setTextColor(TFT_YELLOW); + + tft.drawString(TEXT_CALIBRATE, 5, 5, 4); + + tft.fillRect(0, 34, tft.width(), 3, TFT_WHITE); + + tft.setTextColor(TFT_WHITE, TFT_BLACK); + + for (auto &label : m_labels) + label.start(); + + for (auto &progressBar : m_progressBars) + progressBar.start(); +} + +void GametrakCalibrateDisplay::redraw() +{ + m_labels[0].redraw(String{gametrakX}); + m_labels[1].redraw(String{raw_gametrakX}); + + m_labels[2].redraw(String{gametrakY}); + m_labels[3].redraw(String{raw_gametrakY}); + + m_labels[4].redraw(String{gametrakDist}); + m_labels[5].redraw(String{raw_gametrakDist}); + + m_progressBars[0].redraw(gametrakX); + m_progressBars[1].redraw(gametrakY); + m_progressBars[2].redraw(gametrakDist); +} +} diff --git a/src/displays/menus/boardcomputerhardwaresettingsmenu.h b/src/displays/menus/boardcomputerhardwaresettingsmenu.h index 56ec50d..8520a3d 100644 --- a/src/displays/menus/boardcomputerhardwaresettingsmenu.h +++ b/src/displays/menus/boardcomputerhardwaresettingsmenu.h @@ -15,6 +15,7 @@ namespace { class BoardcomputerHardwareSettingsMenu; class CalibrateDisplay; +class GametrakCalibrateDisplay; class SettingsMenu; } @@ -122,6 +123,7 @@ class BoardcomputerHardwareSettingsMenu : makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, #ifdef FEATURE_GAMETRAK + makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, diff --git a/src/presets.h b/src/presets.h index 409e58e..cd8c20b 100644 --- a/src/presets.h +++ b/src/presets.h @@ -91,7 +91,7 @@ constexpr Settings::DefaultMode defaultDefaultMode { .smoothing = 20, .frontPercentage = 100, .backPercentage = 100, - .add_schwelle = 950, + .add_schwelle = 750, .gas1_wert = 1250, .gas2_wert = 1250, .brems1_wert = 250, @@ -105,7 +105,7 @@ constexpr Settings::TempomatMode defaultTempomatMode { constexpr Settings::LarsmMode defaultLarsmMode { .mode = LarsmModeMode::Mode4, - .iterations = 5 + .iterations = 100 }; constexpr Settings defaultSettings{ diff --git a/src/screens.h b/src/screens.h index f9a94f3..d2b5109 100644 --- a/src/screens.h +++ b/src/screens.h @@ -35,6 +35,7 @@ #include "displays/calibratedisplay.h" #include "displays/dualgraphdisplay.h" #include "displays/gameoflifedisplay.h" +#include "displays/gametrakcalibratedisplay.h" #include "displays/lockscreen.h" #include "displays/metersdisplay.h" #include "displays/pingpongdisplay.h" @@ -103,6 +104,9 @@ union X { CalibrateDisplay calibrateDisplay; DualGraphDisplay dualGraphDisplay; GameOfLifeDisplay gameOfLifeDisplay; +#ifdef FEATURE_GAMETRAK + GametrakCalibrateDisplay gametrakCalibrateDisplay; +#endif Lockscreen lockScreen; MetersDisplay metersDisplay; PingPongDisplay pingPongDisplay; @@ -236,6 +240,9 @@ template<> decltype(displays.bmsDisplay) & template<> decltype(displays.calibrateDisplay) &getRefByType() { return displays.calibrateDisplay; } template<> decltype(displays.dualGraphDisplay) &getRefByType() { return displays.dualGraphDisplay; } template<> decltype(displays.gameOfLifeDisplay) &getRefByType() { return displays.gameOfLifeDisplay; } +#ifdef FEATURE_GAMETRAK +template<> decltype(displays.gametrakCalibrateDisplay) &getRefByType() { return displays.gametrakCalibrateDisplay; } +#endif template<> decltype(displays.lockScreen) &getRefByType() { return displays.lockScreen; } template<> decltype(displays.metersDisplay) &getRefByType() { return displays.metersDisplay; } template<> decltype(displays.pingPongDisplay) &getRefByType() { return displays.pingPongDisplay; } diff --git a/src/texts.h b/src/texts.h index f8c6360..e67fa00 100644 --- a/src/texts.h +++ b/src/texts.h @@ -227,6 +227,7 @@ 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_GAMETRAKCALIBRATE[] = "Gametrak calibrate"; constexpr char TEXT_SETGAMETRAKXMIN[] = "Set gametrakXMin"; constexpr char TEXT_SETGAMETRAKXMAX[] = "Set gametrakXMax"; constexpr char TEXT_SETGAMETRAKYMIN[] = "Set gametrakYMin"; From e6febd1cff3ea32d92ab95d23cd7a3978a5ed74c Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 25 May 2020 22:42:12 +0200 Subject: [PATCH 7/7] menu cleanups --- src/displays/gametrakcalibratedisplay.h | 2 +- .../menus/boardcomputerhardwaresettingsmenu.h | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/displays/gametrakcalibratedisplay.h b/src/displays/gametrakcalibratedisplay.h index 72a40fc..3ad9457 100644 --- a/src/displays/gametrakcalibratedisplay.h +++ b/src/displays/gametrakcalibratedisplay.h @@ -49,7 +49,7 @@ void GametrakCalibrateDisplay::initScreen() tft.setTextFont(4); tft.setTextColor(TFT_YELLOW); - tft.drawString(TEXT_CALIBRATE, 5, 5, 4); + tft.drawString(TEXT_GAMETRAKCALIBRATE, 5, 5, 4); tft.fillRect(0, 34, tft.width(), 3, TFT_WHITE); diff --git a/src/displays/menus/boardcomputerhardwaresettingsmenu.h b/src/displays/menus/boardcomputerhardwaresettingsmenu.h index 8520a3d..fb64712 100644 --- a/src/displays/menus/boardcomputerhardwaresettingsmenu.h +++ b/src/displays/menus/boardcomputerhardwaresettingsmenu.h @@ -64,7 +64,21 @@ using BremsMaxChangeScreen = makeComponent< BackActionInterface>, SwitchScreenAction >; + #ifdef FEATURE_GAMETRAK +struct GametrakXText : public virtual TextInterface { +public: + String text() const override { return String{"gametrakX: "} + raw_gametrakX + ": " + gametrakX; } +}; +struct GametrakYText : public virtual TextInterface { +public: + String text() const override { return String{"gametrakY: "} + raw_gametrakY + ": " + gametrakY; } +}; +struct GametrakDistText : public virtual TextInterface { +public: + String text() const override { return String{"gametrakDist: "} + raw_gametrakDist + ": " + gametrakDist; } +}; + using GametrakXMinChangeScreen = makeComponent< ChangeValueDisplay, StaticText, @@ -123,6 +137,10 @@ class BoardcomputerHardwareSettingsMenu : makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, #ifdef FEATURE_GAMETRAK + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, @@ -131,6 +149,7 @@ class BoardcomputerHardwareSettingsMenu : makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, #endif + makeComponent, DummyAction>, makeComponent, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> >