Commit a8d1c966 authored by 尹佳钦's avatar 尹佳钦

8009语音面板控制设备支持:插座,灯控,窗帘

parent 750c1fa7
......@@ -501,7 +501,7 @@ void KK_Data_FromMid(void* str,int len)
arming_status_notify(type);
}
}else{
//property_post_deal(deviceCode->valuestring,payload);
property_post_deal(deviceCode->valuestring,payload);
}
}else if(strstr(msgtype->valuestring,"/thing/topo/delete")!= NULL){
device_delete_sync(payload);
......
......@@ -36,30 +36,30 @@
static char s_ccuid[DEVICE_CODE_LEN] = {0};
int kk_lan_get_ccuid(_OU_ char *device_code)
{
strncpy(device_code, s_ccuid, strlen(s_ccuid));
printf("kk_lan_get_ccuid:%s\n",s_ccuid);
return strlen(s_ccuid);
{
strncpy(device_code, s_ccuid, strlen(s_ccuid));
printf("kk_lan_get_ccuid:%s\n",s_ccuid);
return strlen(s_ccuid);
}
static int _setDevice_Code(_IN_ char *device_code,int len)
{
memset(s_ccuid, 0x0, DEVICE_CODE_LEN);
printf("_setDevice_Code:%s\n",device_code);
strncpy(s_ccuid, device_code, len);
return len;
memset(s_ccuid, 0x0, DEVICE_CODE_LEN);
printf("_setDevice_Code:%s\n",device_code);
strncpy(s_ccuid, device_code, len);
return len;
}
extern int HAL_Execel_cmd(char * cmd,char * buf,int buf_len,int* ret_len);
static void kk_lan_ccuid_init(void)
{
uint8_t ccuid[DEVICE_CODE_LEN] = {0};
int ccuid_len = 0;
HAL_Execel_cmd(GET_CCUID_CMD,(char *)ccuid,sizeof(ccuid),&ccuid_len);
printf("GET_CCUID_CMD:%s\n",ccuid);
if(ccuid_len > 0 && ccuid_len <= DEVICE_CODE_LEN){
_setDevice_Code((char *)ccuid,ccuid_len-1);
}else{
uint8_t ccuid[DEVICE_CODE_LEN] = {0};
int ccuid_len = 0;
HAL_Execel_cmd(GET_CCUID_CMD,(char *)ccuid,sizeof(ccuid),&ccuid_len);
printf("GET_CCUID_CMD:%s\n",ccuid);
if(ccuid_len > 0 && ccuid_len <= DEVICE_CODE_LEN){
_setDevice_Code((char *)ccuid,ccuid_len-1);
}else{
_setDevice_Code(KK_CCU_ID,strlen(KK_CCU_ID));
}
}
}
......
......@@ -13,8 +13,7 @@
/*******获取同步数据json*******/
static cJSON *kk_get_sync_data(cJSON *payload)
{
cJSON *data = cJSON_GetObjectItem(payload,DATA_STR);
return cJSON_GetObjectItem(data,DATA_STR);
return cJSON_GetObjectItem(payload,DATA_STR);
}
......@@ -66,6 +65,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 +79,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;
......@@ -172,6 +175,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);
......@@ -206,13 +210,18 @@ 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;
}
if((itemAry = cJSON_GetObjectItem(condition,"items"))==NULL){
return -1;
}
int i,j,num = cJSON_GetArraySize(condition);
int i,j,num = cJSON_GetArraySize(itemAry);
int repeat;
int get_flag = 0;
......@@ -265,7 +274,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);
......@@ -301,17 +313,20 @@ 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();
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) {
if(strlen(node->deviceCode)==strlen(deviceCode->valuestring) &&
......@@ -320,10 +335,10 @@ int kk_sync_devices_to_sdk(cJSON *root)
if(epNum==NULL ||epNum->type!=cJSON_String){
cJSON_AddStringToObject(subdevicesItem, CHANNEL_STRING, "1");
kk_creater_nodeid(node->deviceCode,1,nodeid,atoi(node->opearteType));
kk_creater_nodeid(node->deviceCode,1,nodeid);
}else{
cJSON_AddStringToObject(subdevicesItem, CHANNEL_STRING, epNum->valuestring);
kk_creater_nodeid(node->deviceCode,atoi(epNum->valuestring),nodeid,atoi(node->opearteType));
kk_creater_nodeid(node->deviceCode,atoi(epNum->valuestring),nodeid);
}
cJSON_AddStringToObject(subdevicesItem, NODEID_STRING, nodeid);
......@@ -350,7 +365,6 @@ int kk_sync_devices_to_sdk(cJSON *root)
cJSON_AddStringToObject(subdevicesItem, MAC_STRING, submac);
cJSON_AddStringToObject(subdevicesItem, OPERATE_TYPE_STRING, node->opearteType);
cJSON_AddItemToArray(deviceAry, subdevicesItem);
}
}
......@@ -374,6 +388,7 @@ int kk_sync_device(cJSON *roomId,cJSON *inDevAry,cJSON *outDevAry)
num = cJSON_GetArraySize(inDevAry);
for(i=0;i<num;i++){
printf("...i=%d\n",i);
cJSON *item = cJSON_GetArrayItem(inDevAry,i);
deviceCode = cJSON_GetObjectItem(item,"deviceCode");
epNum = cJSON_GetObjectItem(item,"epNum");
......@@ -392,11 +407,16 @@ int kk_sync_devices_to_sdk(cJSON *root,cJSON *data)
int i,num = cJSON_GetArraySize(rooms);
cJSON *roomId,*devices;
printf("kk_sync_devices_to_sdk,num=%d\n",num);
for(i=0;i<num;i++){
printf("i=%d\n",i);
cJSON *room = cJSON_GetArrayItem(rooms,i);
roomId = cJSON_GetObjectItem(room,ROOMS_ID_STR);
devices = cJSON_GetObjectItem(room,DEVICES_STR);
printf("devices...=%s\n",cJSON_Print(devices));
kk_sync_device(roomId,devices,deviceAry);
}
......@@ -413,7 +433,6 @@ cJSON *_kk_sync_devicestatus_arg_build(kk_map_dev_node_t *node)
cJSON *newccu,*oldccu;
cJSON *arg = cJSON_CreateObject();
kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
if(node == NULL ||node->syn_type!=1||node->syn_opcode==NULL){
return arg;
......@@ -478,7 +497,6 @@ static int _kk_sync_devices_status_arg_str(kk_map_dev_node_t *node,cJSON *devSta
cJSON *newccu = NULL,*oldccu = NULL;
cJSON *dev_status = NULL;
kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
if(node == NULL ||devStatusAry==NULL||index==NULL){
return -1;
......@@ -513,7 +531,7 @@ static int _kk_sync_devices_status_arg_str(kk_map_dev_node_t *node,cJSON *devSta
dev_status = cJSON_CreateObject();
add_val_to_obj(dev_status,val,"arg");
kk_creater_nodeid(node->deviceCode,atoi(epNum->valuestring),nodeid,atoi(node->opearteType));
kk_creater_nodeid(node->deviceCode,atoi(epNum->valuestring),nodeid);
cJSON_AddStringToObject(dev_status, OPCODE_STRING,opcode->valuestring);
cJSON_AddNumberToObject(dev_status, NODEID_STRING, atoi(nodeid));
......@@ -551,7 +569,7 @@ static int _kk_sync_devices_status_arg_obj(kk_map_dev_node_t *node,cJSON *devSta
cJSON_AddItemToObject(dev_status,ARG_STRING,arg);
cJSON_AddStringToObject(dev_status, OPCODE_STRING,node->syn_opcode);
kk_creater_nodeid(node->deviceCode,1,nodeid,atoi(node->opearteType));
kk_creater_nodeid(node->deviceCode,1,nodeid);
cJSON_AddNumberToObject(dev_status, NODEID_STRING, atoi(nodeid));
memset(indexId,0,sizeof(indexId));
......@@ -571,6 +589,7 @@ int kk_sync_devices_status_to_sdk(cJSON *root)
kk_map_dev_node_t *n = NULL;
cJSON *devStatusAry = cJSON_CreateArray();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
_kk_map_dev_mutex_lock();
list_for_each_entry_safe(node,n, &ctx->dev_list, linked_list, kk_map_dev_node_t){
......@@ -585,7 +604,7 @@ int kk_sync_devices_status_to_sdk(cJSON *root)
}
}
_kk_map_dev_mutex_unlock();
cJSON_AddItemToObject(root, DEVICE_STATUS_STRING, devStatusAry);
......@@ -657,65 +676,94 @@ typedef struct{
char *nodeId;
char *sensor_type;
}SYN_GUARD_SENSORS;
static cJSON *_kk_guard_sensors_build(int num,SYN_GUARD_SENSORS *sensors)
static int _kk_guard_sensors_build(cJSON *guard_sensors,int num,SYN_GUARD_SENSORS *sensors)
{
int i;
cJSON *item;
cJSON *guard_sensors = cJSON_CreateArray();
SYN_GUARD_SENSORS *pSensor = sensors;
SYN_GUARD_SENSORS *pSensor;
if(num<=0 || sensors==NULL){
return -1;
}
pSensor = sensors;
for(i=0;i<num;i++,pSensor++){
item = cJSON_CreateObject();
cJSON *item = cJSON_CreateObject();
cJSON_AddStringToObject(item,"nodeid",(pSensor->nodeId)?pSensor->nodeId:"-1");
cJSON_AddStringToObject(item,"sensor_type",(pSensor->sensor_type)?pSensor->sensor_type:"0");
cJSON_AddItemToArray(guard_sensors,item);
}
return guard_sensors;
return 0;
}
static cJSON *_kk_guard_custom_zone_build(int num,char *roomId)
{
int i;
cJSON *custom_guard_zone = cJSON_CreateArray();
char *pRoomId = roomId;
for(i=0;i<num;i++,pRoomId++){
cJSON_AddItemToArray(custom_guard_zone,cJSON_CreateString(pRoomId));
}
return custom_guard_zone;
}
cJSON *kk_sync_guard_to_sdk(cJSON *root,cJSON *data)
int kk_sync_guard_to_sdk(cJSON *root,cJSON *data)
{
char modeStr[8] = {0};
char *armingStr = NULL;
cJSON *guard = cJSON_CreateObject();
cJSON *custom_guard_zone;
cJSON *guard_sensors;
//todo 撤防布防
int guardMode = 0;
snprintf(modeStr,sizeof(modeStr),"%d",guardMode);
cJSON *custom_guard_zone = cJSON_CreateArray();
cJSON *guard_sensors = cJSON_CreateArray();
cJSON_AddStringToObject(guard, "arming_status", modeStr);
SYN_GUARD_SENSORS sensors;
sensors.nodeId = malloc(10);
memset(sensors.nodeId,0,10);
memcpy(sensors.nodeId,"1234",strlen("1234"));
sensors.sensor_type = malloc(10);
memset(sensors.sensor_type,0,10);
memcpy(sensors.sensor_type,"5678",strlen("5678"));
cJSON *properties = cJSON_GetObjectItem(data,"properties");
cJSON *ArmingState = NULL,*RoomIdsAry = NULL;
cJSON_AddStringToObject(guard, "arming_status", "1");
cJSON_AddItemToObject(guard,"custom_guard_zone",custom_guard_zone);
cJSON_AddItemToObject(guard,"guard_sensors",guard_sensors);
guard_sensors = _kk_guard_sensors_build(1,&sensors);
char roomId[12] = "abcd";
custom_guard_zone = _kk_guard_custom_zone_build(1,roomId);
cJSON_AddItemToObject(guard, "custom_guard_zone", custom_guard_zone);
cJSON_AddItemToObject(guard, "guard_sensors", guard_sensors);
cJSON_AddItemToObject(root, "guard", guard);
if(properties==NULL||properties->type!=cJSON_Object){
return -1;
}
ArmingState = cJSON_GetObjectItem(properties,"ArmingState");
if(ArmingState==NULL||ArmingState->type!=cJSON_Number){
return -1;
}
/*
"0": "离家布防",
"1": "撤防",
"2": "在家布防",
"3": "区域布防"
*/
//1:离家布防,2:撤防,3:在家布防,4:自定义防区布防。
if(ArmingState->valueint==0){
armingStr = "1";
}else if(ArmingState->valueint==2){
armingStr = "3";
}else if(ArmingState->valueint==3){
armingStr = "4";
}else {
armingStr = "2";
}
cJSON_ReplaceItemInObject(guard, "arming_status", cJSON_CreateString(armingStr));
if(ArmingState->valueint == 3){
int i,num;
cJSON *item = NULL;
char roomIdStr[16] = {0};
RoomIdsAry = cJSON_GetObjectItem(properties,"RoomIds");
if(RoomIdsAry==NULL||RoomIdsAry->type!=cJSON_Array){
return -1;
}
num = cJSON_GetArraySize(RoomIdsAry);
for(i=0;i<num;i++){
item = cJSON_GetArrayItem(RoomIdsAry,i);
if(item->type!=cJSON_Number){
continue ;
}
memset(roomIdStr,0,sizeof(roomIdStr));
snprintf(roomIdStr,sizeof(roomIdStr),"%d",item->valueint);
cJSON_AddItemToArray(custom_guard_zone,cJSON_CreateString(roomIdStr));
}
}
//新中控同步接口未有安防类传感器列表,故只保留实现接口,未具体实现转换
_kk_guard_sensors_build(guard_sensors,-1,NULL);
return 0;
}
......@@ -1014,6 +1062,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);
......@@ -1031,48 +1080,71 @@ int kk_create_syncinfo_to_sdk(cJSON *payload)
cJSON_AddItemToObject(root, "ccu_link_status", ccu_link_status);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cnwise_music_controllers = cJSON_CreateArray();
cJSON_AddItemToObject(root, "cnwise_music_controllers", cnwise_music_controllers);
code_lib_controllers = cJSON_CreateArray();
cJSON_AddItemToObject(root, "code_lib_controllers", code_lib_controllers);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
controllers = cJSON_CreateArray();
cJSON_AddItemToObject(root, "controllers", controllers);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_sync_devices_status_to_sdk(root);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_sync_devices_to_sdk(root,data);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
kk_sync_rooms_to_sdk(root,data);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
kk_sync_scence_to_sdk(root,data);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
kk_sync_gw_version_to_sdk(root,data);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
kk_sync_ccu_version_to_sdk(root,data);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
kk_sync_guard_to_sdk(root,data);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_sync_central_ac_to_sdk(root,data);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
kk_sync_central_ac_indoorunits_to_sdk(root,data);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
kk_sync_groups_to_sdk(root,data);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
kk_create_floors_to_sdk(root,data);
printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,(root==NULL)?"NULL":"1");
#if 1
......
......@@ -2,12 +2,34 @@
#include "kk_lan_vp_ctrl.h"
#include "cJSON.h"
cJSON *PowerSwitch_msg_build(int ep,int onoff)
{
char epNum[12] = {0};
cJSON *params = cJSON_CreateObject();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddStringToObject(params,"epNum",epNum);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddNumberToObject(params,"PowerSwitch",onoff);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return params;
}
static int is_light_dev(int pid);
static cJSON *light_dev(int ep,int onoff);
static cJSON *light_dev_handle(int ep,uint8_t *arg);
static int is_curtain_dev(int pid);
static cJSON *curtain_dev_msg_build(int ep,int OperationMode);
static cJSON *curtain_dev_handle(int ep,uint8_t *arg);
static int is_outlet_dev(int pid);
static cJSON *outlet_msg_build(int ep,int onoff);
static cJSON *outlet_dev_handle(int ep,uint8_t *arg);
typedef int (*pid_mth_func)(int pid);
typedef cJSON *(*dev_handle)(int ep,uint8_t *arg);
......@@ -18,13 +40,24 @@ typedef struct{
}KK_VP_CTRL;
static KK_VP_CTRL vp_ctrl_table[]={
{is_light_dev,light_dev_handle}
{is_light_dev,light_dev_handle},
{is_curtain_dev,curtain_dev_handle},
{is_outlet_dev,outlet_dev_handle}
};
static int light_dev_pid[]={
3023,3024
};
static int curtain_dev_pid[]={
3067
};
static int outlet_dev_pid[]={
3020
};
static int is_light_dev(int pid)
{
int i;
......@@ -36,7 +69,53 @@ static int is_light_dev(int pid)
return 0;
}
cJSON *light_dev_msg_build(int ep,int onoff)
static int is_curtain_dev(int pid)
{
int i;
for(i=0;i<sizeof(curtain_dev_pid)/sizeof(int);i++){
if(pid==curtain_dev_pid[i]){
return 1;
}
}
return 0;
}
static int is_outlet_dev(int pid)
{
int i;
for(i=0;i<sizeof(outlet_dev_pid)/sizeof(int);i++){
if(pid==outlet_dev_pid[i]){
return 1;
}
}
return 0;
}
static cJSON *light_msg_build(int ep,int onoff)
{
return PowerSwitch_msg_build(ep,onoff);
}
static cJSON *light_dev_handle(int ep,uint8_t *arg)
{
uint8_t skill_type = arg[0];
printf("[%s][%d]skill_type=%d,ep=%d\n",__FUNCTION__,__LINE__,skill_type,ep);
switch(skill_type){
case VP_CTRL_OPEN://
return light_msg_build(ep,1);
case VP_CTRL_CLOSE:
return light_msg_build(ep,0);
default:break;
}
return NULL;
}
static cJSON *curtain_dev_msg_build(int ep,int OperationMode)
{
char epNum[12] = {0};
cJSON *params = cJSON_CreateObject();
......@@ -47,20 +126,43 @@ cJSON *light_dev_msg_build(int ep,int onoff)
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddStringToObject(params,"epNum",epNum);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddNumberToObject(params,"PowerSwitch",onoff);
cJSON_AddNumberToObject(params,"OperationMode",OperationMode);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return params;
}
static cJSON *light_dev_handle(int ep,uint8_t *arg)
static cJSON *curtain_dev_handle(int ep,uint8_t *arg)
{
uint8_t skill_type = arg[0];
printf("[%s][%d]skill_type=%d,ep=%d\n",__FUNCTION__,__LINE__,skill_type,ep);
switch(skill_type){
case VP_CTRL_OPEN://
return curtain_dev_msg_build(ep,1);
case VP_CTRL_CLOSE:
return curtain_dev_msg_build(ep,0);
case VP_CTRL_STOP:
return curtain_dev_msg_build(ep,2);
default:break;
}
return NULL;
}
static cJSON *outlet_msg_build(int ep,int onoff)
{
return PowerSwitch_msg_build(ep,onoff);
}
static cJSON *outlet_dev_handle(int ep,uint8_t *arg)
{
uint8_t skill_type = arg[0];
printf("[%s][%d]skill_type=%d,ep=%d\n",__FUNCTION__,__LINE__,skill_type,ep);
switch(skill_type){
case VP_CTRL_OPEN://
return light_dev_msg_build(ep,1);
return outlet_msg_build(ep,1);
case VP_CTRL_CLOSE:
return light_dev_msg_build(ep,0);
return outlet_msg_build(ep,0);
default:break;
}
return NULL;
......
......@@ -228,7 +228,7 @@ static int kk_vp_get_device_name(_IN cJSON *devices,_IN const char*epNum,_IN con
{
int i = 0,devNum = 0;
cJSON *name = NULL;
cJSON *deviceItem = NULL,*devCodeObj = NULL,*epNumObj = NULL;
cJSON *deviceItem = NULL,*devCodeObj = NULL;
devNum = cJSON_GetArraySize(devices);
printf("[%s][%d]devNum=%d\n",__FUNCTION__,__LINE__,devNum);
......@@ -239,24 +239,19 @@ static int kk_vp_get_device_name(_IN cJSON *devices,_IN const char*epNum,_IN con
continue ;
}
epNumObj = cJSON_GetObjectItem(deviceItem,"epNum");
devCodeObj = cJSON_GetObjectItem(deviceItem,"deviceCode");
if(epNumObj==NULL||epNumObj->type!=cJSON_String ||
devCodeObj==NULL||devCodeObj->type!=cJSON_String){
if(devCodeObj==NULL||devCodeObj->type!=cJSON_String){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
continue ;
}
printf("[%s][%d]%d,%d,%s,%s\n",__FUNCTION__,__LINE__,strlen(devCodeObj->valuestring),
strlen(deviceCode),devCodeObj->valuestring,deviceCode);
printf("[%s][%d]%d,%d,%s,%s\n",__FUNCTION__,__LINE__,strlen(epNumObj->valuestring),
strlen(epNum),epNumObj->valuestring,epNum);
if((strlen(devCodeObj->valuestring)==strlen(deviceCode)) &&
!strcmp(devCodeObj->valuestring,deviceCode) &&
(strlen(epNumObj->valuestring)==strlen(epNum)) &&
!strcmp(epNumObj->valuestring,epNum)){
!strcmp(devCodeObj->valuestring,deviceCode)){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if((name = cJSON_GetObjectItem(deviceItem,"name"))!=NULL &&
......
......@@ -60,7 +60,7 @@ int HAL_Execel_cmd(char * cmd,char * buf,int buf_len,int* ret_len)
}
void *HAL_Malloc(_IN_ uint32_t size)
{
return malloc(size);
return malloc(size);
}
void *HAL_Realloc(_IN_ void *ptr, _IN_ uint32_t size)
......
......@@ -25,9 +25,11 @@
#include "kk_hal.h"
extern sqlite3 *g_kk_pDb;
static int kk_check_multi_ep_num(char *deviceCode);
static int kk_get_scenes_actions_info(cJSON *actionArray,int id);
static int kk_get_panel_scenes_actions_info(cJSON *actionArray,int id);
typedef struct {
void *mutex;
sqlite3 *pDb;
......@@ -77,12 +79,12 @@ int kk_sync_init(void)
static cJSON * kk_get_room_devices(const char *roomId)
{
const char *selectCmd = "select * from AreaDevInfo WHERE roomId = '%s' and epNum = 1;";
const char *selectCmd = "select * from AreaDevInfo WHERE roomId = '%s';";
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
char *deviceCode = NULL;
char *epNum = NULL;
cJSON *devs = cJSON_CreateArray();
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
......@@ -90,8 +92,21 @@ static cJSON * kk_get_room_devices(const char *roomId)
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *dev = cJSON_CreateObject();
char devName[64] = {0};
deviceCode = (char*)sqlite3_column_text(stmt, DB_DEV_DEVICECODE);
epNum = (char*)sqlite3_column_text(stmt, DB_DEV_EPNUM);
if(kk_check_multi_ep_num(deviceCode)){
cJSON_AddStringToObject(dev,KK_SYNC_SCENE_EPNUM_STR,epNum);
}
cJSON_AddStringToObject(dev,KK_SYNC_DEVICECODE_STR,deviceCode);
//cJSON_AddStringToObject(dev,KK_SYNC_SCENE_EPNUM_STR,epNum);
kk_get_device_name(deviceCode,epNum,devName,sizeof(devName));
cJSON_AddStringToObject(dev,"name",devName);
cJSON_AddItemToArray(devs, dev);
}
sqlite3_free(sqlCmd);
......@@ -100,6 +115,7 @@ static cJSON * kk_get_room_devices(const char *roomId)
return devs;
}
static cJSON * kk_get_room_sences(const char *roomId)
{
const char *selectCmd = "select * from SceneInfo where roomId = '%s';";
......@@ -107,7 +123,7 @@ static cJSON * kk_get_room_sences(const char *roomId)
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
char *sceneId = NULL;
char *sceneType = NULL;
cJSON *scenes = cJSON_CreateArray();
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
......@@ -116,13 +132,14 @@ static cJSON * kk_get_room_sences(const char *roomId)
while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *scene = cJSON_CreateObject();
sceneId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENEID);
sceneType = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENETYPE);
cJSON_AddStringToObject(scene,KK_SYNC_SCENEID_STR,sceneId);
cJSON_AddStringToObject(scene,KK_SYNC_SCENE_SCENETYPE_STR,sceneType);
cJSON_AddItemToArray(scenes, scene);
}
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return scenes;
}
......@@ -145,7 +162,7 @@ static int kk_get_rooms_info(cJSON *data)
cJSON *scenesArray = NULL;
_kk_sync_lock();
sqlCmd = sqlite3_mprintf("select * from AreaInfo");
sqlCmd = sqlite3_mprintf("select * from AreaInfo");
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
roomItem = cJSON_CreateObject();
......@@ -170,7 +187,123 @@ static int kk_get_rooms_info(cJSON *data)
return SUCCESS_RETURN;
}
static int kk_get_properties_info(char *deviceCode,cJSON *obj)
static int kk_check_multi_ep_num(char *deviceCode)
{
char *sqlCmd = NULL;
//char *zErrMsg = 0;
sqlite3_stmt *stmt;
char *propertyStr = NULL;
char *valueStr = NULL;
int valueType = 0;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(deviceCode == NULL){
return 0;
}
sqlCmd = sqlite3_mprintf("select * from PropertiesInfo WHERE deviceCode = '%s' and devType=%d;",deviceCode,KK_DM_DEVICE_SUBDEV);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
propertyStr = (char*)sqlite3_column_text(stmt, DB_IDENTIFITER);
char *propertiesbuf[64] = {0};
int num = 0;
split(propertyStr,"_",propertiesbuf,&num);
if(num>=2){
return 1;
}
}
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return 0;
}
static cJSON *kk_get_gw_properties_info(cJSON *data)
{
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
char *propertyStr = NULL;
char *valueStr = NULL;
int valueType = 0;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
cJSON *roomIdsAry = NULL;
cJSON *property = cJSON_CreateObject();
sqlCmd = sqlite3_mprintf("select * from PropertiesInfo WHERE devType = '%d' ",KK_DM_DEVICE_GATEWAY);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
propertyStr = (char*)sqlite3_column_text(stmt, DB_IDENTIFITER);
valueType = sqlite3_column_int(stmt, DB_VALUETYPE);
valueStr = (char*)sqlite3_column_text(stmt, DB_VALUE);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(valueType == KK_TSL_DATA_TYPE_TEXT){
cJSON_AddStringToObject(property, propertyStr, valueStr);
}else if(valueType == KK_TSL_DATA_TYPE_INT||
valueType == KK_TSL_DATA_TYPE_ENUM||
valueType == KK_TSL_DATA_TYPE_BOOL){
cJSON_AddNumberToObject(property, propertyStr, atoi(valueStr));
}else if(valueType == KK_TSL_DATA_TYPE_DOUBLE){
cJSON_AddNumberToObject(property, propertyStr, atof(valueStr));
}
}
cJSON_AddItemToObject(data, KK_SYNC_PROPERTY_STR, property);
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return property;
}
static cJSON *kk_get_ccu_properties_info(cJSON *data)
{
char *sqlCmd = NULL;
//char *zErrMsg = 0;
sqlite3_stmt *stmt;
char *propertyStr = NULL;
char *valueStr = NULL;
int valueType = 0;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
cJSON *roomIdsAry = NULL;
cJSON *property = cJSON_CreateObject();
sqlCmd = sqlite3_mprintf("select * from PropertiesInfo WHERE devType = '%d' ",KK_DM_DEVICE_CCU);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
propertyStr = (char*)sqlite3_column_text(stmt, DB_IDENTIFITER);
valueType = sqlite3_column_int(stmt, DB_VALUETYPE);
valueStr = (char*)sqlite3_column_text(stmt, DB_VALUE);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(valueType == KK_TSL_DATA_TYPE_TEXT){
if(!strcmp(propertyStr,"ArmingState")){
cJSON_AddNumberToObject(property, propertyStr, atoi(valueStr));
}else{
cJSON_AddStringToObject(property, propertyStr, valueStr);
}
}else if(valueType == KK_TSL_DATA_TYPE_INT||
valueType == KK_TSL_DATA_TYPE_ENUM||
valueType == KK_TSL_DATA_TYPE_BOOL){
cJSON_AddNumberToObject(property, propertyStr, atoi(valueStr));
}else if(valueType == KK_TSL_DATA_TYPE_DOUBLE){
cJSON_AddNumberToObject(property, propertyStr, atof(valueStr));
}
}
if((roomIdsAry = kk_get_roomIds_ary())!=NULL){
cJSON_AddItemToObject(property, "RoomIds", roomIdsAry);
}
cJSON_AddItemToObject(data, KK_SYNC_PROPERTY_STR, property);
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return property;
}
static cJSON *kk_get_properties_info(char *deviceCode,int devType)
{
char *sqlCmd = NULL;
//char *zErrMsg = 0;
......@@ -178,32 +311,98 @@ static int kk_get_properties_info(char *deviceCode,cJSON *obj)
char *propertyStr = NULL;
char *valueStr = NULL;
int valueType = 0;
char *ptr = NULL;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(deviceCode == NULL || obj == NULL){
return FAIL_RETURN;
if(deviceCode == NULL){
return NULL;
}
cJSON *obj = cJSON_CreateObject();
cJSON *eps = cJSON_CreateArray();
sqlCmd = sqlite3_mprintf("select * from PropertiesInfo WHERE deviceCode = '%s' and devType=%d;",deviceCode,devType);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *propertyItem = cJSON_CreateObject();
propertyStr = (char*)sqlite3_column_text(stmt, DB_IDENTIFITER);
valueType = sqlite3_column_int(stmt, DB_VALUETYPE);
valueStr = (char*)sqlite3_column_text(stmt, DB_VALUE);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
char *propertiesbuf[64] = {0};
int num = 0;
split(propertyStr,"_",propertiesbuf,&num);
if(num==2){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddStringToObject(propertyItem, "epNum",propertiesbuf[1]);
if(valueType == KK_TSL_DATA_TYPE_TEXT){
cJSON_AddStringToObject(propertyItem, propertiesbuf[0], valueStr);
}else if(valueType == KK_TSL_DATA_TYPE_INT||
valueType == KK_TSL_DATA_TYPE_ENUM||
valueType == KK_TSL_DATA_TYPE_BOOL){
cJSON_AddNumberToObject(propertyItem, propertiesbuf[0], atoi(valueStr));
}else if(valueType == KK_TSL_DATA_TYPE_DOUBLE){
cJSON_AddNumberToObject(propertyItem, propertiesbuf[0], atof(valueStr));
}
}else{
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddStringToObject(propertyItem, "epNum","1");
if(valueType == KK_TSL_DATA_TYPE_TEXT){
cJSON_AddStringToObject(propertyItem, propertyStr, valueStr);
}else if(valueType == KK_TSL_DATA_TYPE_INT||
valueType == KK_TSL_DATA_TYPE_ENUM||
valueType == KK_TSL_DATA_TYPE_BOOL){
cJSON_AddNumberToObject(propertyItem, propertyStr, atoi(valueStr));
}else if(valueType == KK_TSL_DATA_TYPE_DOUBLE){
cJSON_AddNumberToObject(propertyItem, propertyStr, atof(valueStr));
}
}
cJSON_AddItemToArray(eps,propertyItem);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddItemToObject(obj, "eps", eps);
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return obj;
}
static int kk_get_properties_info_obj(char *deviceCode)
{
char *sqlCmd = NULL;
//char *zErrMsg = 0;
sqlite3_stmt *stmt;
char *propertyStr = NULL;
char *valueStr = NULL;
int valueType = 0;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
cJSON *obj = cJSON_CreateObject();
if(deviceCode == NULL ){
return NULL;
}
cJSON *propertyItem = cJSON_CreateObject();
sqlCmd = sqlite3_mprintf("select * from PropertiesInfo WHERE deviceCode = '%s' ",deviceCode);
sqlCmd = sqlite3_mprintf("select * from PropertiesInfo WHERE deviceCode = '%s' and devType=%d;",deviceCode,KK_DM_DEVICE_SUBDEV);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
propertyStr = (char*)sqlite3_column_text(stmt, DB_IDENTIFITER);
valueType = sqlite3_column_int(stmt, DB_VALUETYPE);
valueStr = (char*)sqlite3_column_text(stmt, DB_VALUE);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(valueType == KK_TSL_DATA_TYPE_TEXT){
cJSON_AddStringToObject(propertyItem, propertyStr, valueStr);
cJSON_AddStringToObject(obj, propertyStr, valueStr);
}else if(valueType == KK_TSL_DATA_TYPE_INT||
valueType == KK_TSL_DATA_TYPE_ENUM||
valueType == KK_TSL_DATA_TYPE_BOOL){
cJSON_AddNumberToObject(propertyItem, propertyStr, atoi(valueStr));
cJSON_AddNumberToObject(obj, propertyStr, atoi(valueStr));
}else if(valueType == KK_TSL_DATA_TYPE_DOUBLE){
cJSON_AddNumberToObject(propertyItem, propertyStr, atof(valueStr));
cJSON_AddNumberToObject(obj, propertyStr, atof(valueStr));
}
}
cJSON_AddItemToObject(obj, KK_SYNC_PROPERTY_STR, propertyItem);
}
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return SUCCESS_RETURN;
return obj;
}
......@@ -279,11 +478,13 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode)
}
cJSON *subDevices = cJSON_CreateArray();
#if 1
sqlCmd = sqlite3_mprintf("select * from SubDeviceInfo WHERE fatherDeviceCode = '%s' ",deviceCode);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *subdevicesItem = cJSON_CreateObject();
char devName[64] = {0};
cJSON *properties = NULL;
subDeviceCode = (char*)sqlite3_column_text(stmt, DB_SUB_DEVICECODE);
subProductCode = (char*)sqlite3_column_text(stmt, DB_SUB_PRODUCTCODE);
subVersion = (char*)sqlite3_column_text(stmt, DB_SUB_VERSION);
......@@ -291,22 +492,30 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode)
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_DEVICECODE_STR, subDeviceCode);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_VERSION_STR, subVersion);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_MAC_STR, subDeviceCode);
kk_get_device_name(subDeviceCode,"1",devName,sizeof(devName));
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_NANE_STR, devName);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_ONLINE_STR, subIsline);
cJSON_AddNumberToObject(subdevicesItem, KK_SYNC_ONLINE_STR, (strcmp(subIsline,"0")==0)?1:0);
kk_get_panelConfig_info(subdevicesItem,subDeviceCode);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_PRODUCTCODE_STR, subProductCode);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_SN_STR, "");
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_STATUS_STR, "启动");
kk_get_properties_info(subDeviceCode,subdevicesItem);
cJSON_AddNumberToObject(subdevicesItem, KK_SYNC_STATUS_STR, 1);
if(kk_check_multi_ep_num(subDeviceCode)){
properties=kk_get_properties_info(subDeviceCode,KK_DM_DEVICE_SUBDEV);
}else{
properties=kk_get_properties_info_obj(subDeviceCode);
}
cJSON_AddItemToObject(subdevicesItem, "properties", properties);
cJSON_AddItemToArray(subDevices, subdevicesItem);
}
#endif
cJSON_AddItemToObject(gwdevicesItem, KK_SYNC_DEVICES_STR, subDevices);
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return SUCCESS_RETURN;
}
static int kk_get_gw_devices_info(cJSON *gwdevices)
......@@ -341,12 +550,17 @@ static int kk_get_gw_devices_info(cJSON *gwdevices)
cJSON_AddStringToObject(gwdevicesItem, KK_SYNC_VERSION_STR, gw_version);
cJSON_AddStringToObject(gwdevicesItem, KK_SYNC_MAC_STR, gw_deviceCode);
cJSON_AddStringToObject(gwdevicesItem, KK_SYNC_NANE_STR, "GW");
cJSON_AddStringToObject(gwdevicesItem, KK_SYNC_ONLINE_STR, gw_isline);
cJSON_AddNumberToObject(gwdevicesItem, KK_SYNC_ONLINE_STR, (strcmp(gw_isline,"0")==0)?1:0);
cJSON_AddStringToObject(gwdevicesItem, KK_SYNC_PRODUCTCODE_STR, gw_productCode);
cJSON_AddStringToObject(gwdevicesItem, KK_SYNC_SN_STR, "");
cJSON_AddStringToObject(gwdevicesItem, KK_SYNC_STATUS_STR, "启动");
kk_get_properties_info(gw_deviceCode,gwdevicesItem);
cJSON_AddNumberToObject(gwdevicesItem, KK_SYNC_STATUS_STR, 1);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_get_gw_properties_info(gwdevicesItem);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_get_sub_devices_info(gwdevicesItem,gw_deviceCode);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddItemToArray(gwdevices, gwdevicesItem);
}
sqlite3_free(sqlCmd);
......@@ -497,10 +711,19 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,int id)
cJSON_AddStringToObject(actionItem, KK_SYNC_DEVICECODE_STR, deviceCode);
cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_DELAY_STR, delay);
char *propertiesbuf[64] = {0};
int num = 0;
split(propertyName,"_",propertiesbuf,&num);
if(num==2){
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYNAME_STR, propertiesbuf[0]);
cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, atoi(propertiesbuf[1]));
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYNAME_STR, propertyName);
}else{
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYNAME_STR, propertyName);
cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
}
//cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_TYPE_STR, type);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue);
cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, room_name);
......@@ -560,7 +783,7 @@ static int kk_creat_starttime_build(time_t current)
}
static int kk_get_scenes_trigger_info(cJSON *triggerArray,char *sceneId)
static int kk_get_scenes_trigger_info(cJSON *triggerObj,char *sceneId)
{
char *sqlCmd = NULL;
//char *zErrMsg = 0;
......@@ -569,6 +792,7 @@ static int kk_get_scenes_trigger_info(cJSON *triggerArray,char *sceneId)
char *propertyName = NULL;
char *compareType = NULL;
char *compareValue = NULL;
cJSON *triggerAry;
char *type = NULL;
int epNum = 0;
......@@ -576,10 +800,11 @@ static int kk_get_scenes_trigger_info(cJSON *triggerArray,char *sceneId)
int time;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(triggerArray == NULL || sceneId == NULL){
if(triggerObj == NULL || sceneId == NULL){
return FAIL_RETURN;
}
triggerAry = cJSON_CreateArray();
sqlCmd = sqlite3_mprintf("select * from SceneTimerInfo where sceneId = %s",sceneId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
......@@ -619,14 +844,17 @@ static int kk_get_scenes_trigger_info(cJSON *triggerArray,char *sceneId)
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_PROPERTYNAME_STR, (char*)propertyName);
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_COMPARETYPE_STR, (char*)compareType);
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_COMPAREValue_STR, (char*)compareValue);
cJSON_AddItemToArray(triggerArray, triggerItem);
}
cJSON_AddItemToArray(triggerAry, triggerItem);
}
cJSON_AddItemToObject(triggerObj, "items",triggerAry);
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return SUCCESS_RETURN;
}
static cJSON *kk_build_repeatday_array(int repeatday)
{
int i = 0;
......@@ -638,7 +866,8 @@ static cJSON *kk_build_repeatday_array(int repeatday)
}
return repeatAry;
}
static int kk_get_scenes_condition_info(cJSON *conditionArray,char *sceneId)
static int kk_get_scenes_condition_info(cJSON *conditionObj,char *sceneId)
{
char *sqlCmd = NULL;
//char *zErrMsg = 0;
......@@ -649,10 +878,15 @@ static int kk_get_scenes_condition_info(cJSON *conditionArray,char *sceneId)
int crossDay = 0;
int repeat = 0;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(conditionArray == NULL || sceneId == NULL){
cJSON *conditionAry;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(conditionObj == NULL || sceneId == NULL){
return FAIL_RETURN;
}
conditionAry = cJSON_CreateArray();
sqlCmd = sqlite3_mprintf("select * from SceneConditionInfo where sceneId = %s",sceneId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
......@@ -674,8 +908,9 @@ static int kk_get_scenes_condition_info(cJSON *conditionArray,char *sceneId)
cJSON_AddItemToObject(conditionItem,KK_SYNC_SCENE_REPEATDAY_STR,repeatAry);
cJSON_AddItemToArray(conditionArray, conditionItem);
}
cJSON_AddItemToArray(conditionAry, conditionItem);
}
char *deviceCode = NULL;
char *propertyName = NULL;
char *compareType = NULL;
......@@ -684,28 +919,34 @@ static int kk_get_scenes_condition_info(cJSON *conditionArray,char *sceneId)
int epNum = 0;
int isAnd;
sqlCmd = sqlite3_mprintf("select * from SceneTimerInfo where sceneId = %s",sceneId);
sqlCmd = sqlite3_mprintf("select * from SceneTriggerInfo where sceneId = %s",sceneId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
isAnd = sqlite3_column_int(stmt, DB_SCENETRIGGER_ISAND);
if(isAnd==1){
cJSON *conditionItem = cJSON_CreateObject();
cJSON *triggerItem = cJSON_CreateObject();
deviceCode = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_DEVICECODE);
week = sqlite3_column_int(stmt, DB_SCENETIMER_WEEK);
epNum = sqlite3_column_int(stmt, DB_SCENETRIGGER_EPNUM);
propertyName = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_PROPERTYNAME);
compareType = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_COMPARETYPE);
compareValue = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_COMPAREVALUE);
time = sqlite3_column_int(stmt, DB_SCENETIMER_TIME);
type = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_TYPE);
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_TYPE_STR, (char*)type);
cJSON_AddNumberToObject(conditionItem, "week", week);
cJSON_AddStringToObject(triggerItem, KK_SYNC_DEVICECODE_STR, (char*)deviceCode);
cJSON_AddNumberToObject(triggerItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_PROPERTYNAME_STR, (char*)propertyName);
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_COMPARETYPE_STR, (char*)compareType);
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_COMPAREValue_STR, (char*)compareValue);
cJSON_AddNumberToObject(conditionItem, "time", time);
cJSON_AddItemToArray(conditionAry, triggerItem);
}
}
cJSON_AddItemToObject(conditionObj, "items",conditionAry);
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return SUCCESS_RETURN;
......@@ -730,9 +971,9 @@ static int kk_get_scenes_info(cJSON *data)
cJSON *sceneArrayItem = cJSON_CreateObject();
enable = sqlite3_column_int(stmt, DB_SCENEINFO_ENABLE);
if(enable == 1){
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENE_ENABLE_STR, "启动");
cJSON_AddNumberToObject(sceneArrayItem, KK_SYNC_SCENE_ENABLE_STR, 1);
}else{
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENE_ENABLE_STR, "禁用");
cJSON_AddNumberToObject(sceneArrayItem, KK_SYNC_SCENE_ENABLE_STR, 0);
}
type = sqlite3_column_int(stmt, DB_SCENEINFO_SCENETYPE);
......@@ -744,13 +985,13 @@ static int kk_get_scenes_info(cJSON *data)
cJSON *actionArray = cJSON_CreateArray();
kk_get_scenes_actions_info(actionArray,atoi(sceneId));
cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_ACTIONS_STR, actionArray);
cJSON *triggerArray = cJSON_CreateArray();
kk_get_scenes_trigger_info(triggerArray,sceneId);
cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_TRIGGER_STR, triggerArray);
cJSON *triggerObj = cJSON_CreateObject();
kk_get_scenes_trigger_info(triggerObj,sceneId);
cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_TRIGGER_STR, triggerObj);
if(kk_is_trigger_timing(sceneId)!=1){
cJSON *conditionArray = cJSON_CreateArray();
kk_get_scenes_condition_info(conditionArray,sceneId);
cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_CONDITION_STR, conditionArray);
cJSON *conditionObj = cJSON_CreateObject();
kk_get_scenes_condition_info(conditionObj,sceneId);
cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_CONDITION_STR, conditionObj);
}
cJSON_AddItemToArray(sceneArray, sceneArrayItem);
......@@ -760,6 +1001,8 @@ static int kk_get_scenes_info(cJSON *data)
sqlite3_finalize(stmt);
return SUCCESS_RETURN;
}
/*
static int kk_get_ccu_properties(cJSON *property)
{
char *sqlCmd = NULL;
......@@ -793,6 +1036,7 @@ static int kk_get_ccu_properties(cJSON *property)
_kk_sync_unlock();
return SUCCESS_RETURN;
}
*/
/************************************************************
*功能描述:检查设备是否有重复
*输入参数:deviceCode:设备deviceCode
......@@ -807,36 +1051,36 @@ char *kk_sync_get_info()
char ccu_productCode[PRODUCT_CODE_MAXLEN] = {0};
char version[32] = {0};
char cloudstatus_str[16] = {0};
cJSON *root=cJSON_CreateObject();
cJSON_AddStringToObject(root,KK_SYNC_CODE_STR,"0");
cJSON *data = cJSON_CreateObject();
cJSON_AddItemToObject(root, KK_SYNC_DATA_STR, data);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_get_rooms_info(data);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_get_devices_info(data);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_get_scenes_info(data);
HAL_GetDevice_Code(ccu_deviceCode);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
//HAL_GetDevice_Code(ccu_deviceCode);
HAL_Get_ccuid(ccu_deviceCode);
HAL_GetProduct_Code(ccu_productCode);
HAL_GetVersion(version);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddStringToObject(data, KK_SYNC_DEVICECODE_STR,ccu_deviceCode);
cJSON_AddStringToObject(data, KK_SYNC_NANE_STR, "newccu");
sprintf(cloudstatus_str, "%d", kk_get_cloudstatus());
cJSON_AddStringToObject(data, KK_SYNC_ONLINE_STR, cloudstatus_str);
cJSON_AddStringToObject(data, KK_SYNC_PRODUCTCODE_STR, ccu_productCode);
cJSON_AddStringToObject(data, KK_SYNC_VERSION_STR, version);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON *property = cJSON_CreateObject();
kk_get_ccu_properties(property);
cJSON_AddItemToObject(data, KK_SYNC_PROPERTY_STR, property);
kk_get_ccu_properties_info(data);
out=cJSON_Print(root);
out=cJSON_Print(data);
printf("kk_sync_get_info:%s\n",out);
cJSON_Delete(root);
cJSON_Delete(data);
//free(out);
return out;
}
......
......@@ -653,10 +653,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
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");
mac = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR);
mac = cJSON_GetObjectItem(jsonPay, "mac");
if (proCode == NULL || devCode == NULL || mac == NULL){
ERROR_PRINT("productCode, deviceCode mac params are error\n");
goto error;
......
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