Commit 4d8ccef0 authored by chen.weican's avatar chen.weican

【修改内容】1,增加取反服务调用;2,增加休眠设备的解析

【提交人】陈伟灿
parent 3daecc29
...@@ -43,14 +43,14 @@ const char DM_MSG_TO_MIDDWARE[] = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\" ...@@ -43,14 +43,14 @@ const char DM_MSG_TO_MIDDWARE[] = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"
static char *s_split_product[] = { static char *s_split_product[] = {
"85", //三路面板 "85", //三路面板
"3002", //双路面板 "97", //双路面板
"3003" //三路面板 "3003" //三路面板
}; };
static int kk_check_need_split(cJSON * info) static int kk_check_need_split(cJSON * info)
{ {
return 0;//暂时不用拆分处理 //return 0;//暂时不用拆分处理
#if 0 #if 1
cJSON *productCode = NULL; cJSON *productCode = NULL;
int i = 0; int i = 0;
int num = sizeof(s_split_product)/sizeof(char*); int num = sizeof(s_split_product)/sizeof(char*);
......
...@@ -58,7 +58,7 @@ static char* _parse_data_by_subscribe(char* data, int len, int *outLen, void** c ...@@ -58,7 +58,7 @@ static char* _parse_data_by_subscribe(char* data, int len, int *outLen, void** c
static void watcher_cb (struct ev_loop *loop ,struct ev_io *w, int revents) static void watcher_cb (struct ev_loop *loop ,struct ev_io *w, int revents)
{ {
INFO_PRINT("watcher_cb !! \n"); //INFO_PRINT("watcher_cb !! \n");
//void *user_data = ev_userdata(loop); //void *user_data = ev_userdata(loop);
Bloop_ctrl_t *loop_ctrl = (Bloop_ctrl_t *)w->data; Bloop_ctrl_t *loop_ctrl = (Bloop_ctrl_t *)w->data;
uint8_t *dat = NULL; uint8_t *dat = NULL;
...@@ -77,7 +77,7 @@ static void watcher_cb (struct ev_loop *loop ,struct ev_io *w, int revents) ...@@ -77,7 +77,7 @@ static void watcher_cb (struct ev_loop *loop ,struct ev_io *w, int revents)
return; return;
} }
INFO_PRINT("watcher_cb:%s recived\r\n\r\n", (char *)dat); INFO_PRINT("watcher_cb:%s\n", (char *)dat);
loop_ctrl->isconnect = 1; loop_ctrl->isconnect = 1;
//if sub, need filter sbuscribe str //if sub, need filter sbuscribe str
if (IPC_PLAT2MID == loop_ctrl->type || IPC_MID2PLAT == loop_ctrl->type){ if (IPC_PLAT2MID == loop_ctrl->type || IPC_MID2PLAT == loop_ctrl->type){
......
...@@ -93,6 +93,7 @@ typedef enum { ...@@ -93,6 +93,7 @@ typedef enum {
#define MSG_KEYMODIFY_NOTIFICATION "KeyModifyNotification" #define MSG_KEYMODIFY_NOTIFICATION "KeyModifyNotification"
/************************SCENE RELATION*************************/ /************************SCENE RELATION*************************/
#define MSG_SCENE_NEGATICE "negativeProperty"
#define MSG_SCENE_SUPPORT "sceneSupport" #define MSG_SCENE_SUPPORT "sceneSupport"
#define MSG_SCENE_MSGID "msgId" #define MSG_SCENE_MSGID "msgId"
#define MSG_SCENE_NAME "name" #define MSG_SCENE_NAME "name"
......
...@@ -265,7 +265,7 @@ int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MA ...@@ -265,7 +265,7 @@ int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MA
{ {
int heartbeat = 0; int heartbeat = 0;
kk_msg_parse_productType(tsl_str,node->productType); kk_msg_parse_productType(tsl_str,node->productType);
res = kk_tsl_create(tsl_str,strlen(tsl_str),&node->dev_shadow,&heartbeat); res = kk_tsl_create(tsl_str,strlen(tsl_str),&node->dev_shadow,&heartbeat,&node->dormancyDev);
free(tsl_str); free(tsl_str);
if(res != 0){ if(res != 0){
return FAIL_RETURN; return FAIL_RETURN;
......
...@@ -31,6 +31,7 @@ typedef struct { ...@@ -31,6 +31,7 @@ typedef struct {
char isOffline; char isOffline;
int hb_timeout; //heartbeat time int hb_timeout; //heartbeat time
time_t timestamp; time_t timestamp;
char dormancyDev; //1,休眠设备;0,不是
struct list_head linked_list; struct list_head linked_list;
} dm_mgr_dev_node_t; } dm_mgr_dev_node_t;
......
...@@ -546,7 +546,6 @@ int dm_msg_request (_IN_ dm_msg_request_t *request,_IN_ int isAsync) ...@@ -546,7 +546,6 @@ int dm_msg_request (_IN_ dm_msg_request_t *request,_IN_ int isAsync)
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);
......
...@@ -74,6 +74,7 @@ const char DM_MSG_INFO[] DM_READ_ONLY; ...@@ -74,6 +74,7 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#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_SERVICE_EXECUTESCENE "/thing/service/executeScene"
#define KK_THING_SERVICE_NEGATIVE "/thing/service/negativeProperty"
#define KK_THING_METHOD_DELETESCENC "thing.service.deleteScene" #define KK_THING_METHOD_DELETESCENC "thing.service.deleteScene"
#define KK_THING_METHOD_UPDATESCENC "thing.service.updateScene" #define KK_THING_METHOD_UPDATESCENC "thing.service.updateScene"
#define KK_THING_METHOD_EXECUTESCENE "thing.service.executeScene" #define KK_THING_METHOD_EXECUTESCENE "thing.service.executeScene"
......
...@@ -848,6 +848,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -848,6 +848,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
kk_service_executeRoom_handle(paramStr); kk_service_executeRoom_handle(paramStr);
} }
#if 0
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_SETLOCALTIMER) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_SETLOCALTIMER) == 0){
INFO_PRINT(" setlocaltimer \n"); INFO_PRINT(" setlocaltimer \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
...@@ -888,7 +889,8 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -888,7 +889,8 @@ 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);
kk_service_deleteKey_handle(deviceCode->valuestring,paramStr); kk_service_deleteKey_handle(deviceCode->valuestring,paramStr);
} }
#endif
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);
...@@ -912,7 +914,31 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -912,7 +914,31 @@ 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 *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID);
kk_service_executeScene_handle(deviceCode->valuestring,paramStr,msgId); kk_service_executeScene_handle(deviceCode->valuestring,paramStr,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_NEGATIVE) == 0){
INFO_PRINT("negative service \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(paramStr != NULL){
cJSON *identifierStr = cJSON_GetObjectItem(paramStr, MSG_SCENE_NEGATICE);
if(identifierStr != NULL){
int value_ = 0;
dm_mgr_dev_node_t *node = NULL;
kk_property_db_get_value(deviceCode->valuestring,identifierStr->valuestring,4, &value_);
value_ = !value_;
res = dm_mgr_get_device_by_devicecode(deviceCode->valuestring, &node);
if (res != SUCCESS_RETURN) {
goto directReturn;
}
cJSON *root_ =cJSON_CreateObject();
cJSON_AddNumberToObject(root_,identifierStr->valuestring,value_);
char *out_=cJSON_Print(root_);
kk_msg_execute_property_set(node->productCode,node->deviceCode,out_,node->fatherDeviceCode);
cJSON_Delete(root_);
free(out_);
}
}
}
else{ else{
INFO_PRINT("Error msgtype!!! \n"); INFO_PRINT("Error msgtype!!! \n");
......
...@@ -205,6 +205,31 @@ int kk_property_db_update_value(const char *deviceCode,const char *identifier,co ...@@ -205,6 +205,31 @@ int kk_property_db_update_value(const char *deviceCode,const char *identifier,co
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_property_db_get_value_directly(const char *deviceCode,const char *identifier,char* value)
{
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
sqlite3_stmt *stmt;
char *valueStr = NULL;
kk_property_db_ctx_t *ctx = _kk_property_db_get_ctx();
_kk_property_db_lock();
sqlCmd = sqlite3_mprintf("select * from PropertiesInfo WHERE deviceCode= '%s' and identifier = '%s'",deviceCode,identifier);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
valueStr = sqlite3_column_text(stmt, DB_VALUE);
printf("valueStr:%s\n",valueStr);
memcpy(value,valueStr, strlen(valueStr));
printf("value:%s\n",value);
}
sqlite3_free(sqlCmd);
_kk_property_db_unlock();
sqlite3_finalize(stmt);
return SUCCESS_RETURN;
}
int kk_property_db_get_value(const char *deviceCode,const char *identifier,void* value) int kk_property_db_get_value(const char *deviceCode,const char *identifier,void* value)
{ {
char *sqlCmd = NULL; char *sqlCmd = NULL;
......
...@@ -385,9 +385,10 @@ int kk_subDev_send_property_get(const char *fatherDeviceCode) ...@@ -385,9 +385,10 @@ int kk_subDev_send_property_get(const char *fatherDeviceCode)
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res); ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
continue; continue;
} }
//if(!strcmp(pDeviceCode,"842E14FFFE9A26CA")){ /*休眠设备,不需要下发获取属性*/
//continue; if(node->dormancyDev){
//} continue;
}
/*发送之前先置为KK_DEV_UNKNOW*/ /*发送之前先置为KK_DEV_UNKNOW*/
node->isOffline = KK_DEV_UNKNOW; node->isOffline = KK_DEV_UNKNOW;
kk_msg_execute_property_get(node); kk_msg_execute_property_get(node);
...@@ -422,12 +423,12 @@ int kk_subDev_check_scene_support(const char *deviceCode) ...@@ -422,12 +423,12 @@ int kk_subDev_check_scene_support(const char *deviceCode)
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
pDeviceCode = sqlite3_column_text(stmt, DB_DEVICECODE); pDeviceCode = sqlite3_column_text(stmt, DB_DEVICECODE);
if (!strcmp(deviceCode,pDeviceCode)) { if (!strcmp(deviceCode,pDeviceCode)) {
return 1; res = 1;
} }
} }
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
return 0; return res;
} }
int kk_subDev_set_action_by_productType(const char *productType,const char *sceneId,const char *propertyName,const char *propertyValue,const char *type) int kk_subDev_set_action_by_productType(const char *productType,const char *sceneId,const char *propertyName,const char *propertyValue,const char *type)
......
...@@ -30,6 +30,7 @@ char * g_filerToPlatTable[] = ...@@ -30,6 +30,7 @@ char * g_filerToPlatTable[] =
{KK_LOGIN_TOPIC_REPLY}, {KK_LOGIN_TOPIC_REPLY},
{KK_THING_SERVICE_PROPERTY_GET}, {KK_THING_SERVICE_PROPERTY_GET},
{KK_THING_CLOUDSTATE_MSG}, {KK_THING_CLOUDSTATE_MSG},
#if 0
{KK_THING_SERVICE_SETLOCALTIMER}, {KK_THING_SERVICE_SETLOCALTIMER},
{KK_THING_SERVICE_GETLOCALTIMER}, {KK_THING_SERVICE_GETLOCALTIMER},
{KK_THING_SERVICE_SETCOUNTDOWN}, {KK_THING_SERVICE_SETCOUNTDOWN},
...@@ -37,9 +38,11 @@ char * g_filerToPlatTable[] = ...@@ -37,9 +38,11 @@ char * g_filerToPlatTable[] =
{KK_THING_SERVICE_ADDKEY}, {KK_THING_SERVICE_ADDKEY},
{KK_THING_SERVICE_DELETEKEY}, {KK_THING_SERVICE_DELETEKEY},
{KK_THING_SERVICE_MODIFYKEY}, {KK_THING_SERVICE_MODIFYKEY},
#endif
{KK_THING_SERVICE_ADDSCENC}, {KK_THING_SERVICE_ADDSCENC},
{KK_THING_SERVICE_UPDATESCENC}, {KK_THING_SERVICE_UPDATESCENC},
{KK_THING_SERVICE_DELETESCENC}, {KK_THING_SERVICE_DELETESCENC},
{KK_THING_SERVICE_NEGATIVE},
}; };
static int _kk_filter_to_plat(const char* msgtype) static int _kk_filter_to_plat(const char* msgtype)
{ {
...@@ -522,7 +525,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -522,7 +525,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
} }
} }
else{ else{
INFO_PRINT("kk_platMsg_handle data: don't handle it [%s]\n",data); INFO_PRINT("kk_platMsg_handle data: don't handle it\n");
} }
error: error:
......
This diff is collapsed.
This diff is collapsed.
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
#define KK_TSL_KEY_SIZE "size" #define KK_TSL_KEY_SIZE "size"
#define KK_TSL_KEY_ITEM "item" #define KK_TSL_KEY_ITEM "item"
#define KK_TSL_KEY_HEARTBEAT "heartbeat" #define KK_TSL_KEY_HEARTBEAT "heartbeat"
#define KK_TSL_KEY_SLEEPTIME "sleepTime"
#define KK_MSG_KEY_DELIMITER '.' #define KK_MSG_KEY_DELIMITER '.'
#define KK_URI_SERVICE_DELIMITER '/' #define KK_URI_SERVICE_DELIMITER '/'
......
...@@ -1646,7 +1646,37 @@ int kk_tsl_assemble_service_output(_IN_ kk_tsl_t *shadow, _IN_ char *identifier, ...@@ -1646,7 +1646,37 @@ int kk_tsl_assemble_service_output(_IN_ kk_tsl_t *shadow, _IN_ char *identifier,
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/******************************************************************************/
/* 函 数 名: _kk_tsl_sleeptime_parse */
/* 描 述: 解析是否是休眠设备 */
/* 输入参数: root: 物模型字串 */
/* 返 回 值: 返回0表示否,1表示是 */
/******************************************************************************/
static int _kk_tsl_sleeptime_parse(_IN_ lite_cjson_t *root)
{
int res = 0;
lite_cjson_t lite_item;
lite_cjson_t lite_item_sleeptime;
//Parse Identifier (Mandatory)
memset(&lite_item, 0, sizeof(lite_cjson_t));
res = lite_cjson_object_item(root, KK_TSL_KEY_PROFILE, strlen(KK_TSL_KEY_PROFILE), &lite_item);
if (res != SUCCESS_RETURN || !lite_cjson_is_object(&lite_item)) {
return 0;
}
res = lite_cjson_object_item(&lite_item, KK_TSL_KEY_SLEEPTIME, strlen(KK_TSL_KEY_SLEEPTIME), &lite_item_sleeptime);
if (res != SUCCESS_RETURN || !lite_cjson_is_string(&lite_item_sleeptime)) {
return 0;
}
return 1;
}
/******************************************************************************/
/* 函 数 名: _kk_tsl_heartbeat_parse */
/* 描 述: 解析心跳时间 */
/* 输入参数: root: 物模型字串 */
/* 输出参数: heartbeat: 心跳时间 */
/* 返 回 值: 返回0表示成功,其他表示失败 */
/******************************************************************************/
static int _kk_tsl_heartbeat_parse(_OU_ int *heartbeat, _IN_ lite_cjson_t *root) static int _kk_tsl_heartbeat_parse(_OU_ int *heartbeat, _IN_ lite_cjson_t *root)
{ {
int res = 0; int res = 0;
...@@ -1666,7 +1696,7 @@ static int _kk_tsl_heartbeat_parse(_OU_ int *heartbeat, _IN_ lite_cjson_t *root) ...@@ -1666,7 +1696,7 @@ static int _kk_tsl_heartbeat_parse(_OU_ int *heartbeat, _IN_ lite_cjson_t *root)
*heartbeat = atoi(lite_item_heartbeat.value); *heartbeat = atoi(lite_item_heartbeat.value);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow,_OU_ int *heartbeat) int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow,_OU_ int *heartbeat,_OU_ int *isDormancyDev)
{ {
int res = 0; int res = 0;
lite_cjson_t lite_root; lite_cjson_t lite_root;
...@@ -1689,6 +1719,7 @@ int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow ...@@ -1689,6 +1719,7 @@ int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow
free(*shadow); free(*shadow);
return JSON_PARSE_FAILED; return JSON_PARSE_FAILED;
} }
*isDormancyDev = _kk_tsl_sleeptime_parse(&lite_root);
// Parse heartbeat time // Parse heartbeat time
_kk_tsl_heartbeat_parse(heartbeat,&lite_root); _kk_tsl_heartbeat_parse(heartbeat,&lite_root);
......
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