diff --git a/main/zh_gateway.c b/main/zh_gateway.c index a4e12a6..b7e6ab1 100755 --- a/main/zh_gateway.c +++ b/main/zh_gateway.c @@ -216,48 +216,47 @@ void zh_espnow_event_handler(void *arg, esp_event_base_t event_base, int32_t eve goto ZH_NETWORK_EVENT_HANDLER_EXIT; } #endif - zh_espnow_data_t data = {0}; - memcpy(&data, recv_data->data, recv_data->data_len); - char *topic = (char *)heap_caps_malloc(strlen(CONFIG_MQTT_TOPIC_PREFIX) + strlen(zh_get_device_type_value_name(data.device_type)) + 20, MALLOC_CAP_8BIT); - memset(topic, 0, strlen(CONFIG_MQTT_TOPIC_PREFIX) + strlen(zh_get_device_type_value_name(data.device_type)) + 20); - sprintf(topic, "%s/%s/" MAC_STR, CONFIG_MQTT_TOPIC_PREFIX, zh_get_device_type_value_name(data.device_type), MAC2STR(recv_data->mac_addr)); - switch (data.payload_type) + zh_espnow_data_t *data = (zh_espnow_data_t *)recv_data->data; + char *topic = (char *)heap_caps_malloc(strlen(CONFIG_MQTT_TOPIC_PREFIX) + strlen(zh_get_device_type_value_name(data->device_type)) + 20, MALLOC_CAP_8BIT); + memset(topic, 0, strlen(CONFIG_MQTT_TOPIC_PREFIX) + strlen(zh_get_device_type_value_name(data->device_type)) + 20); + sprintf(topic, "%s/%s/" MAC_STR, CONFIG_MQTT_TOPIC_PREFIX, zh_get_device_type_value_name(data->device_type), MAC2STR(recv_data->mac_addr)); + switch (data->payload_type) { case ZHPT_ATTRIBUTES: - zh_espnow_send_mqtt_json_attributes_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_send_mqtt_json_attributes_message(data, recv_data->mac_addr, gateway_config); break; case ZHPT_KEEP_ALIVE: - zh_espnow_send_mqtt_json_keep_alive_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_send_mqtt_json_keep_alive_message(data, recv_data->mac_addr, gateway_config); break; case ZHPT_CONFIG: - switch (data.device_type) + switch (data->device_type) { case ZHDT_SWITCH: - zh_espnow_switch_send_mqtt_json_config_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_switch_send_mqtt_json_config_message(data, recv_data->mac_addr, gateway_config); break; case ZHDT_LED: - zh_espnow_led_send_mqtt_json_config_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_led_send_mqtt_json_config_message(data, recv_data->mac_addr, gateway_config); break; case ZHDT_SENSOR: - zh_espnow_sensor_send_mqtt_json_config_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_sensor_send_mqtt_json_config_message(data, recv_data->mac_addr, gateway_config); break; case ZHDT_BINARY_SENSOR: - zh_espnow_binary_sensor_send_mqtt_json_config_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_binary_sensor_send_mqtt_json_config_message(data, recv_data->mac_addr, gateway_config); break; default: break; } break; case ZHPT_HARDWARE: - switch (data.device_type) + switch (data->device_type) { case ZHDT_SWITCH: - zh_espnow_switch_send_mqtt_json_hardware_config_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_switch_send_mqtt_json_hardware_config_message(data, recv_data->mac_addr, gateway_config); break; case ZHDT_LED: break; case ZHDT_SENSOR: - zh_espnow_sensor_send_mqtt_json_hardware_config_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_sensor_send_mqtt_json_hardware_config_message(data, recv_data->mac_addr, gateway_config); break; case ZHDT_BINARY_SENSOR: break; @@ -266,19 +265,19 @@ void zh_espnow_event_handler(void *arg, esp_event_base_t event_base, int32_t eve } break; case ZHPT_STATE: - switch (data.device_type) + switch (data->device_type) { case ZHDT_SWITCH: - zh_espnow_switch_send_mqtt_json_status_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_switch_send_mqtt_json_status_message(data, recv_data->mac_addr, gateway_config); break; case ZHDT_LED: - zh_espnow_led_send_mqtt_json_status_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_led_send_mqtt_json_status_message(data, recv_data->mac_addr, gateway_config); break; case ZHDT_SENSOR: - zh_espnow_sensor_send_mqtt_json_status_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_sensor_send_mqtt_json_status_message(data, recv_data->mac_addr, gateway_config); break; case ZHDT_BINARY_SENSOR: - zh_espnow_binary_sensor_send_mqtt_json_status_message(&data, recv_data->mac_addr, gateway_config); + zh_espnow_binary_sensor_send_mqtt_json_status_message(data, recv_data->mac_addr, gateway_config); break; default: break; @@ -287,9 +286,9 @@ void zh_espnow_event_handler(void *arg, esp_event_base_t event_base, int32_t eve case ZHPT_UPDATE: if (xSemaphoreTake(gateway_config->espnow_ota_in_progress_mutex, portTICK_PERIOD_MS) == pdTRUE) { - gateway_config->espnow_ota_data.device_type = data.device_type; - memcpy(gateway_config->espnow_ota_data.app_name, data.payload_data.ota_message.espnow_ota_data.app_name, sizeof(data.payload_data.ota_message.espnow_ota_data.app_name)); - memcpy(gateway_config->espnow_ota_data.app_version, data.payload_data.ota_message.espnow_ota_data.app_version, sizeof(data.payload_data.ota_message.espnow_ota_data.app_version)); + gateway_config->espnow_ota_data.device_type = data->device_type; + memcpy(gateway_config->espnow_ota_data.app_name, data->payload_data.ota_message.espnow_ota_data.app_name, sizeof(data->payload_data.ota_message.espnow_ota_data.app_name)); + memcpy(gateway_config->espnow_ota_data.app_version, data->payload_data.ota_message.espnow_ota_data.app_version, sizeof(data->payload_data.ota_message.espnow_ota_data.app_version)); memcpy(gateway_config->espnow_ota_data.mac_addr, recv_data->mac_addr, 6); xTaskCreatePinnedToCore(&zh_espnow_ota_update_task, "NULL", ZH_OTA_STACK_SIZE, gateway_config, ZH_OTA_TASK_PRIORITY, NULL, tskNO_AFFINITY); xSemaphoreGive(gateway_config->espnow_ota_in_progress_mutex);