Commit 96769efb authored by chen.weican's avatar chen.weican

【修改内容】增加内场景的设置

【提交人】陈伟灿
parent 6d57df34
...@@ -93,7 +93,8 @@ typedef enum { ...@@ -93,7 +93,8 @@ typedef enum {
#define MSG_KEYMODIFY_NOTIFICATION "KeyModifyNotification" #define MSG_KEYMODIFY_NOTIFICATION "KeyModifyNotification"
/************************SCENE RELATION*************************/ /************************SCENE RELATION*************************/
#define MSG_SCENE_ARGS "args" #define MSG_SCENE_SUPPORT "sceneSupport"
#define MSG_SCENE_MSGID "msgId"
#define MSG_SCENE_NAME "name" #define MSG_SCENE_NAME "name"
#define MSG_SCENE_SCENCTYPE "sceneType" #define MSG_SCENE_SCENCTYPE "sceneType"
#define MSG_SCENE_ENABLE "enable" #define MSG_SCENE_ENABLE "enable"
...@@ -123,9 +124,6 @@ typedef enum { ...@@ -123,9 +124,6 @@ typedef enum {
typedef void ipc_cb(void* data, int len, char* chalMark); typedef void ipc_cb(void* data, int len, char* chalMark);
int kk_ipc_init(ipc_type type, ipc_cb cb, char* chalMark, char* ip); int kk_ipc_init(ipc_type type, ipc_cb cb, char* chalMark, char* ip);
int kk_ipc_deinit(ipc_type type); int kk_ipc_deinit(ipc_type type);
......
...@@ -133,16 +133,14 @@ uint64_t HAL_GetTime(void) ...@@ -133,16 +133,14 @@ uint64_t HAL_GetTime(void)
} }
uint64_t HAL_GetTimeMs(char *outStr) time_t HAL_GetTime_s(char *outStr)
{ {
uint64_t time_ms; time_t t;
struct timeval tv; t = time(NULL);
gettimeofday(&tv, NULL); sprintf(outStr,"%d",t);
time_ms = ((uint64_t)tv.tv_sec * (uint64_t)1000) + (tv.tv_usec / 1000 );
sprintf(outStr,"%lld",time_ms);
return time_ms; return t;
} }
......
...@@ -128,7 +128,7 @@ int kk_room_add(const char *name,const char *roomId) ...@@ -128,7 +128,7 @@ int kk_room_add(const char *name,const char *roomId)
values ('%s','%s');"; values ('%s','%s');";
_kk_area_lock(); _kk_area_lock();
ctx->roomNum++; ctx->roomNum++;
HAL_GetTimeMs(roomId); HAL_GetTime_s(roomId);
sqlCmd = sqlite3_mprintf(insertCmd,name,roomId); sqlCmd = sqlite3_mprintf(insertCmd,name,roomId);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
......
...@@ -164,7 +164,7 @@ int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devTy ...@@ -164,7 +164,7 @@ int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devTy
for(idx = 0; idx < num; idx++){ for(idx = 0; idx < num; idx++){
pProperty = dev_shadow->properties+idx; pProperty = dev_shadow->properties+idx;
INFO_PRINT("dm_mgr_properities_db_create pProperty->identifier:%s!!\n",pProperty->identifier); //INFO_PRINT("dm_mgr_properities_db_create pProperty->identifier:%s!!\n",pProperty->identifier);
if(pProperty){ if(pProperty){
if(pProperty->data_value.type == KK_TSL_DATA_TYPE_STRUCT){ if(pProperty->data_value.type == KK_TSL_DATA_TYPE_STRUCT){
kk_tsl_data_value_complex_t *complex_struct = NULL; kk_tsl_data_value_complex_t *complex_struct = NULL;
...@@ -201,6 +201,7 @@ int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devTy ...@@ -201,6 +201,7 @@ int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devTy
} }
} }
} }
return SUCCESS_RETURN;
} }
int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN], int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN],
...@@ -374,6 +375,25 @@ int dm_mgr_get_device_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLEN], _O ...@@ -374,6 +375,25 @@ int dm_mgr_get_device_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLEN], _O
return FAIL_RETURN; return FAIL_RETURN;
} }
int dm_mgr_get_device_by_productType(_IN_ char *productType, _OU_ dm_mgr_dev_node_t **node)
{
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
dm_mgr_dev_node_t *search_node = NULL;
list_for_each_entry(search_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
if ((strlen(search_node->deviceCode) == strlen(productType)) &&
(memcmp(search_node->deviceCode, productType, productType) == 0)) {
/* dm_log_debug("Device Found, Product Key: %s, Device Name: %s", product_key, device_name); */
if (node) {
*node = search_node;
}
return SUCCESS_RETURN;
}
}
ERROR_PRINT("Device Not Found, productType: %s\n", productType);
return FAIL_RETURN;
}
int dm_mgr_update_timestamp_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLEN],time_t timestamp) int dm_mgr_update_timestamp_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLEN],time_t timestamp)
{ {
...@@ -401,13 +421,13 @@ int dm_mgr_set_dev_onoffline(dm_mgr_dev_node_t *node,int isOffline) ...@@ -401,13 +421,13 @@ int dm_mgr_set_dev_onoffline(dm_mgr_dev_node_t *node,int isOffline)
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
if(isOffline){ if(isOffline){
INFO_PRINT("---------->dev timeout,send offline\n"); INFO_PRINT("[%s]dev timeout,send offline\n",__FUNCTION__);
node->isOffline = KK_DEV_OFFLINE; node->isOffline = KK_DEV_OFFLINE;
iotx_dm_dev_offline(node->devid); iotx_dm_dev_offline(node->devid);
kk_subDev_update_offline(node->isOffline,node->deviceCode); kk_subDev_update_offline(node->isOffline,node->deviceCode);
} }
else{ else{
INFO_PRINT("---------->dev online,send online\n"); INFO_PRINT("[%s]dev online,send online\n",__FUNCTION__);
node->isOffline = KK_DEV_ONLINE; node->isOffline = KK_DEV_ONLINE;
iotx_dm_dev_online(node->devid); iotx_dm_dev_online(node->devid);
if(node->dev_type == KK_DM_DEVICE_CCU){ if(node->dev_type == KK_DM_DEVICE_CCU){
...@@ -545,7 +565,7 @@ int dm_mgr_deinit(void) ...@@ -545,7 +565,7 @@ int dm_mgr_deinit(void)
const char DM_URI_THING_EVENT_POST[] = "/thing/event/%s/post"; const char DM_URI_THING_EVENT_POST[] = "/thing/event/%s/post";
const char DM_MSG_THING_UPSTREAM_REQUEST_PARAMS[] DM_READ_ONLY = "%s"; const char DM_MSG_THING_UPSTREAM_REQUEST_PARAMS[] DM_READ_ONLY = "%s";
static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid, static int _dm_mgr_upstream_request_assemble(_IN_ char *msgid, _IN_ int devid,
_IN_ char *identify, _IN_ char *identify,
_IN_ char *params, _IN_ int params_len, _IN_ char *method, _OU_ dm_msg_request_t *request) _IN_ char *params, _IN_ int params_len, _IN_ char *method, _OU_ dm_msg_request_t *request)
{ {
...@@ -570,7 +590,9 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid, ...@@ -570,7 +590,9 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid,
memset(payload_param, 0, paramLen); memset(payload_param, 0, paramLen);
HAL_Snprintf(payload_param, paramLen, DM_MSG_THING_UPSTREAM_REQUEST_PARAMS, params); HAL_Snprintf(payload_param, paramLen, DM_MSG_THING_UPSTREAM_REQUEST_PARAMS, params);
request->msgid = msgid;
memcpy(request->msgid,msgid,strlen(msgid));
request->devid = devid; request->devid = devid;
msgTypeLen = strlen(DM_URI_THING_EVENT_POST) + strlen(identify) + 1; msgTypeLen = strlen(DM_URI_THING_EVENT_POST) + strlen(identify) + 1;
request->msgTypeStr = malloc(msgTypeLen); request->msgTypeStr = malloc(msgTypeLen);
...@@ -590,7 +612,7 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid, ...@@ -590,7 +612,7 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid,
const char DM_URI_THING_SERVICE_POST[] = "/thing/service/%s_reply"; const char DM_URI_THING_SERVICE_POST[] = "/thing/service/%s_reply";
const char DM_MSG_THING_UPSTREAM_SERVICE_PARAMS[] DM_READ_ONLY = "%s"; const char DM_MSG_THING_UPSTREAM_SERVICE_PARAMS[] DM_READ_ONLY = "%s";
static int _dm_mgr_upstream_service_assemble(_IN_ int msgid, _IN_ int devid, static int _dm_mgr_upstream_service_assemble(_IN_ char* msgid, _IN_ int devid,
_IN_ char *identify, _IN_ char *identify,
_IN_ char *params, _IN_ int params_len, _IN_ char *method, _OU_ dm_msg_request_t *request) _IN_ char *params, _IN_ int params_len, _IN_ char *method, _OU_ dm_msg_request_t *request)
{ {
...@@ -615,7 +637,7 @@ static int _dm_mgr_upstream_service_assemble(_IN_ int msgid, _IN_ int devid, ...@@ -615,7 +637,7 @@ static int _dm_mgr_upstream_service_assemble(_IN_ int msgid, _IN_ int devid,
memset(payload_param, 0, paramLen); memset(payload_param, 0, paramLen);
HAL_Snprintf(payload_param, paramLen, DM_MSG_THING_UPSTREAM_REQUEST_PARAMS, params); HAL_Snprintf(payload_param, paramLen, DM_MSG_THING_UPSTREAM_REQUEST_PARAMS, params);
request->msgid = msgid; memcpy(request->msgid ,msgid,strlen(msgid));
request->devid = devid; request->devid = devid;
msgTypeLen = strlen(DM_URI_THING_SERVICE_POST) + strlen(identify) + 1; msgTypeLen = strlen(DM_URI_THING_SERVICE_POST) + strlen(identify) + 1;
request->msgTypeStr = malloc(msgTypeLen); request->msgTypeStr = malloc(msgTypeLen);
...@@ -637,6 +659,7 @@ static unsigned int g_report_id = 1; ...@@ -637,6 +659,7 @@ static unsigned int g_report_id = 1;
int iotx_report_id(void) int iotx_report_id(void)
{ {
return g_report_id++; return g_report_id++;
} }
...@@ -644,13 +667,15 @@ int dm_mgr_upstream_thing_property_post(_IN_ int devid, _IN_ char *payload, _IN_ ...@@ -644,13 +667,15 @@ int dm_mgr_upstream_thing_property_post(_IN_ int devid, _IN_ char *payload, _IN_
{ {
int res = 0; int res = 0;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0 || payload == NULL || payload_len <= 0) { if (devid < 0 || payload == NULL || payload_len <= 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
memset(&request, 0, sizeof(dm_msg_request_t)); memset(&request, 0, sizeof(dm_msg_request_t));
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, "property", sprintf(msgId,"%d",iotx_report_id());
res = _dm_mgr_upstream_request_assemble(msgId, devid, "property",
payload, payload_len, DM_URI_THING_EVENT_PROPERTY_POST_METHOD, &request); payload, payload_len, DM_URI_THING_EVENT_PROPERTY_POST_METHOD, &request);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
...@@ -669,6 +694,7 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_ ...@@ -669,6 +694,7 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_
_IN_ char *payload, _IN_ int payload_len) _IN_ char *payload, _IN_ int payload_len)
{ {
int res = 0; int res = 0;
char msgId[MSG_MAX_LEN] = {0};
dm_msg_request_t request; dm_msg_request_t request;
...@@ -677,7 +703,8 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_ ...@@ -677,7 +703,8 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
memset(&request, 0, sizeof(dm_msg_request_t)); memset(&request, 0, sizeof(dm_msg_request_t));
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid,identifier, sprintf(msgId,"%d",iotx_report_id());
res = _dm_mgr_upstream_request_assemble(msgId, devid,identifier,
payload, payload_len, method, &request); payload, payload_len, method, &request);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
...@@ -693,19 +720,49 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_ ...@@ -693,19 +720,49 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_
return res; return res;
} }
int dm_mgr_upstream_thing_event_post_ex(_IN_ int devid, _IN_ char *identifier, _IN_ int identifier_len, _IN_ char *method,
_IN_ char *payload, _IN_ int payload_len,const char *msgId)
{
int res = 0;
dm_msg_request_t request;
if (devid < 0 || identifier == NULL || identifier_len <= 0 ||
method == NULL || payload == NULL || payload_len <= 0) {
return INVALID_PARAMETER;
}
memset(&request, 0, sizeof(dm_msg_request_t));
res = _dm_mgr_upstream_request_assemble(msgId, devid,identifier,
payload, payload_len, method, &request);
if (res != SUCCESS_RETURN) {
return FAIL_RETURN;
}
/* Callback */
//request.callback = dm_client_thing_event_post_reply;
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
free(request.msgTypeStr);
free(request.params);
return res;
}
int dm_mgr_upstream_thing_service_post(_IN_ int devid, _IN_ char *identifier, _IN_ int identifier_len, _IN_ char *method, int dm_mgr_upstream_thing_service_post(_IN_ int devid, _IN_ char *identifier, _IN_ int identifier_len, _IN_ char *method,
_IN_ char *payload, _IN_ int payload_len) _IN_ char *payload, _IN_ int payload_len)
{ {
int res = 0; int res = 0;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0 || identifier == NULL || identifier_len <= 0 || if (devid < 0 || identifier == NULL || identifier_len <= 0 ||
method == NULL || payload == NULL || payload_len <= 0) { method == NULL || payload == NULL || payload_len <= 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
memset(&request, 0, sizeof(dm_msg_request_t)); memset(&request, 0, sizeof(dm_msg_request_t));
res = _dm_mgr_upstream_service_assemble(iotx_report_id(), devid,identifier, sprintf(msgId,"%d",iotx_report_id());
res = _dm_mgr_upstream_service_assemble(msgId, devid,identifier,
payload, payload_len, method, &request); payload, payload_len, method, &request);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
...@@ -799,7 +856,7 @@ int dm_mgr_upstream_thing_sub_register(_IN_ int devid) ...@@ -799,7 +856,7 @@ int dm_mgr_upstream_thing_sub_register(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
...@@ -826,7 +883,8 @@ int dm_mgr_upstream_thing_sub_register(_IN_ int devid) ...@@ -826,7 +883,8 @@ int dm_mgr_upstream_thing_sub_register(_IN_ int devid)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -836,9 +894,7 @@ int dm_mgr_upstream_thing_sub_register(_IN_ int devid) ...@@ -836,9 +894,7 @@ int dm_mgr_upstream_thing_sub_register(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -851,6 +907,7 @@ int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid) ...@@ -851,6 +907,7 @@ int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -879,7 +936,9 @@ int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid) ...@@ -879,7 +936,9 @@ int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -891,9 +950,6 @@ int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid) ...@@ -891,9 +950,6 @@ int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -906,6 +962,7 @@ int dm_mgr_upstream_thing_topo_add(_IN_ int devid) ...@@ -906,6 +962,7 @@ int dm_mgr_upstream_thing_topo_add(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -937,7 +994,9 @@ int dm_mgr_upstream_thing_topo_add(_IN_ int devid) ...@@ -937,7 +994,9 @@ int dm_mgr_upstream_thing_topo_add(_IN_ int devid)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -949,9 +1008,6 @@ int dm_mgr_upstream_thing_topo_add(_IN_ int devid) ...@@ -949,9 +1008,6 @@ int dm_mgr_upstream_thing_topo_add(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -964,6 +1020,7 @@ int dm_mgr_upstream_thing_topo_delete(_IN_ int devid) ...@@ -964,6 +1020,7 @@ int dm_mgr_upstream_thing_topo_delete(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return DM_INVALID_PARAMETER; return DM_INVALID_PARAMETER;
...@@ -994,7 +1051,9 @@ int dm_mgr_upstream_thing_topo_delete(_IN_ int devid) ...@@ -994,7 +1051,9 @@ int dm_mgr_upstream_thing_topo_delete(_IN_ int devid)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -1006,9 +1065,6 @@ int dm_mgr_upstream_thing_topo_delete(_IN_ int devid) ...@@ -1006,9 +1065,6 @@ int dm_mgr_upstream_thing_topo_delete(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -1019,7 +1075,7 @@ int dm_mgr_upstream_thing_topo_get(void) ...@@ -1019,7 +1075,7 @@ int dm_mgr_upstream_thing_topo_get(void)
{ {
int res = 0; int res = 0;
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
char msgId[MSG_MAX_LEN] = {0};
dm_msg_request_t request; dm_msg_request_t request;
memset(&request, 0, sizeof(dm_msg_request_t)); memset(&request, 0, sizeof(dm_msg_request_t));
...@@ -1039,7 +1095,9 @@ int dm_mgr_upstream_thing_topo_get(void) ...@@ -1039,7 +1095,9 @@ int dm_mgr_upstream_thing_topo_get(void)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = node->devid; request.devid = node->devid;
...@@ -1049,9 +1107,7 @@ int dm_mgr_upstream_thing_topo_get(void) ...@@ -1049,9 +1107,7 @@ int dm_mgr_upstream_thing_topo_get(void)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -1064,6 +1120,7 @@ int dm_mgr_upstream_thing_list_found(_IN_ int devid) ...@@ -1064,6 +1120,7 @@ int dm_mgr_upstream_thing_list_found(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -1092,7 +1149,9 @@ int dm_mgr_upstream_thing_list_found(_IN_ int devid) ...@@ -1092,7 +1149,9 @@ int dm_mgr_upstream_thing_list_found(_IN_ int devid)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -1102,9 +1161,7 @@ int dm_mgr_upstream_thing_list_found(_IN_ int devid) ...@@ -1102,9 +1161,7 @@ int dm_mgr_upstream_thing_list_found(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -1117,6 +1174,7 @@ int dm_mgr_ccu_status_cloud(_IN_ int devid) ...@@ -1117,6 +1174,7 @@ int dm_mgr_ccu_status_cloud(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -1139,10 +1197,11 @@ int dm_mgr_ccu_status_cloud(_IN_ int devid) ...@@ -1139,10 +1197,11 @@ int dm_mgr_ccu_status_cloud(_IN_ int devid)
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -1154,9 +1213,6 @@ int dm_mgr_ccu_status_cloud(_IN_ int devid) ...@@ -1154,9 +1213,6 @@ int dm_mgr_ccu_status_cloud(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -1169,12 +1225,14 @@ int dm_mgr_upstream_status_online(_IN_ int devid) ...@@ -1169,12 +1225,14 @@ int dm_mgr_upstream_status_online(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
memset(&request, 0, sizeof(dm_msg_request_t)); memset(&request, 0, sizeof(dm_msg_request_t));
res = dm_mgr_search_dev_by_devid(devid, &node); res = dm_mgr_search_dev_by_devid(devid, &node);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
...@@ -1205,7 +1263,9 @@ int dm_mgr_upstream_status_online(_IN_ int devid) ...@@ -1205,7 +1263,9 @@ int dm_mgr_upstream_status_online(_IN_ int devid)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -1217,9 +1277,6 @@ int dm_mgr_upstream_status_online(_IN_ int devid) ...@@ -1217,9 +1277,6 @@ int dm_mgr_upstream_status_online(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -1232,6 +1289,7 @@ int dm_mgr_upstream_status_offline(_IN_ int devid) ...@@ -1232,6 +1289,7 @@ int dm_mgr_upstream_status_offline(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -1265,7 +1323,9 @@ int dm_mgr_upstream_status_offline(_IN_ int devid) ...@@ -1265,7 +1323,9 @@ int dm_mgr_upstream_status_offline(_IN_ int devid)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -1277,9 +1337,6 @@ int dm_mgr_upstream_status_offline(_IN_ int devid) ...@@ -1277,9 +1337,6 @@ int dm_mgr_upstream_status_offline(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -1293,6 +1350,7 @@ int dm_mgr_upstream_combine_login(_IN_ int devid) ...@@ -1293,6 +1350,7 @@ int dm_mgr_upstream_combine_login(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -1321,7 +1379,9 @@ int dm_mgr_upstream_combine_login(_IN_ int devid) ...@@ -1321,7 +1379,9 @@ int dm_mgr_upstream_combine_login(_IN_ int devid)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -1333,9 +1393,6 @@ int dm_mgr_upstream_combine_login(_IN_ int devid) ...@@ -1333,9 +1393,6 @@ int dm_mgr_upstream_combine_login(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -1347,6 +1404,7 @@ int dm_mgr_upstream_combine_logout(_IN_ int devid) ...@@ -1347,6 +1404,7 @@ int dm_mgr_upstream_combine_logout(_IN_ int devid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -1375,7 +1433,9 @@ int dm_mgr_upstream_combine_logout(_IN_ int devid) ...@@ -1375,7 +1433,9 @@ int dm_mgr_upstream_combine_logout(_IN_ int devid)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -1388,9 +1448,6 @@ int dm_mgr_upstream_combine_logout(_IN_ int devid) ...@@ -1388,9 +1448,6 @@ int dm_mgr_upstream_combine_logout(_IN_ int devid)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
return res; return res;
...@@ -1402,6 +1459,7 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version) ...@@ -1402,6 +1459,7 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version)
int res = 0; int res = 0;
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_msg_request_t request; dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) { if (devid < 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -1428,7 +1486,9 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version) ...@@ -1428,7 +1486,9 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version)
} }
/* Get Msg ID */ /* Get Msg ID */
request.msgid = iotx_report_id(); sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */ /* Get Dev ID */
request.devid = devid; request.devid = devid;
...@@ -1441,9 +1501,6 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version) ...@@ -1441,9 +1501,6 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version)
/* Send Message To Cloud */ /* Send Message To Cloud */
res = dm_msg_request(&request,0); res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params); free(request.params);
free(request.msgTypeStr); free(request.msgTypeStr);
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#define KK_DM_GW_DEVICE_PRODUCT_CODE "2" #define KK_DM_GW_DEVICE_PRODUCT_CODE "2"
#define KK_DM_DEVICE_CCU_DEVICEID (0x00) #define KK_DM_DEVICE_CCU_DEVICEID (0x00)
#define MSG_MAX_LEN (64)
typedef struct { typedef struct {
int devid; int devid;
...@@ -40,7 +41,7 @@ typedef struct { ...@@ -40,7 +41,7 @@ typedef struct {
} dm_mgr_ctx; } dm_mgr_ctx;
typedef struct { typedef struct {
int msgid; char msgid[MSG_MAX_LEN];
int devid; int devid;
//const char *service_prefix; //const char *service_prefix;
//const char *service_name; //const char *service_name;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "kk_log.h" #include "kk_log.h"
const char DM_MSG_REQUEST[] DM_READ_ONLY = "{\"msgId\":\"%d\",\"version\":\"%s\",\"params\":%s,\"time\":\"%lu\",\"method\":\"%s\"}"; const char DM_MSG_REQUEST[] DM_READ_ONLY = "{\"msgId\":\"%s\",\"version\":\"%s\",\"params\":%s,\"time\":\"%lu\",\"method\":\"%s\"}";
const char DM_MSG_INFO[] DM_READ_ONLY = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}"; const char DM_MSG_INFO[] DM_READ_ONLY = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}";
void kk_sendData2app(void *info, void *payload,int isAsync){ void kk_sendData2app(void *info, void *payload,int isAsync){
...@@ -541,11 +541,12 @@ int dm_msg_request (_IN_ dm_msg_request_t *request,_IN_ int isAsync) ...@@ -541,11 +541,12 @@ int dm_msg_request (_IN_ dm_msg_request_t *request,_IN_ int isAsync)
} }
payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + request->params_len + strlen( payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + request->params_len + strlen(
request->method) + 1 + 20; request->method) + 1 + 20 + strlen(request->msgid);
payload = malloc(payload_len); payload = malloc(payload_len);
if (payload == NULL) { if (payload == NULL) {
return MEMORY_NOT_ENOUGH; return MEMORY_NOT_ENOUGH;
} }
printf("[%s][%d]----request->msgid:%s\n",__FUNCTION__,__LINE__,request->msgid);
memset(payload, 0, payload_len); memset(payload, 0, payload_len);
snprintf(payload, payload_len, DM_MSG_REQUEST, request->msgid, snprintf(payload, payload_len, DM_MSG_REQUEST, request->msgid,
DM_MSG_VERSION, request->params,HAL_GetTime(), request->method); DM_MSG_VERSION, request->params,HAL_GetTime(), request->method);
...@@ -782,7 +783,7 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier) ...@@ -782,7 +783,7 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier)
} }
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_tsl_t *dev_shadow) int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_tsl_t *dev_shadow,const char *msgId)
{ {
int res = 0; int res = 0;
int nums = 0; int nums = 0;
...@@ -791,7 +792,7 @@ int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_ts ...@@ -791,7 +792,7 @@ int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_ts
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
void *event = NULL; void *event = NULL;
char *method = NULL; char *method = NULL;
printf("msgId:%s\n",msgId);
if(deviceCode == NULL){ if(deviceCode == NULL){
return FAIL_RETURN; return FAIL_RETURN;
} }
...@@ -813,7 +814,7 @@ int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_ts ...@@ -813,7 +814,7 @@ int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_ts
free(payload); free(payload);
return FAIL_RETURN; return FAIL_RETURN;
} }
dm_mgr_upstream_thing_event_post(node->devid, identifier, strlen(identifier), method, payload, strlen(payload)); dm_mgr_upstream_thing_event_post_ex(node->devid, identifier, strlen(identifier), method, payload, strlen(payload),msgId);
free(method); free(method);
method = NULL; method = NULL;
free(payload); free(payload);
...@@ -1044,6 +1045,7 @@ int kk_msg_execute_property_set(const char *productCode,const char *deviceCode,c ...@@ -1044,6 +1045,7 @@ int kk_msg_execute_property_set(const char *productCode,const char *deviceCode,c
char *method = "thing.service.property.set"; char *method = "thing.service.property.set";
char *req_info = NULL,*payload = NULL; char *req_info = NULL,*payload = NULL;
int req_info_len = 0,payload_len = 0; int req_info_len = 0,payload_len = 0;
char msgId[MSG_MAX_LEN] = {0};
req_info_len = strlen(DM_MSG_INFO)+10+strlen(productCode)+strlen(productCode)+strlen(KK_THING_SERVICE_PROPERTY_SET)+1; req_info_len = strlen(DM_MSG_INFO)+10+strlen(productCode)+strlen(productCode)+strlen(KK_THING_SERVICE_PROPERTY_SET)+1;
req_info = malloc(req_info_len); req_info = malloc(req_info_len);
...@@ -1054,14 +1056,15 @@ int kk_msg_execute_property_set(const char *productCode,const char *deviceCode,c ...@@ -1054,14 +1056,15 @@ int kk_msg_execute_property_set(const char *productCode,const char *deviceCode,c
snprintf(req_info, req_info_len, DM_MSG_INFO, KK_THING_SERVICE_PROPERTY_SET,productCode, deviceCode); snprintf(req_info, req_info_len, DM_MSG_INFO, KK_THING_SERVICE_PROPERTY_SET,productCode, deviceCode);
payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + strlen(params) + strlen( payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + strlen(params) + strlen(
method) + 1 + 20; method) + 1 + 20 + sizeof(msgId);
payload = malloc(payload_len); payload = malloc(payload_len);
if (payload == NULL) { if (payload == NULL) {
free(req_info); free(req_info);
return MEMORY_NOT_ENOUGH; return MEMORY_NOT_ENOUGH;
} }
memset(payload, 0, payload_len); memset(payload, 0, payload_len);
snprintf(payload, payload_len, DM_MSG_REQUEST, iotx_report_id(), sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, params,HAL_GetTime(), method); DM_MSG_VERSION, params,HAL_GetTime(), method);
cJSON *root=cJSON_CreateObject(); cJSON *root=cJSON_CreateObject();
...@@ -1079,6 +1082,7 @@ int kk_msg_execute_property_set(const char *productCode,const char *deviceCode,c ...@@ -1079,6 +1082,7 @@ int kk_msg_execute_property_set(const char *productCode,const char *deviceCode,c
} }
int kk_msg_execute_property_get(dm_mgr_dev_node_t *node) int kk_msg_execute_property_get(dm_mgr_dev_node_t *node)
{ {
char *method = "thing.service.property.get"; char *method = "thing.service.property.get";
...@@ -1088,6 +1092,7 @@ int kk_msg_execute_property_get(dm_mgr_dev_node_t *node) ...@@ -1088,6 +1092,7 @@ int kk_msg_execute_property_get(dm_mgr_dev_node_t *node)
int needFree = 0; int needFree = 0;
int i = 0,j = 0,serviceNum = 0; int i = 0,j = 0,serviceNum = 0;
char *paramS = NULL; char *paramS = NULL;
char msgId[MSG_MAX_LEN] = {0};
if(node == NULL){ if(node == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -1126,14 +1131,15 @@ int kk_msg_execute_property_get(dm_mgr_dev_node_t *node) ...@@ -1126,14 +1131,15 @@ int kk_msg_execute_property_get(dm_mgr_dev_node_t *node)
} }
payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + strlen(paramS) + strlen( payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + strlen(paramS) + strlen(
method) + 1 + 20; method) + 1 + 20+sizeof(msgId);
payload = malloc(payload_len); payload = malloc(payload_len);
if (payload == NULL) { if (payload == NULL) {
free(req_info); free(req_info);
return MEMORY_NOT_ENOUGH; return MEMORY_NOT_ENOUGH;
} }
memset(payload, 0, payload_len); memset(payload, 0, payload_len);
snprintf(payload, payload_len, DM_MSG_REQUEST, iotx_report_id(), sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, paramS,HAL_GetTime(), method); DM_MSG_VERSION, paramS,HAL_GetTime(), method);
cJSON *root=cJSON_CreateObject(); cJSON *root=cJSON_CreateObject();
cJSON* infoObj = cJSON_Parse(req_info); cJSON* infoObj = cJSON_Parse(req_info);
...@@ -1141,7 +1147,6 @@ int kk_msg_execute_property_get(dm_mgr_dev_node_t *node) ...@@ -1141,7 +1147,6 @@ int kk_msg_execute_property_get(dm_mgr_dev_node_t *node)
cJSON_AddItemToObject(root, "info", infoObj); cJSON_AddItemToObject(root, "info", infoObj);
cJSON_AddItemToObject(root, "payload",payloadObj); cJSON_AddItemToObject(root, "payload",payloadObj);
void *buf = cJSON_Print(root); void *buf = cJSON_Print(root);
printf("------------->buf:%s\n",buf);
if(node->dev_type == KK_DM_DEVICE_GATEWAY) if(node->dev_type == KK_DM_DEVICE_GATEWAY)
kk_sendData2gw(buf, strlen(buf), node->deviceCode); kk_sendData2gw(buf, strlen(buf), node->deviceCode);
else else
...@@ -1177,4 +1182,161 @@ int kk_msg_parse_productType(char *str,char *productType) ...@@ -1177,4 +1182,161 @@ int kk_msg_parse_productType(char *str,char *productType)
} }
int kk_msg_execute_scene_set(const char* params,const char *fatherDeviceCode,int isUpdate)
{
int res = 0;
char *method = KK_THING_METHOD_ADDSCENC;
char *msgType = KK_THING_SERVICE_ADDSCENC;
char *req_info = NULL,*payload = NULL;
int req_info_len = 0,payload_len = 0;
dm_mgr_dev_node_t *node = NULL;
char msgId[MSG_MAX_LEN] = {0};
if(isUpdate){
method = KK_THING_METHOD_UPDATESCENC;
msgType = KK_THING_SERVICE_UPDATESCENC;
}
res = dm_mgr_get_device_by_devicecode(fatherDeviceCode,&node);
if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return FAIL_RETURN;
}
req_info_len = strlen(DM_MSG_INFO)+10+strlen(node->productCode)+strlen(fatherDeviceCode)+strlen(msgType)+1;
req_info = malloc(req_info_len);
if (req_info == NULL) {
return MEMORY_NOT_ENOUGH;
}
memset(req_info, 0, req_info_len);
snprintf(req_info, req_info_len, DM_MSG_INFO, msgType,node->productCode, fatherDeviceCode);
payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + strlen(params) + strlen(
method) + 1 + 20 + sizeof(msgId);
payload = malloc(payload_len);
if (payload == NULL) {
free(req_info);
return MEMORY_NOT_ENOUGH;
}
memset(payload, 0, payload_len);
sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, params,HAL_GetTime(), method);
cJSON *root=cJSON_CreateObject();
cJSON* infoObj = cJSON_Parse(req_info);
cJSON* payloadObj = cJSON_Parse(payload);
cJSON_AddItemToObject(root, "info", infoObj);
cJSON_AddItemToObject(root, "payload",payloadObj);
void *buf = cJSON_Print(root);
printf("----------------->buf:%s\n",buf);
kk_sendData2gw(buf, strlen(buf), fatherDeviceCode);
free(buf);
free(req_info);
free(payload);
cJSON_Delete(root);
return SUCCESS_RETURN;
}
int kk_msg_execute_scene_action(const char* params,const char *fatherDeviceCode)
{
int res = 0;
char *method = KK_THING_METHOD_EXECUTESCENE;
char *req_info = NULL,*payload = NULL;
int req_info_len = 0,payload_len = 0;
char msgId[MSG_MAX_LEN] = {0};
dm_mgr_dev_node_t *node = NULL;
res = dm_mgr_get_device_by_devicecode(fatherDeviceCode,&node);
if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return FAIL_RETURN;
}
req_info_len = strlen(DM_MSG_INFO)+10+strlen(node->productCode)+strlen(fatherDeviceCode)+strlen(KK_THING_SERVICE_EXECUTESCENE)+1;
req_info = malloc(req_info_len);
if (req_info == NULL) {
return MEMORY_NOT_ENOUGH;
}
memset(req_info, 0, req_info_len);
snprintf(req_info, req_info_len, DM_MSG_INFO, KK_THING_SERVICE_EXECUTESCENE,node->productCode, fatherDeviceCode);
payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + strlen(params) + strlen(
method) + 1 + 20 + sizeof(msgId);
payload = malloc(payload_len);
if (payload == NULL) {
free(req_info);
return MEMORY_NOT_ENOUGH;
}
memset(payload, 0, payload_len);
sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, params,HAL_GetTime(), method);
cJSON *root=cJSON_CreateObject();
cJSON* infoObj = cJSON_Parse(req_info);
cJSON* payloadObj = cJSON_Parse(payload);
cJSON_AddItemToObject(root, "info", infoObj);
cJSON_AddItemToObject(root, "payload",payloadObj);
void *buf = cJSON_Print(root);
printf("----------------->buf:%s\n",buf);
kk_sendData2gw(buf, strlen(buf), fatherDeviceCode);
free(buf);
free(req_info);
free(payload);
cJSON_Delete(root);
return SUCCESS_RETURN;
}
int kk_msg_execute_scene_delete(const char* params,const char *fatherDeviceCode)
{
int res = 0;
char *method = KK_THING_METHOD_DELETESCENC;
char *req_info = NULL,*payload = NULL;
int req_info_len = 0,payload_len = 0;
char msgId[MSG_MAX_LEN] = {0};
dm_mgr_dev_node_t *node = NULL;
res = dm_mgr_get_device_by_devicecode(fatherDeviceCode,&node);
if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return FAIL_RETURN;
}
req_info_len = strlen(DM_MSG_INFO)+10+strlen(node->productCode)+strlen(fatherDeviceCode)+strlen(KK_THING_SERVICE_DELETESCENC)+1;
req_info = malloc(req_info_len);
if (req_info == NULL) {
return MEMORY_NOT_ENOUGH;
}
memset(req_info, 0, req_info_len);
snprintf(req_info, req_info_len, DM_MSG_INFO, KK_THING_SERVICE_DELETESCENC,node->productCode, fatherDeviceCode);
payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + strlen(params) + strlen(
method) + 1 + 20 + sizeof(msgId);
payload = malloc(payload_len);
if (payload == NULL) {
free(req_info);
return MEMORY_NOT_ENOUGH;
}
memset(payload, 0, payload_len);
sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, params,HAL_GetTime(), method);
cJSON *root=cJSON_CreateObject();
cJSON* infoObj = cJSON_Parse(req_info);
cJSON* payloadObj = cJSON_Parse(payload);
cJSON_AddItemToObject(root, "info", infoObj);
cJSON_AddItemToObject(root, "payload",payloadObj);
void *buf = cJSON_Print(root);
printf("----------------->buf:%s\n",buf);
kk_sendData2gw(buf, strlen(buf), fatherDeviceCode);
free(buf);
free(req_info);
free(payload);
cJSON_Delete(root);
return SUCCESS_RETURN;
}
...@@ -73,6 +73,12 @@ const char DM_MSG_INFO[] DM_READ_ONLY; ...@@ -73,6 +73,12 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#define KK_THING_SERVICE_DELETESCENC "/thing/service/deleteScene" #define KK_THING_SERVICE_DELETESCENC "/thing/service/deleteScene"
#define KK_THING_SERVICE_UPDATESCENC "/thing/service/updateScene" #define KK_THING_SERVICE_UPDATESCENC "/thing/service/updateScene"
#define KK_THING_SERVICE_PROPERTY_GET_REPLY "/thing/service/property/get_reply" #define KK_THING_SERVICE_PROPERTY_GET_REPLY "/thing/service/property/get_reply"
#define KK_THING_SERVICE_EXECUTESCENE "/thing/service/executeScene"
#define KK_THING_METHOD_DELETESCENC "thing.service.deleteScene"
#define KK_THING_METHOD_UPDATESCENC "thing.service.updateScene"
#define KK_THING_METHOD_EXECUTESCENE "thing.service.executeScene"
#define KK_THING_METHOD_ADDSCENC "thing.service.addScene"
#define KK_THING_EVENT_MESSAGE "/thing/event/" #define KK_THING_EVENT_MESSAGE "/thing/event/"
#define KK_THING_EVENT_POST "/post" #define KK_THING_EVENT_POST "/post"
......
...@@ -541,7 +541,7 @@ static int kk_service_addKey_handle(const char *deviceCode,cJSON *param) ...@@ -541,7 +541,7 @@ static int kk_service_addKey_handle(const char *deviceCode,cJSON *param)
if(KeyEffectiveTime == NULL) return FAIL_RETURN;; if(KeyEffectiveTime == NULL) return FAIL_RETURN;;
cJSON *KeyExpiryTime = cJSON_GetObjectItem(param,MSG_KEYADD_KEYEXPIRE); cJSON *KeyExpiryTime = cJSON_GetObjectItem(param,MSG_KEYADD_KEYEXPIRE);
if(KeyExpiryTime == NULL) return FAIL_RETURN;; if(KeyExpiryTime == NULL) return FAIL_RETURN;;
HAL_GetTimeMs(keyId); HAL_GetTime_s(keyId);
kk_property_update_lockkeys(deviceCode,keyId,KeyType->valueint,KeyRole->valueint,IsValid->valueint, kk_property_update_lockkeys(deviceCode,keyId,KeyType->valueint,KeyRole->valueint,IsValid->valueint,
KeyName->valuestring,KeyEffectiveTime->valueint,KeyExpiryTime->valueint); KeyName->valuestring,KeyEffectiveTime->valueint,KeyExpiryTime->valueint);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYADD_NOTIFICATION_KEYID,NULL,keyId); kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYADD_NOTIFICATION_KEYID,NULL,keyId);
...@@ -625,65 +625,73 @@ static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param) ...@@ -625,65 +625,73 @@ static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int kk_service_addScene_handle(const char *deviceCode,cJSON *param) static int kk_service_addScene_handle(const char *deviceCode,cJSON *param,cJSON *msgId)
{ {
int res = 0; int res = 0;
char sceneId[32] = {0}; char sceneId[32] = {0};
kk_tsl_t *pSceneShadow = NULL; kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL){ if(deviceCode == NULL || param == NULL || msgId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *args = cJSON_GetObjectItem(param,MSG_SCENE_ARGS);
if(args == NULL) return FAIL_RETURN;
res = kk_scene_parse_addscene(args,sceneId,0); res = kk_scene_parse_addscene(param,sceneId,0);
if(res == SUCCESS_RETURN){ if(res == SUCCESS_RETURN){
pSceneShadow = kk_scene_shadow(); pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){ if(pSceneShadow != NULL){
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_ADDNOTIFICATION_SCENEID,NULL,sceneId); kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_ADDNOTIFICATION_SCENEID,NULL,sceneId);
dm_msg_scene_event_post(deviceCode,MSG_SCENE_ADDNOTIFICATION,pSceneShadow); dm_msg_scene_event_post(deviceCode,MSG_SCENE_ADDNOTIFICATION,pSceneShadow,msgId->valuestring);
} }
} }
return res; return res;
} }
static int kk_service_updateScene_handle(const char *deviceCode,cJSON *param) static int kk_service_updateScene_handle(const char *deviceCode,cJSON *param,cJSON *msgId)
{ {
int res = 0; int res = 0;
kk_tsl_t *pSceneShadow = NULL; kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL){ if(deviceCode == NULL || param == NULL || msgId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *args = cJSON_GetObjectItem(param,MSG_SCENE_ARGS); cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
if(args == NULL) return FAIL_RETURN;
cJSON *sceneId = cJSON_GetObjectItem(args,MSG_SCENE_SCENEID);
if(sceneId == NULL) return FAIL_RETURN; if(sceneId == NULL) return FAIL_RETURN;
res = kk_scene_parse_updatescene(args,sceneId->valuestring); res = kk_scene_parse_updatescene(param,sceneId->valuestring);
if(res == SUCCESS_RETURN){ if(res == SUCCESS_RETURN){
pSceneShadow = kk_scene_shadow(); pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){ if(pSceneShadow != NULL){
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_UPDATENOTIFICATION_SCENEID,NULL,sceneId->valuestring); kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_UPDATENOTIFICATION_SCENEID,NULL,sceneId->valuestring);
dm_msg_scene_event_post(deviceCode,MSG_SCENE_UPDATENOTIFICATION,pSceneShadow); dm_msg_scene_event_post(deviceCode,MSG_SCENE_UPDATENOTIFICATION,pSceneShadow,msgId->valuestring);
} }
} }
return res; return res;
} }
static int kk_service_deleteScene_handle(const char *deviceCode,cJSON *param) static int kk_service_deleteScene_handle(const char *deviceCode,cJSON *param,cJSON *msgId)
{ {
int res = 0; int res = 0;
kk_tsl_t *pSceneShadow = NULL; kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL){ char sceneIdBuf[16] = {0};
if(deviceCode == NULL || param == NULL || msgId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID); cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
if(sceneId == NULL) return FAIL_RETURN; if(sceneId == NULL) return FAIL_RETURN;
res = kk_scene_parse_deletescene(sceneId->valuestring); if(sceneId->valuestring == NULL){
sprintf(sceneIdBuf,"%d",sceneId->valueint);
res = kk_scene_parse_deletescene(sceneIdBuf);
}
else{
res = kk_scene_parse_deletescene(sceneId->valuestring);
}
if(res == SUCCESS_RETURN){ if(res == SUCCESS_RETURN){
pSceneShadow = kk_scene_shadow(); pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){ if(pSceneShadow != NULL){
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_DELETENOTIFICATION_SCENEID,NULL,sceneId->valuestring); if(strlen(sceneIdBuf) > 0){
dm_msg_scene_event_post(deviceCode,MSG_SCENE_DELETENOTIFICATION,pSceneShadow); kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_DELETENOTIFICATION_SCENEID,NULL,sceneIdBuf);
}
else{
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_DELETENOTIFICATION_SCENEID,NULL,sceneId->valuestring);
}
dm_msg_scene_event_post(deviceCode,MSG_SCENE_DELETENOTIFICATION,pSceneShadow,msgId->valuestring);
} }
} }
return res; return res;
...@@ -759,6 +767,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -759,6 +767,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *state = cJSON_GetObjectItem(paramStr, MSG_IOTClOUDSTATE_STR); cJSON *state = cJSON_GetObjectItem(paramStr, MSG_IOTClOUDSTATE_STR);
s_CloudStatus = atoi(state->valuestring); s_CloudStatus = atoi(state->valuestring);
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
dm_mgr_search_dev_by_devid(KK_DM_DEVICE_CCU_DEVICEID,&node); dm_mgr_search_dev_by_devid(KK_DM_DEVICE_CCU_DEVICEID,&node);
res = kk_tsl_set_value(kk_tsl_set_property_value,node->dev_shadow,KK_TSL_CCU_WANSTATE_IDENTIFIER,&s_CloudStatus,NULL); res = kk_tsl_set_value(kk_tsl_set_property_value,node->dev_shadow,KK_TSL_CCU_WANSTATE_IDENTIFIER,&s_CloudStatus,NULL);
...@@ -766,18 +775,23 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -766,18 +775,23 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
{ {
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res); ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
} }
res = kk_tsl_set_value(kk_tsl_set_property_value,node->dev_shadow,KK_TSL_CCU_IOTCLOUD_IDENTIFIER,&s_CloudStatus,NULL); res = kk_tsl_set_value(kk_tsl_set_property_value,node->dev_shadow,KK_TSL_CCU_IOTCLOUD_IDENTIFIER,&s_CloudStatus,NULL);
if(res != SUCCESS_RETURN) if(res != SUCCESS_RETURN)
{ {
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res); ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
} }
kk_property_db_update("CCU_66666"); kk_property_db_update("CCU_66666");
if(s_CloudStatus){ if(s_CloudStatus){
node->isOffline = KK_DEV_ONLINE; node->isOffline = KK_DEV_ONLINE;
iotx_dm_dev_online(KK_DM_DEVICE_CCU_DEVICEID);//first online,report the online status iotx_dm_dev_online(KK_DM_DEVICE_CCU_DEVICEID);//first online,report the online status
usleep(200000); usleep(200000);
dm_msg_ccu_property_post(node); dm_msg_ccu_property_post(node);
} }
}else if (strstr(typeJson->valuestring,KK_THING_OTA_DEVICE_UPGRADE)){ }else if (strstr(typeJson->valuestring,KK_THING_OTA_DEVICE_UPGRADE)){
INFO_PRINT("ota upgrade... \n"); INFO_PRINT("ota upgrade... \n");
kk_dm_ota_send(data, strlen(data)+1); kk_dm_ota_send(data, strlen(data)+1);
...@@ -864,17 +878,20 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -864,17 +878,20 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDSCENC) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDSCENC) == 0){
INFO_PRINT(" add scene \n"); INFO_PRINT(" add scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
kk_service_addScene_handle(deviceCode->valuestring,paramStr); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID);
kk_service_addScene_handle(deviceCode->valuestring,paramStr,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_UPDATESCENC) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_UPDATESCENC) == 0){
INFO_PRINT(" update scene \n"); INFO_PRINT(" update scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
kk_service_updateScene_handle(deviceCode->valuestring,paramStr); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID);
kk_service_updateScene_handle(deviceCode->valuestring,paramStr,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_DELETESCENC) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_DELETESCENC) == 0){
INFO_PRINT("delete scene \n"); INFO_PRINT("delete scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
kk_service_deleteScene_handle(deviceCode->valuestring,paramStr); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID);
kk_service_deleteScene_handle(deviceCode->valuestring,paramStr,msgId);
} }
else{ else{
INFO_PRINT("Error msgtype!!! \n"); INFO_PRINT("Error msgtype!!! \n");
...@@ -1591,10 +1608,6 @@ int _iotx_linkkit_slave_connect(int devid) ...@@ -1591,10 +1608,6 @@ int _iotx_linkkit_slave_connect(int devid)
iotx_linkkit_upstream_sync_callback_node_t *node = NULL; iotx_linkkit_upstream_sync_callback_node_t *node = NULL;
void *semaphore = NULL; void *semaphore = NULL;
/*if (ctx->is_connected == 0) {
dm_log_err("master isn't start");
return FAIL_RETURN;
}*/
if (devid <= 0) { if (devid <= 0) {
...@@ -1603,48 +1616,6 @@ int _iotx_linkkit_slave_connect(int devid) ...@@ -1603,48 +1616,6 @@ int _iotx_linkkit_slave_connect(int devid)
} }
/* Subdev Register */
/*res = kk_dm_subdev_register(devid);
if (res < SUCCESS_RETURN) {
return FAIL_RETURN;
}*/
#if 0
if (res > SUCCESS_RETURN) {
semaphore = HAL_SemaphoreCreate();
if (semaphore == NULL) {
return FAIL_RETURN;
}
msgid = res;
_iotx_linkkit_upstream_mutex_lock();
res = _iotx_linkkit_upstream_sync_callback_list_insert(msgid, semaphore, &node);
if (res != SUCCESS_RETURN) {
HAL_SemaphoreDestroy(semaphore);
_iotx_linkkit_upstream_mutex_unlock();
return FAIL_RETURN;
}
_iotx_linkkit_upstream_mutex_unlock();
res = HAL_SemaphoreWait(semaphore, IOTX_LINKKIT_SYNC_DEFAULT_TIMEOUT_MS);
if (res < SUCCESS_RETURN) {
_iotx_linkkit_upstream_mutex_lock();
_iotx_linkkit_upstream_sync_callback_list_remove(msgid);
_iotx_linkkit_upstream_mutex_unlock();
return FAIL_RETURN;
}
_iotx_linkkit_upstream_mutex_lock();
code = node->code;
_iotx_linkkit_upstream_sync_callback_list_remove(msgid);
if (code != SUCCESS_RETURN) {
_iotx_linkkit_upstream_mutex_unlock();
return FAIL_RETURN;
}
_iotx_linkkit_upstream_mutex_unlock();
}
#endif
/* Subdev Add Topo */ /* Subdev Add Topo */
res = kk_dm_subdev_topo_add(devid); res = kk_dm_subdev_topo_add(devid);
...@@ -1653,40 +1624,6 @@ int _iotx_linkkit_slave_connect(int devid) ...@@ -1653,40 +1624,6 @@ int _iotx_linkkit_slave_connect(int devid)
return FAIL_RETURN; return FAIL_RETURN;
} }
#if 0
semaphore = HAL_SemaphoreCreate();
if (semaphore == NULL) {
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
msgid = res;
_iotx_linkkit_upstream_mutex_lock();
res = _iotx_linkkit_upstream_sync_callback_list_insert(msgid, semaphore, &node);
if (res != SUCCESS_RETURN) {
HAL_SemaphoreDestroy(semaphore);
_iotx_linkkit_upstream_mutex_unlock();
return FAIL_RETURN;
}
_iotx_linkkit_upstream_mutex_unlock();
res = HAL_SemaphoreWait(semaphore, IOTX_LINKKIT_SYNC_DEFAULT_TIMEOUT_MS);
if (res < SUCCESS_RETURN) {
_iotx_linkkit_upstream_mutex_lock();
_iotx_linkkit_upstream_sync_callback_list_remove(msgid);
_iotx_linkkit_upstream_mutex_unlock();
return FAIL_RETURN;
}
_iotx_linkkit_upstream_mutex_lock();
code = node->code;
_iotx_linkkit_upstream_sync_callback_list_remove(msgid);
if (code != SUCCESS_RETURN) {
_iotx_linkkit_upstream_mutex_unlock();
return FAIL_RETURN;
}
_iotx_linkkit_upstream_mutex_unlock();
#endif
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -2267,19 +2204,21 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d ...@@ -2267,19 +2204,21 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d
} }
kk_subDev_update_productType(node->productType,deviceCode); kk_subDev_update_productType(node->productType,deviceCode);
} }
_iotx_linkkit_mutex_lock(); _iotx_linkkit_mutex_lock();
res = _iotx_linkkit_slave_connect(devid); res = _iotx_linkkit_slave_connect(devid);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
_iotx_linkkit_mutex_unlock(); _iotx_linkkit_mutex_unlock();
return FAIL_RETURN; return FAIL_RETURN;
} }
res = _iotx_linkkit_subdev_login(devid); res = _iotx_linkkit_subdev_login(devid);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
_iotx_linkkit_mutex_unlock(); _iotx_linkkit_mutex_unlock();
return FAIL_RETURN; return FAIL_RETURN;
} }
_iotx_linkkit_mutex_unlock(); _iotx_linkkit_mutex_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
......
...@@ -163,7 +163,7 @@ int kk_property_db_insert(const char *deviceCode,const char *identifier,kk_tsl_d ...@@ -163,7 +163,7 @@ int kk_property_db_insert(const char *deviceCode,const char *identifier,kk_tsl_d
if(_kk_check_property_exist(deviceCode,identifier) == 1) if(_kk_check_property_exist(deviceCode,identifier) == 1)
{ {
WARNING_PRINT("[%s][%d] DATA ALREADY EXIST!!!\n",__FUNCTION__,__LINE__); //WARNING_PRINT("[%s][%d] DATA ALREADY EXIST!!!\n",__FUNCTION__,__LINE__);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
_kk_property_db_lock(); _kk_property_db_lock();
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "kk_tsl_api.h" #include "kk_tsl_api.h"
#include "kk_sub_db.h" #include "kk_sub_db.h"
#include "kk_dm_mng.h" #include "kk_dm_mng.h"
#include "kk_scene_handle.h"
#include "sqlite3.h" #include "sqlite3.h"
#include "kk_log.h" #include "kk_log.h"
...@@ -25,7 +25,8 @@ typedef enum{ ...@@ -25,7 +25,8 @@ typedef enum{
DB_AUTH, DB_AUTH,
DB_DEVTYPE, DB_DEVTYPE,
DB_HEARTBEAT, DB_HEARTBEAT,
DB_PRODUCTTYPE DB_PRODUCTTYPE,
DB_SCENESUPPORT
}; };
static kk_subDb_ctx_t s_kk_subDb_ctx = {NULL,0,NULL}; static kk_subDb_ctx_t s_kk_subDb_ctx = {NULL,0,NULL};
...@@ -71,7 +72,8 @@ static int kk_subDev_db_Init(void) ...@@ -71,7 +72,8 @@ static int kk_subDev_db_Init(void)
isAuth INTEGER, \ isAuth INTEGER, \
devType INTEGER, \ devType INTEGER, \
heartbeat INTEGER,\ heartbeat INTEGER,\
productType varchar(33))"; productType varchar(33),\
sceneSupport INTEGER)";
char *pcErr; char *pcErr;
...@@ -187,8 +189,8 @@ static int _kk_check_subDev_exist(const char* deviceCode) ...@@ -187,8 +189,8 @@ static int _kk_check_subDev_exist(const char* deviceCode)
int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
char deviceCode[DEVICE_CODE_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char version[DEVICE_VERSION_MAXLEN],int heartbeat) char deviceCode[DEVICE_CODE_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char version[DEVICE_VERSION_MAXLEN],int heartbeat)
{ {
const char *insertCmd = "insert into SubDeviceInfo (idx,isOffline,productCode,deviceCode,mac,fatherDeviceCode,version,isAuth,devType,heartbeat) \ const char *insertCmd = "insert into SubDeviceInfo (idx,isOffline,productCode,deviceCode,mac,fatherDeviceCode,version,isAuth,devType,heartbeat,sceneSupport) \
values ('%d','%d', '%s','%s','%s','%s','%s','%d','%d','%d');"; values ('%d','%d', '%s','%s','%s','%s','%s','%d','%d','%d','%d');";
char *sqlCmd = NULL; char *sqlCmd = NULL;
int rc = 0; int rc = 0;
char *zErrMsg = 0; char *zErrMsg = 0;
...@@ -201,7 +203,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ ...@@ -201,7 +203,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
_kk_subDb_lock(); _kk_subDb_lock();
sqlCmd = sqlite3_mprintf(insertCmd,ctx->subDevNum,0,productCode,deviceCode,mac,fatherDeviceCode,version,0,devType,heartbeat); sqlCmd = sqlite3_mprintf(insertCmd,ctx->subDevNum,0,productCode,deviceCode,mac,fatherDeviceCode,version,0,devType,heartbeat,0);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){ if( rc != SQLITE_OK ){
...@@ -307,6 +309,29 @@ int kk_subDev_update_auth(int isAuth,const char *deviceCode) ...@@ -307,6 +309,29 @@ int kk_subDev_update_auth(int isAuth,const char *deviceCode)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_subDev_update_sceneSupport(int sceneSupport,const char *deviceCode)
{
char *sqlCmd = NULL;
int len =0;
int rc = 0;
char *zErrMsg = 0;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
_kk_subDb_lock();
sqlCmd = sqlite3_mprintf("UPDATE SubDeviceInfo SET sceneSupport=%d WHERE deviceCode= '%s'",sceneSupport,deviceCode);
INFO_PRINT("kk_subDev_update_sceneSupport sqlCmd:%s\n",sqlCmd);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
INFO_PRINT("Table updata data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_subDb_unlock();
return SUCCESS_RETURN;
}
int kk_subDev_send_property_get_from_db(void) int kk_subDev_send_property_get_from_db(void)
{ {
const char *searchCmd = "select * from SubDeviceInfo;"; const char *searchCmd = "select * from SubDeviceInfo;";
...@@ -376,6 +401,84 @@ int kk_subDev_send_property_get(const char *fatherDeviceCode) ...@@ -376,6 +401,84 @@ int kk_subDev_send_property_get(const char *fatherDeviceCode)
} }
int kk_subDev_check_scene_support(const char *deviceCode)
{
int res = 0;
sqlite3_stmt *stmt;
char *sqlCmd = NULL;
char *pDeviceCode = NULL;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
const char *searchCmd = "select * from SubDeviceInfo WHERE devType= '%d' and sceneSupport = '%d'";
if(deviceCode == NULL){
ERROR_PRINT("ERROR [%s][%d]\n",__FUNCTION__,__LINE__);
return INVALID_PARAMETER;
}
sqlCmd = sqlite3_mprintf(searchCmd,KK_DM_DEVICE_GATEWAY,1);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
//INFO_PRINT("total_column = %d\n", sqlite3_column_count(stmt));
while(sqlite3_step(stmt) == SQLITE_ROW){
pDeviceCode = sqlite3_column_text(stmt, DB_DEVICECODE);
if (!strcmp(deviceCode,pDeviceCode)) {
return 1;
}
}
sqlite3_finalize(stmt);
sqlite3_free(sqlCmd);
return 0;
}
int kk_subDev_set_action_by_productType(const char *productType,const char *sceneId,const char *propertyName,const char *propertyValue,const char *type)
{
int res = 0;
sqlite3_stmt *stmt;
char *sqlCmd = NULL;
char *pDeviceCode = NULL;
dm_mgr_dev_node_t *node = NULL;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
const char *searchCmd = "select * from SubDeviceInfo WHERE productType= '%s'";
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(productType == NULL){
ERROR_PRINT("ERROR [%s][%d]\n",__FUNCTION__,__LINE__);
return INVALID_PARAMETER;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
sqlCmd = sqlite3_mprintf(searchCmd,productType);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
//INFO_PRINT("total_column = %d\n", sqlite3_column_count(stmt));
while(sqlite3_step(stmt) == SQLITE_ROW){
pDeviceCode = sqlite3_column_text(stmt, DB_DEVICECODE);
res = dm_mgr_get_device_by_devicecode(pDeviceCode,&node);
if (res != SUCCESS_RETURN) {
continue;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(kk_subDev_check_scene_support(node->fatherDeviceCode) == 1){
kk_scene_action_detail_t info = {0};
memcpy(info.deviceCode,node->deviceCode,strlen(node->deviceCode));
memcpy(info.propertyName,propertyName,strlen(propertyName));
memcpy(info.propertyValue,propertyValue,strlen(propertyValue));
info.epNum = 1;
info.delay = 0;
kk_scene_action_add(node->fatherDeviceCode,sceneId,info);
res = kk_scene_insert_scene_action(type,node->deviceCode,info.epNum,
propertyName,propertyValue,info.delay,sceneId,node->fatherDeviceCode);
if(res != SUCCESS_RETURN){
INFO_PRINT("kk_subDev_set_action_by_productType fail!!!\n");
//return res;
continue;
}
}
}
sqlite3_finalize(stmt);
sqlite3_free(sqlCmd);
return SUCCESS_RETURN;
}
......
...@@ -49,6 +49,7 @@ static int _kk_filter_to_plat(const char* msgtype) ...@@ -49,6 +49,7 @@ static int _kk_filter_to_plat(const char* msgtype)
for(i =0; i < num; i++){ for(i =0; i < num; i++){
if(strstr(msgtype,g_filerToPlatTable[i])) if(strstr(msgtype,g_filerToPlatTable[i]))
{ {
INFO_PRINT("this msg do not send to platform!!!\n");
return 1; return 1;
} }
} }
...@@ -153,12 +154,13 @@ static int kk_property_set_data_check(cJSON * payload,const char *deviceCode){ ...@@ -153,12 +154,13 @@ static int kk_property_set_data_check(cJSON * payload,const char *deviceCode){
} }
} }
}else if(property->data_value.type == KK_TSL_DATA_TYPE_INT){ }
value = propertyItem->valueint; else if(property->data_value.type == KK_TSL_DATA_TYPE_INT){
if(value < property->data_value.mix ||value > property->data_value.max ){ value = propertyItem->valueint;
ERROR_PRINT("ERROR ------------>value:%d,mix:%d,max:%d\n",value,property->data_value.mix,property->data_value.max); if(value < property->data_value.mix ||value > property->data_value.max ){
return INVALID_PARAMETER; ERROR_PRINT("ERROR ------------>value:%d,mix:%d,max:%d\n",value,property->data_value.mix,property->data_value.max);
} return INVALID_PARAMETER;
}
} }
else if(property->data_value.type == KK_TSL_DATA_TYPE_TEXT){ else if(property->data_value.type == KK_TSL_DATA_TYPE_TEXT){
if(strlen(propertyItem->valuestring) > property->data_value.length ){ if(strlen(propertyItem->valuestring) > property->data_value.length ){
...@@ -313,23 +315,19 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -313,23 +315,19 @@ void kk_platMsg_handle(void* data, char* chalMark){
msgType = cJSON_GetObjectItem(info, MSG_TYPE_STR); msgType = cJSON_GetObjectItem(info, MSG_TYPE_STR);
info_dcode = cJSON_GetObjectItem(info, MSG_DEVICE_CODE_STR); info_dcode = cJSON_GetObjectItem(info, MSG_DEVICE_CODE_STR);
if (msgType == NULL || info_dcode == NULL){ if (msgType == NULL || info_dcode == NULL){
ERROR_PRINT("msgType info_dcode or jsonPay params are error\n"); ERROR_PRINT("msgType info_dcode or jsonPay params are error\n");
goto error; goto error;
} }
if (chalMark != NULL){ if (chalMark != NULL){
dm_mgr_update_timestamp_by_devicecode(chalMark,HAL_Uptimes()); dm_mgr_update_timestamp_by_devicecode(chalMark,HAL_Uptimes());
} }
dm_mgr_update_timestamp_by_devicecode(info_dcode->valuestring,HAL_Uptimes()); dm_mgr_update_timestamp_by_devicecode(info_dcode->valuestring,HAL_Uptimes());
if (strcmp(msgType->valuestring, KK_THING_TOPO_ADD_MSG)==0){ if (strcmp(msgType->valuestring, KK_THING_TOPO_ADD_MSG)==0){
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
proCode = cJSON_GetObjectItem(jsonPay, MSG_PRODUCT_CODE_STR); proCode = cJSON_GetObjectItem(jsonPay, MSG_PRODUCT_CODE_STR);
devCode = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR); devCode = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR);
mac = cJSON_GetObjectItem(jsonPay, "mac"); mac = cJSON_GetObjectItem(jsonPay, "mac");
...@@ -343,6 +341,10 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -343,6 +341,10 @@ void kk_platMsg_handle(void* data, char* chalMark){
char ccu_deviceCode[DEVICE_CODE_MAXLEN] = {0}; char ccu_deviceCode[DEVICE_CODE_MAXLEN] = {0};
HAL_GetDevice_Code(ccu_deviceCode); HAL_GetDevice_Code(ccu_deviceCode);
kk_mid_subdev_add(KK_DM_DEVICE_GATEWAY,proCode->valuestring,devCode->valuestring, mac->valuestring,ccu_deviceCode); kk_mid_subdev_add(KK_DM_DEVICE_GATEWAY,proCode->valuestring,devCode->valuestring, mac->valuestring,ccu_deviceCode);
cJSON * sceneSupportStr = cJSON_GetObjectItem(jsonPay, MSG_SCENE_SUPPORT);
if(sceneSupportStr != NULL&&sceneSupportStr->valueint == 1){
kk_subDev_update_sceneSupport(1,devCode->valuestring);
}
}else{ }else{
kk_mid_subdev_add(KK_DM_DEVICE_SUBDEV,proCode->valuestring,devCode->valuestring, mac->valuestring,info_dcode->valuestring); kk_mid_subdev_add(KK_DM_DEVICE_SUBDEV,proCode->valuestring,devCode->valuestring, mac->valuestring,info_dcode->valuestring);
} }
...@@ -352,7 +354,9 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -352,7 +354,9 @@ void kk_platMsg_handle(void* data, char* chalMark){
else if (strstr(msgType->valuestring, KK_THING_TOPO_BATCH_ADD_MSG) != NULL){ else if (strstr(msgType->valuestring, KK_THING_TOPO_BATCH_ADD_MSG) != NULL){
kk_ipc_send(IPC_MID2APP,data,strlen(data)); kk_ipc_send(IPC_MID2APP,data,strlen(data));
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
cJSON *devices = cJSON_GetObjectItem(jsonPay, MSG_TOPO_CHANGE_DEVICES_STR); cJSON *devices = cJSON_GetObjectItem(jsonPay, MSG_TOPO_CHANGE_DEVICES_STR);
if(devices == NULL) goto error;
cJSON * item = devices->child; cJSON * item = devices->child;
while(item != NULL){ while(item != NULL){
char *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR)->valuestring; char *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR)->valuestring;
...@@ -366,6 +370,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -366,6 +370,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
}else if (strstr(msgType->valuestring, KK_THING_PROPERTY_POST) != NULL){ }else if (strstr(msgType->valuestring, KK_THING_PROPERTY_POST) != NULL){
INFO_PRINT("save property and send to cloud \n"); INFO_PRINT("save property and send to cloud \n");
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
char* outstr = cJSON_Print(payload); char* outstr = cJSON_Print(payload);
dm_mgr_dev_node_t *search_node = NULL; dm_mgr_dev_node_t *search_node = NULL;
dm_mgr_get_device_by_devicecode(info_dcode->valuestring,&search_node); dm_mgr_get_device_by_devicecode(info_dcode->valuestring,&search_node);
...@@ -380,6 +385,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -380,6 +385,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
}else if(strstr(msgType->valuestring, KK_THING_TOPO_DELETE_MSG) != NULL){ }else if(strstr(msgType->valuestring, KK_THING_TOPO_DELETE_MSG) != NULL){
INFO_PRINT("kk_platMsg_handle data: handle delete\n"); INFO_PRINT("kk_platMsg_handle data: handle delete\n");
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
devCode = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR); devCode = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR);
kk_ipc_send(IPC_MID2APP,data,strlen(data)+1); kk_ipc_send(IPC_MID2APP,data,strlen(data)+1);
dm_mgr_subdev_delete(devCode->valuestring); dm_mgr_subdev_delete(devCode->valuestring);
...@@ -392,6 +398,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -392,6 +398,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
char tmpStr[128] = {0}; char tmpStr[128] = {0};
cJSON * itemStr = NULL; cJSON * itemStr = NULL;
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
res = dm_mgr_get_device_by_devicecode(info_dcode->valuestring,&node); res = dm_mgr_get_device_by_devicecode(info_dcode->valuestring,&node);
if (res < SUCCESS_RETURN) { if (res < SUCCESS_RETURN) {
goto error; goto error;
...@@ -408,7 +415,6 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -408,7 +415,6 @@ void kk_platMsg_handle(void* data, char* chalMark){
eventItem->output_data_number > 0){ eventItem->output_data_number > 0){
int index = 0; int index = 0;
kk_tsl_data_t *itemData = NULL; kk_tsl_data_t *itemData = NULL;
for(index = 0; index < eventItem->output_data_number;index++){ for(index = 0; index < eventItem->output_data_number;index++){
itemStr = cJSON_GetObjectItem(jsonPay, eventItem->identifier); itemStr = cJSON_GetObjectItem(jsonPay, eventItem->identifier);
itemData = eventItem->output_datas + index; itemData = eventItem->output_datas + index;
...@@ -416,7 +422,20 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -416,7 +422,20 @@ void kk_platMsg_handle(void* data, char* chalMark){
memset(tmpStr,0x0,sizeof(tmpStr)); memset(tmpStr,0x0,sizeof(tmpStr));
sprintf(tmpStr,"%s.%s",eventItem->identifier,itemData->identifier); sprintf(tmpStr,"%s.%s",eventItem->identifier,itemData->identifier);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,&itemStr->valueint,NULL); if(itemData->data_value.type == KK_TSL_DATA_TYPE_INT||
itemData->data_value.type == KK_TSL_DATA_TYPE_ENUM||
itemData->data_value.type == KK_TSL_DATA_TYPE_BOOL){
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,&itemStr->valueint,NULL);
}
else if(itemData->data_value.type == KK_TSL_DATA_TYPE_FLOAT ||
itemData->data_value.type == KK_TSL_DATA_TYPE_DOUBLE){
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,&itemStr->valuedouble,NULL);
}
else if(itemData->data_value.type == KK_TSL_DATA_TYPE_TEXT ||
itemData->data_value.type == KK_TSL_DATA_TYPE_DATE){
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,NULL,itemStr->valuestring);
}
INFO_PRINT("kk_platMsg_handle data: event post\n"); INFO_PRINT("kk_platMsg_handle data: event post\n");
dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier); dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier);
kk_scene_iftt_check(info_dcode->valuestring,jsonPay); kk_scene_iftt_check(info_dcode->valuestring,jsonPay);
...@@ -426,8 +445,20 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -426,8 +445,20 @@ void kk_platMsg_handle(void* data, char* chalMark){
if(itemDataIdentifier != NULL){ if(itemDataIdentifier != NULL){
memset(tmpStr,0x0,sizeof(tmpStr)); memset(tmpStr,0x0,sizeof(tmpStr));
sprintf(tmpStr,"%s.%s",eventItem->identifier,itemData->identifier); sprintf(tmpStr,"%s.%s",eventItem->identifier,itemData->identifier);
if(itemData->data_value.type == KK_TSL_DATA_TYPE_INT||
itemData->data_value.type == KK_TSL_DATA_TYPE_ENUM||
itemData->data_value.type == KK_TSL_DATA_TYPE_BOOL){
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,&itemDataIdentifier->valueint,NULL);
}
else if(itemData->data_value.type == KK_TSL_DATA_TYPE_FLOAT ||
itemData->data_value.type == KK_TSL_DATA_TYPE_DOUBLE){
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,&itemDataIdentifier->valuedouble,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,&itemDataIdentifier->valueint,NULL); }
else if(itemData->data_value.type == KK_TSL_DATA_TYPE_TEXT ||
itemData->data_value.type == KK_TSL_DATA_TYPE_DATE){
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,NULL,itemDataIdentifier->valuestring);
}
INFO_PRINT("kk_platMsg_handle data: event post\n"); INFO_PRINT("kk_platMsg_handle data: event post\n");
dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier); dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier);
kk_scene_iftt_check(info_dcode->valuestring,jsonPay); kk_scene_iftt_check(info_dcode->valuestring,jsonPay);
...@@ -452,6 +483,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -452,6 +483,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
else if(strstr(msgType->valuestring, KK_THING_TOPO_BATCH_DELETE_MSG) != NULL){ else if(strstr(msgType->valuestring, KK_THING_TOPO_BATCH_DELETE_MSG) != NULL){
kk_ipc_send(IPC_MID2APP,data,strlen(data)); kk_ipc_send(IPC_MID2APP,data,strlen(data));
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
cJSON *devices = cJSON_GetObjectItem(jsonPay, MSG_TOPO_CHANGE_DEVICES_STR); cJSON *devices = cJSON_GetObjectItem(jsonPay, MSG_TOPO_CHANGE_DEVICES_STR);
cJSON * item = devices->child; cJSON * item = devices->child;
while(item != NULL){ while(item != NULL){
...@@ -468,7 +500,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -468,7 +500,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
res = dm_mgr_get_device_by_devicecode(info_dcode->valuestring,&node); res = dm_mgr_get_device_by_devicecode(info_dcode->valuestring,&node);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res); ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return; goto error;
} }
/*开机先获取网关属性,网关返回relay,置网关状态在线*/ /*开机先获取网关属性,网关返回relay,置网关状态在线*/
if(node->dev_type == KK_DM_DEVICE_GATEWAY){ if(node->dev_type == KK_DM_DEVICE_GATEWAY){
...@@ -514,13 +546,6 @@ void kk_platMsg_dispatch(void) ...@@ -514,13 +546,6 @@ void kk_platMsg_dispatch(void)
} }
time_t getSysTime(){
time_t t;
t = time(NULL);
return t;
}
typedef struct { typedef struct {
int auto_add_subdev; int auto_add_subdev;
int master_devid; int master_devid;
......
...@@ -15,7 +15,6 @@ typedef struct { ...@@ -15,7 +15,6 @@ typedef struct {
void *mutex; void *mutex;
sqlite3 *pDb; sqlite3 *pDb;
void *s_scene_thread; void *s_scene_thread;
} kk_scene_ctx_t; } kk_scene_ctx_t;
...@@ -59,10 +58,50 @@ typedef enum{ ...@@ -59,10 +58,50 @@ typedef enum{
DB_SCENEACTION_PROPERTYVALUE, DB_SCENEACTION_PROPERTYVALUE,
DB_SCENEACTION_DELAY, DB_SCENEACTION_DELAY,
DB_SCENEACTION_SCENEID, DB_SCENEACTION_SCENEID,
DB_SCENEACTION_GWDEVICECODE,
}; };
static kk_scene_action_t *p_kk_scene_action = NULL;
static kk_scene_ctx_t s_kk_scene_ctx = {NULL}; static kk_scene_ctx_t s_kk_scene_ctx = {NULL};
static int kk_scene_check_value_ex(const char * compareType,const char * compareValue1,const char * compareValue2)
{
int res = FAIL_RETURN;
int type = 0;
int ivalue = 0;
int itemValue = 0;
double dvalue = 0;
double ditemValue = 0;
if(compareType == NULL || compareValue1 == NULL ||compareValue2 == NULL){
ERROR_PRINT("[%d]kk_scene_check_value fail!!!\n",__LINE__);
return INVALID_PARAMETER;
}
if(!strcmp(compareType,"=") && !strcmp(compareValue1,compareValue2)){
res = 0;
}
else if(!strcmp(compareType,">") && strcmp(compareValue1,compareValue2) > 0){
res = 0;
}
else if(!strcmp(compareType,">=") && strcmp(compareValue1,compareValue2) >= 0){
res = 0;
}
else if(!strcmp(compareType,"<=") && strcmp(compareValue1,compareValue2) <= 0){
res = 0;
}
else if(!strcmp(compareType,"<") && strcmp(compareValue1,compareValue2) < 0){
res = 0;
}
return res;
}
static kk_scene_ctx_t *_kk_scene_get_ctx(void) static kk_scene_ctx_t *_kk_scene_get_ctx(void)
{ {
return &s_kk_scene_ctx; return &s_kk_scene_ctx;
...@@ -154,7 +193,8 @@ static int _kk_scene_db_init(void) ...@@ -154,7 +193,8 @@ static int _kk_scene_db_init(void)
propertyName varchar(255), \ propertyName varchar(255), \
propertyValue varchar(255), \ propertyValue varchar(255), \
delay INTEGER, \ delay INTEGER, \
sceneId varchar(255))"; sceneId varchar(255),\
gwdeviceCode varchar(255))";
if (sqlite3_exec(ctx->pDb, pSceneActionTable, NULL, NULL, &pcErr) != SQLITE_OK) if (sqlite3_exec(ctx->pDb, pSceneActionTable, NULL, NULL, &pcErr) != SQLITE_OK)
...@@ -434,20 +474,148 @@ static int kk_scene_insert_scene_condition(const char* type,int startTime,int en ...@@ -434,20 +474,148 @@ static int kk_scene_insert_scene_condition(const char* type,int startTime,int en
} }
static int kk_scene_action_info_add(kk_scene_action_info_ex_t **head,kk_scene_action_detail_t detail)
{
int len;
kk_scene_action_info_ex_t *ptr,*pre;
ptr = pre = *head;
while(ptr!=NULL){
pre = ptr;
ptr = ptr->next;
}
ptr = (kk_scene_action_info_ex_t*)malloc(sizeof(kk_scene_action_info_ex_t));
if(ptr == NULL){
return FAIL_RETURN;
}
//printf("kk_scene_action_add 11 add:%p\n",ptr);
memset(ptr,0,sizeof(kk_scene_action_info_ex_t));
memcpy(&ptr->info,&detail,sizeof(kk_scene_action_detail_t));
if(*head==NULL){
*head = ptr;
}else{
pre->next = ptr;
}
static int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epNum,const char* propertyName, return SUCCESS_RETURN;
const char* propertyValue,int delay,const char* sceneId) }
int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_action_detail_t detail)
{
int len;
kk_scene_action_t *ptr,*pre;
ptr = pre = p_kk_scene_action;
if(gwdeviceCode == NULL || sceneId == NULL){
return FAIL_RETURN;
}
while(ptr!=NULL){
pre = ptr;
if(strcmp(ptr->gwdeviceCode,gwdeviceCode) == 0){
kk_scene_action_info_add(&ptr->actionInfo,detail);
return SUCCESS_RETURN;
}
ptr = ptr->next;
}
ptr = (kk_scene_action_t*)malloc(sizeof(kk_scene_action_t));
if(ptr == NULL){
return FAIL_RETURN;
}
//printf("kk_scene_action_add add:%p\n",ptr);
memset(ptr,0,sizeof(kk_scene_action_t));
memcpy(ptr->gwdeviceCode,gwdeviceCode,strlen(gwdeviceCode));
memcpy(ptr->sceneId,sceneId,strlen(sceneId));
kk_scene_action_info_add(&ptr->actionInfo,detail);
if(p_kk_scene_action==NULL){
p_kk_scene_action = ptr;
}else{
pre->next = ptr;
}
return SUCCESS_RETURN;
}
static int kk_scene_action_free(void)
{
int len;
kk_scene_action_t *ptr,*pnext;
kk_scene_action_info_ex_t *actionTemp = NULL;
ptr = p_kk_scene_action;
while(ptr){
pnext = ptr->next;
actionTemp = ptr->actionInfo;
while(actionTemp != NULL){
kk_scene_action_info_ex_t *ptemp = actionTemp->next;
//printf("kk_scene_action_free free:%p\n",actionTemp);
free(actionTemp);
actionTemp = NULL;
actionTemp = ptemp;
}
//printf("kk_scene_action_free free ptr:%p\n",ptr);
free(ptr);
ptr = NULL;
ptr = pnext;
}
p_kk_scene_action = NULL;
return SUCCESS_RETURN;
}
int kk_scene_action_info_send(int isUpdate)
{
kk_scene_action_t *ptr = p_kk_scene_action;
kk_scene_action_info_ex_t *ptmp = NULL;
if(ptr == NULL){
return FAIL_RETURN;
}
while(ptr){
cJSON *root=cJSON_CreateObject();
cJSON *array = cJSON_CreateArray();
cJSON_AddStringToObject(root,MSG_SCENE_SCENEID,ptr->sceneId);
ptmp = ptr->actionInfo;
while(ptr->actionInfo){
cJSON *info=cJSON_CreateObject();
cJSON_AddStringToObject(info,MSG_DEVICE_CODE_STR,ptr->actionInfo->info.deviceCode);
cJSON_AddStringToObject(info,MSG_SCENE_PROPERTYNAME,ptr->actionInfo->info.propertyName);
cJSON_AddStringToObject(info,MSG_SCENE_PROPERTYVALUE,ptr->actionInfo->info.propertyValue);
cJSON_AddNumberToObject(info,MSG_SCENE_DELAY,ptr->actionInfo->info.delay);
cJSON_AddNumberToObject(info,MSG_SCENE_EPNUM,ptr->actionInfo->info.epNum);
cJSON_AddItemToArray(array,info);
ptr->actionInfo = ptr->actionInfo->next;
}
ptr->actionInfo = ptmp;
cJSON_AddItemToObject(root,MSG_SCENE_ACTIONS,array);
char *out=cJSON_Print(root);
//printf("out:%s\n",out);
kk_msg_execute_scene_set(out,ptr->gwdeviceCode,isUpdate);
cJSON_Delete(root);
free(out);
ptr = ptr->next;
}
kk_scene_action_free();
return SUCCESS_RETURN;
}
int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epNum,const char* propertyName,
const char* propertyValue,int delay,const char* sceneId,const char *gwdeviceCode)
{ {
int res = 0; int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL; char *sqlCmd = NULL;
char *zErrMsg = 0; char *zErrMsg = 0;
const char *insertCmd = "insert into SceneActionInfo (type, deviceCode,epNum,propertyName,propertyValue,delay,sceneId) \ const char *insertCmd = "insert into SceneActionInfo (type, deviceCode,epNum,propertyName,propertyValue,delay,sceneId,gwdeviceCode) \
values ('%s','%s','%d','%s','%s','%d','%s');"; values ('%s','%s','%d','%s','%s','%d','%s','%s');";
_kk_scene_lock(); _kk_scene_lock();
sqlCmd = sqlite3_mprintf(insertCmd,type,deviceCode,epNum,propertyName,propertyValue,delay,sceneId); sqlCmd = sqlite3_mprintf(insertCmd,type,deviceCode,epNum,propertyName,propertyValue,delay,sceneId,gwdeviceCode);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){ if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg); ERROR_PRINT("SQL error: %s\n", zErrMsg);
...@@ -535,8 +703,40 @@ int kk_scene_delete_scene_action(const char *sceneId) ...@@ -535,8 +703,40 @@ int kk_scene_delete_scene_action(const char *sceneId)
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL; char *sqlCmd = NULL;
char *zErrMsg = 0; char *zErrMsg = 0;
const char *deleteCmd = "delete from SceneActionInfo where sceneId = '%s';"; char *gwdeviceCode = NULL;
char gwdevice[][DEVICE_CODE_MAXLEN] = {0};
int idx=0,num = 0;
sqlite3_stmt *stmt;
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE sceneId = '%s'",sceneId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
next:
while(sqlite3_step(stmt) == SQLITE_ROW){
gwdeviceCode = sqlite3_column_text(stmt,DB_SCENEACTION_GWDEVICECODE);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(kk_subDev_check_scene_support(gwdeviceCode) == 1){
for(idx = 0; idx < num;idx++){
if(!strcmp(gwdevice[idx],gwdeviceCode)){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
goto next;
}
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memcpy(gwdevice[num],gwdeviceCode,strlen(gwdeviceCode));
num++;
cJSON *root=cJSON_CreateObject();
cJSON_AddStringToObject(root,MSG_SCENE_SCENEID,sceneId);
char *out=cJSON_Print(root);
res = kk_msg_execute_scene_delete(out,gwdeviceCode);
cJSON_Delete(root);
free(out);
}
}
sqlite3_finalize(stmt);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
const char *deleteCmd = "delete from SceneActionInfo where sceneId = '%s';";
_kk_scene_lock(); _kk_scene_lock();
sqlCmd = sqlite3_mprintf(deleteCmd,sceneId); sqlCmd = sqlite3_mprintf(deleteCmd,sceneId);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
...@@ -551,7 +751,30 @@ int kk_scene_delete_scene_action(const char *sceneId) ...@@ -551,7 +751,30 @@ int kk_scene_delete_scene_action(const char *sceneId)
_kk_scene_unlock(); _kk_scene_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,const char *sceneId)
{
int res = FAIL_RETURN;
if(type == NULL || item == NULL || sceneId == NULL){
return INVALID_PARAMETER;
}
cJSON *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR);
if(deviceCode == NULL) return FAIL_RETURN;
cJSON *epNum = cJSON_GetObjectItem(item,MSG_SCENE_EPNUM);
if(epNum == NULL) return FAIL_RETURN;
cJSON *propertyName = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYNAME);
if(propertyName == NULL) return FAIL_RETURN;
cJSON *compareType = cJSON_GetObjectItem(item,MSG_SCENE_COMPARETYPE);
if(compareType == NULL) return FAIL_RETURN;
cJSON *compareValue = cJSON_GetObjectItem(item,MSG_SCENE_COMPAREVALUE);
if(compareValue == NULL) return FAIL_RETURN;
res = kk_scene_insert_scene_trigger(type,deviceCode->valuestring,deviceCode->valueint,
propertyName->valuestring,compareType->valuestring,compareValue->valuestring,sceneId);
if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_scene_parse_scene_trigger fail!!!\n");
}
return res;
}
int kk_scene_parse_scene_trigger(const cJSON* str,const char *sceneId) int kk_scene_parse_scene_trigger(const cJSON* str,const char *sceneId)
{ {
...@@ -568,18 +791,7 @@ int kk_scene_parse_scene_trigger(const cJSON* str,const char *sceneId) ...@@ -568,18 +791,7 @@ int kk_scene_parse_scene_trigger(const cJSON* str,const char *sceneId)
while(item != NULL){ while(item != NULL){
cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE); cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE);
if(type == NULL) return FAIL_RETURN; if(type == NULL) return FAIL_RETURN;
cJSON *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR); res = kk_scene_parse_trigger_detail(type->valuestring,item,sceneId);
if(deviceCode == NULL) return FAIL_RETURN;
cJSON *epNum = cJSON_GetObjectItem(item,MSG_SCENE_EPNUM);
if(epNum == NULL) return FAIL_RETURN;
cJSON *propertyName = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYNAME);
if(propertyName == NULL) return FAIL_RETURN;
cJSON *compareType = cJSON_GetObjectItem(item,MSG_SCENE_COMPARETYPE);
if(compareType == NULL) return FAIL_RETURN;
cJSON *compareValue = cJSON_GetObjectItem(item,MSG_SCENE_COMPAREVALUE);
if(compareValue == NULL) return FAIL_RETURN;
res = kk_scene_insert_scene_trigger(type->valuestring,deviceCode->valuestring,deviceCode->valueint,
propertyName->valuestring,compareType->valuestring,compareValue->valuestring,sceneId);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_scene_parse_scene_trigger fail!!!\n"); ERROR_PRINT("kk_scene_parse_scene_trigger fail!!!\n");
return res; return res;
...@@ -690,24 +902,29 @@ int kk_scene_parse_scene_condition(const cJSON* str,const char *sceneId) ...@@ -690,24 +902,29 @@ int kk_scene_parse_scene_condition(const cJSON* str,const char *sceneId)
while(item != NULL){ while(item != NULL){
cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE); cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE);
if(type == NULL) return FAIL_RETURN; if(type == NULL) return FAIL_RETURN;
if(!strcmp("condition/timeRange",type->valuestring)){
cJSON *startTime = cJSON_GetObjectItem(item,MSG_SCENE_STARTTIME); cJSON *startTime = cJSON_GetObjectItem(item,MSG_SCENE_STARTTIME);
if(startTime == NULL) return FAIL_RETURN; if(startTime == NULL) return FAIL_RETURN;
cJSON *endTime = cJSON_GetObjectItem(item,MSG_SCENE_ENDTIME); cJSON *endTime = cJSON_GetObjectItem(item,MSG_SCENE_ENDTIME);
if(endTime == NULL) return FAIL_RETURN; if(endTime == NULL) return FAIL_RETURN;
cJSON *crossday = cJSON_GetObjectItem(item,MSG_SCENE_CROSSDAY); //cJSON *crossday = cJSON_GetObjectItem(item,MSG_SCENE_CROSSDAY);
if(crossday == NULL) return FAIL_RETURN; //if(crossday == NULL) return FAIL_RETURN;
cJSON *repeatday = cJSON_GetObjectItem(item,MSG_SCENE_REPEATDAYS); cJSON *repeatday = cJSON_GetObjectItem(item,MSG_SCENE_REPEATDAYS);
if(repeatday == NULL) return FAIL_RETURN; if(repeatday == NULL) return FAIL_RETURN;
weekflag = kk_scene_parse_repeatday(repeatday); weekflag = kk_scene_parse_repeatday(repeatday);
if(!strcmp("timeRange",type->valuestring)){
kk_scene_push_timer_info(startTime->valueint,endTime->valueint,weekflag,sceneId); kk_scene_push_timer_info(startTime->valueint,endTime->valueint,weekflag,sceneId);
} res = kk_scene_insert_scene_condition(type->valuestring,startTime->valueint,endTime->valueint,
res = kk_scene_insert_scene_condition(type->valuestring,startTime->valueint,endTime->valueint, 0,weekflag,sceneId);
crossday->valueint,weekflag,sceneId); if(res != SUCCESS_RETURN){
if(res != SUCCESS_RETURN){ INFO_PRINT("kk_scene_insert_scene_condition fail!!!\n");
INFO_PRINT("kk_scene_insert_scene_condition fail!!!\n"); return res;
return res; }
}
else if(!strcmp("condition",type->valuestring)){
kk_scene_parse_trigger_detail(type->valuestring,item,sceneId);
}
else{
INFO_PRINT("kk_scene_parse_scene_condition wrong type!!!\n");
} }
item = item->next; item = item->next;
} }
...@@ -715,9 +932,10 @@ int kk_scene_parse_scene_condition(const cJSON* str,const char *sceneId) ...@@ -715,9 +932,10 @@ int kk_scene_parse_scene_condition(const cJSON* str,const char *sceneId)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId) int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdate)
{ {
int res = 0; int res = 0;
dm_mgr_dev_node_t *node = NULL;
if(str == NULL || sceneId == NULL){ if(str == NULL || sceneId == NULL){
ERROR_PRINT("kk_scene_parse_scene_action failed\n"); ERROR_PRINT("kk_scene_parse_scene_action failed\n");
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -725,33 +943,55 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId) ...@@ -725,33 +943,55 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId)
cJSON *action = cJSON_GetObjectItem(str,MSG_SCENE_ACTIONS); cJSON *action = cJSON_GetObjectItem(str,MSG_SCENE_ACTIONS);
if(action == NULL) return FAIL_RETURN; if(action == NULL) return FAIL_RETURN;
//cJSON *items = cJSON_GetObjectItem(conditon,MSG_SCENE_ITEMS);
//if(items == NULL) return FAIL_RETURN;
cJSON * item = action->child; cJSON * item = action->child;
while(item != NULL){ while(item != NULL){
cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE); cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE);
if(type == NULL) return FAIL_RETURN; if(type == NULL) return FAIL_RETURN;
cJSON *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR);
if(deviceCode == NULL) return FAIL_RETURN;
cJSON *epNum = cJSON_GetObjectItem(item,MSG_SCENE_EPNUM);
if(epNum == NULL) return FAIL_RETURN;
cJSON *propertyName = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYNAME); cJSON *propertyName = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYNAME);
if(propertyName == NULL) return FAIL_RETURN; if(propertyName == NULL) return FAIL_RETURN;
cJSON *propertyValue = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYVALUE); cJSON *propertyValue = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYVALUE);
if(propertyValue == NULL) return FAIL_RETURN; if(propertyValue == NULL) return FAIL_RETURN;
cJSON *delay = cJSON_GetObjectItem(item,MSG_SCENE_DELAY); cJSON *productType = cJSON_GetObjectItem(item,MSG_PRODUCT_TYPE_STR);
if(delay == NULL) return FAIL_RETURN; if(productType != NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_subDev_set_action_by_productType(productType->valuestring,sceneId,propertyName->valuestring,
propertyValue->valuestring,type->valuestring);
}
else{
cJSON *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR);
if(deviceCode == NULL) return FAIL_RETURN;
cJSON *epNum = cJSON_GetObjectItem(item,MSG_SCENE_EPNUM);
if(epNum == NULL) return FAIL_RETURN;
epNum = epNum->valueint;
cJSON *delay = cJSON_GetObjectItem(item,MSG_SCENE_DELAY);
if(delay == NULL) return FAIL_RETURN;
delay = delay->valueint;
res = dm_mgr_get_device_by_devicecode(deviceCode->valuestring,&node);
if (res != SUCCESS_RETURN) {
item = item->next;
continue;
}
if(kk_subDev_check_scene_support(node->fatherDeviceCode) == 1){
kk_scene_action_detail_t info = {0};
memcpy(info.deviceCode,node->deviceCode,strlen(node->deviceCode));
memcpy(info.propertyName,propertyName->valuestring,strlen(propertyName->valuestring));
memcpy(info.propertyValue,propertyValue->valuestring,strlen(propertyValue->valuestring));
info.epNum = epNum;
info.delay = delay;
kk_scene_action_add(node->fatherDeviceCode,sceneId,info);
res = kk_scene_insert_scene_action(type->valuestring,deviceCode->valuestring,epNum->valueint, }
propertyName->valuestring,propertyValue->valuestring,delay->valueint,sceneId); res = kk_scene_insert_scene_action(type->valuestring,node->deviceCode,epNum,
if(res != SUCCESS_RETURN){ propertyName->valuestring,propertyValue->valuestring,delay,sceneId,node->fatherDeviceCode);
INFO_PRINT("kk_scene_insert_scene_action fail!!!\n"); if(res != SUCCESS_RETURN){
return res; INFO_PRINT("kk_scene_insert_scene_action fail!!!\n");
} return res;
}
}
item = item->next; item = item->next;
} }
INFO_PRINT("kk_scene_parse_scene_action success!!!\n"); kk_scene_action_info_send(isUpdate);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -772,7 +1012,7 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate) ...@@ -772,7 +1012,7 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate)
cJSON *enable = cJSON_GetObjectItem(args,MSG_SCENE_ENABLE); cJSON *enable = cJSON_GetObjectItem(args,MSG_SCENE_ENABLE);
if(enable == NULL) return FAIL_RETURN; if(enable == NULL) return FAIL_RETURN;
if(!isUpdate){ if(!isUpdate){
HAL_GetTimeMs(sceneId);//use time to create the sceneId HAL_GetTime_s(sceneId);//use time to create the sceneId
} }
//sprintf(sceneId,"%lld",u64SceneKeyId); //sprintf(sceneId,"%lld",u64SceneKeyId);
...@@ -790,10 +1030,10 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate) ...@@ -790,10 +1030,10 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate)
res = kk_scene_parse_scene_condition(args,sceneId); res = kk_scene_parse_scene_condition(args,sceneId);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_scene_parse_scene_condition failed\n"); ERROR_PRINT("kk_scene_parse_scene_condition failed\n");
return FAIL_RETURN; //return FAIL_RETURN;
} }
res = kk_scene_parse_scene_action(args,sceneId); res = kk_scene_parse_scene_action(args,sceneId,isUpdate);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_scene_parse_scene_action failed\n"); ERROR_PRINT("kk_scene_parse_scene_action failed\n");
return FAIL_RETURN; return FAIL_RETURN;
...@@ -904,6 +1144,54 @@ static time_t kk_scene_creat_new_starttime(time_t starttime,time_t current) ...@@ -904,6 +1144,54 @@ static time_t kk_scene_creat_new_starttime(time_t starttime,time_t current)
INFO_PRINT("kk_scene_creat_new_starttime:%ld\n",newTime); INFO_PRINT("kk_scene_creat_new_starttime:%ld\n",newTime);
return newTime; return newTime;
} }
int kk_scene_check_trigger_condition(const char *sceneId)
{
int res = FAIL_RETURN;
char *sqlCmd = NULL;
char *pdeviceCode = NULL;
char *identifier = NULL;
char *compareType = NULL;
char *compareValue = NULL;
int propertyValueType = 0;
int conditionFlag = 0;
sqlite3_stmt *stmt;
char *currentValue = NULL;
dm_mgr_dev_node_t *node = NULL;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
sqlCmd = sqlite3_mprintf("select * from SceneTriggerInfo WHERE sceneId = '%s' and type = '%s'",sceneId,"condition");
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
conditionFlag = 1;
pdeviceCode = sqlite3_column_text(stmt, DB_SCENETRIGGER_DEVICECODE);
identifier = sqlite3_column_text(stmt,DB_SCENETRIGGER_PROPERTYNAME);
compareType = sqlite3_column_text(stmt,DB_SCENETRIGGER_COMPARETYPE);
compareValue = sqlite3_column_text(stmt,DB_SCENETRIGGER_COMPAREVALUE);
propertyValueType = kk_dm_get_property_type(pdeviceCode,identifier);
res = dm_mgr_get_device_by_devicecode(pdeviceCode,&node);
if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
continue;
}
res = kk_tsl_get_value(kk_tsl_get_property_value,node->dev_shadow,identifier,NULL,&currentValue);
if(res != SUCCESS_RETURN){
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
continue;
}
res = kk_scene_check_value_ex(compareType,currentValue,compareValue);
free(currentValue);
currentValue = NULL;
}
sqlite3_finalize(stmt);
/*如果没有设置条件,直接return success*/
if(conditionFlag == 0){
res = SUCCESS_RETURN;
}
return res;
}
int kk_scene_check_condition(const char *sceneId) int kk_scene_check_condition(const char *sceneId)
{ {
...@@ -915,6 +1203,7 @@ int kk_scene_check_condition(const char *sceneId) ...@@ -915,6 +1203,7 @@ int kk_scene_check_condition(const char *sceneId)
time_t endTime = 0,endTime_m = 0; time_t endTime = 0,endTime_m = 0;
int duration = 0; int duration = 0;
int crossDay = 0; int crossDay = 0;
int conditionFlag = 0;
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
time_t current = HAL_GetTime(); time_t current = HAL_GetTime();
...@@ -923,6 +1212,7 @@ int kk_scene_check_condition(const char *sceneId) ...@@ -923,6 +1212,7 @@ int kk_scene_check_condition(const char *sceneId)
sqlCmd = sqlite3_mprintf("select * from SceneConditionInfo WHERE sceneId = '%s'",sceneId); sqlCmd = sqlite3_mprintf("select * from SceneConditionInfo WHERE sceneId = '%s'",sceneId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
conditionFlag = 1;
repeatday = sqlite3_column_int(stmt, DB_SCENECONDITION_REPEATDAY); repeatday = sqlite3_column_int(stmt, DB_SCENECONDITION_REPEATDAY);
startTime = sqlite3_column_int(stmt, DB_SCENECONDITION_STARTTIME); startTime = sqlite3_column_int(stmt, DB_SCENECONDITION_STARTTIME);
endTime = sqlite3_column_int(stmt, DB_SCENECONDITION_ENDTIME); endTime = sqlite3_column_int(stmt, DB_SCENECONDITION_ENDTIME);
...@@ -969,9 +1259,17 @@ int kk_scene_check_condition(const char *sceneId) ...@@ -969,9 +1259,17 @@ int kk_scene_check_condition(const char *sceneId)
} }
} }
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
/*如果没有设置条件,直接return success*/
if(conditionFlag == 0){
res = SUCCESS_RETURN;
}
return res; return res;
} }
static int kk_scene_check_value(const char * compareType,const char * compareValue,cJSON *item,int valueType) static int kk_scene_check_value(const char * compareType,const char * compareValue,cJSON *item,int valueType)
{ {
int res = FAIL_RETURN; int res = FAIL_RETURN;
...@@ -1000,7 +1298,7 @@ static int kk_scene_check_value(const char * compareType,const char * compareVal ...@@ -1000,7 +1298,7 @@ static int kk_scene_check_value(const char * compareType,const char * compareVal
break; break;
case KK_TSL_DATA_TYPE_TEXT: case KK_TSL_DATA_TYPE_TEXT:
case KK_TSL_DATA_TYPE_DATE: case KK_TSL_DATA_TYPE_DATE:
type = 2; type = 2;//字串
break; break;
} }
if(type == 2){ if(type == 2){
...@@ -1170,18 +1468,40 @@ int kk_scene_execute_action(const char* sceneId) ...@@ -1170,18 +1468,40 @@ int kk_scene_execute_action(const char* sceneId)
char *deviceCode = NULL; char *deviceCode = NULL;
char *propertyName = NULL; char *propertyName = NULL;
char *propertyValue = NULL; char *propertyValue = NULL;
char *gwdeviceCode = NULL;
int delay = 0; int delay = 0;
char *sqlCmd = NULL; char *sqlCmd = NULL;
char gwdevice[][DEVICE_CODE_MAXLEN] = {0};
int idx=0,num = 0;
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE sceneId = '%s'",sceneId); sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE sceneId = '%s'",sceneId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){ next:
while(sqlite3_step(stmt) == SQLITE_ROW){
deviceCode = sqlite3_column_text(stmt, DB_SCENEACTION_DEVICECODE); deviceCode = sqlite3_column_text(stmt, DB_SCENEACTION_DEVICECODE);
propertyName = sqlite3_column_text(stmt,DB_SCENEACTION_PROPERTYNAME); propertyName = sqlite3_column_text(stmt,DB_SCENEACTION_PROPERTYNAME);
propertyValue = sqlite3_column_text(stmt,DB_SCENEACTION_PROPERTYVALUE); propertyValue = sqlite3_column_text(stmt,DB_SCENEACTION_PROPERTYVALUE);
delay = sqlite3_column_int(stmt,DB_SCENEACTION_DELAY); delay = sqlite3_column_int(stmt,DB_SCENEACTION_DELAY);
res = kk_scene_start_action(deviceCode,propertyName,propertyValue,delay); gwdeviceCode = sqlite3_column_text(stmt,DB_SCENEACTION_GWDEVICECODE);
if(kk_subDev_check_scene_support(gwdeviceCode) == 1){
for(idx = 0; idx < num;idx++){
if(!strcmp(gwdevice[idx],gwdeviceCode)){
goto next;
}
}
memcpy(gwdevice[num],gwdeviceCode,strlen(gwdeviceCode));
num++;
cJSON *root=cJSON_CreateObject();
cJSON_AddStringToObject(root,MSG_SCENE_SCENEID,sceneId);
char *out=cJSON_Print(root);
res = kk_msg_execute_scene_action(out,gwdeviceCode);
cJSON_Delete(root);
free(out);
}
else{
res = kk_scene_start_action(deviceCode,propertyName,propertyValue,delay);
}
} }
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
return res; return res;
...@@ -1220,9 +1540,12 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param) ...@@ -1220,9 +1540,12 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
INFO_PRINT("[%d]kk_scene_check_condition enter!!!\n",__LINE__); INFO_PRINT("[%d]kk_scene_check_condition enter!!!\n",__LINE__);
res = kk_scene_check_condition(sceneId); res = kk_scene_check_condition(sceneId);
if(res == SUCCESS_RETURN){ if(res == SUCCESS_RETURN){
_kk_scene_lock(); res = kk_scene_check_trigger_condition(sceneId);
res = kk_scene_execute_action(sceneId); if(res == SUCCESS_RETURN){
_kk_scene_unlock(); _kk_scene_lock();
res = kk_scene_execute_action(sceneId);
_kk_scene_unlock();
}
} }
} }
} }
......
...@@ -3,6 +3,25 @@ ...@@ -3,6 +3,25 @@
#include "kk_tsl_common.h" #include "kk_tsl_common.h"
typedef struct kk_scene_action_detail{
char deviceCode[DEVICE_CODE_MAXLEN];
char propertyName[DEVICE_PROPERTY_NAME_MAX];
char propertyValue[DEVICE_PROPERTY_VALUE_MAX];
int epNum;
int delay;
} kk_scene_action_detail_t;
typedef struct kk_scene_action_info_ex{
kk_scene_action_detail_t info;
struct kk_scene_action_info_ex * next;
} kk_scene_action_info_ex_t;
typedef struct kk_scene_action{
char gwdeviceCode[DEVICE_CODE_MAXLEN];
char sceneId[16];
kk_scene_action_info_ex_t *actionInfo;
struct kk_scene_action * next;
} kk_scene_action_t;
typedef struct { typedef struct {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
*/ */
#include "infra_config.h" #include "infra_config.h"
#ifdef INFRA_SHA256
#define INFRA_SHA256_SMALLER #define INFRA_SHA256_SMALLER
...@@ -317,5 +317,5 @@ void utils_hmac_sha256(const uint8_t *msg, uint32_t msg_len, const uint8_t *key, ...@@ -317,5 +317,5 @@ void utils_hmac_sha256(const uint8_t *msg, uint32_t msg_len, const uint8_t *key,
utils_sha256_finish(&context, output); /* finish up 2nd pass */ utils_sha256_finish(&context, output); /* finish up 2nd pass */
} }
#endif
#include "infra_config.h" #include "infra_config.h"
#ifdef INFRA_TIMER
/* /*
* *
*/ */
...@@ -91,5 +90,5 @@ uint32_t utils_time_get_ms(void) ...@@ -91,5 +90,5 @@ uint32_t utils_time_get_ms(void)
{ {
return HAL_UptimeMs(); return HAL_UptimeMs();
} }
#endif
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
#define DM_UTILS_UINT16_STRLEN (5) #define DM_UTILS_UINT16_STRLEN (5)
#define DM_UTILS_UINT32_STRLEN (10) #define DM_UTILS_UINT32_STRLEN (10)
#define DM_UTILS_UINT64_STRLEN (20) #define DM_UTILS_UINT64_STRLEN (20)
#define DEVICE_PROPERTY_NAME_MAX (64+1)
#define DEVICE_PROPERTY_VALUE_MAX (64+1)
#define KK_TSL_KEY_SCHEMA "schema" #define KK_TSL_KEY_SCHEMA "schema"
#define KK_TSL_KEY_LINK "link" #define KK_TSL_KEY_LINK "link"
......
...@@ -793,7 +793,7 @@ int dm_tls_set_event_output_value(_IN_ kk_tsl_t *shadow, _IN_ char *key, _IN_ in ...@@ -793,7 +793,7 @@ int dm_tls_set_event_output_value(_IN_ kk_tsl_t *shadow, _IN_ char *key, _IN_ in
return FAIL_RETURN; return FAIL_RETURN;
} }
printf("Key: %.*s", key_len, key); //printf("Key: %.*s", key_len, key);
res = _kk_tsl_event_search(shadow, key, offset, &event); res = _kk_tsl_event_search(shadow, key, offset, &event);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <string.h> #include <string.h>
#include "lite-cjson.h" #include "lite-cjson.h"
#include "kk_tsl_common.h" #include "kk_tsl_common.h"
#include "kk_log.h"
typedef int (*kk_tsl_data_parse)(_IN_ kk_tsl_data_value_t *data_value, _IN_ lite_cjson_t *root); typedef int (*kk_tsl_data_parse)(_IN_ kk_tsl_data_value_t *data_value, _IN_ lite_cjson_t *root);
...@@ -470,7 +471,7 @@ static int _kk_tsl_properties_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *ro ...@@ -470,7 +471,7 @@ static int _kk_tsl_properties_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *ro
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
printf("Number: %d", lite_properties.size); INFO_PRINT("property number: %d\n", lite_properties.size);
if (lite_properties.size == 0) { if (lite_properties.size == 0) {
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -490,7 +491,7 @@ static int _kk_tsl_properties_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *ro ...@@ -490,7 +491,7 @@ static int _kk_tsl_properties_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *ro
return FAIL_RETURN; return FAIL_RETURN;
} }
printf("Index: %d\n", index); //printf("Index: %d\n", index);
_kk_tsl_property_parse(shadow->properties + index, &lite_property); _kk_tsl_property_parse(shadow->properties + index, &lite_property);
} }
...@@ -537,7 +538,7 @@ static int _kk_tsl_event_outputdatas_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_ev ...@@ -537,7 +538,7 @@ static int _kk_tsl_event_outputdatas_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_ev
lite_cjson_t lite_item; lite_cjson_t lite_item;
kk_tsl_data_t *output_data = NULL; kk_tsl_data_t *output_data = NULL;
printf("event outputdata Number: %d\n", event->output_data_number); //printf("event outputdata Number: %d\n", event->output_data_number);
if (event->output_data_number == 0) { if (event->output_data_number == 0) {
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -558,7 +559,7 @@ static int _kk_tsl_event_outputdatas_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_ev ...@@ -558,7 +559,7 @@ static int _kk_tsl_event_outputdatas_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_ev
return FAIL_RETURN; return FAIL_RETURN;
} }
printf("Index: %d\n", index); //printf("Index: %d\n", index);
_kk_tsl_event_outputdata_parse(shadow, output_data, &lite_item); _kk_tsl_event_outputdata_parse(shadow, output_data, &lite_item);
} }
...@@ -595,6 +596,7 @@ static int _dm_shw_event_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_event_t *event ...@@ -595,6 +596,7 @@ static int _dm_shw_event_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_event_t *event
if (res != SUCCESS_RETURN || !lite_cjson_is_array(&lite_item)) { if (res != SUCCESS_RETURN || !lite_cjson_is_array(&lite_item)) {
return JSON_PARSE_FAILED; return JSON_PARSE_FAILED;
} }
//INFO_PRINT("event output number: %d\n", lite_item.size);
event->output_data_number = lite_item.size; event->output_data_number = lite_item.size;
res = _kk_tsl_event_outputdatas_parse(shadow, event, &lite_item); res = _kk_tsl_event_outputdatas_parse(shadow, event, &lite_item);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
...@@ -618,8 +620,7 @@ static int _kk_tsl_events_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *root) ...@@ -618,8 +620,7 @@ static int _kk_tsl_events_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *root)
} else { } else {
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
INFO_PRINT("event Number: %d\n");
printf("\nevent Number: %d\n", lite_events.size);
if (lite_events.size == 0) { if (lite_events.size == 0) {
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -788,7 +789,7 @@ static int _kk_tsl_service_inputdatas_get_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_t ...@@ -788,7 +789,7 @@ static int _kk_tsl_service_inputdatas_get_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_t
lite_cjson_t lite_item; lite_cjson_t lite_item;
kk_tsl_data_t *input_data = NULL; kk_tsl_data_t *input_data = NULL;
printf("input Number: %d\n", service->input_data_number); //printf("input Number: %d\n", service->input_data_number);
if (service->input_data_number == 0) { if (service->input_data_number == 0) {
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -810,7 +811,7 @@ static int _kk_tsl_service_inputdatas_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_s ...@@ -810,7 +811,7 @@ static int _kk_tsl_service_inputdatas_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_s
lite_cjson_t lite_item; lite_cjson_t lite_item;
kk_tsl_data_t *input_data = NULL; kk_tsl_data_t *input_data = NULL;
printf("input Number: %d\n", service->input_data_number); //printf("input Number: %d\n", service->input_data_number);
if (service->input_data_number == 0) { if (service->input_data_number == 0) {
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -874,6 +875,7 @@ static int _kk_tsl_service_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_service_t *s ...@@ -874,6 +875,7 @@ static int _kk_tsl_service_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_service_t *s
memset(&lite_item, 0, sizeof(lite_cjson_t)); memset(&lite_item, 0, sizeof(lite_cjson_t));
res = lite_cjson_object_item(root, KK_TSL_KEY_OUTPUTDATA, strlen(KK_TSL_KEY_OUTPUTDATA), &lite_item); res = lite_cjson_object_item(root, KK_TSL_KEY_OUTPUTDATA, strlen(KK_TSL_KEY_OUTPUTDATA), &lite_item);
if (res == SUCCESS_RETURN && lite_cjson_is_array(&lite_item)) { if (res == SUCCESS_RETURN && lite_cjson_is_array(&lite_item)) {
//INFO_PRINT("services output Number: %d\n", lite_item.size);
service->output_data_number = lite_item.size; service->output_data_number = lite_item.size;
res = _kk_tsl_service_outputdatas_parse(shadow, service, &lite_item); res = _kk_tsl_service_outputdatas_parse(shadow, service, &lite_item);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
...@@ -886,7 +888,7 @@ static int _kk_tsl_service_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_service_t *s ...@@ -886,7 +888,7 @@ static int _kk_tsl_service_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_service_t *s
res = lite_cjson_object_item(root, KK_TSL_KEY_INPUTDATA, strlen(KK_TSL_KEY_INPUTDATA), &lite_item); res = lite_cjson_object_item(root, KK_TSL_KEY_INPUTDATA, strlen(KK_TSL_KEY_INPUTDATA), &lite_item);
if (res == SUCCESS_RETURN && lite_cjson_is_array(&lite_item)) { if (res == SUCCESS_RETURN && lite_cjson_is_array(&lite_item)) {
service->input_data_number = lite_item.size; service->input_data_number = lite_item.size;
//INFO_PRINT("services input Number: %d\n", lite_item.size);
if(isGetService && service->input_data_number > 0){ if(isGetService && service->input_data_number > 0){
res = _kk_tsl_service_inputdatas_get_parse(shadow, service, &lite_item); res = _kk_tsl_service_inputdatas_get_parse(shadow, service, &lite_item);
}else }else
...@@ -914,7 +916,7 @@ static int _kk_tsl_services_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *root ...@@ -914,7 +916,7 @@ static int _kk_tsl_services_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *root
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
printf("_kk_tsl_services_parse Number: %d\n", lite_services.size); INFO_PRINT("services Number: %d\n", lite_services.size);
if (lite_services.size == 0) { if (lite_services.size == 0) {
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -936,7 +938,7 @@ static int _kk_tsl_services_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *root ...@@ -936,7 +938,7 @@ static int _kk_tsl_services_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *root
return FAIL_RETURN; return FAIL_RETURN;
} }
printf(" Index: %d\n", index); //printf(" Index: %d\n", index);
_kk_tsl_service_parse(shadow, service, &lite_service); _kk_tsl_service_parse(shadow, service, &lite_service);
} }
...@@ -1669,6 +1671,7 @@ int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow ...@@ -1669,6 +1671,7 @@ int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow
int res = 0; int res = 0;
lite_cjson_t lite_root; lite_cjson_t lite_root;
INFO_PRINT("kk_tsl_create start!!\n");
if (shadow == NULL || *shadow != NULL || tsl == NULL || tsl_len <= 0) { if (shadow == NULL || *shadow != NULL || tsl == NULL || tsl_len <= 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
...@@ -1707,6 +1710,7 @@ int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow ...@@ -1707,6 +1710,7 @@ int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
} }
INFO_PRINT("kk_tsl_create successful!!\n");
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment