diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index 5bf059d..11f98c1 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -262,5 +262,8 @@ struct QuickActionExtra2Accessor : public NewSettingsAccessor struct QuickActionExtra3Accessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.quickActionExtra3; } }; struct QuickActionExtra4Accessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.quickActionExtra4; } }; +// boardcomputer-hardware +struct FlipScreenAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.boardcomputerHardware.flipScreen; } }; + // Other struct AnhaengerIdAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.anhaenger_id; } }; diff --git a/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp b/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp index 151b554..38b4ec7 100644 --- a/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp +++ b/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp @@ -10,17 +10,19 @@ #include // local includes -#include "displays/bobbychangevaluedisplay.h" -#include "utils.h" -#include "icons/lock.h" #include "accessors/settingsaccessors.h" -#include "displays/menus/lockscreensettingsmenu.h" -#include "displays/potiscalibratedisplay.h" -#include "displays/menus/timersmenu.h" -#include "displays/menus/settingsmenu.h" +#include "bobbycheckbox.h" +#include "displays/bobbychangevaluedisplay.h" #include "displays/buttoncalibratedisplay.h" #include "displays/menus/extrabuttoncalibratemenu.h" +#include "displays/menus/lockscreensettingsmenu.h" +#include "displays/menus/settingsmenu.h" #include "displays/menus/setupquickactionsmenu.h" +#include "displays/menus/timersmenu.h" +#include "displays/potiscalibratedisplay.h" +#include "icons/lock.h" +#include "utils.h" + #ifdef FEATURE_JOYSTICK #include "displays/joystickdebugdisplay.h" #endif @@ -35,6 +37,7 @@ constexpr char TEXT_POTISCALIBRATE[] = "Potis Calibrate"; #ifdef FEATURE_JOYSTICK constexpr char TEXT_JOYSTICK[] = "Debug Joystick"; #endif +constexpr char TEXT_FLIPDISPLAY[] = "Flip Display"; constexpr char TEXT_SAMPLECOUNT[] = "sampleCount"; constexpr char TEXT_GASMIN[] = "gasMin"; constexpr char TEXT_GASMAX[] = "gasMax"; @@ -200,6 +203,7 @@ BoardcomputerHardwareSettingsMenu::BoardcomputerHardwareSettingsMenu() #ifdef FEATURE_JOYSTICK constructMenuItem, PushScreenAction>>(); #endif + constructMenuItem, BobbyCheckbox, FlipScreenAccessor>>(); constructMenuItem, PushScreenAction>>(); constructMenuItem, PushScreenAction>>(); constructMenuItem, PushScreenAction>>(); diff --git a/main/newsettings.h b/main/newsettings.h index 46ffccc..536b9de 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -365,6 +365,7 @@ public: ConfigWrapperLegacy cloudSendRate {1, DoReset, {}, "cloudSendRate" }; ConfigWrapperLegacy udpSendRateMs {65, DoReset, {}, "udpSendRate" }; } timersSettings; + ConfigWrapperLegacy flipScreen {false, DoReset, {}, "flipScreen" }; } boardcomputerHardware; struct { @@ -709,7 +710,9 @@ public: x(boardcomputerHardware.timersSettings.statsUpdateRate) \ x(boardcomputerHardware.timersSettings.cloudCollectRate) \ x(boardcomputerHardware.timersSettings.cloudSendRate) \ - x(boardcomputerHardware.timersSettings.udpSendRateMs) \ + x(boardcomputerHardware.timersSettings.udpSendRateMs) \ + \ + x(boardcomputerHardware.flipScreen) \ \ x(cloudSettings.cloudEnabled) \ x(cloudSettings.cloudTransmitTimeout) \ diff --git a/main/screens.cpp b/main/screens.cpp index e1b4330..ad89e98 100644 --- a/main/screens.cpp +++ b/main/screens.cpp @@ -15,10 +15,12 @@ Label bootLabel{32, 250}; void initScreen() { + // vertical screen tft.init(); tft.fillScreen(TFT_WHITE); tft.setTextColor(TFT_BLACK, TFT_WHITE); tft.setTextFont(4); + tft.setRotation(configs.boardcomputerHardware.flipScreen.value() ? 2 : 0); espgui::tft.setSwapBytes(true); tft.pushImage(0, 40, bobbyicons::logo.WIDTH, bobbyicons::logo.HEIGHT, bobbyicons::logo.buffer); espgui::tft.setSwapBytes(false); @@ -42,6 +44,13 @@ void updateDisplay() changeScreenCallback = {}; } + if (tft.getRotation() != (configs.boardcomputerHardware.flipScreen.value() ? 2 : 0)) + { + tft.setRotation(configs.boardcomputerHardware.flipScreen.value() ? 2 : 0); + if (currentDisplay) + currentDisplay->initScreen(); + } + if (const int8_t rawButton = rawButtonRequest.load(); rawButton != -1 && currentDisplay) { currentDisplay->rawButtonPressed(rawButton);