diff --git a/ADIS_ESP32_Eclipse/main/challenge_com.c b/ADIS_ESP32_Eclipse/main/challenge_com.c index 6a30fd4..6b06fc1 100644 --- a/ADIS_ESP32_Eclipse/main/challenge_com.c +++ b/ADIS_ESP32_Eclipse/main/challenge_com.c @@ -26,14 +26,19 @@ const char MQTT_TOPIC_SF_CONFIG_SETUP[] = "/splitFlap/config/setup/"; void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data){ /* INFO - * TOPIC: event->topic + * TOPIC: event->topic ==> do not directly use, string is not limited * TOPIC LENGTH: event->topic_len - * DATA: event->data + * DATA: event->data ==> do not directly use, string is not limited * DATA LENGTH: event->data_len * CLIENT: event->client */ esp_mqtt_event_handle_t event = event_data; + // cut strings to length + char topic[event->topic_len+1]; char data[event->data_len+1]; + McuUtility_strcpy((unsigned char*)topic, sizeof(topic), (unsigned char*)event->topic); + McuUtility_strcpy((unsigned char*)data, sizeof(data), (unsigned char*)event->data); + bool handled = false; // check if event id is MQTT_EVENT_DATA => break if not @@ -46,7 +51,7 @@ void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t /* stationary robot allowed commands */ if(Challenge_App_GetRobotMode() == true) { // CMD: CONFIG SETUP - if(McuUtility_strcmp((char*)event->topic, MQTT_TOPIC_SF_CONFIG_SETUP)==0){ + if(McuUtility_strcmp(topic, MQTT_TOPIC_SF_CONFIG_SETUP)==0){ handled = true; // parse json int setupId = 0; @@ -56,35 +61,39 @@ void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t {"hardwareId", t_integer, .addr.integer = &hwId,}, {NULL}, }; - if(json_read_object(event->data, json_attrs, NULL) != 0){ - ESP_LOGE(TAG, "Parsing JSON data of CONFIG SETUP message failed. Event data was = %s", event->data); + int err = json_read_object(data, json_attrs, NULL); + if(err != 0){ + ESP_LOGE(TAG, "Parsing JSON data of CONFIG SETUP message failed. Event data was = %s", data); + ESP_LOGE(TAG, "Parse error was: %s", json_error_string(err)); } else{ // successfully parsed // check values - if(setupId >= 0 && setupId <= 10 && hwId >= 0 && hwId <= 10){ + if(setupId >= 0 && setupId <= 10 && hwId >= 0 && hwId <= 50){ SplitFlap_Wrapper_SetHardwareIdentifier(setupId, hwId); } else{ - ESP_LOGE(TAG, "SetupID or HardwareID out of range. Event data was = %s", event->data); + ESP_LOGE(TAG, "SetupID or HardwareID out of range. Event data was = %s", data); } } } // CMD: INIT ALL - else if(McuUtility_strcmp((char*)event->topic, MQTT_TOPIC_SF_INITALL)==0){ + else if(McuUtility_strcmp(topic, MQTT_TOPIC_SF_INITALL)==0){ handled = true; SplitFlap_Wrapper_MoveAllToZeroPosition(); } // CMD: DISPLAY - else if(McuUtility_strcmp((char*)event->topic, MQTT_TOPIC_SF_DISPLAY)==0){ + else if(McuUtility_strcmp(topic, MQTT_TOPIC_SF_DISPLAY)==0){ handled = true; // parse json - unsigned char message[] = "TST"; + char message[10] = "TEST"; struct json_attr_t json_attrs[] = { - {"message", t_string, .addr.string = (char*)message}, + {"message", t_string, .addr.string = message, .len = sizeof(message)}, {NULL}, }; - if(json_read_object(event->data, json_attrs, NULL) != 0){ - ESP_LOGE(TAG, "Parsing JSON data of DISPLAY message failed. Event data was = %s", event->data); + int err = json_read_object(data, json_attrs, NULL); + if(err != 0){ + ESP_LOGE(TAG, "Parsing JSON data of DISPLAY message failed. Event data was = %s", data); + ESP_LOGE(TAG, "Parse error was: %s", json_error_string(err)); } else{ // successfully parsed - SplitFlap_Wrapper_Display(message); + SplitFlap_Wrapper_Display((unsigned char*)message); } } } @@ -98,7 +107,7 @@ void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t if(handled == false){ - ESP_LOGE(TAG, "Received data could not be handled. Topic was %s", event->topic); + ESP_LOGE(TAG, "Received data could not be handled. Topic was %s", topic); } return; }