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

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

【提交人】陈伟灿
parent 6d57df34
......@@ -93,7 +93,8 @@ typedef enum {
#define MSG_KEYMODIFY_NOTIFICATION "KeyModifyNotification"
/************************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_SCENCTYPE "sceneType"
#define MSG_SCENE_ENABLE "enable"
......@@ -123,9 +124,6 @@ typedef enum {
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_deinit(ipc_type type);
......
......@@ -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;
struct timeval tv;
time_t t;
t = time(NULL);
gettimeofday(&tv, NULL);
time_ms = ((uint64_t)tv.tv_sec * (uint64_t)1000) + (tv.tv_usec / 1000 );
sprintf(outStr,"%lld",time_ms);
sprintf(outStr,"%d",t);
return time_ms;
return t;
}
......
......@@ -128,7 +128,7 @@ int kk_room_add(const char *name,const char *roomId)
values ('%s','%s');";
_kk_area_lock();
ctx->roomNum++;
HAL_GetTimeMs(roomId);
HAL_GetTime_s(roomId);
sqlCmd = sqlite3_mprintf(insertCmd,name,roomId);
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
for(idx = 0; idx < num; 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->data_value.type == KK_TSL_DATA_TYPE_STRUCT){
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
}
}
}
return SUCCESS_RETURN;
}
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
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)
{
......@@ -401,13 +421,13 @@ int dm_mgr_set_dev_onoffline(dm_mgr_dev_node_t *node,int isOffline)
return INVALID_PARAMETER;
}
if(isOffline){
INFO_PRINT("---------->dev timeout,send offline\n");
INFO_PRINT("[%s]dev timeout,send offline\n",__FUNCTION__);
node->isOffline = KK_DEV_OFFLINE;
iotx_dm_dev_offline(node->devid);
kk_subDev_update_offline(node->isOffline,node->deviceCode);
}
else{
INFO_PRINT("---------->dev online,send online\n");
INFO_PRINT("[%s]dev online,send online\n",__FUNCTION__);
node->isOffline = KK_DEV_ONLINE;
iotx_dm_dev_online(node->devid);
if(node->dev_type == KK_DM_DEVICE_CCU){
......@@ -545,7 +565,7 @@ int dm_mgr_deinit(void)
const char DM_URI_THING_EVENT_POST[] = "/thing/event/%s/post";
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 *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,
memset(payload_param, 0, paramLen);
HAL_Snprintf(payload_param, paramLen, DM_MSG_THING_UPSTREAM_REQUEST_PARAMS, params);
request->msgid = msgid;
memcpy(request->msgid,msgid,strlen(msgid));
request->devid = devid;
msgTypeLen = strlen(DM_URI_THING_EVENT_POST) + strlen(identify) + 1;
request->msgTypeStr = malloc(msgTypeLen);
......@@ -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_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 *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,
memset(payload_param, 0, paramLen);
HAL_Snprintf(payload_param, paramLen, DM_MSG_THING_UPSTREAM_REQUEST_PARAMS, params);
request->msgid = msgid;
memcpy(request->msgid ,msgid,strlen(msgid));
request->devid = devid;
msgTypeLen = strlen(DM_URI_THING_SERVICE_POST) + strlen(identify) + 1;
request->msgTypeStr = malloc(msgTypeLen);
......@@ -637,6 +659,7 @@ static unsigned int g_report_id = 1;
int iotx_report_id(void)
{
return g_report_id++;
}
......@@ -644,13 +667,15 @@ int dm_mgr_upstream_thing_property_post(_IN_ int devid, _IN_ char *payload, _IN_
{
int res = 0;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0 || payload == NULL || payload_len <= 0) {
return INVALID_PARAMETER;
}
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);
if (res != SUCCESS_RETURN) {
return FAIL_RETURN;
......@@ -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)
{
int res = 0;
char msgId[MSG_MAX_LEN] = {0};
dm_msg_request_t request;
......@@ -677,7 +703,37 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_
return INVALID_PARAMETER;
}
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);
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_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;
......@@ -699,13 +755,14 @@ int dm_mgr_upstream_thing_service_post(_IN_ int devid, _IN_ char *identifier, _I
int res = 0;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
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_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);
if (res != SUCCESS_RETURN) {
return FAIL_RETURN;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
}
......@@ -826,7 +883,8 @@ int dm_mgr_upstream_thing_sub_register(_IN_ int devid)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -836,9 +894,7 @@ int dm_mgr_upstream_thing_sub_register(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
......@@ -879,7 +936,9 @@ int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -891,9 +950,6 @@ int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
......@@ -937,7 +994,9 @@ int dm_mgr_upstream_thing_topo_add(_IN_ int devid)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -949,9 +1008,6 @@ int dm_mgr_upstream_thing_topo_add(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return DM_INVALID_PARAMETER;
......@@ -994,7 +1051,9 @@ int dm_mgr_upstream_thing_topo_delete(_IN_ int devid)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -1006,9 +1065,6 @@ int dm_mgr_upstream_thing_topo_delete(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -1019,7 +1075,7 @@ int dm_mgr_upstream_thing_topo_get(void)
{
int res = 0;
dm_mgr_dev_node_t *node = NULL;
char msgId[MSG_MAX_LEN] = {0};
dm_msg_request_t request;
memset(&request, 0, sizeof(dm_msg_request_t));
......@@ -1039,7 +1095,9 @@ int dm_mgr_upstream_thing_topo_get(void)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = node->devid;
......@@ -1049,9 +1107,7 @@ int dm_mgr_upstream_thing_topo_get(void)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
......@@ -1092,7 +1149,9 @@ int dm_mgr_upstream_thing_list_found(_IN_ int devid)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -1102,9 +1161,7 @@ int dm_mgr_upstream_thing_list_found(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
......@@ -1139,10 +1197,11 @@ int dm_mgr_ccu_status_cloud(_IN_ int devid)
if (res != SUCCESS_RETURN) {
return FAIL_RETURN;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -1154,9 +1213,6 @@ int dm_mgr_ccu_status_cloud(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
}
memset(&request, 0, sizeof(dm_msg_request_t));
res = dm_mgr_search_dev_by_devid(devid, &node);
if (res != SUCCESS_RETURN) {
return FAIL_RETURN;
......@@ -1205,7 +1263,9 @@ int dm_mgr_upstream_status_online(_IN_ int devid)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -1217,9 +1277,6 @@ int dm_mgr_upstream_status_online(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
......@@ -1265,7 +1323,9 @@ int dm_mgr_upstream_status_offline(_IN_ int devid)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -1277,9 +1337,6 @@ int dm_mgr_upstream_status_offline(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
......@@ -1321,7 +1379,9 @@ int dm_mgr_upstream_combine_login(_IN_ int devid)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -1333,9 +1393,6 @@ int dm_mgr_upstream_combine_login(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -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 *gw_node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
......@@ -1375,7 +1433,9 @@ int dm_mgr_upstream_combine_logout(_IN_ int devid)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -1388,9 +1448,6 @@ int dm_mgr_upstream_combine_logout(_IN_ int devid)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
return res;
......@@ -1402,6 +1459,7 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version)
int res = 0;
dm_mgr_dev_node_t *node = NULL;
dm_msg_request_t request;
char msgId[MSG_MAX_LEN] = {0};
if (devid < 0) {
return INVALID_PARAMETER;
......@@ -1428,7 +1486,9 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version)
}
/* Get Msg ID */
request.msgid = iotx_report_id();
sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
request.devid = devid;
......@@ -1441,9 +1501,6 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version)
/* Send Message To Cloud */
res = dm_msg_request(&request,0);
if (res == SUCCESS_RETURN) {
res = request.msgid;
}
free(request.params);
free(request.msgTypeStr);
......
......@@ -17,6 +17,7 @@
#define KK_DM_GW_DEVICE_PRODUCT_CODE "2"
#define KK_DM_DEVICE_CCU_DEVICEID (0x00)
#define MSG_MAX_LEN (64)
typedef struct {
int devid;
......@@ -40,7 +41,7 @@ typedef struct {
} dm_mgr_ctx;
typedef struct {
int msgid;
char msgid[MSG_MAX_LEN];
int devid;
//const char *service_prefix;
//const char *service_name;
......
......@@ -8,7 +8,7 @@
#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\"}";
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)
}
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);
if (payload == NULL) {
return MEMORY_NOT_ENOUGH;
}
printf("[%s][%d]----request->msgid:%s\n",__FUNCTION__,__LINE__,request->msgid);
memset(payload, 0, payload_len);
snprintf(payload, payload_len, DM_MSG_REQUEST, request->msgid,
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)
}
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 nums = 0;
......@@ -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;
void *event = NULL;
char *method = NULL;
printf("msgId:%s\n",msgId);
if(deviceCode == NULL){
return FAIL_RETURN;
}
......@@ -813,7 +814,7 @@ int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_ts
free(payload);
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);
method = NULL;
free(payload);
......@@ -1044,6 +1045,7 @@ int kk_msg_execute_property_set(const char *productCode,const char *deviceCode,c
char *method = "thing.service.property.set";
char *req_info = NULL,*payload = NULL;
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 = malloc(req_info_len);
......@@ -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);
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);
if (payload == NULL) {
free(req_info);
return MEMORY_NOT_ENOUGH;
}
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);
cJSON *root=cJSON_CreateObject();
......@@ -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)
{
char *method = "thing.service.property.get";
......@@ -1088,6 +1092,7 @@ int kk_msg_execute_property_get(dm_mgr_dev_node_t *node)
int needFree = 0;
int i = 0,j = 0,serviceNum = 0;
char *paramS = NULL;
char msgId[MSG_MAX_LEN] = {0};
if(node == NULL){
return INVALID_PARAMETER;
......@@ -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(
method) + 1 + 20;
method) + 1 + 20+sizeof(msgId);
payload = malloc(payload_len);
if (payload == NULL) {
free(req_info);
return MEMORY_NOT_ENOUGH;
}
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);
cJSON *root=cJSON_CreateObject();
cJSON* infoObj = cJSON_Parse(req_info);
......@@ -1141,7 +1147,6 @@ int kk_msg_execute_property_get(dm_mgr_dev_node_t *node)
cJSON_AddItemToObject(root, "info", infoObj);
cJSON_AddItemToObject(root, "payload",payloadObj);
void *buf = cJSON_Print(root);
printf("------------->buf:%s\n",buf);
if(node->dev_type == KK_DM_DEVICE_GATEWAY)
kk_sendData2gw(buf, strlen(buf), node->deviceCode);
else
......@@ -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;
#define KK_THING_SERVICE_DELETESCENC "/thing/service/deleteScene"
#define KK_THING_SERVICE_UPDATESCENC "/thing/service/updateScene"
#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_POST "/post"
......
......@@ -541,7 +541,7 @@ static int kk_service_addKey_handle(const char *deviceCode,cJSON *param)
if(KeyEffectiveTime == NULL) return FAIL_RETURN;;
cJSON *KeyExpiryTime = cJSON_GetObjectItem(param,MSG_KEYADD_KEYEXPIRE);
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,
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);
......@@ -625,65 +625,73 @@ static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param)
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;
char sceneId[32] = {0};
kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL){
if(deviceCode == NULL || param == NULL || msgId == NULL){
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){
pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){
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;
}
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;
kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL){
if(deviceCode == NULL || param == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
cJSON *args = cJSON_GetObjectItem(param,MSG_SCENE_ARGS);
if(args == NULL) return FAIL_RETURN;
cJSON *sceneId = cJSON_GetObjectItem(args,MSG_SCENE_SCENEID);
cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
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){
pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){
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;
}
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;
kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL){
char sceneIdBuf[16] = {0};
if(deviceCode == NULL || param == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
if(sceneId == NULL) return FAIL_RETURN;
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){
pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){
if(strlen(sceneIdBuf) > 0){
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);
}
dm_msg_scene_event_post(deviceCode,MSG_SCENE_DELETENOTIFICATION,pSceneShadow,msgId->valuestring);
}
}
return res;
......@@ -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 *state = cJSON_GetObjectItem(paramStr, MSG_IOTClOUDSTATE_STR);
s_CloudStatus = atoi(state->valuestring);
dm_mgr_dev_node_t *node = NULL;
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);
......@@ -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);
}
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)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
kk_property_db_update("CCU_66666");
if(s_CloudStatus){
node->isOffline = KK_DEV_ONLINE;
iotx_dm_dev_online(KK_DM_DEVICE_CCU_DEVICEID);//first online,report the online status
usleep(200000);
dm_msg_ccu_property_post(node);
}
}else if (strstr(typeJson->valuestring,KK_THING_OTA_DEVICE_UPGRADE)){
INFO_PRINT("ota upgrade... \n");
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)
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDSCENC) == 0){
INFO_PRINT(" add scene \n");
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){
INFO_PRINT(" update scene \n");
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){
INFO_PRINT("delete scene \n");
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{
INFO_PRINT("Error msgtype!!! \n");
......@@ -1591,10 +1608,6 @@ int _iotx_linkkit_slave_connect(int devid)
iotx_linkkit_upstream_sync_callback_node_t *node = NULL;
void *semaphore = NULL;
/*if (ctx->is_connected == 0) {
dm_log_err("master isn't start");
return FAIL_RETURN;
}*/
if (devid <= 0) {
......@@ -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 */
res = kk_dm_subdev_topo_add(devid);
......@@ -1653,40 +1624,6 @@ int _iotx_linkkit_slave_connect(int devid)
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;
}
......@@ -2271,6 +2208,7 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d
_iotx_linkkit_mutex_lock();
res = _iotx_linkkit_slave_connect(devid);
if (res != SUCCESS_RETURN) {
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
......@@ -2280,6 +2218,7 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
_iotx_linkkit_mutex_unlock();
return SUCCESS_RETURN;
}
......
......@@ -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)
{
WARNING_PRINT("[%s][%d] DATA ALREADY EXIST!!!\n",__FUNCTION__,__LINE__);
//WARNING_PRINT("[%s][%d] DATA ALREADY EXIST!!!\n",__FUNCTION__,__LINE__);
return SUCCESS_RETURN;
}
_kk_property_db_lock();
......
......@@ -3,7 +3,7 @@
#include "kk_tsl_api.h"
#include "kk_sub_db.h"
#include "kk_dm_mng.h"
#include "kk_scene_handle.h"
#include "sqlite3.h"
#include "kk_log.h"
......@@ -25,7 +25,8 @@ typedef enum{
DB_AUTH,
DB_DEVTYPE,
DB_HEARTBEAT,
DB_PRODUCTTYPE
DB_PRODUCTTYPE,
DB_SCENESUPPORT
};
static kk_subDb_ctx_t s_kk_subDb_ctx = {NULL,0,NULL};
......@@ -71,7 +72,8 @@ static int kk_subDev_db_Init(void)
isAuth INTEGER, \
devType INTEGER, \
heartbeat INTEGER,\
productType varchar(33))";
productType varchar(33),\
sceneSupport INTEGER)";
char *pcErr;
......@@ -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], \
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) \
values ('%d','%d', '%s','%s','%s','%s','%s','%d','%d','%d');";
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','%d');";
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
......@@ -201,7 +203,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
return SUCCESS_RETURN;
}
_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);
if( rc != SQLITE_OK ){
......@@ -307,6 +309,29 @@ int kk_subDev_update_auth(int isAuth,const char *deviceCode)
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)
{
const char *searchCmd = "select * from SubDeviceInfo;";
......@@ -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)
for(i =0; i < num; i++){
if(strstr(msgtype,g_filerToPlatTable[i]))
{
INFO_PRINT("this msg do not send to platform!!!\n");
return 1;
}
}
......@@ -153,7 +154,8 @@ static int kk_property_set_data_check(cJSON * payload,const char *deviceCode){
}
}
}else if(property->data_value.type == KK_TSL_DATA_TYPE_INT){
}
else if(property->data_value.type == KK_TSL_DATA_TYPE_INT){
value = propertyItem->valueint;
if(value < property->data_value.mix ||value > property->data_value.max ){
ERROR_PRINT("ERROR ------------>value:%d,mix:%d,max:%d\n",value,property->data_value.mix,property->data_value.max);
......@@ -313,9 +315,6 @@ void kk_platMsg_handle(void* data, char* chalMark){
msgType = cJSON_GetObjectItem(info, MSG_TYPE_STR);
info_dcode = cJSON_GetObjectItem(info, MSG_DEVICE_CODE_STR);
if (msgType == NULL || info_dcode == NULL){
ERROR_PRINT("msgType info_dcode or jsonPay params are error\n");
goto error;
......@@ -324,12 +323,11 @@ void kk_platMsg_handle(void* data, char* chalMark){
if (chalMark != NULL){
dm_mgr_update_timestamp_by_devicecode(chalMark,HAL_Uptimes());
}
dm_mgr_update_timestamp_by_devicecode(info_dcode->valuestring,HAL_Uptimes());
if (strcmp(msgType->valuestring, KK_THING_TOPO_ADD_MSG)==0){
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
proCode = cJSON_GetObjectItem(jsonPay, MSG_PRODUCT_CODE_STR);
devCode = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR);
mac = cJSON_GetObjectItem(jsonPay, "mac");
......@@ -343,6 +341,10 @@ void kk_platMsg_handle(void* data, char* chalMark){
char ccu_deviceCode[DEVICE_CODE_MAXLEN] = {0};
HAL_GetDevice_Code(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{
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){
else if (strstr(msgType->valuestring, KK_THING_TOPO_BATCH_ADD_MSG) != NULL){
kk_ipc_send(IPC_MID2APP,data,strlen(data));
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
cJSON *devices = cJSON_GetObjectItem(jsonPay, MSG_TOPO_CHANGE_DEVICES_STR);
if(devices == NULL) goto error;
cJSON * item = devices->child;
while(item != NULL){
char *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR)->valuestring;
......@@ -366,6 +370,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
}else if (strstr(msgType->valuestring, KK_THING_PROPERTY_POST) != NULL){
INFO_PRINT("save property and send to cloud \n");
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
char* outstr = cJSON_Print(payload);
dm_mgr_dev_node_t *search_node = NULL;
dm_mgr_get_device_by_devicecode(info_dcode->valuestring,&search_node);
......@@ -380,6 +385,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
}else if(strstr(msgType->valuestring, KK_THING_TOPO_DELETE_MSG) != NULL){
INFO_PRINT("kk_platMsg_handle data: handle delete\n");
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
devCode = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR);
kk_ipc_send(IPC_MID2APP,data,strlen(data)+1);
dm_mgr_subdev_delete(devCode->valuestring);
......@@ -392,6 +398,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
char tmpStr[128] = {0};
cJSON * itemStr = NULL;
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
res = dm_mgr_get_device_by_devicecode(info_dcode->valuestring,&node);
if (res < SUCCESS_RETURN) {
goto error;
......@@ -408,7 +415,6 @@ void kk_platMsg_handle(void* data, char* chalMark){
eventItem->output_data_number > 0){
int index = 0;
kk_tsl_data_t *itemData = NULL;
for(index = 0; index < eventItem->output_data_number;index++){
itemStr = cJSON_GetObjectItem(jsonPay, eventItem->identifier);
itemData = eventItem->output_datas + index;
......@@ -416,7 +422,20 @@ void kk_platMsg_handle(void* data, char* chalMark){
memset(tmpStr,0x0,sizeof(tmpStr));
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,&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");
dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier);
kk_scene_iftt_check(info_dcode->valuestring,jsonPay);
......@@ -426,8 +445,20 @@ void kk_platMsg_handle(void* data, char* chalMark){
if(itemDataIdentifier != NULL){
memset(tmpStr,0x0,sizeof(tmpStr));
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);
}
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");
dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier);
kk_scene_iftt_check(info_dcode->valuestring,jsonPay);
......@@ -452,6 +483,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
else if(strstr(msgType->valuestring, KK_THING_TOPO_BATCH_DELETE_MSG) != NULL){
kk_ipc_send(IPC_MID2APP,data,strlen(data));
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
cJSON *devices = cJSON_GetObjectItem(jsonPay, MSG_TOPO_CHANGE_DEVICES_STR);
cJSON * item = devices->child;
while(item != NULL){
......@@ -468,7 +500,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
res = dm_mgr_get_device_by_devicecode(info_dcode->valuestring,&node);
if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return;
goto error;
}
/*开机先获取网关属性,网关返回relay,置网关状态在线*/
if(node->dev_type == KK_DM_DEVICE_GATEWAY){
......@@ -514,13 +546,6 @@ void kk_platMsg_dispatch(void)
}
time_t getSysTime(){
time_t t;
t = time(NULL);
return t;
}
typedef struct {
int auto_add_subdev;
int master_devid;
......
......@@ -15,7 +15,6 @@ typedef struct {
void *mutex;
sqlite3 *pDb;
void *s_scene_thread;
} kk_scene_ctx_t;
......@@ -59,10 +58,50 @@ typedef enum{
DB_SCENEACTION_PROPERTYVALUE,
DB_SCENEACTION_DELAY,
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 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)
{
return &s_kk_scene_ctx;
......@@ -154,7 +193,8 @@ static int _kk_scene_db_init(void)
propertyName varchar(255), \
propertyValue varchar(255), \
delay INTEGER, \
sceneId varchar(255))";
sceneId varchar(255),\
gwdeviceCode varchar(255))";
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
}
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;
}
return SUCCESS_RETURN;
}
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;
}
static 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)
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;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
const char *insertCmd = "insert into SceneActionInfo (type, deviceCode,epNum,propertyName,propertyValue,delay,sceneId) \
values ('%s','%s','%d','%s','%s','%d','%s');";
const char *insertCmd = "insert into SceneActionInfo (type, deviceCode,epNum,propertyName,propertyValue,delay,sceneId,gwdeviceCode) \
values ('%s','%s','%d','%s','%s','%d','%s','%s');";
_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);
if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
......@@ -535,8 +703,40 @@ int kk_scene_delete_scene_action(const char *sceneId)
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
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();
sqlCmd = sqlite3_mprintf(deleteCmd,sceneId);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
......@@ -551,7 +751,30 @@ int kk_scene_delete_scene_action(const char *sceneId)
_kk_scene_unlock();
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)
{
......@@ -568,18 +791,7 @@ int kk_scene_parse_scene_trigger(const cJSON* str,const char *sceneId)
while(item != NULL){
cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE);
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);
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);
res = kk_scene_parse_trigger_detail(type->valuestring,item,sceneId);
if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_scene_parse_scene_trigger fail!!!\n");
return res;
......@@ -690,34 +902,40 @@ int kk_scene_parse_scene_condition(const cJSON* str,const char *sceneId)
while(item != NULL){
cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE);
if(type == NULL) return FAIL_RETURN;
if(!strcmp("condition/timeRange",type->valuestring)){
cJSON *startTime = cJSON_GetObjectItem(item,MSG_SCENE_STARTTIME);
if(startTime == NULL) return FAIL_RETURN;
cJSON *endTime = cJSON_GetObjectItem(item,MSG_SCENE_ENDTIME);
if(endTime == NULL) return FAIL_RETURN;
cJSON *crossday = cJSON_GetObjectItem(item,MSG_SCENE_CROSSDAY);
if(crossday == NULL) return FAIL_RETURN;
//cJSON *crossday = cJSON_GetObjectItem(item,MSG_SCENE_CROSSDAY);
//if(crossday == NULL) return FAIL_RETURN;
cJSON *repeatday = cJSON_GetObjectItem(item,MSG_SCENE_REPEATDAYS);
if(repeatday == NULL) return FAIL_RETURN;
weekflag = kk_scene_parse_repeatday(repeatday);
if(!strcmp("timeRange",type->valuestring)){
kk_scene_push_timer_info(startTime->valueint,endTime->valueint,weekflag,sceneId);
}
res = kk_scene_insert_scene_condition(type->valuestring,startTime->valueint,endTime->valueint,
crossday->valueint,weekflag,sceneId);
0,weekflag,sceneId);
if(res != SUCCESS_RETURN){
INFO_PRINT("kk_scene_insert_scene_condition fail!!!\n");
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;
}
INFO_PRINT("kk_scene_parse_scene_condition success!!!\n");
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;
dm_mgr_dev_node_t *node = NULL;
if(str == NULL || sceneId == NULL){
ERROR_PRINT("kk_scene_parse_scene_action failed\n");
return INVALID_PARAMETER;
......@@ -725,33 +943,55 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId)
cJSON *action = cJSON_GetObjectItem(str,MSG_SCENE_ACTIONS);
if(action == NULL) return FAIL_RETURN;
//cJSON *items = cJSON_GetObjectItem(conditon,MSG_SCENE_ITEMS);
//if(items == NULL) return FAIL_RETURN;
cJSON * item = action->child;
while(item != NULL){
cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE);
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);
if(propertyName == NULL) return FAIL_RETURN;
cJSON *propertyValue = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYVALUE);
if(propertyValue == NULL) return FAIL_RETURN;
cJSON *productType = cJSON_GetObjectItem(item,MSG_PRODUCT_TYPE_STR);
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,
propertyName->valuestring,propertyValue->valuestring,delay,sceneId,node->fatherDeviceCode);
if(res != SUCCESS_RETURN){
INFO_PRINT("kk_scene_insert_scene_action fail!!!\n");
return res;
}
}
item = item->next;
}
INFO_PRINT("kk_scene_parse_scene_action success!!!\n");
kk_scene_action_info_send(isUpdate);
return SUCCESS_RETURN;
}
......@@ -772,7 +1012,7 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate)
cJSON *enable = cJSON_GetObjectItem(args,MSG_SCENE_ENABLE);
if(enable == NULL) return FAIL_RETURN;
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);
......@@ -790,10 +1030,10 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate)
res = kk_scene_parse_scene_condition(args,sceneId);
if(res != SUCCESS_RETURN){
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){
ERROR_PRINT("kk_scene_parse_scene_action failed\n");
return FAIL_RETURN;
......@@ -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);
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)
{
......@@ -915,6 +1203,7 @@ int kk_scene_check_condition(const char *sceneId)
time_t endTime = 0,endTime_m = 0;
int duration = 0;
int crossDay = 0;
int conditionFlag = 0;
sqlite3_stmt *stmt;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
time_t current = HAL_GetTime();
......@@ -923,6 +1212,7 @@ int kk_scene_check_condition(const char *sceneId)
sqlCmd = sqlite3_mprintf("select * from SceneConditionInfo WHERE sceneId = '%s'",sceneId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
conditionFlag = 1;
repeatday = sqlite3_column_int(stmt, DB_SCENECONDITION_REPEATDAY);
startTime = sqlite3_column_int(stmt, DB_SCENECONDITION_STARTTIME);
endTime = sqlite3_column_int(stmt, DB_SCENECONDITION_ENDTIME);
......@@ -969,9 +1259,17 @@ int kk_scene_check_condition(const char *sceneId)
}
}
sqlite3_finalize(stmt);
/*如果没有设置条件,直接return success*/
if(conditionFlag == 0){
res = SUCCESS_RETURN;
}
return res;
}
static int kk_scene_check_value(const char * compareType,const char * compareValue,cJSON *item,int valueType)
{
int res = FAIL_RETURN;
......@@ -1000,7 +1298,7 @@ static int kk_scene_check_value(const char * compareType,const char * compareVal
break;
case KK_TSL_DATA_TYPE_TEXT:
case KK_TSL_DATA_TYPE_DATE:
type = 2;
type = 2;//字串
break;
}
if(type == 2){
......@@ -1170,19 +1468,41 @@ int kk_scene_execute_action(const char* sceneId)
char *deviceCode = NULL;
char *propertyName = NULL;
char *propertyValue = NULL;
char *gwdeviceCode = NULL;
int delay = 0;
char *sqlCmd = NULL;
char gwdevice[][DEVICE_CODE_MAXLEN] = {0};
int idx=0,num = 0;
sqlite3_stmt *stmt;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE sceneId = '%s'",sceneId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
next:
while(sqlite3_step(stmt) == SQLITE_ROW){
deviceCode = sqlite3_column_text(stmt, DB_SCENEACTION_DEVICECODE);
propertyName = sqlite3_column_text(stmt,DB_SCENEACTION_PROPERTYNAME);
propertyValue = sqlite3_column_text(stmt,DB_SCENEACTION_PROPERTYVALUE);
delay = sqlite3_column_int(stmt,DB_SCENEACTION_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);
return res;
......@@ -1219,6 +1539,8 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
if(res == SUCCESS_RETURN){
INFO_PRINT("[%d]kk_scene_check_condition enter!!!\n",__LINE__);
res = kk_scene_check_condition(sceneId);
if(res == SUCCESS_RETURN){
res = kk_scene_check_trigger_condition(sceneId);
if(res == SUCCESS_RETURN){
_kk_scene_lock();
res = kk_scene_execute_action(sceneId);
......@@ -1227,6 +1549,7 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
}
}
}
}
}
sqlite3_finalize(stmt);
......
......@@ -3,6 +3,25 @@
#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 {
......
......@@ -3,7 +3,7 @@
*/
#include "infra_config.h"
#ifdef INFRA_SHA256
#define INFRA_SHA256_SMALLER
......@@ -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 */
}
#endif
#include "infra_config.h"
#ifdef INFRA_TIMER
/*
*
*/
......@@ -91,5 +90,5 @@ uint32_t utils_time_get_ms(void)
{
return HAL_UptimeMs();
}
#endif
......@@ -25,6 +25,9 @@
#define DM_UTILS_UINT16_STRLEN (5)
#define DM_UTILS_UINT32_STRLEN (10)
#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_LINK "link"
......
......@@ -793,7 +793,7 @@ int dm_tls_set_event_output_value(_IN_ kk_tsl_t *shadow, _IN_ char *key, _IN_ in
return FAIL_RETURN;
}
printf("Key: %.*s", key_len, key);
//printf("Key: %.*s", key_len, key);
res = _kk_tsl_event_search(shadow, key, offset, &event);
if (res != SUCCESS_RETURN) {
......
......@@ -3,6 +3,7 @@
#include <string.h>
#include "lite-cjson.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);
......@@ -470,7 +471,7 @@ static int _kk_tsl_properties_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *ro
return SUCCESS_RETURN;
}
printf("Number: %d", lite_properties.size);
INFO_PRINT("property number: %d\n", lite_properties.size);
if (lite_properties.size == 0) {
return SUCCESS_RETURN;
}
......@@ -490,7 +491,7 @@ static int _kk_tsl_properties_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *ro
return FAIL_RETURN;
}
printf("Index: %d\n", index);
//printf("Index: %d\n", index);
_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
lite_cjson_t lite_item;
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) {
return SUCCESS_RETURN;
}
......@@ -558,7 +559,7 @@ static int _kk_tsl_event_outputdatas_parse(_IN_ kk_tsl_t *shadow, _IN_ kk_tsl_ev
return FAIL_RETURN;
}
printf("Index: %d\n", index);
//printf("Index: %d\n", index);
_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
if (res != SUCCESS_RETURN || !lite_cjson_is_array(&lite_item)) {
return JSON_PARSE_FAILED;
}
//INFO_PRINT("event output number: %d\n", lite_item.size);
event->output_data_number = lite_item.size;
res = _kk_tsl_event_outputdatas_parse(shadow, event, &lite_item);
if (res != SUCCESS_RETURN) {
......@@ -618,8 +620,7 @@ static int _kk_tsl_events_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *root)
} else {
return SUCCESS_RETURN;
}
printf("\nevent Number: %d\n", lite_events.size);
INFO_PRINT("event Number: %d\n");
if (lite_events.size == 0) {
return SUCCESS_RETURN;
}
......@@ -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;
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) {
return SUCCESS_RETURN;
}
......@@ -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;
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) {
return SUCCESS_RETURN;
}
......@@ -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));
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)) {
//INFO_PRINT("services output Number: %d\n", lite_item.size);
service->output_data_number = lite_item.size;
res = _kk_tsl_service_outputdatas_parse(shadow, service, &lite_item);
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
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)) {
service->input_data_number = lite_item.size;
//INFO_PRINT("services input Number: %d\n", lite_item.size);
if(isGetService && service->input_data_number > 0){
res = _kk_tsl_service_inputdatas_get_parse(shadow, service, &lite_item);
}else
......@@ -914,7 +916,7 @@ static int _kk_tsl_services_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *root
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) {
return SUCCESS_RETURN;
}
......@@ -936,7 +938,7 @@ static int _kk_tsl_services_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *root
return FAIL_RETURN;
}
printf(" Index: %d\n", index);
//printf(" Index: %d\n", index);
_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
int res = 0;
lite_cjson_t lite_root;
INFO_PRINT("kk_tsl_create start!!\n");
if (shadow == NULL || *shadow != NULL || tsl == NULL || tsl_len <= 0) {
return INVALID_PARAMETER;
}
......@@ -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) {
return FAIL_RETURN;
}
INFO_PRINT("kk_tsl_create successful!!\n");
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