From 72ce9fb3a527b197fe1b597b29a979569501af91 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 6 Feb 2022 00:45:39 +0100 Subject: [PATCH 01/38] Rendering --- main/CMakeLists.txt | 2 + main/cloud.cpp | 215 ++++++++++++++++++++++---------- main/cloud.h | 11 ++ main/configutils_bobby.h | 12 +- main/configwrapper_bobby.cpp | 7 +- main/newsettings.h | 8 ++ main/remotedisplaywebsocket.cpp | 29 +++++ main/remotedisplaywebsocket.h | 39 ++++++ main/webserver_newsettings.cpp | 19 ++- 9 files changed, 269 insertions(+), 73 deletions(-) create mode 100644 main/remotedisplaywebsocket.cpp create mode 100644 main/remotedisplaywebsocket.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 14b9740..c93f056 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -225,6 +225,7 @@ set(headers presets.h profilesettings.h qrimport.h + remotedisplaywebsocket.h rotary.h screens.h serial_bobby.h @@ -473,6 +474,7 @@ set(sources presets.cpp profilesettings.cpp qrimport.cpp + remotedisplaywebsocket.cpp rotary.cpp screens.cpp serial_bobby.cpp diff --git a/main/cloud.cpp b/main/cloud.cpp index bef80a6..6098bbb 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -12,6 +12,7 @@ #include #include #include +#include // local includes #include "globals.h" @@ -34,10 +35,12 @@ std::string cloudBuffer; std::optional lastCloudCollect; std::optional lastCloudSend; +bool hasAnnouncedItself{}; + void initCloud() { if (configs.cloudSettings.cloudEnabled.value() && - !configs.cloudUrl.value().empty()) + !configs.cloudUrl.value().empty() && configs.cloudSettings.cloudMode.value() != CloudMode::INACTIVE) { createCloud(); if (!cloudClient) @@ -92,84 +95,87 @@ void cloudCollect() return; } - if (cloudBuffer.empty()) - cloudBuffer = '['; - else - cloudBuffer += ','; - - cloudBuffer += fmt::format("[{},{},{}", - std::chrono::floor(espchrono::millis_clock::now().time_since_epoch()).count(), - std::chrono::floor(espchrono::utc_clock::now().time_since_epoch()).count(), - heap_caps_get_free_size(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT)); - if (wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::CONNECTED) + if (configs.cloudSettings.cloudMode.value == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) { - if (const auto &result = wifi_stack::get_sta_ap_info(); result) - cloudBuffer += fmt::format(",{}", result->rssi); + if (cloudBuffer.empty()) + cloudBuffer = '['; + else + cloudBuffer += ','; + + cloudBuffer += fmt::format("[{},{},{}", + std::chrono::floor(espchrono::millis_clock::now().time_since_epoch()).count(), + std::chrono::floor(espchrono::utc_clock::now().time_since_epoch()).count(), + heap_caps_get_free_size(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT)); + if (wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::CONNECTED) + { + if (const auto &result = wifi_stack::get_sta_ap_info(); result) + cloudBuffer += fmt::format(",{}", result->rssi); + else + cloudBuffer += ",null"; + } else cloudBuffer += ",null"; - } - else - cloudBuffer += ",null"; - if (raw_gas) - cloudBuffer += fmt::format(",{}", *raw_gas); - else - cloudBuffer += ",null"; - - if (raw_brems) - cloudBuffer += fmt::format(",{}", *raw_brems); - else - cloudBuffer += ",null"; - - if (gas) - cloudBuffer += fmt::format(",{:.1f}", *gas); - else - cloudBuffer += ",null"; - - if (brems) - cloudBuffer += fmt::format(",{:.1f}", *brems); - else - cloudBuffer += ",null"; - - constexpr const auto addController = [](const Controller &controller){ - if (!controller.feedbackValid) - { + if (raw_gas) + cloudBuffer += fmt::format(",{}", *raw_gas); + else cloudBuffer += ",null"; - return; - } - cloudBuffer += fmt::format(",[{:.02f},{:.02f}", - controller.getCalibratedVoltage(), - fixBoardTemp(controller.feedback.boardTemp)); + if (raw_brems) + cloudBuffer += fmt::format(",{}", *raw_brems); + else + cloudBuffer += ",null"; - constexpr const auto addMotor = [](const bobbycar::protocol::serial::MotorState &command, - const bobbycar::protocol::serial::MotorFeedback &feedback, - bool invert){ - cloudBuffer += fmt::format(",[{},{:.2f},{:.2f},{}]", - command.pwm * (invert?-1:1), - convertToKmh(feedback.speed) * (invert?-1:1), - fixCurrent(feedback.dcLink), - feedback.error); + if (gas) + cloudBuffer += fmt::format(",{:.1f}", *gas); + else + cloudBuffer += ",null"; + + if (brems) + cloudBuffer += fmt::format(",{:.1f}", *brems); + else + cloudBuffer += ",null"; + + constexpr const auto addController = [](const Controller &controller){ + if (!controller.feedbackValid) + { + cloudBuffer += ",null"; + return; + } + + cloudBuffer += fmt::format(",[{:.02f},{:.02f}", + controller.getCalibratedVoltage(), + fixBoardTemp(controller.feedback.boardTemp)); + + constexpr const auto addMotor = [](const bobbycar::protocol::serial::MotorState &command, + const bobbycar::protocol::serial::MotorFeedback &feedback, + bool invert){ + cloudBuffer += fmt::format(",[{},{:.2f},{:.2f},{}]", + command.pwm * (invert?-1:1), + convertToKmh(feedback.speed) * (invert?-1:1), + fixCurrent(feedback.dcLink), + feedback.error); + }; + + addMotor(controller.command.left, controller.feedback.left, controller.invertLeft); + addMotor(controller.command.right, controller.feedback.right, controller.invertRight); + + cloudBuffer += ']'; }; - addMotor(controller.command.left, controller.feedback.left, controller.invertLeft); - addMotor(controller.command.right, controller.feedback.right, controller.invertRight); + addController(controllers.front); + addController(controllers.back); - cloudBuffer += ']'; - }; + //cloudBuffer += fmt::format("", ); - addController(controllers.front); - addController(controllers.back); - - //cloudBuffer += fmt::format("", ); - - cloudBuffer += "]"; + cloudBuffer += "]"; + } } void cloudSend() { if (configs.cloudSettings.cloudEnabled.value() && - !configs.cloudUrl.value().empty()) + !configs.cloudUrl.value().empty() && (configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY)) { if (!cloudClient) { @@ -215,7 +221,81 @@ void cloudSend() cloudBuffer.clear(); } - else if (cloudClient) + else if (cloudClient && !configs.cloudSettings.cloudEnabled.value) + { + destroyCloud(); + } +} + +std::string getLoginMessage() +{ + using namespace espgui; + return fmt::format("{{\"type\": \"hello\", \"name\": \"{}\", \"res\": \"{}x{}\", \"pass\": \"{}\", \"key\": \"{}\"}}", + configs.otaUsername.value, tft.width(), tft.height(), configs.webserverPassword.value, configs.cloudSettings.cloudKey.value); +} + + +void cloudSendDisplay(std::string_view data) +{ + if (configs.cloudSettings.cloudEnabled.value && + !configs.cloudUrl.value.empty() && configs.cloudSettings.cloudMode.value != CloudMode::INACTIVE) + { + if (!cloudClient) + { + if (espchrono::ago(lastCreateTry) < 10s) + return; + createCloud(); + } + if (!cloudClient) + return; + + if (!cloudStarted) + { + if (espchrono::ago(lastStartTry) < 10s) + return; + + if (wifi_stack::get_sta_status() != wifi_stack::WiFiStaStatus::CONNECTED) + return; + + startCloud(); + } + if (!cloudStarted) + return; + + if (!cloudClient.is_connected()) + return; + + auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value}).count(); + int written; + if (!hasAnnouncedItself) + { + std::string helloWorld = getLoginMessage(); + ESP_LOGW(TAG, "%s", helloWorld.c_str()); + written = cloudClient.send_text(helloWorld, timeout); + if (written == helloWorld.size()) + { + hasAnnouncedItself = true; + timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value}).count(); + } + } + + if (hasAnnouncedItself) + written = cloudClient.send_text(data, timeout); + else + return; + ESP_LOGW(TAG, "%s", fmt::format("{}", data).c_str()); + + if (written < 0) + { + ESP_LOGE("BOBBY", "cloudClient.send_text() failed with %i", written); + hasAnnouncedItself = false; + } + else if (written != data.size()) + { + ESP_LOGE("BOBBY", "websocket sent size mismatch, sent=%i, expected=%i", written, data.size()); + } + } + else if (cloudClient && !configs.cloudSettings.cloudEnabled.value) { destroyCloud(); } @@ -223,6 +303,7 @@ void cloudSend() void createCloud() { + hasAnnouncedItself = false; ESP_LOGI("BOBBY", "called"); if (cloudClient) @@ -239,6 +320,10 @@ void createCloud() cloudClient = espcpputils::websocket_client{&config}; + cloudClient.register_events(WEBSOCKET_EVENT_CONNECTED, [](void* event_handler_arg, esp_event_base_t event_base, int32_t event_id, void* event_data){ + hasAnnouncedItself = false; + }, nullptr); + if (!cloudClient) { ESP_LOGE(TAG, "websocket could not be constructed"); @@ -250,6 +335,7 @@ void createCloud() void startCloud() { + hasAnnouncedItself = false; ESP_LOGI("BOBBY", "called"); if (!cloudClient) @@ -275,6 +361,7 @@ void startCloud() void destroyCloud() { + hasAnnouncedItself = false; ESP_LOGI("BOBBY", "called"); if (!cloudClient) diff --git a/main/cloud.h b/main/cloud.h index 7ffb4c3..a1c2965 100644 --- a/main/cloud.h +++ b/main/cloud.h @@ -5,6 +5,7 @@ // 3rdparty lib includes #include +#include #include extern espcpputils::websocket_client cloudClient; @@ -13,6 +14,13 @@ extern espchrono::millis_clock::time_point lastCreateTry; extern espchrono::millis_clock::time_point lastStartTry; extern std::string cloudBuffer; +#define CloudModeValues(x) \ + x(INACTIVE) \ + x(STATISTICS) \ + x(REMOTE_DISPLAY) \ + x(STATISTICS_AND_REMOTE_DISPLAY) +DECLARE_TYPESAFE_ENUM(CloudMode, : uint8_t, CloudModeValues) + void createCloud(); void destroyCloud(); void startCloud(); @@ -21,3 +29,6 @@ void initCloud(); void updateCloud(); void cloudCollect(); void cloudSend(); +void cloudSendDisplay(std::string_view data); + +std::string getLoginMessage(); diff --git a/main/configutils_bobby.h b/main/configutils_bobby.h index 9a2ddcb..48faa3c 100644 --- a/main/configutils_bobby.h +++ b/main/configutils_bobby.h @@ -6,12 +6,14 @@ // local includes #include "battery.h" -#include "ledstrip.h" -#include "handbremse.h" #include "bobbyquickactions.h" +#include "cloud.h" +#include "handbremse.h" +#include "ledstrip.h" -IMPLEMENT_NVS_GET_SET_ENUM(OtaAnimationModes) +IMPLEMENT_NVS_GET_SET_ENUM(BatteryCellType) +IMPLEMENT_NVS_GET_SET_ENUM(BobbyQuickActions) +IMPLEMENT_NVS_GET_SET_ENUM(CloudMode) IMPLEMENT_NVS_GET_SET_ENUM(HandbremseMode) IMPLEMENT_NVS_GET_SET_ENUM(LedstripAnimation) -IMPLEMENT_NVS_GET_SET_ENUM(BobbyQuickActions) -IMPLEMENT_NVS_GET_SET_ENUM(BatteryCellType) +IMPLEMENT_NVS_GET_SET_ENUM(OtaAnimationModes) diff --git a/main/configwrapper_bobby.cpp b/main/configwrapper_bobby.cpp index b31e2a2..7214090 100644 --- a/main/configwrapper_bobby.cpp +++ b/main/configwrapper_bobby.cpp @@ -4,8 +4,9 @@ #define CONFIGWRAPPER_TOSTRING_USINGS using ::toString; #include -INSTANTIATE_CONFIGWRAPPER_TEMPLATES(OtaAnimationModes) +INSTANTIATE_CONFIGWRAPPER_TEMPLATES(BatteryCellType) +INSTANTIATE_CONFIGWRAPPER_TEMPLATES(BobbyQuickActions) +INSTANTIATE_CONFIGWRAPPER_TEMPLATES(CloudMode) INSTANTIATE_CONFIGWRAPPER_TEMPLATES(HandbremseMode) INSTANTIATE_CONFIGWRAPPER_TEMPLATES(LedstripAnimation) -INSTANTIATE_CONFIGWRAPPER_TEMPLATES(BobbyQuickActions) -INSTANTIATE_CONFIGWRAPPER_TEMPLATES(BatteryCellType) +INSTANTIATE_CONFIGWRAPPER_TEMPLATES(OtaAnimationModes) diff --git a/main/newsettings.h b/main/newsettings.h index c3311bd..0b4e5e0 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -27,6 +27,10 @@ #include "handbremse.h" #include "ledstrip.h" #include "unifiedmodelmode.h" +#include "displays/lockscreen.h" +#include "handbremse.h" +#include "bobbyquickactions.h" +#include "cloud.h" using namespace espconfig; @@ -361,6 +365,8 @@ public: struct { ConfigWrapperLegacy cloudEnabled {false, DoReset, {}, "cloudEnabled" }; ConfigWrapperLegacy cloudTransmitTimeout{10, DoReset, {}, "clodTransmTmout" }; + ConfigWrapperLegacy cloudMode {CloudMode::INACTIVE, DoReset, {}, "cloudMode" }; + ConfigWrapperLegacy cloudKey {std::string{}, DoReset, {}, "cloudKey" }; } cloudSettings; struct { @@ -702,6 +708,8 @@ public: \ x(cloudSettings.cloudEnabled) \ x(cloudSettings.cloudTransmitTimeout) \ + x(cloudSettings.cloudMode) \ + x(cloudSettings.cloudKey) \ \ x(udpCloudSettings.udpUid) \ x(udpCloudSettings.udpCloudEnabled) \ diff --git a/main/remotedisplaywebsocket.cpp b/main/remotedisplaywebsocket.cpp new file mode 100644 index 0000000..892afda --- /dev/null +++ b/main/remotedisplaywebsocket.cpp @@ -0,0 +1,29 @@ +#include "remotedisplaywebsocket.h" +/* +// local includes +#include "cloud.h" + +void handleDrawPixel(uint16_t x, uint16_t y, uint16_t color) +{ +} + +void handleDrawRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) +{ + cloudSendDisplay(fmt::format("{\"type\":\"drawRect\",\"x\":{},\"y\":{},\"w\":{},\"h\":{},\"C\":\"{}\"}", x, y, width, height, color)); +} + +void handleFillRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) +{ + cloudSendDisplay(fmt::format("{\"type\":\"fillRect\",\"x\":{},\"y\":{},\"w\":{},\"h\":{},\"C\":\"{}\"}", x, y, width, height, color)); +} + +void handleDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) +{ + cloudSendDisplay(fmt::format("{\"type\":\"drawLine\",\"x1\":{},\"y1\":{},\"x2\":{},\"y2\":{},\"C\":\"{}\"}", x1, y1, x2, y2, color)); +} + +void handleFillScreen(uint16_t color) +{ + cloudSendDisplay(fmt::format("{\"type\":\"fillScreen\",\"C\":\"{}\"}", color)); +} +*/ diff --git a/main/remotedisplaywebsocket.h b/main/remotedisplaywebsocket.h new file mode 100644 index 0000000..b3c8e96 --- /dev/null +++ b/main/remotedisplaywebsocket.h @@ -0,0 +1,39 @@ +#pragma once + +// system includes +#include +#include +#include + +void cloudSendDisplay(std::string_view data); + +void handleDrawPixel(uint16_t x, uint16_t y, uint16_t color); +void handleDrawRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color); +void handleFillRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color); +void handleDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); +void handleFillScreen(uint16_t color); + +void handleDrawPixel(uint16_t x, uint16_t y, uint16_t color) +{ + cloudSendDisplay(fmt::format("{{\"type\":\"drawPixel\",\"x\":{},\"y\":{},\"C\":\"{}\"}}", x, y, color)); +} + +void handleDrawRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) +{ + cloudSendDisplay(fmt::format("{{\"type\":\"drawRect\",\"x\":{},\"y\":{},\"w\":{},\"h\":{},\"C\":\"{}\"}}", x, y, width, height, color)); +} + +void handleFillRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) +{ + cloudSendDisplay(fmt::format("{{\"type\":\"fillRect\",\"x\":{},\"y\":{},\"w\":{},\"h\":{},\"C\":\"{}\"}}", x, y, width, height, color)); +} + +void handleDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) +{ + cloudSendDisplay(fmt::format("{{\"type\":\"drawLine\",\"x1\":{},\"y1\":{},\"x2\":{},\"y2\":{},\"C\":\"{}\"}}", x1, y1, x2, y2, color)); +} + +void handleFillScreen(uint16_t color) +{ + cloudSendDisplay(fmt::format("{{\"type\":\"fillScreen\",\"C\":\"{}\"}}", color)); +} diff --git a/main/webserver_newsettings.cpp b/main/webserver_newsettings.cpp index 691374b..45d91e8 100644 --- a/main/webserver_newsettings.cpp +++ b/main/webserver_newsettings.cpp @@ -52,6 +52,7 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v && !std::is_same_v && + !std::is_same_v && !std::is_same_v , void>::type showInputForSetting(std::string_view key, T value, std::string &body) @@ -255,6 +256,20 @@ showInputForSetting(std::string_view key, T value, std::string &body) body += esphttpdutils::htmlentities(enumKey); }); } + +template +typename std::enable_if< + std::is_same_v +, void>::type +showInputForSetting(std::string_view key, T value, std::string &body) +{ + HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; + + iterateCloudMode([&](T enumVal, std::string_view enumKey){ + HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(enumVal), value == enumVal ? " selected" : ""), body}; + body += esphttpdutils::htmlentities(enumKey); + }); +} } // namespace esp_err_t webserver_newSettings_handler(httpd_req_t *req) @@ -392,6 +407,7 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v && !std::is_same_v && + !std::is_same_v && !std::is_same_v , tl::expected>::type saveSetting(ConfigWrapper &config, std::string_view newValue) @@ -479,7 +495,8 @@ typename std::enable_if< std::is_same_v || std::is_same_v || std::is_same_v || - std::is_same_v + std::is_same_v || + std::is_same_v , tl::expected>::type saveSetting(ConfigWrapper &config, std::string_view newValue) { From 6f6966d13e960ba29d6b0f79283626c609be367e Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Fri, 18 Mar 2022 11:30:06 +0100 Subject: [PATCH 02/38] Some enhancements --- main/accessors/settingsaccessors.h | 1 + main/cloud.cpp | 2 +- main/cloud.h | 6 ++++-- main/displays/menus/cloudsettingsmenu.cpp | 17 ++++++++++------- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index 242ffa2..7b9c7a5 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -44,6 +44,7 @@ struct BleFenceEnabledAccessor : public NewSettingsAccessor { ConfigWrappe // Cloud struct CloudEnabledAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.cloudEnabled; } }; struct CloudTransmitTimeoutAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.cloudTransmitTimeout; } }; +struct CloudModeAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.cloudMode; } }; // Time //struct TimezoneOffsetAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.timezoneOffset; } }; diff --git a/main/cloud.cpp b/main/cloud.cpp index 6098bbb..fc8595b 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -230,7 +230,7 @@ void cloudSend() std::string getLoginMessage() { using namespace espgui; - return fmt::format("{{\"type\": \"hello\", \"name\": \"{}\", \"res\": \"{}x{}\", \"pass\": \"{}\", \"key\": \"{}\"}}", + return fmt::format(R"({{"type": "hello", "name": "{}", "res": "{}x{}", "pass": "{}", "key": "{}"}})", configs.otaUsername.value, tft.width(), tft.height(), configs.webserverPassword.value, configs.cloudSettings.cloudKey.value); } diff --git a/main/cloud.h b/main/cloud.h index a1c2965..bd2412e 100644 --- a/main/cloud.h +++ b/main/cloud.h @@ -5,9 +5,11 @@ // 3rdparty lib includes #include -#include #include +// local includes +#include "bobbytypesafeenum.h" + extern espcpputils::websocket_client cloudClient; extern bool cloudStarted; extern espchrono::millis_clock::time_point lastCreateTry; @@ -19,7 +21,7 @@ extern std::string cloudBuffer; x(STATISTICS) \ x(REMOTE_DISPLAY) \ x(STATISTICS_AND_REMOTE_DISPLAY) -DECLARE_TYPESAFE_ENUM(CloudMode, : uint8_t, CloudModeValues) +DECLARE_BOBBYTYPESAFE_ENUM(CloudMode, : uint8_t, CloudModeValues) void createCloud(); void destroyCloud(); diff --git a/main/displays/menus/cloudsettingsmenu.cpp b/main/displays/menus/cloudsettingsmenu.cpp index 799464e..ee4541e 100644 --- a/main/displays/menus/cloudsettingsmenu.cpp +++ b/main/displays/menus/cloudsettingsmenu.cpp @@ -10,17 +10,19 @@ #include "icons/back.h" // local includes -#include "displays/bobbychangevaluedisplay.h" -#include "cloudtexthelpers.h" #include "accessors/settingsaccessors.h" -#include "cloud.h" -#include "displays/menus/settingsmenu.h" #include "bobbycheckbox.h" +#include "cloud.h" +#include "cloudtexthelpers.h" +#include "displays/bobbychangevaluedisplay.h" +#include "displays/menus/settingsmenu.h" +#include "displays/menus/typesafeenumchangemenu.h" namespace { constexpr char TEXT_CLOUDSETTINGS[] = "Cloud settings"; constexpr char TEXT_CLOUDENABLED[] = "Cloud enabled"; constexpr char TEXT_CLOUDTRANSMITTIMEOUT[] = "Transmit timeout"; +constexpr char TEXT_CLOUDMODE[] = "Cloud mode"; constexpr char TEXT_CLOUDCOLLECTRATE[] = "Cloud collect rate"; constexpr char TEXT_CLOUDSENDRATE[] = "Cloud send rate"; constexpr char TEXT_BACK[] = "Back"; @@ -69,9 +71,10 @@ CloudSettingsMenu::CloudSettingsMenu() constructMenuItem>(); constructMenuItem>(); constructMenuItem>(); - constructMenuItem, PushScreenAction>>(); - constructMenuItem, PushScreenAction>>(); - constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem>(&configs.cloudSettings.cloudMode); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string CloudSettingsMenu::text() const From 5d4655b549b952f32529443d5ff03600bd8a01e8 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 3 Apr 2022 21:04:09 +0200 Subject: [PATCH 03/38] Made some changes so it will work without TFT_eSPI hack --- main/cloud.cpp | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/main/cloud.cpp b/main/cloud.cpp index fc8595b..392391a 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -40,15 +40,12 @@ bool hasAnnouncedItself{}; void initCloud() { if (configs.cloudSettings.cloudEnabled.value() && - !configs.cloudUrl.value().empty() && configs.cloudSettings.cloudMode.value() != CloudMode::INACTIVE) + !configs.cloudUrl.value().empty() && configs.cloudSettings.cloudMode.value() != CloudMode::INACTIVE && wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::CONNECTED) { createCloud(); if (!cloudClient) return; - if (wifi_stack::get_sta_status() != wifi_stack::WiFiStaStatus::CONNECTED) - return; - startCloud(); } } @@ -60,11 +57,14 @@ void updateCloud() const auto now = espchrono::millis_clock::now(); - if (!lastCloudCollect || now - *lastCloudCollect >= std::chrono::milliseconds{configs.boardcomputerHardware.timersSettings.cloudCollectRate.value()}) + if (configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) { - cloudCollect(); + if (!lastCloudCollect || now - *lastCloudCollect >= std::chrono::milliseconds{ + configs.boardcomputerHardware.timersSettings.cloudCollectRate.value()}) { + cloudCollect(); - lastCloudCollect = now; + lastCloudCollect = now; + } } if (!lastCloudSend || now - *lastCloudSend >= 1000ms/configs.boardcomputerHardware.timersSettings.cloudSendRate.value()) @@ -175,7 +175,7 @@ void cloudCollect() void cloudSend() { if (configs.cloudSettings.cloudEnabled.value() && - !configs.cloudUrl.value().empty() && (configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY)) + !configs.cloudUrl.value().empty() && (configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) || ((configs.cloudSettings.cloudMode.value() == CloudMode::REMOTE_DISPLAY || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) && !hasAnnouncedItself)) { if (!cloudClient) { @@ -196,18 +196,29 @@ void cloudSend() startCloud(); } + if (!cloudStarted) return; if (!cloudClient.is_connected()) return; - if (cloudBuffer.empty()) + if (cloudBuffer.empty() && hasAnnouncedItself) return; cloudBuffer += ']'; const auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + + if (!hasAnnouncedItself) + { + std::string helloWorld = getLoginMessage(); + ESP_LOGW(TAG, "=====> %s", helloWorld.c_str()); + const auto written_helloWorld = cloudClient.send_text(helloWorld, timeout); + if (written_helloWorld == helloWorld.size()) + hasAnnouncedItself = true; + } + const auto written = cloudClient.send_text(cloudBuffer, timeout); if (written < 0) @@ -225,13 +236,17 @@ void cloudSend() { destroyCloud(); } + else if(!cloudClient || !cloudStarted) + { + initCloud(); + } } std::string getLoginMessage() { using namespace espgui; return fmt::format(R"({{"type": "hello", "name": "{}", "res": "{}x{}", "pass": "{}", "key": "{}"}})", - configs.otaUsername.value, tft.width(), tft.height(), configs.webserverPassword.value, configs.cloudSettings.cloudKey.value); + configs.otaUsername.value(), tft.width(), tft.height(), configs.webserverPassword.value(), configs.cloudSettings.cloudKey.value()); } @@ -267,17 +282,6 @@ void cloudSendDisplay(std::string_view data) auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value}).count(); int written; - if (!hasAnnouncedItself) - { - std::string helloWorld = getLoginMessage(); - ESP_LOGW(TAG, "%s", helloWorld.c_str()); - written = cloudClient.send_text(helloWorld, timeout); - if (written == helloWorld.size()) - { - hasAnnouncedItself = true; - timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value}).count(); - } - } if (hasAnnouncedItself) written = cloudClient.send_text(data, timeout); From 83ea64a086afb28b02bb14f91770a8fa8afdd653 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Mon, 18 Apr 2022 01:21:32 +0200 Subject: [PATCH 04/38] Added popup handler --- main/cloud.cpp | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/main/cloud.cpp b/main/cloud.cpp index 392391a..1eda5a1 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -7,17 +7,19 @@ #include // 3rdparty lib includes -#include +#include #include +#include #include +#include #include #include -#include // local includes +#include "bobbyerrorhandler.h" #include "globals.h" -#include "utils.h" #include "newsettings.h" +#include "utils.h" using namespace std::chrono_literals; @@ -328,6 +330,39 @@ void createCloud() hasAnnouncedItself = false; }, nullptr); + cloudClient.register_events(WEBSOCKET_EVENT_DATA, [](void* event_handler_arg, esp_event_base_t event_base, int32_t event_id, void* event_data){ + using namespace ArduinoJson; + auto data = static_cast(event_data); + + if (data->op_code != 1) // text + return; + + StaticJsonDocument<768> doc; + if (const auto err = deserializeJson(doc, data->data_ptr, data->data_len); err) + { + ESP_LOGE(TAG, "deserializeJson() failed with %s", err.c_str()); + return; + } + + const std::string type = doc["type"]; + if (type == "popup") + { + std::string text = doc["msg"]; + std::string id = doc["id"]; + ESP_LOGI(TAG, "popup: %s, id: %s", text.c_str(), id.c_str()); + BobbyErrorHandler{}.errorOccured(std::move(text)); + + if (id.empty()) + return; + + auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value}).count(); + const auto message = fmt::format(R"({{"type":"response","id":"{}"}})", id); + ESP_LOGI(TAG, "sending response: %s", message.c_str()); + cloudClient.send_text(message, timeout); + return; + } + }, nullptr); + if (!cloudClient) { ESP_LOGE(TAG, "websocket could not be constructed"); From cab4dd2ca13ae6ff4315ad315fffdbd9e6d255e9 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sat, 21 May 2022 14:16:32 +0200 Subject: [PATCH 05/38] New config lib fixes --- main/cloud.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/main/cloud.cpp b/main/cloud.cpp index 1eda5a1..f94e6b8 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -97,7 +97,7 @@ void cloudCollect() return; } - if (configs.cloudSettings.cloudMode.value == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) + if (configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) { if (cloudBuffer.empty()) cloudBuffer = '['; @@ -234,7 +234,7 @@ void cloudSend() cloudBuffer.clear(); } - else if (cloudClient && !configs.cloudSettings.cloudEnabled.value) + else if (cloudClient && !configs.cloudSettings.cloudEnabled.value()) { destroyCloud(); } @@ -254,8 +254,8 @@ std::string getLoginMessage() void cloudSendDisplay(std::string_view data) { - if (configs.cloudSettings.cloudEnabled.value && - !configs.cloudUrl.value.empty() && configs.cloudSettings.cloudMode.value != CloudMode::INACTIVE) + if (configs.cloudSettings.cloudEnabled.value() && + !configs.cloudUrl.value().empty() && configs.cloudSettings.cloudMode.value() != CloudMode::INACTIVE) { if (!cloudClient) { @@ -282,7 +282,7 @@ void cloudSendDisplay(std::string_view data) if (!cloudClient.is_connected()) return; - auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value}).count(); + auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); int written; if (hasAnnouncedItself) @@ -301,7 +301,7 @@ void cloudSendDisplay(std::string_view data) ESP_LOGE("BOBBY", "websocket sent size mismatch, sent=%i, expected=%i", written, data.size()); } } - else if (cloudClient && !configs.cloudSettings.cloudEnabled.value) + else if (cloudClient && !configs.cloudSettings.cloudEnabled.value()) { destroyCloud(); } @@ -355,7 +355,7 @@ void createCloud() if (id.empty()) return; - auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value}).count(); + auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); const auto message = fmt::format(R"({{"type":"response","id":"{}"}})", id); ESP_LOGI(TAG, "sending response: %s", message.c_str()); cloudClient.send_text(message, timeout); From 9068be4a2da32c5310d079f0c8e3982c195fd447 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 26 May 2022 19:26:27 +0200 Subject: [PATCH 06/38] Fixed compiling --- main/displays/menus/cloudsettingsmenu.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/main/displays/menus/cloudsettingsmenu.cpp b/main/displays/menus/cloudsettingsmenu.cpp index ee4541e..8f50037 100644 --- a/main/displays/menus/cloudsettingsmenu.cpp +++ b/main/displays/menus/cloudsettingsmenu.cpp @@ -71,10 +71,10 @@ CloudSettingsMenu::CloudSettingsMenu() constructMenuItem>(); constructMenuItem>(); constructMenuItem>(); - constructMenuItem>(&configs.cloudSettings.cloudMode); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem>(&configs.cloudSettings.cloudMode); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string CloudSettingsMenu::text() const From 8a8f8004478a9f1d787267056f870046957b15fb Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 29 May 2022 19:40:12 +0200 Subject: [PATCH 07/38] Formatting, also added new defaults --- main/newsettings.h | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/main/newsettings.h b/main/newsettings.h index 0b4e5e0..35819bd 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -201,6 +201,11 @@ public: url {std::string{}, DoReset, StringOr, urlKey } {} + ConfiguredOtaServer(const char *nameKey, const char *urlKey, const char *default_name, const char *default_url) : + name{default_name, DoReset, {}, nameKey }, + url {default_url, DoReset, StringOr, urlKey } + {} + ConfigWrapperLegacy name; ConfigWrapperLegacy url; }; @@ -274,7 +279,7 @@ public: ConfigWrapperLegacy deadband {20, DoReset, MinMaxValue,"deadband" }; ConfigWrapperLegacy dpadDebounce {25, DoReset, {}, "dpadDebounce" }; - ConfigWrapperLegacy buttonReadDelay {1, DoReset, {}, "buttonDelay" }; + ConfigWrapperLegacy buttonReadDelay {20, DoReset, {}, "buttonDelay" }; ConfigWrapperLegacy dpadMappingLeft {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapLeft" }; ConfigWrapperLegacy dpadMappingRight {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapRight" }; @@ -293,15 +298,15 @@ public: ConfigWrapperLegacy dpadMappingExtra3 {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapExtra3" }; ConfigWrapperLegacy dpadMappingExtra4 {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapExtra4" }; - ConfigWrapperLegacy quickActionLeft2{ BobbyQuickActions::BLINK_LEFT, DoReset, {}, "quickActleft2" }; + ConfigWrapperLegacy quickActionLeft2 { BobbyQuickActions::BLINK_LEFT, DoReset, {}, "quickActleft2" }; ConfigWrapperLegacy quickActionRight2{ BobbyQuickActions::BLINK_RIGHT, DoReset, {}, "quickActright2" }; - ConfigWrapperLegacy quickActionUp2{ BobbyQuickActions::NONE, DoReset, {}, "quickActup2" }; - ConfigWrapperLegacy quickActionDown2{ BobbyQuickActions::HANDBREMSE, DoReset, {}, "quickActdown2" }; + ConfigWrapperLegacy quickActionUp2 { BobbyQuickActions::NONE, DoReset, {}, "quickActup2" }; + ConfigWrapperLegacy quickActionDown2 { BobbyQuickActions::HANDBREMSE, DoReset, {}, "quickActdown2" }; ConfigWrapperLegacy quickActionExtra1{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra1" }; ConfigWrapperLegacy quickActionExtra2{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra2" }; ConfigWrapperLegacy quickActionExtra3{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra3" }; ConfigWrapperLegacy quickActionExtra4{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra4" }; - +. std::array wireless_door_configs { WirelessDoorsConfig { "door_id0", "door_token0" }, WirelessDoorsConfig { "door_id1", "door_token1" }, @@ -318,15 +323,15 @@ public: ConfigWrapperLegacy reverseBeepDuration0{500, DoReset, {}, "revBeepDur0" }; ConfigWrapperLegacy reverseBeepDuration1{500, DoReset, {}, "revBeepDur1" }; - ConfigWrapperLegacy cloudUrl {std::string{}, DoReset, StringOr, "cloudUrl" }; - ConfigWrapperLegacy udpCloudHost {std::string{}, DoReset, {}, "udpCloudHost" }; + ConfigWrapperLegacy cloudUrl {"ws://api.bobbycar.cloud/ws", DoReset, StringOr, "cloudUrl" }; + ConfigWrapperLegacy udpCloudHost {"updates.bobbycar.cloud", DoReset, {}, "udpCloudHost" }; ConfigWrapperLegacy otaUrl {std::string{}, DoReset, StringOr, "otaUrl" }; - ConfigWrapperLegacy otaUsername {std::string{BOBBY_DEFAULT_OTA_NAME}, DoReset, {}, "otaUsername" }; + ConfigWrapperLegacy otaUsername {std::string{BOBBY_DEFAULT_OTA_NAME}, DoReset, {}, "otaUsername" }; ConfigWrapperLegacy otaServerUrl {std::string{}, DoReset, StringOr, "otaServerUrl" }; ConfigWrapperLegacy otaServerBranch {std::string{}, DoReset, {}, "otaServerBranch" }; std::array otaServers { - ConfiguredOtaServer { "otaName0", "otaUrl0" }, + ConfiguredOtaServer { "otaName0", "otaUrl0", "bobbycloud", "http://updates.bobbycar.cloud" }, ConfiguredOtaServer { "otaName1", "otaUrl1" }, ConfiguredOtaServer { "otaName2", "otaUrl2" }, ConfiguredOtaServer { "otaName3", "otaUrl3" }, @@ -335,7 +340,7 @@ public: ConfigWrapperLegacy dns_announce_enabled{true, DoReset, {}, "dnsAnnounceEnab" }; ConfigWrapperLegacy dns_announce_key {std::string{}, DoReset, {}, "dnsAnnounceKey" }; - ConfigWrapperLegacy webserverPassword {std::string{}, DoReset, {}, "websPassword" }; + ConfigWrapperLegacy webserverPassword {"Passwort_123", DoReset, {}, "websPassword" }; struct { ConfigWrapperLegacy wheelDiameter {DEFAULT_WHEELDIAMETER, DoReset, {}, "wheelDiameter" }; From c0069006cde264210ff10feac385f312bc61579a Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 29 May 2022 23:54:14 +0200 Subject: [PATCH 08/38] Fixed compiling by removing dot --- main/newsettings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/newsettings.h b/main/newsettings.h index 35819bd..21cf7b2 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -306,7 +306,7 @@ public: ConfigWrapperLegacy quickActionExtra2{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra2" }; ConfigWrapperLegacy quickActionExtra3{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra3" }; ConfigWrapperLegacy quickActionExtra4{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra4" }; -. + std::array wireless_door_configs { WirelessDoorsConfig { "door_id0", "door_token0" }, WirelessDoorsConfig { "door_id1", "door_token1" }, From 12261a815fa94f797a1bf4925aeb92bbef7ea3ad Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 29 May 2022 23:54:28 +0200 Subject: [PATCH 09/38] Implemented websocket cloud system --- main/cloud.cpp | 532 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 492 insertions(+), 40 deletions(-) diff --git a/main/cloud.cpp b/main/cloud.cpp index f94e6b8..365f132 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -23,11 +24,6 @@ using namespace std::chrono_literals; -namespace { -constexpr const char * const TAG = "BOBBYCLOUD"; -} // namespace - - espcpputils::websocket_client cloudClient; bool cloudStarted{}; espchrono::millis_clock::time_point lastCreateTry; @@ -36,9 +32,372 @@ std::string cloudBuffer; std::optional lastCloudCollect; std::optional lastCloudSend; +std::optional lastHeartbeat; bool hasAnnouncedItself{}; +namespace { +constexpr const char * const TAG = "BOBBYCLOUD"; +constexpr const auto json_document_size = 256; +StaticJsonDocument doc; + +template +struct is_duration : std::false_type {}; + +template +struct is_duration> : std::true_type {}; + +template +inline constexpr bool is_duration_v = is_duration<_Tp>::value; + +template +typename std::enable_if< + !std::is_same_v && + !std::is_integral_v && + !is_duration_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v> && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = nullptr; +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = value; +} + +template +typename std::enable_if< + !std::is_same_v && + std::is_integral_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = value; +} + +template +typename std::enable_if< + is_duration_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = value.count(); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = value.data(); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = wifi_stack::toString(value); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = wifi_stack::toString(value); +} + +template +typename std::enable_if< + std::is_same_v> + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = value ? wifi_stack::toString(*value) : std::string{}; +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = wifi_stack::toString(value); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = std::to_underlying(value); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = std::to_underlying(value); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = std::to_underlying(value); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = std::to_underlying(value); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = std::to_underlying(value); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = std::to_underlying(value); +} + +template +typename std::enable_if< + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +{ + doc[key.data()] = std::to_underlying(value); +} + + +template +typename std::enable_if< + !std::is_same_v && + !std::is_integral_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v> && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v + , tl::expected>::type +set_config(ConfigWrapper &config, std::string_view newValue) +{ + return tl::make_unexpected("Unsupported config type"); +} + +template +typename std::enable_if< + std::is_same_v + , tl::expected>::type +set_config(ConfigWrapper &config, std::string_view newValue) +{ + if (cpputils::is_in(newValue, "true", "false")) + return configs.write_config(config, newValue == "true"); + else + return tl::make_unexpected(fmt::format("only true and false allowed, not {}", newValue)); +} + +template +typename std::enable_if< + !std::is_same_v && + std::is_integral_v + , tl::expected>::type +set_config(ConfigWrapper &config, std::string_view newValue) +{ + if (auto parsed = cpputils::fromString(newValue)) + return configs.write_config(config, *parsed); + else + return tl::make_unexpected(fmt::format("could not parse {}", newValue)); +} + +template +typename std::enable_if< + std::is_same_v + , tl::expected>::type +set_config(ConfigWrapper &config, std::string_view newValue) +{ + return configs.write_config(config, std::string{newValue}); +} + +template +typename std::enable_if< + std::is_same_v + , tl::expected>::type +set_config(ConfigWrapper &config, std::string_view newValue) +{ + if (const auto parsed = wifi_stack::fromString(newValue); parsed) + return configs.write_config(config, *parsed); + else + return tl::make_unexpected(parsed.error()); +} + +template +typename std::enable_if< + std::is_same_v + , tl::expected>::type +set_config(ConfigWrapper &config, std::string_view newValue) +{ + if (const auto parsed = wifi_stack::fromString(newValue); parsed) + return configs.write_config(config, *parsed); + else + return tl::make_unexpected(parsed.error()); +} + +template +typename std::enable_if< + std::is_same_v> + , tl::expected>::type +set_config(ConfigWrapper &config, std::string_view newValue) +{ + if (newValue.empty()) + return configs.write_config(config, std::nullopt); + else if (const auto parsed = wifi_stack::fromString(newValue); parsed) + return configs.write_config(config, *parsed); + else + return tl::make_unexpected(parsed.error()); +} + +template +typename std::enable_if< + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v + , tl::expected>::type +set_config(ConfigWrapper &config, std::string_view newValue) +{ + if (auto parsed = cpputils::fromString>(newValue)) + return configs.write_config(config, T(*parsed)); + else + return tl::make_unexpected(fmt::format("could not parse {}", newValue)); +} + +void send_config(uint32_t skipCount) +{ + doc.clear(); + doc["type"] = "config"; + + if (!cloudClient.is_connected()) + return; + + bool stop{false}; + + configs.callForEveryConfig([&](auto &config) { + if (skipCount > 0) + { + --skipCount; + return; + } + + if (stop) + return; + + const std::string_view nvsName{config.nvsName()}; + toArduinoJson(nvsName, config.value(), doc); + if (doc.overflowed()) + { + // send data, clear doc and try again + std::string body; + doc.remove(nvsName); + serializeJson(doc, body); + ESP_LOGI(TAG, "body_size: %d, heap free: %d, stack free: %d", body.size(), esp_get_free_heap_size(), uxTaskGetStackHighWaterMark(nullptr)); + const auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + const auto result_size = cloudClient.send_text(body, timeout); + if (result_size != body.size()) + { + ESP_LOGE(TAG, "send_text failed: %d", result_size); + } + doc["type"] = "config"; + stop = true; + } + }); +} + +void send_single_config(const std::string &nvsName) +{ + if (!cloudClient.is_connected()) + return; + doc.clear(); + doc["type"] = "singleConfig"; + bool success{false}; + configs.callForEveryConfig([&](auto &config) { + if (config.nvsName() == nvsName) + { + toArduinoJson(nvsName, config.value(), doc); + success = true; + } + }); + std::string body; + if (!success) + doc["error"] = "Config not found"; + serializeJson(doc, body); + doc.clear(); + const auto timeout = std::chrono::ceil( + espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + cloudClient.send_text(body, timeout); +} + +void cloudHeartbeat() +{ + if (!cloudClient.is_connected()) + return; + const auto timeout = std::chrono::ceil( + espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + cloudClient.send_text(R"({"type":"heartbeat"})", timeout); +} +} // namespace + void initCloud() { if (configs.cloudSettings.cloudEnabled.value() && @@ -75,6 +434,12 @@ void updateCloud() lastCloudSend = now; } + + if (!lastHeartbeat || now - *lastHeartbeat >= 1500ms) + { + cloudHeartbeat(); + lastHeartbeat = now; + } } void cloudCollect() @@ -212,7 +577,7 @@ void cloudSend() const auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); - if (!hasAnnouncedItself) + if (!hasAnnouncedItself && configs.cloudSettings.cloudEnabled.value()) { std::string helloWorld = getLoginMessage(); ESP_LOGW(TAG, "=====> %s", helloWorld.c_str()); @@ -307,6 +672,120 @@ void cloudSendDisplay(std::string_view data) } } +void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data) +{ + CPP_UNUSED(event_handler_arg); + + const esp_websocket_event_data_t *data = reinterpret_cast(event_data); + + switch (esp_websocket_event_id_t(event_id)) + { + case WEBSOCKET_EVENT_CONNECTED: + ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED"); + hasAnnouncedItself = false; + break; + case WEBSOCKET_EVENT_DISCONNECTED: + ESP_LOGI(TAG, "WEBSOCKET_EVENT_DISCONNECTED"); + break; + case WEBSOCKET_EVENT_DATA: + { + if (data->op_code != 1) // text + return; + + doc.clear(); + + ESP_LOGI(TAG, "Received: %.*s", data->data_len, data->data_ptr); + + if (const auto err = deserializeJson(doc, data->data_ptr, data->data_len); err) + { + ESP_LOGE(TAG, "deserializeJson() failed with %s", err.c_str()); + return; + } + + const std::string type = doc["type"]; + if (type == "popup") + { + std::string text = doc["msg"]; + std::string id = doc["id"]; + doc.clear(); + ESP_LOGI(TAG, "popup: %s, id: %s", text.c_str(), id.c_str()); + BobbyErrorHandler{}.errorOccured(std::move(text)); + + if (id.empty()) + return; + + auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + const auto message = fmt::format(R"({{"type":"response","id":"{}"}})", id); + ESP_LOGI(TAG, "sending response: %s", message.c_str()); + cloudClient.send_text(message, timeout); + return; + } + else if (type == "getConfig") + { + JsonVariant _id = doc["id"]; + if (_id.isNull()) + { + ESP_LOGE(TAG, "getConfig: no id"); + return; + } + const auto id = _id.as(); + doc.clear(); + send_config(id); + return; + } + else if (type == "getSingleConfig") + { + JsonVariant nvskey = doc["nvskey"]; + if (nvskey.isNull()) + { + ESP_LOGE(TAG, "getSingleConfig: nvskey is null"); + return; + } + std::string name = nvskey.as(); + doc.clear(); + send_single_config(name); + return; + } + else if (type == "setConfig") + { + std::string name = doc["nvskey"]; + std::string value = doc["value"]; + doc.clear(); + bool success{false}; + configs.callForEveryConfig([&](auto &config){ + const std::string_view nvsName{config.nvsName()}; + + if (nvsName == name) + { + if (const auto result = set_config(config, value); !result) + { + ESP_LOGE(TAG, "set_config() failed with %s", result.error().c_str()); + return; + } + success = true; + } + }); + if (!success) + { + ESP_LOGE(TAG, "set_config() failed with %s", "unknown config"); + return; + } + else + { + send_single_config(name); + } + return; + } + break; + } + case WEBSOCKET_EVENT_ERROR: + ESP_LOGE(TAG, "%s event_id=%s %.*s", event_base, "WEBSOCKET_EVENT_ERROR", data->data_len, data->data_ptr); + break; + default: + ESP_LOGI(TAG, "%s unknown event_id %i", event_base, event_id); + } +} + void createCloud() { hasAnnouncedItself = false; @@ -321,47 +800,20 @@ void createCloud() lastCreateTry = espchrono::millis_clock::now(); const esp_websocket_client_config_t config = { - .uri = configs.cloudUrl.value().c_str(), + .uri = configs.cloudUrl.value().c_str() }; cloudClient = espcpputils::websocket_client{&config}; - cloudClient.register_events(WEBSOCKET_EVENT_CONNECTED, [](void* event_handler_arg, esp_event_base_t event_base, int32_t event_id, void* event_data){ + cloudClient.register_events(WEBSOCKET_EVENT_CONNECTED, [](void* event_handler_arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { hasAnnouncedItself = false; }, nullptr); - cloudClient.register_events(WEBSOCKET_EVENT_DATA, [](void* event_handler_arg, esp_event_base_t event_base, int32_t event_id, void* event_data){ - using namespace ArduinoJson; - auto data = static_cast(event_data); - - if (data->op_code != 1) // text - return; - - StaticJsonDocument<768> doc; - if (const auto err = deserializeJson(doc, data->data_ptr, data->data_len); err) - { - ESP_LOGE(TAG, "deserializeJson() failed with %s", err.c_str()); - return; - } - - const std::string type = doc["type"]; - if (type == "popup") - { - std::string text = doc["msg"]; - std::string id = doc["id"]; - ESP_LOGI(TAG, "popup: %s, id: %s", text.c_str(), id.c_str()); - BobbyErrorHandler{}.errorOccured(std::move(text)); - - if (id.empty()) - return; - - auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); - const auto message = fmt::format(R"({{"type":"response","id":"{}"}})", id); - ESP_LOGI(TAG, "sending response: %s", message.c_str()); - cloudClient.send_text(message, timeout); - return; - } - }, nullptr); + if (const auto result = cloudClient.register_events(WEBSOCKET_EVENT_ANY, &cloudEventHandler, nullptr); result != ESP_OK) + { + ESP_LOGE(TAG, "register_events() failed with %s", esp_err_to_name(result)); + return; + } if (!cloudClient) { From 3722d87aee4ed72212f52fd683e682521935f28b Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 31 May 2022 00:58:37 +0200 Subject: [PATCH 10/38] Added type to string --- main/typeutils.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 main/typeutils.h diff --git a/main/typeutils.h b/main/typeutils.h new file mode 100644 index 0000000..4ead8e9 --- /dev/null +++ b/main/typeutils.h @@ -0,0 +1,56 @@ +#pragma once + +namespace typeutils { + using namespace std; +template +struct t_to_str +{ + t_to_str() = delete; + ~t_to_str() = delete; + + static const char *str; +}; + +template +const char *t_to_str::str = "unknown"; + +#define DEFINE_FOR_TYPE2(TYPE, STR) \ + template<> const char *t_to_str::str = #STR; \ + template<> const char *t_to_str::str = #STR; \ + template<> const char *t_to_str>::str = "std::optional<" #STR ">"; \ + template<> const char *t_to_str const&>::str = "std::optional<" #STR ">"; \ + template<> const char *t_to_str>::str = #STR; \ + template<> const char *t_to_str const&>::str = #STR; \ + template<> const char *t_to_str>::str = #STR; \ + template<> const char *t_to_str const&>::str = #STR; + +#define DEFINE_FOR_TYPE(TYPE) DEFINE_FOR_TYPE2(TYPE, TYPE) +DEFINE_FOR_TYPE(bool) +DEFINE_FOR_TYPE(int8_t) +DEFINE_FOR_TYPE(uint8_t) +DEFINE_FOR_TYPE(int16_t) +DEFINE_FOR_TYPE(uint16_t) +DEFINE_FOR_TYPE(int32_t) +DEFINE_FOR_TYPE(uint32_t) +DEFINE_FOR_TYPE(int64_t) +DEFINE_FOR_TYPE(uint64_t) +DEFINE_FOR_TYPE(long) +DEFINE_FOR_TYPE(unsigned long) +DEFINE_FOR_TYPE(float) +DEFINE_FOR_TYPE(double) +DEFINE_FOR_TYPE(string) +DEFINE_FOR_TYPE(sntp_sync_mode_t) +DEFINE_FOR_TYPE(espchrono::DayLightSavingMode) +DEFINE_FOR_TYPE(OtaAnimationModes) +DEFINE_FOR_TYPE(LedstripAnimation) +DEFINE_FOR_TYPE(HandbremseMode) +DEFINE_FOR_TYPE(BobbyQuickActions) +DEFINE_FOR_TYPE(CloudMode) +DEFINE_FOR_TYPE(BatteryCellType) +DEFINE_FOR_TYPE(wifi_auth_mode_t) +DEFINE_FOR_TYPE(wifi_stack::mac_t) +DEFINE_FOR_TYPE(wifi_stack::ip_address_t) +DEFINE_FOR_TYPE(espchrono::milliseconds32) +DEFINE_FOR_TYPE(espchrono::minutes32) +#undef DEFINE_FOR_TYPE +} // namespace typeutils From 01cf28e8f0e5ca1349509e7af9b70332aa225774 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 31 May 2022 00:58:53 +0200 Subject: [PATCH 11/38] Implemented cloud nvs --- main/CMakeLists.txt | 1 + main/cloud.cpp | 201 ++++++++++++++++++++------------------------ main/newsettings.h | 9 ++ 3 files changed, 100 insertions(+), 111 deletions(-) diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index c93f056..6c190d3 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -241,6 +241,7 @@ set(headers texthelpers/wifistatexthelpers.h time_bobbycar.h types.h + typeutils.h udpcloud.h unifiedmodelmode.h utils.h diff --git a/main/cloud.cpp b/main/cloud.cpp index 365f132..9010faa 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -20,6 +20,7 @@ #include "bobbyerrorhandler.h" #include "globals.h" #include "newsettings.h" +#include "typeutils.h" #include "utils.h" using namespace std::chrono_literals; @@ -30,15 +31,15 @@ espchrono::millis_clock::time_point lastCreateTry; espchrono::millis_clock::time_point lastStartTry; std::string cloudBuffer; +namespace { std::optional lastCloudCollect; std::optional lastCloudSend; std::optional lastHeartbeat; bool hasAnnouncedItself{}; -namespace { constexpr const char * const TAG = "BOBBYCLOUD"; -constexpr const auto json_document_size = 256; +constexpr const auto json_document_size = 1024; StaticJsonDocument doc; template @@ -66,149 +67,89 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v && !std::is_same_v && - !std::is_same_v + !std::is_same_v && + !std::is_same_v , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +toArduinoJson(std::string_view key, T value, JsonObject &object) { - doc[key.data()] = nullptr; + object["name"] = key; + object["value"] = nullptr; } template typename std::enable_if< - std::is_same_v - , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) -{ - doc[key.data()] = value; -} - -template -typename std::enable_if< - !std::is_same_v && + std::is_same_v || std::is_integral_v , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +toArduinoJson(std::string_view key, T value, JsonObject &object) { - doc[key.data()] = value; + object["name"] = key; + object["value"] = value; } template typename std::enable_if< is_duration_v , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +toArduinoJson(std::string_view key, T value, JsonObject &object) { - doc[key.data()] = value.count(); + object["name"] = key; + object["value"] = value.count(); } template typename std::enable_if< std::is_same_v , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +toArduinoJson(std::string_view key, T value, JsonObject &object) { - doc[key.data()] = value.data(); + object["name"] = key; + object["value"] = value; } template typename std::enable_if< - std::is_same_v + std::is_same_v || + std::is_same_v || + std::is_same_v , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +toArduinoJson(std::string_view key, T value, JsonObject &object) { - doc[key.data()] = wifi_stack::toString(value); -} - -template -typename std::enable_if< - std::is_same_v - , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) -{ - doc[key.data()] = wifi_stack::toString(value); + object["name"] = key; + object["value"] = wifi_stack::toString(value); } template typename std::enable_if< std::is_same_v> , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +toArduinoJson(std::string_view key, T value, JsonObject &object) { - doc[key.data()] = value ? wifi_stack::toString(*value) : std::string{}; + object["name"] = key; + if (value) + object["value"] = wifi_stack::toString(*value); + else + object["value"] = nullptr; } template typename std::enable_if< - std::is_same_v + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) +toArduinoJson(std::string_view key, T value, JsonObject &object) { - doc[key.data()] = wifi_stack::toString(value); -} - -template -typename std::enable_if< - std::is_same_v - , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) -{ - doc[key.data()] = std::to_underlying(value); -} - -template -typename std::enable_if< - std::is_same_v - , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) -{ - doc[key.data()] = std::to_underlying(value); -} - -template -typename std::enable_if< - std::is_same_v - , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) -{ - doc[key.data()] = std::to_underlying(value); -} - -template -typename std::enable_if< - std::is_same_v - , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) -{ - doc[key.data()] = std::to_underlying(value); -} - -template -typename std::enable_if< - std::is_same_v - , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) -{ - doc[key.data()] = std::to_underlying(value); -} - -template -typename std::enable_if< - std::is_same_v - , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) -{ - doc[key.data()] = std::to_underlying(value); -} - -template -typename std::enable_if< - std::is_same_v - , void>::type -toArduinoJson(std::string_view key, T value, StaticJsonDocument &doc) -{ - doc[key.data()] = std::to_underlying(value); + object["name"] = key; + object["value"] = std::to_underlying(value); } +// setter template typename std::enable_if< @@ -225,7 +166,8 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v && !std::is_same_v && - !std::is_same_v + !std::is_same_v && + !std::is_same_v , tl::expected>::type set_config(ConfigWrapper &config, std::string_view newValue) { @@ -313,7 +255,8 @@ typename std::enable_if< std::is_same_v || std::is_same_v || std::is_same_v || - std::is_same_v + std::is_same_v || + std::is_same_v , tl::expected>::type set_config(ConfigWrapper &config, std::string_view newValue) { @@ -325,13 +268,27 @@ set_config(ConfigWrapper &config, std::string_view newValue) void send_config(uint32_t skipCount) { - doc.clear(); - doc["type"] = "config"; - if (!cloudClient.is_connected()) return; + doc.clear(); + + { + const std::string body = fmt::format(R"({{"type":"configCount","count":{}}})", configs.getConfigCount()); + const auto timeout = std::chrono::ceil( + espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + const auto result_size = cloudClient.send_text(body, timeout); + if (result_size != body.size()) { + ESP_LOGE(TAG, "send_text failed: %d", result_size); + } + } + + doc["type"] = "config"; + JsonArray configsArray = doc.createNestedArray("configs"); bool stop{false}; + bool has_overflowed{false}; + + size_t i{0}; configs.callForEveryConfig([&](auto &config) { if (skipCount > 0) @@ -344,24 +301,43 @@ void send_config(uint32_t skipCount) return; const std::string_view nvsName{config.nvsName()}; - toArduinoJson(nvsName, config.value(), doc); + + i++; + + JsonObject configObject = configsArray.createNestedObject(); + toArduinoJson(nvsName, config.value(), configObject); + configObject["type"] = typeutils::t_to_str::str; + if (doc.overflowed()) { + has_overflowed = true; // send data, clear doc and try again std::string body; - doc.remove(nvsName); + configsArray.remove(i-1); serializeJson(doc, body); - ESP_LOGI(TAG, "body_size: %d, heap free: %d, stack free: %d", body.size(), esp_get_free_heap_size(), uxTaskGetStackHighWaterMark(nullptr)); const auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); const auto result_size = cloudClient.send_text(body, timeout); if (result_size != body.size()) { ESP_LOGE(TAG, "send_text failed: %d", result_size); } - doc["type"] = "config"; stop = true; } }); + + if (!has_overflowed) + { + std::string body; + doc["last"] = true; + doc["type"] = "lastConfig"; + serializeJson(doc, body); + const auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + const auto result_size = cloudClient.send_text(body, timeout); + if (result_size != body.size()) + { + ESP_LOGE(TAG, "send_text failed: %d", result_size); + } + } } void send_single_config(const std::string &nvsName) @@ -370,11 +346,14 @@ void send_single_config(const std::string &nvsName) return; doc.clear(); doc["type"] = "singleConfig"; + bool success{false}; configs.callForEveryConfig([&](auto &config) { if (config.nvsName() == nvsName) { - toArduinoJson(nvsName, config.value(), doc); + JsonObject configObject = doc.createNestedObject("config"); + toArduinoJson(nvsName, config.value(), configObject); + configObject["type"] = typeutils::t_to_str::str; success = true; } }); diff --git a/main/newsettings.h b/main/newsettings.h index 21cf7b2..cb4be61 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -852,6 +852,15 @@ public: std::ref(feature.webserver_disable_lock) ); } + + constexpr size_t getConfigCount() const + { + size_t count = 0; +#define HELPER(x) count++; + NEW_SETTINGS(HELPER) +#undef HELPER + return count; + } }; extern ConfigManager configs; From 0c81c96e464dec7bc79a8f118708a98dd84171e7 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 31 May 2022 12:48:31 +0200 Subject: [PATCH 12/38] Changed to debug --- main/cloud.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/cloud.cpp b/main/cloud.cpp index 9010faa..57bf78f 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -673,7 +673,7 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int doc.clear(); - ESP_LOGI(TAG, "Received: %.*s", data->data_len, data->data_ptr); + ESP_LOGD(TAG, "Received: %.*s", data->data_len, data->data_ptr); if (const auto err = deserializeJson(doc, data->data_ptr, data->data_len); err) { From 11b9564b0728a078a1a43ed061607ad66d32d865 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 31 May 2022 12:49:21 +0200 Subject: [PATCH 13/38] Fixed can still having errors when both boards are deactivated --- main/can.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/main/can.cpp b/main/can.cpp index 94c2799..bfc0fa7 100644 --- a/main/can.cpp +++ b/main/can.cpp @@ -265,6 +265,9 @@ void sendCanCommands() static uint32_t can_sequential_error_cnt = 0; static uint32_t can_sequential_bus_errors = 0; + if (!configs.controllerHardware.sendFrontCanCmd.value() && !configs.controllerHardware.sendBackCanCmd.value()) + return; + constexpr auto send = [](uint32_t addr, auto value){ twai_message_t message; twai_status_info_t status_info; From 474b48ff3edaea2015cce2d1a60ef602d6e6027f Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 31 May 2022 12:49:34 +0200 Subject: [PATCH 14/38] Added testdevice --- config_testdevice.cmake | 89 ++ sdkconfig_testdevice | 1819 +++++++++++++++++++++++++++++++++++++++ switchconf.sh | 1 + 3 files changed, 1909 insertions(+) create mode 100644 config_testdevice.cmake create mode 100644 sdkconfig_testdevice diff --git a/config_testdevice.cmake b/config_testdevice.cmake new file mode 100644 index 0000000..e135919 --- /dev/null +++ b/config_testdevice.cmake @@ -0,0 +1,89 @@ +set(BOBBY_APP_NAME testdevice) + +add_definitions( + -DUSER_SETUP_LOADED=1 + -DLOAD_GLCD=1 + -DLOAD_FONT2=1 + -DLOAD_FONT4=1 + -DLOAD_FONT7=1 + -DILI9341_DRIVER=1 + -DTFT_MOSI=13 + -DTFT_SCLK=15 + -DTFT_CS=14 + -DTFT_DC=12 + -DTFT_RST=2 + -DSPI_FREQUENCY=40000000 +) + +set(BOBBYCAR_BUILDFLAGS +# Pins + -DPINS_GAS=34 + -DPINS_BREMS=35 +# -DFEATURE_JOYSTICK +# -DPINS_RX1=4 +# -DPINS_TX1=5 +# -DPINS_RX2=22 +# -DPINS_TX2=23 +# -DPINS_MOSFET0=18 +# -DPINS_MOSFET1=19 +# -DPINS_MOSFET2=21 +# -DPINS_GAMETRAKX=34 +# -DPINS_GAMETRAKY=39 +# -DPINS_GAMETRAKDIST=36 + -DPINS_LEDBACKLIGHT=23 + -DPINS_LEDSTRIP=33 + +# Config flags + -DFEATURE_ADC_IN + -DFEATURE_CAN +# -DFEATURE_SERIAL +# -DFEATURE_MOSFETS +# -DFEATURE_BLUETOOTH +# -DFEATURE_BMS +# -DFEATURE_GAMETRAK +# -DFEATURE_POWERSUPPLY + -DFEATURE_LEDBACKLIGHT + + -DLEDBACKLIGHT_INVERTED +# -DLEDSTRIP_WRONG_DIRECTION + -DHEAP_LRGST_CRASH_TEXT_FIX + +# Default values + -DDEFAULT_SWAPSCREENBYTES=false + -DDEFAULT_INVERTFRONTLEFT=false + -DDEFAULT_INVERTFRONTRIGHT=true + -DDEFAULT_INVERTBACKLEFT=false + -DDEFAULT_INVERTBACKRIGHT=true + -DDEFAULT_WHEELDIAMETER=200 + -DDEFAULT_IMOTMAX=28 + -DDEFAULT_IDCMAX=30 + -DDEFAULT_NMOTMAX=2000 + -DDEFAULT_FIELDWEAKMAX=17 + -DDEFAULT_FIELDADVMAX=40 + +# DPAD +# -DFEATURE_DPAD_5WIRESW +# -DPINS_DPAD_5WIRESW_OUT=4 +# -DPINS_DPAD_5WIRESW_IN1=5 +# -DPINS_DPAD_5WIRESW_IN2=27 +# -DPINS_DPAD_5WIRESW_IN3=18 +# -DPINS_DPAD_5WIRESW_IN4=19 +# -DPINS_DPAD_EXTRASW_IN5=25 +# -DFEATURE_DPAD_6WIRESW +# -DPINS_DPAD_6WIRESW_OUT=4 +# -DPINS_DPAD_6WIRESW_IN1=5 +# -DPINS_DPAD_6WIRESW_IN2=27 +# -DPINS_DPAD_6WIRESW_IN3=18 +# -DPINS_DPAD_6WIRESW_IN4=19 +# -DPINS_DPAD_6WIRESW_IN5=26 +# -DFEATURE_GSCHISSENE_DIODE + -DDPAD_BOARDCOMPUTER_V2 + -DPINS_DPAD_BOARDCOMPUTER_V2_OUT1=19 + -DPINS_DPAD_BOARDCOMPUTER_V2_OUT2=5 + -DPINS_DPAD_BOARDCOMPUTER_V2_IN1=4 + -DPINS_DPAD_BOARDCOMPUTER_V2_IN2=18 + -DPINS_DPAD_BOARDCOMPUTER_V2_IN3=27 + -DPINS_DPAD_BOARDCOMPUTER_V2_IN4=16 +# -DDPAD_BOARDCOMPUTER_V2_DEBUG +) + diff --git a/sdkconfig_testdevice b/sdkconfig_testdevice new file mode 100644 index 0000000..bae9eaa --- /dev/null +++ b/sdkconfig_testdevice @@ -0,0 +1,1819 @@ +# +# Automatically generated file. DO NOT EDIT. +# Espressif IoT Development Framework (ESP-IDF) Project Configuration +# +CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" +CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" +CONFIG_SOC_CAPS_ECO_VER_MAX=3 +CONFIG_SOC_ADC_SUPPORTED=y +CONFIG_SOC_DAC_SUPPORTED=y +CONFIG_SOC_MCPWM_SUPPORTED=y +CONFIG_SOC_SDMMC_HOST_SUPPORTED=y +CONFIG_SOC_BT_SUPPORTED=y +CONFIG_SOC_BLUEDROID_SUPPORTED=y +CONFIG_SOC_CLASSIC_BT_SUPPORTED=y +CONFIG_SOC_PCNT_SUPPORTED=y +CONFIG_SOC_WIFI_SUPPORTED=y +CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y +CONFIG_SOC_TWAI_SUPPORTED=y +CONFIG_SOC_EMAC_SUPPORTED=y +CONFIG_SOC_CPU_CORES_NUM=2 +CONFIG_SOC_ULP_SUPPORTED=y +CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y +CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y +CONFIG_SOC_I2S_SUPPORTED=y +CONFIG_SOC_RMT_SUPPORTED=y +CONFIG_SOC_SIGMADELTA_SUPPORTED=y +CONFIG_SOC_SUPPORT_COEXISTENCE=y +CONFIG_SOC_AES_SUPPORTED=y +CONFIG_SOC_MPI_SUPPORTED=y +CONFIG_SOC_SHA_SUPPORTED=y +CONFIG_SOC_FLASH_ENC_SUPPORTED=y +CONFIG_SOC_SECURE_BOOT_SUPPORTED=y +CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_PERIPH_NUM=2 +CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 +CONFIG_SOC_ADC_ATTEN_NUM=4 +CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 +CONFIG_SOC_ADC_PATT_LEN_MAX=16 +CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=2000 +CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 +CONFIG_SOC_RTC_SLOW_CLOCK_SUPPORT_8MD256=y +CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y +CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINT_SIZE=64 +CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_DAC_PERIPH_NUM=2 +CONFIG_SOC_DAC_RESOLUTION=8 +CONFIG_SOC_GPIO_PORT=1 +CONFIG_SOC_GPIO_PIN_COUNT=40 +CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF +CONFIG_SOC_GPIO_SUPPORT_SLP_SWITCH=y +CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_I2C_FIFO_LEN=32 +CONFIG_SOC_I2C_SUPPORT_SLAVE=y +CONFIG_SOC_I2C_SUPPORT_APB=y +CONFIG_SOC_CLK_APLL_SUPPORTED=y +CONFIG_SOC_APLL_MULTIPLIER_OUT_MIN_HZ=350000000 +CONFIG_SOC_APLL_MULTIPLIER_OUT_MAX_HZ=500000000 +CONFIG_SOC_APLL_MIN_HZ=5303031 +CONFIG_SOC_APLL_MAX_HZ=125000000 +CONFIG_SOC_I2S_NUM=2 +CONFIG_SOC_I2S_HW_VERSION_1=y +CONFIG_SOC_I2S_SUPPORTS_APLL=y +CONFIG_SOC_I2S_SUPPORTS_PDM=y +CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y +CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y +CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y +CONFIG_SOC_I2S_SUPPORTS_ADC=y +CONFIG_SOC_I2S_SUPPORTS_DAC=y +CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y +CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y +CONFIG_SOC_I2S_LCD_I80_VARIANT=y +CONFIG_SOC_LCD_I80_SUPPORTED=y +CONFIG_SOC_LCD_I80_BUSES=2 +CONFIG_SOC_LCD_I80_BUS_WIDTH=24 +CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y +CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y +CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y +CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y +CONFIG_SOC_LEDC_CHANNEL_NUM=8 +CONFIG_SOC_LEDC_TIMER_BIT_WIDE_NUM=20 +CONFIG_SOC_MCPWM_GROUPS=2 +CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 +CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 +CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 +CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y +CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 +CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 +CONFIG_SOC_MCPWM_BASE_CLK_HZ=160000000 +CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 +CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 +CONFIG_SOC_PCNT_GROUPS=1 +CONFIG_SOC_PCNT_UNITS_PER_GROUP=8 +CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 +CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 +CONFIG_SOC_RMT_GROUPS=1 +CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 +CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64 +CONFIG_SOC_RMT_SUPPORT_REF_TICK=y +CONFIG_SOC_RMT_SUPPORT_APB=y +CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y +CONFIG_SOC_RTCIO_PIN_COUNT=18 +CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y +CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y +CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y +CONFIG_SOC_SIGMADELTA_NUM=1 +CONFIG_SOC_SIGMADELTA_CHANNEL_NUM=8 +CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y +CONFIG_SOC_SPI_AS_CS_SUPPORTED=y +CONFIG_SOC_SPI_PERIPH_NUM=3 +CONFIG_SOC_SPI_DMA_CHAN_NUM=2 +CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 +CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192 +CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y +CONFIG_SOC_TIMER_GROUPS=2 +CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 +CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64 +CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 +CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y +CONFIG_SOC_TOUCH_VERSION_1=y +CONFIG_SOC_TOUCH_SENSOR_NUM=10 +CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF +CONFIG_SOC_TWAI_BRP_MIN=2 +CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y +CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_SUPPORT_REF_TICK=y +CONFIG_SOC_UART_FIFO_LEN=128 +CONFIG_SOC_UART_BITRATE_MAX=5000000 +CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y +CONFIG_SOC_SHA_SUPPORT_SHA1=y +CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_SHA_SUPPORT_SHA384=y +CONFIG_SOC_SHA_SUPPORT_SHA512=y +CONFIG_SOC_RSA_MAX_BIT_LEN=4096 +CONFIG_SOC_AES_SUPPORT_AES_128=y +CONFIG_SOC_AES_SUPPORT_AES_192=y +CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_SECURE_BOOT_V1=y +CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y +CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 +CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 +CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y +CONFIG_SOC_SDMMC_USE_IOMUX=y +CONFIG_SOC_SDMMC_NUM_SLOTS=2 +CONFIG_SOC_BLE_DONT_UPDATE_OWN_RPA=y +CONFIG_IDF_CMAKE=y +CONFIG_IDF_TARGET_ARCH_XTENSA=y +CONFIG_IDF_TARGET_ARCH="xtensa" +CONFIG_IDF_TARGET="esp32" +CONFIG_IDF_TARGET_ESP32=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 + +# +# Build type +# +CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y +# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set +CONFIG_APP_BUILD_GENERATE_BINARIES=y +CONFIG_APP_BUILD_BOOTLOADER=y +CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y +# CONFIG_APP_REPRODUCIBLE_BUILD is not set +# CONFIG_APP_NO_BLOBS is not set +# end of Build type + +# +# Application manager +# +CONFIG_APP_COMPILE_TIME_DATE=y +# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set +# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set +# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set +CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 +# end of Application manager + +# +# Bootloader config +# +CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 +CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y +# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set +# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set +# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set +CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y +# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set +CONFIG_BOOTLOADER_LOG_LEVEL=3 +# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set +CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y +# CONFIG_BOOTLOADER_FACTORY_RESET is not set +# CONFIG_BOOTLOADER_APP_TEST is not set +CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y +CONFIG_BOOTLOADER_WDT_ENABLE=y +# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set +CONFIG_BOOTLOADER_WDT_TIME_MS=9000 +# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set +CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 +# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set +CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y +# end of Bootloader config + +# +# Security features +# +CONFIG_SECURE_BOOT_V1_SUPPORTED=y +# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set +# CONFIG_SECURE_BOOT is not set +# CONFIG_SECURE_FLASH_ENC_ENABLED is not set +# end of Security features + +CONFIG_ESP_ROM_HAS_CRC_LE=y +CONFIG_ESP_ROM_HAS_CRC_BE=y +CONFIG_ESP_ROM_HAS_JPEG_DECODE=y +CONFIG_ESP_ROM_SUPPORT_MULTIPLE_UART=y + +# +# Serial flasher config +# +# CONFIG_ESPTOOLPY_NO_STUB is not set +# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set +# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set +CONFIG_ESPTOOLPY_FLASHMODE_DIO=y +# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set +CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y +CONFIG_ESPTOOLPY_FLASHMODE="dio" +# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ="40m" +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="16MB" +CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y +CONFIG_ESPTOOLPY_BEFORE_RESET=y +# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET=y +# CONFIG_ESPTOOLPY_AFTER_NORESET is not set +CONFIG_ESPTOOLPY_AFTER="hard_reset" +CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 +# end of Serial flasher config + +# +# Partition Table +# +# CONFIG_PARTITION_TABLE_SINGLE_APP is not set +# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set +# CONFIG_PARTITION_TABLE_TWO_OTA is not set +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_16M_ota.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions_16M_ota.csv" +CONFIG_PARTITION_TABLE_OFFSET=0xf000 +CONFIG_PARTITION_TABLE_MD5=y +# end of Partition Table + +# +# FastLED +# +# CONFIG_FASTLED_METHOD_I2S is not set +CONFIG_FASTLED_METHOD_RMT=y +# end of FastLED + +# +# Arduino Configuration +# +CONFIG_ENABLE_ARDUINO_DEPENDS=y +# CONFIG_ARDUINO_ISR_IRAM is not set +# CONFIG_DISABLE_HAL_LOCKS is not set + +# +# Debug Log Configuration +# +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_NONE is not set +CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_ERROR=y +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_WARN is not set +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_INFO is not set +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_DEBUG is not set +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_VERBOSE is not set +CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL=1 +# CONFIG_ARDUHAL_LOG_COLORS is not set +# CONFIG_ARDUHAL_ESP_LOG is not set +# end of Debug Log Configuration + +CONFIG_ARDUINO_SELECTIVE_COMPILATION=y +# CONFIG_ARDUINO_SELECTIVE_FS is not set +CONFIG_ARDUINO_SELECTIVE_SPI=y +# CONFIG_ARDUINO_SELECTIVE_SPIFFS is not set +CONFIG_ARDUINO_SELECTIVE_Wire=y +# end of Arduino Configuration + +# +# ESP Gui settings +# +CONFIG_ESPGUI_MENUDISPLAY_ROWS=10 +# end of ESP Gui settings + +# +# 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 + +# +# espchrono Configuration +# +CONFIG_ESPCHRONO_SUPPORT_DEFAULT_TIMEZONE=y +# end of espchrono Configuration + +# +# ESP Config lib settings +# +# CONFIG_LOG_LOCAL_LEVEL_CONFIG_NONE is not set +# CONFIG_LOG_LOCAL_LEVEL_CONFIG_ERROR is not set +# CONFIG_LOG_LOCAL_LEVEL_CONFIG_WARN is not set +CONFIG_LOG_LOCAL_LEVEL_CONFIG_INFO=y +# CONFIG_LOG_LOCAL_LEVEL_CONFIG_DEBUG is not set +# CONFIG_LOG_LOCAL_LEVEL_CONFIG_VERBOSE is not set +CONFIG_LOG_LOCAL_LEVEL_CONFIG=3 +# CONFIG_SEPARATE_FACTORY_NVS_PARTITION is not set +# end of ESP Config lib settings + +# +# espcpputils settings +# +# CONFIG_ESPCPPUTILS_LOG_LOCAL_LEVEL_NONE is not set +# CONFIG_ESPCPPUTILS_LOG_LOCAL_LEVEL_ERROR is not set +# CONFIG_ESPCPPUTILS_LOG_LOCAL_LEVEL_WARN is not set +CONFIG_ESPCPPUTILS_LOG_LOCAL_LEVEL_INFO=y +# CONFIG_ESPCPPUTILS_LOG_LOCAL_LEVEL_DEBUG is not set +# CONFIG_ESPCPPUTILS_LOG_LOCAL_LEVEL_VERBOSE is not set +CONFIG_ESPCPPUTILS_LOG_LOCAL_LEVEL=3 +# end of espcpputils settings + +# +# ESP WiFi Stack settings +# +# CONFIG_LOG_LOCAL_LEVEL_WIFI_STACK_NONE is not set +# CONFIG_LOG_LOCAL_LEVEL_WIFI_STACK_ERROR is not set +# CONFIG_LOG_LOCAL_LEVEL_WIFI_STACK_WARN is not set +CONFIG_LOG_LOCAL_LEVEL_WIFI_STACK_INFO=y +# CONFIG_LOG_LOCAL_LEVEL_WIFI_STACK_DEBUG is not set +# CONFIG_LOG_LOCAL_LEVEL_WIFI_STACK_VERBOSE is not set +CONFIG_LOG_LOCAL_LEVEL_WIFI_STACK=3 +# CONFIG_WIFI_DUAL_ANT is not set +# end of ESP WiFi Stack settings + +# +# Compiler options +# +CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y +# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set +# CONFIG_COMPILER_OPTIMIZATION_PERF is not set +# CONFIG_COMPILER_OPTIMIZATION_NONE is not set +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set +CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set +CONFIG_COMPILER_HIDE_PATHS_MACROS=y +# CONFIG_COMPILER_CXX_EXCEPTIONS is not set +# CONFIG_COMPILER_CXX_RTTI is not set +CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y +# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set +# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set +# CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set +# CONFIG_COMPILER_DUMP_RTL_FILES is not set +# end of Compiler options + +# +# Component config +# + +# +# Application Level Tracing +# +# CONFIG_APPTRACE_DEST_JTAG is not set +CONFIG_APPTRACE_DEST_NONE=y +# CONFIG_APPTRACE_DEST_UART1 is not set +# CONFIG_APPTRACE_DEST_UART2 is not set +CONFIG_APPTRACE_DEST_UART_NONE=y +CONFIG_APPTRACE_UART_TASK_PRIO=1 +CONFIG_APPTRACE_LOCK_ENABLE=y +# end of Application Level Tracing + +# +# ESP-ASIO +# +# CONFIG_ASIO_SSL_SUPPORT is not set +# end of ESP-ASIO + +# +# Bluetooth +# +CONFIG_BT_ENABLED=y + +# +# Bluetooth controller +# +CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y +# CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY is not set +# CONFIG_BTDM_CTRL_MODE_BTDM is not set +CONFIG_BTDM_CTRL_BLE_MAX_CONN=3 +CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0 +CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0 +CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0 +CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0 +CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 +CONFIG_BTDM_CTRL_PINNED_TO_CORE_0=y +# CONFIG_BTDM_CTRL_PINNED_TO_CORE_1 is not set +CONFIG_BTDM_CTRL_PINNED_TO_CORE=0 +CONFIG_BTDM_CTRL_HCI_MODE_VHCI=y +# CONFIG_BTDM_CTRL_HCI_MODE_UART_H4 is not set + +# +# MODEM SLEEP Options +# +CONFIG_BTDM_CTRL_MODEM_SLEEP=y +CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_ORIG=y +# CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_EVED is not set +CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=y +# end of MODEM SLEEP Options + +CONFIG_BTDM_BLE_DEFAULT_SCA_250PPM=y +CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 +CONFIG_BTDM_BLE_SCAN_DUPL=y +CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE=y +# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA is not set +# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE is not set +CONFIG_BTDM_SCAN_DUPL_TYPE=0 +CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE=200 +# CONFIG_BTDM_BLE_MESH_SCAN_DUPL_EN is not set +CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED=y +CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y +CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM=100 +CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 +CONFIG_BTDM_RESERVE_DRAM=0xdb5c +CONFIG_BTDM_CTRL_HLI=y +# end of Bluetooth controller + +# CONFIG_BT_BLUEDROID_ENABLED is not set +CONFIG_BT_NIMBLE_ENABLED=y +# CONFIG_BT_CONTROLLER_ONLY is not set + +# +# NimBLE Options +# +CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y +# CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set +# CONFIG_BT_NIMBLE_LOG_LEVEL_NONE is not set +# CONFIG_BT_NIMBLE_LOG_LEVEL_ERROR is not set +# CONFIG_BT_NIMBLE_LOG_LEVEL_WARNING is not set +CONFIG_BT_NIMBLE_LOG_LEVEL_INFO=y +# CONFIG_BT_NIMBLE_LOG_LEVEL_DEBUG is not set +CONFIG_BT_NIMBLE_LOG_LEVEL=1 +CONFIG_BT_NIMBLE_RUN_QA_TEST=y +# CONFIG_BT_NIMBLE_RUN_BQB_TEST is not set +CONFIG_BT_NIMBLE_MAX_CONNECTIONS=3 +CONFIG_BT_NIMBLE_MAX_BONDS=3 +CONFIG_BT_NIMBLE_MAX_CCCDS=8 +CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM=0 +CONFIG_BT_NIMBLE_PINNED_TO_CORE_0=y +# CONFIG_BT_NIMBLE_PINNED_TO_CORE_1 is not set +CONFIG_BT_NIMBLE_PINNED_TO_CORE=0 +CONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=4096 +CONFIG_BT_NIMBLE_ROLE_CENTRAL=y +CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=y +CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y +CONFIG_BT_NIMBLE_ROLE_OBSERVER=y +CONFIG_BT_NIMBLE_CONTROLLER_TASK_PRIORITY=23 +CONFIG_BT_NIMBLE_NVS_PERSIST=y +CONFIG_BT_NIMBLE_SECURITY_ENABLE=y +CONFIG_BT_NIMBLE_SM_LEGACY=y +CONFIG_BT_NIMBLE_SM_SC=y +# CONFIG_BT_NIMBLE_DEBUG is not set +CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_ENCRYPTION=y +# CONFIG_BT_NIMBLE_SM_SC_DEBUG_KEYS is not set +CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME="nimble" +CONFIG_BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31 +CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=256 +CONFIG_BT_NIMBLE_SVC_GAP_APPEARANCE=0 +CONFIG_BT_NIMBLE_ACL_BUF_COUNT=20 +CONFIG_BT_NIMBLE_ACL_BUF_SIZE=255 +CONFIG_BT_NIMBLE_HCI_EVT_BUF_SIZE=70 +CONFIG_BT_NIMBLE_HCI_EVT_HI_BUF_COUNT=30 +CONFIG_BT_NIMBLE_HCI_EVT_LO_BUF_COUNT=8 +CONFIG_BT_NIMBLE_MEMORY_SETTINGS=y +CONFIG_BT_NIMBLE_MSYS_1_BLOCK_COUNT=12 +CONFIG_BT_NIMBLE_MSYS_1_BLOCK_SIZE=256 +CONFIG_BT_NIMBLE_MSYS_2_BLOCK_COUNT=24 +CONFIG_BT_NIMBLE_MSYS_2_BLOCK_SIZE=320 +CONFIG_BT_NIMBLE_HS_FLOW_CTRL=y +CONFIG_BT_NIMBLE_HS_FLOW_CTRL_ITVL=1000 +CONFIG_BT_NIMBLE_HS_FLOW_CTRL_THRESH=2 +CONFIG_BT_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT=y +CONFIG_BT_NIMBLE_RPA_TIMEOUT=900 +# CONFIG_BT_NIMBLE_MESH is not set +CONFIG_BT_NIMBLE_CRYPTO_STACK_MBEDTLS=y +CONFIG_BT_NIMBLE_HS_STOP_TIMEOUT_MS=2000 +# CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT is not set +CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT=y +# CONFIG_BT_NIMBLE_EXT_ADV is not set +# CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set +CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y +CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_EFF=0 +CONFIG_BT_NIMBLE_WHITELIST_SIZE=12 +CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_2M_PHY=y +CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_CODED_PHY=y +CONFIG_BT_NIMBLE_HARDWARE_BLE_ONLY=y +# CONFIG_BT_NIMBLE_TEST_THROUGHPUT_TEST is not set +CONFIG_BT_NIMBLE_LL_RESOLV_LIST_SIZE=4 +CONFIG_BT_NIMBLE_LL_DUP_SCAN_LIST_COUNT=8 +# CONFIG_BT_NIMBLE_SLEEP_ENABLE is not set +# CONFIG_BT_NIMBLE_BLUFI_ENABLE is not set +CONFIG_BT_NIMBLE_USE_ESP_TIMER=y +# end of NimBLE Options +# end of Bluetooth + +# CONFIG_BLE_MESH is not set + +# +# Driver configurations +# + +# +# ADC configuration +# +# CONFIG_ADC_FORCE_XPD_FSM is not set +CONFIG_ADC_DISABLE_DAC=y +# end of ADC configuration + +# +# MCPWM configuration +# +# CONFIG_MCPWM_ISR_IN_IRAM is not set +# end of MCPWM configuration + +# +# SPI configuration +# +# CONFIG_SPI_MASTER_IN_IRAM is not set +CONFIG_SPI_MASTER_ISR_IN_IRAM=y +# CONFIG_SPI_SLAVE_IN_IRAM is not set +CONFIG_SPI_SLAVE_ISR_IN_IRAM=y +# end of SPI configuration + +# +# TWAI configuration +# +# CONFIG_TWAI_ISR_IN_IRAM is not set +# CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC is not set +# CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST is not set +# CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID is not set +# CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT is not set +# end of TWAI configuration + +# +# UART configuration +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of UART configuration + +# +# GPIO Configuration +# +# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set +# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set +# end of GPIO Configuration + +# +# GPTimer Configuration +# +# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set +# end of GPTimer Configuration + +# +# PCNT Configuration +# +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of PCNT Configuration + +# +# RMT Configuration +# +# CONFIG_RMT_ISR_IRAM_SAFE is not set +CONFIG_RMT_SUPPRESS_DEPRECATE_WARN=y +# CONFIG_RMT_ENABLE_DEBUG_LOG is not set +# end of RMT Configuration +# end of Driver configurations + +# +# eFuse Bit Manager +# +# CONFIG_EFUSE_CUSTOM_TABLE is not set +# CONFIG_EFUSE_VIRTUAL is not set +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set +CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set +CONFIG_EFUSE_MAX_BLK_LEN=192 +# end of eFuse Bit Manager + +# +# ESP-TLS +# +CONFIG_ESP_TLS_USING_MBEDTLS=y +# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set +# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set +# CONFIG_ESP_TLS_SERVER is not set +# CONFIG_ESP_TLS_PSK_VERIFICATION is not set +# CONFIG_ESP_TLS_INSECURE is not set +# end of ESP-TLS + +# +# ESP32-specific +# +CONFIG_ESP32_DPORT_WORKAROUND=y +# CONFIG_ESP32_SPIRAM_SUPPORT is not set +# CONFIG_ESP32_TRAX is not set +CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_26 is not set +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 +# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set +# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set +CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 +# end of ESP32-specific + +# +# ADC-Calibration +# +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y +# end of ADC-Calibration + +# +# Common ESP-related +# +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +# end of Common ESP-related + +# +# Ethernet +# +# CONFIG_ETH_USE_ESP32_EMAC is not set +# CONFIG_ETH_USE_SPI_ETHERNET is not set +# CONFIG_ETH_USE_OPENETH is not set +# end of Ethernet + +# +# Event Loop Library +# +# CONFIG_ESP_EVENT_LOOP_PROFILING is not set +CONFIG_ESP_EVENT_POST_FROM_ISR=y +CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y +# end of Event Loop Library + +# +# GDB Stub +# +# end of GDB Stub + +# +# ESP HTTP client +# +CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y +# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set +# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set +# end of ESP HTTP client + +# +# HTTP Server +# +CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024 +CONFIG_HTTPD_MAX_URI_LEN=512 +CONFIG_HTTPD_ERR_RESP_NO_DELAY=y +CONFIG_HTTPD_PURGE_BUF_LEN=32 +# CONFIG_HTTPD_LOG_PURGE_DATA is not set +CONFIG_HTTPD_WS_SUPPORT=y +# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set +# end of HTTP Server + +# +# ESP HTTPS OTA +# +# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set +CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP=y +# end of ESP HTTPS OTA + +# +# ESP HTTPS server +# +# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set +# end of ESP HTTPS server + +# +# Hardware Settings +# + +# +# MAC Config +# +CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y +CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y +CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y +CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y +# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 +# end of MAC Config + +# +# Sleep Config +# +CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y +CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y +# CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set +# CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND is not set +# end of Sleep Config + +# +# RTC Clock Config +# +CONFIG_RTC_CLK_SRC_INT_RC=y +# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_RTC_CLK_CAL_CYCLES=1024 +# end of RTC Clock Config + +# +# Peripheral Control +# +# CONFIG_PERIPH_CTRL_FUNC_IN_IRAM is not set +# end of Peripheral Control + +CONFIG_ESP32_REV_MIN_0=y +# CONFIG_ESP32_REV_MIN_1 is not set +# CONFIG_ESP32_REV_MIN_2 is not set +# CONFIG_ESP32_REV_MIN_3 is not set +CONFIG_ESP32_REV_MIN=0 +# end of Hardware Settings + +# +# LCD and Touch Panel +# + +# +# LCD Peripheral Configuration +# +CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 +# CONFIG_LCD_ENABLE_DEBUG_LOG is not set +# end of LCD Peripheral Configuration +# end of LCD and Touch Panel + +# +# ESP NETIF Adapter +# +CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 +CONFIG_ESP_NETIF_TCPIP_LWIP=y +# CONFIG_ESP_NETIF_LOOPBACK is not set +# CONFIG_ESP_NETIF_L2_TAP is not set +# end of ESP NETIF Adapter + +# +# PHY +# +CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP_PHY_MAX_TX_POWER=20 +CONFIG_ESP_PHY_REDUCE_TX_POWER=y +# end of PHY + +# +# Power Management +# +# CONFIG_PM_ENABLE is not set +# end of Power Management + +# +# ESP System Settings +# +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 +# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set +CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y +# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set +# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set + +# +# Memory protection +# +# end of Memory protection + +CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=5120 +CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y +# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set +# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set +CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 +CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 +CONFIG_ESP_CONSOLE_UART_DEFAULT=y +# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set +# CONFIG_ESP_CONSOLE_NONE is not set +CONFIG_ESP_CONSOLE_UART=y +CONFIG_ESP_CONSOLE_MULTIPLE_UART=y +CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 +CONFIG_ESP_INT_WDT=y +CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 +CONFIG_ESP_INT_WDT_CHECK_CPU1=y +CONFIG_ESP_TASK_WDT=y +# CONFIG_ESP_TASK_WDT_PANIC is not set +CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_ESP_PANIC_HANDLER_IRAM is not set +# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP_DEBUG_OCDAWARE=y +CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5=y + +# +# Brownout Detector +# +CONFIG_ESP_BROWNOUT_DET=y +CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_ESP_BROWNOUT_DET_LVL=0 +# end of Brownout Detector +# end of ESP System Settings + +# +# IPC (Inter-Processor Call) +# +CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_IPC_ISR_ENABLE=y +# end of IPC (Inter-Processor Call) + +# +# High resolution timer (esp_timer) +# +# CONFIG_ESP_TIMER_PROFILING is not set +CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y +CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y +CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 +CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 +# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set +CONFIG_ESP_TIMER_IMPL_TG0_LAC=y +# end of High resolution timer (esp_timer) + +# +# Wi-Fi +# +CONFIG_ESP32_WIFI_ENABLED=y +CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE=y +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_CSI_ENABLED is not set +CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +# CONFIG_ESP32_WIFI_NVS_ENABLED is not set +CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 +CONFIG_ESP32_WIFI_IRAM_OPT=y +CONFIG_ESP32_WIFI_RX_IRAM_OPT=y +CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y +# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set +# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set +# CONFIG_ESP_WIFI_GMAC_SUPPORT is not set +CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y +# end of Wi-Fi + +# +# Core dump +# +# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set +# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set +CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y +# end of Core dump + +# +# FAT Filesystem support +# +CONFIG_FATFS_VOLUME_COUNT=2 +# CONFIG_FATFS_SECTOR_512 is not set +# CONFIG_FATFS_SECTOR_1024 is not set +# CONFIG_FATFS_SECTOR_2048 is not set +CONFIG_FATFS_SECTOR_4096=y +CONFIG_FATFS_SECTORS_PER_CLUSTER_1=y +# CONFIG_FATFS_SECTORS_PER_CLUSTER_2 is not set +# CONFIG_FATFS_SECTORS_PER_CLUSTER_4 is not set +# CONFIG_FATFS_SECTORS_PER_CLUSTER_8 is not set +# CONFIG_FATFS_SECTORS_PER_CLUSTER_16 is not set +# CONFIG_FATFS_SECTORS_PER_CLUSTER_32 is not set +# CONFIG_FATFS_SECTORS_PER_CLUSTER_64 is not set +# CONFIG_FATFS_SECTORS_PER_CLUSTER_128 is not set +# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set +CONFIG_FATFS_CODEPAGE_437=y +# CONFIG_FATFS_CODEPAGE_720 is not set +# CONFIG_FATFS_CODEPAGE_737 is not set +# CONFIG_FATFS_CODEPAGE_771 is not set +# CONFIG_FATFS_CODEPAGE_775 is not set +# CONFIG_FATFS_CODEPAGE_850 is not set +# CONFIG_FATFS_CODEPAGE_852 is not set +# CONFIG_FATFS_CODEPAGE_855 is not set +# CONFIG_FATFS_CODEPAGE_857 is not set +# CONFIG_FATFS_CODEPAGE_860 is not set +# CONFIG_FATFS_CODEPAGE_861 is not set +# CONFIG_FATFS_CODEPAGE_862 is not set +# CONFIG_FATFS_CODEPAGE_863 is not set +# CONFIG_FATFS_CODEPAGE_864 is not set +# CONFIG_FATFS_CODEPAGE_865 is not set +# CONFIG_FATFS_CODEPAGE_866 is not set +# CONFIG_FATFS_CODEPAGE_869 is not set +# CONFIG_FATFS_CODEPAGE_932 is not set +# CONFIG_FATFS_CODEPAGE_936 is not set +# CONFIG_FATFS_CODEPAGE_949 is not set +# CONFIG_FATFS_CODEPAGE_950 is not set +CONFIG_FATFS_AUTO_TYPE=y +# CONFIG_FATFS_FAT12 is not set +# CONFIG_FATFS_FAT16 is not set +CONFIG_FATFS_CODEPAGE=437 +CONFIG_FATFS_LFN_NONE=y +# CONFIG_FATFS_LFN_HEAP is not set +# CONFIG_FATFS_LFN_STACK is not set +CONFIG_FATFS_FS_LOCK=0 +CONFIG_FATFS_TIMEOUT_MS=10000 +CONFIG_FATFS_PER_FILE_CACHE=y +# CONFIG_FATFS_USE_FASTSEEK is not set +# end of FAT Filesystem support + +# +# FreeRTOS +# + +# +# Kernel +# +# CONFIG_FREERTOS_SMP is not set +# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_HZ=100 +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=2304 +# CONFIG_FREERTOS_USE_IDLE_HOOK is not set +# CONFIG_FREERTOS_USE_TICK_HOOK is not set +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 +# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set +# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set +# end of Kernel + +# +# Port +# +CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y +# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set +# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set +CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y +CONFIG_FREERTOS_ISR_STACKSIZE=2096 +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +# CONFIG_FREERTOS_FPU_IN_ISR is not set +CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y +# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set +# CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set +# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set +CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y +CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y +# end of Port + +CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF +CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y +CONFIG_FREERTOS_DEBUG_OCDAWARE=y +# end of FreeRTOS + +# +# Hardware Abstraction Layer (HAL) and Low Level (LL) +# +CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y +# CONFIG_HAL_ASSERTION_DISABLE is not set +# CONFIG_HAL_ASSERTION_SILIENT is not set +# CONFIG_HAL_ASSERTION_ENABLE is not set +CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 +# end of Hardware Abstraction Layer (HAL) and Low Level (LL) + +# +# Heap memory debugging +# +CONFIG_HEAP_POISONING_DISABLED=y +# CONFIG_HEAP_POISONING_LIGHT is not set +# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set +CONFIG_HEAP_TRACING_OFF=y +# CONFIG_HEAP_TRACING_STANDALONE is not set +# CONFIG_HEAP_TRACING_TOHOST is not set +# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set +# end of Heap memory debugging + +# +# Log output +# +# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set +# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set +# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set +CONFIG_LOG_DEFAULT_LEVEL_INFO=y +# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set +# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set +CONFIG_LOG_DEFAULT_LEVEL=3 +CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y +# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set +# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set +CONFIG_LOG_MAXIMUM_LEVEL=3 +CONFIG_LOG_COLORS=y +CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y +# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set +# end of Log output + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="espressif" +# CONFIG_LWIP_NETIF_API is not set +# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set +CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y +# CONFIG_LWIP_L2_TO_L3_COPY is not set +# CONFIG_LWIP_IRAM_OPTIMIZATION is not set +CONFIG_LWIP_TIMERS_ONDEMAND=y +CONFIG_LWIP_MAX_SOCKETS=10 +# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set +# CONFIG_LWIP_SO_LINGER is not set +CONFIG_LWIP_SO_REUSE=y +CONFIG_LWIP_SO_REUSE_RXTOALL=y +CONFIG_LWIP_SO_RCVBUF=y +# CONFIG_LWIP_NETBUF_RECVINFO is not set +CONFIG_LWIP_IP4_FRAG=y +CONFIG_LWIP_IP6_FRAG=y +# CONFIG_LWIP_IP4_REASSEMBLY is not set +# CONFIG_LWIP_IP6_REASSEMBLY is not set +# CONFIG_LWIP_IP_FORWARD is not set +# CONFIG_LWIP_STATS is not set +CONFIG_LWIP_ESP_GRATUITOUS_ARP=y +CONFIG_LWIP_GARP_TMR_INTERVAL=60 +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 +CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y +# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set +CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y +# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set +CONFIG_LWIP_DHCP_OPTIONS_LEN=68 + +# +# DHCP server +# +CONFIG_LWIP_DHCPS=y +CONFIG_LWIP_DHCPS_LEASE_UNIT=60 +CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 +# end of DHCP server + +# CONFIG_LWIP_AUTOIP is not set +CONFIG_LWIP_IPV6=y +CONFIG_LWIP_IPV6_AUTOCONFIG=y +CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 +# CONFIG_LWIP_IPV6_FORWARD is not set +CONFIG_LWIP_IPV6_RDNSS_MAX_DNS_SERVERS=0 +# CONFIG_LWIP_IPV6_DHCP6 is not set +# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set +CONFIG_LWIP_NETIF_LOOPBACK=y +CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 + +# +# TCP +# +CONFIG_LWIP_MAX_ACTIVE_TCP=16 +CONFIG_LWIP_MAX_LISTENING_TCP=16 +CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y +CONFIG_LWIP_TCP_MAXRTX=12 +CONFIG_LWIP_TCP_SYNMAXRTX=12 +CONFIG_LWIP_TCP_MSS=1440 +CONFIG_LWIP_TCP_TMR_INTERVAL=250 +CONFIG_LWIP_TCP_MSL=60000 +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744 +CONFIG_LWIP_TCP_WND_DEFAULT=5744 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 +CONFIG_LWIP_TCP_QUEUE_OOSEQ=y +# CONFIG_LWIP_TCP_SACK_OUT is not set +CONFIG_LWIP_TCP_OVERSIZE_MSS=y +# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set +# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set +CONFIG_LWIP_TCP_RTO_TIME=1500 +# end of TCP + +# +# UDP +# +CONFIG_LWIP_MAX_UDP_PCBS=16 +CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 +# end of UDP + +# +# Checksums +# +# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set +# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set +CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y +# end of Checksums + +CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 +CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y +# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set +# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set +CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_LWIP_PPP_SUPPORT is not set +CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 +CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 +# CONFIG_LWIP_SLIP_SUPPORT is not set + +# +# ICMP +# +CONFIG_LWIP_ICMP=y +# CONFIG_LWIP_MULTICAST_PING is not set +# CONFIG_LWIP_BROADCAST_PING is not set +# end of ICMP + +# +# LWIP RAW API +# +CONFIG_LWIP_MAX_RAW_PCBS=16 +# end of LWIP RAW API + +# +# SNTP +# +CONFIG_LWIP_SNTP_MAX_SERVERS=1 +# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set +CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 +# end of SNTP + +CONFIG_LWIP_ESP_LWIP_ASSERT=y + +# +# Hooks +# +# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set +CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y +# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y +# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set +CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y +# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set +# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set +CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y +# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set +# end of Hooks + +# CONFIG_LWIP_DEBUG is not set +# end of LWIP + +# +# mbedTLS +# +CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y +# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set +# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set +CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y +CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 +CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 +# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set +# CONFIG_MBEDTLS_DEBUG is not set + +# +# mbedTLS v3.x related +# +# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set +# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set +CONFIG_MBEDTLS_ECDH_LEGACY_CONTEXT=y +# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set +# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set +CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y +# end of mbedTLS v3.x related + +# +# Certificate Bundle +# +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set +# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 +# end of Certificate Bundle + +CONFIG_MBEDTLS_ECP_RESTARTABLE=y +CONFIG_MBEDTLS_CMAC_C=y +CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_HARDWARE_MPI=y +CONFIG_MBEDTLS_HARDWARE_SHA=y +CONFIG_MBEDTLS_ROM_MD5=y +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set +CONFIG_MBEDTLS_HAVE_TIME=y +# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set +# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set +CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y +CONFIG_MBEDTLS_SHA512_C=y +CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y +# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set +# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set +# CONFIG_MBEDTLS_TLS_DISABLED is not set +CONFIG_MBEDTLS_TLS_SERVER=y +CONFIG_MBEDTLS_TLS_CLIENT=y +CONFIG_MBEDTLS_TLS_ENABLED=y + +# +# TLS Key Exchange Methods +# +# CONFIG_MBEDTLS_PSK_MODES is not set +CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y +# end of TLS Key Exchange Methods + +CONFIG_MBEDTLS_SSL_RENEGOTIATION=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y +# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set +# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set +CONFIG_MBEDTLS_SSL_ALPN=y +CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y +CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y + +# +# Symmetric Ciphers +# +CONFIG_MBEDTLS_AES_C=y +# CONFIG_MBEDTLS_CAMELLIA_C is not set +# CONFIG_MBEDTLS_DES_C is not set +CONFIG_MBEDTLS_RC4_DISABLED=y +# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set +# CONFIG_MBEDTLS_RC4_ENABLED is not set +# CONFIG_MBEDTLS_BLOWFISH_C is not set +# CONFIG_MBEDTLS_XTEA_C is not set +CONFIG_MBEDTLS_CCM_C=y +CONFIG_MBEDTLS_GCM_C=y +# CONFIG_MBEDTLS_NIST_KW_C is not set +# end of Symmetric Ciphers + +# CONFIG_MBEDTLS_RIPEMD160_C is not set + +# +# Certificates +# +CONFIG_MBEDTLS_PEM_PARSE_C=y +CONFIG_MBEDTLS_PEM_WRITE_C=y +CONFIG_MBEDTLS_X509_CRL_PARSE_C=y +CONFIG_MBEDTLS_X509_CSR_PARSE_C=y +# end of Certificates + +CONFIG_MBEDTLS_ECP_C=y +# CONFIG_MBEDTLS_DHM_C is not set +CONFIG_MBEDTLS_ECDH_C=y +CONFIG_MBEDTLS_ECDSA_C=y +# CONFIG_MBEDTLS_ECJPAKE_C is not set +CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y +CONFIG_MBEDTLS_ECP_NIST_OPTIM=y +# CONFIG_MBEDTLS_POLY1305_C is not set +# CONFIG_MBEDTLS_CHACHA20_C is not set +# CONFIG_MBEDTLS_HKDF_C is not set +# CONFIG_MBEDTLS_THREADING_C is not set +# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set +# CONFIG_MBEDTLS_SECURITY_RISKS is not set +# end of mbedTLS + +# +# mDNS +# +CONFIG_MDNS_MAX_INTERFACES=3 +CONFIG_MDNS_MAX_SERVICES=10 +CONFIG_MDNS_TASK_PRIORITY=1 +CONFIG_MDNS_TASK_STACK_SIZE=4096 +# CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set +CONFIG_MDNS_TASK_AFFINITY_CPU0=y +# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set +CONFIG_MDNS_TASK_AFFINITY=0x0 +CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 +# CONFIG_MDNS_STRICT_MODE is not set +CONFIG_MDNS_TIMER_PERIOD_MS=100 +# CONFIG_MDNS_NETWORKING_SOCKET is not set +CONFIG_MDNS_MULTIPLE_INSTANCE=y + +# +# MDNS Predefined interfaces +# +CONFIG_MDNS_PREDEF_NETIF_STA=y +CONFIG_MDNS_PREDEF_NETIF_AP=y +# end of MDNS Predefined interfaces +# end of mDNS + +# +# ESP-MQTT Configurations +# +CONFIG_MQTT_PROTOCOL_311=y +CONFIG_MQTT_TRANSPORT_SSL=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y +# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set +# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set +# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set +# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set +# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set +# CONFIG_MQTT_CUSTOM_OUTBOX is not set +# end of ESP-MQTT Configurations + +# +# Newlib +# +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +# CONFIG_NEWLIB_NANO_FORMAT is not set +CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y +# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set +# end of Newlib + +# +# NVS +# +# end of NVS + +# +# OpenThread +# +# CONFIG_OPENTHREAD_ENABLED is not set +# end of OpenThread + +# +# PThreads +# +CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_PTHREAD_STACK_MIN=768 +CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y +# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set +# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set +CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" +# end of PThreads + +# +# SPI Flash driver +# +# CONFIG_SPI_FLASH_VERIFY_WRITE is not set +# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set +CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y +CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y +# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set +# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set +# CONFIG_SPI_FLASH_USE_LEGACY_IMPL is not set +# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set +# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set +CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y +CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 +CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 +CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 +# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set +# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set +# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set + +# +# Auto-detect flash chips +# +CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y +# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set +# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set +# end of Auto-detect flash chips + +CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y +# end of SPI Flash driver + +# +# SPIFFS Configuration +# +CONFIG_SPIFFS_MAX_PARTITIONS=3 + +# +# SPIFFS Cache Configuration +# +CONFIG_SPIFFS_CACHE=y +CONFIG_SPIFFS_CACHE_WR=y +# CONFIG_SPIFFS_CACHE_STATS is not set +# end of SPIFFS Cache Configuration + +CONFIG_SPIFFS_PAGE_CHECK=y +CONFIG_SPIFFS_GC_MAX_RUNS=10 +# CONFIG_SPIFFS_GC_STATS is not set +CONFIG_SPIFFS_PAGE_SIZE=256 +CONFIG_SPIFFS_OBJ_NAME_LEN=32 +# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set +CONFIG_SPIFFS_USE_MAGIC=y +CONFIG_SPIFFS_USE_MAGIC_LENGTH=y +CONFIG_SPIFFS_META_LENGTH=4 +CONFIG_SPIFFS_USE_MTIME=y + +# +# Debug Configuration +# +# CONFIG_SPIFFS_DBG is not set +# CONFIG_SPIFFS_API_DBG is not set +# CONFIG_SPIFFS_GC_DBG is not set +# CONFIG_SPIFFS_CACHE_DBG is not set +# CONFIG_SPIFFS_CHECK_DBG is not set +# CONFIG_SPIFFS_TEST_VISUALISATION is not set +# end of Debug Configuration +# end of SPIFFS Configuration + +# +# TCP Transport +# + +# +# Websocket +# +CONFIG_WS_TRANSPORT=y +CONFIG_WS_BUFFER_SIZE=1024 +# end of Websocket +# end of TCP Transport + +# +# Ultra Low Power (ULP) Co-processor +# +# CONFIG_ULP_COPROC_ENABLED is not set +# end of Ultra Low Power (ULP) Co-processor + +# +# Unity unit testing library +# +CONFIG_UNITY_ENABLE_FLOAT=y +CONFIG_UNITY_ENABLE_DOUBLE=y +# CONFIG_UNITY_ENABLE_64BIT is not set +# CONFIG_UNITY_ENABLE_COLOR is not set +CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y +# CONFIG_UNITY_ENABLE_FIXTURE is not set +# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set +# end of Unity unit testing library + +# +# Virtual file system +# +# CONFIG_VFS_SUPPORT_IO is not set +# end of Virtual file system + +# +# Wear Levelling +# +# CONFIG_WL_SECTOR_SIZE_512 is not set +CONFIG_WL_SECTOR_SIZE_4096=y +CONFIG_WL_SECTOR_SIZE=4096 +# end of Wear Levelling + +# +# Wi-Fi Provisioning Manager +# +CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 +CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 +# CONFIG_WIFI_PROV_BLE_BONDING is not set +CONFIG_WIFI_PROV_BLE_SEC_CONN=y +CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION=y +# end of Wi-Fi Provisioning Manager + +# +# Supplicant +# +CONFIG_WPA_MBEDTLS_CRYPTO=y +CONFIG_WPA_MBEDTLS_TLS_CLIENT=y +# CONFIG_WPA_WAPI_PSK is not set +# CONFIG_WPA_SUITE_B_192 is not set +# CONFIG_WPA_DEBUG_PRINT is not set +# CONFIG_WPA_TESTING_OPTIONS is not set +# CONFIG_WPA_WPS_STRICT is not set +# CONFIG_WPA_11KV_SUPPORT is not set +# CONFIG_WPA_MBO_SUPPORT is not set +# CONFIG_WPA_DPP_SUPPORT is not set +# CONFIG_WPA_11R_SUPPORT is not set +# end of Supplicant + +# +# ESP-NimBLE-CPP configuration +# +# CONFIG_NIMBLE_CPP_ENABLE_RETURN_CODE_TEXT is not set +# CONFIG_NIMBLE_CPP_ENABLE_GAP_EVENT_CODE_TEXT is not set +# CONFIG_NIMBLE_CPP_ENABLE_ADVERTISMENT_TYPE_TEXT is not set +# end of ESP-NimBLE-CPP configuration +# end of Component config + +# Deprecated options for backward compatibility +# CONFIG_NO_BLOBS is not set +# CONFIG_ESP32_NO_BLOBS is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set +CONFIG_LOG_BOOTLOADER_LEVEL=3 +# CONFIG_APP_ROLLBACK_ENABLE is not set +# CONFIG_FLASH_ENCRYPTION_ENABLED is not set +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +# CONFIG_FLASHMODE_DOUT is not set +CONFIG_MONITOR_BAUD=115200 +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y +# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set +# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set +CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_CXX_EXCEPTIONS is not set +CONFIG_STACK_CHECK_NONE=y +# CONFIG_STACK_CHECK_NORM is not set +# CONFIG_STACK_CHECK_STRONG is not set +# CONFIG_STACK_CHECK_ALL is not set +# CONFIG_WARN_WRITE_STRINGS is not set +# CONFIG_DISABLE_GCC8_WARNINGS is not set +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y +CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY=y +# CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY is not set +# CONFIG_BTDM_CONTROLLER_MODE_BTDM is not set +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN=3 +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 +CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI=y +# CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4 is not set +CONFIG_BTDM_CONTROLLER_MODEM_SLEEP=y +CONFIG_BLE_SCAN_DUPLICATE=y +CONFIG_SCAN_DUPLICATE_BY_DEVICE_ADDR=y +# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA is not set +# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR is not set +CONFIG_SCAN_DUPLICATE_TYPE=0 +CONFIG_DUPLICATE_SCAN_CACHE_SIZE=200 +# CONFIG_BLE_MESH_SCAN_DUPLICATE_EN is not set +CONFIG_BTDM_CONTROLLER_FULL_SCAN_SUPPORTED=y +CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED=y +CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_NUM=100 +CONFIG_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 +# CONFIG_BLUEDROID_ENABLED is not set +CONFIG_NIMBLE_ENABLED=y +CONFIG_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y +# CONFIG_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set +CONFIG_NIMBLE_MAX_CONNECTIONS=3 +CONFIG_NIMBLE_MAX_BONDS=3 +CONFIG_NIMBLE_MAX_CCCDS=8 +CONFIG_NIMBLE_L2CAP_COC_MAX_NUM=0 +CONFIG_NIMBLE_PINNED_TO_CORE_0=y +# CONFIG_NIMBLE_PINNED_TO_CORE_1 is not set +CONFIG_NIMBLE_PINNED_TO_CORE=0 +CONFIG_NIMBLE_TASK_STACK_SIZE=4096 +CONFIG_BT_NIMBLE_TASK_STACK_SIZE=4096 +CONFIG_NIMBLE_ROLE_CENTRAL=y +CONFIG_NIMBLE_ROLE_PERIPHERAL=y +CONFIG_NIMBLE_ROLE_BROADCASTER=y +CONFIG_NIMBLE_ROLE_OBSERVER=y +CONFIG_NIMBLE_NVS_PERSIST=y +CONFIG_NIMBLE_SM_LEGACY=y +CONFIG_NIMBLE_SM_SC=y +# CONFIG_NIMBLE_DEBUG is not set +# CONFIG_NIMBLE_SM_SC_DEBUG_KEYS is not set +CONFIG_NIMBLE_SVC_GAP_DEVICE_NAME="nimble" +CONFIG_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31 +CONFIG_NIMBLE_ATT_PREFERRED_MTU=256 +CONFIG_NIMBLE_SVC_GAP_APPEARANCE=0 +CONFIG_NIMBLE_ACL_BUF_COUNT=20 +CONFIG_NIMBLE_ACL_BUF_SIZE=255 +CONFIG_NIMBLE_HCI_EVT_BUF_SIZE=70 +CONFIG_NIMBLE_HCI_EVT_HI_BUF_COUNT=30 +CONFIG_NIMBLE_HCI_EVT_LO_BUF_COUNT=8 +CONFIG_BT_NIMBLE_MSYS1_BLOCK_COUNT=12 +CONFIG_NIMBLE_HS_FLOW_CTRL=y +CONFIG_NIMBLE_HS_FLOW_CTRL_ITVL=1000 +CONFIG_NIMBLE_HS_FLOW_CTRL_THRESH=2 +CONFIG_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT=y +CONFIG_NIMBLE_RPA_TIMEOUT=900 +# CONFIG_NIMBLE_MESH is not set +CONFIG_NIMBLE_CRYPTO_STACK_MBEDTLS=y +CONFIG_ADC2_DISABLE_DAC=y +# CONFIG_SPIRAM_SUPPORT is not set +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set +# CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_EVENT_LOOP_PROFILING is not set +CONFIG_POST_EVENTS_FROM_ISR=y +CONFIG_POST_EVENTS_FROM_IRAM_ISR=y +CONFIG_OTA_ALLOW_HTTP=y +# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 +CONFIG_ESP_SYSTEM_PD_FLASH=y +CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set +# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP32_PHY_MAX_TX_POWER=20 +CONFIG_REDUCE_PHY_TX_POWER=y +CONFIG_ESP32_REDUCE_PHY_TX_POWER=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 +# CONFIG_ESP32_PANIC_PRINT_HALT is not set +CONFIG_ESP32_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP32_PANIC_GDBSTUB is not set +CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_MAIN_TASK_STACK_SIZE=5120 +CONFIG_CONSOLE_UART_DEFAULT=y +# CONFIG_CONSOLE_UART_CUSTOM is not set +# CONFIG_CONSOLE_UART_NONE is not set +# CONFIG_ESP_CONSOLE_UART_NONE is not set +CONFIG_CONSOLE_UART=y +CONFIG_CONSOLE_UART_NUM=0 +CONFIG_CONSOLE_UART_BAUDRATE=115200 +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=300 +CONFIG_INT_WDT_CHECK_CPU1=y +CONFIG_TASK_WDT=y +# CONFIG_TASK_WDT_PANIC is not set +CONFIG_TASK_WDT_TIMEOUT_S=5 +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_BROWNOUT_DET=y +CONFIG_ESP32_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +CONFIG_ESP32_BROWNOUT_DET_LVL=0 +CONFIG_IPC_TASK_STACK_SIZE=1024 +CONFIG_TIMER_TASK_STACK_SIZE=3584 +CONFIG_SW_COEXIST_ENABLE=y +# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set +# CONFIG_L2_TO_L3_COPY is not set +CONFIG_ESP_GRATUITOUS_ARP=y +CONFIG_GARP_TMR_INTERVAL=60 +CONFIG_TCPIP_RECVMBOX_SIZE=32 +CONFIG_TCP_MAXRTX=12 +CONFIG_TCP_SYNMAXRTX=12 +CONFIG_TCP_MSS=1440 +CONFIG_TCP_MSL=60000 +CONFIG_TCP_SND_BUF_DEFAULT=5744 +CONFIG_TCP_WND_DEFAULT=5744 +CONFIG_TCP_RECVMBOX_SIZE=6 +CONFIG_TCP_QUEUE_OOSEQ=y +CONFIG_TCP_OVERSIZE_MSS=y +# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set +# CONFIG_TCP_OVERSIZE_DISABLE is not set +CONFIG_UDP_RECVMBOX_SIZE=6 +CONFIG_TCPIP_TASK_STACK_SIZE=3072 +CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y +# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set +# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set +CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_PPP_SUPPORT is not set +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_ESP32_PTHREAD_STACK_MIN=768 +CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set +CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" +CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y +# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set +# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set +# CONFIG_ESP32_ULP_COPROC_ENABLED is not set +# End of deprecated options diff --git a/switchconf.sh b/switchconf.sh index e7b7fef..869e9b3 100755 --- a/switchconf.sh +++ b/switchconf.sh @@ -12,6 +12,7 @@ VALID_CONFIGS=( "gernot" "comred_new" "aveexy" + "testdevice" ) print_usage() { From 2773f0614d10d723b0eb1f7cb0356e8c4fdfafd2 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 9 Jun 2022 01:24:44 +0200 Subject: [PATCH 15/38] Updated protocol --- main/cloud.cpp | 194 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 167 insertions(+), 27 deletions(-) diff --git a/main/cloud.cpp b/main/cloud.cpp index 57bf78f..3d8020b 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -11,7 +11,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -70,10 +72,11 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v , void>::type -toArduinoJson(std::string_view key, T value, JsonObject &object) +toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) { - object["name"] = key; - object["value"] = nullptr; + object["n"] = key; + object["v"] = nullptr; + object["d"] = nullptr; } template @@ -81,30 +84,33 @@ typename std::enable_if< std::is_same_v || std::is_integral_v , void>::type -toArduinoJson(std::string_view key, T value, JsonObject &object) +toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) { - object["name"] = key; - object["value"] = value; + object["n"] = key; + object["v"] = value; + object["d"] = defaultValue; } template typename std::enable_if< is_duration_v , void>::type -toArduinoJson(std::string_view key, T value, JsonObject &object) +toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) { - object["name"] = key; - object["value"] = value.count(); + object["n"] = key; + object["v"] = value.count(); + object["d"] = defaultValue.count(); } template typename std::enable_if< std::is_same_v , void>::type -toArduinoJson(std::string_view key, T value, JsonObject &object) +toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) { - object["name"] = key; - object["value"] = value; + object["n"] = key; + object["v"] = value; + object["d"] = defaultValue; } template @@ -113,23 +119,29 @@ typename std::enable_if< std::is_same_v || std::is_same_v , void>::type -toArduinoJson(std::string_view key, T value, JsonObject &object) +toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) { - object["name"] = key; - object["value"] = wifi_stack::toString(value); + object["n"] = key; + object["v"] = wifi_stack::toString(value); + object["d"] = wifi_stack::toString(defaultValue); } template typename std::enable_if< std::is_same_v> , void>::type -toArduinoJson(std::string_view key, T value, JsonObject &object) +toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) { - object["name"] = key; + object["n"] = key; if (value) - object["value"] = wifi_stack::toString(*value); + object["v"] = wifi_stack::toString(*value); else - object["value"] = nullptr; + object["v"] = nullptr; + + if (defaultValue) + object["d"] = wifi_stack::toString(*defaultValue); + else + object["d"] = nullptr; } template @@ -143,10 +155,11 @@ typename std::enable_if< std::is_same_v || std::is_same_v , void>::type -toArduinoJson(std::string_view key, T value, JsonObject &object) +toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) { - object["name"] = key; - object["value"] = std::to_underlying(value); + object["n"] = key; + object["v"] = std::to_underlying(value); + object["d"] = std::to_underlying(defaultValue); } // setter @@ -305,8 +318,9 @@ void send_config(uint32_t skipCount) i++; JsonObject configObject = configsArray.createNestedObject(); - toArduinoJson(nvsName, config.value(), configObject); - configObject["type"] = typeutils::t_to_str::str; + toArduinoJson(nvsName, config.value(), config.defaultValue(), configObject); + configObject["T"] = typeutils::t_to_str::str; + configObject["t"] = config.touched(); if (doc.overflowed()) { @@ -340,7 +354,7 @@ void send_config(uint32_t skipCount) } } -void send_single_config(const std::string &nvsName) +void send_single_config(const std::string &nvsName, bool force_update = false) { if (!cloudClient.is_connected()) return; @@ -352,8 +366,10 @@ void send_single_config(const std::string &nvsName) if (config.nvsName() == nvsName) { JsonObject configObject = doc.createNestedObject("config"); - toArduinoJson(nvsName, config.value(), configObject); - configObject["type"] = typeutils::t_to_str::str; + toArduinoJson(nvsName, config.value(), config.defaultValue(), configObject); + configObject["T"] = typeutils::t_to_str::str; + configObject["t"] = config.touched(); + configObject["f"] = force_update; success = true; } }); @@ -367,6 +383,90 @@ void send_single_config(const std::string &nvsName) cloudClient.send_text(body, timeout); } +void send_information() +{ + if (!cloudClient.is_connected()) + return; + doc.clear(); + + doc["type"] = "info"; + JsonObject infoObject = doc.createNestedObject("info"); + JsonObject gitObject = infoObject.createNestedObject("git"); + gitObject["branch"] = GIT_BRANCH; + gitObject["commit"] = GIT_REV; + + JsonObject wifiObject = infoObject.createNestedObject("wifi"); + const bool wifi_connected = wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::CONNECTED; + wifiObject["connected"] = wifi_connected; + if (wifi_connected) + { + if (const auto result = wifi_stack::get_ip_info(wifi_stack::esp_netifs[ESP_IF_WIFI_STA]); result) + { + wifiObject["ip"] = wifi_stack::toString(result->ip); + wifiObject["mask"] = wifi_stack::toString(result->netmask); + wifiObject["gw"] = wifi_stack::toString(result->gw); + } + else + { + wifiObject["error"] = "Could not get IP info"; + } + + if (const auto result = wifi_stack::get_sta_ap_info(); result) + { + wifiObject["ssid"] = std::string_view{reinterpret_cast(result->ssid)}; + wifiObject["bssid"] = wifi_stack::toString(wifi_stack::mac_t{result->bssid}); + wifiObject["channel"] = result->primary; + wifiObject["rssi"] = result->rssi; + } + else + { + wifiObject["error"] = "Could not get STA info"; + } + } + + if (auto currentDisplay = static_cast(espgui::currentDisplay.get())) + { + JsonObject displayObject = infoObject.createNestedObject("display"); + if (const auto *textInterface = currentDisplay->asTextInterface()) + { + displayObject["name"] = textInterface->text(); + } + + if (const auto *display = currentDisplay->asMenuDisplay()) + { + displayObject["name"] = display->text(); + } + } + else + { + infoObject["display"] = nullptr; + } + + infoObject["uptime"] = espchrono::millis_clock::now().time_since_epoch().count(); + + std::string body; + serializeJson(doc, body); + doc.clear(); + const auto timeout = std::chrono::ceil( + espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + cloudClient.send_text(body, timeout); +} + +void send_uptime() +{ + if (!cloudClient.is_connected()) + return; + doc.clear(); + doc["type"] = "uptime"; + doc["info"] = espchrono::millis_clock::now().time_since_epoch().count(); + std::string body; + serializeJson(doc, body); + doc.clear(); + const auto timeout = std::chrono::ceil( + espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + cloudClient.send_text(body, timeout); +} + void cloudHeartbeat() { if (!cloudClient.is_connected()) @@ -755,11 +855,51 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int } return; } + else if (type == "resetConfig") + { + std::string name = doc["nvskey"]; + doc.clear(); + bool success{false}; + configs.callForEveryConfig([&](auto &config){ + const std::string_view nvsName{config.nvsName()}; + + if (nvsName == name) + { + if (const auto result = configs.reset_config(config); !result) + { + ESP_LOGE(TAG, "reset_config() failed with %s", result.error().c_str()); + return; + } + success = true; + } + }); + if (!success) + { + ESP_LOGE(TAG, "reset_config() failed with %s", "unknown config"); + return; + } + else + { + send_single_config(name, true); + } + } + else if (type == "getInformation") + { + send_information(); + } + else if (type == "getUptime") + { + send_uptime(); + } break; } case WEBSOCKET_EVENT_ERROR: ESP_LOGE(TAG, "%s event_id=%s %.*s", event_base, "WEBSOCKET_EVENT_ERROR", data->data_len, data->data_ptr); break; + case WEBSOCKET_EVENT_CLOSED: + ESP_LOGE(TAG, "%s event_id=%s %.*s", event_base, "WEBSOCKET_EVENT_CLOSED", data->data_len, data->data_ptr); + hasAnnouncedItself = false; + break; default: ESP_LOGI(TAG, "%s unknown event_id %i", event_base, event_id); } From 7bece3c32f67df30f7ca17300ff8b22a95c0743c Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 9 Jun 2022 03:39:21 +0200 Subject: [PATCH 16/38] Added cloud destroy and battery percentage --- main/cloud.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/main/cloud.cpp b/main/cloud.cpp index 3d8020b..b789aff 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -444,6 +444,14 @@ void send_information() infoObject["uptime"] = espchrono::millis_clock::now().time_since_epoch().count(); + // battery + if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) + { + infoObject["percentage"] = fmt::format("{:.1f}%", getBatteryPercentage(*avgVoltage, BatteryCellType(configs.battery.cellType.value()))); + } + else + infoObject["percentage"] = nullptr; + std::string body; serializeJson(doc, body); doc.clear(); @@ -899,6 +907,7 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int case WEBSOCKET_EVENT_CLOSED: ESP_LOGE(TAG, "%s event_id=%s %.*s", event_base, "WEBSOCKET_EVENT_CLOSED", data->data_len, data->data_ptr); hasAnnouncedItself = false; + destroyCloud(); break; default: ESP_LOGI(TAG, "%s unknown event_id %i", event_base, event_id); From 91f2f621fe4cde9405552949745ff1aefc390e03 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 9 Jun 2022 03:45:17 +0200 Subject: [PATCH 17/38] Added voltage field --- main/cloud.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main/cloud.cpp b/main/cloud.cpp index b789aff..de61f1a 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -448,9 +448,13 @@ void send_information() if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) { infoObject["percentage"] = fmt::format("{:.1f}%", getBatteryPercentage(*avgVoltage, BatteryCellType(configs.battery.cellType.value()))); + infoObject["voltage"] = *avgVoltage; } else + { infoObject["percentage"] = nullptr; + infoObject["voltage"] = nullptr; + } std::string body; serializeJson(doc, body); From c16a126a2fea81b94c192d1081e701d7342d4366 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 9 Jun 2022 04:14:50 +0200 Subject: [PATCH 18/38] Fixed format string --- main/cloud.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/cloud.cpp b/main/cloud.cpp index de61f1a..c1d4d5a 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -447,7 +447,7 @@ void send_information() // battery if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) { - infoObject["percentage"] = fmt::format("{:.1f}%", getBatteryPercentage(*avgVoltage, BatteryCellType(configs.battery.cellType.value()))); + infoObject["percentage"] = fmt::format("{:.1f}", getBatteryPercentage(*avgVoltage, BatteryCellType(configs.battery.cellType.value()))); infoObject["voltage"] = *avgVoltage; } else From e49603751f5f55568515d676464cec47a2f79acd Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sat, 11 Jun 2022 19:06:55 +0200 Subject: [PATCH 19/38] Implemented ota --- main/cloud.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/main/cloud.cpp b/main/cloud.cpp index c1d4d5a..9e788ba 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -22,6 +22,7 @@ #include "bobbyerrorhandler.h" #include "globals.h" #include "newsettings.h" +#include "ota.h" #include "typeutils.h" #include "utils.h" @@ -37,6 +38,7 @@ namespace { std::optional lastCloudCollect; std::optional lastCloudSend; std::optional lastHeartbeat; +std::optional lastOtaStatus; bool hasAnnouncedItself{}; @@ -479,6 +481,50 @@ void send_uptime() cloudClient.send_text(body, timeout); } +void send_ota_status() +{ + if (!cloudClient.is_connected()) + return; + doc.clear(); + doc["type"] = "otaStatus"; + if (!asyncOta) + { + doc["info"] = nullptr; + } + else + { + JsonObject otaObject = doc.createNestedObject("info"); + otaObject["status"] = toString(asyncOta->status()); + otaObject["progress"] = asyncOta->progress(); + if (const auto totalSize = asyncOta->totalSize(); totalSize) + { + otaObject["totalSize"] = *totalSize; + } + else + { + otaObject["totalSize"] = nullptr; + } + + if (const auto &appDesc = asyncOta->appDesc()) + { + otaObject["newVersion"] = appDesc->version; + otaObject["date"] = appDesc->date; + } + else + { + otaObject["newVersion"] = nullptr; + otaObject["date"] = nullptr; + } + } + + std::string body; + serializeJson(doc, body); + doc.clear(); + const auto timeout = std::chrono::ceil( + espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + cloudClient.send_text(body, timeout); +} + void cloudHeartbeat() { if (!cloudClient.is_connected()) @@ -531,6 +577,15 @@ void updateCloud() cloudHeartbeat(); lastHeartbeat = now; } + + if (asyncOtaTaskStarted) + { + if (!lastOtaStatus || now - *lastOtaStatus >= 1000ms) + { + send_ota_status(); + lastOtaStatus = now; + } + } } void cloudCollect() @@ -640,9 +695,8 @@ void cloudSend() if (espchrono::ago(lastCreateTry) < 10s) return; createCloud(); - } - if (!cloudClient) return; + } if (!cloudStarted) { @@ -903,6 +957,14 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int { send_uptime(); } + else if (type == "getOtaStatus") + { + send_ota_status(); + } + else + { + ESP_LOGE(TAG, "unknown type: %s", type.c_str()); + } break; } case WEBSOCKET_EVENT_ERROR: @@ -911,7 +973,7 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int case WEBSOCKET_EVENT_CLOSED: ESP_LOGE(TAG, "%s event_id=%s %.*s", event_base, "WEBSOCKET_EVENT_CLOSED", data->data_len, data->data_ptr); hasAnnouncedItself = false; - destroyCloud(); + cloudStarted = false; break; default: ESP_LOGI(TAG, "%s unknown event_id %i", event_base, event_id); From 1317cec337e02f3b8ab3e13ff6a75a0b92aac7d5 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sat, 11 Jun 2022 19:07:08 +0200 Subject: [PATCH 20/38] Added temperature and current --- main/cloud.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main/cloud.cpp b/main/cloud.cpp index 9e788ba..dbb414e 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -458,6 +458,10 @@ void send_information() infoObject["voltage"] = nullptr; } + infoObject["tempFront"] = fixBoardTemp(controllers.front.feedback.boardTemp); + infoObject["tempBack"] = fixBoardTemp(controllers.back.feedback.boardTemp); + infoObject["current"] = sumCurrent; + std::string body; serializeJson(doc, body); doc.clear(); From ca1b7173e7ac2b2cafec987c37062bd18c1c83cd Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 12 Jun 2022 18:43:23 +0200 Subject: [PATCH 21/38] Updated sdkconfig --- sdkconfig_testdevice | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/sdkconfig_testdevice b/sdkconfig_testdevice index bae9eaa..aede2e9 100644 --- a/sdkconfig_testdevice +++ b/sdkconfig_testdevice @@ -383,8 +383,8 @@ CONFIG_LOG_LOCAL_LEVEL_WIFI_STACK=3 # # Compiler options # -CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y -# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set +# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set +CONFIG_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_COMPILER_OPTIMIZATION_PERF is not set # CONFIG_COMPILER_OPTIMIZATION_NONE is not set CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y @@ -628,7 +628,7 @@ CONFIG_SPI_SLAVE_ISR_IN_IRAM=y # RMT Configuration # # CONFIG_RMT_ISR_IRAM_SAFE is not set -CONFIG_RMT_SUPPRESS_DEPRECATE_WARN=y +# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_RMT_ENABLE_DEBUG_LOG is not set # end of RMT Configuration # end of Driver configurations @@ -815,7 +815,9 @@ CONFIG_ESP_NETIF_TCPIP_LWIP=y # PHY # CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION=y +CONFIG_ESP_PHY_DEFAULT_INIT_IF_INVALID=y +# CONFIG_ESP_PHY_MULTIPLE_INIT_DATA_BIN is not set CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP_PHY_MAX_TX_POWER=20 CONFIG_ESP_PHY_REDUCE_TX_POWER=y @@ -1028,11 +1030,10 @@ CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 # # Port # -CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set # CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y -CONFIG_FREERTOS_ISR_STACKSIZE=2096 +CONFIG_FREERTOS_ISR_STACKSIZE=2048 CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y # CONFIG_FREERTOS_FPU_IN_ISR is not set CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y @@ -1095,7 +1096,7 @@ CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # # LWIP # -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" +CONFIG_LWIP_LOCAL_HOSTNAME="bobbycar" # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_TCPIP_CORE_LOCKING is not set CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y @@ -1611,10 +1612,10 @@ CONFIG_LOG_BOOTLOADER_LEVEL=3 CONFIG_FLASHMODE_DIO=y # CONFIG_FLASHMODE_DOUT is not set CONFIG_MONITOR_BAUD=115200 -CONFIG_OPTIMIZATION_LEVEL_DEBUG=y -CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y -# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set +# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set +# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set +CONFIG_OPTIMIZATION_LEVEL_RELEASE=y +CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y # CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set # CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set @@ -1713,7 +1714,9 @@ CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y # CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION=y +CONFIG_ESP32_PHY_DEFAULT_INIT_IF_INVALID=y +# CONFIG_ESP32_SUPPORT_MULTIPLE_PHY_INIT_DATA_BIN is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20 CONFIG_REDUCE_PHY_TX_POWER=y From 1366f3fedbaeabe5b0fa40ea0763cc5ee85ed1c4 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 12 Jun 2022 18:55:32 +0200 Subject: [PATCH 22/38] Iterate Enum fixes --- main/webserver_newsettings.cpp | 64 ++++------------------------------ 1 file changed, 6 insertions(+), 58 deletions(-) diff --git a/main/webserver_newsettings.cpp b/main/webserver_newsettings.cpp index 45d91e8..0d38182 100644 --- a/main/webserver_newsettings.cpp +++ b/main/webserver_newsettings.cpp @@ -53,7 +53,7 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v && !std::is_same_v && - !std::is_same_v + !std::is_same_v , void>::type showInputForSetting(std::string_view key, T value, std::string &body) { @@ -203,69 +203,17 @@ showInputForSetting(std::string_view key, T value, std::string &body) template typename std::enable_if< - std::is_same_v -, void>::type -showInputForSetting(std::string_view key, T value, std::string &body) -{ - HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; - - iterateOtaAnimationModes([&](T enumVal, std::string_view enumKey){ - HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(enumVal), value == enumVal ? " selected" : ""), body}; - body += esphttpdutils::htmlentities(enumKey); - }); -} - -template -typename std::enable_if< - std::is_same_v -, void>::type -showInputForSetting(std::string_view key, T value, std::string &body) -{ - HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; - - iterateLedstripAnimation([&](T enumVal, std::string_view enumKey){ - HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(enumVal), value == enumVal ? " selected" : ""), body}; - body += esphttpdutils::htmlentities(enumKey); - }); -} - -template -typename std::enable_if< + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || std::is_same_v , void>::type showInputForSetting(std::string_view key, T value, std::string &body) { HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; - iterateHandbremseMode([&](T enumVal, std::string_view enumKey){ - HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(enumVal), value == enumVal ? " selected" : ""), body}; - body += esphttpdutils::htmlentities(enumKey); - }); -} - -template -typename std::enable_if< - std::is_same_v -, void>::type -showInputForSetting(std::string_view key, T value, std::string &body) -{ - HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; - - iterateBobbyQuickActions([&](T enumVal, std::string_view enumKey){ - HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(enumVal), value == enumVal ? " selected" : ""), body}; - body += esphttpdutils::htmlentities(enumKey); - }); -} - -template -typename std::enable_if< - std::is_same_v -, void>::type -showInputForSetting(std::string_view key, T value, std::string &body) -{ - HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; - - iterateCloudMode([&](T enumVal, std::string_view enumKey){ + iterateEnum::iterate([&](T enumVal, std::string_view enumKey){ HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(enumVal), value == enumVal ? " selected" : ""), body}; body += esphttpdutils::htmlentities(enumKey); }); From 6c94b608fad3f830a203085566e2798081631b7b Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 12 Jun 2022 19:37:13 +0200 Subject: [PATCH 23/38] Implemented enums for cloud --- main/bobbyquickactions.h | 4 ++-- main/cloud.cpp | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/main/bobbyquickactions.h b/main/bobbyquickactions.h index 53dd84e..815a589 100644 --- a/main/bobbyquickactions.h +++ b/main/bobbyquickactions.h @@ -2,9 +2,9 @@ // 3rdparty lib includes #include -#include // local includes +#include "bobbytypesafeenum.h" #include "bobbybuttons.h" #define BobbyQuickActionsValues(x) \ @@ -18,7 +18,7 @@ x(HUPE) \ x(COMPRESSOR_TOGGLE) -DECLARE_TYPESAFE_ENUM(BobbyQuickActions, : uint8_t, BobbyQuickActionsValues) +DECLARE_BOBBYTYPESAFE_ENUM(BobbyQuickActions, : uint8_t, BobbyQuickActionsValues) namespace quickactions { diff --git a/main/cloud.cpp b/main/cloud.cpp index dbb414e..946fb4a 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -148,8 +148,6 @@ toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) template typename std::enable_if< - std::is_same_v || - std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v || @@ -158,6 +156,24 @@ typename std::enable_if< std::is_same_v , void>::type toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) +{ + object["n"] = key; + object["v"] = std::to_underlying(value); + object["d"] = std::to_underlying(defaultValue); + + JsonArray enumObject = object.createNestedArray("e"); + + iterateEnum::iterate([&](T enum_value, const auto &string_value){ + enumObject.add(toString(enum_value)); + }); +} + +template +typename std::enable_if< + std::is_same_v || + std::is_same_v + , void>::type +toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) { object["n"] = key; object["v"] = std::to_underlying(value); From 0cf28d961a430191e47ee91f33d0e811c69c8ee4 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 12 Jun 2022 20:15:31 +0200 Subject: [PATCH 24/38] Kinda unified dpads --- main/cloud.cpp | 2 ++ main/dpad.h | 6 ++-- main/dpad3wire.h | 5 +-- main/dpad5wire.h | 4 +++ main/dpad5wire_2out.h | 4 +++ main/dpad6wire.h | 4 +++ main/dpad_boardcomputer_v2.h | 4 +++ main/taskmanager.cpp | 36 ++----------------- main/utils.h | 58 +++++++++++++++++++++++++++++++ main/webserver_displaycontrol.cpp | 18 ++++++++-- 10 files changed, 101 insertions(+), 40 deletions(-) diff --git a/main/cloud.cpp b/main/cloud.cpp index 946fb4a..867a0ef 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -478,6 +478,8 @@ void send_information() infoObject["tempBack"] = fixBoardTemp(controllers.back.feedback.boardTemp); infoObject["current"] = sumCurrent; + infoObject["btnCnt"] = bobbydpad::ButtonCount; + std::string body; serializeJson(doc, body); doc.clear(); diff --git a/main/dpad.h b/main/dpad.h index e2a1a43..7ae5a3e 100644 --- a/main/dpad.h +++ b/main/dpad.h @@ -96,6 +96,8 @@ void update() debounceBack = now; } } + +constexpr const uint8_t BUTTON_COUNT = 4; #endif -} -} +} // namespace dpad +} // namespace diff --git a/main/dpad3wire.h b/main/dpad3wire.h index 09934c0..e2387f7 100644 --- a/main/dpad3wire.h +++ b/main/dpad3wire.h @@ -111,6 +111,7 @@ void update() debounceBack = now; } } +constexpr const uint8_t BUTTON_COUNT = 4; #endif -} -} +} // namespace dpad3wire +} // namespace diff --git a/main/dpad5wire.h b/main/dpad5wire.h index f28c3b5..67b729a 100644 --- a/main/dpad5wire.h +++ b/main/dpad5wire.h @@ -1,8 +1,12 @@ #pragma once +// system includes +#include + #ifdef FEATURE_DPAD_5WIRESW namespace dpad5wire { void init(); void update(); +constexpr const uint8_t BUTTON_COUNT = 8; } // namespace dpad5wire #endif diff --git a/main/dpad5wire_2out.h b/main/dpad5wire_2out.h index 1a9c555..046b42c 100644 --- a/main/dpad5wire_2out.h +++ b/main/dpad5wire_2out.h @@ -1,8 +1,12 @@ #pragma once +// system includes +#include + #ifdef FEATURE_DPAD_5WIRESW_2OUT namespace dpad5wire_2out { void init(); void update(); +constexpr const uint8_t BUTTON_COUNT = 12; } // namespace dpad5wire_2out #endif diff --git a/main/dpad6wire.h b/main/dpad6wire.h index c5ed317..45a33d9 100644 --- a/main/dpad6wire.h +++ b/main/dpad6wire.h @@ -1,8 +1,12 @@ #pragma once +// system includes +#include + #ifdef FEATURE_DPAD_6WIRESW namespace dpad6wire { void init(); void update(); +constexpr const uint8_t BUTTON_COUNT = 10; } // namespace dpad6wire #endif diff --git a/main/dpad_boardcomputer_v2.h b/main/dpad_boardcomputer_v2.h index a1cae14..8c8eacc 100644 --- a/main/dpad_boardcomputer_v2.h +++ b/main/dpad_boardcomputer_v2.h @@ -1,8 +1,12 @@ #pragma once +// system includes +#include + #ifdef DPAD_BOARDCOMPUTER_V2 namespace dpad_boardcomputer_v2 { void init(); void update(); +constexpr const uint8_t BUTTON_COUNT = 16; } // namespace dpad_boardcomputer_v2 #endif diff --git a/main/taskmanager.cpp b/main/taskmanager.cpp index cb91686..e24414d 100644 --- a/main/taskmanager.cpp +++ b/main/taskmanager.cpp @@ -10,22 +10,6 @@ // local includes #include "wifi_bobbycar.h" -#include "dpad.h" -#ifdef FEATURE_DPAD_3WIRESW -#include "dpad3wire.h" -#endif -#ifdef FEATURE_DPAD_5WIRESW -#include "dpad5wire.h" -#endif -#ifdef FEATURE_DPAD_5WIRESW_2OUT -#include "dpad5wire_2out.h" -#endif -#ifdef FEATURE_DPAD_6WIRESW -#include "dpad6wire.h" -#endif -#ifdef DPAD_BOARDCOMPUTER_V2 -#include "dpad_boardcomputer_v2.h" -#endif #ifdef FEATURE_ROTARY #include "rotary.h" #endif @@ -58,6 +42,7 @@ #include "drivingstatistics.h" #include "dnsannounce.h" #include "screens.h" +#include "utils.h" using namespace std::chrono_literals; @@ -68,23 +53,8 @@ void not_needed() {} BobbySchedulerTask schedulerTasksArr[] { BobbySchedulerTask { "wifi", wifi_begin, wifi_update, 100ms }, -#ifdef FEATURE_DPAD - BobbySchedulerTask { "dpad", dpad::init, dpad::update, 20ms }, -#endif -#ifdef FEATURE_DPAD_3WIRESW - BobbySchedulerTask { "dpad3wire", dpad3wire::init, dpad3wire::update, 20ms }, -#endif -#ifdef FEATURE_DPAD_5WIRESW - BobbySchedulerTask { "dpad5wire", dpad5wire::init, dpad5wire::update, 20ms }, -#endif -#ifdef FEATURE_DPAD_5WIRESW_2OUT - BobbySchedulerTask { "dpad5wire_2out", dpad5wire_2out::init, dpad5wire_2out::update, 20ms }, -#endif -#ifdef FEATURE_DPAD_6WIRESW - BobbySchedulerTask { "dpad6wire", dpad6wire::init, dpad6wire::update, 20ms }, -#endif -#ifdef DPAD_BOARDCOMPUTER_V2 - BobbySchedulerTask { "dpad_boardcomputer_v2", dpad_boardcomputer_v2::init, dpad_boardcomputer_v2::update, 20ms }, +#if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined(FEATURE_DPAD_6WIRESW) || defined(DPAD_BOARDCOMPUTER_V2) + BobbySchedulerTask { bobbydpad::dpad_name, bobbydpad::dpad_init, bobbydpad::dpad_update, 20ms }, #endif #ifdef FEATURE_ROTARY BobbySchedulerTask { "rotary", initRotary, updateRotary, 20ms }, diff --git a/main/utils.h b/main/utils.h index 93194c2..c2fe1a7 100644 --- a/main/utils.h +++ b/main/utils.h @@ -28,6 +28,25 @@ #include "can.h" #endif +#ifdef FEATURE_DPAD +#include "dpad.h" +#endif +#ifdef FEATURE_DPAD_3WIRESW +#include "dpad3wire.h" +#endif +#ifdef FEATURE_DPAD_5WIRESW +#include "dpad5wire.h" +#endif +#ifdef FEATURE_DPAD_5WIRESW_2OUT +#include "dpad5wire_2out.h" +#endif +#ifdef FEATURE_DPAD_6WIRESW +#include "dpad6wire.h" +#endif +#ifdef DPAD_BOARDCOMPUTER_V2 +#include "dpad_boardcomputer_v2.h" +#endif + extern bool currentlyReverseBeeping; extern bool reverseBeepToggle; extern espchrono::millis_clock::time_point lastReverseBeepToggle; @@ -80,3 +99,42 @@ inline CRGB UINT32_TO_CRGB(uint32_t color) std::string get_wifi_security_string(wifi_auth_mode_t authMode); float float_map(float x, float in_min, float in_max, float out_min, float out_max); bool is_valid_timestamp(espchrono::utc_clock::time_point timestamp); + +namespace bobbydpad { +#ifdef FEATURE_DPAD +static constexpr const auto ButtonCount = dpad::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad::init; +static constexpr const auto &dpad_update = dpad::update; +static constexpr const char * const dpad_name = "dpad"; +#endif +#ifdef FEATURE_DPAD_3WIRESW +static constexpr const auto ButtonCount = dpad3wire::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad3wire::init; +static constexpr const auto &dpad_update = dpad3wire::update; +static constexpr const char * const dpad_name = "dpad3wire"; +#endif +#ifdef FEATURE_DPAD_5WIRESW +static constexpr const auto ButtonCount = dpad5wire::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad5wire::init; +static constexpr const auto &dpad_update = dpad5wire::update; +static constexpr const char * const dpad_name = "dpad5wire"; +#endif +#ifdef FEATURE_DPAD_5WIRESW_2OUT +static constexpr const auto ButtonCount = dpad5wire_2out::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad5wire_2out::init; +static constexpr const auto &dpad_update = dpad5wire_2out::update; +static constexpr const char * const dpad_name = "dpad5wire_2out"; +#endif +#ifdef FEATURE_DPAD_6WIRESW +static constexpr const auto ButtonCount = dpad6wire::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad6wire::init; +static constexpr const auto &dpad_update = dpad6wire::update; +static constexpr const char * const dpad_name = "dpad6wire"; +#endif +#ifdef DPAD_BOARDCOMPUTER_V2 +static constexpr const auto ButtonCount = dpad_boardcomputer_v2::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad_boardcomputer_v2::init; +static constexpr const auto &dpad_update = dpad_boardcomputer_v2::update; +static constexpr const char * const dpad_name = "dpad_boardcomputer_v2"; +#endif +} // namespace bobbydpad diff --git a/main/webserver_displaycontrol.cpp b/main/webserver_displaycontrol.cpp index 6b09e33..f6ef4a0 100644 --- a/main/webserver_displaycontrol.cpp +++ b/main/webserver_displaycontrol.cpp @@ -190,7 +190,11 @@ esp_err_t webserver_root_handler(httpd_req_t *req) "Button8 " "Button9 " "Button10 " - "Button11"; + "Button11 " + "Button12 " + "Button13 " + "Button14 " + "Button15"; } { @@ -207,7 +211,11 @@ esp_err_t webserver_root_handler(httpd_req_t *req) "Left2 " "Right2 " "Up2 " - "Down2", + "Down2" + "Extra1" + "Extra2" + "Extra3" + "Extra4", std::to_underlying(espgui::Button::Left), std::to_underlying(espgui::Button::Right), std::to_underlying(espgui::Button::Up), @@ -219,7 +227,11 @@ esp_err_t webserver_root_handler(httpd_req_t *req) std::to_underlying(BobbyButton::Left2), std::to_underlying(BobbyButton::Right2), std::to_underlying(BobbyButton::Up2), - std::to_underlying(BobbyButton::Down2)); + std::to_underlying(BobbyButton::Down2), + std::to_underlying(BobbyButton::Extra1), + std::to_underlying(BobbyButton::Extra2), + std::to_underlying(BobbyButton::Extra3), + std::to_underlying(BobbyButton::Extra4)); } if (auto currentDisplay = static_cast(espgui::currentDisplay.get())) From 0fab6e72e159df090c83d055a97c9f6e3f1f51cd Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 12 Jun 2022 20:56:29 +0200 Subject: [PATCH 25/38] Added button control --- main/bobbybuttons.h | 3 ++- main/cloud.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/main/bobbybuttons.h b/main/bobbybuttons.h index 7424b98..a6e8c56 100644 --- a/main/bobbybuttons.h +++ b/main/bobbybuttons.h @@ -21,7 +21,8 @@ enum BobbyButton Extra3, Extra4, Confirm = espgui::Button::Right, - Back = espgui::Button::Left + Back = espgui::Button::Left, + ButtonMax = Back }; [[nodiscard]] std::optional translateRawButton(uint8_t button); diff --git a/main/cloud.cpp b/main/cloud.cpp index 867a0ef..2c240c9 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -983,6 +983,64 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int { send_ota_status(); } + else if (type == "rawBtnPrssd") + { + uint8_t button; + JsonVariant btn_id = doc["btn"]; + if (btn_id.isNull()) + { + ESP_LOGE(TAG, "btnPressed: btn is null"); + return; + } + + if (auto parsed = cpputils::fromString(btn_id.as())) + { + button = *parsed; + } + else + { + ESP_LOGE(TAG, "btnPressed: btn is not a number"); + return; + } + + if (!espgui::currentDisplay) + { + ESP_LOGW(TAG, "espgui::currentDisplay is null"); + return; + } + + espgui::currentDisplay->rawButtonPressed(button); + espgui::currentDisplay->rawButtonReleased(button); + } + else if (type == "btnPressed") + { + espgui::Button button; + JsonVariant btn_id = doc["btn"]; + if (btn_id.isNull()) + { + ESP_LOGE(TAG, "btnPressed: btn is null"); + return; + } + + if (auto parsed = cpputils::fromString>(btn_id.as())) + { + button = espgui::Button(*parsed); + } + else + { + ESP_LOGE(TAG, "btnPressed: btn is not a number"); + return; + } + + if (!espgui::currentDisplay) + { + ESP_LOGW(TAG, "espgui::currentDisplay is null"); + return; + } + + espgui::currentDisplay->buttonPressed(button); + espgui::currentDisplay->buttonReleased(button); + } else { ESP_LOGE(TAG, "unknown type: %s", type.c_str()); From 73fd65b04fb79e09049b6cf8f2044330714de5e8 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 12 Jun 2022 21:05:06 +0200 Subject: [PATCH 26/38] Fix for no buttons --- main/utils.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main/utils.h b/main/utils.h index c2fe1a7..fbd440c 100644 --- a/main/utils.h +++ b/main/utils.h @@ -137,4 +137,10 @@ static constexpr const auto &dpad_init = dpad_boardcomputer_v2::init; static constexpr const auto &dpad_update = dpad_boardcomputer_v2::update; static constexpr const char * const dpad_name = "dpad_boardcomputer_v2"; #endif +#if !defined(FEATURE_DPAD) && !defined(FEATURE_DPAD_3WIRESW) && !defined(FEATURE_DPAD_5WIRESW) && !defined(FEATURE_DPAD_5WIRESW_2OUT) && !defined(FEATURE_DPAD_6WIRESW) && !defined(DPAD_BOARDCOMPUTER_V2) +static constexpr const auto ButtonCount = 0; +static constexpr const auto &dpad_init = nullptr; +static constexpr const auto &dpad_update = nullptr; +static constexpr const char * const dpad_name = ""; +#endif } // namespace bobbydpad From 7a887a3323898c767dc5802fdea412b4c2207914 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 23 Jun 2022 19:16:02 +0200 Subject: [PATCH 27/38] Fixed compiling --- main/typeutils.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/main/typeutils.h b/main/typeutils.h index 4ead8e9..aa0fe4b 100644 --- a/main/typeutils.h +++ b/main/typeutils.h @@ -34,8 +34,6 @@ DEFINE_FOR_TYPE(int32_t) DEFINE_FOR_TYPE(uint32_t) DEFINE_FOR_TYPE(int64_t) DEFINE_FOR_TYPE(uint64_t) -DEFINE_FOR_TYPE(long) -DEFINE_FOR_TYPE(unsigned long) DEFINE_FOR_TYPE(float) DEFINE_FOR_TYPE(double) DEFINE_FOR_TYPE(string) From bc6dd5a50c2e47761bd8d3bf670ab2ac3e4d79cc Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 23 Jun 2022 21:50:58 +0200 Subject: [PATCH 28/38] Fixed crash when pressing buttons --- main/bobbybuttons.cpp | 2 -- main/cloud.cpp | 17 +++++++---------- main/displays/menus/mainmenu.h | 2 +- main/globals.cpp | 3 +++ main/globals.h | 12 ++++++++---- main/screens.cpp | 16 +++++++++++++++- main/webserver_displaycontrol.cpp | 31 ++++++++----------------------- 7 files changed, 42 insertions(+), 41 deletions(-) diff --git a/main/bobbybuttons.cpp b/main/bobbybuttons.cpp index 715044f..54092ab 100644 --- a/main/bobbybuttons.cpp +++ b/main/bobbybuttons.cpp @@ -6,9 +6,7 @@ // local includes #include "newsettings.h" #include "settingsutils.h" -#include "modes/defaultmode.h" #include "ledstripdefines.h" -#include "ledstrip.h" #include "bobbyquickactions.h" diff --git a/main/cloud.cpp b/main/cloud.cpp index 2c240c9..afda88c 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -8,7 +8,6 @@ // 3rdparty lib includes #include -#include #include #include #include @@ -876,7 +875,7 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int std::string id = doc["id"]; doc.clear(); ESP_LOGI(TAG, "popup: %s, id: %s", text.c_str(), id.c_str()); - BobbyErrorHandler{}.errorOccured(std::move(text)); + BobbyErrorHandler{}.errorOccurred(std::move(text)); if (id.empty()) return; @@ -985,7 +984,7 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int } else if (type == "rawBtnPrssd") { - uint8_t button; + int8_t button; JsonVariant btn_id = doc["btn"]; if (btn_id.isNull()) { @@ -1009,12 +1008,11 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int return; } - espgui::currentDisplay->rawButtonPressed(button); - espgui::currentDisplay->rawButtonReleased(button); + rawButtonRequest = button; } else if (type == "btnPressed") { - espgui::Button button; + int8_t button; JsonVariant btn_id = doc["btn"]; if (btn_id.isNull()) { @@ -1022,9 +1020,9 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int return; } - if (auto parsed = cpputils::fromString>(btn_id.as())) + if (auto parsed = cpputils::fromString(btn_id.as())) { - button = espgui::Button(*parsed); + button = *parsed; } else { @@ -1038,8 +1036,7 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int return; } - espgui::currentDisplay->buttonPressed(button); - espgui::currentDisplay->buttonReleased(button); + buttonRequest = button; } else { diff --git a/main/displays/menus/mainmenu.h b/main/displays/menus/mainmenu.h index 58858e1..4d2ce98 100644 --- a/main/displays/menus/mainmenu.h +++ b/main/displays/menus/mainmenu.h @@ -22,7 +22,7 @@ namespace { class MainMenu : public bobbygui::MenuDisplayWithTime { - using Base = espgui::MenuDisplay; + using Base = bobbygui::MenuDisplayWithTime; public: MainMenu(); diff --git a/main/globals.cpp b/main/globals.cpp index afb3426..5f00590 100644 --- a/main/globals.cpp +++ b/main/globals.cpp @@ -39,6 +39,9 @@ bool simplified = ProfileSettings profileSettings; SettingsPersister settingsPersister; +std::atomic rawButtonRequest; +std::atomic buttonRequest; + Controllers controllers; #ifdef FEATURE_BLUETOOTH diff --git a/main/globals.h b/main/globals.h index 7cdefcf..f5e2460 100644 --- a/main/globals.h +++ b/main/globals.h @@ -2,6 +2,7 @@ // system includes #include +#include #include #include @@ -25,11 +26,11 @@ // local includes #include "controller.h" #include "display.h" -#include "modeinterface.h" -#include "profilesettings.h" -#include "newsettings.h" -#include "settingspersister.h" #include "macros_bobbycar.h" +#include "modeinterface.h" +#include "newsettings.h" +#include "profilesettings.h" +#include "settingspersister.h" extern std::optional raw_gas, raw_brems; extern std::optional gas, brems; @@ -66,6 +67,9 @@ extern bool simplified; extern ProfileSettings profileSettings; extern SettingsPersister settingsPersister; +extern std::atomic rawButtonRequest; +extern std::atomic buttonRequest; + class Controllers : public std::array { public: diff --git a/main/screens.cpp b/main/screens.cpp index c39dd98..6ab6bbf 100644 --- a/main/screens.cpp +++ b/main/screens.cpp @@ -7,7 +7,6 @@ // local includes #include "esptexthelpers.h" #include "globals.h" -#include "utils.h" #include "icons/logo.h" using namespace espgui; @@ -42,6 +41,21 @@ void updateDisplay() changeScreenCallback(); changeScreenCallback = {}; } + + if (const int8_t rawButton = rawButtonRequest.load(); rawButton != -1 && currentDisplay) + { + currentDisplay->rawButtonPressed(rawButton); + currentDisplay->rawButtonReleased(rawButton); + rawButtonRequest = -1; + } + + if (const int8_t button = buttonRequest.load(); button != -1 && currentDisplay) + { + const auto btn = espgui::Button(button); + currentDisplay->buttonPressed(btn); + currentDisplay->buttonReleased(btn); + buttonRequest = -1; + } } void redrawDisplay() diff --git a/main/webserver_displaycontrol.cpp b/main/webserver_displaycontrol.cpp index f6ef4a0..b2ffacc 100644 --- a/main/webserver_displaycontrol.cpp +++ b/main/webserver_displaycontrol.cpp @@ -23,8 +23,9 @@ // local includes #include "bobbybuttons.h" -#include "webserver_lock.h" +#include "globals.h" #include "newsettings.h" +#include "webserver_lock.h" using esphttpdutils::HtmlTag; using namespace std::chrono_literals; @@ -297,7 +298,7 @@ esp_err_t webserver_triggerRawButton_handler(httpd_req_t *req) CALL_AND_EXIT(esphttpdutils::webserver_resp_send, req, esphttpdutils::ResponseStatus::BadRequest, "text/plain", result.error()); } - uint8_t button; + int8_t button; constexpr const std::string_view buttonParamName{"button"}; { @@ -335,15 +336,7 @@ esp_err_t webserver_triggerRawButton_handler(httpd_req_t *req) } } - if (!espgui::currentDisplay) - { - constexpr const std::string_view msg = "espgui::currentDisplay is null"; - ESP_LOGW(TAG, "%.*s", msg.size(), msg.data()); - CALL_AND_EXIT(esphttpdutils::webserver_resp_send, req, esphttpdutils::ResponseStatus::BadRequest, "text/plain", msg); - } - - espgui::currentDisplay->rawButtonPressed(button); - espgui::currentDisplay->rawButtonReleased(button); + rawButtonRequest.store(button); CALL_AND_EXIT_ON_ERROR(httpd_resp_set_hdr, req, "Location", "/") CALL_AND_EXIT_ON_ERROR(httpd_resp_set_hdr, req, "Access-Control-Allow-Origin", "http://web.bobbycar.cloud"); @@ -362,7 +355,7 @@ esp_err_t webserver_triggerButton_handler(httpd_req_t *req) CALL_AND_EXIT(esphttpdutils::webserver_resp_send, req, esphttpdutils::ResponseStatus::BadRequest, "text/plain", result.error()); } - espgui::Button button; + int8_t button; constexpr const std::string_view buttonParamName{"button"}; { @@ -388,9 +381,9 @@ esp_err_t webserver_triggerButton_handler(httpd_req_t *req) std::string_view value{valueBuf}; - if (auto parsed = cpputils::fromString>(value)) + if (auto parsed = cpputils::fromString(value)) { - button = espgui::Button(*parsed); + button = *parsed; } else { @@ -400,15 +393,7 @@ esp_err_t webserver_triggerButton_handler(httpd_req_t *req) } } - if (!espgui::currentDisplay) - { - constexpr const std::string_view msg = "espgui::currentDisplay is null"; - ESP_LOGW(TAG, "%.*s", msg.size(), msg.data()); - CALL_AND_EXIT(esphttpdutils::webserver_resp_send, req, esphttpdutils::ResponseStatus::BadRequest, "text/plain", msg); - } - - espgui::currentDisplay->buttonPressed(button); - espgui::currentDisplay->buttonReleased(button); + buttonRequest.store(button); CALL_AND_EXIT_ON_ERROR(httpd_resp_set_hdr, req, "Location", "/") CALL_AND_EXIT_ON_ERROR(httpd_resp_set_hdr, req, "Access-Control-Allow-Origin", "http://web.bobbycar.cloud"); From cb7d4180c4833c1568acc8c722a8fcce59969ceb Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sat, 25 Jun 2022 11:23:12 +0200 Subject: [PATCH 29/38] Default value --- main/newsettings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/newsettings.h b/main/newsettings.h index cb4be61..074547b 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -274,7 +274,7 @@ public: ConfigWrapperLegacy gasMax {4095, DoReset, MinMaxValue, "gasMax" }; ConfigWrapperLegacy gasMitte {2048, DoReset, MinMaxValue, "gasMiddle" }; ConfigWrapperLegacy bremsMin {0, DoReset, MinMaxValue, "bremsMin" }; - ConfigWrapperLegacy bremsMax {4096, DoReset, MinMaxValue, "bremsMax" }; + ConfigWrapperLegacy bremsMax {4095, DoReset, MinMaxValue, "bremsMax" }; ConfigWrapperLegacy bremsMitte {2048, DoReset, MinMaxValue, "bremsMiddle" }; ConfigWrapperLegacy deadband {20, DoReset, MinMaxValue,"deadband" }; From 0565c3042d77320a313877862767bd12f72cabb5 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sat, 25 Jun 2022 15:43:13 +0200 Subject: [PATCH 30/38] Changed to fork --- .gitmodules | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index b72df85..8e3efcd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,9 +19,6 @@ [submodule "components/ArduinoJson"] path = components/ArduinoJson url = ../../0xFEEDC0DE64/ArduinoJson.git -[submodule "components/TFT_eSPI"] - path = components/TFT_eSPI - url = ../../0xFEEDC0DE64/TFT_eSPI.git [submodule "components/arduino-esp32"] path = components/arduino-esp32 url = ../../0xFEEDC0DE64/arduino-esp32.git @@ -67,3 +64,6 @@ [submodule "esp-protocols"] path = esp-protocols url = ../../0xFEEDC0DE64/esp-protocols.git +[submodule "components/TFT_eSPI"] + path = components/TFT_eSPI + url = ../../bobbycar-graz/TFT_eSPI.git From c39033399b1c91108ddf94be06047752f9ce3523 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sat, 25 Jun 2022 15:44:26 +0200 Subject: [PATCH 31/38] Updated sdkconfig --- sdkconfig_testdevice | 356 +++++++++++++++++++++++-------------------- 1 file changed, 192 insertions(+), 164 deletions(-) diff --git a/sdkconfig_testdevice b/sdkconfig_testdevice index aede2e9..44cd82a 100644 --- a/sdkconfig_testdevice +++ b/sdkconfig_testdevice @@ -4,13 +4,13 @@ # CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" +CONFIG_SOC_DPORT_WORKAROUND="Not determined" CONFIG_SOC_CAPS_ECO_VER_MAX=3 CONFIG_SOC_ADC_SUPPORTED=y CONFIG_SOC_DAC_SUPPORTED=y CONFIG_SOC_MCPWM_SUPPORTED=y CONFIG_SOC_SDMMC_HOST_SUPPORTED=y CONFIG_SOC_BT_SUPPORTED=y -CONFIG_SOC_BLUEDROID_SUPPORTED=y CONFIG_SOC_CLASSIC_BT_SUPPORTED=y CONFIG_SOC_PCNT_SUPPORTED=y CONFIG_SOC_WIFI_SUPPORTED=y @@ -31,6 +31,7 @@ CONFIG_SOC_MPI_SUPPORTED=y CONFIG_SOC_SHA_SUPPORTED=y CONFIG_SOC_FLASH_ENC_SUPPORTED=y CONFIG_SOC_SECURE_BOOT_SUPPORTED=y +CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5 CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y CONFIG_SOC_ADC_PERIPH_NUM=2 @@ -96,7 +97,6 @@ CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 -CONFIG_SOC_MCPWM_BASE_CLK_HZ=160000000 CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 CONFIG_SOC_PCNT_GROUPS=1 @@ -142,6 +142,7 @@ CONFIG_SOC_UART_SUPPORT_REF_TICK=y CONFIG_SOC_UART_FIFO_LEN=128 CONFIG_SOC_UART_BITRATE_MAX=5000000 CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y CONFIG_SOC_SHA_SUPPORT_SHA1=y CONFIG_SOC_SHA_SUPPORT_SHA256=y @@ -158,6 +159,8 @@ CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y CONFIG_SOC_SDMMC_USE_IOMUX=y CONFIG_SOC_SDMMC_NUM_SLOTS=2 CONFIG_SOC_BLE_DONT_UPDATE_OWN_RPA=y @@ -178,6 +181,8 @@ CONFIG_APP_BUILD_BOOTLOADER=y CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y # CONFIG_APP_REPRODUCIBLE_BUILD is not set # CONFIG_APP_NO_BLOBS is not set +# CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # end of Build type # @@ -401,7 +406,6 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set # CONFIG_COMPILER_DUMP_RTL_FILES is not set # end of Compiler options @@ -431,9 +435,87 @@ CONFIG_APPTRACE_LOCK_ENABLE=y # Bluetooth # CONFIG_BT_ENABLED=y +# CONFIG_BT_BLUEDROID_ENABLED is not set +CONFIG_BT_NIMBLE_ENABLED=y +# CONFIG_BT_CONTROLLER_ONLY is not set +CONFIG_BT_CONTROLLER_ENABLED=y +# CONFIG_BT_CONTROLLER_DISABLED is not set # -# Bluetooth controller +# NimBLE Options +# +CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y +# CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set +# CONFIG_BT_NIMBLE_LOG_LEVEL_NONE is not set +# CONFIG_BT_NIMBLE_LOG_LEVEL_ERROR is not set +# CONFIG_BT_NIMBLE_LOG_LEVEL_WARNING is not set +CONFIG_BT_NIMBLE_LOG_LEVEL_INFO=y +# CONFIG_BT_NIMBLE_LOG_LEVEL_DEBUG is not set +CONFIG_BT_NIMBLE_LOG_LEVEL=1 +CONFIG_BT_NIMBLE_MAX_CONNECTIONS=3 +CONFIG_BT_NIMBLE_MAX_BONDS=3 +CONFIG_BT_NIMBLE_MAX_CCCDS=8 +CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM=0 +CONFIG_BT_NIMBLE_PINNED_TO_CORE_0=y +# CONFIG_BT_NIMBLE_PINNED_TO_CORE_1 is not set +CONFIG_BT_NIMBLE_PINNED_TO_CORE=0 +CONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=4096 +CONFIG_BT_NIMBLE_ROLE_CENTRAL=y +CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=y +CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y +CONFIG_BT_NIMBLE_ROLE_OBSERVER=y +CONFIG_BT_NIMBLE_NVS_PERSIST=y +CONFIG_BT_NIMBLE_SECURITY_ENABLE=y +CONFIG_BT_NIMBLE_SM_LEGACY=y +CONFIG_BT_NIMBLE_SM_SC=y +# CONFIG_BT_NIMBLE_SM_SC_DEBUG_KEYS is not set +CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_ENCRYPTION=y +# CONFIG_BT_NIMBLE_DEBUG is not set +CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME="nimble" +CONFIG_BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31 +CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=256 +CONFIG_BT_NIMBLE_SVC_GAP_APPEARANCE=0 + +# +# Memory Settings +# +CONFIG_BT_NIMBLE_MSYS_1_BLOCK_COUNT=12 +CONFIG_BT_NIMBLE_MSYS_1_BLOCK_SIZE=256 +CONFIG_BT_NIMBLE_MSYS_2_BLOCK_COUNT=24 +CONFIG_BT_NIMBLE_MSYS_2_BLOCK_SIZE=320 +CONFIG_BT_NIMBLE_ACL_BUF_COUNT=20 +CONFIG_BT_NIMBLE_ACL_BUF_SIZE=255 +CONFIG_BT_NIMBLE_HCI_EVT_BUF_SIZE=70 +CONFIG_BT_NIMBLE_HCI_EVT_HI_BUF_COUNT=30 +CONFIG_BT_NIMBLE_HCI_EVT_LO_BUF_COUNT=8 +# end of Memory Settings + +CONFIG_BT_NIMBLE_HS_FLOW_CTRL=y +CONFIG_BT_NIMBLE_HS_FLOW_CTRL_ITVL=1000 +CONFIG_BT_NIMBLE_HS_FLOW_CTRL_THRESH=2 +CONFIG_BT_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT=y +CONFIG_BT_NIMBLE_RPA_TIMEOUT=900 +# CONFIG_BT_NIMBLE_MESH is not set +CONFIG_BT_NIMBLE_CRYPTO_STACK_MBEDTLS=y +CONFIG_BT_NIMBLE_HS_STOP_TIMEOUT_MS=2000 +# CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT is not set +CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT=y +CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_2M_PHY=y +CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_CODED_PHY=y +# CONFIG_BT_NIMBLE_EXT_ADV is not set +CONFIG_BT_NIMBLE_MAX_PERIODIC_SYNCS=0 +# CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set +CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y +CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_EFF=0 +CONFIG_BT_NIMBLE_WHITELIST_SIZE=12 +# CONFIG_BT_NIMBLE_TEST_THROUGHPUT_TEST is not set +# CONFIG_BT_NIMBLE_SLEEP_ENABLE is not set +# CONFIG_BT_NIMBLE_BLUFI_ENABLE is not set +CONFIG_BT_NIMBLE_USE_ESP_TIMER=y +# end of NimBLE Options + +# +# Controller Options # CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y # CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY is not set @@ -475,129 +557,46 @@ CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM=100 CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 CONFIG_BTDM_RESERVE_DRAM=0xdb5c CONFIG_BTDM_CTRL_HLI=y -# end of Bluetooth controller - -# CONFIG_BT_BLUEDROID_ENABLED is not set -CONFIG_BT_NIMBLE_ENABLED=y -# CONFIG_BT_CONTROLLER_ONLY is not set - -# -# NimBLE Options -# -CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y -# CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set -# CONFIG_BT_NIMBLE_LOG_LEVEL_NONE is not set -# CONFIG_BT_NIMBLE_LOG_LEVEL_ERROR is not set -# CONFIG_BT_NIMBLE_LOG_LEVEL_WARNING is not set -CONFIG_BT_NIMBLE_LOG_LEVEL_INFO=y -# CONFIG_BT_NIMBLE_LOG_LEVEL_DEBUG is not set -CONFIG_BT_NIMBLE_LOG_LEVEL=1 -CONFIG_BT_NIMBLE_RUN_QA_TEST=y -# CONFIG_BT_NIMBLE_RUN_BQB_TEST is not set -CONFIG_BT_NIMBLE_MAX_CONNECTIONS=3 -CONFIG_BT_NIMBLE_MAX_BONDS=3 -CONFIG_BT_NIMBLE_MAX_CCCDS=8 -CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM=0 -CONFIG_BT_NIMBLE_PINNED_TO_CORE_0=y -# CONFIG_BT_NIMBLE_PINNED_TO_CORE_1 is not set -CONFIG_BT_NIMBLE_PINNED_TO_CORE=0 -CONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=4096 -CONFIG_BT_NIMBLE_ROLE_CENTRAL=y -CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=y -CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y -CONFIG_BT_NIMBLE_ROLE_OBSERVER=y -CONFIG_BT_NIMBLE_CONTROLLER_TASK_PRIORITY=23 -CONFIG_BT_NIMBLE_NVS_PERSIST=y -CONFIG_BT_NIMBLE_SECURITY_ENABLE=y -CONFIG_BT_NIMBLE_SM_LEGACY=y -CONFIG_BT_NIMBLE_SM_SC=y -# CONFIG_BT_NIMBLE_DEBUG is not set -CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_ENCRYPTION=y -# CONFIG_BT_NIMBLE_SM_SC_DEBUG_KEYS is not set -CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME="nimble" -CONFIG_BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31 -CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=256 -CONFIG_BT_NIMBLE_SVC_GAP_APPEARANCE=0 -CONFIG_BT_NIMBLE_ACL_BUF_COUNT=20 -CONFIG_BT_NIMBLE_ACL_BUF_SIZE=255 -CONFIG_BT_NIMBLE_HCI_EVT_BUF_SIZE=70 -CONFIG_BT_NIMBLE_HCI_EVT_HI_BUF_COUNT=30 -CONFIG_BT_NIMBLE_HCI_EVT_LO_BUF_COUNT=8 -CONFIG_BT_NIMBLE_MEMORY_SETTINGS=y -CONFIG_BT_NIMBLE_MSYS_1_BLOCK_COUNT=12 -CONFIG_BT_NIMBLE_MSYS_1_BLOCK_SIZE=256 -CONFIG_BT_NIMBLE_MSYS_2_BLOCK_COUNT=24 -CONFIG_BT_NIMBLE_MSYS_2_BLOCK_SIZE=320 -CONFIG_BT_NIMBLE_HS_FLOW_CTRL=y -CONFIG_BT_NIMBLE_HS_FLOW_CTRL_ITVL=1000 -CONFIG_BT_NIMBLE_HS_FLOW_CTRL_THRESH=2 -CONFIG_BT_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT=y -CONFIG_BT_NIMBLE_RPA_TIMEOUT=900 -# CONFIG_BT_NIMBLE_MESH is not set -CONFIG_BT_NIMBLE_CRYPTO_STACK_MBEDTLS=y -CONFIG_BT_NIMBLE_HS_STOP_TIMEOUT_MS=2000 -# CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT is not set -CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT=y -# CONFIG_BT_NIMBLE_EXT_ADV is not set -# CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set -CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y -CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_EFF=0 -CONFIG_BT_NIMBLE_WHITELIST_SIZE=12 -CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_2M_PHY=y -CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_CODED_PHY=y -CONFIG_BT_NIMBLE_HARDWARE_BLE_ONLY=y -# CONFIG_BT_NIMBLE_TEST_THROUGHPUT_TEST is not set -CONFIG_BT_NIMBLE_LL_RESOLV_LIST_SIZE=4 -CONFIG_BT_NIMBLE_LL_DUP_SCAN_LIST_COUNT=8 -# CONFIG_BT_NIMBLE_SLEEP_ENABLE is not set -# CONFIG_BT_NIMBLE_BLUFI_ENABLE is not set -CONFIG_BT_NIMBLE_USE_ESP_TIMER=y -# end of NimBLE Options +# end of Controller Options # end of Bluetooth # CONFIG_BLE_MESH is not set # -# Driver configurations +# Driver Configurations # # -# ADC configuration +# ADC Configuration # # CONFIG_ADC_FORCE_XPD_FSM is not set CONFIG_ADC_DISABLE_DAC=y -# end of ADC configuration +# end of ADC Configuration # -# MCPWM configuration -# -# CONFIG_MCPWM_ISR_IN_IRAM is not set -# end of MCPWM configuration - -# -# SPI configuration +# SPI Configuration # # CONFIG_SPI_MASTER_IN_IRAM is not set CONFIG_SPI_MASTER_ISR_IN_IRAM=y # CONFIG_SPI_SLAVE_IN_IRAM is not set CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of SPI configuration +# end of SPI Configuration # -# TWAI configuration +# TWAI Configuration # # CONFIG_TWAI_ISR_IN_IRAM is not set # CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC is not set # CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST is not set # CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID is not set # CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT is not set -# end of TWAI configuration +# end of TWAI Configuration # -# UART configuration +# UART Configuration # # CONFIG_UART_ISR_IN_IRAM is not set -# end of UART configuration +# end of UART Configuration # # GPIO Configuration @@ -631,7 +630,13 @@ CONFIG_SPI_SLAVE_ISR_IN_IRAM=y # CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_RMT_ENABLE_DEBUG_LOG is not set # end of RMT Configuration -# end of Driver configurations + +# +# MCPWM Configuration +# +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# end of MCPWM Configuration +# end of Driver Configurations # # eFuse Bit Manager @@ -655,25 +660,6 @@ CONFIG_ESP_TLS_USING_MBEDTLS=y # CONFIG_ESP_TLS_INSECURE is not set # end of ESP-TLS -# -# ESP32-specific -# -CONFIG_ESP32_DPORT_WORKAROUND=y -# CONFIG_ESP32_SPIRAM_SUPPORT is not set -# CONFIG_ESP32_TRAX is not set -CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 -CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP32_XTAL_FREQ_40=y -# CONFIG_ESP32_XTAL_FREQ_26 is not set -# CONFIG_ESP32_XTAL_FREQ_AUTO is not set -CONFIG_ESP32_XTAL_FREQ=40 -# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set -# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set -CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 -# end of ESP32-specific - # # ADC-Calibration # @@ -745,6 +731,7 @@ CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP=y # # Hardware Settings # +# CONFIG_SPIRAM is not set # # MAC Config @@ -765,6 +752,7 @@ CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y # CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set # CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND is not set +CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 # end of Sleep Config # @@ -783,11 +771,23 @@ CONFIG_RTC_CLK_CAL_CYCLES=1024 # CONFIG_PERIPH_CTRL_FUNC_IN_IRAM is not set # end of Peripheral Control +# +# MMU Config +# +CONFIG_MMU_PAGE_SIZE_64KB=y +CONFIG_MMU_PAGE_MODE="64KB" +CONFIG_MMU_PAGE_SIZE=0x10000 +# end of MMU Config + CONFIG_ESP32_REV_MIN_0=y # CONFIG_ESP32_REV_MIN_1 is not set # CONFIG_ESP32_REV_MIN_2 is not set # CONFIG_ESP32_REV_MIN_3 is not set CONFIG_ESP32_REV_MIN=0 +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_26 is not set +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 # end of Hardware Settings # @@ -836,6 +836,20 @@ CONFIG_ESP_PHY_REDUCE_TX_POWER=y # CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 + +# +# Memory +# +# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set +# end of Memory + +# +# Trace memory +# +# CONFIG_ESP32_TRAX is not set +CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 +# end of Trace memory + # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set @@ -889,6 +903,9 @@ CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set CONFIG_ESP_BROWNOUT_DET_LVL=0 # end of Brownout Detector + +# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set +CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y # end of ESP System Settings # @@ -939,6 +956,7 @@ CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y # CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set # CONFIG_ESP_WIFI_GMAC_SUPPORT is not set CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y +# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set # end of Wi-Fi # @@ -1319,9 +1337,6 @@ CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y CONFIG_MBEDTLS_AES_C=y # CONFIG_MBEDTLS_CAMELLIA_C is not set # CONFIG_MBEDTLS_DES_C is not set -CONFIG_MBEDTLS_RC4_DISABLED=y -# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set -# CONFIG_MBEDTLS_RC4_ENABLED is not set # CONFIG_MBEDTLS_BLOWFISH_C is not set # CONFIG_MBEDTLS_XTEA_C is not set CONFIG_MBEDTLS_CCM_C=y @@ -1425,6 +1440,7 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y # # NVS # +# CONFIG_NVS_ASSERT_ERROR_CHECK is not set # end of NVS # @@ -1466,6 +1482,13 @@ CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 # CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set # CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set +# +# SPI Flash behavior when brownout +# +CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y +CONFIG_SPI_FLASH_BROWNOUT_RESET=y +# end of SPI Flash behavior when brownout + # # Auto-detect flash chips # @@ -1525,6 +1548,7 @@ CONFIG_SPIFFS_USE_MTIME=y # CONFIG_WS_TRANSPORT=y CONFIG_WS_BUFFER_SIZE=1024 +# CONFIG_WS_DYNAMIC_BUFFER is not set # end of Websocket # end of TCP Transport @@ -1584,6 +1608,7 @@ CONFIG_WPA_MBEDTLS_TLS_CLIENT=y # CONFIG_WPA_MBO_SUPPORT is not set # CONFIG_WPA_DPP_SUPPORT is not set # CONFIG_WPA_11R_SUPPORT is not set +# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set # end of Supplicant # @@ -1598,6 +1623,8 @@ CONFIG_WPA_MBEDTLS_TLS_CLIENT=y # Deprecated options for backward compatibility # CONFIG_NO_BLOBS is not set # CONFIG_ESP32_NO_BLOBS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set @@ -1626,10 +1653,48 @@ CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_DISABLE_GCC8_WARNINGS is not set # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set CONFIG_ESP32_APPTRACE_DEST_NONE=y CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y +# CONFIG_BLUEDROID_ENABLED is not set +CONFIG_NIMBLE_ENABLED=y +CONFIG_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y +# CONFIG_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set +CONFIG_NIMBLE_MAX_CONNECTIONS=3 +CONFIG_NIMBLE_MAX_BONDS=3 +CONFIG_NIMBLE_MAX_CCCDS=8 +CONFIG_NIMBLE_L2CAP_COC_MAX_NUM=0 +CONFIG_NIMBLE_PINNED_TO_CORE_0=y +# CONFIG_NIMBLE_PINNED_TO_CORE_1 is not set +CONFIG_NIMBLE_PINNED_TO_CORE=0 +CONFIG_NIMBLE_TASK_STACK_SIZE=4096 +CONFIG_BT_NIMBLE_TASK_STACK_SIZE=4096 +CONFIG_NIMBLE_ROLE_CENTRAL=y +CONFIG_NIMBLE_ROLE_PERIPHERAL=y +CONFIG_NIMBLE_ROLE_BROADCASTER=y +CONFIG_NIMBLE_ROLE_OBSERVER=y +CONFIG_NIMBLE_NVS_PERSIST=y +CONFIG_NIMBLE_SM_LEGACY=y +CONFIG_NIMBLE_SM_SC=y +# CONFIG_NIMBLE_SM_SC_DEBUG_KEYS is not set +# CONFIG_NIMBLE_DEBUG is not set +CONFIG_NIMBLE_SVC_GAP_DEVICE_NAME="nimble" +CONFIG_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31 +CONFIG_NIMBLE_ATT_PREFERRED_MTU=256 +CONFIG_NIMBLE_SVC_GAP_APPEARANCE=0 +CONFIG_BT_NIMBLE_MSYS1_BLOCK_COUNT=12 +CONFIG_NIMBLE_ACL_BUF_COUNT=20 +CONFIG_NIMBLE_ACL_BUF_SIZE=255 +CONFIG_NIMBLE_HCI_EVT_BUF_SIZE=70 +CONFIG_NIMBLE_HCI_EVT_HI_BUF_COUNT=30 +CONFIG_NIMBLE_HCI_EVT_LO_BUF_COUNT=8 +CONFIG_NIMBLE_HS_FLOW_CTRL=y +CONFIG_NIMBLE_HS_FLOW_CTRL_ITVL=1000 +CONFIG_NIMBLE_HS_FLOW_CTRL_THRESH=2 +CONFIG_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT=y +CONFIG_NIMBLE_RPA_TIMEOUT=900 +# CONFIG_NIMBLE_MESH is not set +CONFIG_NIMBLE_CRYPTO_STACK_MBEDTLS=y CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY=y # CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY is not set # CONFIG_BTDM_CONTROLLER_MODE_BTDM is not set @@ -1652,58 +1717,19 @@ CONFIG_BTDM_CONTROLLER_FULL_SCAN_SUPPORTED=y CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED=y CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_NUM=100 CONFIG_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 -# CONFIG_BLUEDROID_ENABLED is not set -CONFIG_NIMBLE_ENABLED=y -CONFIG_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y -# CONFIG_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set -CONFIG_NIMBLE_MAX_CONNECTIONS=3 -CONFIG_NIMBLE_MAX_BONDS=3 -CONFIG_NIMBLE_MAX_CCCDS=8 -CONFIG_NIMBLE_L2CAP_COC_MAX_NUM=0 -CONFIG_NIMBLE_PINNED_TO_CORE_0=y -# CONFIG_NIMBLE_PINNED_TO_CORE_1 is not set -CONFIG_NIMBLE_PINNED_TO_CORE=0 -CONFIG_NIMBLE_TASK_STACK_SIZE=4096 -CONFIG_BT_NIMBLE_TASK_STACK_SIZE=4096 -CONFIG_NIMBLE_ROLE_CENTRAL=y -CONFIG_NIMBLE_ROLE_PERIPHERAL=y -CONFIG_NIMBLE_ROLE_BROADCASTER=y -CONFIG_NIMBLE_ROLE_OBSERVER=y -CONFIG_NIMBLE_NVS_PERSIST=y -CONFIG_NIMBLE_SM_LEGACY=y -CONFIG_NIMBLE_SM_SC=y -# CONFIG_NIMBLE_DEBUG is not set -# CONFIG_NIMBLE_SM_SC_DEBUG_KEYS is not set -CONFIG_NIMBLE_SVC_GAP_DEVICE_NAME="nimble" -CONFIG_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31 -CONFIG_NIMBLE_ATT_PREFERRED_MTU=256 -CONFIG_NIMBLE_SVC_GAP_APPEARANCE=0 -CONFIG_NIMBLE_ACL_BUF_COUNT=20 -CONFIG_NIMBLE_ACL_BUF_SIZE=255 -CONFIG_NIMBLE_HCI_EVT_BUF_SIZE=70 -CONFIG_NIMBLE_HCI_EVT_HI_BUF_COUNT=30 -CONFIG_NIMBLE_HCI_EVT_LO_BUF_COUNT=8 -CONFIG_BT_NIMBLE_MSYS1_BLOCK_COUNT=12 -CONFIG_NIMBLE_HS_FLOW_CTRL=y -CONFIG_NIMBLE_HS_FLOW_CTRL_ITVL=1000 -CONFIG_NIMBLE_HS_FLOW_CTRL_THRESH=2 -CONFIG_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT=y -CONFIG_NIMBLE_RPA_TIMEOUT=900 -# CONFIG_NIMBLE_MESH is not set -CONFIG_NIMBLE_CRYPTO_STACK_MBEDTLS=y CONFIG_ADC2_DISABLE_DAC=y -# CONFIG_SPIRAM_SUPPORT is not set -CONFIG_TRACEMEM_RESERVE_DRAM=0x0 -# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y CONFIG_OTA_ALLOW_HTTP=y +# CONFIG_SPIRAM_SUPPORT is not set +# CONFIG_ESP32_SPIRAM_SUPPORT is not set # CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 CONFIG_ESP_SYSTEM_PD_FLASH=y +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y # CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set @@ -1725,6 +1751,7 @@ CONFIG_ESP32_REDUCE_PHY_TX_POWER=y # CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 # CONFIG_ESP32_PANIC_PRINT_HALT is not set CONFIG_ESP32_PANIC_PRINT_REBOOT=y # CONFIG_ESP32_PANIC_SILENT_REBOOT is not set @@ -1769,6 +1796,7 @@ CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set CONFIG_BROWNOUT_DET_LVL=0 CONFIG_ESP32_BROWNOUT_DET_LVL=0 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set CONFIG_IPC_TASK_STACK_SIZE=1024 CONFIG_TIMER_TASK_STACK_SIZE=3584 CONFIG_SW_COEXIST_ENABLE=y From e23418dbb0031d9018538d8a71a47f0dd25b80e3 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sat, 25 Jun 2022 21:58:28 +0200 Subject: [PATCH 32/38] Dev commit, probably not working --- components/TFT_eSPI | 2 +- main/accessors/settingsaccessors.h | 3 +- main/cloud.cpp | 208 ++++++++++------------ main/cloud.h | 7 - main/configutils_bobby.h | 1 - main/configwrapper_bobby.cpp | 1 - main/displays/menus/cloudsettingsmenu.cpp | 6 +- main/globals.cpp | 1 + main/globals.h | 1 + main/newsettings.h | 6 +- main/remotedisplaywebsocket.cpp | 29 --- main/remotedisplaywebsocket.h | 114 ++++++++++-- main/screens.cpp | 6 + main/typeutils.h | 1 - main/webserver_newsettings.cpp | 6 +- 15 files changed, 209 insertions(+), 183 deletions(-) diff --git a/components/TFT_eSPI b/components/TFT_eSPI index 5ca80d8..62c4a15 160000 --- a/components/TFT_eSPI +++ b/components/TFT_eSPI @@ -1 +1 @@ -Subproject commit 5ca80d8cf80623282e10a0506ffbee8426d59bfb +Subproject commit 62c4a15b6b2b67f924a9004c511adaada2c943dc diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index 7b9c7a5..e51e760 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -44,7 +44,8 @@ struct BleFenceEnabledAccessor : public NewSettingsAccessor { ConfigWrappe // Cloud struct CloudEnabledAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.cloudEnabled; } }; struct CloudTransmitTimeoutAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.cloudTransmitTimeout; } }; -struct CloudModeAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.cloudMode; } }; +struct CloudSendStatisticsAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.sendStatistic; } }; +struct CloudSendScreenAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.sendScreen; } }; // Time //struct TimezoneOffsetAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.timezoneOffset; } }; diff --git a/main/cloud.cpp b/main/cloud.cpp index afda88c..405ff59 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -40,6 +40,7 @@ std::optional lastHeartbeat; std::optional lastOtaStatus; bool hasAnnouncedItself{}; +espchrono::millis_clock::time_point isSendingNvs{}; constexpr const char * const TAG = "BOBBYCLOUD"; constexpr const auto json_document_size = 1024; @@ -69,7 +70,6 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v && !std::is_same_v && - !std::is_same_v && !std::is_same_v && !std::is_same_v , void>::type @@ -151,7 +151,6 @@ typename std::enable_if< std::is_same_v || std::is_same_v || std::is_same_v || - std::is_same_v || std::is_same_v , void>::type toArduinoJson(std::string_view key, T value, T defaultValue, JsonObject &object) @@ -195,7 +194,6 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v && !std::is_same_v && - !std::is_same_v && !std::is_same_v && !std::is_same_v , tl::expected>::type @@ -285,7 +283,6 @@ typename std::enable_if< std::is_same_v || std::is_same_v || std::is_same_v || - std::is_same_v || std::is_same_v , tl::expected>::type set_config(ConfigWrapper &config, std::string_view newValue) @@ -559,7 +556,7 @@ void cloudHeartbeat() void initCloud() { if (configs.cloudSettings.cloudEnabled.value() && - !configs.cloudUrl.value().empty() && configs.cloudSettings.cloudMode.value() != CloudMode::INACTIVE && wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::CONNECTED) + !configs.cloudUrl.value().empty() && wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::CONNECTED) { createCloud(); if (!cloudClient) @@ -576,7 +573,7 @@ void updateCloud() const auto now = espchrono::millis_clock::now(); - if (configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) + if (configs.cloudSettings.sendStatistic.value()) { if (!lastCloudCollect || now - *lastCloudCollect >= std::chrono::milliseconds{ configs.boardcomputerHardware.timersSettings.cloudCollectRate.value()}) { @@ -629,7 +626,7 @@ void cloudCollect() return; } - if (configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) + if (configs.cloudSettings.sendStatistic.value()) { if (cloudBuffer.empty()) cloudBuffer = '['; @@ -708,71 +705,68 @@ void cloudCollect() void cloudSend() { - if (configs.cloudSettings.cloudEnabled.value() && - !configs.cloudUrl.value().empty() && (configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) || ((configs.cloudSettings.cloudMode.value() == CloudMode::REMOTE_DISPLAY || configs.cloudSettings.cloudMode.value() == CloudMode::STATISTICS_AND_REMOTE_DISPLAY) && !hasAnnouncedItself)) + if (!configs.cloudSettings.cloudEnabled.value()) { - if (!cloudClient) - { - if (espchrono::ago(lastCreateTry) < 10s) - return; - createCloud(); - return; - } - - if (!cloudStarted) - { - if (espchrono::ago(lastStartTry) < 10s) - return; - - if (wifi_stack::get_sta_status() != wifi_stack::WiFiStaStatus::CONNECTED) - return; - - startCloud(); - } - - if (!cloudStarted) - return; - - if (!cloudClient.is_connected()) - return; - - if (cloudBuffer.empty() && hasAnnouncedItself) - return; - - cloudBuffer += ']'; - - const auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); - - if (!hasAnnouncedItself && configs.cloudSettings.cloudEnabled.value()) - { - std::string helloWorld = getLoginMessage(); - ESP_LOGW(TAG, "=====> %s", helloWorld.c_str()); - const auto written_helloWorld = cloudClient.send_text(helloWorld, timeout); - if (written_helloWorld == helloWorld.size()) - hasAnnouncedItself = true; - } - - const auto written = cloudClient.send_text(cloudBuffer, timeout); - - if (written < 0) - { - ESP_LOGE("BOBBY", "cloudClient.send_text() failed with %i", written); - } - else if (written != cloudBuffer.size()) - { - ESP_LOGE("BOBBY", "websocket sent size mismatch, sent=%i, expected=%i", written, cloudBuffer.size()); - } - - cloudBuffer.clear(); + if (cloudClient) + destroyCloud(); + return; } - else if (cloudClient && !configs.cloudSettings.cloudEnabled.value()) - { - destroyCloud(); - } - else if(!cloudClient || !cloudStarted) + + if (!cloudClient) { initCloud(); + return; } + + if (configs.cloudUrl.value().empty()) + return; + + if (!configs.cloudSettings.sendStatistic.value() && !configs.cloudSettings.sendScreen.value()) + return; + + if (!cloudStarted) + { + if (espchrono::ago(lastStartTry) < 10s) + return; + + if (wifi_stack::get_sta_status() != wifi_stack::WiFiStaStatus::CONNECTED) + return; + + startCloud(); + return; + } + + if (!cloudClient.is_connected()) + return; + + if (cloudBuffer.empty() && hasAnnouncedItself) + return; + + cloudBuffer += ']'; + + const auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + + if (!hasAnnouncedItself && configs.cloudSettings.cloudEnabled.value()) + { + std::string helloWorld = getLoginMessage(); + ESP_LOGW(TAG, "=====> %s", helloWorld.c_str()); + const auto written_helloWorld = cloudClient.send_text(helloWorld, timeout); + if (written_helloWorld == helloWorld.size()) + hasAnnouncedItself = true; + } + + const auto written = cloudClient.send_text(cloudBuffer, timeout); + + if (written < 0) + { + ESP_LOGE("BOBBY", "cloudClient.send_text() failed with %i", written); + } + else if (written != cloudBuffer.size()) + { + ESP_LOGE("BOBBY", "websocket sent size mismatch, sent=%i, expected=%i", written, cloudBuffer.size()); + } + + cloudBuffer.clear(); } std::string getLoginMessage() @@ -785,56 +779,37 @@ std::string getLoginMessage() void cloudSendDisplay(std::string_view data) { - if (configs.cloudSettings.cloudEnabled.value() && - !configs.cloudUrl.value().empty() && configs.cloudSettings.cloudMode.value() != CloudMode::INACTIVE) + static std::string screenBuffer; + static uint64_t msg_id{0}; + + if (!cloudStarted || !cloudClient || !cloudClient.is_connected() || espchrono::ago(isSendingNvs) < 4s) + return; + + /* custom menu display handling + if (!espgui::currentDisplay) + return; + + if (const auto &menuDisplay = espgui::currentDisplay->asMenuDisplay(); menuDisplay) { - if (!cloudClient) - { - if (espchrono::ago(lastCreateTry) < 10s) - return; - createCloud(); - } - if (!cloudClient) - return; - - if (!cloudStarted) - { - if (espchrono::ago(lastStartTry) < 10s) - return; - - if (wifi_stack::get_sta_status() != wifi_stack::WiFiStaStatus::CONNECTED) - return; - - startCloud(); - } - if (!cloudStarted) - return; - - if (!cloudClient.is_connected()) - return; - - auto timeout = std::chrono::ceil(espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); - int written; - - if (hasAnnouncedItself) - written = cloudClient.send_text(data, timeout); - else - return; - ESP_LOGW(TAG, "%s", fmt::format("{}", data).c_str()); - - if (written < 0) - { - ESP_LOGE("BOBBY", "cloudClient.send_text() failed with %i", written); - hasAnnouncedItself = false; - } - else if (written != data.size()) - { - ESP_LOGE("BOBBY", "websocket sent size mismatch, sent=%i, expected=%i", written, data.size()); - } + // custom handle menu display + return; } - else if (cloudClient && !configs.cloudSettings.cloudEnabled.value()) + */ + + // fill 1024 bytes with the data + screenBuffer += std::string{data} + '\u0000'; + + if (screenBuffer.length() > 1024) { - destroyCloud(); + // send data + const auto timeout = std::chrono::ceil( + espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); + cloudClient.send_text(screenBuffer, timeout); + + // clear buffer + screenBuffer.clear(); + ESP_LOGI(TAG, "sent screen data %lu", msg_id); + msg_id++; } } @@ -896,6 +871,7 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int } const auto id = _id.as(); doc.clear(); + isSendingNvs = espchrono::millis_clock::now(); send_config(id); return; } @@ -1038,6 +1014,10 @@ void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int buttonRequest = button; } + else if (type == "initScreen") + { + initScreenRequest = true; + } else { ESP_LOGE(TAG, "unknown type: %s", type.c_str()); diff --git a/main/cloud.h b/main/cloud.h index bd2412e..a8fc3d5 100644 --- a/main/cloud.h +++ b/main/cloud.h @@ -16,13 +16,6 @@ extern espchrono::millis_clock::time_point lastCreateTry; extern espchrono::millis_clock::time_point lastStartTry; extern std::string cloudBuffer; -#define CloudModeValues(x) \ - x(INACTIVE) \ - x(STATISTICS) \ - x(REMOTE_DISPLAY) \ - x(STATISTICS_AND_REMOTE_DISPLAY) -DECLARE_BOBBYTYPESAFE_ENUM(CloudMode, : uint8_t, CloudModeValues) - void createCloud(); void destroyCloud(); void startCloud(); diff --git a/main/configutils_bobby.h b/main/configutils_bobby.h index 48faa3c..0b3006b 100644 --- a/main/configutils_bobby.h +++ b/main/configutils_bobby.h @@ -13,7 +13,6 @@ IMPLEMENT_NVS_GET_SET_ENUM(BatteryCellType) IMPLEMENT_NVS_GET_SET_ENUM(BobbyQuickActions) -IMPLEMENT_NVS_GET_SET_ENUM(CloudMode) IMPLEMENT_NVS_GET_SET_ENUM(HandbremseMode) IMPLEMENT_NVS_GET_SET_ENUM(LedstripAnimation) IMPLEMENT_NVS_GET_SET_ENUM(OtaAnimationModes) diff --git a/main/configwrapper_bobby.cpp b/main/configwrapper_bobby.cpp index 7214090..b58f53e 100644 --- a/main/configwrapper_bobby.cpp +++ b/main/configwrapper_bobby.cpp @@ -6,7 +6,6 @@ INSTANTIATE_CONFIGWRAPPER_TEMPLATES(BatteryCellType) INSTANTIATE_CONFIGWRAPPER_TEMPLATES(BobbyQuickActions) -INSTANTIATE_CONFIGWRAPPER_TEMPLATES(CloudMode) INSTANTIATE_CONFIGWRAPPER_TEMPLATES(HandbremseMode) INSTANTIATE_CONFIGWRAPPER_TEMPLATES(LedstripAnimation) INSTANTIATE_CONFIGWRAPPER_TEMPLATES(OtaAnimationModes) diff --git a/main/displays/menus/cloudsettingsmenu.cpp b/main/displays/menus/cloudsettingsmenu.cpp index 8f50037..8b2415c 100644 --- a/main/displays/menus/cloudsettingsmenu.cpp +++ b/main/displays/menus/cloudsettingsmenu.cpp @@ -22,7 +22,8 @@ namespace { constexpr char TEXT_CLOUDSETTINGS[] = "Cloud settings"; constexpr char TEXT_CLOUDENABLED[] = "Cloud enabled"; constexpr char TEXT_CLOUDTRANSMITTIMEOUT[] = "Transmit timeout"; -constexpr char TEXT_CLOUDMODE[] = "Cloud mode"; +constexpr char TEXT_SENDSTATISTICS[] = "Send Statistics"; +constexpr char TEXT_SENDSCREEN[] = "Send Screen"; constexpr char TEXT_CLOUDCOLLECTRATE[] = "Cloud collect rate"; constexpr char TEXT_CLOUDSENDRATE[] = "Cloud send rate"; constexpr char TEXT_BACK[] = "Back"; @@ -67,11 +68,12 @@ CloudSettingsMenu::CloudSettingsMenu() { constructMenuItem, BobbyCheckbox, CloudEnabledAccessor>>(); constructMenuItem, PushScreenAction>>(); + constructMenuItem, BobbyCheckbox, CloudSendStatisticsAccessor>>(); + constructMenuItem, BobbyCheckbox, CloudSendScreenAccessor>>(); constructMenuItem>(); constructMenuItem>(); constructMenuItem>(); constructMenuItem>(); - constructMenuItem>(&configs.cloudSettings.cloudMode); constructMenuItem, PushScreenAction>>(); constructMenuItem, PushScreenAction>>(); constructMenuItem, PushScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); diff --git a/main/globals.cpp b/main/globals.cpp index 5f00590..30ec1b1 100644 --- a/main/globals.cpp +++ b/main/globals.cpp @@ -41,6 +41,7 @@ SettingsPersister settingsPersister; std::atomic rawButtonRequest; std::atomic buttonRequest; +bool initScreenRequest{false}; Controllers controllers; diff --git a/main/globals.h b/main/globals.h index f5e2460..1a92e71 100644 --- a/main/globals.h +++ b/main/globals.h @@ -69,6 +69,7 @@ extern SettingsPersister settingsPersister; extern std::atomic rawButtonRequest; extern std::atomic buttonRequest; +extern bool initScreenRequest; class Controllers : public std::array { diff --git a/main/newsettings.h b/main/newsettings.h index 074547b..cb6db84 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -370,8 +370,9 @@ public: struct { ConfigWrapperLegacy cloudEnabled {false, DoReset, {}, "cloudEnabled" }; ConfigWrapperLegacy cloudTransmitTimeout{10, DoReset, {}, "clodTransmTmout" }; - ConfigWrapperLegacy cloudMode {CloudMode::INACTIVE, DoReset, {}, "cloudMode" }; ConfigWrapperLegacy cloudKey {std::string{}, DoReset, {}, "cloudKey" }; + ConfigWrapperLegacy sendStatistic {false, DoReset, {}, "cloudSendStats" }; + ConfigWrapperLegacy sendScreen {false, DoReset, {}, "cloudSendScreen" }; } cloudSettings; struct { @@ -713,8 +714,9 @@ public: \ x(cloudSettings.cloudEnabled) \ x(cloudSettings.cloudTransmitTimeout) \ - x(cloudSettings.cloudMode) \ x(cloudSettings.cloudKey) \ + x(cloudSettings.sendStatistic) \ + x(cloudSettings.sendScreen) \ \ x(udpCloudSettings.udpUid) \ x(udpCloudSettings.udpCloudEnabled) \ diff --git a/main/remotedisplaywebsocket.cpp b/main/remotedisplaywebsocket.cpp index 892afda..e69de29 100644 --- a/main/remotedisplaywebsocket.cpp +++ b/main/remotedisplaywebsocket.cpp @@ -1,29 +0,0 @@ -#include "remotedisplaywebsocket.h" -/* -// local includes -#include "cloud.h" - -void handleDrawPixel(uint16_t x, uint16_t y, uint16_t color) -{ -} - -void handleDrawRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) -{ - cloudSendDisplay(fmt::format("{\"type\":\"drawRect\",\"x\":{},\"y\":{},\"w\":{},\"h\":{},\"C\":\"{}\"}", x, y, width, height, color)); -} - -void handleFillRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) -{ - cloudSendDisplay(fmt::format("{\"type\":\"fillRect\",\"x\":{},\"y\":{},\"w\":{},\"h\":{},\"C\":\"{}\"}", x, y, width, height, color)); -} - -void handleDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) -{ - cloudSendDisplay(fmt::format("{\"type\":\"drawLine\",\"x1\":{},\"y1\":{},\"x2\":{},\"y2\":{},\"C\":\"{}\"}", x1, y1, x2, y2, color)); -} - -void handleFillScreen(uint16_t color) -{ - cloudSendDisplay(fmt::format("{\"type\":\"fillScreen\",\"C\":\"{}\"}", color)); -} -*/ diff --git a/main/remotedisplaywebsocket.h b/main/remotedisplaywebsocket.h index b3c8e96..2cbd74d 100644 --- a/main/remotedisplaywebsocket.h +++ b/main/remotedisplaywebsocket.h @@ -1,39 +1,115 @@ #pragma once -// system includes -#include -#include +// 3rdparty lib includes #include -void cloudSendDisplay(std::string_view data); +// local includes +#include "cloud.h" -void handleDrawPixel(uint16_t x, uint16_t y, uint16_t color); -void handleDrawRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color); -void handleFillRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color); -void handleDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); -void handleFillScreen(uint16_t color); +#include "esp_log.h" -void handleDrawPixel(uint16_t x, uint16_t y, uint16_t color) +namespace remotedisplay { +void drawCentreString(std::string_view string, int32_t x, int32_t y, uint8_t font) { - cloudSendDisplay(fmt::format("{{\"type\":\"drawPixel\",\"x\":{},\"y\":{},\"C\":\"{}\"}}", x, y, color)); + cloudSendDisplay(fmt::format("_dcstr {} {} {} {}", x, y, string, font)); } -void handleDrawRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) +void drawChar(int32_t x, int32_t y, uint16_t c, uint16_t color, uint16_t bg, uint8_t size) { - cloudSendDisplay(fmt::format("{{\"type\":\"drawRect\",\"x\":{},\"y\":{},\"w\":{},\"h\":{},\"C\":\"{}\"}}", x, y, width, height, color)); + cloudSendDisplay(fmt::format("_dc {} {} {} {} {}", x, y, c, color, bg, size)); } -void handleFillRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) +void drawCircle(int32_t x, int32_t y, int32_t r, uint32_t color) { - cloudSendDisplay(fmt::format("{{\"type\":\"fillRect\",\"x\":{},\"y\":{},\"w\":{},\"h\":{},\"C\":\"{}\"}}", x, y, width, height, color)); + cloudSendDisplay(fmt::format("_dcirc {} {} {} {}", x, y, r, color)); } -void handleDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) +void drawEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) { - cloudSendDisplay(fmt::format("{{\"type\":\"drawLine\",\"x1\":{},\"y1\":{},\"x2\":{},\"y2\":{},\"C\":\"{}\"}}", x1, y1, x2, y2, color)); + cloudSendDisplay(fmt::format("_dellip {} {} {} {} {}", x, y, rx, ry, color)); } -void handleFillScreen(uint16_t color) +void drawFastHLine(int32_t x, int32_t y, int32_t w, uint16_t color) { - cloudSendDisplay(fmt::format("{{\"type\":\"fillScreen\",\"C\":\"{}\"}}", color)); + cloudSendDisplay(fmt::format("_dhl {} {} {} {}", x, y, w, color)); } + +void drawFastVLine(int32_t x, int32_t y, int32_t h, uint16_t color) +{ + cloudSendDisplay(fmt::format("_dvl {} {} {} {}", x, y, h, color)); +} + +void drawLine(int32_t xs, int32_t ys, int32_t xe, int32_t ye, uint16_t color) +{ + cloudSendDisplay(fmt::format("_dl {} {} {} {} {}", xs, ys, xe, ye, color)); +} + +void drawPixel(int32_t x, int32_t y, uint16_t color) +{ + return; // wont support + cloudSendDisplay(fmt::format("_dp {} {} {}", x, y, color)); +} + +void drawRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color) +{ + ESP_LOGI("remotedisplay", "drawRect"); + cloudSendDisplay(fmt::format("_dr {} {} {} {} {}", x, y, w, h, color)); +} + +void drawRightString(std::string_view string, int32_t x, int32_t y, uint8_t font) +{ + cloudSendDisplay(fmt::format("_drs {} {} {} {}", x, y, string, font)); +} + +void drawRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color) +{ + cloudSendDisplay(fmt::format("_drr {} {} {} {} {} {}", x, y, w, h, radius, color)); +} + +void drawString(std::string_view string, int32_t poX, int32_t poY, uint8_t font) +{ + cloudSendDisplay(fmt::format("_ds {} {} {} {}", poX, poY, string, font)); +} + +void drawSunkenRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color0, uint32_t color1, uint32_t color2) +{ + cloudSendDisplay(fmt::format("_dsr {} {} {} {} {} {} {}", x, y, w, h, color0, color1, color2)); +} + +void drawTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color) +{ + cloudSendDisplay(fmt::format("_dt {} {} {} {} {} {} {}", x1, y1, x2, y2, x3, y3, color)); +} + + +void fillCircle(int32_t x, int32_t y, int32_t r, uint32_t color) +{ + cloudSendDisplay(fmt::format("_fcirc {} {} {} {}", x, y, r, color)); +} + +void fillEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) +{ + cloudSendDisplay(fmt::format("_fellip {} {} {} {} {}", x, y, rx, ry, color)); +} + +void fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t color) +{ + cloudSendDisplay(fmt::format("_fr {} {} {} {} {}", x, y, w, h, color)); +} + +void fillRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color) +{ + cloudSendDisplay(fmt::format("_frr {} {} {} {} {} {}", x, y, w, h, radius, color)); +} + +void fillScreen(uint32_t color) +{ + cloudSendDisplay(fmt::format("_fs {}", color)); +} + +void fillTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color) +{ + cloudSendDisplay(fmt::format("_ft {} {} {} {} {} {} {}", x1, y1, x2, y2, x3, y3, color)); +} + +} // namespace remotedisplay diff --git a/main/screens.cpp b/main/screens.cpp index 6ab6bbf..e1b4330 100644 --- a/main/screens.cpp +++ b/main/screens.cpp @@ -56,6 +56,12 @@ void updateDisplay() currentDisplay->buttonReleased(btn); buttonRequest = -1; } + + if (initScreenRequest && currentDisplay) + { + currentDisplay->initScreen(); + initScreenRequest = false; + } } void redrawDisplay() diff --git a/main/typeutils.h b/main/typeutils.h index aa0fe4b..5e331fe 100644 --- a/main/typeutils.h +++ b/main/typeutils.h @@ -43,7 +43,6 @@ DEFINE_FOR_TYPE(OtaAnimationModes) DEFINE_FOR_TYPE(LedstripAnimation) DEFINE_FOR_TYPE(HandbremseMode) DEFINE_FOR_TYPE(BobbyQuickActions) -DEFINE_FOR_TYPE(CloudMode) DEFINE_FOR_TYPE(BatteryCellType) DEFINE_FOR_TYPE(wifi_auth_mode_t) DEFINE_FOR_TYPE(wifi_stack::mac_t) diff --git a/main/webserver_newsettings.cpp b/main/webserver_newsettings.cpp index 0d38182..8ae9d91 100644 --- a/main/webserver_newsettings.cpp +++ b/main/webserver_newsettings.cpp @@ -52,7 +52,6 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v && !std::is_same_v && - !std::is_same_v && !std::is_same_v , void>::type showInputForSetting(std::string_view key, T value, std::string &body) @@ -206,7 +205,6 @@ typename std::enable_if< std::is_same_v || std::is_same_v || std::is_same_v || - std::is_same_v || std::is_same_v , void>::type showInputForSetting(std::string_view key, T value, std::string &body) @@ -355,7 +353,6 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v && !std::is_same_v && - !std::is_same_v && !std::is_same_v , tl::expected>::type saveSetting(ConfigWrapper &config, std::string_view newValue) @@ -443,8 +440,7 @@ typename std::enable_if< std::is_same_v || std::is_same_v || std::is_same_v || - std::is_same_v || - std::is_same_v + std::is_same_v , tl::expected>::type saveSetting(ConfigWrapper &config, std::string_view newValue) { From ad9b3c4e53488bf0028b1a96b22955e6dc99831b Mon Sep 17 00:00:00 2001 From: Michael Ehrenreich Date: Sun, 26 Jun 2022 16:23:42 +0200 Subject: [PATCH 33/38] WIP binary protocol --- main/remotedisplaywebsocket.h | 153 +++++++++++++++++++++++++++++++--- 1 file changed, 143 insertions(+), 10 deletions(-) diff --git a/main/remotedisplaywebsocket.h b/main/remotedisplaywebsocket.h index 2cbd74d..c85cb64 100644 --- a/main/remotedisplaywebsocket.h +++ b/main/remotedisplaywebsocket.h @@ -1,5 +1,9 @@ #pragma once +#include +#include +#include + // 3rdparty lib includes #include @@ -8,25 +12,126 @@ #include "esp_log.h" +#define RDWS_TAG "remotedisplay" + namespace remotedisplay { + +enum class msg_type : uint8_t +{ + drawCentreString, + drawChar, + drawCircle, + drawEllipse, + drawLine, + drawRect, + fillRect, + fillRoundRect, + fillScreen +}; + +struct drawString_msg +{ + int16_t x, y; + uint8_t font; +}; +static_assert(sizeof(drawString_msg) == 6, "wrong size"); + +struct drawChar_msg +{ + int16_t x, y; + uint16_t c, color, bg; + uint8_t size; +}; +static_assert(sizeof(drawChar_msg) == 12, "wrong size"); + +struct drawCircle_msg +{ + int16_t x, y, r; + uint16_t color; +}; +static_assert(sizeof(drawCircle_msg) == 8, "wrong size"); + +struct drawEllipse_msg +{ + int16_t x, y, rx, ry; + uint16_t color; +}; +static_assert(sizeof(drawEllipse_msg) == 10, "wrong size"); + +struct drawRect_msg +{ + int16_t x, y, w, h; + uint16_t color; +}; +static_assert(sizeof(drawRect_msg) == 10, "wrong size"); + +struct drawRoundRect_msg +{ + int16_t x, y, w, h, radius; + uint16_t color; +}; +static_assert(sizeof(drawRoundRect_msg) == 12, "wrong size"); + +struct drawLine_msg +{ + int16_t xs, ys, xe, ye; + uint16_t color; +}; +static_assert(sizeof(drawLine_msg) == 10, "wrong size"); + +constexpr size_t HEADER_SIZE = 3; +void emitMessageHeader(std::string &dst, msg_type msg_type, uint8_t msg_size) +{ + dst += (char)msg_type; + dst += (char)msg_size; +} + void drawCentreString(std::string_view string, int32_t x, int32_t y, uint8_t font) { - cloudSendDisplay(fmt::format("_dcstr {} {} {} {}", x, y, string, font)); + const size_t msg_size = HEADER_SIZE + sizeof(drawString_msg) + string.size(); + if (msg_size > UINT8_MAX) + { + ESP_LOGW(RDWS_TAG, "Msg size too long (%zu > UINT8_MAX)", msg_size); + return; + } + + drawString_msg dcstr = { (int16_t)x, (int16_t)y, font }; + std::string buf; + emitMessageHeader(buf, msg_type::drawCentreString, msg_size); + buf += std::string_view((char *)&dcstr, sizeof(dcstr)); + buf += string; + + cloudSendDisplay(buf); } void drawChar(int32_t x, int32_t y, uint16_t c, uint16_t color, uint16_t bg, uint8_t size) { - cloudSendDisplay(fmt::format("_dc {} {} {} {} {}", x, y, c, color, bg, size)); + drawChar_msg dc = { (int16_t)x, (int16_t)y, (uint16_t)c, color, bg, size }; + std::string buf; + emitMessageHeader(buf, msg_type::drawChar, HEADER_SIZE + sizeof(dc)); + buf += std::string_view((char *)&dc, sizeof(dc)); + + cloudSendDisplay(buf); } void drawCircle(int32_t x, int32_t y, int32_t r, uint32_t color) { - cloudSendDisplay(fmt::format("_dcirc {} {} {} {}", x, y, r, color)); + drawCircle_msg dcirc = { (int16_t)x, (int16_t)y, (int16_t)r, (uint16_t)color }; + std::string buf; + emitMessageHeader(buf, msg_type::drawCircle, HEADER_SIZE + sizeof(dcirc)); + buf += std::string_view((char *)&dcirc, sizeof(dcirc)); + + cloudSendDisplay(buf); } void drawEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) { - cloudSendDisplay(fmt::format("_dellip {} {} {} {} {}", x, y, rx, ry, color)); + drawEllipse_msg dellip = { (int16_t)x, (int16_t)y, (int16_t)rx, (int16_t)ry, color }; + std::string buf; + emitMessageHeader(buf, msg_type::drawEllipse, HEADER_SIZE + sizeof(dellip)); + buf += std::string_view((char *)&dellip, sizeof(dellip)); + + cloudSendDisplay(buf); } void drawFastHLine(int32_t x, int32_t y, int32_t w, uint16_t color) @@ -41,7 +146,12 @@ void drawFastVLine(int32_t x, int32_t y, int32_t h, uint16_t color) void drawLine(int32_t xs, int32_t ys, int32_t xe, int32_t ye, uint16_t color) { - cloudSendDisplay(fmt::format("_dl {} {} {} {} {}", xs, ys, xe, ye, color)); + drawLine_msg dl = { (int16_t)xs, (int16_t)ye, (int16_t)xe, (int16_t)ye, color }; + std::string buf; + emitMessageHeader(buf, msg_type::drawLine, HEADER_SIZE + sizeof(dl)); + buf += std::string_view((char *)&dl, sizeof(dl)); + + cloudSendDisplay(buf); } void drawPixel(int32_t x, int32_t y, uint16_t color) @@ -52,8 +162,13 @@ void drawPixel(int32_t x, int32_t y, uint16_t color) void drawRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color) { - ESP_LOGI("remotedisplay", "drawRect"); - cloudSendDisplay(fmt::format("_dr {} {} {} {} {}", x, y, w, h, color)); + // same parameters as fillRect -> can use same struct + drawRect_msg dr = { (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, (uint16_t)color }; + std::string buf; + emitMessageHeader(buf, msg_type::drawRect, HEADER_SIZE + sizeof(dr)); + buf += std::string_view((char *)&dr, sizeof(dr)); + + cloudSendDisplay(buf); } void drawRightString(std::string_view string, int32_t x, int32_t y, uint8_t font) @@ -94,17 +209,35 @@ void fillEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) void fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t color) { - cloudSendDisplay(fmt::format("_fr {} {} {} {} {}", x, y, w, h, color)); + drawRect_msg fr = { (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, color }; + std::string buf; + emitMessageHeader(buf, msg_type::fillRect, HEADER_SIZE + sizeof(fr)); + buf += std::string_view((char *)&fr, sizeof(fr)); + + cloudSendDisplay(buf); } void fillRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color) { - cloudSendDisplay(fmt::format("_frr {} {} {} {} {} {}", x, y, w, h, radius, color)); + drawRoundRect_msg frr = { + (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, + (int16_t)radius, (uint16_t)color + }; + std::string buf; + emitMessageHeader(buf, msg_type::fillRoundRect, HEADER_SIZE + sizeof(frr)); + buf += std::string_view((char *)&frr, sizeof(frr)); + + cloudSendDisplay(buf); } void fillScreen(uint32_t color) { - cloudSendDisplay(fmt::format("_fs {}", color)); + uint16_t fs = (uint16_t)color; + std::string buf; + emitMessageHeader(buf, msg_type::fillScreen, HEADER_SIZE + sizeof(fs)); + buf += std::string_view((char *)&fs, sizeof(fs)); + + cloudSendDisplay(buf); } void fillTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color) From 1abb83e6b14919f6cc5575f5f0289d2a6509dfef Mon Sep 17 00:00:00 2001 From: Michael Ehrenreich Date: Sun, 26 Jun 2022 20:57:50 +0200 Subject: [PATCH 34/38] More remote display --- main/remotedisplaywebsocket.h | 177 +++++++++++++++++++++------------- 1 file changed, 112 insertions(+), 65 deletions(-) diff --git a/main/remotedisplaywebsocket.h b/main/remotedisplaywebsocket.h index c85cb64..cdb1038 100644 --- a/main/remotedisplaywebsocket.h +++ b/main/remotedisplaywebsocket.h @@ -14,7 +14,11 @@ #define RDWS_TAG "remotedisplay" -namespace remotedisplay { +namespace remotedisplay +{ + +namespace +{ enum class msg_type : uint8_t { @@ -22,11 +26,22 @@ enum class msg_type : uint8_t drawChar, drawCircle, drawEllipse, + drawHLine, + drawVLine, drawLine, + drawPixel, drawRect, + drawRightString, + drawRoundRect, + drawString, + drawSunkenRect, + drawTriangle, + fillCircle, + fillEllipse, fillRect, fillRoundRect, - fillScreen + fillScreen, + fillTriangle }; struct drawString_msg @@ -58,6 +73,27 @@ struct drawEllipse_msg }; static_assert(sizeof(drawEllipse_msg) == 10, "wrong size"); +struct drawHVLine_msg +{ + int16_t x, y, wh; + uint16_t color; +}; +static_assert(sizeof(drawHVLine_msg) == 8, "wrong size"); + +struct drawLine_msg +{ + int16_t xs, ys, xe, ye; + uint16_t color; +}; +static_assert(sizeof(drawLine_msg) == 10, "wrong size"); + +struct drawPixel_msg +{ + int16_t x, y; + uint16_t color; +}; +static_assert(sizeof(drawPixel_msg) == 6, "wrong size"); + struct drawRect_msg { int16_t x, y, w, h; @@ -72,149 +108,164 @@ struct drawRoundRect_msg }; static_assert(sizeof(drawRoundRect_msg) == 12, "wrong size"); -struct drawLine_msg +struct drawSunkenRect_msg { - int16_t xs, ys, xe, ye; + int16_t x, y, w, h; + uint16_t color0, color1, color2; +}; +static_assert(sizeof(drawSunkenRect_msg) == 14, "wrong size"); + +struct drawTriangle_msg +{ + int16_t x1, y1, x2, y2, x3, y3; uint16_t color; }; -static_assert(sizeof(drawLine_msg) == 10, "wrong size"); +static_assert(sizeof(drawTriangle_msg) == 14, "wrong size"); -constexpr size_t HEADER_SIZE = 3; -void emitMessageHeader(std::string &dst, msg_type msg_type, uint8_t msg_size) +constexpr size_t HEADER_SIZE = 1; +void emitMessageHeader(std::string &dst, msg_type msg_type) { dst += (char)msg_type; - dst += (char)msg_size; } -void drawCentreString(std::string_view string, int32_t x, int32_t y, uint8_t font) +void sendDrawMsg(msg_type type, std::string_view msg) { - const size_t msg_size = HEADER_SIZE + sizeof(drawString_msg) + string.size(); - if (msg_size > UINT8_MAX) + std::string buf; + emitMessageHeader(buf, type); + buf += msg; + + cloudSendDisplay(buf); +} + +void drawGenericString(msg_type type, std::string_view string, int32_t x, int32_t y, uint8_t font) +{ + if (string.size() > UINT8_MAX) { - ESP_LOGW(RDWS_TAG, "Msg size too long (%zu > UINT8_MAX)", msg_size); + ESP_LOGW(RDWS_TAG, "String size too long (%zu > UINT8_MAX)", string.size()); return; } drawString_msg dcstr = { (int16_t)x, (int16_t)y, font }; std::string buf; - emitMessageHeader(buf, msg_type::drawCentreString, msg_size); + emitMessageHeader(buf, msg_type::drawCentreString); buf += std::string_view((char *)&dcstr, sizeof(dcstr)); + buf += (char)string.length(); buf += string; cloudSendDisplay(buf); } +} // namespace + +void drawCentreString(std::string_view string, int32_t x, int32_t y, uint8_t font) +{ + drawGenericString(msg_type::drawCentreString, string, x, y, font); +} + void drawChar(int32_t x, int32_t y, uint16_t c, uint16_t color, uint16_t bg, uint8_t size) { drawChar_msg dc = { (int16_t)x, (int16_t)y, (uint16_t)c, color, bg, size }; - std::string buf; - emitMessageHeader(buf, msg_type::drawChar, HEADER_SIZE + sizeof(dc)); - buf += std::string_view((char *)&dc, sizeof(dc)); - - cloudSendDisplay(buf); + sendDrawMsg(msg_type::drawChar, std::string_view((char *)&dc, sizeof(dc))); } void drawCircle(int32_t x, int32_t y, int32_t r, uint32_t color) { drawCircle_msg dcirc = { (int16_t)x, (int16_t)y, (int16_t)r, (uint16_t)color }; - std::string buf; - emitMessageHeader(buf, msg_type::drawCircle, HEADER_SIZE + sizeof(dcirc)); - buf += std::string_view((char *)&dcirc, sizeof(dcirc)); - - cloudSendDisplay(buf); + sendDrawMsg(msg_type::drawCircle, std::string_view((char *)&dcirc, sizeof(dcirc))); } void drawEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) { drawEllipse_msg dellip = { (int16_t)x, (int16_t)y, (int16_t)rx, (int16_t)ry, color }; - std::string buf; - emitMessageHeader(buf, msg_type::drawEllipse, HEADER_SIZE + sizeof(dellip)); - buf += std::string_view((char *)&dellip, sizeof(dellip)); - - cloudSendDisplay(buf); + sendDrawMsg(msg_type::drawEllipse, std::string_view((char *)&dellip, sizeof(dellip))); } void drawFastHLine(int32_t x, int32_t y, int32_t w, uint16_t color) { - cloudSendDisplay(fmt::format("_dhl {} {} {} {}", x, y, w, color)); + drawHVLine_msg dhl = { (int16_t)x, (int16_t)y, (int16_t)w, color }; + sendDrawMsg(msg_type::drawHLine, std::string_view((char *)&dhl, sizeof(dhl))); } void drawFastVLine(int32_t x, int32_t y, int32_t h, uint16_t color) { - cloudSendDisplay(fmt::format("_dvl {} {} {} {}", x, y, h, color)); + drawHVLine_msg dvl = { (int16_t)x, (int16_t)y, (int16_t)h, color }; + sendDrawMsg(msg_type::drawVLine, std::string_view((char *)&dvl, sizeof(dvl))); } void drawLine(int32_t xs, int32_t ys, int32_t xe, int32_t ye, uint16_t color) { - drawLine_msg dl = { (int16_t)xs, (int16_t)ye, (int16_t)xe, (int16_t)ye, color }; - std::string buf; - emitMessageHeader(buf, msg_type::drawLine, HEADER_SIZE + sizeof(dl)); - buf += std::string_view((char *)&dl, sizeof(dl)); - - cloudSendDisplay(buf); + drawLine_msg dl = { (int16_t)xs, (int16_t)ys, (int16_t)xe, (int16_t)ye, color }; + sendDrawMsg(msg_type::drawLine, std::string_view((char *)&dl, sizeof(dl))); } void drawPixel(int32_t x, int32_t y, uint16_t color) { return; // wont support - cloudSendDisplay(fmt::format("_dp {} {} {}", x, y, color)); + drawPixel_msg dp = { (int16_t)x, (int16_t)y, color }; + sendDrawMsg(msg_type::drawPixel, std::string_view((char *)&dp, sizeof(dp))); } void drawRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color) { // same parameters as fillRect -> can use same struct drawRect_msg dr = { (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, (uint16_t)color }; - std::string buf; - emitMessageHeader(buf, msg_type::drawRect, HEADER_SIZE + sizeof(dr)); - buf += std::string_view((char *)&dr, sizeof(dr)); - - cloudSendDisplay(buf); + sendDrawMsg(msg_type::drawRect, std::string_view((char *)&dr, sizeof(dr))); } void drawRightString(std::string_view string, int32_t x, int32_t y, uint8_t font) { - cloudSendDisplay(fmt::format("_drs {} {} {} {}", x, y, string, font)); + drawGenericString(msg_type::drawRightString, string, x, y, font); } void drawRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color) { - cloudSendDisplay(fmt::format("_drr {} {} {} {} {} {}", x, y, w, h, radius, color)); + drawRoundRect_msg drr = { + (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, + (int16_t)radius, (uint16_t)color + }; + sendDrawMsg(msg_type::drawRoundRect, std::string_view((char *)&drr, sizeof(drr))); } void drawString(std::string_view string, int32_t poX, int32_t poY, uint8_t font) { - cloudSendDisplay(fmt::format("_ds {} {} {} {}", poX, poY, string, font)); + drawGenericString(msg_type::drawString, string, poX, poY, font); } void drawSunkenRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color0, uint32_t color1, uint32_t color2) { - cloudSendDisplay(fmt::format("_dsr {} {} {} {} {} {} {}", x, y, w, h, color0, color1, color2)); + drawSunkenRect_msg dsr = { + (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, + (uint16_t)color0, (uint16_t)color1, (uint16_t)color2 + }; + sendDrawMsg(msg_type::drawSunkenRect, std::string_view((char *)&dsr, sizeof(dsr))); } void drawTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color) { - cloudSendDisplay(fmt::format("_dt {} {} {} {} {} {} {}", x1, y1, x2, y2, x3, y3, color)); + drawTriangle_msg dt = { + (int16_t)x1, (int16_t)y1, (int16_t)x2, (int16_t)y2, (int16_t)x3, (int16_t)y3, + (uint16_t)color + }; + sendDrawMsg(msg_type::drawTriangle, std::string_view((char *)&dt, sizeof(dt))); } void fillCircle(int32_t x, int32_t y, int32_t r, uint32_t color) { - cloudSendDisplay(fmt::format("_fcirc {} {} {} {}", x, y, r, color)); + drawCircle_msg fcirc = { (int16_t)x, (int16_t)y, (int16_t)r, (uint16_t) color }; + sendDrawMsg(msg_type::fillCircle, std::string_view((char *)&fcirc, sizeof(fcirc))); } void fillEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) { - cloudSendDisplay(fmt::format("_fellip {} {} {} {} {}", x, y, rx, ry, color)); + drawEllipse_msg fellip = { (int16_t)x, (int16_t)y, (int16_t)rx, (int16_t)ry, (uint16_t) color }; + sendDrawMsg(msg_type::fillEllipse, std::string_view((char *)&fellip, sizeof(fellip))); } void fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t color) { drawRect_msg fr = { (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, color }; - std::string buf; - emitMessageHeader(buf, msg_type::fillRect, HEADER_SIZE + sizeof(fr)); - buf += std::string_view((char *)&fr, sizeof(fr)); - - cloudSendDisplay(buf); + sendDrawMsg(msg_type::fillRect, std::string_view((char *)&fr, sizeof(fr))); } void fillRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color) @@ -223,26 +274,22 @@ void fillRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, u (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, (int16_t)radius, (uint16_t)color }; - std::string buf; - emitMessageHeader(buf, msg_type::fillRoundRect, HEADER_SIZE + sizeof(frr)); - buf += std::string_view((char *)&frr, sizeof(frr)); - - cloudSendDisplay(buf); + sendDrawMsg(msg_type::fillRoundRect, std::string_view((char *)&frr, sizeof(frr))); } void fillScreen(uint32_t color) { uint16_t fs = (uint16_t)color; - std::string buf; - emitMessageHeader(buf, msg_type::fillScreen, HEADER_SIZE + sizeof(fs)); - buf += std::string_view((char *)&fs, sizeof(fs)); - - cloudSendDisplay(buf); + sendDrawMsg(msg_type::fillScreen, std::string_view((char *)&fs, sizeof(fs))); } void fillTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color) { - cloudSendDisplay(fmt::format("_ft {} {} {} {} {} {} {}", x1, y1, x2, y2, x3, y3, color)); + drawTriangle_msg ft = { + (int16_t)x1, (int16_t)y1, (int16_t)x2, (int16_t)y2, (int16_t)x3, (int16_t)y3, + (uint16_t)color + }; + sendDrawMsg(msg_type::fillTriangle, std::string_view((char *)&ft, sizeof(ft))); } } // namespace remotedisplay From 67580cb7ec6e6d832848c470e877f43fd814c651 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 26 Jun 2022 23:23:08 +0200 Subject: [PATCH 35/38] Fixed code --- main/remotedisplaywebsocket.h | 90 +++++++++++++++++------------------ 1 file changed, 44 insertions(+), 46 deletions(-) diff --git a/main/remotedisplaywebsocket.h b/main/remotedisplaywebsocket.h index cdb1038..238978e 100644 --- a/main/remotedisplaywebsocket.h +++ b/main/remotedisplaywebsocket.h @@ -14,11 +14,9 @@ #define RDWS_TAG "remotedisplay" -namespace remotedisplay -{ +namespace remotedisplay { -namespace -{ +namespace { enum class msg_type : uint8_t { @@ -145,10 +143,10 @@ void drawGenericString(msg_type type, std::string_view string, int32_t x, int32_ return; } - drawString_msg dcstr = { (int16_t)x, (int16_t)y, font }; + drawString_msg dcstr = { static_cast(x), static_cast(y), font }; std::string buf; emitMessageHeader(buf, msg_type::drawCentreString); - buf += std::string_view((char *)&dcstr, sizeof(dcstr)); + buf += std::string_view(reinterpret_cast(&dcstr), sizeof(dcstr)); buf += (char)string.length(); buf += string; @@ -164,52 +162,52 @@ void drawCentreString(std::string_view string, int32_t x, int32_t y, uint8_t fon void drawChar(int32_t x, int32_t y, uint16_t c, uint16_t color, uint16_t bg, uint8_t size) { - drawChar_msg dc = { (int16_t)x, (int16_t)y, (uint16_t)c, color, bg, size }; - sendDrawMsg(msg_type::drawChar, std::string_view((char *)&dc, sizeof(dc))); + drawChar_msg dc = { static_cast(x), static_cast(y), static_cast(c), color, bg, size }; + sendDrawMsg(msg_type::drawChar, std::string_view(reinterpret_cast(&dc), sizeof(dc))); } void drawCircle(int32_t x, int32_t y, int32_t r, uint32_t color) { - drawCircle_msg dcirc = { (int16_t)x, (int16_t)y, (int16_t)r, (uint16_t)color }; - sendDrawMsg(msg_type::drawCircle, std::string_view((char *)&dcirc, sizeof(dcirc))); + drawCircle_msg dcirc = { static_cast(x), static_cast(y), static_cast(r), static_cast(color) }; + sendDrawMsg(msg_type::drawCircle, std::string_view(reinterpret_cast(&dcirc), sizeof(dcirc))); } void drawEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) { - drawEllipse_msg dellip = { (int16_t)x, (int16_t)y, (int16_t)rx, (int16_t)ry, color }; - sendDrawMsg(msg_type::drawEllipse, std::string_view((char *)&dellip, sizeof(dellip))); + drawEllipse_msg dellip = { static_cast(x), static_cast(y), static_cast(rx), static_cast(ry), color }; + sendDrawMsg(msg_type::drawEllipse, std::string_view(reinterpret_cast(&dellip), sizeof(dellip))); } void drawFastHLine(int32_t x, int32_t y, int32_t w, uint16_t color) { - drawHVLine_msg dhl = { (int16_t)x, (int16_t)y, (int16_t)w, color }; - sendDrawMsg(msg_type::drawHLine, std::string_view((char *)&dhl, sizeof(dhl))); + drawHVLine_msg dhl = { static_cast(x), static_cast(y), static_cast(w), color }; + sendDrawMsg(msg_type::drawHLine, std::string_view(reinterpret_cast(&dhl), sizeof(dhl))); } void drawFastVLine(int32_t x, int32_t y, int32_t h, uint16_t color) { - drawHVLine_msg dvl = { (int16_t)x, (int16_t)y, (int16_t)h, color }; - sendDrawMsg(msg_type::drawVLine, std::string_view((char *)&dvl, sizeof(dvl))); + drawHVLine_msg dvl = { static_cast(x), static_cast(y), static_cast(h), color }; + sendDrawMsg(msg_type::drawVLine, std::string_view(reinterpret_cast(&dvl), sizeof(dvl))); } void drawLine(int32_t xs, int32_t ys, int32_t xe, int32_t ye, uint16_t color) { - drawLine_msg dl = { (int16_t)xs, (int16_t)ys, (int16_t)xe, (int16_t)ye, color }; - sendDrawMsg(msg_type::drawLine, std::string_view((char *)&dl, sizeof(dl))); + drawLine_msg dl = { static_cast(xs), static_cast(ys), static_cast(xe), static_cast(ye), color }; + sendDrawMsg(msg_type::drawLine, std::string_view(reinterpret_cast(&dl), sizeof(dl))); } void drawPixel(int32_t x, int32_t y, uint16_t color) { - return; // wont support - drawPixel_msg dp = { (int16_t)x, (int16_t)y, color }; - sendDrawMsg(msg_type::drawPixel, std::string_view((char *)&dp, sizeof(dp))); + return; // won't support + drawPixel_msg dp = { static_cast(x), static_cast(y), color }; + sendDrawMsg(msg_type::drawPixel, std::string_view(reinterpret_cast(&dp), sizeof(dp))); } void drawRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color) { // same parameters as fillRect -> can use same struct - drawRect_msg dr = { (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, (uint16_t)color }; - sendDrawMsg(msg_type::drawRect, std::string_view((char *)&dr, sizeof(dr))); + drawRect_msg dr = { static_cast(x), static_cast(y), static_cast(w), static_cast(h), static_cast(color) }; + sendDrawMsg(msg_type::drawRect, std::string_view(reinterpret_cast(&dr), sizeof(dr))); } void drawRightString(std::string_view string, int32_t x, int32_t y, uint8_t font) @@ -220,10 +218,10 @@ void drawRightString(std::string_view string, int32_t x, int32_t y, uint8_t font void drawRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color) { drawRoundRect_msg drr = { - (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, - (int16_t)radius, (uint16_t)color + static_cast(x), static_cast(y), static_cast(w), static_cast(h), + static_cast(radius), static_cast(color) }; - sendDrawMsg(msg_type::drawRoundRect, std::string_view((char *)&drr, sizeof(drr))); + sendDrawMsg(msg_type::drawRoundRect, std::string_view(reinterpret_cast(&drr), sizeof(drr))); } void drawString(std::string_view string, int32_t poX, int32_t poY, uint8_t font) @@ -234,62 +232,62 @@ void drawString(std::string_view string, int32_t poX, int32_t poY, uint8_t font) void drawSunkenRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color0, uint32_t color1, uint32_t color2) { drawSunkenRect_msg dsr = { - (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, - (uint16_t)color0, (uint16_t)color1, (uint16_t)color2 + static_cast(x), static_cast(y), static_cast(w), static_cast(h), + static_cast(color0), static_cast(color1), static_cast(color2) }; - sendDrawMsg(msg_type::drawSunkenRect, std::string_view((char *)&dsr, sizeof(dsr))); + sendDrawMsg(msg_type::drawSunkenRect, std::string_view(reinterpret_cast(&dsr), sizeof(dsr))); } void drawTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color) { drawTriangle_msg dt = { - (int16_t)x1, (int16_t)y1, (int16_t)x2, (int16_t)y2, (int16_t)x3, (int16_t)y3, - (uint16_t)color + static_cast(x1), static_cast(y1), static_cast(x2), static_cast(y2), static_cast(x3), static_cast(y3), + static_cast(color) }; - sendDrawMsg(msg_type::drawTriangle, std::string_view((char *)&dt, sizeof(dt))); + sendDrawMsg(msg_type::drawTriangle, std::string_view(reinterpret_cast(&dt), sizeof(dt))); } void fillCircle(int32_t x, int32_t y, int32_t r, uint32_t color) { - drawCircle_msg fcirc = { (int16_t)x, (int16_t)y, (int16_t)r, (uint16_t) color }; - sendDrawMsg(msg_type::fillCircle, std::string_view((char *)&fcirc, sizeof(fcirc))); + drawCircle_msg fcirc = { static_cast(x), static_cast(y), static_cast(r), static_cast(color) }; + sendDrawMsg(msg_type::fillCircle, std::string_view(reinterpret_cast(&fcirc), sizeof(fcirc))); } void fillEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) { - drawEllipse_msg fellip = { (int16_t)x, (int16_t)y, (int16_t)rx, (int16_t)ry, (uint16_t) color }; - sendDrawMsg(msg_type::fillEllipse, std::string_view((char *)&fellip, sizeof(fellip))); + drawEllipse_msg fellip = { static_cast(x), static_cast(y), static_cast(rx), static_cast(ry), static_cast(color) }; + sendDrawMsg(msg_type::fillEllipse, std::string_view(reinterpret_cast(&fellip), sizeof(fellip))); } void fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t color) { - drawRect_msg fr = { (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, color }; - sendDrawMsg(msg_type::fillRect, std::string_view((char *)&fr, sizeof(fr))); + drawRect_msg fr = { static_cast(x), static_cast(y), static_cast(w), static_cast(h), color }; + sendDrawMsg(msg_type::fillRect, std::string_view(reinterpret_cast(&fr), sizeof(fr))); } void fillRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color) { drawRoundRect_msg frr = { - (int16_t)x, (int16_t)y, (int16_t)w, (int16_t)h, - (int16_t)radius, (uint16_t)color + static_cast(x), static_cast(y), static_cast(w), static_cast(h), + static_cast(radius), static_cast(color) }; - sendDrawMsg(msg_type::fillRoundRect, std::string_view((char *)&frr, sizeof(frr))); + sendDrawMsg(msg_type::fillRoundRect, std::string_view(reinterpret_cast(&frr), sizeof(frr))); } void fillScreen(uint32_t color) { - uint16_t fs = (uint16_t)color; - sendDrawMsg(msg_type::fillScreen, std::string_view((char *)&fs, sizeof(fs))); + auto fs = static_cast(color); + sendDrawMsg(msg_type::fillScreen, std::string_view(reinterpret_cast(&fs), sizeof(fs))); } void fillTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color) { drawTriangle_msg ft = { - (int16_t)x1, (int16_t)y1, (int16_t)x2, (int16_t)y2, (int16_t)x3, (int16_t)y3, - (uint16_t)color + static_cast(x1), static_cast(y1), static_cast(x2), static_cast(y2), static_cast(x3), static_cast(y3), + static_cast(color) }; - sendDrawMsg(msg_type::fillTriangle, std::string_view((char *)&ft, sizeof(ft))); + sendDrawMsg(msg_type::fillTriangle, std::string_view(reinterpret_cast(&ft), sizeof(ft))); } } // namespace remotedisplay From f8baa1c6ea65162bcbe0c18a0ef729aa3d496f0e Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 26 Jun 2022 23:23:37 +0200 Subject: [PATCH 36/38] Updated --- components/TFT_eSPI | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/TFT_eSPI b/components/TFT_eSPI index 62c4a15..9fa26a0 160000 --- a/components/TFT_eSPI +++ b/components/TFT_eSPI @@ -1 +1 @@ -Subproject commit 62c4a15b6b2b67f924a9004c511adaada2c943dc +Subproject commit 9fa26a02fb6bcd52090e20f964e75b515dd77f2c From e518c80e0389ac62340553273d2509a53e7daa8c Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 7 Aug 2022 00:09:40 +0200 Subject: [PATCH 37/38] Removed display-related websocket stuff for merge --- .gitmodules | 2 +- components/TFT_eSPI | 2 +- main/CMakeLists.txt | 2 - main/accessors/settingsaccessors.h | 1 - main/cloud.cpp | 39 +-- main/cloud.h | 1 - main/displays/menus/cloudsettingsmenu.cpp | 2 - main/newsettings.h | 2 - main/remotedisplaywebsocket.cpp | 0 main/remotedisplaywebsocket.h | 293 ---------------------- 10 files changed, 3 insertions(+), 341 deletions(-) delete mode 100644 main/remotedisplaywebsocket.cpp delete mode 100644 main/remotedisplaywebsocket.h diff --git a/.gitmodules b/.gitmodules index 8e3efcd..af0c68f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -66,4 +66,4 @@ url = ../../0xFEEDC0DE64/esp-protocols.git [submodule "components/TFT_eSPI"] path = components/TFT_eSPI - url = ../../bobbycar-graz/TFT_eSPI.git + url = ../../0xFEEDC0DE64/TFT_eSPI.git diff --git a/components/TFT_eSPI b/components/TFT_eSPI index 9fa26a0..5ca80d8 160000 --- a/components/TFT_eSPI +++ b/components/TFT_eSPI @@ -1 +1 @@ -Subproject commit 9fa26a02fb6bcd52090e20f964e75b515dd77f2c +Subproject commit 5ca80d8cf80623282e10a0506ffbee8426d59bfb diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 6c190d3..16f979f 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -225,7 +225,6 @@ set(headers presets.h profilesettings.h qrimport.h - remotedisplaywebsocket.h rotary.h screens.h serial_bobby.h @@ -475,7 +474,6 @@ set(sources presets.cpp profilesettings.cpp qrimport.cpp - remotedisplaywebsocket.cpp rotary.cpp screens.cpp serial_bobby.cpp diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index e51e760..8a62d17 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -45,7 +45,6 @@ struct BleFenceEnabledAccessor : public NewSettingsAccessor { ConfigWrappe struct CloudEnabledAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.cloudEnabled; } }; struct CloudTransmitTimeoutAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.cloudTransmitTimeout; } }; struct CloudSendStatisticsAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.sendStatistic; } }; -struct CloudSendScreenAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.cloudSettings.sendScreen; } }; // Time //struct TimezoneOffsetAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.timezoneOffset; } }; diff --git a/main/cloud.cpp b/main/cloud.cpp index 405ff59..669d7e8 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -721,7 +721,7 @@ void cloudSend() if (configs.cloudUrl.value().empty()) return; - if (!configs.cloudSettings.sendStatistic.value() && !configs.cloudSettings.sendScreen.value()) + if (!configs.cloudSettings.sendStatistic.value()) return; if (!cloudStarted) @@ -776,43 +776,6 @@ std::string getLoginMessage() configs.otaUsername.value(), tft.width(), tft.height(), configs.webserverPassword.value(), configs.cloudSettings.cloudKey.value()); } - -void cloudSendDisplay(std::string_view data) -{ - static std::string screenBuffer; - static uint64_t msg_id{0}; - - if (!cloudStarted || !cloudClient || !cloudClient.is_connected() || espchrono::ago(isSendingNvs) < 4s) - return; - - /* custom menu display handling - if (!espgui::currentDisplay) - return; - - if (const auto &menuDisplay = espgui::currentDisplay->asMenuDisplay(); menuDisplay) - { - // custom handle menu display - return; - } - */ - - // fill 1024 bytes with the data - screenBuffer += std::string{data} + '\u0000'; - - if (screenBuffer.length() > 1024) - { - // send data - const auto timeout = std::chrono::ceil( - espchrono::milliseconds32{configs.cloudSettings.cloudTransmitTimeout.value()}).count(); - cloudClient.send_text(screenBuffer, timeout); - - // clear buffer - screenBuffer.clear(); - ESP_LOGI(TAG, "sent screen data %lu", msg_id); - msg_id++; - } -} - void cloudEventHandler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { CPP_UNUSED(event_handler_arg); diff --git a/main/cloud.h b/main/cloud.h index a8fc3d5..6b200cc 100644 --- a/main/cloud.h +++ b/main/cloud.h @@ -24,6 +24,5 @@ void initCloud(); void updateCloud(); void cloudCollect(); void cloudSend(); -void cloudSendDisplay(std::string_view data); std::string getLoginMessage(); diff --git a/main/displays/menus/cloudsettingsmenu.cpp b/main/displays/menus/cloudsettingsmenu.cpp index 8b2415c..8ae7445 100644 --- a/main/displays/menus/cloudsettingsmenu.cpp +++ b/main/displays/menus/cloudsettingsmenu.cpp @@ -23,7 +23,6 @@ constexpr char TEXT_CLOUDSETTINGS[] = "Cloud settings"; constexpr char TEXT_CLOUDENABLED[] = "Cloud enabled"; constexpr char TEXT_CLOUDTRANSMITTIMEOUT[] = "Transmit timeout"; constexpr char TEXT_SENDSTATISTICS[] = "Send Statistics"; -constexpr char TEXT_SENDSCREEN[] = "Send Screen"; constexpr char TEXT_CLOUDCOLLECTRATE[] = "Cloud collect rate"; constexpr char TEXT_CLOUDSENDRATE[] = "Cloud send rate"; constexpr char TEXT_BACK[] = "Back"; @@ -69,7 +68,6 @@ CloudSettingsMenu::CloudSettingsMenu() constructMenuItem, BobbyCheckbox, CloudEnabledAccessor>>(); constructMenuItem, PushScreenAction>>(); constructMenuItem, BobbyCheckbox, CloudSendStatisticsAccessor>>(); - constructMenuItem, BobbyCheckbox, CloudSendScreenAccessor>>(); constructMenuItem>(); constructMenuItem>(); constructMenuItem>(); diff --git a/main/newsettings.h b/main/newsettings.h index cb6db84..46ffccc 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -372,7 +372,6 @@ public: ConfigWrapperLegacy cloudTransmitTimeout{10, DoReset, {}, "clodTransmTmout" }; ConfigWrapperLegacy cloudKey {std::string{}, DoReset, {}, "cloudKey" }; ConfigWrapperLegacy sendStatistic {false, DoReset, {}, "cloudSendStats" }; - ConfigWrapperLegacy sendScreen {false, DoReset, {}, "cloudSendScreen" }; } cloudSettings; struct { @@ -716,7 +715,6 @@ public: x(cloudSettings.cloudTransmitTimeout) \ x(cloudSettings.cloudKey) \ x(cloudSettings.sendStatistic) \ - x(cloudSettings.sendScreen) \ \ x(udpCloudSettings.udpUid) \ x(udpCloudSettings.udpCloudEnabled) \ diff --git a/main/remotedisplaywebsocket.cpp b/main/remotedisplaywebsocket.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/main/remotedisplaywebsocket.h b/main/remotedisplaywebsocket.h deleted file mode 100644 index 238978e..0000000 --- a/main/remotedisplaywebsocket.h +++ /dev/null @@ -1,293 +0,0 @@ -#pragma once - -#include -#include -#include - -// 3rdparty lib includes -#include - -// local includes -#include "cloud.h" - -#include "esp_log.h" - -#define RDWS_TAG "remotedisplay" - -namespace remotedisplay { - -namespace { - -enum class msg_type : uint8_t -{ - drawCentreString, - drawChar, - drawCircle, - drawEllipse, - drawHLine, - drawVLine, - drawLine, - drawPixel, - drawRect, - drawRightString, - drawRoundRect, - drawString, - drawSunkenRect, - drawTriangle, - fillCircle, - fillEllipse, - fillRect, - fillRoundRect, - fillScreen, - fillTriangle -}; - -struct drawString_msg -{ - int16_t x, y; - uint8_t font; -}; -static_assert(sizeof(drawString_msg) == 6, "wrong size"); - -struct drawChar_msg -{ - int16_t x, y; - uint16_t c, color, bg; - uint8_t size; -}; -static_assert(sizeof(drawChar_msg) == 12, "wrong size"); - -struct drawCircle_msg -{ - int16_t x, y, r; - uint16_t color; -}; -static_assert(sizeof(drawCircle_msg) == 8, "wrong size"); - -struct drawEllipse_msg -{ - int16_t x, y, rx, ry; - uint16_t color; -}; -static_assert(sizeof(drawEllipse_msg) == 10, "wrong size"); - -struct drawHVLine_msg -{ - int16_t x, y, wh; - uint16_t color; -}; -static_assert(sizeof(drawHVLine_msg) == 8, "wrong size"); - -struct drawLine_msg -{ - int16_t xs, ys, xe, ye; - uint16_t color; -}; -static_assert(sizeof(drawLine_msg) == 10, "wrong size"); - -struct drawPixel_msg -{ - int16_t x, y; - uint16_t color; -}; -static_assert(sizeof(drawPixel_msg) == 6, "wrong size"); - -struct drawRect_msg -{ - int16_t x, y, w, h; - uint16_t color; -}; -static_assert(sizeof(drawRect_msg) == 10, "wrong size"); - -struct drawRoundRect_msg -{ - int16_t x, y, w, h, radius; - uint16_t color; -}; -static_assert(sizeof(drawRoundRect_msg) == 12, "wrong size"); - -struct drawSunkenRect_msg -{ - int16_t x, y, w, h; - uint16_t color0, color1, color2; -}; -static_assert(sizeof(drawSunkenRect_msg) == 14, "wrong size"); - -struct drawTriangle_msg -{ - int16_t x1, y1, x2, y2, x3, y3; - uint16_t color; -}; -static_assert(sizeof(drawTriangle_msg) == 14, "wrong size"); - -constexpr size_t HEADER_SIZE = 1; -void emitMessageHeader(std::string &dst, msg_type msg_type) -{ - dst += (char)msg_type; -} - -void sendDrawMsg(msg_type type, std::string_view msg) -{ - std::string buf; - emitMessageHeader(buf, type); - buf += msg; - - cloudSendDisplay(buf); -} - -void drawGenericString(msg_type type, std::string_view string, int32_t x, int32_t y, uint8_t font) -{ - if (string.size() > UINT8_MAX) - { - ESP_LOGW(RDWS_TAG, "String size too long (%zu > UINT8_MAX)", string.size()); - return; - } - - drawString_msg dcstr = { static_cast(x), static_cast(y), font }; - std::string buf; - emitMessageHeader(buf, msg_type::drawCentreString); - buf += std::string_view(reinterpret_cast(&dcstr), sizeof(dcstr)); - buf += (char)string.length(); - buf += string; - - cloudSendDisplay(buf); -} - -} // namespace - -void drawCentreString(std::string_view string, int32_t x, int32_t y, uint8_t font) -{ - drawGenericString(msg_type::drawCentreString, string, x, y, font); -} - -void drawChar(int32_t x, int32_t y, uint16_t c, uint16_t color, uint16_t bg, uint8_t size) -{ - drawChar_msg dc = { static_cast(x), static_cast(y), static_cast(c), color, bg, size }; - sendDrawMsg(msg_type::drawChar, std::string_view(reinterpret_cast(&dc), sizeof(dc))); -} - -void drawCircle(int32_t x, int32_t y, int32_t r, uint32_t color) -{ - drawCircle_msg dcirc = { static_cast(x), static_cast(y), static_cast(r), static_cast(color) }; - sendDrawMsg(msg_type::drawCircle, std::string_view(reinterpret_cast(&dcirc), sizeof(dcirc))); -} - -void drawEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) -{ - drawEllipse_msg dellip = { static_cast(x), static_cast(y), static_cast(rx), static_cast(ry), color }; - sendDrawMsg(msg_type::drawEllipse, std::string_view(reinterpret_cast(&dellip), sizeof(dellip))); -} - -void drawFastHLine(int32_t x, int32_t y, int32_t w, uint16_t color) -{ - drawHVLine_msg dhl = { static_cast(x), static_cast(y), static_cast(w), color }; - sendDrawMsg(msg_type::drawHLine, std::string_view(reinterpret_cast(&dhl), sizeof(dhl))); -} - -void drawFastVLine(int32_t x, int32_t y, int32_t h, uint16_t color) -{ - drawHVLine_msg dvl = { static_cast(x), static_cast(y), static_cast(h), color }; - sendDrawMsg(msg_type::drawVLine, std::string_view(reinterpret_cast(&dvl), sizeof(dvl))); -} - -void drawLine(int32_t xs, int32_t ys, int32_t xe, int32_t ye, uint16_t color) -{ - drawLine_msg dl = { static_cast(xs), static_cast(ys), static_cast(xe), static_cast(ye), color }; - sendDrawMsg(msg_type::drawLine, std::string_view(reinterpret_cast(&dl), sizeof(dl))); -} - -void drawPixel(int32_t x, int32_t y, uint16_t color) -{ - return; // won't support - drawPixel_msg dp = { static_cast(x), static_cast(y), color }; - sendDrawMsg(msg_type::drawPixel, std::string_view(reinterpret_cast(&dp), sizeof(dp))); -} - -void drawRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color) -{ - // same parameters as fillRect -> can use same struct - drawRect_msg dr = { static_cast(x), static_cast(y), static_cast(w), static_cast(h), static_cast(color) }; - sendDrawMsg(msg_type::drawRect, std::string_view(reinterpret_cast(&dr), sizeof(dr))); -} - -void drawRightString(std::string_view string, int32_t x, int32_t y, uint8_t font) -{ - drawGenericString(msg_type::drawRightString, string, x, y, font); -} - -void drawRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color) -{ - drawRoundRect_msg drr = { - static_cast(x), static_cast(y), static_cast(w), static_cast(h), - static_cast(radius), static_cast(color) - }; - sendDrawMsg(msg_type::drawRoundRect, std::string_view(reinterpret_cast(&drr), sizeof(drr))); -} - -void drawString(std::string_view string, int32_t poX, int32_t poY, uint8_t font) -{ - drawGenericString(msg_type::drawString, string, poX, poY, font); -} - -void drawSunkenRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color0, uint32_t color1, uint32_t color2) -{ - drawSunkenRect_msg dsr = { - static_cast(x), static_cast(y), static_cast(w), static_cast(h), - static_cast(color0), static_cast(color1), static_cast(color2) - }; - sendDrawMsg(msg_type::drawSunkenRect, std::string_view(reinterpret_cast(&dsr), sizeof(dsr))); -} - -void drawTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color) -{ - drawTriangle_msg dt = { - static_cast(x1), static_cast(y1), static_cast(x2), static_cast(y2), static_cast(x3), static_cast(y3), - static_cast(color) - }; - sendDrawMsg(msg_type::drawTriangle, std::string_view(reinterpret_cast(&dt), sizeof(dt))); -} - - -void fillCircle(int32_t x, int32_t y, int32_t r, uint32_t color) -{ - drawCircle_msg fcirc = { static_cast(x), static_cast(y), static_cast(r), static_cast(color) }; - sendDrawMsg(msg_type::fillCircle, std::string_view(reinterpret_cast(&fcirc), sizeof(fcirc))); -} - -void fillEllipse(int16_t x, int16_t y, int32_t rx, int32_t ry, uint16_t color) -{ - drawEllipse_msg fellip = { static_cast(x), static_cast(y), static_cast(rx), static_cast(ry), static_cast(color) }; - sendDrawMsg(msg_type::fillEllipse, std::string_view(reinterpret_cast(&fellip), sizeof(fellip))); -} - -void fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t color) -{ - drawRect_msg fr = { static_cast(x), static_cast(y), static_cast(w), static_cast(h), color }; - sendDrawMsg(msg_type::fillRect, std::string_view(reinterpret_cast(&fr), sizeof(fr))); -} - -void fillRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color) -{ - drawRoundRect_msg frr = { - static_cast(x), static_cast(y), static_cast(w), static_cast(h), - static_cast(radius), static_cast(color) - }; - sendDrawMsg(msg_type::fillRoundRect, std::string_view(reinterpret_cast(&frr), sizeof(frr))); -} - -void fillScreen(uint32_t color) -{ - auto fs = static_cast(color); - sendDrawMsg(msg_type::fillScreen, std::string_view(reinterpret_cast(&fs), sizeof(fs))); -} - -void fillTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color) -{ - drawTriangle_msg ft = { - static_cast(x1), static_cast(y1), static_cast(x2), static_cast(y2), static_cast(x3), static_cast(y3), - static_cast(color) - }; - sendDrawMsg(msg_type::fillTriangle, std::string_view(reinterpret_cast(&ft), sizeof(ft))); -} - -} // namespace remotedisplay From 72c1e959a1d8881a12892b59965be52d0b1e1347 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 28 Aug 2022 23:33:10 +0200 Subject: [PATCH 38/38] Fixed ledstrip direction --- config_seatbot.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config_seatbot.cmake b/config_seatbot.cmake index bc47aeb..8834602 100644 --- a/config_seatbot.cmake +++ b/config_seatbot.cmake @@ -46,7 +46,7 @@ set(BOBBYCAR_BUILDFLAGS -DFEATURE_LEDBACKLIGHT -DLEDBACKLIGHT_INVERTED -# -DLEDSTRIP_WRONG_DIRECTION + -DLEDSTRIP_WRONG_DIRECTION -DHEAP_LRGST_CRASH_TEXT_FIX # Default values