diff --git a/components/zh_network/README.md b/components/zh_network/README.md index 00c151d..ef5ebee 100644 --- a/components/zh_network/README.md +++ b/components/zh_network/README.md @@ -21,9 +21,8 @@ ## Attention 1. The definition of ZH_NETWORK_MAX_MESSAGE_SIZE in the zh_network.h can be changed between 1 and 218. Smaller size - higher transmission speed. All devices on the network must have the same ZH_NETWORK_MAX_MESSAGE_SIZE. -2. For correct operation in ESP-NOW + STA mode, your WiFi router must be set to the same channel as ESP-NOW. -3. All devices on the network must have the same WiFi channel. -4. The ZHNetwork and the zh_network are incompatible. +2. For correct work at ESP-NOW + STA mode your WiFi router must be set on channel 1. +3. The ZHNetwork and the zh_network are incompatible. ## Testing @@ -85,7 +84,7 @@ typedef struct void app_main(void) { esp_log_level_set("zh_vector", ESP_LOG_NONE); - // esp_log_level_set("zh_network", ESP_LOG_NONE); + esp_log_level_set("zh_network", ESP_LOG_NONE); nvs_flash_init(); esp_netif_init(); esp_event_loop_create_default(); diff --git a/components/zh_network/include/zh_network.h b/components/zh_network/include/zh_network.h index 689c293..55c07ee 100644 --- a/components/zh_network/include/zh_network.h +++ b/components/zh_network/include/zh_network.h @@ -35,7 +35,6 @@ * @note Value range from 1 to 218. Smaller size - higher transmission speed. * * @attention All devices on the network must have the same ZH_NETWORK_MAX_MESSAGE_SIZE. - * */ #define ZH_NETWORK_MAX_MESSAGE_SIZE 218 @@ -52,8 +51,7 @@ .max_waiting_time = 1000, \ .id_vector_size = 100, \ .route_vector_size = 100, \ - .wifi_interface = WIFI_IF_STA, \ - .wifi_channel = 1 \ + .wifi_interface = WIFI_IF_STA \ } #ifdef __cplusplus @@ -66,9 +64,7 @@ extern "C" * * @note Before initialize ESP-NOW interface recommend initialize zh_network_init_config_t structure with default values. * - * @code - * zh_network_init_config_t config = ZH_NETWORK_INIT_CONFIG_DEFAULT() - * @endcode + * @code zh_network_init_config_t config = ZH_NETWORK_INIT_CONFIG_DEFAULT() @endcode */ typedef struct { @@ -80,8 +76,7 @@ extern "C" uint16_t id_vector_size; ///< Maximum size of unique ID of received messages. @note If the size is exceeded, the first value will be deleted. Minimum recommended value: number of planned nodes in the network + 10%. uint16_t route_vector_size; ///< The maximum size of the routing table. @note If the size is exceeded, the first route will be deleted. Minimum recommended value: number of planned nodes in the network + 10%. wifi_interface_t wifi_interface; ///< WiFi interface (STA or AP) used for ESP-NOW operation. @note The MAC address of the device depends on the selected WiFi interface. - uint8_t wifi_channel; ///< Wi-Fi channel uses to send/receive ESPNOW data. @note Values from 1 to 14. - } __attribute__((packed)) zh_network_init_config_t; + } zh_network_init_config_t; /// \cond ESP_EVENT_DECLARE_BASE(ESP_EVENT_BASE); @@ -95,7 +90,7 @@ extern "C" { ZH_NETWORK_ON_RECV_EVENT, ///< The event when the ESP-NOW message was received. ZH_NETWORK_ON_SEND_EVENT ///< The event when the ESP-NOW message was sent. - } __attribute__((packed)) zh_network_event_type_t; + } zh_network_event_type_t; /** * @brief Enumeration of possible status of sent ESP-NOW message. @@ -105,19 +100,18 @@ extern "C" { ZH_NETWORK_SEND_SUCCESS, ///< If ESP-NOW message was sent success. ZH_NETWORK_SEND_FAIL ///< If ESP-NOW message was sent fail. - } __attribute__((packed)) zh_network_on_send_event_type_t; + } zh_network_on_send_event_type_t; /** * @brief Structure for sending data to the event handler when an ESP-NOW message was sent. * * @note Should be used with ZH_NETWORK event base and ZH_NETWORK_ON_SEND_EVENT event. - * */ typedef struct { uint8_t mac_addr[6]; ///< MAC address of the device to which the ESP-NOW message was sent. @note zh_network_on_send_event_type_t status; ///< Status of sent ESP-NOW message. @note - } __attribute__((packed)) zh_network_event_on_send_t; + } zh_network_event_on_send_t; /** * @brief Structure for sending data to the event handler when an ESP-NOW message was received. @@ -129,18 +123,16 @@ extern "C" uint8_t mac_addr[6]; ///< MAC address of the sender ESP-NOW message. @note uint8_t *data; ///< Pointer to the data of the received ESP-NOW message. @note uint8_t data_len; ///< Size of the received ESP-NOW message. @note - } __attribute__((packed)) zh_network_event_on_recv_t; + } zh_network_event_on_recv_t; /** - * @brief Initialize ESP-NOW interface. + * @brief Initialize ESP-NOW interface. * - * @note Before initialize ESP-NOW interface recommend initialize zh_network_init_config_t structure with default values. + * @note Before initialize ESP-NOW interface recommend initialize zh_network_init_config_t structure with default values. * - * @code - * zh_network_init_config_t config = ZH_NETWORK_INIT_CONFIG_DEFAULT() - * @endcode + * @code zh_network_init_config_t config = ZH_NETWORK_INIT_CONFIG_DEFAULT() @endcode * - * @param[in] config Pointer to ESP-NOW initialized configuration structure. Can point to a temporary variable. + * @param[in] config Pointer to ESP-NOW initialized configuration structure. Can point to a temporary variable. * * @return * - ESP_OK if initialization was success @@ -148,10 +140,10 @@ extern "C" * - ESP_ERR_WIFI_NOT_INIT if WiFi is not initialized * - ESP_FAIL if any internal error */ - esp_err_t zh_network_init(const zh_network_init_config_t *config); + esp_err_t zh_network_init(zh_network_init_config_t *config); /** - * @brief Deinitialize ESP-NOW interface. + * @brief Deinitialize ESP-NOW interface. * * @return * - ESP_OK if deinitialization was success @@ -160,11 +152,11 @@ extern "C" esp_err_t zh_network_deinit(void); /** - * @brief Send ESP-NOW data. + * @brief Send ESP-NOW data. * - * @param[in] target Pointer to a buffer containing an eight-byte target MAC. Can be NULL for broadcast. - * @param[in] data Pointer to a buffer containing the data for send. - * @param[in] data_len Sending data length. + * @param[in] target Pointer to a buffer containing an eight-byte target MAC. Can be NULL for broadcast. + * @param[in] data Pointer to a buffer containing the data for send. + * @param[in] data_len Sending data length. * * @note The function will return an ESP_ERR_INVALID_STATE error if less than 50% of the size set at initialization remains in the message queue. * @@ -172,7 +164,7 @@ extern "C" * - ESP_OK if sent was success * - ESP_ERR_INVALID_ARG if parameter error * - ESP_ERR_INVALID_STATE if queue for outgoing data is almost full - * - ESP_FAIL if ESP-NOW is not initialized or any internal error + * - ESP_FAIL if ESP-NOW is not initialized */ esp_err_t zh_network_send(const uint8_t *target, const uint8_t *data, const uint8_t data_len); diff --git a/components/zh_network/version.txt b/components/zh_network/version.txt index e1df5de..afaf360 100644 --- a/components/zh_network/version.txt +++ b/components/zh_network/version.txt @@ -1 +1 @@ -1.4.4 \ No newline at end of file +1.0.0 \ No newline at end of file diff --git a/components/zh_network/zh_network.c b/components/zh_network/zh_network.c index 685eb33..3d16451 100644 --- a/components/zh_network/zh_network.c +++ b/components/zh_network/zh_network.c @@ -21,7 +21,7 @@ static void _processing(void *pvParameter); static const char *TAG = "zh_network"; -static EventGroupHandle_t _event_group_handle = {0}; +static EventGroupHandle_t _send_cb_status_event_group_handle = {0}; static QueueHandle_t _queue_handle = {0}; static TaskHandle_t _processing_task_handle = {0}; static SemaphoreHandle_t _id_vector_mutex = {0}; @@ -34,47 +34,53 @@ static const uint8_t _broadcast_mac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; static bool _is_initialized = false; /// \cond +typedef enum +{ + BROADCAST, + UNICAST, + DELIVERY_CONFIRM, + SEARCH_REQUEST, + SEARCH_RESPONSE +} message_type_t; + +typedef struct +{ + message_type_t message_type; + uint32_t network_id; + uint32_t message_id; + uint32_t confirm_id; + uint8_t original_target_mac[6]; + uint8_t original_sender_mac[6]; + uint8_t sender_mac[6]; + uint8_t data[ZH_NETWORK_MAX_MESSAGE_SIZE]; + uint8_t data_len; +} data_t; + typedef struct { uint8_t original_target_mac[6]; uint8_t intermediate_target_mac[6]; -} __attribute__((packed)) _routing_table_t; +} routing_table_t; + +typedef enum +{ + TO_SEND, + ON_RECV, + WAIT_ROUTE, + WAIT_RESPONSE, +} queue_id_t; typedef struct { + queue_id_t id; uint64_t time; - enum - { - TO_SEND, - ON_RECV, - WAIT_ROUTE, - WAIT_RESPONSE, - } id; - struct - { - enum - { - BROADCAST, - UNICAST, - DELIVERY_CONFIRM, - SEARCH_REQUEST, - SEARCH_RESPONSE - } message_type; - uint32_t network_id; - uint32_t message_id; - uint32_t confirm_id; - uint8_t original_target_mac[6]; - uint8_t original_sender_mac[6]; - uint8_t sender_mac[6]; - uint8_t payload[ZH_NETWORK_MAX_MESSAGE_SIZE]; - uint8_t payload_len; - } data; -} __attribute__((packed)) _queue_t; + data_t data; +} queue_t; ESP_EVENT_DEFINE_BASE(ZH_NETWORK); /// \endcond -esp_err_t zh_network_init(const zh_network_init_config_t *config) +esp_err_t zh_network_init(zh_network_init_config_t *config) { ESP_LOGI(TAG, "ESP-NOW initialization begin."); if (config == NULL) @@ -82,18 +88,12 @@ esp_err_t zh_network_init(const zh_network_init_config_t *config) ESP_LOGE(TAG, "ESP-NOW initialization fail. Invalid argument."); return ESP_ERR_INVALID_ARG; } - _init_config = *config; - if (_init_config.wifi_channel < 1 || _init_config.wifi_channel > 14) - { - ESP_LOGE(TAG, "ESP-NOW initialization fail. WiFi channel."); - return ESP_ERR_INVALID_ARG; - } - if (esp_wifi_set_channel(_init_config.wifi_channel, WIFI_SECOND_CHAN_NONE) == ESP_ERR_WIFI_NOT_INIT) + if (esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE) == ESP_ERR_WIFI_NOT_INIT) { ESP_LOGE(TAG, "ESP-NOW initialization fail. WiFi not initialized."); return ESP_ERR_WIFI_NOT_INIT; } - if ((sizeof(_queue_t) - 12) > ESP_NOW_MAX_DATA_LEN) + if (sizeof(data_t) > ESP_NOW_MAX_DATA_LEN) { ESP_LOGE(TAG, "ESP-NOW initialization fail. The maximum value of the transmitted data size is incorrect."); return ESP_ERR_INVALID_ARG; @@ -106,10 +106,11 @@ esp_err_t zh_network_init(const zh_network_init_config_t *config) { esp_read_mac(_self_mac, ESP_MAC_WIFI_SOFTAP); } - _event_group_handle = xEventGroupCreate(); - _queue_handle = xQueueCreate(_init_config.queue_size, sizeof(_queue_t)); + _init_config = *config; + _send_cb_status_event_group_handle = xEventGroupCreate(); + _queue_handle = xQueueCreate(_init_config.queue_size, sizeof(queue_t)); zh_vector_init(&_id_vector, sizeof(uint32_t), false); - zh_vector_init(&_route_vector, sizeof(_routing_table_t), false); + zh_vector_init(&_route_vector, sizeof(routing_table_t), false); zh_vector_init(&_response_vector, sizeof(uint32_t), false); _id_vector_mutex = xSemaphoreCreateMutex(); if (esp_now_init() != ESP_OK || esp_now_register_send_cb(_send_cb) != ESP_OK || esp_now_register_recv_cb(_recv_cb) != ESP_OK) @@ -135,7 +136,7 @@ esp_err_t zh_network_deinit(void) ESP_LOGE(TAG, "ESP-NOW deinitialization fail. ESP-NOW not initialized."); return ESP_FAIL; } - vEventGroupDelete(_event_group_handle); + vEventGroupDelete(_send_cb_status_event_group_handle); vQueueDelete(_queue_handle); esp_now_unregister_send_cb(); esp_now_unregister_recv_cb(); @@ -174,31 +175,32 @@ esp_err_t zh_network_send(const uint8_t *target, const uint8_t *data, const uint ESP_LOGW(TAG, "Adding outgoing ESP-NOW data to queue fail. Queue is almost full."); return ESP_ERR_INVALID_STATE; } - _queue_t queue = {0}; + queue_t queue = {0}; queue.id = TO_SEND; - queue.data.network_id = _init_config.network_id; - queue.data.message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. - memcpy(queue.data.original_sender_mac, _self_mac, 6); + data_t *send_data = &queue.data; + send_data->network_id = _init_config.network_id; + send_data->message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. + memcpy(send_data->original_sender_mac, &_self_mac, 6); if (target == NULL) { - queue.data.message_type = BROADCAST; - memcpy(queue.data.original_target_mac, _broadcast_mac, 6); + send_data->message_type = BROADCAST; + memcpy(send_data->original_target_mac, &_broadcast_mac, 6); } else { - if (memcmp(target, _broadcast_mac, 6) != 0) + if (memcmp(target, &_broadcast_mac, 6) != 0) { - queue.data.message_type = UNICAST; - memcpy(queue.data.original_target_mac, target, 6); + send_data->message_type = UNICAST; + memcpy(send_data->original_target_mac, target, 6); } else { - queue.data.message_type = BROADCAST; - memcpy(queue.data.original_target_mac, _broadcast_mac, 6); + send_data->message_type = BROADCAST; + memcpy(send_data->original_target_mac, &_broadcast_mac, 6); } } - memcpy(queue.data.payload, data, data_len); - queue.data.payload_len = data_len; + memcpy(&send_data->data, data, data_len); + send_data->data_len = data_len; if (target == NULL) { ESP_LOGI(TAG, "Adding outgoing ESP-NOW data to MAC FF:FF:FF:FF:FF:FF to queue success."); @@ -210,7 +212,6 @@ esp_err_t zh_network_send(const uint8_t *target, const uint8_t *data, const uint if (xQueueSend(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE) { ESP_LOGE(TAG, "ESP-NOW message processing task internal error."); - return ESP_FAIL; } return ESP_OK; } @@ -219,11 +220,11 @@ static void _send_cb(const uint8_t *mac_addr, esp_now_send_status_t status) { if (status == ESP_NOW_SEND_SUCCESS) { - xEventGroupSetBits(_event_group_handle, DATA_SEND_SUCCESS); + xEventGroupSetBits(_send_cb_status_event_group_handle, DATA_SEND_SUCCESS); } else { - xEventGroupSetBits(_event_group_handle, DATA_SEND_FAIL); + xEventGroupSetBits(_send_cb_status_event_group_handle, DATA_SEND_FAIL); } } @@ -243,12 +244,10 @@ static void _recv_cb(const esp_now_recv_info_t *esp_now_info, const uint8_t *dat ESP_LOGW(TAG, "Adding incoming ESP-NOW data to queue fail. Queue is almost full."); return; } - if (data_len == sizeof(_queue_t) - 12) + if (data_len == sizeof(data_t)) { - _queue_t queue = {0}; - queue.id = ON_RECV; - memcpy(&queue.data, data, data_len); - if (memcmp(&queue.data.network_id, &_init_config.network_id, sizeof(queue.data.network_id)) != 0) + data_t *recv_data = (data_t *)data; + if (memcmp(&recv_data->network_id, &_init_config.network_id, sizeof(recv_data->network_id)) != 0) { ESP_LOGW(TAG, "Adding incoming ESP-NOW data to queue fail. Incorrect mesh network ID."); return; @@ -256,7 +255,7 @@ static void _recv_cb(const esp_now_recv_info_t *esp_now_info, const uint8_t *dat for (uint16_t i = 0; i < zh_vector_get_size(&_id_vector); ++i) { uint32_t *message_id = zh_vector_get_item(&_id_vector, i); - if (memcmp(&queue.data.message_id, message_id, sizeof(queue.data.message_id)) == 0) + if (memcmp(&recv_data->message_id, message_id, sizeof(recv_data->message_id)) == 0) { ESP_LOGW(TAG, "Adding incoming ESP-NOW data to queue fail. Repeat message received."); return; @@ -264,17 +263,21 @@ static void _recv_cb(const esp_now_recv_info_t *esp_now_info, const uint8_t *dat } if (xSemaphoreTake(_id_vector_mutex, portTICK_PERIOD_MS) == pdTRUE) { - zh_vector_push_back(&_id_vector, &queue.data.message_id); + zh_vector_push_back(&_id_vector, &recv_data->message_id); if (zh_vector_get_size(&_id_vector) > _init_config.id_vector_size) { zh_vector_delete_item(&_id_vector, 0); } xSemaphoreGive(_id_vector_mutex); } + queue_t queue = {0}; + queue.id = ON_RECV; + recv_data = &queue.data; + memcpy(recv_data, data, data_len); #ifdef CONFIG_IDF_TARGET_ESP8266 - memcpy(queue.data.sender_mac, mac_addr, 6); + memcpy(recv_data->sender_mac, mac_addr, 6); #else - memcpy(queue.data.sender_mac, esp_now_info->src_addr, 6); + memcpy(recv_data->sender_mac, esp_now_info->src_addr, 6); #endif #ifdef CONFIG_IDF_TARGET_ESP8266 ESP_LOGI(TAG, "Adding incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to queue success.", MAC2STR(mac_addr)); @@ -294,10 +297,11 @@ static void _recv_cb(const esp_now_recv_info_t *esp_now_info, const uint8_t *dat static void _processing(void *pvParameter) { - _queue_t queue = {0}; + queue_t queue = {0}; while (xQueueReceive(_queue_handle, &queue, portMAX_DELAY) == pdTRUE) { bool flag = false; + data_t *data = &queue.data; switch (queue.id) { case TO_SEND: @@ -311,14 +315,14 @@ static void _processing(void *pvParameter) } memset(peer, 0, sizeof(esp_now_peer_info_t)); peer->ifidx = _init_config.wifi_interface; - if (queue.data.message_type == BROADCAST || queue.data.message_type == SEARCH_REQUEST || queue.data.message_type == SEARCH_RESPONSE) + if (data->message_type == BROADCAST || data->message_type == SEARCH_REQUEST || data->message_type == SEARCH_RESPONSE) { - memcpy(peer->peer_addr, _broadcast_mac, 6); - if (memcmp(queue.data.original_sender_mac, _self_mac, 6) == 0) + memcpy(peer->peer_addr, &_broadcast_mac, 6); + if (memcmp(data->original_sender_mac, &_self_mac, 6) == 0) { if (xSemaphoreTake(_id_vector_mutex, portTICK_PERIOD_MS) == pdTRUE) { - zh_vector_push_back(&_id_vector, &queue.data.message_id); + zh_vector_push_back(&_id_vector, &data->message_id); if (zh_vector_get_size(&_id_vector) > _init_config.id_vector_size) { zh_vector_delete_item(&_id_vector, 0); @@ -332,8 +336,8 @@ static void _processing(void *pvParameter) ESP_LOGI(TAG, "Checking routing table to MAC %02X:%02X:%02X:%02X:%02X:%02X.", MAC2STR(queue.data.original_target_mac)); for (uint16_t i = 0; i < zh_vector_get_size(&_route_vector); ++i) { - _routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); - if (memcmp(queue.data.original_target_mac, routing_table->original_target_mac, 6) == 0) + routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); + if (memcmp(data->original_target_mac, routing_table->original_target_mac, 6) == 0) { memcpy(peer->peer_addr, routing_table->intermediate_target_mac, 6); flag = true; @@ -344,7 +348,7 @@ static void _processing(void *pvParameter) if (flag == false) { ESP_LOGI(TAG, "Routing to MAC %02X:%02X:%02X:%02X:%02X:%02X not found.", MAC2STR(queue.data.original_target_mac)); - if (queue.data.message_type == UNICAST) + if (data->message_type == UNICAST) { ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X transferred to routing waiting list.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } @@ -360,11 +364,11 @@ static void _processing(void *pvParameter) } ESP_LOGI(TAG, "System message for routing request from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X added to queue.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); queue.id = TO_SEND; - queue.data.message_type = SEARCH_REQUEST; - memcpy(queue.data.original_sender_mac, _self_mac, 6); - queue.data.payload_len = 0; - memset(queue.data.payload, 0, ZH_NETWORK_MAX_MESSAGE_SIZE); - queue.data.message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. + data->message_type = SEARCH_REQUEST; + memcpy(data->original_sender_mac, &_self_mac, 6); + data->data_len = 0; + memset(data->data, 0, ZH_NETWORK_MAX_MESSAGE_SIZE); + data->message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); if (xQueueSendToFront(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE) { @@ -389,20 +393,20 @@ static void _processing(void *pvParameter) break; } memset(on_send, 0, sizeof(zh_network_event_on_send_t)); - memcpy(on_send->mac_addr, queue.data.original_target_mac, 6); - if (esp_now_send((uint8_t *)peer->peer_addr, (uint8_t *)&queue.data, sizeof(_queue_t) - 12) != ESP_OK) + memcpy(on_send->mac_addr, data->original_target_mac, 6); + if (esp_now_send((uint8_t *)peer->peer_addr, (uint8_t *)data, sizeof(data_t)) != ESP_OK) { ESP_LOGE(TAG, "ESP-NOW message processing task internal error."); heap_caps_free(peer); heap_caps_free(on_send); break; } - EventBits_t bit = xEventGroupWaitBits(_event_group_handle, DATA_SEND_SUCCESS | DATA_SEND_FAIL, pdTRUE, pdFALSE, 50 / portTICK_PERIOD_MS); + EventBits_t bit = xEventGroupWaitBits(_send_cb_status_event_group_handle, DATA_SEND_SUCCESS | DATA_SEND_FAIL, pdTRUE, pdFALSE, 50 / portTICK_PERIOD_MS); if ((bit & DATA_SEND_SUCCESS) != 0) { - if (memcmp(queue.data.original_sender_mac, _self_mac, 6) == 0) + if (memcmp(data->original_sender_mac, &_self_mac, 6) == 0) { - if (queue.data.message_type == BROADCAST) + if (data->message_type == BROADCAST) { ESP_LOGI(TAG, "Broadcast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); on_send->status = ZH_NETWORK_SEND_SUCCESS; @@ -412,22 +416,22 @@ static void _processing(void *pvParameter) ESP_LOGE(TAG, "ESP-NOW message processing task internal error."); } } - if (queue.data.message_type == SEARCH_REQUEST) + if (data->message_type == SEARCH_REQUEST) { ESP_LOGI(TAG, "System message for routing request from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == SEARCH_RESPONSE) + if (data->message_type == SEARCH_RESPONSE) { ESP_LOGI(TAG, "System message for routing response from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == DELIVERY_CONFIRM) + if (data->message_type == DELIVERY_CONFIRM) { ESP_LOGI(TAG, "System message for message receiving confirmation from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X via MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac), MAC2STR(peer->peer_addr)); ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == UNICAST) + if (data->message_type == UNICAST) { ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X via MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac), MAC2STR(peer->peer_addr)); ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X transferred to confirmation message waiting list.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); @@ -442,27 +446,27 @@ static void _processing(void *pvParameter) } else { - if (queue.data.message_type == BROADCAST) + if (data->message_type == BROADCAST) { ESP_LOGI(TAG, "Broadcast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == SEARCH_REQUEST) + if (data->message_type == SEARCH_REQUEST) { ESP_LOGI(TAG, "System message for routing request from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == SEARCH_RESPONSE) + if (data->message_type == SEARCH_RESPONSE) { ESP_LOGI(TAG, "System message for routing response from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == DELIVERY_CONFIRM) + if (data->message_type == DELIVERY_CONFIRM) { ESP_LOGI(TAG, "System message for message receiving confirmation from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X via MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac), MAC2STR(peer->peer_addr)); ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == UNICAST) + if (data->message_type == UNICAST) { ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X via MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac), MAC2STR(peer->peer_addr)); ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); @@ -471,22 +475,22 @@ static void _processing(void *pvParameter) } else { - if (memcmp(queue.data.original_target_mac, _broadcast_mac, 6) != 0) + if (memcmp(data->original_target_mac, &_broadcast_mac, 6) != 0) { ESP_LOGI(TAG, "Routing to MAC %02X:%02X:%02X:%02X:%02X:%02X via MAC %02X:%02X:%02X:%02X:%02X:%02X is incorrect.", MAC2STR(queue.data.original_target_mac), MAC2STR(peer->peer_addr)); for (uint16_t i = 0; i < zh_vector_get_size(&_route_vector); ++i) { - _routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); - if (memcmp(queue.data.original_target_mac, routing_table->original_target_mac, 6) == 0) + routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); + if (memcmp(data->original_target_mac, routing_table->original_target_mac, 6) == 0) { zh_vector_delete_item(&_route_vector, i); } } - if (queue.data.message_type == UNICAST) + if (data->message_type == UNICAST) { ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X transferred to routing waiting list.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == DELIVERY_CONFIRM) + if (data->message_type == DELIVERY_CONFIRM) { ESP_LOGI(TAG, "System message for message receiving confirmation from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X transferred to routing waiting list.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } @@ -498,11 +502,11 @@ static void _processing(void *pvParameter) } ESP_LOGI(TAG, "System message for routing request to MAC %02X:%02X:%02X:%02X:%02X:%02X added to queue.", MAC2STR(queue.data.original_target_mac)); queue.id = TO_SEND; - queue.data.message_type = SEARCH_REQUEST; - memcpy(queue.data.original_sender_mac, _self_mac, 6); - queue.data.payload_len = 0; - memset(queue.data.payload, 0, ZH_NETWORK_MAX_MESSAGE_SIZE); - queue.data.message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. + data->message_type = SEARCH_REQUEST; + memcpy(data->original_sender_mac, &_self_mac, 6); + data->data_len = 0; + memset(data->data, 0, ZH_NETWORK_MAX_MESSAGE_SIZE); + data->message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. ESP_LOGI(TAG, "Outgoing ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); if (xQueueSendToFront(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE) { @@ -516,7 +520,7 @@ static void _processing(void *pvParameter) break; case ON_RECV: ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processing begin.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); - switch (queue.data.message_type) + switch (data->message_type) { case BROADCAST: ESP_LOGI(TAG, "Broadcast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X is received.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); @@ -528,9 +532,9 @@ static void _processing(void *pvParameter) break; } memset(on_recv, 0, sizeof(zh_network_event_on_recv_t)); - memcpy(on_recv->mac_addr, queue.data.original_sender_mac, 6); - on_recv->data_len = queue.data.payload_len; - on_recv->data = heap_caps_malloc(queue.data.payload_len, MALLOC_CAP_8BIT); + memcpy(on_recv->mac_addr, data->original_sender_mac, 6); + on_recv->data_len = data->data_len; + on_recv->data = heap_caps_malloc(data->data_len, MALLOC_CAP_8BIT); if (on_recv->data == NULL) { ESP_LOGE(TAG, "ESP-NOW message processing task internal error."); @@ -538,8 +542,8 @@ static void _processing(void *pvParameter) heap_caps_free(on_recv->data); break; } - memset(on_recv->data, 0, queue.data.payload_len); - memcpy(on_recv->data, queue.data.payload, queue.data.payload_len); + memset(on_recv->data, 0, data->data_len); + memcpy(on_recv->data, data->data, data->data_len); ESP_LOGI(TAG, "Broadcast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X added to queue for resend to all nodes.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); if (esp_event_post(ZH_NETWORK, ZH_NETWORK_ON_RECV_EVENT, on_recv, sizeof(zh_network_event_on_recv_t) + on_recv->data_len + sizeof(on_recv->data_len), portTICK_PERIOD_MS) != ESP_OK) @@ -555,7 +559,7 @@ static void _processing(void *pvParameter) break; case UNICAST: ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X is received.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); - if (memcmp(queue.data.original_target_mac, _self_mac, 6) == 0) + if (memcmp(data->original_target_mac, &_self_mac, 6) == 0) { zh_network_event_on_recv_t *on_recv = heap_caps_malloc(sizeof(zh_network_event_on_recv_t), MALLOC_CAP_8BIT); if (on_recv == NULL) @@ -565,9 +569,9 @@ static void _processing(void *pvParameter) break; } memset(on_recv, 0, sizeof(zh_network_event_on_recv_t)); - memcpy(on_recv->mac_addr, queue.data.original_sender_mac, 6); - on_recv->data_len = queue.data.payload_len; - on_recv->data = heap_caps_malloc(queue.data.payload_len, MALLOC_CAP_8BIT); + memcpy(on_recv->mac_addr, data->original_sender_mac, 6); + on_recv->data_len = data->data_len; + on_recv->data = heap_caps_malloc(data->data_len, MALLOC_CAP_8BIT); if (on_recv->data == NULL) { ESP_LOGE(TAG, "ESP-NOW message processing task internal error."); @@ -575,8 +579,8 @@ static void _processing(void *pvParameter) heap_caps_free(on_recv->data); break; } - memset(on_recv->data, 0, queue.data.payload_len); - memcpy(on_recv->data, queue.data.payload, queue.data.payload_len); + memset(on_recv->data, 0, data->data_len); + memcpy(on_recv->data, data->data, data->data_len); ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); if (esp_event_post(ZH_NETWORK, ZH_NETWORK_ON_RECV_EVENT, on_recv, sizeof(zh_network_event_on_recv_t) + on_recv->data_len + sizeof(on_recv->data_len), portTICK_PERIOD_MS) != ESP_OK) { @@ -584,13 +588,13 @@ static void _processing(void *pvParameter) } heap_caps_free(on_recv); queue.id = TO_SEND; - queue.data.message_type = DELIVERY_CONFIRM; - memcpy(queue.data.original_target_mac, queue.data.original_sender_mac, 6); - memcpy(queue.data.original_sender_mac, _self_mac, 6); - queue.data.payload_len = 0; - memset(queue.data.payload, 0, ZH_NETWORK_MAX_MESSAGE_SIZE); - queue.data.confirm_id = queue.data.message_id; - queue.data.message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. + data->message_type = DELIVERY_CONFIRM; + memcpy(data->original_target_mac, data->original_sender_mac, 6); + memcpy(data->original_sender_mac, &_self_mac, 6); + data->data_len = 0; + memset(data->data, 0, ZH_NETWORK_MAX_MESSAGE_SIZE); + data->confirm_id = data->message_id; + data->message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. if (xQueueSendToFront(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE) { ESP_LOGE(TAG, "ESP-NOW message processing task internal error."); @@ -607,9 +611,9 @@ static void _processing(void *pvParameter) break; case DELIVERY_CONFIRM: ESP_LOGI(TAG, "System message for message receiving confirmation from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X is received.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); - if (memcmp(queue.data.original_target_mac, _self_mac, 6) == 0) + if (memcmp(data->original_target_mac, &_self_mac, 6) == 0) { - zh_vector_push_back(&_response_vector, &queue.data.confirm_id); + zh_vector_push_back(&_response_vector, &data->confirm_id); if (zh_vector_get_size(&_response_vector) > _init_config.queue_size) { zh_vector_delete_item(&_response_vector, 0); @@ -629,32 +633,32 @@ static void _processing(void *pvParameter) ESP_LOGI(TAG, "System message for routing request from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X is received.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); for (uint16_t i = 0; i < zh_vector_get_size(&_route_vector); ++i) { - _routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); - if (memcmp(queue.data.original_target_mac, routing_table->original_target_mac, 6) == 0) + routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); + if (memcmp(data->original_target_mac, routing_table->original_target_mac, 6) == 0) { zh_vector_delete_item(&_route_vector, i); } } { // Just to avoid the compiler warning. - _routing_table_t routing_table = {0}; - memcpy(routing_table.original_target_mac, queue.data.original_sender_mac, 6); - memcpy(routing_table.intermediate_target_mac, queue.data.sender_mac, 6); + routing_table_t routing_table = {0}; + memcpy(&routing_table.original_target_mac, data->original_sender_mac, 6); + memcpy(&routing_table.intermediate_target_mac, data->sender_mac, 6); zh_vector_push_back(&_route_vector, &routing_table); } if (zh_vector_get_size(&_route_vector) > _init_config.route_vector_size) { zh_vector_delete_item(&_route_vector, 0); } - if (memcmp(queue.data.original_target_mac, _self_mac, 6) == 0) + if (memcmp(data->original_target_mac, &_self_mac, 6) == 0) { ESP_LOGI(TAG, "System message for routing response from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X added to the queue.", MAC2STR(queue.data.original_target_mac), MAC2STR(queue.data.original_sender_mac)); queue.id = TO_SEND; - queue.data.message_type = SEARCH_RESPONSE; - memcpy(queue.data.original_target_mac, queue.data.original_sender_mac, 6); - memcpy(queue.data.original_sender_mac, _self_mac, 6); - queue.data.payload_len = 0; - memset(queue.data.payload, 0, ZH_NETWORK_MAX_MESSAGE_SIZE); - queue.data.message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. + data->message_type = SEARCH_RESPONSE; + memcpy(data->original_target_mac, data->original_sender_mac, 6); + memcpy(data->original_sender_mac, &_self_mac, 6); + data->data_len = 0; + memset(data->data, 0, ZH_NETWORK_MAX_MESSAGE_SIZE); + data->message_id = abs(esp_random()); // It is not clear why esp_random() sometimes gives negative values. ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); if (xQueueSendToFront(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE) { @@ -674,23 +678,23 @@ static void _processing(void *pvParameter) ESP_LOGI(TAG, "System message for routing response from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X is received.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); for (uint16_t i = 0; i < zh_vector_get_size(&_route_vector); ++i) { - _routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); - if (memcmp(queue.data.original_target_mac, routing_table->original_target_mac, 6) == 0) + routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); + if (memcmp(data->original_target_mac, routing_table->original_target_mac, 6) == 0) { zh_vector_delete_item(&_route_vector, i); } } { // Just to avoid the compiler warning. - _routing_table_t routing_table = {0}; - memcpy(routing_table.original_target_mac, queue.data.original_sender_mac, 6); - memcpy(routing_table.intermediate_target_mac, queue.data.sender_mac, 6); + routing_table_t routing_table = {0}; + memcpy(&routing_table.original_target_mac, data->original_sender_mac, 6); + memcpy(&routing_table.intermediate_target_mac, data->sender_mac, 6); zh_vector_push_back(&_route_vector, &routing_table); } if (zh_vector_get_size(&_route_vector) > _init_config.route_vector_size) { zh_vector_delete_item(&_route_vector, 0); } - if (memcmp(queue.data.original_target_mac, _self_mac, 6) != 0) + if (memcmp(data->original_target_mac, &_self_mac, 6) != 0) { ESP_LOGI(TAG, "System message for routing response from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X added to queue for resend to all nodes.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); @@ -711,7 +715,7 @@ static void _processing(void *pvParameter) for (uint16_t i = 0; i < zh_vector_get_size(&_response_vector); ++i) { uint32_t *message_id = zh_vector_get_item(&_response_vector, i); - if (memcmp(&queue.data.message_id, message_id, sizeof(queue.data.message_id)) == 0) + if (memcmp(&data->message_id, message_id, sizeof(data->message_id)) == 0) { zh_vector_delete_item(&_response_vector, i); zh_network_event_on_send_t *on_send = heap_caps_malloc(sizeof(zh_network_event_on_send_t), MALLOC_CAP_8BIT); @@ -722,7 +726,7 @@ static void _processing(void *pvParameter) break; } memset(on_send, 0, sizeof(zh_network_event_on_send_t)); - memcpy(on_send->mac_addr, queue.data.original_target_mac, 6); + memcpy(on_send->mac_addr, data->original_target_mac, 6); on_send->status = ZH_NETWORK_SEND_SUCCESS; ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X sent success.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X removed from confirmation message waiting list.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); @@ -740,7 +744,7 @@ static void _processing(void *pvParameter) if ((esp_timer_get_time() / 1000 - queue.time) > _init_config.max_waiting_time) { ESP_LOGW(TAG, "Time for waiting confirmation message from MAC %02X:%02X:%02X:%02X:%02X:%02X is expired.", MAC2STR(queue.data.original_target_mac)); - if (memcmp(queue.data.original_sender_mac, _self_mac, 6) == 0) + if (memcmp(data->original_sender_mac, &_self_mac, 6) == 0) { zh_network_event_on_send_t *on_send = heap_caps_malloc(sizeof(zh_network_event_on_send_t), MALLOC_CAP_8BIT); if (on_send == NULL) @@ -750,7 +754,7 @@ static void _processing(void *pvParameter) break; } memset(on_send, 0, sizeof(zh_network_event_on_send_t)); - memcpy(on_send->mac_addr, queue.data.original_target_mac, 6); + memcpy(on_send->mac_addr, data->original_target_mac, 6); on_send->status = ZH_NETWORK_SEND_FAIL; ESP_LOGE(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X sent fail.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X removed from confirmation message waiting list.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); @@ -771,15 +775,15 @@ static void _processing(void *pvParameter) case WAIT_ROUTE: for (uint16_t i = 0; i < zh_vector_get_size(&_route_vector); ++i) { - _routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); - if (memcmp(queue.data.original_target_mac, routing_table->original_target_mac, 6) == 0) + routing_table_t *routing_table = zh_vector_get_item(&_route_vector, i); + if (memcmp(data->original_target_mac, routing_table->original_target_mac, 6) == 0) { ESP_LOGI(TAG, "Routing to MAC %02X:%02X:%02X:%02X:%02X:%02X is received.", MAC2STR(queue.data.original_target_mac)); - if (queue.data.message_type == UNICAST) + if (data->message_type == UNICAST) { ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X removed from routing waiting list and added to queue.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == DELIVERY_CONFIRM) + if (data->message_type == DELIVERY_CONFIRM) { ESP_LOGI(TAG, "System message for message receiving confirmation from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X removed from routing waiting list and added to queue.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } @@ -797,7 +801,7 @@ static void _processing(void *pvParameter) if ((esp_timer_get_time() / 1000 - queue.time) > _init_config.max_waiting_time) { ESP_LOGW(TAG, "Time for waiting routing to MAC %02X:%02X:%02X:%02X:%02X:%02X is expired.", MAC2STR(queue.data.original_target_mac)); - if (memcmp(queue.data.original_sender_mac, _self_mac, 6) == 0) + if (memcmp(data->original_sender_mac, &_self_mac, 6) == 0) { zh_network_event_on_send_t *on_send = heap_caps_malloc(sizeof(zh_network_event_on_send_t), MALLOC_CAP_8BIT); if (on_send == NULL) @@ -807,7 +811,7 @@ static void _processing(void *pvParameter) break; } memset(on_send, 0, sizeof(zh_network_event_on_send_t)); - memcpy(on_send->mac_addr, queue.data.original_target_mac, 6); + memcpy(on_send->mac_addr, data->original_target_mac, 6); on_send->status = ZH_NETWORK_SEND_FAIL; ESP_LOGE(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X sent fail.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X removed from routing waiting list.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); @@ -819,11 +823,11 @@ static void _processing(void *pvParameter) } else { - if (queue.data.message_type == UNICAST) + if (data->message_type == UNICAST) { ESP_LOGI(TAG, "Unicast message from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X removed from routing waiting list.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); } - if (queue.data.message_type == DELIVERY_CONFIRM) + if (data->message_type == DELIVERY_CONFIRM) { ESP_LOGI(TAG, "System message for message receiving confirmation from MAC %02X:%02X:%02X:%02X:%02X:%02X to MAC %02X:%02X:%02X:%02X:%02X:%02X removed from routing waiting list.", MAC2STR(queue.data.original_sender_mac), MAC2STR(queue.data.original_target_mac)); }