From d4e97f600a39e2ff534b941b1cc16b645acc64fb Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Wed, 26 Jun 2019 20:28:34 +0800 Subject: [PATCH] update pj1_mqttd project, fix video start can not work bug --- pj1_mqttd/main.c | 71 +++++++++++++++++------------------ 1 files changed, 35 insertions(+), 36 deletions(-) diff --git a/pj1_mqttd/main.c b/pj1_mqttd/main.c index 54c23bb..0212173 100644 --- a/pj1_mqttd/main.c +++ b/pj1_mqttd/main.c @@ -241,14 +241,14 @@ if( running && strcasestr(status, "off") ) { log_warn("Stop mjpg_streamer working on C920 now\n"); - system("/bin/video stop"); + system("/bin/video stop &"); return 0; } if( !running && strcasestr(status, "on") ) { log_nrml("Start mjpg_streamer working on C920 now\n"); - system("/bin/video start"); + system("/bin/video start &"); } return 0; @@ -257,9 +257,8 @@ void proc_json_items(cJSON *root) { int i; + cJSON *item; char *value; - cJSON *item; - cJSON *array; if( !root ) { @@ -267,44 +266,26 @@ return ; } - for( i=0; i<cJSON_GetArraySize(root); i++ ) + item = cJSON_GetObjectItem(root, "camera"); + if( !item ) { - item = cJSON_GetArrayItem(root, i); - if( !item ) - break; - - /* if item is cJSON_Object, then recursive call proc_json */ - if( cJSON_Object == item->type ) - { - proc_json_items(item); - } - else if( cJSON_Array == item->type ) - { - /* Logic C920 camera control */ - if( !strcasecmp(item->string, "camera") ) - { - array = cJSON_GetArrayItem(item, 0); - if( NULL != array ) - { - cJSON *led_item; - - if( NULL != (led_item=cJSON_GetObjectItem(array , "C920")) ) - { - log_nrml("turn Logic C920 camera '%s'\n", led_item->valuestring); - turn_camera( led_item->valuestring ); - } - } - } - } + log_err("cJSON_Parse get camera failure: %s\n", cJSON_GetErrorPtr()); + return ; } + value = cJSON_PrintUnformatted(item); + + turn_camera(value); + + free(value); } void sub_message_callback(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message) { - cJSON *root = NULL; - char *out; - + mqtt_ctx_t *ctx = (mqtt_ctx_t *)userdata; + cJSON *root = NULL; + cJSON *item; + char *value; if ( !message->payloadlen ) { @@ -312,7 +293,7 @@ return ; } - log_nrml("Subscriber receive message: '%s'\n", message->payload); + log_dbg("Subscriber receive message: '%s'\n", message->payload); root = cJSON_Parse(message->payload); if( !root ) @@ -321,8 +302,26 @@ return ; } + item = cJSON_GetObjectItem(root, "id"); + if( !item ) + { + log_err("cJSON_Parse get ID failure: %s\n", cJSON_GetErrorPtr()); + goto OUT; + } + + + value = cJSON_PrintUnformatted(item); + if( strcasecmp(value, ctx->id) ) + { + free(value); + goto OUT; + } + free(value); + + log_nrml("Subscriber receive message: '%s'\n", message->payload); proc_json_items(root); +OUT: cJSON_Delete(root); /* must delete it, or it will result memory leak */ return ; } -- Gitblit v1.9.1