|
|
|
@ -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){ |
|
|
|
void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data){ |
|
|
|
/* INFO
|
|
|
|
/* INFO
|
|
|
|
* TOPIC: event->topic |
|
|
|
* TOPIC: event->topic ==> do not directly use, string is not limited |
|
|
|
* TOPIC LENGTH: event->topic_len |
|
|
|
* TOPIC LENGTH: event->topic_len |
|
|
|
* DATA: event->data |
|
|
|
* DATA: event->data ==> do not directly use, string is not limited |
|
|
|
* DATA LENGTH: event->data_len |
|
|
|
* DATA LENGTH: event->data_len |
|
|
|
* CLIENT: event->client |
|
|
|
* CLIENT: event->client |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
esp_mqtt_event_handle_t event = event_data; |
|
|
|
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; |
|
|
|
bool handled = false; |
|
|
|
|
|
|
|
|
|
|
|
// check if event id is MQTT_EVENT_DATA => break if not
|
|
|
|
// 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 */ |
|
|
|
/* stationary robot allowed commands */ |
|
|
|
if(Challenge_App_GetRobotMode() == true) { |
|
|
|
if(Challenge_App_GetRobotMode() == true) { |
|
|
|
// CMD: CONFIG SETUP
|
|
|
|
// 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; |
|
|
|
handled = true; |
|
|
|
// parse json
|
|
|
|
// parse json
|
|
|
|
int setupId = 0; |
|
|
|
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,}, |
|
|
|
{"hardwareId", t_integer, .addr.integer = &hwId,}, |
|
|
|
{NULL}, |
|
|
|
{NULL}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
if(json_read_object(event->data, json_attrs, NULL) != 0){ |
|
|
|
int err = json_read_object(data, json_attrs, NULL); |
|
|
|
ESP_LOGE(TAG, "Parsing JSON data of CONFIG SETUP message failed. Event data was = %s", event->data); |
|
|
|
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
|
|
|
|
} else{ // successfully parsed
|
|
|
|
// check values
|
|
|
|
// 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); |
|
|
|
SplitFlap_Wrapper_SetHardwareIdentifier(setupId, hwId); |
|
|
|
} else{ |
|
|
|
} 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
|
|
|
|
// 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; |
|
|
|
handled = true; |
|
|
|
SplitFlap_Wrapper_MoveAllToZeroPosition(); |
|
|
|
SplitFlap_Wrapper_MoveAllToZeroPosition(); |
|
|
|
} |
|
|
|
} |
|
|
|
// CMD: DISPLAY
|
|
|
|
// 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; |
|
|
|
handled = true; |
|
|
|
// parse json
|
|
|
|
// parse json
|
|
|
|
unsigned char message[] = "TST"; |
|
|
|
char message[10] = "TEST"; |
|
|
|
struct json_attr_t json_attrs[] = { |
|
|
|
struct json_attr_t json_attrs[] = { |
|
|
|
{"message", t_string, .addr.string = (char*)message}, |
|
|
|
{"message", t_string, .addr.string = message, .len = sizeof(message)}, |
|
|
|
{NULL}, |
|
|
|
{NULL}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
if(json_read_object(event->data, json_attrs, NULL) != 0){ |
|
|
|
int err = json_read_object(data, json_attrs, NULL); |
|
|
|
ESP_LOGE(TAG, "Parsing JSON data of DISPLAY message failed. Event data was = %s", event->data); |
|
|
|
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
|
|
|
|
} 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){ |
|
|
|
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; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|