From b87a3c5fbc22da974495b2e14c9a9dce095e4367 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sun, 3 Jan 2021 03:44:15 +0100 Subject: [PATCH] More program space savings by removing menu item interface abstraction --- platformio.ini | 20 ++- src/bobby_webserver.h | 108 +++++++++++++- src/changevaluedisplay_bluetoothmode.h | 68 ++------- src/changevaluedisplay_bool.h | 59 ++------ src/changevaluedisplay_controlmode.h | 76 +++------- src/changevaluedisplay_controltype.h | 68 ++------- src/changevaluedisplay_larsmmode_mode.h | 76 +++------- src/changevaluedisplay_unifiedmodelmode.h | 84 +++-------- src/changevaluedisplay_wifi_mode_t.h | 76 +++------- src/changevaluedisplay_wifi_power_t.h | 140 +++++------------- src/containermenudefinition.h | 76 ---------- src/displays/gameoflifedisplay.h | 67 +++++---- src/displays/menus/aboutmenu.h | 48 +++--- .../menus/accesspointwifisettingsmenu.h | 30 ++-- src/displays/menus/bluetoothsettingsmenu.h | 26 ++-- src/displays/menus/bmsmenu.h | 20 ++- .../menus/boardcomputerhardwaresettingsmenu.h | 30 ++-- src/displays/menus/buzzermenu.h | 24 ++- src/displays/menus/commanddebugmenu.h | 14 +- .../menus/controllerhardwaresettingsmenu.h | 18 +-- src/displays/menus/debugmenu.h | 48 +++--- src/displays/menus/defaultmodesettingsmenu.h | 30 ++-- src/displays/menus/demosmenu.h | 14 +- src/displays/menus/dynamicdebugmenu.h | 44 +++--- src/displays/menus/enablemenu.h | 14 +- src/displays/menus/feedbackdebugmenu.h | 16 +- src/displays/menus/gametrakmodesettingsmenu.h | 4 +- src/displays/menus/genericwifisettingsmenu.h | 16 +- src/displays/menus/graphsmenu.h | 38 +++-- src/displays/menus/invertmenu.h | 14 +- src/displays/menus/larsmmodesettingsmenu.h | 12 +- src/displays/menus/limitssettingsmenu.h | 18 +-- src/displays/menus/mainmenu.h | 30 ++-- src/displays/menus/modessettingsmenu.h | 12 +- src/displays/menus/mosfetsmenu.h | 4 +- src/displays/menus/motorfeedbackdebugmenu.h | 22 ++- src/displays/menus/motorstatedebugmenu.h | 24 ++- src/displays/menus/presetsmenu.h | 28 ++-- src/displays/menus/profilesmenu.h | 14 +- src/displays/menus/selectmodemenu.h | 12 +- src/displays/menus/settingsmenu.h | 28 ++-- src/displays/menus/stationwifisettingsmenu.h | 48 +++--- src/displays/menus/tempomatmodesettingsmenu.h | 8 +- src/displays/menus/timersmenu.h | 16 +- src/displays/menus/wifiscanmenu.h | 28 ++-- src/displays/menus/wifisettingsmenu.h | 18 +-- src/displays/updatedisplay.h | 2 +- src/icons/logo.h | 2 + src/main.cpp | 37 ++++- src/menudefinitioninterface.h | 19 --- src/menudisplay.h | 67 ++++++++- src/ota.h | 21 +-- src/screens.h | 2 +- 53 files changed, 773 insertions(+), 1065 deletions(-) delete mode 100644 src/containermenudefinition.h delete mode 100644 src/menudefinitioninterface.h diff --git a/platformio.ini b/platformio.ini index baf69d1..fc5fbd8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -8,6 +8,9 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html +[platformio] +inc_dir = src/espcpputils + [common_env_data] platform = espressif32 board = esp32dev @@ -96,7 +99,7 @@ platform = ${common_env_data.platform} board = ${common_env_data.board} framework = ${common_env_data.framework} platform_packages = ${common_env_data.platform_packages} -board_build.partitions = partitions_4M_noota.csv +board_build.partitions = partitions_4M_ota.csv lib_deps = ${common_env_data.lib_deps} ${webserver_common.lib_deps} @@ -130,7 +133,8 @@ build_flags = -DDEVICE_PREFIX=bobbyquad -DAP_PASSWORD=Passwort_123 ${webserver_common.build_flags} -; -DFEATURE_OTA + -DFEATURE_ARDUINOOTA +; -DFEATURE_WEBOTA -DFEATURE_DPAD_5WIRESW -DPINS_DPAD_5WIRESW_OUT=32 -DPINS_DPAD_5WIRESW_IN1=25 @@ -150,8 +154,8 @@ build_flags = -DDEFAULT_GASMAX=3700 -DDEFAULT_BREMSMIN=1300 -DDEFAULT_BREMSMAX=4000 - -DFEATURE_BLUETOOTH - -DFEATURE_BMS +; -DFEATURE_BLUETOOTH +; -DFEATURE_BMS ; -DFEATURE_GAMETRAK ; -DPINS_GAMETRAKX=34 ; -DPINS_GAMETRAKY=39 @@ -212,7 +216,7 @@ build_flags = -DDEVICE_PREFIX=bobbycar -DAP_PASSWORD=Passwort_123 ${webserver_common.build_flags} - -DFEATURE_OTA + -DFEATURE_ARDUINOOTA -DDEFAULT_GASMIN=400 -DDEFAULT_GASMAX=2000 -DDEFAULT_BREMSMIN=600 @@ -276,7 +280,7 @@ build_flags = -DDEVICE_PREFIX=bobbyquad -DAP_PASSWORD=Passwort_123 ${webserver_common.build_flags} - -DFEATURE_OTA + -DFEATURE_ARDUINOOTA -DFEATURE_DPAD -DPINS_DPAD_UP=32 -DPINS_DPAD_DOWN=22 @@ -310,7 +314,7 @@ build_flags = -DDEVICE_PREFIX=bobbyquad -DAP_PASSWORD=Passwort_123 ${webserver_common.build_flags} - -DFEATURE_OTA + -DFEATURE_ARDUINOOTA -DRPI_DISPLAY_TYPE -DR61581_DRIVER ; TODO: TFT_MISO (touch MISO?) @@ -359,7 +363,7 @@ build_flags = -DDEVICE_PREFIX=bobbycar -DAP_PASSWORD=Passwort_123 ${webserver_common.build_flags} - -DFEATURE_OTA + -DFEATURE_ARDUINOOTA -DDEFAULT_GASMIN=1000 -DDEFAULT_GASMAX=4000 -DDEFAULT_BREMSMIN=200 diff --git a/src/bobby_webserver.h b/src/bobby_webserver.h index e07e473..addbbac 100644 --- a/src/bobby_webserver.h +++ b/src/bobby_webserver.h @@ -8,11 +8,15 @@ #include "textinterface.h" #include "menudisplay.h" #include "changevaluedisplay.h" +#include "displays/updatedisplay.h" +//#include "esputils.h" namespace { #ifdef FEATURE_WEBSERVER AsyncWebServer webServer{80}; +bool shouldReboot; + class HtmlTag { public: HtmlTag(const char *tagName, AsyncResponseStream *response) : @@ -34,6 +38,8 @@ private: void initWebserver() { + shouldReboot = false; + DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*"); webServer.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ @@ -184,7 +190,7 @@ void initWebserver() return; } - if (index < 0 || index >= menuDisplay->size()) + if (index < 0 || index >= menuDisplay->menuItemCount()) { request->send(400, "text/plain", "index out of range"); return; @@ -235,11 +241,111 @@ void initWebserver() request->send(response); }); + +#ifdef FEATURE_WEBOTA + webServer.on("/update", HTTP_GET, [](AsyncWebServerRequest *request){ + request->send(200, "text/html", + "
" + "" + "" + "
" + "
" + "" + "" + "
"); + }); + + const auto handleUpdate = [](AsyncWebServerRequest *request){ + shouldReboot = !Update.hasError(); + + AsyncWebServerResponse *response = request->beginResponse(200, "text/plain", shouldReboot ? "OK" : "FAIL"); + response->addHeader("Connection", "close"); + request->send(response); + }; + + const auto createHandleUpdtateUpload = [](size_t size, int command){ + return [size, command](AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final){ + //ESP_UNUSED(request) + + Serial.printf("callback %u %u\r\n", index, len); + + if (!index) + { + Serial.printf("Update Start: %s\r\n", filename.c_str()); + //Update.runAsync(true); + if (!Update.begin(size, command)) + Update.printError(Serial); + + String type; + if (ArduinoOTA.getCommand() == U_FLASH) + type = "sketch"; + else if (ArduinoOTA.getCommand() == U_SPIFFS) // U_SPIFFS + type = "filesystem"; + else + type = "unknown"; + + switchScreenImpl("Updating " + type); + } + + if (!Update.hasError()) + { + if (Update.write(data, len) == len) + { + ((UpdateDisplay*)currentDisplay.get())->m_progress = index; + ((UpdateDisplay*)currentDisplay.get())->m_total = size; + ((UpdateDisplay*)currentDisplay.get())->redraw(); + } + else + { + Update.printError(Serial); + + ((UpdateDisplay*)currentDisplay.get())->m_error = {}; + ((UpdateDisplay*)currentDisplay.get())->m_errorValid = true; + ((UpdateDisplay*)currentDisplay.get())->redraw(); + } + } + else + { + ((UpdateDisplay*)currentDisplay.get())->m_error = {}; + ((UpdateDisplay*)currentDisplay.get())->m_errorValid = true; + ((UpdateDisplay*)currentDisplay.get())->redraw(); + } + + if (final) + { + if (Update.end(true)) + { + Serial.printf("Update Success: %uB\r\n", index + len); + + ((UpdateDisplay*)currentDisplay.get())->m_finished = true; + ((UpdateDisplay*)currentDisplay.get())->redraw(); + } + else + { + Update.printError(Serial); + + ((UpdateDisplay*)currentDisplay.get())->m_error = {}; + ((UpdateDisplay*)currentDisplay.get())->m_errorValid = true; + ((UpdateDisplay*)currentDisplay.get())->redraw(); + } + } + }; + }; + + webServer.on("/updateCode", HTTP_POST, handleUpdate, createHandleUpdtateUpload((ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000, U_FLASH)); + webServer.on("/updateData", HTTP_POST, handleUpdate, createHandleUpdtateUpload(UPDATE_SIZE_UNKNOWN, U_SPIFFS)); +#endif + webServer.begin(); } void handleWebserver() { + if (shouldReboot) + { + shouldReboot = false; + ESP.restart(); + } } #endif } diff --git a/src/changevaluedisplay_bluetoothmode.h b/src/changevaluedisplay_bluetoothmode.h index b6220f7..ac27a31 100644 --- a/src/changevaluedisplay_bluetoothmode.h +++ b/src/changevaluedisplay_bluetoothmode.h @@ -22,66 +22,30 @@ class ChangeValueDisplay : using Base = MenuDisplay; public: + ChangeValueDisplay(); + void start() override; - - std::size_t size() const override { return 4; } - - MenuItem& getMenuItem(std::size_t index) override - { - switch (index) - { - case 0: return m_offAction; - case 1: return m_masterAction; - case 2: return m_slaveAction; - case 3: return m_backItem; - } - - throw "aua"; - } - const MenuItem& getMenuItem(std::size_t index) const override - { - switch (index) - { - case 0: return m_offAction; - case 1: return m_masterAction; - case 2: return m_slaveAction; - case 3: return m_backItem; - } - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(m_offAction); - callback(m_masterAction); - callback(m_slaveAction); - callback(m_backItem); - } - void runForEveryMenuItem(std::function &&callback) const override - { - callback(m_offAction); - callback(m_masterAction); - callback(m_slaveAction); - callback(m_backItem); - } - -private: - makeComponentArgs, StaticText> m_offAction{BluetoothMode::Off, *this, *this}; - makeComponentArgs, StaticText> m_masterAction{BluetoothMode::Master, *this, *this}; - makeComponentArgs, StaticText> m_slaveAction{BluetoothMode::Slave, *this, *this}; - makeComponentArgs, StaticMenuItemIcon<&icons::back>> m_backItem{*this}; }; +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(BluetoothMode::Off, *this, *this); + constructMenuItem, StaticText>>(BluetoothMode::Master, *this, *this); + constructMenuItem, StaticText>>(BluetoothMode::Slave, *this, *this); + constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); +} + void ChangeValueDisplay::start() { Base::start(); - if (getValue() == m_offAction.value()) setSelectedIndex(0); else - if (getValue() == m_masterAction.value()) setSelectedIndex(1); else - if (getValue() == m_slaveAction.value()) setSelectedIndex(2); else + switch (const auto value = getValue()) { - Serial.printf("Unknown BluetoothMode: %i", int(getValue())); + case BluetoothMode::Off: setSelectedIndex(0); break; + case BluetoothMode::Master: setSelectedIndex(1); break; + case BluetoothMode::Slave: setSelectedIndex(2); break; + default: + Serial.printf("Unknown BluetoothMode: %i\r\n", int(value)); setSelectedIndex(4); } } diff --git a/src/changevaluedisplay_bool.h b/src/changevaluedisplay_bool.h index cdcc6f0..d7196e7 100644 --- a/src/changevaluedisplay_bool.h +++ b/src/changevaluedisplay_bool.h @@ -19,57 +19,26 @@ class ChangeValueDisplay : using Base = MenuDisplay; public: + ChangeValueDisplay(); + void start() override; - - std::size_t size() const override { return 4; } - - MenuItem& getMenuItem(std::size_t index) override - { - switch (index) - { - case 0: return m_trueItem; - case 1: return m_falseItem; - case 2: return m_backItem; - } - - throw "aua"; - } - const MenuItem& getMenuItem(std::size_t index) const override - { - switch (index) - { - case 0: return m_trueItem; - case 1: return m_falseItem; - case 2: return m_backItem; - } - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(m_trueItem); - callback(m_falseItem); - callback(m_backItem); - } - void runForEveryMenuItem(std::function &&callback) const override - { - callback(m_trueItem); - callback(m_falseItem); - callback(m_backItem); - } - -private: - makeComponentArgs, StaticText> m_trueItem{true, *this, *this}; - makeComponentArgs, StaticText> m_falseItem{false, *this, *this}; - makeComponentArgs, StaticMenuItemIcon<&icons::back>> m_backItem{*this}; }; +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(true, *this, *this); + constructMenuItem, StaticText>>(false, *this, *this); + constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); +} + void ChangeValueDisplay::start() { Base::start(); - if (getValue() == m_trueItem.value()) setSelectedIndex(0); else - if (getValue() == m_falseItem.value()) setSelectedIndex(1); + switch (getValue()) + { + case true: setSelectedIndex(0); break; + case false: setSelectedIndex(1); break; + } } } diff --git a/src/changevaluedisplay_controlmode.h b/src/changevaluedisplay_controlmode.h index 67462d5..6176fdc 100644 --- a/src/changevaluedisplay_controlmode.h +++ b/src/changevaluedisplay_controlmode.h @@ -18,72 +18,32 @@ class ChangeValueDisplay : using Base = MenuDisplay; public: + ChangeValueDisplay(); + void start() override; - - std::size_t size() const override { return 5; } - - MenuItem& getMenuItem(std::size_t index) override - { - switch (index) - { - case 0: return m_openModeItem; - case 1: return m_voltageItem; - case 2: return m_speedItem; - case 3: return m_torqueItem; - case 4: return m_backItem; - } - - throw "aua"; - } - const MenuItem& getMenuItem(std::size_t index) const override - { - switch (index) - { - case 0: return m_openModeItem; - case 1: return m_voltageItem; - case 2: return m_speedItem; - case 3: return m_torqueItem; - case 4: return m_backItem; - } - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(m_openModeItem); - callback(m_voltageItem); - callback(m_speedItem); - callback(m_torqueItem); - callback(m_backItem); - } - void runForEveryMenuItem(std::function &&callback) const override - { - callback(m_openModeItem); - callback(m_voltageItem); - callback(m_speedItem); - callback(m_torqueItem); - callback(m_backItem); - } - -private: - makeComponentArgs, StaticText> m_openModeItem{ControlMode::OpenMode, *this, *this}; - makeComponentArgs, StaticText> m_voltageItem{ControlMode::Voltage, *this, *this}; - makeComponentArgs, StaticText> m_speedItem{ControlMode::Speed, *this, *this}; - makeComponentArgs, StaticText> m_torqueItem{ControlMode::Torque, *this, *this}; - makeComponentArgs, StaticMenuItemIcon<&icons::back>> m_backItem; }; +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(ControlMode::OpenMode, *this, *this); + constructMenuItem, StaticText>>(ControlMode::Voltage, *this, *this); + constructMenuItem, StaticText>>(ControlMode::Speed, *this, *this); + constructMenuItem, StaticText>>(ControlMode::Torque, *this, *this); + constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); +} + void ChangeValueDisplay::start() { Base::start(); - if (getValue() == m_openModeItem.value()) setSelectedIndex(0); else - if (getValue() == m_voltageItem.value()) setSelectedIndex(1); else - if (getValue() == m_speedItem.value()) setSelectedIndex(2); else - if (getValue() == m_torqueItem.value()) setSelectedIndex(3); else + switch (const auto value = getValue()) { - Serial.printf("Unknown ControlMode: %i", int(getValue())); + case ControlMode::OpenMode: setSelectedIndex(0); break; + case ControlMode::Voltage: setSelectedIndex(1); break; + case ControlMode::Speed: setSelectedIndex(2); break; + case ControlMode::Torque: setSelectedIndex(3); break; + default: + Serial.printf("Unknown ControlMode: %i\r\n", int(value)); setSelectedIndex(4); } } diff --git a/src/changevaluedisplay_controltype.h b/src/changevaluedisplay_controltype.h index 57c18f2..2ff213a 100644 --- a/src/changevaluedisplay_controltype.h +++ b/src/changevaluedisplay_controltype.h @@ -18,66 +18,30 @@ class ChangeValueDisplay : using Base = MenuDisplay; public: + ChangeValueDisplay(); + void start() override; - - std::size_t size() const override { return 4; } - - MenuItem& getMenuItem(std::size_t index) override - { - switch (index) - { - case 0: return m_commutationItem; - case 1: return m_sinusoidalItem; - case 2: return m_fieldOrientedControlItem; - case 3: return m_backItem; - } - - throw "aua"; - } - const MenuItem& getMenuItem(std::size_t index) const override - { - switch (index) - { - case 0: return m_commutationItem; - case 1: return m_sinusoidalItem; - case 2: return m_fieldOrientedControlItem; - case 3: return m_backItem; - } - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(m_commutationItem); - callback(m_sinusoidalItem); - callback(m_fieldOrientedControlItem); - callback(m_backItem); - } - void runForEveryMenuItem(std::function &&callback) const override - { - callback(m_commutationItem); - callback(m_sinusoidalItem); - callback(m_fieldOrientedControlItem); - callback(m_backItem); - } - -private: - makeComponentArgs, StaticText> m_commutationItem{ControlType::Commutation, *this, *this}; - makeComponentArgs, StaticText> m_sinusoidalItem{ControlType::Sinusoidal, *this, *this}; - makeComponentArgs, StaticText> m_fieldOrientedControlItem{ControlType::FieldOrientedControl, *this, *this}; - makeComponentArgs, StaticMenuItemIcon<&icons::back>> m_backItem{*this}; }; +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(ControlType::Commutation, *this, *this); + constructMenuItem, StaticText>>(ControlType::Sinusoidal, *this, *this); + constructMenuItem, StaticText>>(ControlType::FieldOrientedControl, *this, *this); + constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); +} + void ChangeValueDisplay::start() { Base::start(); - if (getValue() == m_commutationItem.value()) setSelectedIndex(0); else - if (getValue() == m_sinusoidalItem.value()) setSelectedIndex(1); else - if (getValue() == m_fieldOrientedControlItem.value()) setSelectedIndex(2); else + switch (const auto value = getValue()) { - Serial.printf("Unknown ControlType: %i", int(getValue())); + case ControlType::Commutation: setSelectedIndex(0); break; + case ControlType::Sinusoidal: setSelectedIndex(1); break; + case ControlType::FieldOrientedControl: setSelectedIndex(2); break; + default: + Serial.printf("Unknown ControlType: %i\r\n", int(value)); setSelectedIndex(3); } } diff --git a/src/changevaluedisplay_larsmmode_mode.h b/src/changevaluedisplay_larsmmode_mode.h index 9148497..8a0dfd8 100644 --- a/src/changevaluedisplay_larsmmode_mode.h +++ b/src/changevaluedisplay_larsmmode_mode.h @@ -19,72 +19,32 @@ class ChangeValueDisplay : using Base = MenuDisplay; public: + ChangeValueDisplay(); + void start() override; - - std::size_t size() const override { return 5; } - - MenuItem& getMenuItem(std::size_t index) override - { - switch (index) - { - case 0: return m_larsmMode1Item; - case 1: return m_larsmMode2Item; - case 2: return m_larsmMode3Item; - case 3: return m_larsmMode4Item; - case 4: return m_backItem; - } - - throw "aua"; - } - const MenuItem& getMenuItem(std::size_t index) const override - { - switch (index) - { - case 0: return m_larsmMode1Item; - case 1: return m_larsmMode2Item; - case 2: return m_larsmMode3Item; - case 3: return m_larsmMode4Item; - case 4: return m_backItem; - } - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(m_larsmMode1Item); - callback(m_larsmMode2Item); - callback(m_larsmMode3Item); - callback(m_larsmMode4Item); - callback(m_backItem); - } - void runForEveryMenuItem(std::function &&callback) const override - { - callback(m_larsmMode1Item); - callback(m_larsmMode2Item); - callback(m_larsmMode3Item); - callback(m_larsmMode4Item); - callback(m_backItem); - } - -private: - makeComponentArgs, StaticText> m_larsmMode1Item{LarsmModeMode::Mode1, *this, *this}; - makeComponentArgs, StaticText> m_larsmMode2Item{LarsmModeMode::Mode2, *this, *this}; - makeComponentArgs, StaticText> m_larsmMode3Item{LarsmModeMode::Mode3, *this, *this}; - makeComponentArgs, StaticText> m_larsmMode4Item{LarsmModeMode::Mode4, *this, *this}; - makeComponentArgs, StaticMenuItemIcon<&icons::back>> m_backItem{*this}; }; +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(LarsmModeMode::Mode1, *this, *this); + constructMenuItem, StaticText>>(LarsmModeMode::Mode2, *this, *this); + constructMenuItem, StaticText>>(LarsmModeMode::Mode3, *this, *this); + constructMenuItem, StaticText>>(LarsmModeMode::Mode4, *this, *this); + constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); +} + void ChangeValueDisplay::start() { Base::start(); - if (getValue() == m_larsmMode1Item.value()) setSelectedIndex(0); else - if (getValue() == m_larsmMode2Item.value()) setSelectedIndex(1); else - if (getValue() == m_larsmMode3Item.value()) setSelectedIndex(2); else - if (getValue() == m_larsmMode4Item.value()) setSelectedIndex(3); else + switch (const auto value = getValue()) { - Serial.printf("Unknown LarsmModeMode: %i", int(getValue())); + case LarsmModeMode::Mode1: setSelectedIndex(0); break; + case LarsmModeMode::Mode2: setSelectedIndex(1); break; + case LarsmModeMode::Mode3: setSelectedIndex(2); break; + case LarsmModeMode::Mode4: setSelectedIndex(3); break; + default: + Serial.printf("Unknown LarsmModeMode: %i\r\n", int(value)); setSelectedIndex(4); } } diff --git a/src/changevaluedisplay_unifiedmodelmode.h b/src/changevaluedisplay_unifiedmodelmode.h index 9403b41..af82f50 100644 --- a/src/changevaluedisplay_unifiedmodelmode.h +++ b/src/changevaluedisplay_unifiedmodelmode.h @@ -19,78 +19,34 @@ class ChangeValueDisplay : using Base = MenuDisplay; public: + ChangeValueDisplay(); + void start() override; - - std::size_t size() const override { return 6; } - - MenuItem& getMenuItem(std::size_t index) override - { - switch (index) - { - case 0: return m_commutationItem; - case 1: return m_sinusoidalItem; - case 2: return m_focVoltageItem; - case 3: return m_focSpeedItem; - case 4: return m_focTorqueItem; - case 5: return m_backItem; - } - - throw "aua"; - } - const MenuItem& getMenuItem(std::size_t index) const override - { - switch (index) - { - case 0: return m_commutationItem; - case 1: return m_sinusoidalItem; - case 2: return m_focVoltageItem; - case 3: return m_focSpeedItem; - case 4: return m_focTorqueItem; - case 5: return m_backItem; - } - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(m_commutationItem); - callback(m_sinusoidalItem); - callback(m_focVoltageItem); - callback(m_focSpeedItem); - callback(m_focTorqueItem); - callback(m_backItem); - } - void runForEveryMenuItem(std::function &&callback) const override - { - callback(m_commutationItem); - callback(m_sinusoidalItem); - callback(m_focVoltageItem); - callback(m_focSpeedItem); - callback(m_focTorqueItem); - callback(m_backItem); - } - -private: - makeComponentArgs, StaticText> m_commutationItem{UnifiedModelMode::Commutation, *this, *this}; - makeComponentArgs, StaticText> m_sinusoidalItem{UnifiedModelMode::Sinusoidal, *this, *this}; - makeComponentArgs, StaticText> m_focVoltageItem{UnifiedModelMode::FocVoltage, *this, *this}; - makeComponentArgs, StaticText> m_focSpeedItem{UnifiedModelMode::FocSpeed, *this, *this}; - makeComponentArgs, StaticText> m_focTorqueItem{UnifiedModelMode::FocTorque, *this, *this}; - makeComponentArgs, StaticMenuItemIcon<&icons::back>> m_backItem{*this}; }; +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(UnifiedModelMode::Commutation, *this, *this); + constructMenuItem, StaticText>>(UnifiedModelMode::Sinusoidal, *this, *this); + constructMenuItem, StaticText>>(UnifiedModelMode::FocVoltage, *this, *this); + constructMenuItem, StaticText>>(UnifiedModelMode::FocSpeed, *this, *this); + constructMenuItem, StaticText>>(UnifiedModelMode::FocTorque, *this, *this); + constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); +} + void ChangeValueDisplay::start() { Base::start(); - if (getValue() == m_commutationItem.value()) setSelectedIndex(0); else - if (getValue() == m_sinusoidalItem.value()) setSelectedIndex(1); else - if (getValue() == m_focVoltageItem.value()) setSelectedIndex(2); else - if (getValue() == m_focSpeedItem.value()) setSelectedIndex(3); else - if (getValue() == m_focTorqueItem.value()) setSelectedIndex(4); else + switch (const auto value = getValue()) { - Serial.printf("Unknown UnifiedModelMode: %i", int(getValue())); + case UnifiedModelMode::Commutation: setSelectedIndex(0); break; + case UnifiedModelMode::Sinusoidal: setSelectedIndex(1); break; + case UnifiedModelMode::FocVoltage: setSelectedIndex(2); break; + case UnifiedModelMode::FocSpeed: setSelectedIndex(3); break; + case UnifiedModelMode::FocTorque: setSelectedIndex(4); break; + default: + Serial.printf("Unknown UnifiedModelMode: %i\r\n", int(value)); setSelectedIndex(5); } } diff --git a/src/changevaluedisplay_wifi_mode_t.h b/src/changevaluedisplay_wifi_mode_t.h index 6d669c6..4d396d6 100644 --- a/src/changevaluedisplay_wifi_mode_t.h +++ b/src/changevaluedisplay_wifi_mode_t.h @@ -20,72 +20,32 @@ class ChangeValueDisplay : using Base = MenuDisplay; public: + ChangeValueDisplay(); + void start() override; - - std::size_t size() const override { return 5; } - - MenuItem& getMenuItem(std::size_t index) override - { - switch (index) - { - case 0: return m_nullItem; - case 1: return m_staItem; - case 2: return m_apItem; - case 3: return m_apStaItem; - case 4: return m_backItem; - } - - throw "aua"; - } - const MenuItem& getMenuItem(std::size_t index) const override - { - switch (index) - { - case 0: return m_nullItem; - case 1: return m_staItem; - case 2: return m_apItem; - case 3: return m_apStaItem; - case 4: return m_backItem; - } - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(m_nullItem); - callback(m_staItem); - callback(m_apItem); - callback(m_apStaItem); - callback(m_backItem); - } - void runForEveryMenuItem(std::function &&callback) const override - { - callback(m_nullItem); - callback(m_staItem); - callback(m_apItem); - callback(m_apStaItem); - callback(m_backItem); - } - -private: - makeComponentArgs, StaticText> m_nullItem{WIFI_MODE_NULL, *this, *this}; - makeComponentArgs, StaticText> m_staItem{WIFI_MODE_STA, *this, *this}; - makeComponentArgs, StaticText> m_apItem{WIFI_MODE_AP, *this, *this}; - makeComponentArgs, StaticText> m_apStaItem{WIFI_MODE_APSTA, *this, *this}; - makeComponentArgs, StaticMenuItemIcon<&icons::back>> m_backItem{*this}; }; +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(WIFI_MODE_NULL, *this, *this); + constructMenuItem, StaticText>>(WIFI_MODE_STA, *this, *this); + constructMenuItem, StaticText>>(WIFI_MODE_AP, *this, *this); + constructMenuItem, StaticText>>(WIFI_MODE_APSTA, *this, *this); + constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); +} + void ChangeValueDisplay::start() { Base::start(); - if (getValue() == m_nullItem.value()) setSelectedIndex(0); else - if (getValue() == m_staItem.value()) setSelectedIndex(1); else - if (getValue() == m_apItem.value()) setSelectedIndex(2); else - if (getValue() == m_apStaItem.value()) setSelectedIndex(3); else + switch (const auto value = getValue()) { - Serial.printf("Unknown wifi_mode_t: %i", int(getValue())); + case WIFI_MODE_NULL: setSelectedIndex(0); break; + case WIFI_MODE_STA: setSelectedIndex(1); break; + case WIFI_MODE_AP: setSelectedIndex(2); break; + case WIFI_MODE_APSTA: setSelectedIndex(3); break; + default: + Serial.printf("Unknown wifi_mode_t: %i\r\n", int(value)); setSelectedIndex(4); } } diff --git a/src/changevaluedisplay_wifi_power_t.h b/src/changevaluedisplay_wifi_power_t.h index 0b4c96a..fa11ff9 100644 --- a/src/changevaluedisplay_wifi_power_t.h +++ b/src/changevaluedisplay_wifi_power_t.h @@ -20,120 +20,48 @@ class ChangeValueDisplay : using Base = MenuDisplay; public: + ChangeValueDisplay(); + void start() override; - - std::size_t size() const override { return 13; } - - MenuItem& getMenuItem(std::size_t index) override - { - switch (index) - { - case 0: return m_19_5dBmItem; - case 1: return m_19dBmItem; - case 2: return m_18_5dBmItem; - case 3: return m_17dBmItem; - case 4: return m_15dBmItem; - case 5: return m_13dBmItem; - case 6: return m_11dBmItem; - case 7: return m_8_5dBmItem; - case 8: return m_7dBmItem; - case 9: return m_5dBmItem; - case 10: return m_2dBmItem; - case 11: return m_MINUS_1dBmItem; - case 12: return m_backItem; - } - - throw "aua"; - } - const MenuItem& getMenuItem(std::size_t index) const override - { - switch (index) - { - case 0: return m_19_5dBmItem; - case 1: return m_19dBmItem; - case 2: return m_18_5dBmItem; - case 3: return m_17dBmItem; - case 4: return m_15dBmItem; - case 5: return m_13dBmItem; - case 6: return m_11dBmItem; - case 7: return m_8_5dBmItem; - case 8: return m_7dBmItem; - case 9: return m_5dBmItem; - case 10: return m_2dBmItem; - case 11: return m_MINUS_1dBmItem; - case 12: return m_backItem; - } - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(m_19_5dBmItem); - callback(m_19dBmItem); - callback(m_18_5dBmItem); - callback(m_17dBmItem); - callback(m_15dBmItem); - callback(m_13dBmItem); - callback(m_11dBmItem); - callback(m_8_5dBmItem); - callback(m_7dBmItem); - callback(m_5dBmItem); - callback(m_2dBmItem); - callback(m_MINUS_1dBmItem); - callback(m_backItem); - } - void runForEveryMenuItem(std::function &&callback) const override - { - callback(m_19_5dBmItem); - callback(m_19dBmItem); - callback(m_18_5dBmItem); - callback(m_17dBmItem); - callback(m_15dBmItem); - callback(m_13dBmItem); - callback(m_11dBmItem); - callback(m_8_5dBmItem); - callback(m_7dBmItem); - callback(m_5dBmItem); - callback(m_2dBmItem); - callback(m_MINUS_1dBmItem); - callback(m_backItem); - } - -private: - makeComponentArgs, StaticText> m_19_5dBmItem{WIFI_POWER_19_5dBm, *this, *this}; - makeComponentArgs, StaticText> m_19dBmItem{WIFI_POWER_19dBm, *this, *this}; - makeComponentArgs, StaticText> m_18_5dBmItem{WIFI_POWER_18_5dBm, *this, *this}; - makeComponentArgs, StaticText> m_17dBmItem{WIFI_POWER_17dBm, *this, *this}; - makeComponentArgs, StaticText> m_15dBmItem{WIFI_POWER_15dBm, *this, *this}; - makeComponentArgs, StaticText> m_13dBmItem{WIFI_POWER_13dBm, *this, *this}; - makeComponentArgs, StaticText> m_11dBmItem{WIFI_POWER_11dBm, *this, *this}; - makeComponentArgs, StaticText> m_8_5dBmItem{WIFI_POWER_8_5dBm, *this, *this}; - makeComponentArgs, StaticText> m_7dBmItem{WIFI_POWER_7dBm, *this, *this}; - makeComponentArgs, StaticText> m_5dBmItem{WIFI_POWER_5dBm, *this, *this}; - makeComponentArgs, StaticText> m_2dBmItem{WIFI_POWER_2dBm, *this, *this}; - makeComponentArgs, StaticText> m_MINUS_1dBmItem{WIFI_POWER_MINUS_1dBm, *this, *this}; - makeComponentArgs, StaticMenuItemIcon<&icons::back>> m_backItem{*this}; }; +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(WIFI_POWER_19_5dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_19dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_18_5dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_17dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_15dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_13dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_11dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_8_5dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_7dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_5dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_2dBm, *this, *this); + constructMenuItem, StaticText>>(WIFI_POWER_MINUS_1dBm, *this, *this); + constructMenuItem, StaticMenuItemIcon<&icons::back>>>(*this); +} + void ChangeValueDisplay::start() { Base::start(); - if (getValue() == m_19_5dBmItem.value()) setSelectedIndex(0); else - if (getValue() == m_19dBmItem.value()) setSelectedIndex(1); else - if (getValue() == m_18_5dBmItem.value()) setSelectedIndex(2); else - if (getValue() == m_17dBmItem.value()) setSelectedIndex(3); else - if (getValue() == m_15dBmItem.value()) setSelectedIndex(4); else - if (getValue() == m_13dBmItem.value()) setSelectedIndex(5); else - if (getValue() == m_11dBmItem.value()) setSelectedIndex(6); else - if (getValue() == m_8_5dBmItem.value()) setSelectedIndex(7); else - if (getValue() == m_7dBmItem.value()) setSelectedIndex(8); else - if (getValue() == m_5dBmItem.value()) setSelectedIndex(9); else - if (getValue() == m_2dBmItem.value()) setSelectedIndex(10); else - if (getValue() == m_MINUS_1dBmItem.value()) setSelectedIndex(11); else + switch (const auto value = getValue()) { - Serial.printf("Unknown wifi_power_t: %i", int(getValue())); + case WIFI_POWER_19_5dBm: setSelectedIndex(0); break; + case WIFI_POWER_19dBm: setSelectedIndex(1); break; + case WIFI_POWER_18_5dBm: setSelectedIndex(2); break; + case WIFI_POWER_17dBm: setSelectedIndex(3); break; + case WIFI_POWER_15dBm: setSelectedIndex(4); break; + case WIFI_POWER_13dBm: setSelectedIndex(5); break; + case WIFI_POWER_11dBm: setSelectedIndex(6); break; + case WIFI_POWER_8_5dBm: setSelectedIndex(7); break; + case WIFI_POWER_7dBm: setSelectedIndex(8); break; + case WIFI_POWER_5dBm: setSelectedIndex(9); break; + case WIFI_POWER_2dBm: setSelectedIndex(10); break; + case WIFI_POWER_MINUS_1dBm: setSelectedIndex(11); break; + default: + Serial.printf("Unknown wifi_power_t: %i\r\n", int(value)); setSelectedIndex(12); } } diff --git a/src/containermenudefinition.h b/src/containermenudefinition.h deleted file mode 100644 index 1d1562c..0000000 --- a/src/containermenudefinition.h +++ /dev/null @@ -1,76 +0,0 @@ -#pragma once - -// system includes -#include -#include - -// local includes -#include "menudefinitioninterface.h" - -namespace { -class ContainerMenuDefinition : public virtual MenuDefinitionInterface -{ -public: - std::size_t size() const override { return m_items.size(); } - - MenuItem& getMenuItem(std::size_t index) override - { - if (index < m_items.size()) - return *m_items[index].get(); - - throw "aua"; - } - - const MenuItem& getMenuItem(std::size_t index) const override - { - if (index < m_items.size()) - return *m_items[index].get(); - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - for (const auto &ptr : m_items) - callback(*ptr); - } - - void runForEveryMenuItem(std::function &&callback) const override - { - for (const auto &ptr : m_items) - callback(*ptr); - } - - template - T &constructItem(Args&&... args) - { - auto ptr = std::make_unique(std::forward(args)...); - T &ref = *ptr; - emplaceItem(std::move(ptr)); - return ref; - } - - void emplaceItem(std::unique_ptr &&ptr) - { - m_items.emplace_back(std::move(ptr)); - } - - void clearItems() - { - m_items.clear(); - } - - std::unique_ptr takeLast() - { - if (m_items.empty()) - throw "aua"; - - std::unique_ptr ptr = std::move(m_items.back()); - m_items.pop_back(); - return ptr; - } - -private: - std::vector> m_items; -}; -} // namespace diff --git a/src/displays/gameoflifedisplay.h b/src/displays/gameoflifedisplay.h index 6be42b3..ea37694 100644 --- a/src/displays/gameoflifedisplay.h +++ b/src/displays/gameoflifedisplay.h @@ -46,34 +46,37 @@ private: static const constexpr auto GEN_DELAY = 0; - template auto index(T x, T y) + int index(int x, int y) { if (x >= GRIDX) { - Serial.printf("x: %i", x); + Serial.printf("x: %i\r\n", x); return 0; } if (y >= GRIDY) { - Serial.printf("y: %i", x); + Serial.printf("y: %i\r\n", x); return 0; } - return (x * GRIDX) + y; + const auto result = (x * GRIDY) + y; + if (result >= GRIDX*GRIDY) + { + Serial.printf("x:%i y:%i x*y:%i\r\n", x, y, result); + return 0; + } + return result; } - struct Data - { - std::bitset grid, newgrid; - }; - - std::unique_ptr m_data; + std::unique_ptr> m_grid; + std::unique_ptr> m_newgrid; int gen = 0; }; void GameOfLifeDisplay::start() { - m_data = std::make_unique(); + m_grid = std::make_unique>(); + m_newgrid = std::make_unique>(); } void GameOfLifeDisplay::initScreen() @@ -93,21 +96,17 @@ void GameOfLifeDisplay::redraw() computeCA(); drawGrid(); - m_data->grid = m_data->newgrid; -// for (int16_t x = 1; x < GRIDX-1; x++) { -// for (int16_t y = 1; y < GRIDY-1; y++) { -// grid[index(x,y)] = m_data->newgrid[index(x,y)]; -// } -// } + *m_grid = *m_newgrid; - if (++gen == 200) + if (++gen == 500) gen = 0; } void GameOfLifeDisplay::stop() { tft.setRotation(0); - m_data = nullptr; + m_grid = nullptr; + m_newgrid = nullptr; } void GameOfLifeDisplay::drawGrid() @@ -115,8 +114,8 @@ void GameOfLifeDisplay::drawGrid() uint16_t color = TFT_WHITE; for (int16_t x = 1; x < GRIDX - 1; x++) { for (int16_t y = 1; y < GRIDY - 1; y++) { - if ((m_data->grid[index(x,y)]) != (m_data->newgrid[index(x,y)])) { - if (m_data->newgrid[index(x,y)] == 1) + if (((*m_grid)[index(x,y)]) != ((*m_newgrid)[index(x,y)])) { + if ((*m_newgrid)[index(x,y)] == 1) color = 0xFFFF; //random(0xFFFF); else color = 0; @@ -130,16 +129,16 @@ void GameOfLifeDisplay::initGrid() { for (int16_t x = 0; x < GRIDX; x++) { for (int16_t y = 0; y < GRIDY; y++) { - m_data->newgrid[index(x,y)] = 0; + (*m_newgrid)[index(x,y)] = 0; if (x == 0 || x == GRIDX - 1 || y == 0 || y == GRIDY - 1) - m_data->grid[index(x,y)] = 0; + (*m_grid)[index(x,y)] = 0; else { if (random(3) == 1) - m_data->grid[index(x,y)] = 1; + (*m_grid)[index(x,y)] = 1; else - m_data->grid[index(x,y)] = 0; + (*m_grid)[index(x,y)] = 0; } } @@ -160,7 +159,7 @@ int GameOfLifeDisplay::getNumberOfNeighbors(int x, int y) if (new_x >= 0 && new_y >= 0 && new_x < GRIDX && new_y < GRIDY) - n += m_data->grid[index(new_x, new_y)]; + n += (*m_grid)[index(new_x, new_y)]; } return n; @@ -171,14 +170,14 @@ void GameOfLifeDisplay::computeCA() for (int16_t x = 1; x < GRIDX; x++) { for (int16_t y = 1; y < GRIDY; y++) { int neighbors = getNumberOfNeighbors(x, y); - if (m_data->grid[index(x,y)] == true && (neighbors == 2 || neighbors == 3 )) - m_data->newgrid[index(x,y)] = true; - else if (m_data->grid[index(x,y)] == 1) - m_data->newgrid[index(x,y)] = false; - if (m_data->grid[index(x,y)] == false && (neighbors == 3)) - m_data->newgrid[index(x,y)] = true; - else if (m_data->grid[index(x,y)] == 0) - m_data->newgrid[index(x,y)] = false; + if ((*m_grid)[index(x,y)] == true && (neighbors == 2 || neighbors == 3 )) + (*m_newgrid)[index(x,y)] = true; + else if ((*m_grid)[index(x,y)] == 1) + (*m_newgrid)[index(x,y)] = false; + if ((*m_grid)[index(x,y)] == false && (neighbors == 3)) + (*m_newgrid)[index(x,y)] = true; + else if ((*m_grid)[index(x,y)] == 0) + (*m_newgrid)[index(x,y)] = false; } } } diff --git a/src/displays/menus/aboutmenu.h b/src/displays/menus/aboutmenu.h index 99c0015..b49f4b9 100644 --- a/src/displays/menus/aboutmenu.h +++ b/src/displays/menus/aboutmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" @@ -22,34 +21,33 @@ constexpr char TEXT_ESPINFO[] = "ESP info:"; class AboutMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: AboutMenu() { - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/accesspointwifisettingsmenu.h b/src/displays/menus/accesspointwifisettingsmenu.h index 1370289..eda736e 100644 --- a/src/displays/menus/accesspointwifisettingsmenu.h +++ b/src/displays/menus/accesspointwifisettingsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "menuitem.h" #include "actions/dummyaction.h" #include "actions/wifisoftapaction.h" @@ -23,25 +22,24 @@ namespace { class AccessPointWifiSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: AccessPointWifiSettingsMenu() { - constructItem, WifiSoftApAction>>(); - constructItem, WifiSoftApDisconnectAction>>(); - constructItem, WifiSoftApDisconnectWifioffAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, WifiSoftApEnableIpV6Action>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, WifiSoftApAction>>(); + constructMenuItem, WifiSoftApDisconnectAction>>(); + constructMenuItem, WifiSoftApDisconnectWifioffAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, WifiSoftApEnableIpV6Action>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/bluetoothsettingsmenu.h b/src/displays/menus/bluetoothsettingsmenu.h index 9da0852..f1c2b79 100644 --- a/src/displays/menus/bluetoothsettingsmenu.h +++ b/src/displays/menus/bluetoothsettingsmenu.h @@ -3,7 +3,6 @@ // local includes #include "changevaluedisplay.h" #include "menudisplay.h" -#include "containermenudefinition.h" #include "menuitem.h" #include "actions/dummyaction.h" #ifdef FEATURE_BLUETOOTH @@ -39,24 +38,23 @@ using AutoBluetoothModeChangeDisplay = makeComponent< class BluetoothSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: BluetoothSettingsMenu() { - constructItem>(); - constructItem>(); + constructMenuItem>(); + constructMenuItem>(); // constructItem>(); // crashes - constructItem>(); - constructItem>(); - constructItem, BluetoothBeginAction>>(); - constructItem, BluetoothBeginMasterAction>>(); - constructItem, BluetoothFlushAction>>(); - constructItem, BluetoothEndAction>>(); - constructItem, BluetoothDisconnectAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem, BluetoothBeginAction>>(); + constructMenuItem, BluetoothBeginMasterAction>>(); + constructMenuItem, BluetoothFlushAction>>(); + constructMenuItem, BluetoothEndAction>>(); + constructMenuItem, BluetoothDisconnectAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; #endif diff --git a/src/displays/menus/bmsmenu.h b/src/displays/menus/bmsmenu.h index 237854d..3226308 100644 --- a/src/displays/menus/bmsmenu.h +++ b/src/displays/menus/bmsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #ifdef FEATURE_BLUETOOTH @@ -29,20 +28,19 @@ namespace { class BmsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: BmsMenu() { - constructItem, BluetoothConnectBmsAction>>(); - constructItem, BluetoothDisconnectAction>>(); - constructItem>(); - constructItem, BmsTurnOnChargeAction>>(); - constructItem, BmsTurnOffChargeAction>>(); - constructItem, BmsTurnOnDischargeAction>>(); - constructItem, BmsTurnOffDischargeAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, BluetoothConnectBmsAction>>(); + constructMenuItem, BluetoothDisconnectAction>>(); + constructMenuItem>(); + constructMenuItem, BmsTurnOnChargeAction>>(); + constructMenuItem, BmsTurnOffChargeAction>>(); + constructMenuItem, BmsTurnOnDischargeAction>>(); + constructMenuItem, BmsTurnOffDischargeAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; #endif diff --git a/src/displays/menus/boardcomputerhardwaresettingsmenu.h b/src/displays/menus/boardcomputerhardwaresettingsmenu.h index b47791d..030528b 100644 --- a/src/displays/menus/boardcomputerhardwaresettingsmenu.h +++ b/src/displays/menus/boardcomputerhardwaresettingsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "actions/dummyaction.h" @@ -139,22 +138,21 @@ using GametrakDistMaxChangeScreen = makeComponent< class BoardcomputerHardwareSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: BoardcomputerHardwareSettingsMenu() { - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); #if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) - constructItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); #endif #ifdef FEATURE_GAMETRAK constructItem, DummyAction>, @@ -169,10 +167,10 @@ public: constructItem, SwitchScreenAction>>(); constructItem, SwitchScreenAction>>(); #endif - constructItem, DummyAction>>(); - constructItem, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/buzzermenu.h b/src/displays/menus/buzzermenu.h index b3e6bee..b68a918 100644 --- a/src/displays/menus/buzzermenu.h +++ b/src/displays/menus/buzzermenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -89,22 +88,21 @@ using ReverseBeepDuration1ChangeScreen = makeComponent< class BuzzerMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: BuzzerMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, ToggleBoolAction, CheckboxIcon, ReverseBeepAccessor>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, ReverseBeepAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/commanddebugmenu.h b/src/displays/menus/commanddebugmenu.h index fc57541..cb211aa 100644 --- a/src/displays/menus/commanddebugmenu.h +++ b/src/displays/menus/commanddebugmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -21,17 +20,16 @@ template class CommandDebugMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: CommandDebugMenu() { - constructItem>(); - constructItem>(); - constructItem>(); - constructItem>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; diff --git a/src/displays/menus/controllerhardwaresettingsmenu.h b/src/displays/menus/controllerhardwaresettingsmenu.h index 5f1d5c8..4199fa6 100644 --- a/src/displays/menus/controllerhardwaresettingsmenu.h +++ b/src/displays/menus/controllerhardwaresettingsmenu.h @@ -4,7 +4,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "actions/toggleboolaction.h" @@ -51,19 +50,18 @@ using NumMagnetPolesChangeScreen = makeComponent< class ControllerHardwareSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: ControllerHardwareSettingsMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/debugmenu.h b/src/displays/menus/debugmenu.h index 62f3848..30f9f20 100644 --- a/src/displays/menus/debugmenu.h +++ b/src/displays/menus/debugmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/loadsettingsaction.h" @@ -39,34 +38,33 @@ namespace { class DebugMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: DebugMenu() { - constructItem, LoadSettingsAction>>(); - constructItem, SaveSettingsAction>>(); - constructItem, EraseNvsAction>>(); - constructItem, DummyAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, DummyAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, DummyAction>>(); - constructItem, SwitchScreenAction, FrontFeedbackColor>>(); - constructItem, SwitchScreenAction, BackFeedbackColor>>(); - constructItem, DummyAction>>(); - constructItem, SwitchScreenAction, FrontFeedbackColor>>(); - constructItem, SwitchScreenAction, FrontFeedbackColor>>(); - constructItem, SwitchScreenAction, BackFeedbackColor>>(); - constructItem, SwitchScreenAction, BackFeedbackColor>>(); - constructItem, DummyAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, LoadSettingsAction>>(); + constructMenuItem, SaveSettingsAction>>(); + constructMenuItem, EraseNvsAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, SwitchScreenAction, FrontFeedbackColor>>(); + constructMenuItem, SwitchScreenAction, BackFeedbackColor>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, SwitchScreenAction, FrontFeedbackColor>>(); + constructMenuItem, SwitchScreenAction, FrontFeedbackColor>>(); + constructMenuItem, SwitchScreenAction, BackFeedbackColor>>(); + constructMenuItem, SwitchScreenAction, BackFeedbackColor>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/defaultmodesettingsmenu.h b/src/displays/menus/defaultmodesettingsmenu.h index 398550c..e2c215d 100644 --- a/src/displays/menus/defaultmodesettingsmenu.h +++ b/src/displays/menus/defaultmodesettingsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -87,25 +86,24 @@ using DefaultModeBrems2WertChangeDisplay = makeComponent< class DefaultModeSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: DefaultModeSettingsMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, ToggleBoolAction, CheckboxIcon, DefaultModeSquareGasAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingAccessor>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeSquareGasAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/demosmenu.h b/src/displays/menus/demosmenu.h index 5120d60..22b3fd5 100644 --- a/src/displays/menus/demosmenu.h +++ b/src/displays/menus/demosmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/switchscreenaction.h" @@ -22,17 +21,16 @@ namespace { class DemosMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: DemosMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/dynamicdebugmenu.h b/src/displays/menus/dynamicdebugmenu.h index d769c30..4ce6480 100644 --- a/src/displays/menus/dynamicdebugmenu.h +++ b/src/displays/menus/dynamicdebugmenu.h @@ -6,7 +6,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/switchscreenaction.h" @@ -125,38 +124,37 @@ constexpr char TEXT_DEBUGTOGGLE[] = "Toggle"; class DynamicDebugMenu : public MenuDisplay, public RandomText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: DynamicDebugMenu() { // dummy items to allow for scrolling - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); // the interesting bits - constructItem>(); - constructItem, RandomColor, DummyAction>>(); - constructItem, RandomFont, DummyAction>>(); - constructItem, RandomIcon, DummyAction>>(); - constructItem, StaticMenuItemIcon<&icons::lock>, DummyAction>>(); - constructItem, ToggleBoolAction, CheckboxIcon, ToggleAccessor>>(); - constructItem>(); + constructMenuItem>(); + constructMenuItem, RandomColor, DummyAction>>(); + constructMenuItem, RandomFont, DummyAction>>(); + constructMenuItem, RandomIcon, DummyAction>>(); + constructMenuItem, StaticMenuItemIcon<&icons::lock>, DummyAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, ToggleAccessor>>(); + constructMenuItem>(); // more scrolling - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/enablemenu.h b/src/displays/menus/enablemenu.h index d677330..9fdbfe4 100644 --- a/src/displays/menus/enablemenu.h +++ b/src/displays/menus/enablemenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/toggleboolaction.h" @@ -21,17 +20,16 @@ namespace { class EnableMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: EnableMenu() { - constructItem, ToggleBoolAction, CheckboxIcon, FrontLeftEnabledAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLeftEnabledAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/feedbackdebugmenu.h b/src/displays/menus/feedbackdebugmenu.h index aca6f06..e290c43 100644 --- a/src/displays/menus/feedbackdebugmenu.h +++ b/src/displays/menus/feedbackdebugmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -22,18 +21,17 @@ template class ColorInterface> class FeedbackDebugMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: FeedbackDebugMenu() { - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, ColorInterface, DummyAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, ColorInterface, DummyAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; diff --git a/src/displays/menus/gametrakmodesettingsmenu.h b/src/displays/menus/gametrakmodesettingsmenu.h index 10e674d..0db274f 100644 --- a/src/displays/menus/gametrakmodesettingsmenu.h +++ b/src/displays/menus/gametrakmodesettingsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/switchscreenaction.h" @@ -19,8 +18,7 @@ namespace { class ContainerModeSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: ContainerModeSettingsMenu() diff --git a/src/displays/menus/genericwifisettingsmenu.h b/src/displays/menus/genericwifisettingsmenu.h index ce2103b..3ee2fc6 100644 --- a/src/displays/menus/genericwifisettingsmenu.h +++ b/src/displays/menus/genericwifisettingsmenu.h @@ -5,7 +5,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "changevaluedisplay.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -43,18 +42,17 @@ using WifiTxPowerChangeScreen = makeComponent< class GenericWifiSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: GenericWifiSettingsMenu() { - constructItem>(); - constructItem>(); - constructItem, SwitchScreenAction>>(); - constructItem, ToggleBoolAction, CheckboxIcon, WifiSleepAccessor>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiSleepAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/graphsmenu.h b/src/displays/menus/graphsmenu.h index d436f6a..6bbd51d 100644 --- a/src/displays/menus/graphsmenu.h +++ b/src/displays/menus/graphsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "actions/switchscreenaction.h" #include "icons/back.h" @@ -150,31 +149,30 @@ using MotorCurrentsGraphDisplay = makeComponent< class GraphsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: GraphsMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); + 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 - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); #endif - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/invertmenu.h b/src/displays/menus/invertmenu.h index cc2b933..c498c23 100644 --- a/src/displays/menus/invertmenu.h +++ b/src/displays/menus/invertmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/toggleboolaction.h" @@ -21,17 +20,16 @@ namespace { class InvertMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: InvertMenu() { - constructItem, ToggleBoolAction, CheckboxIcon, FrontLeftInvertedAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLeftInvertedAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/larsmmodesettingsmenu.h b/src/displays/menus/larsmmodesettingsmenu.h index 55f6a94..892dcfb 100644 --- a/src/displays/menus/larsmmodesettingsmenu.h +++ b/src/displays/menus/larsmmodesettingsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -43,16 +42,15 @@ using LarsmModeIterationsChangeDisplay = makeComponent< class LarsmModeSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: LarsmModeSettingsMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/limitssettingsmenu.h b/src/displays/menus/limitssettingsmenu.h index 660780f..d8b18c3 100644 --- a/src/displays/menus/limitssettingsmenu.h +++ b/src/displays/menus/limitssettingsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -64,19 +63,18 @@ using PhaseAdvMaxChangeScreen = makeComponent< class LimitsSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: LimitsSettingsMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/mainmenu.h b/src/displays/menus/mainmenu.h index 765899f..637e53c 100644 --- a/src/displays/menus/mainmenu.h +++ b/src/displays/menus/mainmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "menuitem.h" #include "actions/switchscreenaction.h" #include "actions/modesettingsaction.h" @@ -39,30 +38,29 @@ namespace { class MainMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: MainMenu() { - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::modes>>>(); - constructItem, ModeSettingsAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::presets>>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::graph>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::modes>>>(); + constructMenuItem, ModeSettingsAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::presets>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::graph>>>(); #ifdef FEATURE_BMS - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::bms>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::bms>>>(); #endif - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::settings>>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::lock>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::settings>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::lock>>>(); #ifdef FEATURE_MOSFETS constructItem, SwitchScreenAction>>(); #endif - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::demos>>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::poweroff>>>(); - constructItem, RebootAction, StaticMenuItemIcon<&icons::reboot>>>(); - constructItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::demos>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::poweroff>>>(); + constructMenuItem, RebootAction, StaticMenuItemIcon<&icons::reboot>>>(); + constructMenuItem, SwitchScreenAction>>(); } }; } // namespace diff --git a/src/displays/menus/modessettingsmenu.h b/src/displays/menus/modessettingsmenu.h index 450d6dd..ee31329 100644 --- a/src/displays/menus/modessettingsmenu.h +++ b/src/displays/menus/modessettingsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "menuitem.h" #include "actions/switchscreenaction.h" #include "icons/back.h" @@ -21,19 +20,18 @@ namespace { class ModesSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: ModesSettingsMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); #ifdef FEATURE_GAMETRAK constructItem, SwitchScreenAction>>(); #endif - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/mosfetsmenu.h b/src/displays/menus/mosfetsmenu.h index b309982..33a7186 100644 --- a/src/displays/menus/mosfetsmenu.h +++ b/src/displays/menus/mosfetsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/toggleboolaction.h" @@ -34,8 +33,7 @@ using Mosfet2Accessor = GPIOAccessor; class MosfetsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: MosfetsMenu() diff --git a/src/displays/menus/motorfeedbackdebugmenu.h b/src/displays/menus/motorfeedbackdebugmenu.h index 0aa94d1..ec07797 100644 --- a/src/displays/menus/motorfeedbackdebugmenu.h +++ b/src/displays/menus/motorfeedbackdebugmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -22,21 +21,20 @@ template class ColorInterface> class MotorFeedbackDebugMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: MotorFeedbackDebugMenu() { - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, DummyAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; diff --git a/src/displays/menus/motorstatedebugmenu.h b/src/displays/menus/motorstatedebugmenu.h index 1dc6496..f8aa962 100644 --- a/src/displays/menus/motorstatedebugmenu.h +++ b/src/displays/menus/motorstatedebugmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -21,22 +20,21 @@ template class MotorStateDebugMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: MotorStateDebugMenu() { - constructItem>(); - constructItem>(); - constructItem>(); - constructItem>(); - constructItem>(); - constructItem>(); - constructItem>(); - constructItem>(); - constructItem>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; diff --git a/src/displays/menus/presetsmenu.h b/src/displays/menus/presetsmenu.h index 619971f..9fde848 100644 --- a/src/displays/menus/presetsmenu.h +++ b/src/displays/menus/presetsmenu.h @@ -3,7 +3,6 @@ // local includes #include "actioninterface.h" #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "actions/multiaction.h" #include "actions/switchscreenaction.h" @@ -77,24 +76,23 @@ public: class PresetsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: PresetsMenu() { - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, MultiAction, SwitchScreenAction>>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/profilesmenu.h b/src/displays/menus/profilesmenu.h index 0dcf065..bb0c62a 100644 --- a/src/displays/menus/profilesmenu.h +++ b/src/displays/menus/profilesmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "actions/switchprofileaction.h" #include "actions/switchscreenaction.h" #include "icons/back.h" @@ -17,17 +16,16 @@ namespace { class ProfilesMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: ProfilesMenu() { - constructItem, SwitchProfileAction<0>>>(); - constructItem, SwitchProfileAction<1>>>(); - constructItem, SwitchProfileAction<2>>>(); - constructItem, SwitchProfileAction<3>>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchProfileAction<0>>>(); + constructMenuItem, SwitchProfileAction<1>>>(); + constructMenuItem, SwitchProfileAction<2>>>(); + constructMenuItem, SwitchProfileAction<3>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/selectmodemenu.h b/src/displays/menus/selectmodemenu.h index ec496b6..2a3521f 100644 --- a/src/displays/menus/selectmodemenu.h +++ b/src/displays/menus/selectmodemenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "actions/multiaction.h" #include "actions/switchscreenaction.h" @@ -37,21 +36,20 @@ using SetGametrakModeAction = SetterAction, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { using Base = MenuDisplay; public: SelectModeMenu() { - constructItem, MultiAction>>>(); - constructItem, MultiAction>>>(); - constructItem, MultiAction>>>(); + constructMenuItem, MultiAction>>>(); + constructMenuItem, MultiAction>>>(); + constructMenuItem, MultiAction>>>(); #ifdef FEATURE_GAMETRAK constructItem, MultiAction>>>(); #endif - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } void start() override; diff --git a/src/displays/menus/settingsmenu.h b/src/displays/menus/settingsmenu.h index 9651cca..f1623a5 100644 --- a/src/displays/menus/settingsmenu.h +++ b/src/displays/menus/settingsmenu.h @@ -5,7 +5,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "actions/toggleboolaction.h" #include "actions/switchscreenaction.h" @@ -42,28 +41,27 @@ struct BackLedAccessor : public RefAccessor { bool &getRef() const overrid class SettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: SettingsMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::wifi>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::wifi>>>(); #ifdef FEATURE_BLUETOOTH - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::bluetooth>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::bluetooth>>>(); #endif - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>>(); #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) - constructItem, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>>(); #endif - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::buzzer>>>(); - constructItem, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, BackLedAccessor>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::info>>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::buzzer>>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLedAccessor>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::info>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/stationwifisettingsmenu.h b/src/displays/menus/stationwifisettingsmenu.h index 4869b51..c060d26 100644 --- a/src/displays/menus/stationwifisettingsmenu.h +++ b/src/displays/menus/stationwifisettingsmenu.h @@ -5,7 +5,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -29,34 +28,33 @@ namespace { class StationWifiSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: StationWifiSettingsMenu() { - constructItem, WifiReconnectAction>>(); - constructItem, WifiDisconnectAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, ToggleBoolAction, CheckboxIcon, WifiAutoConnectAccessor>>(); - constructItem, ToggleBoolAction, CheckboxIcon, WifiAutoReconnectAccessor>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, WifiEnableIpV6Action>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, DisabledColor, DummyAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, WifiReconnectAction>>(); + constructMenuItem, WifiDisconnectAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiAutoConnectAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiAutoReconnectAccessor>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, WifiEnableIpV6Action>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/tempomatmodesettingsmenu.h b/src/displays/menus/tempomatmodesettingsmenu.h index be6b1f4..af31cae 100644 --- a/src/displays/menus/tempomatmodesettingsmenu.h +++ b/src/displays/menus/tempomatmodesettingsmenu.h @@ -2,7 +2,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -29,14 +28,13 @@ using TempomatModeModelModeChangeScreen = makeComponent< class TempomatModeSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: TempomatModeSettingsMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/timersmenu.h b/src/displays/menus/timersmenu.h index 5413449..13c360d 100644 --- a/src/displays/menus/timersmenu.h +++ b/src/displays/menus/timersmenu.h @@ -3,7 +3,6 @@ // local includes #include "changevaluedisplay.h" #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "actions/switchscreenaction.h" #include "icons/back.h" @@ -61,18 +60,17 @@ using DisplayRedrawRateChangeDisplay = makeComponent< class TimersMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: TimersMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/menus/wifiscanmenu.h b/src/displays/menus/wifiscanmenu.h index e441c16..1965030 100644 --- a/src/displays/menus/wifiscanmenu.h +++ b/src/displays/menus/wifiscanmenu.h @@ -6,7 +6,6 @@ // local includes #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "actions/multiaction.h" #include "actions/switchscreenaction.h" @@ -21,11 +20,13 @@ class WifiSettingsMenu; } // namespace namespace { -class WifiScanMenu : public MenuDisplay, public BackActionInterface>, public ContainerMenuDefinition +class WifiScanMenu : public MenuDisplay, public BackActionInterface> { using Base = MenuDisplay; public: + WifiScanMenu(); + String text() const override; void start() override; @@ -38,9 +39,14 @@ private: std::vector>> m_reusableItems; }; +WifiScanMenu::WifiScanMenu() +{ + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); +} + String WifiScanMenu::text() const { - auto text = String{size()-1} + " found"; + auto text = String{menuItemCount()-1} + " found"; switch (WiFi.scanComplete()) { case WIFI_SCAN_RUNNING: text += " (scanning)"; break; @@ -51,8 +57,6 @@ String WifiScanMenu::text() const void WifiScanMenu::start() { - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); - Base::start(); m_lastScanComplete = 0; @@ -68,16 +72,16 @@ void WifiScanMenu::update() const auto now = millis(); if (!m_lastScanComplete) { - auto backButton = takeLast(); + auto backButton = takeLastMenuItem(); for (std::size_t i = 0; i < n; i++) { const auto ssid = WiFi.SSID(i); - if (size() <= i) + if (menuItemCount() <= i) { if (m_reusableItems.empty()) { - auto &item = constructItem>(); + auto &item = constructMenuItem>(); item.setTitle(ssid); } else @@ -85,7 +89,7 @@ void WifiScanMenu::update() std::unique_ptr> ptr = std::move(m_reusableItems.back()); m_reusableItems.pop_back(); ptr->setTitle(ssid); - emplaceItem(std::move(ptr)); + emplaceMenuItem(std::move(ptr)); } } else @@ -95,10 +99,10 @@ void WifiScanMenu::update() } } - while (size() > n) - m_reusableItems.emplace_back((makeComponent*)takeLast().release()); + while (menuItemCount() > n) + m_reusableItems.emplace_back((makeComponent*)takeLastMenuItem().release()); - emplaceItem(std::move(backButton)); + emplaceMenuItem(std::move(backButton)); m_lastScanComplete = now; } diff --git a/src/displays/menus/wifisettingsmenu.h b/src/displays/menus/wifisettingsmenu.h index 972492f..5ea15c3 100644 --- a/src/displays/menus/wifisettingsmenu.h +++ b/src/displays/menus/wifisettingsmenu.h @@ -3,7 +3,6 @@ // local includes #include "changevaluedisplay.h" #include "menudisplay.h" -#include "containermenudefinition.h" #include "utils.h" #include "actions/switchscreenaction.h" #include "actions/toggleboolaction.h" @@ -36,19 +35,18 @@ using AutoWifiModeChangeDisplay = makeComponent< class WifiSettingsMenu : public MenuDisplay, public StaticText, - public BackActionInterface>, - public ContainerMenuDefinition + public BackActionInterface> { public: WifiSettingsMenu() { - constructItem, SwitchScreenAction>>(); - constructItem, ToggleBoolAction, CheckboxIcon, AutoEnableApAccessor>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::scan>>>(); - constructItem, SwitchScreenAction>>(); - constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, AutoEnableApAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::scan>>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } }; } // namespace diff --git a/src/displays/updatedisplay.h b/src/displays/updatedisplay.h index 4fd6aeb..8fbbbb1 100644 --- a/src/displays/updatedisplay.h +++ b/src/displays/updatedisplay.h @@ -18,7 +18,7 @@ class StatusDisplay; } namespace { -#ifdef FEATURE_OTA +#ifdef FEATURE_ARDUINOOTA class UpdateDisplay : public Display, public DummyBack { public: diff --git a/src/icons/logo.h b/src/icons/logo.h index 3450bfc..db7ade9 100644 --- a/src/icons/logo.h +++ b/src/icons/logo.h @@ -4,6 +4,7 @@ namespace { namespace icons { +/* const Icon<240, 130> logo{{ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) pixels 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) pixels @@ -1956,5 +1957,6 @@ const Icon<240, 130> logo{{ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x79D0 (31184) pixels 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x79E0 (31200) pixels }}; +*/ } } diff --git a/src/main.cpp b/src/main.cpp index 4230d55..703049c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -88,16 +88,28 @@ millis_t lastDisplayUpdate{}; millis_t lastDisplayRedraw{}; } +void printMemoryStats(const char *s) +{ + Serial.printf("MEMORY %s 8bit: %u 32bit: %u\r\n", + s, + heap_caps_get_free_size(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT), + heap_caps_get_free_size(MALLOC_CAP_INTERNAL|MALLOC_CAP_32BIT)); +} + void setup() { Serial.begin(115200); Serial.setDebugOutput(true); - Serial.println("setup()"); + //Serial.println("setup()"); + + printMemoryStats("setup()"); + pinMode(3, INPUT_PULLUP); currentlyReverseBeeping = false; initScreen(); + printMemoryStats("initScreen()"); #ifdef FEATURE_DPAD bootLabel.redraw("dpad"); @@ -140,9 +152,11 @@ void setup() loadSettings(); } } + printMemoryStats("loadSettings()"); bootLabel.redraw("swap front back"); updateSwapFrontBack(); + printMemoryStats("swapFronBack()"); bootLabel.redraw("deviceName"); { @@ -150,39 +164,47 @@ void setup() WiFi.macAddress(&macAddress[0]); std::sprintf(deviceName, STRING(DEVICE_PREFIX) "_%02hhx%02hhx%02hhx", macAddress[3], macAddress[4], macAddress[5]); } + printMemoryStats("deviceName"); bootLabel.redraw("setHostname"); if (!WiFi.setHostname(deviceName)) Serial.println("Could not setHostname"); + printMemoryStats("setHostname()"); bootLabel.redraw("softAPsetHostname"); if (!WiFi.softAPsetHostname(deviceName)) Serial.println("Could not softAPsetHostname"); + printMemoryStats("softAPsetHostname()"); bootLabel.redraw("WiFi mode"); if (!WiFi.mode(settings.wifiSettings.autoWifiMode)) Serial.println("Could not set mode to WIFI_AP_STA"); + printMemoryStats("WiFi.mode()"); if (settings.wifiSettings.autoEnableAp) { bootLabel.redraw("WiFi softAp"); WifiSoftApAction{}.triggered(); } + printMemoryStats("WifiSoftApAction()"); bootLabel.redraw("WiFi begin"); if (!WiFi.begin("realraum", "r3alraum")) Serial.println("Could not begin WiFi"); + printMemoryStats("WiFi.begin()"); #ifdef FEATURE_BLUETOOTH if (settings.bluetoothSettings.autoBluetoothMode == BluetoothMode::Master) { bootLabel.redraw("bluetooth begin master"); BluetoothBeginMasterAction{}.triggered(); + printMemoryStats("BluetoothBeginMasterAction()"); #ifdef FEATURE_BMS if (settings.autoConnectBms) { bootLabel.redraw("connect BMS"); BluetoothConnectBmsAction{}.triggered(); + printMemoryStats("BluetoothConnectBmsAction()"); } #endif } @@ -190,6 +212,7 @@ void setup() { bootLabel.redraw("bluetooth begin"); BluetoothBeginAction{}.triggered(); + printMemoryStats("BluetoothBeginAction()"); } #endif @@ -209,16 +232,19 @@ void setup() currentMode = &modes::defaultMode; -#ifdef FEATURE_OTA +#ifdef FEATURE_ARDUINOOTA bootLabel.redraw("ota"); initOta(); + printMemoryStats("initOta()"); #endif bootLabel.redraw("webserver"); initWebserver(); + printMemoryStats("initWebserver()"); bootLabel.redraw("potis"); readPotis(); + printMemoryStats("readPotis()"); #if defined(FEATURE_DPAD_5WIRESW) && defined(DPAD_5WIRESW_DEBUG) switchScreen(); @@ -229,10 +255,15 @@ void setup() switchScreen(true); else switchScreen(); + + printMemoryStats("switchScreen()"); } void loop() { + //Serial.println("loop()"); + //printMemoryStats("loop()"); + const auto now = millis(); #ifdef FEATURE_DPAD @@ -306,7 +337,7 @@ void loop() handleSerial(); -#ifdef FEATURE_OTA +#ifdef FEATURE_ARDUINOOTA handleOta(); #endif diff --git a/src/menudefinitioninterface.h b/src/menudefinitioninterface.h deleted file mode 100644 index cc08847..0000000 --- a/src/menudefinitioninterface.h +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include - -#include "menuitem.h" - -namespace { -class MenuDefinitionInterface -{ -public: - virtual std::size_t size() const = 0; - - virtual MenuItem& getMenuItem(std::size_t index) = 0; - virtual const MenuItem& getMenuItem(std::size_t index) const = 0; - - virtual void runForEveryMenuItem(std::function &&callback) = 0; - virtual void runForEveryMenuItem(std::function &&callback) const = 0; -}; -} diff --git a/src/menudisplay.h b/src/menudisplay.h index 84826a3..67c4979 100644 --- a/src/menudisplay.h +++ b/src/menudisplay.h @@ -8,11 +8,10 @@ #include "textinterface.h" #include "widgets/label.h" #include "globals.h" -#include "menudefinitioninterface.h" #include "menuitem.h" namespace { -class MenuDisplay : public Display, public virtual TextInterface, public virtual MenuDefinitionInterface +class MenuDisplay : public Display, public virtual TextInterface { public: void start() override; @@ -32,6 +31,66 @@ public: int selectedIndex() const { return m_selectedIndex; } + + std::size_t menuItemCount() const { return m_menuItems.size(); } + + MenuItem& getMenuItem(std::size_t index) + { + if (index < m_menuItems.size()) + return *m_menuItems[index].get(); + + throw "aua"; + } + + const MenuItem& getMenuItem(std::size_t index) const + { + if (index < m_menuItems.size()) + return *m_menuItems[index].get(); + + throw "aua"; + } + + void runForEveryMenuItem(std::function &&callback) + { + for (const auto &ptr : m_menuItems) + callback(*ptr); + } + + void runForEveryMenuItem(std::function &&callback) const + { + for (const auto &ptr : m_menuItems) + callback(*ptr); + } + + template + T &constructMenuItem(Args&&... args) + { + auto ptr = std::make_unique(std::forward(args)...); + T &ref = *ptr; + emplaceMenuItem(std::move(ptr)); + return ref; + } + + void emplaceMenuItem(std::unique_ptr &&ptr) + { + m_menuItems.emplace_back(std::move(ptr)); + } + + void clearMenuItems() + { + m_menuItems.clear(); + } + + std::unique_ptr takeLastMenuItem() + { + if (m_menuItems.empty()) + throw "aua"; + + std::unique_ptr ptr = std::move(m_menuItems.back()); + m_menuItems.pop_back(); + return ptr; + } + protected: void setSelectedIndex(int selectedIndex) { m_selectedIndex = selectedIndex; } @@ -65,6 +124,8 @@ private: int m_rotateOffset; bool m_pressed; + + std::vector> m_menuItems; }; void MenuDisplay::start() @@ -102,7 +163,7 @@ void MenuDisplay::update() const auto offset = m_rotateOffset; m_rotateOffset = 0; - const auto itemCount = size(); + const auto itemCount = menuItemCount(); if (itemCount) { diff --git a/src/ota.h b/src/ota.h index f63c2a3..a27494a 100644 --- a/src/ota.h +++ b/src/ota.h @@ -1,14 +1,15 @@ #pragma once -#ifdef FEATURE_OTA +#ifdef FEATURE_ARDUINOOTA #include #endif #include "screens.h" +#include "globals.h" #include "displays/updatedisplay.h" namespace { -#ifdef FEATURE_OTA +#ifdef FEATURE_ARDUINOOTA void initOta() { ArduinoOTA @@ -24,18 +25,18 @@ void initOta() switchScreenImpl("Updating " + type); }) .onEnd([]() { - getRefByType().m_finished = true; - getRefByType().redraw(); + ((UpdateDisplay*)currentDisplay.get())->m_finished = true; + ((UpdateDisplay*)currentDisplay.get())->redraw(); }) .onProgress([](unsigned int progress, unsigned int total) { - getRefByType().m_progress = progress; - getRefByType().m_total = total; - getRefByType().redraw(); + ((UpdateDisplay*)currentDisplay.get())->m_progress = progress; + ((UpdateDisplay*)currentDisplay.get())->m_total = total; + ((UpdateDisplay*)currentDisplay.get())->redraw(); }) .onError([](ota_error_t error) { - getRefByType().m_error = error; - getRefByType().m_errorValid = true; - getRefByType().redraw(); + ((UpdateDisplay*)currentDisplay.get())->m_error = error; + ((UpdateDisplay*)currentDisplay.get())->m_errorValid = true; + ((UpdateDisplay*)currentDisplay.get())->redraw(); }); ArduinoOTA.begin(); diff --git a/src/screens.h b/src/screens.h index 0d5959c..ce33cd3 100644 --- a/src/screens.h +++ b/src/screens.h @@ -50,7 +50,7 @@ void initScreen() tft.fillScreen(TFT_WHITE); tft.setTextColor(TFT_BLACK, TFT_WHITE); tft.setTextFont(4); - tft.pushImage(0, 40, icons::logo.WIDTH, icons::logo.HEIGHT, icons::logo.buffer); + //tft.pushImage(0, 40, icons::logo.WIDTH, icons::logo.HEIGHT, icons::logo.buffer); tft.drawString("Bobbycar-OS", 32, 200); tft.drawString("booting...", 32, 225); bootLabel.start();