Feature Garage

This commit is contained in:
2021-08-11 19:26:48 +02:00
parent 12a81c3b5d
commit 4a562d4e48
15 changed files with 169 additions and 22 deletions

3
.gitmodules vendored
View File

@ -49,3 +49,6 @@
[submodule "components/esphttpdutils"] [submodule "components/esphttpdutils"]
path = components/esphttpdutils path = components/esphttpdutils
url = git@github.com:0xFEEDC0DE64/esphttpdutils.git url = git@github.com:0xFEEDC0DE64/esphttpdutils.git
[submodule "components/espasynchttpreq"]
path = components/espasynchttpreq
url = git@github.com:0xFEEDC0DE64/espasynchttpreq.git

View File

@ -73,8 +73,10 @@ add_definitions(
# -DDEFAULT_GAMETRAKYMAX=4095 # -DDEFAULT_GAMETRAKYMAX=4095
# -DDEFAULT_GAMETRAKDISTMIN=0 # -DDEFAULT_GAMETRAKDISTMIN=0
# -DDEFAULT_GAMETRAKDISTMAX=4095 # -DDEFAULT_GAMETRAKDISTMAX=4095
-DFEATURE_POWERSUPPLY
-DFEATURE_CLOUD -DFEATURE_CLOUD
-DFEATURE_LEDBACKLIGHT -DFEATURE_LEDBACKLIGHT
-DPINS_LEDBACKLIGHT=23 -DPINS_LEDBACKLIGHT=23
-DLEDBACKLIGHT_INVERTED -DLEDBACKLIGHT_INVERTED
-DFEATURE_GARAGE
) )

View File

