From 93556a00fe92d378fdbe8ad585c64bf4293a5ef0 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sat, 18 Dec 2021 00:10:58 +0100 Subject: [PATCH] =?UTF-8?q?Schei=C3=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config_comred.cmake | 1 + config_feedc0de.cmake | 3 +++ main/espnowfunctions.cpp | 27 +++++++++++++-------------- main/espnowfunctions.h | 14 ++++++++------ 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/config_comred.cmake b/config_comred.cmake index 75835e5..212d602 100644 --- a/config_comred.cmake +++ b/config_comred.cmake @@ -118,6 +118,7 @@ set(BOBBYCAR_BUILDFLAGS -DOLD_NVS -DFEATURE_DNS_NS -DSWITCH_BLINK +# -DFEATURE_IS_MIR_EGAL_OB_DER_WEBSERVER_FUNKTIONIERT -DFEATURE_ESPNOW ) diff --git a/config_feedc0de.cmake b/config_feedc0de.cmake index 7897f01..27c9c97 100644 --- a/config_feedc0de.cmake +++ b/config_feedc0de.cmake @@ -92,10 +92,13 @@ set(BOBBYCAR_BUILDFLAGS -DFEATURE_LEDSTRIP -DPINS_LEDSTRIP=26 -DLEDSTRIP_LENGTH=200 +# -DHEAP_LRGST_CRASH_TEXT_FIX # -DLEDSTRIP_WRONG_DIRECTION -DLEDSTRIP_ANIMATION_DEFAULT=0 -DLEDS_PER_METER=144 -DOLD_NVS # -DFEATURE_DNS_NS +# -DSWITCH_BLINK -DFEATURE_IS_MIR_EGAL_OB_DER_WEBSERVER_FUNKTIONIERT + -DFEATURE_ESPNOW ) diff --git a/main/espnowfunctions.cpp b/main/espnowfunctions.cpp index c96b188..bca6bd8 100644 --- a/main/espnowfunctions.cpp +++ b/main/espnowfunctions.cpp @@ -20,33 +20,32 @@ constexpr const char * const TAG = "BOBBY_ESP_NOW"; uint16_t lastYear; // Used for esp-now timesync std::deque message_queue{}; -std::list peers{}; +std::vector peers{}; uint8_t initialized{0}; bool receiveTimeStamp{true}; bool receiveTsFromOtherBobbycars{true}; -void onReceive(const uint8_t *mac_addr, const uint8_t *data, int data_len) +extern "C" void onReceive(const uint8_t *mac_addr, const char *data, int data_len) { ESP_LOGD(TAG, "Received data"); - const std::string data_str(data, data+data_len); + const std::string_view data_str{data, size_t(data_len)}; size_t sep_pos = data_str.find(":"); - if (std::string::npos != sep_pos) + if (std::string_view::npos != sep_pos) { - std::string msg_type = data_str.substr(0, sep_pos); - std::string msg = data_str.substr(sep_pos+1, data_str.length()-3); // - 3 may needs to be converted to sep_pos+1 - ESP_LOGD(TAG, "Type: %s - Message: %s", msg_type.c_str(), msg.c_str()); + std::string_view msg_type = data_str.substr(0, sep_pos); + std::string_view msg = data_str.substr(sep_pos+1, data_str.length()-3); // - 3 may needs to be converted to sep_pos+1 + ESP_LOGD(TAG, "Type: %.*s - Message: %.*s", msg_type.size(), msg_type.data(), msg.size(), msg.data()); - const esp_now_message_t message{ - .content = msg, - .type = msg_type - }; - message_queue.push_back(message); + message_queue.push_back(esp_now_message_t { + .content = std::string{msg}, + .type = std::string{msg_type} + }); } else { - ESP_LOGW(TAG, "Invalid message: Could not find ':' (%s)", data_str.c_str()); + ESP_LOGW(TAG, "Invalid message: Could not find ':' (%.*s)", data_str.size(), data_str.data()); } } @@ -245,7 +244,7 @@ void onRecvTs(uint64_t millis, bool isFromBobbycar) receiveTsFromOtherBobbycars = false; } -esp_err_t send_espnow_message(std::string message) +esp_err_t send_espnow_message(std::string_view message) { if (initialized < 255) return ESP_ERR_ESPNOW_NOT_INIT; diff --git a/main/espnowfunctions.h b/main/espnowfunctions.h index 988900a..3f5203c 100644 --- a/main/espnowfunctions.h +++ b/main/espnowfunctions.h @@ -3,27 +3,29 @@ #include #include #include -#include +#include +#include #include namespace espnow { extern uint16_t lastYear; constexpr const uint8_t broadcast_address[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; -struct esp_now_message_t { - const std::string content; - const std::string type; +struct esp_now_message_t +{ + std::string content; + std::string type; }; extern bool receiveTimeStamp; extern bool receiveTsFromOtherBobbycars; extern std::deque message_queue; -extern std::list peers; +extern std::vector peers; void onReceive(const uint8_t *mac_addr, const uint8_t *data, int data_len); void initESPNow(); void handle(); void onRecvTs(uint64_t millis, bool isFromBobbycar = false); -esp_err_t send_espnow_message(std::string message); +esp_err_t send_espnow_message(std::string_view message); } // namespace espnow #endif