Skip to content

Commit 50e1926

Browse files
author
yougaliu
committed
优化数据模板相关示例
1 parent f757f37 commit 50e1926

File tree

5 files changed

+142
-134
lines changed

5 files changed

+142
-134
lines changed

samples/data_template/data_template_sample.c

Lines changed: 59 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ static DeviceInfo sg_devInfo;
3838

3939
static MQTTEventType sg_subscribe_event_result = MQTT_EVENT_UNDEF;
4040
static 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

277306
int 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

Comments
 (0)