diff --git a/include/zh_espnow.h b/include/zh_espnow.h index 672bf81..cc51f15 100644 --- a/include/zh_espnow.h +++ b/include/zh_espnow.h @@ -187,6 +187,18 @@ extern "C" */ esp_err_t zh_espnow_get_mac(uint8_t *mac_addr); + /** + * @brief Get the number of available places in the queue. + * + * @return Number of available places. + */ + uint8_t zh_espnow_get_queue_space(void); + + /** + * @brief Clean up the message queue. + */ + void zh_espnow_clear_queue(void); + #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/version.txt b/version.txt index 9dbb0c0..afa2b35 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.7.0 \ No newline at end of file +1.8.0 \ No newline at end of file diff --git a/zh_espnow.c b/zh_espnow.c index 91fa574..c693c12 100755 --- a/zh_espnow.c +++ b/zh_espnow.c @@ -272,7 +272,7 @@ static esp_err_t _zh_espnow_init_resources(const zh_espnow_init_config_t *config _event_group_handle = xEventGroupCreate(); ZH_ESPNOW_CHECK(_event_group_handle != NULL, ESP_FAIL, "Event group creation failed."); _queue_handle = xQueueCreate(config->queue_size, sizeof(_queue_t)); - ZH_ESPNOW_CHECK(_queue_handle != 0, ESP_FAIL, "Queue creation failed."); + ZH_ESPNOW_CHECK(_queue_handle != NULL, ESP_FAIL, "Queue creation failed."); return ESP_OK; } @@ -597,4 +597,29 @@ esp_err_t zh_espnow_set_battery_mode(bool battery_mode) esp_err_t zh_espnow_get_mac(uint8_t *mac_addr) { return esp_wifi_get_mac(_init_config.wifi_interface, mac_addr); +} + +uint8_t zh_espnow_get_queue_space(void) +{ + if (_queue_handle == NULL) + { + return 0; + } + return uxQueueSpacesAvailable(_queue_handle); +} + +void zh_espnow_clear_queue(void) +{ + if (_queue_handle != NULL) + { + _queue_t queue = {0}; + while (xQueueReceive(_queue_handle, &queue, 0) == pdTRUE) + { + if (queue.data.payload != NULL) + { + heap_caps_free(queue.data.payload); + } + } + ZH_ESPNOW_LOGI("Queue clear completed successfully."); + } } \ No newline at end of file