From 4a562d4e484f13727f70e37e3be84187b11be50d Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 11 Aug 2021 19:26:48 +0200 Subject: [PATCH] Feature Garage --- .gitmodules | 3 ++ components/TFT_eSPI | 2 +- components/espasynchttpreq | 1 + config_feedc0de.cmake | 2 + main/CMakeLists.txt | 3 +- main/displays/garagedisplay.h | 62 ++++++++++++++++++++++++++++++ main/displays/menus/mainmenu.h | 14 ++++++- main/displays/powersupplydisplay.h | 19 +++------ main/displays/spirodisplay.h | 2 +- main/displays/updatedisplay.h | 32 +++++++++++++-- main/main.cpp | 27 +++++++++++++ main/presets.h | 3 ++ main/stringsettings.h | 8 ++++ main/texts.h | 1 + sdkconfig_feedc0de | 12 ++++++ 15 files changed, 169 insertions(+), 22 deletions(-) create mode 160000 components/espasynchttpreq create mode 100644 main/displays/garagedisplay.h diff --git a/.gitmodules b/.gitmodules index 445099c..ece0971 100644 --- a/.gitmodules +++ b/.gitmodules @@ -49,3 +49,6 @@ [submodule "components/esphttpdutils"] path = components/esphttpdutils url = git@github.com:0xFEEDC0DE64/esphttpdutils.git +[submodule "components/espasynchttpreq"] + path = components/espasynchttpreq + url = git@github.com:0xFEEDC0DE64/espasynchttpreq.git diff --git a/components/TFT_eSPI b/components/TFT_eSPI index 95458b3..b6f9d19 160000 --- a/components/TFT_eSPI +++ b/components/TFT_eSPI @@ -1 +1 @@ -Subproject commit 95458b3875afa69889878fc6a494466d6814eb90 +Subproject commit b6f9d1934956d9054c0af8d021ef522844a81744 diff --git a/components/espasynchttpreq b/components/espasynchttpreq new file mode 160000 index 0000000..8b05591 --- /dev/null +++ b/components/espasynchttpreq @@ -0,0 +1 @@ +Subproject commit 8b055917027671b50dc1ed4634ba43149bf3dce6 diff --git a/config_feedc0de.cmake b/config_feedc0de.cmake index ae1d04f..e5c5aa9 100644 --- a/config_feedc0de.cmake +++ b/config_feedc0de.cmake @@ -73,8 +73,10 @@ add_definitions( # -DDEFAULT_GAMETRAKYMAX=4095 # -DDEFAULT_GAMETRAKDISTMIN=0 # -DDEFAULT_GAMETRAKDISTMAX=4095 + -DFEATURE_POWERSUPPLY -DFEATURE_CLOUD -DFEATURE_LEDBACKLIGHT -DPINS_LEDBACKLIGHT=23 -DLEDBACKLIGHT_INVERTED + -DFEATURE_GARAGE ) diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 4bdb903..190277f 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -89,6 +89,7 @@ set(headers displays/calibratedisplay.h displays/dpad5wiredebugdisplay.h displays/gametrakcalibratedisplay.h + displays/garagedisplay.h displays/lockscreen.h displays/metersdisplay.h displays/powersupplydisplay.h @@ -181,7 +182,7 @@ set(dependencies libsodium freertos nvs_flash esp_http_server esp_https_ota mdns app_update esp_system esp_websocket_client driver arduino-esp32 ArduinoJson esp-nimble-cpp bobbycar-protocol cpputils cxx-ring-buffer date - espasyncota espchrono espcpputils esphttpdutils espwifistack expected fmt TFT_eSPI + espasynchttpreq espasyncota espchrono espcpputils esphttpdutils espwifistack expected fmt TFT_eSPI ) idf_component_register( diff --git a/main/displays/garagedisplay.h b/main/displays/garagedisplay.h new file mode 100644 index 0000000..c447627 --- /dev/null +++ b/main/displays/garagedisplay.h @@ -0,0 +1,62 @@ +#pragma once + +// system includes + +// esp-idf includes +#include + +// 3rdparty lib includes +#include + +// local includes +#include "display.h" +#include "actions/switchscreenaction.h" +#include "globals.h" +#include "texts.h" +#include "widgets/label.h" + +namespace { +class MainMenu; +} + +namespace { +#ifdef FEATURE_GARAGE +class GarageDisplay : public Display, public BackActionInterface> +{ +public: + void start() override; + void initScreen() override; + void redraw() override; + void confirm() override; + +private: +}; + +void GarageDisplay::start() +{ +} + +void GarageDisplay::initScreen() +{ + tft.fillScreen(TFT_BLACK); + tft.setTextFont(4); + tft.setTextColor(TFT_YELLOW); + + tft.drawString(TEXT_GARAGE, 5, 5, 4); + + tft.fillRect(0, 34, tft.width(), 3, TFT_WHITE); + + tft.setTextColor(TFT_WHITE, TFT_BLACK); + + tft.drawString("Garage", 20, 100); +} + +void GarageDisplay::redraw() +{ +} + +void GarageDisplay::confirm() +{ +} +#endif +} diff --git a/main/displays/menus/mainmenu.h b/main/displays/menus/mainmenu.h index 4beed43..c4f1f5d 100644 --- a/main/displays/menus/mainmenu.h +++ b/main/displays/menus/mainmenu.h @@ -11,11 +11,15 @@ #include "icons/modes.h" #include "icons/presets.h" #include "icons/graph.h" +#ifdef FEATURE_BMS #include "icons/bms.h" +#endif #include "icons/settings.h" #include "icons/lock.h" #include "icons/demos.h" +#ifdef FEATURE_OTA #include "icons/update.h" +#endif #include "icons/poweroff.h" #include "icons/reboot.h" @@ -32,6 +36,7 @@ class SettingsMenu; class Lockscreen; class MosfetsMenu; class DemosMenu; +class GarageDisplay; class UpdateDisplay; class PoweroffDisplay; class DebugMenu; @@ -52,10 +57,10 @@ public: constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::presets>>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::graph>>>(); -#ifdef FEATURE_CAN +#if defined(FEATURE_CAN) && defined(FEATURE_POWERSUPPLY) constructMenuItem, SwitchScreenAction>>(); #endif -#ifdef FEATURE_BMS +#if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::bms>>>(); #endif constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::settings>>>(); @@ -64,7 +69,12 @@ public: constructMenuItem, SwitchScreenAction>>(); #endif constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::demos>>>(); +#ifdef FEATURE_GARAGE + constructMenuItem, SwitchScreenAction>>(); +#endif +#ifdef FEATURE_OTA constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::update>>>(); +#endif constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::poweroff>>>(); constructMenuItem, RebootAction, StaticMenuItemIcon<&icons::reboot>>>(); constructMenuItem, SwitchScreenAction>>(); diff --git a/main/displays/powersupplydisplay.h b/main/displays/powersupplydisplay.h index 21d1c5a..ec33b82 100644 --- a/main/displays/powersupplydisplay.h +++ b/main/displays/powersupplydisplay.h @@ -1,7 +1,9 @@ #pragma once +// Arduino includes #include +// local includes #include "display.h" #include "actions/switchscreenaction.h" #include "globals.h" @@ -13,15 +15,14 @@ class MetersDisplay; class StatusDisplay; } namespace { -#ifdef FEATURE_CAN -class PowerSupplyDisplay : public Display +#if defined(FEATURE_CAN) && defined(FEATURE_POWERSUPPLY) +class PowerSupplyDisplay : public Display, public DummyConfirm, public BackActionInterface> { public: void initScreen() override; void redraw() override; void confirm() override; - void back() override; void rotate(int offset) override; Label m_voltageLabel{120, 50}; @@ -49,20 +50,12 @@ void PowerSupplyDisplay::redraw() void PowerSupplyDisplay::confirm() { - -} - -void PowerSupplyDisplay::back() -{ - + // TODO } void PowerSupplyDisplay::rotate(int offset) { -// if (offset < 0) -// switchScreen(); -// else if (offset > 0) -// switchScreen(); + // TODO } #endif } diff --git a/main/displays/spirodisplay.h b/main/displays/spirodisplay.h index 6105622..6060b94 100644 --- a/main/displays/spirodisplay.h +++ b/main/displays/spirodisplay.h @@ -10,7 +10,7 @@ class DemosMenu; } namespace { -class SpiroDisplay : public Display, public SwitchScreenAction, public DummyConfirm, public BackActionInterface> +class SpiroDisplay : public Display, public DummyConfirm, public BackActionInterface> { public: void initScreen() override; diff --git a/main/displays/updatedisplay.h b/main/displays/updatedisplay.h index 4367e25..258ab39 100644 --- a/main/displays/updatedisplay.h +++ b/main/displays/updatedisplay.h @@ -10,8 +10,8 @@ // 3rdparty lib includes #ifdef FEATURE_OTA #include +#include #endif -#include // local includes #include "display.h" @@ -40,8 +40,11 @@ private: Label m_statusLabel{120, 75}; Label m_progressLabel{120, 100}; Label m_totalLabel{120, 125}; + Label m_messageLabel{20, 150}; ProgressBar m_progressBar{20, 200, 200, 10, 0, 100}; + + Label m_newVersionLabel{20, 275}; }; void UpdateDisplay::start() @@ -69,7 +72,18 @@ void UpdateDisplay::initScreen() tft.drawString("Total:", 20, m_totalLabel.y()); m_totalLabel.start(); + m_messageLabel.start(); + m_progressBar.start(); + + if (const esp_app_desc_t *app_desc = esp_ota_get_app_description()) + { + tft.setTextColor(TFT_ORANGE, TFT_BLACK); + tft.drawString(app_desc->version, 20, 250); + tft.setTextColor(TFT_WHITE, TFT_BLACK); + } + + m_newVersionLabel.start(); } void UpdateDisplay::redraw() @@ -89,22 +103,32 @@ void UpdateDisplay::redraw() m_totalLabel.clear(); m_progressBar.redraw(0); } + m_messageLabel.redraw(asyncOta->message()); + + if (const auto &appDesc = asyncOta->appDesc()) + { + tft.setTextColor(TFT_GREEN, TFT_BLACK); + m_newVersionLabel.redraw(appDesc->version); + tft.setTextColor(TFT_WHITE, TFT_BLACK); + } + else + m_newVersionLabel.clear(); } else { m_statusLabel.clear(); m_progressLabel.clear(); m_totalLabel.clear(); + m_messageLabel.clear(); m_progressBar.redraw(0); + + m_newVersionLabel.clear(); } } void UpdateDisplay::confirm() { - //if (m_finished) - // switchScreen(); - if (const auto result = triggerOta(stringSettings.otaUrl); !result) ESP_LOGE("BOBBY", "triggerOta() failed with %.*s", result.error().size(), result.error().data()); } diff --git a/main/main.cpp b/main/main.cpp index 6203935..42e24fc 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -33,7 +33,9 @@ using namespace std::chrono_literals; #ifdef FEATURE_CLOUD #include "displays/menus/cloudsettingsmenu.h" #endif +#ifdef FEATURE_BMS #include "displays/menus/bmsmenu.h" +#endif #include "displays/menus/buzzermenu.h" #include "displays/menus/commanddebugmenu.h" #include "displays/menus/debugmenu.h" @@ -42,7 +44,9 @@ using namespace std::chrono_literals; #include "displays/menus/dynamicdebugmenu.h" #include "displays/menus/enablemenu.h" #include "displays/menus/feedbackdebugmenu.h" +#ifdef FEATURE_GAMETRAK #include "displays/menus/gametrakmodesettingsmenu.h" +#endif #include "displays/menus/genericwifisettingsmenu.h" #include "displays/menus/graphsmenu.h" #include "displays/menus/controllerhardwaresettingsmenu.h" @@ -52,7 +56,9 @@ using namespace std::chrono_literals; #include "displays/menus/mainmenu.h" #include "displays/menus/tempomatmodesettingsmenu.h" #include "displays/menus/modessettingsmenu.h" +#ifdef FEATURE_MOSFETS #include "displays/menus/mosfetsmenu.h" +#endif #include "displays/menus/motorfeedbackdebugmenu.h" #include "displays/menus/motorstatedebugmenu.h" #include "displays/menus/profilesmenu.h" @@ -64,11 +70,20 @@ using namespace std::chrono_literals; #include "displays/menus/timersmenu.h" #include "displays/menus/wifiscanmenu.h" #include "displays/menus/wifisettingsmenu.h" +#ifdef FEATURE_BMS #include "displays/bmsdisplay.h" +#endif #include "displays/calibratedisplay.h" +#ifdef FEATURE_DPAD_5WIRESW #include "displays/dpad5wiredebugdisplay.h" +#endif #include "displays/gameoflifedisplay.h" +#ifdef FEATURE_GARAGE +#include "displays/garagedisplay.h" +#endif +#ifdef FEATURE_LOCKSCREEN #include "displays/gametrakcalibratedisplay.h" +#endif #include "displays/lockscreen.h" #include "displays/metersdisplay.h" #include "displays/pingpongdisplay.h" @@ -77,21 +92,33 @@ using namespace std::chrono_literals; #include "displays/spirodisplay.h" #include "displays/starfielddisplay.h" #include "displays/statusdisplay.h" +#ifdef FEATURE_OTA #include "displays/updatedisplay.h" +#endif #include "screens.h" #include "dpad.h" +#ifdef FEATURE_DPAD_3WIRESW #include "dpad3wire.h" +#endif +#ifdef FEATURE_DPAD_5WIRESW #include "dpad5wire.h" +#endif +#ifdef FEATURE_ROTARY #include "rotary.h" +#endif #include "serialhandler.h" +#ifdef FEATURE_OTA #include "ota.h" +#endif #include "presets.h" #include "statistics.h" #ifdef FEATURE_BLUETOOTH #include "actions/bluetoothbeginaction.h" #include "actions/bluetoothbeginmasteraction.h" +#ifdef FEATURE_BMS #include "actions/bluetoothconnectbmsaction.h" #endif +#endif #ifdef FEATURE_BLE #include "ble.h" #endif diff --git a/main/presets.h b/main/presets.h index 0b43f7d..7e7817b 100644 --- a/main/presets.h +++ b/main/presets.h @@ -234,6 +234,9 @@ StringSettings makeDefaultStringSettings() #endif #ifdef FEATURE_OTA .otaUrl = {}, +#endif +#ifdef FEATURE_GARAGE + .garageUrl = "http://insecure.brunner.ninja/tor.php", #endif }; } diff --git a/main/stringsettings.h b/main/stringsettings.h index 53c8cdf..4005687 100644 --- a/main/stringsettings.h +++ b/main/stringsettings.h @@ -22,6 +22,10 @@ struct StringSettings std::string otaUrl; #endif +#ifdef FEATURE_GARAGE + std::string garageUrl; +#endif + template void executeForEveryCommonSetting(T &&callable); @@ -61,6 +65,10 @@ void StringSettings::executeForEveryCommonSetting(T &&callable) #ifdef FEATURE_OTA callable("otaUrl", otaUrl); #endif + +#ifdef FEATURE_GARAGE + callable("garageUrl", garageUrl); +#endif } template diff --git a/main/texts.h b/main/texts.h index 9868126..3cdf88d 100644 --- a/main/texts.h +++ b/main/texts.h @@ -79,6 +79,7 @@ constexpr char TEXT_SETTINGS[] = "Settings"; constexpr char TEXT_LOCKVEHICLE[] = "Lock vehicle"; constexpr char TEXT_MOSFETS[] = "Mosfets"; constexpr char TEXT_DEMOS[] = "Demos"; +constexpr char TEXT_GARAGE[] = "Garage"; constexpr char TEXT_UPDATE[] = "Update"; constexpr char TEXT_POWEROFF[] = "Poweroff"; constexpr char TEXT_REBOOT[] = "Reboot"; diff --git a/sdkconfig_feedc0de b/sdkconfig_feedc0de index 3fc3e74..c07bbd3 100644 --- a/sdkconfig_feedc0de +++ b/sdkconfig_feedc0de @@ -155,6 +155,18 @@ CONFIG_ARDUINO_SELECTIVE_SPI=y CONFIG_ARDUINO_SELECTIVE_Wire=y # end of Arduino Configuration +# +# Simple Async HTTP Request +# +# CONFIG_LOG_LOCAL_LEVEL_ASYNC_HTTP_NONE is not set +# CONFIG_LOG_LOCAL_LEVEL_ASYNC_HTTP_ERROR is not set +# CONFIG_LOG_LOCAL_LEVEL_ASYNC_HTTP_WARN is not set +CONFIG_LOG_LOCAL_LEVEL_ASYNC_HTTP_INFO=y +# CONFIG_LOG_LOCAL_LEVEL_ASYNC_HTTP_DEBUG is not set +# CONFIG_LOG_LOCAL_LEVEL_ASYNC_HTTP_VERBOSE is not set +CONFIG_LOG_LOCAL_LEVEL_ASYNC_HTTP=3 +# end of Simple Async HTTP Request + # # Simple WiFi Stack settings #