|
|
|
|
@ -16,6 +16,7 @@ |
|
|
|
|
#include "mqtt_client.h" |
|
|
|
|
#include "myMqtt.h" |
|
|
|
|
#include "splitflap_wrapper.h" |
|
|
|
|
#include "robo_wrapper.h" |
|
|
|
|
|
|
|
|
|
#define TAG "CHALLENGE_COM" /* tag for logging with ESP_LOG */ |
|
|
|
|
|
|
|
|
|
@ -25,6 +26,7 @@ const char MQTT_TOPIC_SF_INITALL[] = "/splitFlap/cmd/init/"; |
|
|
|
|
const char MQTT_TOPIC_SF_CONFIG_SETUP[] = "/splitFlap/config/setup/"; |
|
|
|
|
const char MQTT_TOPIC_ROBO_MODE[] = "/mobile/cmd/mode/"; |
|
|
|
|
const char MQTT_TOPIC_ROBO_NAV_TURN[] = "/mobile/cmd/nav/turn"; |
|
|
|
|
const char MQTT_TOPIC_ROBO_NAV_MOVE[] = "/mobile/cmd/nav/move"; |
|
|
|
|
const char MQTT_TOPIC_ROBO_NAV_STOP[] = "/mobile/cmd/nav/stop"; |
|
|
|
|
|
|
|
|
|
void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data){ |
|
|
|
|
@ -104,15 +106,57 @@ void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t |
|
|
|
|
else{ |
|
|
|
|
// CMD: ROBO MOBILE MODE
|
|
|
|
|
if(McuUtility_strcmp(topic, MQTT_TOPIC_ROBO_MODE)==0){ |
|
|
|
|
|
|
|
|
|
handled = true; |
|
|
|
|
// parse json
|
|
|
|
|
bool modeAutomatic = false; |
|
|
|
|
struct json_attr_t json_attrs[] = { |
|
|
|
|
{"automatic", t_boolean, .addr.boolean = &modeAutomatic}, |
|
|
|
|
{NULL}, |
|
|
|
|
}; |
|
|
|
|
int err = json_read_object(data, json_attrs, NULL); |
|
|
|
|
if(err != 0){ |
|
|
|
|
ESP_LOGE(TAG, "Parsing JSON data of ROBO MOBILE MODE message failed. Event data was = %s", data); |
|
|
|
|
ESP_LOGE(TAG, "Parse error was: %s", json_error_string(err)); |
|
|
|
|
} else{ // successfully parsed
|
|
|
|
|
Robo_Wrapper_SetMode(modeAutomatic); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// CMD: ROBO MOBILE NAV TURN
|
|
|
|
|
else if(McuUtility_strcmp(topic, MQTT_TOPIC_ROBO_NAV_TURN)==0){ |
|
|
|
|
|
|
|
|
|
handled = true; |
|
|
|
|
// data pointer for xatio
|
|
|
|
|
const unsigned char *dataPtr = (unsigned char*)data; |
|
|
|
|
// parse value
|
|
|
|
|
int32_t angle = 0; // default value 0
|
|
|
|
|
McuUtility_xatoi(&dataPtr, &angle); |
|
|
|
|
if(angle == 0){ |
|
|
|
|
ESP_LOGE(TAG, "Parsing data of ROBO MOBILE NAV TURN message failed. Event data was = %s", data); |
|
|
|
|
} else if (angle > 32767 || angle < -32768){ // check range
|
|
|
|
|
ESP_LOGE(TAG, "Data of ROBO MOBILE NAV TURN was out of range. Event data was = %s", data); |
|
|
|
|
} else{ // successfully parsed
|
|
|
|
|
Robo_Wrapper_Nav_Turn((int16_t)angle); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// CMD: ROBO MOBILE NAV MOVE
|
|
|
|
|
else if(McuUtility_strcmp(topic, MQTT_TOPIC_ROBO_NAV_MOVE)==0){ |
|
|
|
|
handled = true; |
|
|
|
|
// data pointer for xatio
|
|
|
|
|
const unsigned char *dataPtr = (unsigned char*)data; |
|
|
|
|
// parse value
|
|
|
|
|
int32_t speed = 40000; // default value => to identify
|
|
|
|
|
McuUtility_xatoi(&dataPtr, &speed); |
|
|
|
|
if(speed == 40000){ |
|
|
|
|
ESP_LOGE(TAG, "Parsing data of ROBO MOBILE NAV MOVE message failed. Event data was = %s", data); |
|
|
|
|
} else if (speed > 32767 || speed < -32768){ // check range
|
|
|
|
|
ESP_LOGE(TAG, "Data of ROBO MOBILE NAV MOVE was out of range. Event data was = %s", data); |
|
|
|
|
} else{ // successfully parsed
|
|
|
|
|
Robo_Wrapper_Nav_Move((int16_t)speed); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// CMD: ROBO MOBILE NAV STOP
|
|
|
|
|
else if(McuUtility_strcmp(topic, MQTT_TOPIC_ROBO_NAV_STOP)==0){ |
|
|
|
|
|
|
|
|
|
handled = true; |
|
|
|
|
Robo_Wrapper_Nav_Stop(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|