fixed parsing for mqtt data and json parsing

main
Jonas Arnold 4 years ago
parent c3d42ea3e4
commit 71f37109f4
  1. 39
      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;
}

Loading…
Cancel
Save