Reducing the amount of memory used

This commit is contained in:
2024-06-09 09:55:09 +03:00
parent 3bd8d08ce6
commit 925df4b27c

View File

@ -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; goto ZH_NETWORK_EVENT_HANDLER_EXIT;
} }
#endif #endif
zh_espnow_data_t data = {0}; zh_espnow_data_t *data = (zh_espnow_data_t *)recv_data->data;
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);
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);
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));
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)
switch (data.payload_type)
{ {
case ZHPT_ATTRIBUTES: 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; break;
case ZHPT_KEEP_ALIVE: 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; break;
case ZHPT_CONFIG: case ZHPT_CONFIG:
switch (data.device_type) switch (data->device_type)
{ {
case ZHDT_SWITCH: 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; break;
case ZHDT_LED: 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; break;
case ZHDT_SENSOR: 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; break;
case ZHDT_BINARY_SENSOR: 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; break;
default: default:
break; break;
} }
break; break;
case ZHPT_HARDWARE: case ZHPT_HARDWARE:
switch (data.device_type) switch (data->device_type)
{ {
case ZHDT_SWITCH: 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; break;
case ZHDT_LED: case ZHDT_LED:
break; break;
case ZHDT_SENSOR: 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; break;
case ZHDT_BINARY_SENSOR: case ZHDT_BINARY_SENSOR:
break; break;
@ -266,19 +265,19 @@ void zh_espnow_event_handler(void *arg, esp_event_base_t event_base, int32_t eve
} }
break; break;
case ZHPT_STATE: case ZHPT_STATE:
switch (data.device_type) switch (data->device_type)
{ {
case ZHDT_SWITCH: 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; break;
case ZHDT_LED: 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; break;
case ZHDT_SENSOR: 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; break;
case ZHDT_BINARY_SENSOR: 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; break;
default: default:
break; break;
@ -287,9 +286,9 @@ void zh_espnow_event_handler(void *arg, esp_event_base_t event_base, int32_t eve
case ZHPT_UPDATE: case ZHPT_UPDATE:
if (xSemaphoreTake(gateway_config->espnow_ota_in_progress_mutex, portTICK_PERIOD_MS) == pdTRUE) if (xSemaphoreTake(gateway_config->espnow_ota_in_progress_mutex, portTICK_PERIOD_MS) == pdTRUE)
{ {
gateway_config->espnow_ota_data.device_type = data.device_type; 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_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.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); 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); 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); xSemaphoreGive(gateway_config->espnow_ota_in_progress_mutex);