@ -89,6 +89,7 @@ set(headers
displays/calibratedisplay.h displays/calibratedisplay.h
displays/dpad5wiredebugdisplay.h displays/dpad5wiredebugdisplay.h
displays/gametrakcalibratedisplay.h displays/gametrakcalibratedisplay.h
displays/garagedisplay.h
displays/lockscreen.h displays/lockscreen.h
displays/metersdisplay.h displays/metersdisplay.h
displays/powersupplydisplay.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 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 arduino-esp32 ArduinoJson esp-nimble-cpp
bobbycar-protocol cpputils cxx-ring-buffer date 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( idf_component_register(

View File

@ -0,0 +1,62 @@
#pragma once
// system includes
// esp-idf includes
#include <esp_log.h>
// 3rdparty lib includes
#include <fmt/core.h>
// 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<SwitchScreenAction<MainMenu>>
{
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
}

View File

@ -11,11 +11,15 @@
#include "icons/modes.h" #include "icons/modes.h"
#include "icons/presets.h" #include "icons/presets.h"
#include "icons/graph.h" #include "icons/graph.h"
#ifdef FEATURE_BMS
#include "icons/bms.h" #include "icons/bms.h"
#endif
#include "icons/settings.h" #include "icons/settings.h"
#include "icons/lock.h" #include "icons/lock.h"
#include "icons/demos.h" #include "icons/demos.h"
#ifdef FEATURE_OTA
#include "icons/update.h" #include "icons/update.h"
#endif
#include "icons/poweroff.h" #include "icons/poweroff.h"
#include "icons/reboot.h" #include "icons/reboot.h"
@ -32,6 +36,7 @@ class SettingsMenu;
class Lockscreen; class Lockscreen;
class MosfetsMenu; class MosfetsMenu;
class DemosMenu; class DemosMenu;
class GarageDisplay;
class UpdateDisplay; class UpdateDisplay;
class PoweroffDisplay; class PoweroffDisplay;
class DebugMenu; class DebugMenu;
@ -52,10 +57,10 @@ public:
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PRESETS>, SwitchScreenAction<PresetsMenu>, StaticMenuItemIcon<&icons::presets>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PRESETS>, SwitchScreenAction<PresetsMenu>, StaticMenuItemIcon<&icons::presets>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILES>, SwitchScreenAction<ProfilesMenu>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILES>, SwitchScreenAction<ProfilesMenu>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GRAPHS>, SwitchScreenAction<GraphsMenu>, StaticMenuItemIcon<&icons::graph>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GRAPHS>, SwitchScreenAction<GraphsMenu>, StaticMenuItemIcon<&icons::graph>>>();
#ifdef FEATURE_CAN #if defined(FEATURE_CAN) && defined(FEATURE_POWERSUPPLY)
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POWERSUPPLY>, SwitchScreenAction<PowerSupplyDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POWERSUPPLY>, SwitchScreenAction<PowerSupplyDisplay>>>();
#endif #endif
#ifdef FEATURE_BMS #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS)
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMS>, SwitchScreenAction<BmsMenu>, StaticMenuItemIcon<&icons::bms>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMS>, SwitchScreenAction<BmsMenu>, StaticMenuItemIcon<&icons::bms>>>();
#endif #endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETTINGS>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&icons::settings>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETTINGS>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&icons::settings>>>();
@ -64,7 +69,12 @@ public:
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOSFETS>, SwitchScreenAction<MosfetsMenu>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOSFETS>, SwitchScreenAction<MosfetsMenu>>>();
#endif #endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEMOS>, SwitchScreenAction<DemosMenu>, StaticMenuItemIcon<&icons::demos>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEMOS>, SwitchScreenAction<DemosMenu>, StaticMenuItemIcon<&icons::demos>>>();
#ifdef FEATURE_GARAGE
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GARAGE>, SwitchScreenAction<GarageDisplay>>>();
#endif
#ifdef FEATURE_OTA
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_UPDATE>, SwitchScreenAction<UpdateDisplay>, StaticMenuItemIcon<&icons::update>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_UPDATE>, SwitchScreenAction<UpdateDisplay>, StaticMenuItemIcon<&icons::update>>>();
#endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POWEROFF>, SwitchScreenAction<PoweroffDisplay>, StaticMenuItemIcon<&icons::poweroff>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POWEROFF>, SwitchScreenAction<PoweroffDisplay>, StaticMenuItemIcon<&icons::poweroff>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REBOOT>, RebootAction, StaticMenuItemIcon<&icons::reboot>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REBOOT>, RebootAction, StaticMenuItemIcon<&icons::reboot>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEBUG>, SwitchScreenAction<DebugMenu>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEBUG>, SwitchScreenAction<DebugMenu>>>();

View File

@ -1,7 +1,9 @@
#pragma once #pragma once
// Arduino includes
#include <Arduino.h> #include <Arduino.h>
// local includes
#include "display.h" #include "display.h"
#include "actions/switchscreenaction.h" #include "actions/switchscreenaction.h"
#include "globals.h" #include "globals.h"
@ -13,15 +15,14 @@ class MetersDisplay;
class StatusDisplay; class StatusDisplay;
} }
namespace { namespace {
#ifdef FEATURE_CAN #if defined(FEATURE_CAN) && defined(FEATURE_POWERSUPPLY)
class PowerSupplyDisplay : public Display class PowerSupplyDisplay : public Display, public DummyConfirm, public BackActionInterface<SwitchScreenAction<MainMenu>>
{ {
public: public:
void initScreen() override; void initScreen() override;
void redraw() override; void redraw() override;
void confirm() override; void confirm() override;
void back() override;
void rotate(int offset) override; void rotate(int offset) override;
Label m_voltageLabel{120, 50}; Label m_voltageLabel{120, 50};
@ -49,20 +50,12 @@ void PowerSupplyDisplay::redraw()
void PowerSupplyDisplay::confirm() void PowerSupplyDisplay::confirm()
{ {
// TODO
}
void PowerSupplyDisplay::back()
{
} }
void PowerSupplyDisplay::rotate(int offset) void PowerSupplyDisplay::rotate(int offset)
{ {
// if (offset < 0) // TODO
// switchScreen<MetersDisplay>();
// else if (offset > 0)
// switchScreen<StatusDisplay>();
} }
#endif #endif
} }

View File

@ -10,7 +10,7 @@ class DemosMenu;
} }
namespace { namespace {
class SpiroDisplay : public Display, public SwitchScreenAction<DemosMenu>, public DummyConfirm, public BackActionInterface<SwitchScreenAction<DemosMenu>> class SpiroDisplay : public Display, public DummyConfirm, public BackActionInterface<SwitchScreenAction<DemosMenu>>
{ {
public: public:
void initScreen() override; void initScreen() override;

View File

@ -10,8 +10,8 @@
// 3rdparty lib includes // 3rdparty lib includes
#ifdef FEATURE_OTA #ifdef FEATURE_OTA
#include <espasyncota.h> #include <espasyncota.h>
#include <esp_ota_ops.h>
#endif #endif
#include <fmt/core.h>
// local includes // local includes
#include "display.h" #include "display.h"
@ -40,8 +40,11 @@ private:
Label m_statusLabel{120, 75}; Label m_statusLabel{120, 75};
Label m_progressLabel{120, 100}; Label m_progressLabel{120, 100};
Label m_totalLabel{120, 125}; Label m_totalLabel{120, 125};
Label m_messageLabel{20, 150};
ProgressBar m_progressBar{20, 200, 200, 10, 0, 100}; ProgressBar m_progressBar{20, 200, 200, 10, 0, 100};
Label m_newVersionLabel{20, 275};
}; };
void UpdateDisplay::start() void UpdateDisplay::start()
@ -69,7 +72,18 @@ void UpdateDisplay::initScreen()
tft.drawString("Total:", 20, m_totalLabel.y()); tft.drawString("Total:", 20, m_totalLabel.y());
m_totalLabel.start(); m_totalLabel.start();
m_messageLabel.start();
m_progressBar.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() void UpdateDisplay::redraw()
@ -89,22 +103,32 @@ void UpdateDisplay::redraw()
m_totalLabel.clear(); m_totalLabel.clear();
m_progressBar.redraw(0); 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 else
{ {
m_statusLabel.clear(); m_statusLabel.clear();
m_progressLabel.clear(); m_progressLabel.clear();
m_totalLabel.clear(); m_totalLabel.clear();
m_messageLabel.clear();
m_progressBar.redraw(0); m_progressBar.redraw(0);
m_newVersionLabel.clear();
} }
} }
void UpdateDisplay::confirm() void UpdateDisplay::confirm()
{ {
//if (m_finished)
// switchScreen<StatusDisplay>();
if (const auto result = triggerOta(stringSettings.otaUrl); !result) if (const auto result = triggerOta(stringSettings.otaUrl); !result)
ESP_LOGE("BOBBY", "triggerOta() failed with %.*s", result.error().size(), result.error().data()); ESP_LOGE("BOBBY", "triggerOta() failed with %.*s", result.error().size(), result.error().data());
} }

View File

@ -33,7 +33,9 @@ using namespace std::chrono_literals;
#ifdef FEATURE_CLOUD #ifdef FEATURE_CLOUD
#include "displays/menus/cloudsettingsmenu.h" #include "displays/menus/cloudsettingsmenu.h"
#endif #endif
#ifdef FEATURE_BMS
#include "displays/menus/bmsmenu.h" #include "displays/menus/bmsmenu.h"
#endif
#include "displays/menus/buzzermenu.h" #include "displays/menus/buzzermenu.h"
#include "displays/menus/commanddebugmenu.h" #include "displays/menus/commanddebugmenu.h"
#include "displays/menus/debugmenu.h" #include "displays/menus/debugmenu.h"
@ -42,7 +44,9 @@ using namespace std::chrono_literals;
#include "displays/menus/dynamicdebugmenu.h" #include "displays/menus/dynamicdebugmenu.h"
#include "displays/menus/enablemenu.h" #include "displays/menus/enablemenu.h"
#include "displays/menus/feedbackdebugmenu.h" #include "displays/menus/feedbackdebugmenu.h"
#ifdef FEATURE_GAMETRAK
#include "displays/menus/gametrakmodesettingsmenu.h" #include "displays/menus/gametrakmodesettingsmenu.h"
#endif
#include "displays/menus/genericwifisettingsmenu.h" #include "displays/menus/genericwifisettingsmenu.h"
#include "displays/menus/graphsmenu.h" #include "displays/menus/graphsmenu.h"
#include "displays/menus/controllerhardwaresettingsmenu.h" #include "displays/menus/controllerhardwaresettingsmenu.h"
@ -52,7 +56,9 @@ using namespace std::chrono_literals;
#include "displays/menus/mainmenu.h" #include "displays/menus/mainmenu.h"
#include "displays/menus/tempomatmodesettingsmenu.h" #include "displays/menus/tempomatmodesettingsmenu.h"
#include "displays/menus/modessettingsmenu.h" #include "displays/menus/modessettingsmenu.h"
#ifdef FEATURE_MOSFETS
#include "displays/menus/mosfetsmenu.h" #include "displays/menus/mosfetsmenu.h"
#endif
#include "displays/menus/motorfeedbackdebugmenu.h" #include "displays/menus/motorfeedbackdebugmenu.h"
#include "displays/menus/motorstatedebugmenu.h" #include "displays/menus/motorstatedebugmenu.h"
#include "displays/menus/profilesmenu.h" #include "displays/menus/profilesmenu.h"
@ -64,11 +70,20 @@ using namespace std::chrono_literals;
#include "displays/menus/timersmenu.h" #include "displays/menus/timersmenu.h"
#include "displays/menus/wifiscanmenu.h" #include "displays/menus/wifiscanmenu.h"
#include "displays/menus/wifisettingsmenu.h" #include "displays/menus/wifisettingsmenu.h"
#ifdef FEATURE_BMS
#include "displays/bmsdisplay.h" #include "displays/bmsdisplay.h"
#endif
#include "displays/calibratedisplay.h" #include "displays/calibratedisplay.h"
#ifdef FEATURE_DPAD_5WIRESW
#include "displays/dpad5wiredebugdisplay.h" #include "displays/dpad5wiredebugdisplay.h"
#endif
#include "displays/gameoflifedisplay.h" #include "displays/gameoflifedisplay.h"
#ifdef FEATURE_GARAGE
#include "displays/garagedisplay.h"
#endif
#ifdef FEATURE_LOCKSCREEN
#include "displays/gametrakcalibratedisplay.h" #include "displays/gametrakcalibratedisplay.h"
#endif
#include "displays/lockscreen.h" #include "displays/lockscreen.h"
#include "displays/metersdisplay.h" #include "displays/metersdisplay.h"
#include "displays/pingpongdisplay.h" #include "displays/pingpongdisplay.h"
@ -77,21 +92,33 @@ using namespace std::chrono_literals;
#include "displays/spirodisplay.h" #include "displays/spirodisplay.h"
#include "displays/starfielddisplay.h" #include "displays/starfielddisplay.h"
#include "displays/statusdisplay.h" #include "displays/statusdisplay.h"
#ifdef FEATURE_OTA
#include "displays/updatedisplay.h" #include "displays/updatedisplay.h"
#endif
#include "screens.h" #include "screens.h"
#include "dpad.h" #include "dpad.h"
#ifdef FEATURE_DPAD_3WIRESW
#include "dpad3wire.h" #include "dpad3wire.h"
#endif
#ifdef FEATURE_DPAD_5WIRESW
#include "dpad5wire.h" #include "dpad5wire.h"
#endif
#ifdef FEATURE_ROTARY
#include "rotary.h" #include "rotary.h"
#endif
#include "serialhandler.h" #include "serialhandler.h"
#ifdef FEATURE_OTA
#include "ota.h" #include "ota.h"
#endif
#include "presets.h" #include "presets.h"
#include "statistics.h" #include "statistics.h"
#ifdef FEATURE_BLUETOOTH #ifdef FEATURE_BLUETOOTH
#include "actions/bluetoothbeginaction.h" #include "actions/bluetoothbeginaction.h"
#include "actions/bluetoothbeginmasteraction.h" #include "actions/bluetoothbeginmasteraction.h"
#ifdef FEATURE_BMS
#include "actions/bluetoothconnectbmsaction.h" #include "actions/bluetoothconnectbmsaction.h"
#endif #endif
#endif
#ifdef FEATURE_BLE #ifdef FEATURE_BLE
#include "ble.h" #include "ble.h"
#endif #endif

View File

@ -234,6 +234,9 @@ StringSettings makeDefaultStringSettings()
#endif #endif
#ifdef FEATURE_OTA #ifdef FEATURE_OTA
.otaUrl = {}, .otaUrl = {},
#endif
#ifdef FEATURE_GARAGE
.garageUrl = "http://insecure.brunner.ninja/tor.php",
#endif #endif
}; };
} }

