@@ -38,11 +38,11 @@ static DeviceInfo sg_devInfo;
3838
3939static MQTTEventType sg_subscribe_event_result = MQTT_EVENT_UNDEF ;
4040static bool sg_delta_arrived = false;
41- static bool sg_dev_report_new_data = false;
41+ // static bool sg_dev_report_new_data = false;
4242
4343
44- static char sg_shadow_update_buffer [2048 ];
45- size_t sg_shadow_update_buffersize = sizeof (sg_shadow_update_buffer ) / sizeof (sg_shadow_update_buffer [0 ]);
44+ static char sg_data_report_buffer [2048 ];
45+ size_t sg_data_report_buffersize = sizeof (sg_data_report_buffer ) / sizeof (sg_data_report_buffer [0 ]);
4646
4747#ifdef EVENT_POST_ENABLED
4848
@@ -70,6 +70,36 @@ static void event_post_cb(void *pClient, MQTTMessage *msg)
7070 clearEventFlag (FLAG_EVENT0 |FLAG_EVENT1 |FLAG_EVENT2 );
7171}
7272
73+ static void eventPostCheck (void * client )
74+ {
75+ int i ;
76+ int rc ;
77+ uint32_t eflag ;
78+ sEvent * pEventList [EVENT_COUNTS ];
79+ uint8_t eventCont ;
80+
81+ //事件上报
82+ setEventFlag (FLAG_EVENT0 |FLAG_EVENT1 |FLAG_EVENT2 );
83+ eflag = getEventFlag ();
84+ if ((EVENT_COUNTS > 0 )&& (eflag > 0 )){
85+ eventCont = 0 ;
86+ for (i = 0 ; i < EVENT_COUNTS ; i ++ ){
87+ if ((eflag & (1 <<i ))& ALL_EVENTS_MASK ){
88+ pEventList [eventCont ++ ] = & (g_events [i ]);
89+ update_events_timestamp (& g_events [i ], 1 );
90+ clearEventFlag (1 <<i );
91+ }
92+ }
93+
94+ rc = qcloud_iot_post_event (client , sg_data_report_buffer , sg_data_report_buffersize , \
95+ eventCont , pEventList , event_post_cb );
96+ if (rc < 0 ){
97+ Log_e ("events post failed: %d" , rc );
98+ }
99+ }
100+
101+ }
102+
73103#endif
74104
75105
@@ -178,12 +208,11 @@ static int update_self_define_value(const char *pJsonDoc, DeviceProperty *pPrope
178208 char * pTemJsonDoc = HAL_Malloc (strlen (pJsonDoc ) + 1 );
179209 strcpy (pTemJsonDoc , pJsonDoc );
180210
181- char * property_data = LITE_json_value_of (pProperty -> key , pTemJsonDoc );
211+ char * property_data = LITE_json_string_value_strip_transfer (pProperty -> key , pTemJsonDoc );
182212
183213 if (property_data != NULL ){
184214 if (pProperty -> type == TYPE_TEMPLATE_STRING ){
185215 /*如果多个字符串属性,根据pProperty->key值匹配,处理字符串*/
186- LITE_strip_transfer (property_data );
187216 Log_d ("string type wait to be deal,%s" , property_data );
188217 }else if (pProperty -> type == TYPE_TEMPLATE_JOBJECT ){
189218 Log_d ("Json type wait to be deal,%s" ,property_data );
@@ -276,6 +305,8 @@ int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount)
276305
277306int main (int argc , char * * argv ) {
278307 int rc ;
308+ DeviceProperty * pReportDataList [TOTAL_PROPERTY_COUNT ];
309+ int ReportCont ;
279310
280311
281312 //init log level
@@ -318,7 +349,7 @@ int main(int argc, char **argv) {
318349 return rc ;
319350 }
320351
321- //进行Shdaow Update操作的之前,最后进行一次同步操作,否则可能本机上shadow version和云上不一致导致Shadow Update操作失败
352+ //同步离线数据
322353 rc = IOT_Shadow_Get_Sync (client , QCLOUD_IOT_MQTT_COMMAND_TIMEOUT );
323354 if (rc != QCLOUD_ERR_SUCCESS ) {
324355 Log_e ("get device shadow failed, err: %d" , rc );
@@ -332,7 +363,7 @@ int main(int argc, char **argv) {
332363 rc = IOT_Shadow_Yield (client , 200 );
333364
334365 if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT ) {
335- sleep ( 1 );
366+ HAL_SleepMs ( 1000 );
336367 continue ;
337368 }
338369 else if (rc != QCLOUD_ERR_SUCCESS ) {
@@ -346,9 +377,9 @@ int main(int argc, char **argv) {
346377 deal_down_stream_user_logic (& sg_ProductData );
347378
348379 /*业务逻辑处理完后需要同步通知服务端:设备数据已更新,删除dseire数据*/
349- int rc = IOT_Shadow_JSON_ConstructDesireAllNull (client , sg_shadow_update_buffer , sg_shadow_update_buffersize );
380+ int rc = IOT_Shadow_JSON_ConstructDesireAllNull (client , sg_data_report_buffer , sg_data_report_buffersize );
350381 if (rc == QCLOUD_ERR_SUCCESS ) {
351- rc = IOT_Shadow_Update_Sync (client , sg_shadow_update_buffer , sg_shadow_update_buffersize , QCLOUD_IOT_MQTT_COMMAND_TIMEOUT );
382+ rc = IOT_Shadow_Update_Sync (client , sg_data_report_buffer , sg_data_report_buffersize , QCLOUD_IOT_MQTT_COMMAND_TIMEOUT );
352383 sg_delta_arrived = false;
353384 if (rc == QCLOUD_ERR_SUCCESS ) {
354385 Log_i ("shadow update(desired) success" );
@@ -359,70 +390,36 @@ int main(int argc, char **argv) {
359390 } else {
360391 Log_e ("construct desire failed, err: %d" , rc );
361392 }
362-
363- sg_dev_report_new_data = true; //用户需要根据业务情况修改上报flag的赋值位置,此处仅为示例
364393 } else {
365394 Log_d ("No delta msg received..." );
366395 }
367396
368397 /*设备上行消息,业务逻辑2入口*/
369- if (sg_dev_report_new_data ){
398+ /*delta消息是属性的desire和属性的report的差异集,收到deseire消息处理后,要report属性的状态*/
399+ if (QCLOUD_ERR_SUCCESS == deal_up_stream_user_logic (pReportDataList , & ReportCont )){
370400
371- DeviceProperty * pReportDataList [TOTAL_PROPERTY_COUNT ];
372- int ReportCont ;
373-
374- /*delta消息是属性的desire和属性的report的差异集,收到deseire消息处理后,要report属性的状态*/
375- if (QCLOUD_ERR_SUCCESS == deal_up_stream_user_logic (pReportDataList , & ReportCont )){
376-
377- rc = IOT_Shadow_JSON_ConstructReportArray (client , sg_shadow_update_buffer , sg_shadow_update_buffersize , ReportCont , pReportDataList );
378- if (rc == QCLOUD_ERR_SUCCESS ) {
379- rc = IOT_Shadow_Update (client , sg_shadow_update_buffer , sg_shadow_update_buffersize ,
380- OnShadowUpdateCallback , NULL , QCLOUD_IOT_MQTT_COMMAND_TIMEOUT );
381- if (rc == QCLOUD_ERR_SUCCESS ) {
382- sg_dev_report_new_data = false;
383- Log_i ("shadow update(reported) success" );
384- } else {
385- Log_e ("shadow update(reported) failed, err: %d" , rc );
386- }
387- } else {
388- Log_e ("construct reported failed, err: %d" , rc );
389- }
390-
391- }else {
392- Log_d ("no data need to be reported or someting goes wrong" );
393- }
401+ rc = IOT_Shadow_JSON_ConstructReportArray (client , sg_data_report_buffer , sg_data_report_buffersize , ReportCont , pReportDataList );
402+ if (rc == QCLOUD_ERR_SUCCESS ) {
403+ rc = IOT_Shadow_Update (client , sg_data_report_buffer , sg_data_report_buffersize ,
404+ OnShadowUpdateCallback , NULL , QCLOUD_IOT_MQTT_COMMAND_TIMEOUT );
405+ if (rc == QCLOUD_ERR_SUCCESS ) {
406+ Log_i ("shadow update(reported) success" );
407+ } else {
408+ Log_e ("shadow update(reported) failed, err: %d" , rc );
409+ }
410+ } else {
411+ Log_e ("construct reported failed, err: %d" , rc );
412+ }
413+
394414 }else {
395- Log_d ("No device data need to be reported... " );
415+ Log_d ("no data need to be reported" );
396416 }
397-
417+
398418#ifdef EVENT_POST_ENABLED
399- int i ;
400- uint32_t eflag ;
401- sEvent * pEventList [EVENT_COUNTS ];
402- uint8_t event_count ;
403-
404- //事件上报
405- setEventFlag (FLAG_EVENT0 |FLAG_EVENT1 |FLAG_EVENT2 );
406- eflag = getEventFlag ();
407- if ((EVENT_COUNTS > 0 )&& (eflag > 0 )){
408- event_count = 0 ;
409- for (i = 0 ; i < EVENT_COUNTS ; i ++ ){
410- if ((eflag & (1 <<i ))& ALL_EVENTS_MASK ){
411- pEventList [event_count ++ ] = & (g_events [i ]);
412- update_events_timestamp (& g_events [i ], 1 );
413- clearEventFlag (1 <<i );
414- }
415- }
416-
417- rc = qcloud_iot_post_event (client , sg_shadow_update_buffer , sg_shadow_update_buffersize , \
418- event_count , pEventList , event_post_cb );
419- if (rc < 0 ){
420- Log_e ("events post failed: %d" , rc );
421- }
422- }
419+ eventPostCheck (client );
423420#endif
424421
425- sleep ( 3 );
422+ HAL_SleepMs ( 3000 );
426423 }
427424
428425 rc = IOT_Shadow_Destroy (client );
0 commit comments