diff --git a/platformio.ini b/platformio.ini index 4d9ebfe..057ac93 100644 --- a/platformio.ini +++ b/platformio.ini @@ -85,6 +85,16 @@ build_flags = -DDEFAULT_BREMSMIN=1300 -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/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..3ad9457 --- /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_GAMETRAKCALIBRATE, 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 139b085..fb64712 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; } @@ -64,21 +65,93 @@ using BremsMaxChangeScreen = makeComponent< 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, + 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, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, + makeComponent, SwitchScreenAction>, +#endif + makeComponent, DummyAction>, + makeComponent, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>, + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> > {}; } diff --git a/src/displays/menus/gametrakmodesettingsmenu.h b/src/displays/menus/gametrakmodesettingsmenu.h new file mode 100644 index 0000000..698cac0 --- /dev/null +++ b/src/displays/menus/gametrakmodesettingsmenu.h @@ -0,0 +1,26 @@ +#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 { +#ifdef FEATURE_GAMETRAK +class GametrakModeSettingsMenu : + public MenuDisplay, + public StaticText, + public BackActionInterface>, + public StaticMenuDefinition< + makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> + > +{}; +#endif +} 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/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/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/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/presets.h b/src/presets.h index a194fcf..cd8c20b 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 }; @@ -83,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, @@ -97,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 515f86e..d2b5109 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" @@ -34,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" @@ -69,6 +71,9 @@ union X { EnableMenu enableMenu; FrontFeedbackDebugMenu frontFeedbackDebugMenu; BackFeedbackDebugMenu backFeedbackDebugMenu; +#ifdef FEATURE_GAMETRAK + GametrakModeSettingsMenu gametrakModeSettingsMenu; +#endif GenericWifiSettingsMenu genericWifiSettingsMenu; GraphsMenu graphsMenu; InvertMenu invertMenu; @@ -99,6 +104,9 @@ union X { CalibrateDisplay calibrateDisplay; DualGraphDisplay dualGraphDisplay; GameOfLifeDisplay gameOfLifeDisplay; +#ifdef FEATURE_GAMETRAK + GametrakCalibrateDisplay gametrakCalibrateDisplay; +#endif Lockscreen lockScreen; MetersDisplay metersDisplay; PingPongDisplay pingPongDisplay; @@ -152,6 +160,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; @@ -192,6 +208,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; } @@ -221,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; } @@ -274,6 +296,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/settings.h b/src/settings.h index 5de3f77..0a2a81f 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,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); 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 2165973..e67fa00 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 @@ -223,6 +227,13 @@ 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"; +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"; @@ -246,7 +257,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 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 } }