View File

@ -22,6 +22,10 @@ struct StringSettings
std::string otaUrl; std::string otaUrl;
#endif #endif
#ifdef FEATURE_GARAGE
std::string garageUrl;
#endif
template<typename T> template<typename T>
void executeForEveryCommonSetting(T &&callable); void executeForEveryCommonSetting(T &&callable);
@ -61,6 +65,10 @@ void StringSettings::executeForEveryCommonSetting(T &&callable)
#ifdef FEATURE_OTA #ifdef FEATURE_OTA
callable("otaUrl", otaUrl); callable("otaUrl", otaUrl);
#endif #endif
#ifdef FEATURE_GARAGE
callable("garageUrl", garageUrl);
#endif
} }
template<typename T> template<typename T>

View File

@ -79,6 +79,7 @@ constexpr char TEXT_SETTINGS[] = "Settings";
constexpr char TEXT_LOCKVEHICLE[] = "Lock vehicle"; constexpr char TEXT_LOCKVEHICLE[] = "Lock vehicle";
constexpr char TEXT_MOSFETS[] = "Mosfets"; constexpr char TEXT_MOSFETS[] = "Mosfets";
constexpr char TEXT_DEMOS[] = "Demos"; constexpr char TEXT_DEMOS[] = "Demos";
constexpr char TEXT_GARAGE[] = "Garage";
constexpr char TEXT_UPDATE[] = "Update"; constexpr char TEXT_UPDATE[] = "Update";
constexpr char TEXT_POWEROFF[] = "Poweroff"; constexpr char TEXT_POWEROFF[] = "Poweroff";
constexpr char TEXT_REBOOT[] = "Reboot"; constexpr char TEXT_REBOOT[] = "Reboot";

View File

@ -155,6 +155,18 @@ CONFIG_ARDUINO_SELECTIVE_SPI=y
CONFIG_ARDUINO_SELECTIVE_Wire=y CONFIG_ARDUINO_SELECTIVE_Wire=y
# end of Arduino Configuration # 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 # Simple WiFi Stack settings
# #