Improve readability of code

more readability
This commit is contained in:
David Lin
2020-02-21 13:09:13 +08:00
committed by GitHub
parent 72042fc89c
commit f1b698bfe7

View File

@@ -15,7 +15,6 @@
#include <stdio.h>
#include <stdlib.h>
// #include <unistd.h>
#include <limits.h>
#include <stdbool.h>
#include <string.h>
@@ -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;
int i;
for(i = 0; i < count; 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<<i))&ALL_EVENTS_MASK){
pEventList[event_count++] = &(g_events[i]);
update_events_timestamp(&g_events[i], 1);
IOT_Event_clearFlag(client, 1<<i);
}
}
rc = IOT_Post_Event(client, sg_data_report_buffer, sg_data_report_buffersize, \
event_count, pEventList, event_post_cb);
if(rc < 0){
Log_e("events post failed: %d", rc);
}
}
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<<i))&ALL_EVENTS_MASK){
pEventList[event_count++] = &(g_events[i]);
update_events_timestamp(&g_events[i], 1);
IOT_Event_clearFlag(client, 1<<i);
}
}
rc = IOT_Post_Event(client, sg_data_report_buffer, sg_data_report_buffersize, \
event_count, pEventList, event_post_cb);
if(rc < 0){
Log_e("events post failed: %d", rc);
}
}
}
#endif
@@ -105,145 +103,143 @@ static void eventPostCheck(void *client)
// action : regist action and set the action handle callback, add your aciton logic here
static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction)
{
int i;
sReplyPara replyPara;
int i;
sReplyPara replyPara;
//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));
}
}
}
//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;
Log_i("subscribe success, packet-id=%u", packet_id);
break;
case MQTT_EVENT_SUBCRIBE_TIMEOUT:
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)
{
// <EFBFBD><EFBFBD>Ϊdemo<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>oled<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ʵ<EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵƵ<EFBFBD><EFBFBD><EFBFBD>ɫ
// <EFBFBD>˴<EFBFBD>demo<EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
// 作为demo这里用oled屏字符显示来模拟灯颜色的切换
// 这里应该由用户实现硬件操作代码,来改变智能灯的颜色
// 此处demo,在开发板显示屏上显示具体的颜色
OLED_ShowString(0, 0, (uint8_t *)color, 8);
}
static void light_change_brightness(TYPE_DEF_TEMPLATE_INT brightness)
{
// <EFBFBD><EFBFBD>Ϊdemo<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>oled<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ʵ<EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵƵ<EFBFBD><EFBFBD><EFBFBD>ɫ
// <EFBFBD>˴<EFBFBD>demo<EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
// 作为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)
{
// <EFBFBD><EFBFBD>Ϊdemo<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>oled<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
// 作为demo这里用oled屏字符显示来模拟灯颜色的切换
OLED_Clear();
}
static void light_power_off(void)
{
// <EFBFBD><EFBFBD>Ϊdemo<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>oled<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
// 作为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;
/* <EFBFBD>ƹ<EFBFBD><EFBFBD><EFBFBD>ɫ */
/* 灯光颜色 */
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) {
/* <EFBFBD>ƹ⿪<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>տ<EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>չʾ */
/* 灯光开启式,按照控制参数展示 */
light_power_on();
light_change_color(color_name);
light_change_brightness(sg_ProductData.m_brightness);
} else {
/* <EFBFBD>ƹ<EFBFBD><EFBFBD>ر<EFBFBD>չʾ */
/* 灯光关闭展示 */
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);