From 7608ba0abf53fbebb48251c9f190beb7c6313135 Mon Sep 17 00:00:00 2001 From: Alexey Zholtikov Date: Sat, 18 Jan 2025 12:50:25 +0300 Subject: [PATCH] Version 1.2.0 Added function to get ESP-NOW version. Minor main code refactoring. --- README.md | 1 + include/zh_espnow.h | 8 ++++++++ version.txt | 2 +- zh_espnow.c | 38 ++++++++++++++++++++++++++------------ 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 4ee8e04..b62e92c 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,7 @@ void app_main(void) strcpy(send_message.char_value, "THIS IS A CHAR"); send_message.float_value = 1.234; send_message.bool_value = false; + printf("Used ESP-NOW version %d.\n", zh_espnow_get_version()); for (;;) { send_message.int_value = esp_random(); diff --git a/include/zh_espnow.h b/include/zh_espnow.h index 07a9399..6aab7ab 100644 --- a/include/zh_espnow.h +++ b/include/zh_espnow.h @@ -104,6 +104,14 @@ extern "C" */ esp_err_t zh_espnow_send(const uint8_t *target, const uint8_t *data, const uint8_t data_len); + /** + * @brief Get ESP-NOW version. + * + * @return + * - ESP-NOW version + */ + uint8_t zh_espnow_get_version(void); + #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/version.txt b/version.txt index 1cc5f65..867e524 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.1.0 \ No newline at end of file +1.2.0 \ No newline at end of file diff --git a/zh_espnow.c b/zh_espnow.c index 5e612c2..d30faac 100755 --- a/zh_espnow.c +++ b/zh_espnow.c @@ -81,7 +81,7 @@ esp_err_t zh_espnow_init(const zh_espnow_init_config_t *config) ESP_LOGE(TAG, "ESP-NOW initialization fail. Internal error at line %d.", __LINE__); return ESP_FAIL; } - if (xTaskCreatePinnedToCore(&_processing, "NULL", _init_config.stack_size, NULL, _init_config.task_priority, &_processing_task_handle, tskNO_AFFINITY) != pdPASS) + if (xTaskCreatePinnedToCore(&_processing, "zh_espnow_processing", _init_config.stack_size, NULL, _init_config.task_priority, &_processing_task_handle, tskNO_AFFINITY) != pdPASS) { ESP_LOGE(TAG, "ESP-NOW initialization fail. Internal error at line %d.", __LINE__); return ESP_FAIL; @@ -154,6 +154,11 @@ esp_err_t zh_espnow_send(const uint8_t *target, const uint8_t *data, const uint8 } memcpy(queue.data.payload, data, data_len); queue.data.payload_len = data_len; + if (xQueueSend(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE) + { + ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__); + return ESP_FAIL; + } if (target == NULL) { ESP_LOGI(TAG, "Adding outgoing ESP-NOW data to MAC FF:FF:FF:FF:FF:FF to queue success."); @@ -162,11 +167,6 @@ esp_err_t zh_espnow_send(const uint8_t *target, const uint8_t *data, const uint8 { ESP_LOGI(TAG, "Adding outgoing ESP-NOW data to MAC %02X:%02X:%02X:%02X:%02X:%02X to queue success.", MAC2STR(target)); } - if (xQueueSend(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE) - { - ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__); - return ESP_FAIL; - } return ESP_OK; } @@ -213,15 +213,16 @@ static void IRAM_ATTR _recv_cb(const esp_now_recv_info_t *esp_now_info, const ui } memcpy(queue.data.payload, data, data_len); queue.data.payload_len = data_len; + if (xQueueSend(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE) + { + ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__); + return; + } #if defined CONFIG_IDF_TARGET_ESP8266 || ESP_IDF_VERSION_MAJOR == 4 ESP_LOGI(TAG, "Adding incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to queue success.", MAC2STR(mac_addr)); #else ESP_LOGI(TAG, "Adding incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to queue success.", MAC2STR(esp_now_info->src_addr)); #endif - if (xQueueSend(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE) - { - ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__); - } } static void IRAM_ATTR _processing(void *pvParameter) @@ -309,11 +310,14 @@ static void IRAM_ATTR _processing(void *pvParameter) on_send->status = ZH_ESPNOW_SEND_FAIL; _attempts = 0; } - ESP_LOGI(TAG, "Outgoing ESP-NOW data to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.mac_addr)); if (esp_event_post(ZH_ESPNOW, ZH_ESPNOW_ON_SEND_EVENT, on_send, sizeof(zh_espnow_event_on_send_t), portTICK_PERIOD_MS) != ESP_OK) { ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__); } + else + { + ESP_LOGI(TAG, "Outgoing ESP-NOW data to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.mac_addr)); + } heap_caps_free(queue.data.payload); esp_now_del_peer(peer->peer_addr); heap_caps_free(peer); @@ -322,15 +326,25 @@ static void IRAM_ATTR _processing(void *pvParameter) case ON_RECV: ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X processing begin.", MAC2STR(queue.data.mac_addr)); zh_espnow_event_on_recv_t *recv_data = (zh_espnow_event_on_recv_t *)&queue.data; - ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.mac_addr)); if (esp_event_post(ZH_ESPNOW, ZH_ESPNOW_ON_RECV_EVENT, recv_data, recv_data->data_len + sizeof(recv_data->mac_addr) + sizeof(uint8_t), portTICK_PERIOD_MS) != ESP_OK) { ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__); } + else + { + ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.mac_addr)); + } break; default: break; } } vTaskDelete(NULL); +} + +uint8_t zh_espnow_get_version(void) +{ + uint32_t version = 0; + esp_now_get_version(&version); + return version; } \ No newline at end of file