diff --git a/examples/qcloud_iot_explorer_sdk_data_template/data_template_sample.c b/examples/qcloud_iot_explorer_sdk_data_template/data_template_sample.c index bcbed7fd..b3f56045 100644 --- a/examples/qcloud_iot_explorer_sdk_data_template/data_template_sample.c +++ b/examples/qcloud_iot_explorer_sdk_data_template/data_template_sample.c @@ -15,7 +15,6 @@ #include #include -// #include #include #include #include @@ -46,55 +45,54 @@ size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_dat #include "events_config.c" static void update_events_timestamp(sEvent *pEvents, int count) { - int i; - - for(i = 0; i < count; i++){ + int i; + + for(i = 0; i < count; i++){ if (NULL == (&pEvents[i])) { - Log_e("null event pointer"); - return; + Log_e("null event pointer"); + return; } #ifdef EVENT_TIMESTAMP_USED - pEvents[i].timestamp = time(NULL); //should be UTC and accurate + pEvents[i].timestamp = time(NULL); //should be UTC and accurate #else - pEvents[i].timestamp = 0; + pEvents[i].timestamp = 0; #endif - } + } } static void event_post_cb(void *pClient, MQTTMessage *msg) { - Log_d("Reply:%.*s", msg->payload_len, msg->payload); - IOT_Event_clearFlag(pClient, FLAG_EVENT0|FLAG_EVENT1|FLAG_EVENT2); + Log_d("Reply:%.*s", msg->payload_len, msg->payload); + IOT_Event_clearFlag(pClient, FLAG_EVENT0|FLAG_EVENT1|FLAG_EVENT2); } //event check and post static void eventPostCheck(void *client) { - int i; - int rc; - uint32_t eflag; - uint8_t event_count; - sEvent *pEventList[EVENT_COUNTS]; + int i; + int rc; + uint32_t eflag; + uint8_t event_count; + sEvent *pEventList[EVENT_COUNTS]; - IOT_Event_setFlag(client, FLAG_EVENT0|FLAG_EVENT1|FLAG_EVENT2); - eflag = IOT_Event_getFlag(client); - if((EVENT_COUNTS > 0 )&& (eflag > 0)){ - event_count = 0; - for(i = 0; i < EVENT_COUNTS; i++){ - if((eflag&(1< 0 )&& (eflag > 0)){ + event_count = 0; + for(i = 0; i < EVENT_COUNTS; i++){ + if((eflag&(1<pInput; - for (i = 0; i < pAction->input_num; i++) { - if (JSTRING == pActionInput[i].type) { - Log_d("Input:[%s], data:[%s]", pActionInput[i].key, pActionInput[i].data); - HAL_Free(pActionInput[i].data); - } else { - if(JINT32 == pActionInput[i].type) { - Log_d("Input:[%s], data:[%d]", pActionInput[i].key, *((int*)pActionInput[i].data)); - } else if( JFLOAT == pActionInput[i].type) { - Log_d("Input:[%s], data:[%f]", pActionInput[i].key, *((float*)pActionInput[i].data)); - } else if( JUINT32 == pActionInput[i].type) { - Log_d("Input:[%s], data:[%u]", pActionInput[i].key, *((uint32_t*)pActionInput[i].data)); - } - } - } + //do something base on input, just print as an sample + DeviceProperty *pActionInput = pAction->pInput; + for (i = 0; i < pAction->input_num; i++) { + if (JSTRING == pActionInput[i].type) { + Log_d("Input:[%s], data:[%s]", pActionInput[i].key, pActionInput[i].data); + HAL_Free(pActionInput[i].data); + } else { + if(JINT32 == pActionInput[i].type) { + Log_d("Input:[%s], data:[%d]", pActionInput[i].key, *((int*)pActionInput[i].data)); + } else if( JFLOAT == pActionInput[i].type) { + Log_d("Input:[%s], data:[%f]", pActionInput[i].key, *((float*)pActionInput[i].data)); + } else if( JUINT32 == pActionInput[i].type) { + Log_d("Input:[%s], data:[%u]", pActionInput[i].key, *((uint32_t*)pActionInput[i].data)); + } + } + } - // construct output - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault + // construct output + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault + + DeviceProperty *pActionOutnput = pAction->pOutput; + (void)pActionOutnput; //elimate warning + //TO DO: add your aciont logic here and set output properties which will be reported by action_reply - - DeviceProperty *pActionOutnput = pAction->pOutput; - (void)pActionOutnput; //elimate warning - //TO DO: add your aciont logic here and set output properties which will be reported by action_reply - - - IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); + IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); } static int _register_data_template_action(void *pTemplate_client) { - int i,rc; + int i,rc; for (i = 0; i < TOTAL_ACTION_COUNTS; i++) { - rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template action failed, err: %d", rc); - return rc; - } else { - Log_i("data template action=%s registered.", g_actions[i].pActionId); - } + rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template action failed, err: %d", rc); + return rc; + } else { + Log_i("data template action=%s registered.", g_actions[i].pActionId); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) { - uintptr_t packet_id = (uintptr_t)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; + switch(msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: + case MQTT_EVENT_SUBCRIBE_SUCCESS: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe success, packet-id=%u", packet_id); - break; - - case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe success, packet-id=%u", packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe wait ack timeout, packet-id=%u", packet_id); - break; + Log_i("subscribe wait ack timeout, packet-id=%u", packet_id); + break; - case MQTT_EVENT_SUBCRIBE_NACK: + case MQTT_EVENT_SUBCRIBE_NACK: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe nack, packet-id=%u", packet_id); - break; + Log_i("subscribe nack, packet-id=%u", packet_id); + break; - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } } // Setup MQTT construct parameters static int _setup_connect_init_params(TemplateInitParams* initParams) { - int ret; + int ret; - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if(QCLOUD_RET_SUCCESS != ret){ + return ret; + } - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; #ifdef AUTH_MODE_CERT - /* TLS with certs*/ - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); + /* TLS with certs*/ + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + if (cwd == NULL) + { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; #else - initParams->device_secret = sg_devInfo.device_secret; + initParams->device_secret = sg_devInfo.device_secret; #endif - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; initParams->event_handle.h_fp = event_handler; return QCLOUD_RET_SUCCESS; @@ -254,7 +250,7 @@ static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, ui int i = 0; for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ + /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ if (strcmp(sg_DataTemplate[i].data_property.key, pProperty->key) == 0) { sg_DataTemplate[i].state = eCHANGED; Log_i("Property=%s changed", pProperty->key); @@ -267,26 +263,26 @@ static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, ui } static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) { - Log_i("recv report reply response, reply ack: %d", replyAck); + Log_i("recv report reply response, reply ack: %d", replyAck); } // register data template properties static int _register_data_template_property(void *pTemplate_client) { - int i,rc; + int i,rc; for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template property failed, err: %d", rc); - return rc; - } else { - Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); - } + rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template property failed, err: %d", rc); + return rc; + } else { + Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } ///////////////////////////////////////////////////////////////////////////////////// @@ -303,17 +299,17 @@ __weak void OLED_ShowString(int x, int y, uint8_t *str, int bold) // handle the light(simulated) static void light_change_color(const char *color) { - // 作为demo,这里用oled屏字符显示来模拟灯颜色的切换 - // 这里应该由用户实现硬件操作代码,来改变智能灯的颜色 - // 此处demo,在开发板显示屏上显示具体的颜色 + // 浣滀负demo锛岃繖閲岀敤oled灞忓瓧绗︽樉绀烘潵妯℃嫙鐏鑹茬殑鍒囨崲 + // 杩欓噷搴旇鐢辩敤鎴峰疄鐜扮‖浠舵搷浣滀唬鐮侊紝鏉ユ敼鍙樻櫤鑳界伅鐨勯鑹 + // 姝ゅdemo锛屽湪寮鍙戞澘鏄剧ず灞忎笂鏄剧ず鍏蜂綋鐨勯鑹 OLED_ShowString(0, 0, (uint8_t *)color, 8); } static void light_change_brightness(TYPE_DEF_TEMPLATE_INT brightness) { - // 作为demo,这里用oled屏字符显示来模拟灯颜色的切换 - // 这里应该由用户实现硬件操作代码,来改变智能灯的颜色 - // 此处demo,在开发板显示屏上显示具体的颜色 + // 浣滀负demo锛岃繖閲岀敤oled灞忓瓧绗︽樉绀烘潵妯℃嫙鐏鑹茬殑鍒囨崲 + // 杩欓噷搴旇鐢辩敤鎴峰疄鐜扮‖浠舵搷浣滀唬鐮侊紝鏉ユ敼鍙樻櫤鑳界伅鐨勯鑹 + // 姝ゅdemo锛屽湪寮鍙戞澘鏄剧ず灞忎笂鏄剧ず鍏蜂綋鐨勯鑹 char brightness_str[12]; snprintf(brightness_str, sizeof(brightness_str), "%d", brightness); @@ -323,13 +319,13 @@ static void light_change_brightness(TYPE_DEF_TEMPLATE_INT brightness) static void light_power_on(void) { - // 作为demo,这里用oled屏字符显示来模拟灯颜色的切换 + // 浣滀负demo锛岃繖閲岀敤oled灞忓瓧绗︽樉绀烘潵妯℃嫙鐏鑹茬殑鍒囨崲 OLED_Clear(); } static void light_power_off(void) { - // 作为demo,这里用oled屏字符显示来模拟灯颜色的切换 + // 浣滀负demo锛岃繖閲岀敤oled灞忓瓧绗︽樉绀烘潵妯℃嫙鐏鑹茬殑鍒囨崲 char *info = "light off"; OLED_Clear(); OLED_ShowString(0, 0, (uint8_t *)info, 16); @@ -340,12 +336,12 @@ static void light_power_off(void) // you should add your logic how to use pData void deal_down_stream_user_logic(void *client, ProductDataDefine * pData) { - Log_d("someting about your own product logic wait to be done"); + Log_d("someting about your own product logic wait to be done"); ///////////////////////////////////////////////////////////////////////////////////// char *color_name; - /* 灯光颜色 */ + /* 鐏厜棰滆壊 */ switch (sg_ProductData.m_color) { case 0: color_name = " RED "; @@ -361,24 +357,25 @@ void deal_down_stream_user_logic(void *client, ProductDataDefine * pData) } if (sg_ProductData.m_power_switch == 1) { - /* 灯光开启式,按照控制参数展示 */ + /* 鐏厜寮鍚紡锛屾寜鐓ф帶鍒跺弬鏁板睍绀 */ light_power_on(); light_change_color(color_name); light_change_brightness(sg_ProductData.m_brightness); } else { - /* 灯光关闭展示 */ + /* 鐏厜鍏抽棴灞曠ず */ light_power_off(); } } void first_time_report_construct(DeviceProperty *pReportDataList[], int *pCount) { - int i, j; + int i, j; - for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { + for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { pReportDataList[j++] = &(sg_DataTemplate[i].data_property); } - *pCount = j; + + *pCount = j; } ///////////////////////////////////////////////////////////////////////////////////// @@ -388,23 +385,23 @@ void first_time_report_construct(DeviceProperty *pReportDataList[], int *pCount) // you should add your own logic for how to get the changed properties int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount) { - int i, j; + int i, j; - for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { + for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { if(eCHANGED == sg_DataTemplate[i].state) { pReportDataList[j++] = &(sg_DataTemplate[i].data_property); - sg_DataTemplate[i].state = eNOCHANGE; + sg_DataTemplate[i].state = eNOCHANGE; } } - *pCount = j; + *pCount = j; - return (*pCount > 0)?QCLOUD_RET_SUCCESS:QCLOUD_ERR_FAILURE; + return (*pCount > 0)?QCLOUD_RET_SUCCESS:QCLOUD_ERR_FAILURE; } /*You should get the real info for your device, here just for example*/ static int _get_sys_info(void *handle, char *pJsonDoc, size_t sizeOfBuffer) { - /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ + /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ DeviceProperty plat_info[] = { {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, @@ -413,22 +410,22 @@ static int _get_sys_info(void *handle, char *pJsonDoc, size_t sizeOfBuffer) {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, {NULL, NULL, 0} //end - }; + }; - /*self define info*/ - DeviceProperty self_info[] = { + /*self define info*/ + DeviceProperty self_info[] = { {.key = "append_info", .type = TYPE_TEMPLATE_STRING, .data = "your self define info"}, {NULL, NULL, 0} //end - }; + }; - return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); + return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); } int data_template_light_thread(void) { int rc; - sReplyPara replyPara; - DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; - int ReportCont; + sReplyPara replyPara; + DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; + int ReportCont; //init log level IOT_Log_Set_Level(eLOG_DEBUG); @@ -439,7 +436,7 @@ int data_template_light_thread(void) { if (rc != QCLOUD_RET_SUCCESS) { Log_e("init params err,rc=%d", rc); return rc; - } + } void *client = IOT_Template_Construct(&init_params); if (client != NULL) { @@ -459,7 +456,7 @@ int data_template_light_thread(void) { //init data template _init_data_template(); - //register data template propertys here + //register data template propertys here rc = _register_data_template_property(client); if (rc == QCLOUD_RET_SUCCESS) { Log_i("Register data template propertys Success"); @@ -468,7 +465,7 @@ int data_template_light_thread(void) { return rc; } - //register data template actions here + //register data template actions here #ifdef ACTION_ENABLED rc = _register_data_template_action(client); if (rc == QCLOUD_RET_SUCCESS) { @@ -479,26 +476,26 @@ int data_template_light_thread(void) { } #endif - //report device info, then you can manager your product by these info, like position - rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); - if(QCLOUD_RET_SUCCESS == rc){ - rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Report system info fail, err: %d", rc); - goto exit; - } - }else{ - Log_e("Get system info fail, err: %d", rc); + //report device info, then you can manager your product by these info, like position + rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); + if(QCLOUD_RET_SUCCESS == rc){ + rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Report system info fail, err: %d", rc); + goto exit; } + }else { + Log_e("Get system info fail, err: %d", rc); + } - //get the property changed during offline - rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Get data status fail, err: %d", rc); - //goto exit; - }else{ - Log_d("Get data status success"); - } + //get the property changed during offline + rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Get data status fail, err: %d", rc); + //goto exit; + }else { + Log_d("Get data status success"); + } while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc) { @@ -509,31 +506,30 @@ int data_template_light_thread(void) { HAL_SleepMs(1000); continue; } - else if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Exit loop caused of errCode: %d", rc); - } + else if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Exit loop caused of errCode: %d", rc); + } - /* handle control msg from server */ - if (sg_control_msg_arrived) { + /* handle control msg from server */ + if (sg_control_msg_arrived) { + deal_down_stream_user_logic(client, &sg_ProductData); - deal_down_stream_user_logic(client, &sg_ProductData); + /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured - /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured - - rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); + rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); if (rc == QCLOUD_RET_SUCCESS) { - Log_d("Contol msg reply success"); - sg_control_msg_arrived = false; + Log_d("Contol msg reply success"); + sg_control_msg_arrived = false; } else { Log_e("Contol msg reply failed, err: %d", rc); } - } else{ - Log_d("No control msg received..."); - } + }else { + Log_d("No control msg received..."); + } /////////////////////////////////// // some mistake(kind of bug) in this official sample, must do the first time report @@ -559,13 +555,13 @@ int data_template_light_thread(void) { } else { /////////////////////////////////// - /*report msg to server*/ - /*report the lastest properties's status*/ - if(QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)){ - rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); + /*report msg to server*/ + /*report the lastest properties's status*/ + if(QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)){ + rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); if (rc == QCLOUD_RET_SUCCESS) { rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, - OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); if (rc == QCLOUD_RET_SUCCESS) { Log_i("data template reporte success"); } else { @@ -575,19 +571,19 @@ int data_template_light_thread(void) { Log_e("construct reporte data failed, err: %d", rc); } - }else{ - //Log_d("no data need to be reported or someting goes wrong"); - } + }else { + //Log_d("no data need to be reported or someting goes wrong"); + } /////////////////////////////////// } /////////////////////////////////// #ifdef EVENT_POST_ENABLED - eventPostCheck(client); + eventPostCheck(client); #endif - - HAL_SleepMs(3000); - } + + HAL_SleepMs(3000); + }/*end of while*/ exit: rc = IOT_Template_Destroy(client);