Version 1.2.0

Added function to get ESP-NOW version.
Minor main code refactoring.
This commit is contained in:
Alexey Zholtikov 2025-01-18 12:50:25 +03:00
parent 83cebd5677
commit 7608ba0abf
4 changed files with 36 additions and 13 deletions

View File

@ -86,6 +86,7 @@ void app_main(void)
strcpy(send_message.char_value, "THIS IS A CHAR"); strcpy(send_message.char_value, "THIS IS A CHAR");
send_message.float_value = 1.234; send_message.float_value = 1.234;
send_message.bool_value = false; send_message.bool_value = false;
printf("Used ESP-NOW version %d.\n", zh_espnow_get_version());
for (;;) for (;;)
{ {
send_message.int_value = esp_random(); send_message.int_value = esp_random();

View File

@ -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); 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 #ifdef __cplusplus
} }
#endif #endif

View File

@ -1 +1 @@
1.1.0 1.2.0

View File

@ -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__); ESP_LOGE(TAG, "ESP-NOW initialization fail. Internal error at line %d.", __LINE__);
return ESP_FAIL; 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__); ESP_LOGE(TAG, "ESP-NOW initialization fail. Internal error at line %d.", __LINE__);
return ESP_FAIL; 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); memcpy(queue.data.payload, data, data_len);
queue.data.payload_len = 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) if (target == NULL)
{ {
ESP_LOGI(TAG, "Adding outgoing ESP-NOW data to MAC FF:FF:FF:FF:FF:FF to queue success."); 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)); 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; 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); memcpy(queue.data.payload, data, data_len);
queue.data.payload_len = 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 #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)); ESP_LOGI(TAG, "Adding incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to queue success.", MAC2STR(mac_addr));
#else #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)); 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 #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) 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; on_send->status = ZH_ESPNOW_SEND_FAIL;
_attempts = 0; _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) 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__); 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); heap_caps_free(queue.data.payload);
esp_now_del_peer(peer->peer_addr); esp_now_del_peer(peer->peer_addr);
heap_caps_free(peer); heap_caps_free(peer);
@ -322,11 +326,14 @@ static void IRAM_ATTR _processing(void *pvParameter)
case ON_RECV: 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)); 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; 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) 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__); 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; break;
default: default:
break; break;
@ -334,3 +341,10 @@ static void IRAM_ATTR _processing(void *pvParameter)
} }
vTaskDelete(NULL); vTaskDelete(NULL);
} }
uint8_t zh_espnow_get_version(void)
{
uint32_t version = 0;
esp_now_get_version(&version);
return version;
}