Commit 5bba8740 authored by 尹佳钦's avatar 尹佳钦

20210804

parent fcafb8ee
......@@ -66,6 +66,7 @@ cJSON *kk_sync_rooms_to_sdk(cJSON *root,cJSON *data)
for(i=0;i<num;i++,item++){
room = cJSON_GetArrayItem(rooms,i);
roomId = cJSON_GetObjectItem(room,ROOMS_ID_STR);
name = cJSON_GetObjectItem(room,NAME_STR);
devices = cJSON_GetObjectItem(room,DEVICES_STR);
......@@ -79,6 +80,9 @@ cJSON *kk_sync_rooms_to_sdk(cJSON *root,cJSON *data)
item->room_status = NULL;
}
roomsAry = _kk_syn_rooms_info(num,items);
cJSON_AddItemToObject(root, ROOMS_STR, roomsAry);
return root;
......@@ -169,6 +173,7 @@ int kk_sync_actions(cJSON *actions,SYN_SCENE_ACTION **act,char **room_id)
for(i=0;i<num;i++,ptr++){
cJSON *item;
item = cJSON_GetArrayItem(actions,i);
......@@ -203,20 +208,26 @@ int kk_sync_actions(cJSON *actions,SYN_SCENE_ACTION **act,char **room_id)
static int kk_sync_scene_condition(cJSON *condition,SYN_SCENE_ITEM **build)
{
cJSON *itemAry = NULL;
cJSON *startTime,*endTime,*crossDay,*repeat_days;
if(condition==NULL ||build==NULL||*build==NULL){
return -1;
}
int i,j,num = cJSON_GetArraySize(condition);
if((itemAry = cJSON_GetObjectItem(condition,"items"))==NULL){
return -1;
}
int i,j,num = cJSON_GetArraySize(itemAry);
int repeat;
int get_flag = 0;
SYN_SCENE_ITEM *ptr=*build;
printf("kk_sync_scene_condition,num=%d\n",num);
for(i=0;i<num;i++){
cJSON *item;
printf("i=%d\n",i);
item = cJSON_GetArrayItem(condition,i);
startTime = cJSON_GetObjectItem(item,"startTime");
......@@ -259,7 +270,10 @@ cJSON *kk_sync_scence_to_sdk(cJSON *root,cJSON *data)
cJSON *scenesAry = cJSON_CreateArray();
cJSON *sceneItem;
for(i=0;i<num;i++,build++){
SYN_SCENE_ITEM *pScene = build;
for(i=0;i<num;i++,pScene++){
printf("i=%d\n",i);
cJSON *item = cJSON_GetArrayItem(scenes,i);
actions = cJSON_GetObjectItem(item,ACTIONS_STR);
enable = cJSON_GetObjectItem(item,ENABLE_STR);
......@@ -274,16 +288,16 @@ cJSON *kk_sync_scence_to_sdk(cJSON *root,cJSON *data)
if(strcmp(sceneType->valuestring,"")==){
}*/
build->act_num = kk_sync_actions(actions,&build->act,&build->room_id);
pScene->act_num = kk_sync_actions(actions,&pScene->act,&pScene->room_id);
kk_sync_scene_condition(condition,&build);
kk_sync_scene_condition(condition,&pScene);
build->scene_id = sceneId->valuestring;
build->name = name->valuestring;
build->pannel_id = NULL;
pScene->scene_id = sceneId->valuestring;
pScene->name = name->valuestring;
pScene->pannel_id = NULL;
sceneItem = kk_scene_build(&build);
sceneItem = kk_scene_build(&pScene);
cJSON_AddItemToArray(scenesAry,sceneItem);
......@@ -294,51 +308,113 @@ cJSON *kk_sync_scence_to_sdk(cJSON *root,cJSON *data)
}
//同步设备
int kk_sync_devices_to_sdk(cJSON *root)
int _kk_sync_device_item(cJSON *deviceCode,cJSON *epNum,cJSON *name,cJSON *roomId,cJSON *deviceAry)
{
kk_map_dev_node_t *node = NULL;
char nodeid[32] = {0};
char gwmac[32] = {0};
char submac[32] = {0};
char channel[4] = {0};
int idx = 1;
kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
cJSON *devices = cJSON_CreateArray();
_kk_map_dev_mutex_lock();
if(deviceCode == NULL || deviceAry==NULL){
return -1;
}
list_for_each_entry(node, &ctx->dev_list, linked_list, kk_map_dev_node_t) {
if (node != NULL) {
for(idx = 1; idx <= node->channelNum; idx++){
if(strlen(node->deviceCode)==strlen(deviceCode->valuestring) &&
!strcmp(node->deviceCode,deviceCode->valuestring)){
cJSON *subdevicesItem = cJSON_CreateObject();
snprintf(channel,sizeof(channel),"%d",idx);
cJSON_AddStringToObject(subdevicesItem, CHANNEL_STRING, channel);
if(epNum==NULL ||epNum->type!=cJSON_String){
cJSON_AddStringToObject(subdevicesItem, CHANNEL_STRING, "1");
kk_creater_nodeid(node->deviceCode,1,nodeid);
}else{
cJSON_AddStringToObject(subdevicesItem, CHANNEL_STRING, epNum->valuestring);
kk_creater_nodeid(node->deviceCode,atoi(epNum->valuestring),nodeid);
}
cJSON_AddStringToObject(subdevicesItem, NODEID_STRING, nodeid);
if(name==NULL ||name->type!=cJSON_String){
cJSON_AddStringToObject(subdevicesItem, NAME_STRING, "unkown");
}else{
cJSON_AddStringToObject(subdevicesItem, NAME_STRING, name->valuestring);
}
if(name==NULL ||name->type!=cJSON_String){
cJSON_AddStringToObject(subdevicesItem, ROOM_ID_STRING, "unkown");
}else{
cJSON_AddStringToObject(subdevicesItem, ROOM_ID_STRING, roomId->valuestring);
}
//todo
cJSON_AddStringToObject(subdevicesItem, DEVICE_FIELD_STRING, "");
cJSON_AddStringToObject(subdevicesItem, DEVICE_FIELD_IDNDEX_STRING, "1");
cJSON_AddStringToObject(subdevicesItem, DEVICE_FIELD_IDNDEX_STRING, "");
cJSON_AddStringToObject(subdevicesItem, DEVICE_ICON_STRING, "");
cJSON_AddStringToObject(subdevicesItem, DEVICE_POS_STRING, "1");
cJSON_AddStringToObject(subdevicesItem, DEVICE_POS_STRING, "");
_deviceCode_switchto_mac(node->gwDeviceCode,gwmac);
cJSON_AddStringToObject(subdevicesItem, GW_MAC_STRING, gwmac);
_deviceCode_switchto_mac(node->deviceCode,submac);
cJSON_AddStringToObject(subdevicesItem, MAC_STRING, submac);
//todo name字段
cJSON_AddStringToObject(subdevicesItem, NAME_STRING, "默认灯");
memset(nodeid,0x0,sizeof(nodeid));
kk_creater_nodeid(node->deviceCode,idx,nodeid);
cJSON_AddStringToObject(subdevicesItem, NODEID_STRING, nodeid);
cJSON_AddStringToObject(subdevicesItem, OPERATE_TYPE_STRING, node->opearteType);
cJSON_AddStringToObject(subdevicesItem, ROOM_ID_STRING, "1");
cJSON_AddItemToArray(devices, subdevicesItem);
cJSON_AddItemToArray(deviceAry, subdevicesItem);
}
}
}
_kk_map_dev_mutex_unlock();
cJSON_AddItemToObject(root, DEVICES_STRING, devices);
return 0;
}
int kk_sync_device(cJSON *roomId,cJSON *inDevAry,cJSON *outDevAry)
{
kk_map_dev_node_t *node = NULL;
kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
cJSON *deviceCode = NULL,*epNum = NULL,*name = NULL;
int i,num;
if(inDevAry==NULL||inDevAry->type!=cJSON_Array||
outDevAry==NULL||outDevAry->type!=cJSON_Array){
return -1;
}
num = cJSON_GetArraySize(inDevAry);
for(i=0;i<num;i++){
cJSON *item = cJSON_GetArrayItem(inDevAry,i);
deviceCode = cJSON_GetObjectItem(item,"deviceCode");
epNum = cJSON_GetObjectItem(item,"epNum");
name = cJSON_GetObjectItem(item,"name");
_kk_sync_device_item(deviceCode,epNum,name,roomId,outDevAry);
}
return 0;
}
int kk_sync_devices_to_sdk(cJSON *root,cJSON *data)
{
cJSON *rooms = cJSON_GetObjectItem(data,ROOMS_STR);
cJSON *deviceAry = cJSON_CreateArray();
int i,num = cJSON_GetArraySize(rooms);
cJSON *roomId,*devices;
for(i=0;i<num;i++){
cJSON *room = cJSON_GetArrayItem(rooms,i);
roomId = cJSON_GetObjectItem(room,ROOMS_ID_STR);
devices = cJSON_GetObjectItem(room,DEVICES_STR);
kk_sync_device(roomId,devices,deviceAry);
}
cJSON_AddItemToObject(root, DEVICES_STRING, deviceAry);
return root;
}
//同步设备状态
//
cJSON *_kk_sync_devicestatus_arg_build(kk_map_dev_node_t *node)
......@@ -946,6 +1022,7 @@ int kk_create_syncinfo_to_sdk(cJSON *payload)
cJSON *code_lib_controllers;
cJSON *controllers;
cJSON *expand_rules;
cJSON *data = kk_get_sync_data(payload);
char *out = NULL;
printf("!!!!!!!!!!!!!!!!!!!!------>%x\n",&out);
......@@ -974,21 +1051,30 @@ int kk_create_syncinfo_to_sdk(cJSON *payload)
printf("kk_sync_devices_status_to_sdk\n");
kk_sync_devices_status_to_sdk(root);
printf("kk_sync_devices_to_sdk\n");
kk_sync_devices_to_sdk(root);
printf("kk_get_sync_data\n");
cJSON *data = kk_get_sync_data(payload);
kk_sync_devices_to_sdk(root,data);
kk_sync_rooms_to_sdk(root,data);
kk_sync_scence_to_sdk(root,data);
kk_sync_gw_version_to_sdk(root,data);
kk_sync_ccu_version_to_sdk(root,data);
kk_sync_guard_to_sdk(root,data);
kk_sync_central_ac_to_sdk(root,data);
kk_sync_central_ac_indoorunits_to_sdk(root,data);
kk_sync_groups_to_sdk(root,data);
kk_create_floors_to_sdk(root,data);
......
......@@ -42,7 +42,7 @@ cJSON *kk_get_raw_sync_data(cJSON *payload);
cJSON *kk_sync_rooms_to_sdk(cJSON *root,cJSON *payload);
cJSON *kk_sync_scence_to_sdk(cJSON *root,cJSON *data);
int kk_sync_devices_to_sdk(cJSON *root);
int kk_sync_devices_to_sdk(cJSON *root,cJSON *data);
int kk_sync_devices_status_to_sdk(cJSON *root);
int kk_create_syncinfo_to_sdk(cJSON *payload);
......
......@@ -391,6 +391,33 @@ int kk_room_device_list_add(const char *deviceCode)
return SUCCESS_RETURN;
}
cJSON *kk_get_roomIds_ary(void)
{
int isExist = 0;
sqlite3_stmt *stmt;
char *proomId = NULL;
cJSON *roomIdsAry = cJSON_CreateArray();
kk_area_ctx_t *ctx = _kk_area_get_ctx();
const char *searchCmd = "select * from AreaInfo;";
_kk_area_lock();
sqlite3_prepare_v2(ctx->pDb, searchCmd, strlen(searchCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
proomId = (char*)sqlite3_column_text(stmt, DB_ROOM_ID);
cJSON_AddItemToArray(roomIdsAry,cJSON_CreateNumber(atoi(proomId)));
}
sqlite3_finalize(stmt);
_kk_area_unlock();
return roomIdsAry;
}
kk_dev_list_t* kk_get_room_deviceCode(const char* roomId)
{
sqlite3_stmt *stmt;
......
......@@ -30,6 +30,7 @@ int kk_room_device_list_add(const char *deviceCode);
kk_dev_list_t* kk_get_room_deviceCode(const char* roomId);
void kk_free_room_dev_list(void);
int kk_get_device_name(const char* deviceCode,const char *epNum,char *devName,int size);
cJSON *kk_get_roomIds_ary(void);
#endif
......@@ -879,6 +879,8 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
cJSON *deviceCode = NULL;
json=cJSON_Parse(data);
printf("_iotx_linkkit_event_callback\n");
if (json == NULL) {
WARNING_PRINT("Error before: [%s]\n","cJSON_Parse");
return;
......
This diff is collapsed.
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