diff --git a/components/esp-gui-lib b/components/esp-gui-lib index aad3fce..db06696 160000 --- a/components/esp-gui-lib +++ b/components/esp-gui-lib @@ -1 +1 @@ -Subproject commit aad3fcedcbe6bbc591021c79ba92d332f09bcc7f +Subproject commit db066968d2eda57a3aea3cf44f3718a6bda0c371 diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 2578d9d..8bba364 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -93,7 +93,6 @@ set(headers displays/gameoflifedisplay.h displays/gametrakcalibratedisplay.h displays/garagedisplay.h - displays/graphdisplay.h displays/ledstripcolorsdisplay.h displays/lockscreen.h displays/menus/aboutmenu.h @@ -148,7 +147,6 @@ set(headers displays/poweroffdisplay.h displays/powersupplydisplay.h displays/spirodisplay.h - displays/splitgraphdisplay.h displays/starfielddisplay.h displays/statusdisplay.h displays/updatedisplay.h @@ -278,7 +276,6 @@ set(sources displays/gameoflifedisplay.cpp displays/gametrakcalibratedisplay.cpp displays/garagedisplay.cpp - displays/graphdisplay.cpp displays/ledstripcolorsdisplay.cpp displays/lockscreen.cpp displays/menus/aboutmenu.cpp @@ -331,7 +328,6 @@ set(sources displays/poweroffdisplay.cpp displays/powersupplydisplay.cpp displays/spirodisplay.cpp - displays/splitgraphdisplay.cpp displays/starfielddisplay.cpp displays/statusdisplay.cpp displays/updatedisplay.cpp diff --git a/main/displays/gameoflifedisplay.h b/main/displays/gameoflifedisplay.h index 51d22c6..62b0be4 100644 --- a/main/displays/gameoflifedisplay.h +++ b/main/displays/gameoflifedisplay.h @@ -12,10 +12,6 @@ #include "display.h" #include "actions/switchscreenaction.h" -namespace { -class DemosMenu; -} - namespace { class GameOfLifeDisplay : public Display, public ConfirmActionInterface>, public BackActionInterface> { diff --git a/main/displays/graphdisplay.cpp b/main/displays/graphdisplay.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/main/displays/graphdisplay.h b/main/displays/graphdisplay.h deleted file mode 100644 index c5ee2db..0000000 --- a/main/displays/graphdisplay.h +++ /dev/null @@ -1,77 +0,0 @@ -#pragma once - -#include "display.h" -#include "textinterface.h" -#include "widgets/label.h" -#include "widgets/graph.h" -#include "globals.h" -#include "statistics.h" - -namespace { -template -class GraphAccessorInterface -{ -public: - virtual std::array, COUNT> getBuffers() const = 0; -}; - -template -class SingleGraphAccessor : public virtual GraphAccessorInterface<1> -{ -public: - Graph<200, 1>::Container getBuffers() const - { - return {T{}.getBuffer()}; - } -}; - -template -class DualGraphAccessor : public virtual GraphAccessorInterface<2> -{ -public: - Graph<200, 2>::Container getBuffers() const - { - return {T1{}.getBuffer(), T2{}.getBuffer()}; - } -}; - -template -class GraphDisplay : - public Display, - public virtual TextInterface, - public virtual GraphAccessorInterface -{ -public: - void initScreen() override; - void redraw() override; - -private: - static constexpr int screenHeight = 320, topMargin = 40, bottomMargin = 10, labelOffset = -5; - static constexpr int graphHeight = screenHeight-topMargin-bottomMargin; - - Label m_titleLabel{5, 5}; // 230, 25 - - Graph<200, COUNT> m_graph{0, 40, 270}; -}; - -template -void GraphDisplay::initScreen() -{ - tft.fillScreen(TFT_BLACK); - - m_titleLabel.start(); - tft.fillRect(0, 34, tft.width(), 3, TFT_WHITE); - - m_graph.start(static_cast &>(*this).getBuffers()); -} - -template -void GraphDisplay::redraw() -{ - tft.setTextFont(4); - tft.setTextColor(TFT_YELLOW, TFT_BLACK); - m_titleLabel.redraw(text()); - - m_graph.redraw(static_cast &>(*this).getBuffers()); -} -} diff --git a/main/displays/menus/buzzermenu.cpp b/main/displays/menus/buzzermenu.cpp index e69de29..b050698 100644 --- a/main/displays/menus/buzzermenu.cpp +++ b/main/displays/menus/buzzermenu.cpp @@ -0,0 +1,103 @@ +#include "buzzermenu.h" + +// 3rdparty lib includes +#include "changevaluedisplay.h" +#include "menuitem.h" +#include "actions/switchscreenaction.h" +#include "actions/toggleboolaction.h" +#include "checkboxicon.h" +#include "icons/back.h" + +// local includes +#include "utils.h" +#include "globals.h" +#include "accessors/settingsaccessors.h" +#include "displays/menus/settingsmenu.h" + +namespace { +struct FrontFreqAccessor : public espgui::RefAccessor { uint8_t &getRef() const override { return controllers.front.command.buzzer.freq; } }; +using FrontFreqChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + FrontFreqAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; + +struct FrontPatternAccessor : public espgui::RefAccessor { uint8_t &getRef() const override { return controllers.front.command.buzzer.pattern; } }; +using FrontPatternChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + FrontPatternAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; + +struct BackFreqAccessor : public espgui::RefAccessor { uint8_t &getRef() const override { return controllers.back.command.buzzer.freq; } }; +using BackFreqChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + BackFreqAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; + +struct BackPatternAccessor : public espgui::RefAccessor { uint8_t &getRef() const override { return controllers.back.command.buzzer.pattern; } }; +using BackPatternChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + BackPatternAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; + +using ReverseBeepFreq0ChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + ReverseBeepFreq0Accessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +using ReverseBeepFreq1ChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + ReverseBeepFreq1Accessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +using ReverseBeepDuration0ChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + ReverseBeepDuration0Accessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +using ReverseBeepDuration1ChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + ReverseBeepDuration1Accessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +} // namespace + +using namespace espgui; + +BuzzerMenu::BuzzerMenu() +{ + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, ReverseBeepAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void BuzzerMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/buzzermenu.h b/main/displays/menus/buzzermenu.h index c3505d6..6d4cf9a 100644 --- a/main/displays/menus/buzzermenu.h +++ b/main/displays/menus/buzzermenu.h @@ -1,104 +1,17 @@ #pragma once -// local includes +// 3rdparty lib includes #include "menudisplay.h" -#include "utils.h" -#include "changevaluedisplay.h" -#include "menuitem.h" -#include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" -#include "icons/back.h" + +// local includes #include "texts.h" -#include "globals.h" -#include "accessors/settingsaccessors.h" - -using namespace espgui; - -namespace { -struct FrontFreqAccessor : public RefAccessor { uint8_t &getRef() const override { return controllers.front.command.buzzer.freq; } }; -using FrontFreqChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - FrontFreqAccessor, - BackActionInterface>, - SwitchScreenAction ->; - -struct FrontPatternAccessor : public RefAccessor { uint8_t &getRef() const override { return controllers.front.command.buzzer.pattern; } }; -using FrontPatternChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - FrontPatternAccessor, - BackActionInterface>, - SwitchScreenAction ->; - -struct BackFreqAccessor : public RefAccessor { uint8_t &getRef() const override { return controllers.back.command.buzzer.freq; } }; -using BackFreqChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - BackFreqAccessor, - BackActionInterface>, - SwitchScreenAction ->; - -struct BackPatternAccessor : public RefAccessor { uint8_t &getRef() const override { return controllers.back.command.buzzer.pattern; } }; -using BackPatternChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - BackPatternAccessor, - BackActionInterface>, - SwitchScreenAction ->; - -using ReverseBeepFreq0ChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - ReverseBeepFreq0Accessor, - BackActionInterface>, - SwitchScreenAction ->; -using ReverseBeepFreq1ChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - ReverseBeepFreq1Accessor, - BackActionInterface>, - SwitchScreenAction ->; -using ReverseBeepDuration0ChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - ReverseBeepDuration0Accessor, - BackActionInterface>, - SwitchScreenAction ->; -using ReverseBeepDuration1ChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - ReverseBeepDuration1Accessor, - BackActionInterface>, - SwitchScreenAction ->; class BuzzerMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { public: - BuzzerMenu() - { - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, ReverseBeepAccessor>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + BuzzerMenu(); + + void back() override; }; -} // namespace diff --git a/main/displays/menus/controllerhardwaresettingsmenu.cpp b/main/displays/menus/controllerhardwaresettingsmenu.cpp index e69de29..752f6d9 100644 --- a/main/displays/menus/controllerhardwaresettingsmenu.cpp +++ b/main/displays/menus/controllerhardwaresettingsmenu.cpp @@ -0,0 +1,84 @@ +#include "controllerhardwaresettingsmenu.h" + +// system includes +#include + +// 3rdparty lib includes +#include "changevaluedisplay.h" +#include "actions/toggleboolaction.h" +#include "actions/switchscreenaction.h" +#include "checkboxicon.h" +#include "icons/back.h" + +// local includes +#include "utils.h" +#include "globals.h" +#include "accessors/settingsaccessors.h" +#include "displays/menus/enablemenu.h" +#include "displays/menus/invertmenu.h" +#include "displays/menus/settingsmenu.h" + +namespace { +using WheelDiameterMmChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + WheelDiameterMmAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +using WheelDiameterInchChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + WheelDiameterInchAccessor, + espgui::RatioNumberStep>, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +using NumMagnetPolesChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + NumMagnetPolesAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +#ifdef FEATURE_CAN +using CanTransmitTimeoutChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + CanTransmitTimeoutAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +using CanReceiveTimeoutChangeScreen = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + CanReceiveTimeoutAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +#endif +} // namespace + +using namespace espgui; + +ControllerHardwareSettingsMenu::ControllerHardwareSettingsMenu() +{ + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>(); +#ifdef FEATURE_CAN + constructMenuItem, ToggleBoolAction, CheckboxIcon, SendFrontCanCmdAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, SendBackCanCmdAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); +#endif + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void ControllerHardwareSettingsMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/controllerhardwaresettingsmenu.h b/main/displays/menus/controllerhardwaresettingsmenu.h index cff93df..7ffea17 100644 --- a/main/displays/menus/controllerhardwaresettingsmenu.h +++ b/main/displays/menus/controllerhardwaresettingsmenu.h @@ -1,82 +1,17 @@ #pragma once -#include +// 3rdparty lib includes +#include "menudisplay.h" // local includes -#include "menudisplay.h" -#include "utils.h" -#include "changevaluedisplay.h" -#include "actions/toggleboolaction.h" -#include "actions/switchscreenaction.h" -#include "checkboxicon.h" -#include "icons/back.h" #include "texts.h" -#include "globals.h" -#include "accessors/settingsaccessors.h" - -using namespace espgui; - -namespace { -using WheelDiameterMmChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - WheelDiameterMmAccessor, - BackActionInterface>, - SwitchScreenAction ->; -using WheelDiameterInchChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - WheelDiameterInchAccessor, - RatioNumberStep>, - BackActionInterface>, - SwitchScreenAction ->; -using NumMagnetPolesChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - NumMagnetPolesAccessor, - BackActionInterface>, - SwitchScreenAction ->; -#ifdef FEATURE_CAN -using CanTransmitTimeoutChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - CanTransmitTimeoutAccessor, - BackActionInterface>, - SwitchScreenAction ->; -using CanReceiveTimeoutChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - CanReceiveTimeoutAccessor, - BackActionInterface>, - SwitchScreenAction ->; -#endif class ControllerHardwareSettingsMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { public: - ControllerHardwareSettingsMenu() - { - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>(); -#ifdef FEATURE_CAN - constructMenuItem, ToggleBoolAction, CheckboxIcon, SendFrontCanCmdAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, SendBackCanCmdAccessor>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); -#endif - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + ControllerHardwareSettingsMenu(); + + void back() override; }; -} // namespace diff --git a/main/displays/menus/demosmenu.cpp b/main/displays/menus/demosmenu.cpp index e69de29..6d7c910 100644 --- a/main/displays/menus/demosmenu.cpp +++ b/main/displays/menus/demosmenu.cpp @@ -0,0 +1,30 @@ +#include "demosmenu.h" + +// 3rdparty lib includes +#include "menuitem.h" +#include "actions/switchscreenaction.h" +#include "icons/back.h" +#include "displays/starfielddisplay.h" +#include "displays/pingpongdisplay.h" +#include "displays/spirodisplay.h" +#include "displays/gameoflifedisplay.h" +#include "displays/menus/mainmenu.h" + +// local includes +#include "utils.h" + +using namespace espgui; + +DemosMenu::DemosMenu() +{ + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void DemosMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/demosmenu.h b/main/displays/menus/demosmenu.h index ec8588d..0feb869 100644 --- a/main/displays/menus/demosmenu.h +++ b/main/displays/menus/demosmenu.h @@ -1,29 +1,17 @@ #pragma once -// local includes +// 3rdparty lib includes #include "menudisplay.h" -#include "utils.h" -#include "menuitem.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" + +// local includes #include "texts.h" -using namespace espgui; - -namespace { class DemosMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { public: - DemosMenu() - { - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + DemosMenu(); + + void back() override; }; -} // namespace diff --git a/main/displays/menus/enablemenu.h b/main/displays/menus/enablemenu.h index 2b38107..d14c9ff 100644 --- a/main/displays/menus/enablemenu.h +++ b/main/displays/menus/enablemenu.h @@ -11,11 +11,6 @@ #include "texts.h" #include "accessors/settingsaccessors.h" -// forward declares -namespace { -class ControllerHardwareSettingsMenu; -} // namespace - using namespace espgui; namespace { diff --git a/main/displays/menus/graphsmenu.cpp b/main/displays/menus/graphsmenu.cpp index e69de29..030af91 100644 --- a/main/displays/menus/graphsmenu.cpp +++ b/main/displays/menus/graphsmenu.cpp @@ -0,0 +1,183 @@ +#include "graphsmenu.h" + +// 3rdparty lib includes +#include "actions/switchscreenaction.h" +#include "icons/back.h" +#include "graphdisplay.h" +#include "splitgraphdisplay.h" + +// local includes +#include "utils.h" +#include "statistics.h" +#include "displays/menus/mainmenu.h" + +namespace { +using GasGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using BremsGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using PotisGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<2>, + espgui::StaticText, + espgui::DualGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using PotisSplitGraphDisplay = espgui::makeComponent< + espgui::SplitGraphDisplay<1, 1>, + espgui::StaticText, + espgui::SingleTopGraphAccessor, + espgui::SingleBottomGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; + +using AvgSpeedGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using AvgSpeedKmhGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; + +using SumCurrentGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; + +using FrontVoltageGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using BackVoltageGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using VoltagesGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<2>, + espgui::StaticText, + espgui::DualGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using VoltagesSplitGraphDisplay = espgui::makeComponent< + espgui::SplitGraphDisplay<1, 1>, + espgui::StaticText, + espgui::SingleTopGraphAccessor, + espgui::SingleBottomGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; + +#ifdef FEATURE_BMS +using BmsVoltageGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using BmsCurrentGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using BmsPowerGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +using SumCurrentsComparisonGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<2>, + espgui::StaticText, + DualGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +#endif + +class MotorCurrentsStatistics : public virtual espgui::GraphAccessorInterface<4> +{ + std::array, 4> getBuffers() const override + { + return {FrontLeftCurrentStatistics{}.getBuffer(), FrontRightCurrentStatistics{}.getBuffer(), BackLeftCurrentStatistics{}.getBuffer(), BackRightCurrentStatistics{}.getBuffer()}; + } +}; +using MotorCurrentsGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<4>, + espgui::StaticText, + MotorCurrentsStatistics, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; + +using RssiGraphDisplay = espgui::makeComponent< + espgui::GraphDisplay<1>, + espgui::StaticText, + espgui::SingleGraphAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; +} // namespace + +using namespace espgui; + + +GraphsMenu::GraphsMenu() +{ + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); +#ifdef FEATURE_BMS + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); +#endif + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void GraphsMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/graphsmenu.h b/main/displays/menus/graphsmenu.h index d594b36..a6e9828 100644 --- a/main/displays/menus/graphsmenu.h +++ b/main/displays/menus/graphsmenu.h @@ -2,182 +2,14 @@ // local includes #include "menudisplay.h" -#include "utils.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" #include "texts.h" -#include "displays/graphdisplay.h" -#include "displays/splitgraphdisplay.h" -#include "statistics.h" - -using namespace espgui; - -namespace { -using GasGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using BremsGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using PotisGraphDisplay = makeComponent< - GraphDisplay<2>, - StaticText, - DualGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using PotisSplitGraphDisplay = makeComponent< - SplitGraphDisplay<1, 1>, - StaticText, - SingleTopGraphAccessor, - SingleBottomGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; - -using AvgSpeedGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using AvgSpeedKmhGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; - -using SumCurrentGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; - -using FrontVoltageGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using BackVoltageGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using VoltagesGraphDisplay = makeComponent< - GraphDisplay<2>, - StaticText, - DualGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using VoltagesSplitGraphDisplay = makeComponent< - SplitGraphDisplay<1, 1>, - StaticText, - SingleTopGraphAccessor, - SingleBottomGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; - -#ifdef FEATURE_BMS -using BmsVoltageGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using BmsCurrentGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using BmsPowerGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -using SumCurrentsComparisonGraphDisplay = makeComponent< - GraphDisplay<2>, - StaticText, - DualGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; -#endif - -class MotorCurrentsStatistics : public virtual GraphAccessorInterface<4> -{ - std::array, 4> getBuffers() const override - { - return {FrontLeftCurrentStatistics{}.getBuffer(), FrontRightCurrentStatistics{}.getBuffer(), BackLeftCurrentStatistics{}.getBuffer(), BackRightCurrentStatistics{}.getBuffer()}; - } -}; -using MotorCurrentsGraphDisplay = makeComponent< - GraphDisplay<4>, - StaticText, - MotorCurrentsStatistics, - ConfirmActionInterface>, - BackActionInterface> ->; - -using RssiGraphDisplay = makeComponent< - GraphDisplay<1>, - StaticText, - SingleGraphAccessor, - ConfirmActionInterface>, - BackActionInterface> ->; class GraphsMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { public: - GraphsMenu() - { - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); -#ifdef FEATURE_BMS - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); -#endif - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + GraphsMenu(); + + void back() override; }; -} // namespace diff --git a/main/displays/menus/invertmenu.h b/main/displays/menus/invertmenu.h index ce125c1..3ac4b65 100644 --- a/main/displays/menus/invertmenu.h +++ b/main/displays/menus/invertmenu.h @@ -11,11 +11,6 @@ #include "texts.h" #include "accessors/settingsaccessors.h" -// forward declares -namespace { -class ControllerHardwareSettingsMenu; -} // namespace - using namespace espgui; namespace { diff --git a/main/displays/menus/larsmmodesettingsmenu.cpp b/main/displays/menus/larsmmodesettingsmenu.cpp index e69de29..8c09124 100644 --- a/main/displays/menus/larsmmodesettingsmenu.cpp +++ b/main/displays/menus/larsmmodesettingsmenu.cpp @@ -0,0 +1,53 @@ +#include "larsmmodesettingsmenu.h" + +// 3rdparty lib includes +#include "changevaluedisplay.h" +#include "menuitem.h" +#include "actions/switchscreenaction.h" +#include "icons/back.h" + +// local includes +#include "utils.h" +#include "changevaluedisplay_larsmmode_mode.h" +#include "changevaluedisplay_unifiedmodelmode.h" +#include "accessors/settingsaccessors.h" +#include "displays/menus/modessettingsmenu.h" + +namespace { +using LarsmModeModelModeChangeDisplay = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + LarsmModeModelModeAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +using LarsmModeModeChangeDisplay = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + LarsmModeModeAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +using LarsmModeIterationsChangeDisplay = espgui::makeComponent< + espgui::ChangeValueDisplay, + espgui::StaticText, + LarsmModeIterationsAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; +} // namespace + +using namespace espgui; + +LarsmModeSettingsMenu::LarsmModeSettingsMenu() +{ + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void LarsmModeSettingsMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/larsmmodesettingsmenu.h b/main/displays/menus/larsmmodesettingsmenu.h index 73ac84e..61a60d6 100644 --- a/main/displays/menus/larsmmodesettingsmenu.h +++ b/main/displays/menus/larsmmodesettingsmenu.h @@ -1,54 +1,17 @@ #pragma once +// 3rdparty lib includes + // local includes #include "menudisplay.h" -#include "utils.h" -#include "changevaluedisplay.h" -#include "changevaluedisplay_larsmmode_mode.h" -#include "changevaluedisplay_unifiedmodelmode.h" -#include "menuitem.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" #include "texts.h" -#include "accessors/settingsaccessors.h" - -using namespace espgui; - -namespace { -using LarsmModeModelModeChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - LarsmModeModelModeAccessor, - BackActionInterface>, - SwitchScreenAction ->; -using LarsmModeModeChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - LarsmModeModeAccessor, - BackActionInterface>, - SwitchScreenAction ->; -using LarsmModeIterationsChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - LarsmModeIterationsAccessor, - BackActionInterface>, - SwitchScreenAction ->; class LarsmModeSettingsMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { public: - LarsmModeSettingsMenu() - { - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + LarsmModeSettingsMenu(); + + void back() override; }; -} // namespace diff --git a/main/displays/menus/selectmodemenu.cpp b/main/displays/menus/selectmodemenu.cpp index e69de29..db96c9f 100644 --- a/main/displays/menus/selectmodemenu.cpp +++ b/main/displays/menus/selectmodemenu.cpp @@ -0,0 +1,67 @@ +#include "selectmodemenu.h" + +// local includes +#include "utils.h" +#include "actions/multiaction.h" +#include "actions/switchscreenaction.h" +#include "icons/back.h" +#include "globals.h" +#include "modes/defaultmode.h" +#include "modes/tempomatmode.h" +#include "modes/larsmmode.h" +#include "modes/remotecontrolmode.h" +#include "modes/gametrakmode.h" +#include "accessors/globalaccessors.h" +#include "displays/menus/mainmenu.h" + +namespace { +template +class SetterAction : public espgui::ActionInterface +{ +public: + void triggered() override { target = value; } +}; +using SetDefaultModeAction = SetterAction; +using SetTempomatModeAction = SetterAction; +using SetLarsmModeAction = SetterAction; +using SetRemoteControlModeAction = SetterAction; +#ifdef FEATURE_GAMETRAK +using SetGametrakModeAction = SetterAction; +#endif +} // namespace + +using namespace espgui; + +SelectModeMenu::SelectModeMenu() +{ + constructMenuItem, MultiAction>>>(); + if (!simplified) { constructMenuItem, MultiAction>>>(); } + constructMenuItem, MultiAction>>>(); + if (!simplified) { constructMenuItem, MultiAction>>>(); } +#ifdef FEATURE_GAMETRAK + constructMenuItem, MultiAction>>>(); +#endif + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void SelectModeMenu::start() +{ + Base::start(); + + if (currentMode == &modes::defaultMode) + setSelectedIndex(0); + else if (currentMode == &modes::tempomatMode) + setSelectedIndex(1); + else if (currentMode == &modes::larsmMode) + setSelectedIndex(2); + else + { + //Serial.printf("Unknown mode: %s", currentMode?currentMode->displayName():""); + setSelectedIndex(3); + } +} + +void SelectModeMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/selectmodemenu.h b/main/displays/menus/selectmodemenu.h index 1709c53..1536a86 100644 --- a/main/displays/menus/selectmodemenu.h +++ b/main/displays/menus/selectmodemenu.h @@ -1,74 +1,20 @@ #pragma once -// local includes +// 3rdparty lib includes #include "menudisplay.h" -#include "utils.h" -#include "actions/multiaction.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" + +// local includes #include "texts.h" -#include "globals.h" - -#include "modes/defaultmode.h" -#include "modes/tempomatmode.h" -#include "modes/larsmmode.h" -#include "modes/remotecontrolmode.h" -#include "modes/gametrakmode.h" - -using namespace espgui; - -namespace { -template -class SetterAction : public ActionInterface -{ -public: - void triggered() override { target = value; } -}; -using SetDefaultModeAction = SetterAction; -using SetTempomatModeAction = SetterAction; -using SetLarsmModeAction = SetterAction; -using SetRemoteControlModeAction = SetterAction; -#ifdef FEATURE_GAMETRAK -using SetGametrakModeAction = SetterAction; -#endif class SelectModeMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { - using Base = MenuDisplay; + using Base = espgui::MenuDisplay; public: - SelectModeMenu() - { - constructMenuItem, MultiAction>>>(); - if (!simplified) { constructMenuItem, MultiAction>>>(); } - constructMenuItem, MultiAction>>>(); - if (!simplified) { constructMenuItem, MultiAction>>>(); } -#ifdef FEATURE_GAMETRAK - constructMenuItem, MultiAction>>>(); -#endif - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + SelectModeMenu(); void start() override; + void back() override; }; - -void SelectModeMenu::start() -{ - Base::start(); - - if (currentMode == &modes::defaultMode) - setSelectedIndex(0); - else if (currentMode == &modes::tempomatMode) - setSelectedIndex(1); - else if (currentMode == &modes::larsmMode) - setSelectedIndex(2); - else - { - //Serial.printf("Unknown mode: %s", currentMode?currentMode->displayName():""); - setSelectedIndex(3); - } -} -} // namespace diff --git a/main/displays/pingpongdisplay.h b/main/displays/pingpongdisplay.h index 9285dd9..9fc412d 100644 --- a/main/displays/pingpongdisplay.h +++ b/main/displays/pingpongdisplay.h @@ -11,10 +11,6 @@ #include "display.h" #include "actions/switchscreenaction.h" -namespace { -class DemosMenu; -} - namespace { class PingPongDisplay : public Display, public ConfirmActionInterface>, public BackActionInterface> { diff --git a/main/displays/spirodisplay.h b/main/displays/spirodisplay.h index b13b0b7..95019ac 100644 --- a/main/displays/spirodisplay.h +++ b/main/displays/spirodisplay.h @@ -11,10 +11,6 @@ #include "display.h" #include "actions/switchscreenaction.h" -namespace { -class DemosMenu; -} - namespace { class SpiroDisplay : public Display, public DummyConfirm, public BackActionInterface> { diff --git a/main/displays/splitgraphdisplay.cpp b/main/displays/splitgraphdisplay.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/main/displays/splitgraphdisplay.h b/main/displays/splitgraphdisplay.h deleted file mode 100644 index 32a5a4c..0000000 --- a/main/displays/splitgraphdisplay.h +++ /dev/null @@ -1,85 +0,0 @@ -#pragma once - -#include "display.h" -#include "textinterface.h" -#include "widgets/label.h" -#include "widgets/graph.h" -#include "globals.h" -#include "statistics.h" - -namespace { -template -class TopGraphAccessorInterface -{ -public: - virtual typename Graph<200, COUNT>::Container getTopBuffers() const = 0; -}; - -template -class SingleTopGraphAccessor : public virtual TopGraphAccessorInterface<1> -{ -public: - typename Graph<200, 1>::Container getTopBuffers() const override - { - return {T{}.getBuffer()}; - } -}; - -template -class BottomGraphAccessorInterface -{ -public: - virtual typename Graph<200, COUNT>::Container getBottomBuffers() const = 0; -}; - -template -class SingleBottomGraphAccessor : public virtual BottomGraphAccessorInterface<1> -{ -public: - typename Graph<200, 1>::Container getBottomBuffers() const override - { - return {T{}.getBuffer()}; - } -}; - -template -class SplitGraphDisplay : - public Display, - public virtual TextInterface, - public virtual TopGraphAccessorInterface, - public virtual BottomGraphAccessorInterface -{ -public: - void initScreen() override; - void redraw() override; - -private: - Label m_titleLabel{5, 5}; // 230, 25 - - Graph<200, COUNT0> m_graph0{0, 40, 133}; - Graph<200, COUNT1> m_graph1{0, 179, 133}; -}; - -template -void SplitGraphDisplay::initScreen() -{ - tft.fillScreen(TFT_BLACK); - - m_titleLabel.start(); - tft.fillRect(0, 34, tft.width(), 3, TFT_WHITE); - - m_graph0.start(static_cast&>(*this).getTopBuffers()); - m_graph1.start(static_cast&>(*this).getBottomBuffers()); -} - -template -void SplitGraphDisplay::redraw() -{ - tft.setTextFont(4); - tft.setTextColor(TFT_YELLOW, TFT_BLACK); - m_titleLabel.redraw(text()); - - m_graph0.redraw(static_cast&>(*this).getTopBuffers()); - m_graph1.redraw(static_cast&>(*this).getBottomBuffers()); -} -} diff --git a/main/displays/starfielddisplay.cpp b/main/displays/starfielddisplay.cpp index e69de29..7ddaa0c 100644 --- a/main/displays/starfielddisplay.cpp +++ b/main/displays/starfielddisplay.cpp @@ -0,0 +1,84 @@ +#include "starfielddisplay.h" + +// 3rdparty lib includes +#include +#include +#include +#include + +// local includes +#include "globals.h" +#include "displays/menus/demosmenu.h" + +StarfieldDisplay::StarfieldDisplay() : + za(cpputils::randomNumber(espcpputils::esp_random_device{})), + zb(cpputils::randomNumber(espcpputils::esp_random_device{})), + zc(cpputils::randomNumber(espcpputils::esp_random_device{})), + zx(cpputils::randomNumber(espcpputils::esp_random_device{})) +{ +} + +void StarfieldDisplay::confirm() +{ + espgui::switchScreen(); +} + +void StarfieldDisplay::back() +{ + espgui::switchScreen(); +} + +void StarfieldDisplay::initScreen() +{ + espgui::tft.fillScreen(TFT_BLACK); + espgui::tft.setRotation(1); + + // fastSetup() must be used immediately before fastPixel() to prepare screen + // It must be called after any other graphics drawing function call if fastPixel() + // is to be called again + //tft.fastSetup(); // Prepare plot window range for fast pixel plotting +} + +void StarfieldDisplay::redraw() +{ + uint8_t spawnDepthVariation = 255; + + for(int i = 0; i < NSTARS; ++i) + { + if (sz[i] <= 1) + { + sx[i] = 160 - 120 + cpputils::randomNumber(espcpputils::esp_random_device{}); + sy[i] = cpputils::randomNumber(espcpputils::esp_random_device{}); + sz[i] = spawnDepthVariation--; + } + else + { + int old_screen_x = ((int)sx[i] - 160) * 256 / sz[i] + 160; + int old_screen_y = ((int)sy[i] - 120) * 256 / sz[i] + 120; + + // This is a faster pixel drawing function for occassions where many single pixels must be drawn + espgui::tft.drawPixel(old_screen_x, old_screen_y,TFT_BLACK); + + sz[i] -= 2; + if (sz[i] > 1) + { + int screen_x = ((int)sx[i] - 160) * 256 / sz[i] + 160; + int screen_y = ((int)sy[i] - 120) * 256 / sz[i] + 120; + + if (screen_x >= 0 && screen_y >= 0 && screen_x < 320 && screen_y < 240) + { + uint8_t r, g, b; + r = g = b = 255 - sz[i]; + espgui::tft.drawPixel(screen_x, screen_y, espgui::tft.color565(r,g,b)); + } + else + sz[i] = 0; // Out of screen, die. + } + } + } +} + +void StarfieldDisplay::stop() +{ + espgui::tft.setRotation(0); +} diff --git a/main/displays/starfielddisplay.h b/main/displays/starfielddisplay.h index 328b80e..f650e55 100644 --- a/main/displays/starfielddisplay.h +++ b/main/displays/starfielddisplay.h @@ -3,33 +3,22 @@ // system includes #include -// 3rdparty lib includes -#include -#include - // local includes #include "display.h" -#include "actions/switchscreenaction.h" -#include "globals.h" -namespace { -class DemosMenu; -} - -namespace { -class StarfieldDisplay : public Display, public ConfirmActionInterface>, public BackActionInterface> +class StarfieldDisplay : public espgui::Display { public: StarfieldDisplay(); + void confirm() override; + void back() override; + void initScreen() override; void redraw() override; void stop() override; private: - // Fast 0-255 random number generator from http://eternityforest.com/Projects/rng.php: - uint8_t rng(); - static constexpr auto NSTARS = 1024; uint8_t sx[NSTARS] = {}; @@ -38,76 +27,3 @@ private: uint8_t za, zb, zc, zx; }; - -StarfieldDisplay::StarfieldDisplay() : - za(cpputils::randomNumber(espcpputils::esp_random_device{})), - zb(cpputils::randomNumber(espcpputils::esp_random_device{})), - zc(cpputils::randomNumber(espcpputils::esp_random_device{})), - zx(cpputils::randomNumber(espcpputils::esp_random_device{})) -{ -} - -void StarfieldDisplay::initScreen() -{ - tft.fillScreen(TFT_BLACK); - tft.setRotation(1); - - // fastSetup() must be used immediately before fastPixel() to prepare screen - // It must be called after any other graphics drawing function call if fastPixel() - // is to be called again - //tft.fastSetup(); // Prepare plot window range for fast pixel plotting -} - -void StarfieldDisplay::redraw() -{ - uint8_t spawnDepthVariation = 255; - - for(int i = 0; i < NSTARS; ++i) - { - if (sz[i] <= 1) - { - sx[i] = 160 - 120 + rng(); - sy[i] = rng(); - sz[i] = spawnDepthVariation--; - } - else - { - int old_screen_x = ((int)sx[i] - 160) * 256 / sz[i] + 160; - int old_screen_y = ((int)sy[i] - 120) * 256 / sz[i] + 120; - - // This is a faster pixel drawing function for occassions where many single pixels must be drawn - tft.drawPixel(old_screen_x, old_screen_y,TFT_BLACK); - - sz[i] -= 2; - if (sz[i] > 1) - { - int screen_x = ((int)sx[i] - 160) * 256 / sz[i] + 160; - int screen_y = ((int)sy[i] - 120) * 256 / sz[i] + 120; - - if (screen_x >= 0 && screen_y >= 0 && screen_x < 320 && screen_y < 240) - { - uint8_t r, g, b; - r = g = b = 255 - sz[i]; - tft.drawPixel(screen_x, screen_y, tft.color565(r,g,b)); - } - else - sz[i] = 0; // Out of screen, die. - } - } - } -} - -void StarfieldDisplay::stop() -{ - tft.setRotation(0); -} - -uint8_t StarfieldDisplay::rng() -{ - zx++; - za = (za^zc^zx); - zb = (zb+za); - zc = (zc+(zb>>1))^za; - return zc; -} -} diff --git a/main/statistics.h b/main/statistics.h index 6090e21..6cb6173 100644 --- a/main/statistics.h +++ b/main/statistics.h @@ -1,7 +1,7 @@ #pragma once // 3rdparty lib includes -#include +#include "graphdisplay.h" #include // local includes