Commit e02fd780 authored by 陈伟灿's avatar 陈伟灿

Merge branch 'yjq' into 'master'

Yjq

See merge request chenweican/k-sdk!97
parents cc48e429 90005f06
...@@ -255,14 +255,16 @@ cJSON * msg_convert_value(cJSON *d_type,cJSON *s_type,cJSON *value) ...@@ -255,14 +255,16 @@ cJSON * msg_convert_value(cJSON *d_type,cJSON *s_type,cJSON *value)
cJSON *rlt = NULL; cJSON *rlt = NULL;
CONVERT_ITEM_S *crt; CONVERT_ITEM_S *crt;
printf("[%s][%d]type:%s->%s,val=%s\n",__FUNCTION__,__LINE__,d_type->valuestring,s_type->valuestring,cJSON_Print(value)); printf("[%s][%d]%s->%s,val=%s\n",__FUNCTION__,__LINE__,cJSON_Print(s_type),cJSON_Print(d_type),cJSON_Print(value));
size = sizeof(convert_table)/sizeof(CONVERT_ITEM_S); size = sizeof(convert_table)/sizeof(CONVERT_ITEM_S);
crt = &convert_table[0]; crt = &convert_table[0];
for(i=0;i<size;i++,crt++){ for(i=0;i<size;i++,crt++){
if(strcmp(d_type->valuestring,crt->type)==0) { if(strcmp(d_type->valuestring,crt->type)==0) {
rlt = crt->func(value,s_type); if(crt->func){
rlt = crt->func(value,s_type);
}
break; break;
} }
} }
...@@ -277,10 +279,6 @@ cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON ...@@ -277,10 +279,6 @@ cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON
int vra_size = cJSON_GetArraySize(s_valueRange); int vra_size = cJSON_GetArraySize(s_valueRange);
printf("[%s][%d]type:%s\n",__FUNCTION__,__LINE__,s_dataType->valuestring);
printf("s_valueRange=%s\n",cJSON_Print(s_valueRange));
printf("d_valueRange=%s\n",cJSON_Print(d_valueRange));
printf("value=%s\n",cJSON_Print(value));
for(j=0;j<vra_size;j++){ for(j=0;j<vra_size;j++){
if(strcmp(s_dataType->valuestring,"dummy")==0){ if(strcmp(s_dataType->valuestring,"dummy")==0){
continue ; continue ;
...@@ -304,18 +302,18 @@ cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON ...@@ -304,18 +302,18 @@ cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON
break ; break ;
} }
}else if(strstr(s_dataType->valuestring,"map")){ }else if(strstr(s_dataType->valuestring,"map")){
printf("rlt=%d\n",rlt->type);
if(rlt->type==cJSON_String){ if(rlt->type==cJSON_String){
printf("111111\n");
if(strcmp(rlt->valuestring,value->valuestring)==0){ if(strcmp(rlt->valuestring,value->valuestring)==0){
printf("22222\n");
args = cJSON_GetArrayItem(d_valueRange,j); args = cJSON_GetArrayItem(d_valueRange,j);
break ; break ;
} }
}else if(rlt->type==cJSON_Number){ }else if(rlt->type==cJSON_Number){
printf("44444\n");
if(rlt->valueint == value->valueint) { if(rlt->valueint == value->valueint) {
printf("33333\n");
args = cJSON_GetArrayItem(d_valueRange,j); args = cJSON_GetArrayItem(d_valueRange,j);
break ; break ;
} }
...@@ -329,8 +327,52 @@ cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON ...@@ -329,8 +327,52 @@ cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON
void add_val_to_obj(cJSON *obj,cJSON *val,const char *identifier)
{
if(val->type==cJSON_False){
cJSON_AddFalseToObject(obj,identifier);
}else if(val->type==cJSON_True){
cJSON_AddTrueToObject(obj,identifier);
}else if(val->type==cJSON_NULL){
cJSON_AddNullToObject(obj,identifier);
}else if(val->type==cJSON_Number){
cJSON_AddNumberToObject(obj,identifier,val->valuedouble);
}else if(val->type==cJSON_String){
cJSON_AddStringToObject(obj,identifier,val->valuestring);
}else if(val->type==cJSON_Array){
printf("......................\n");
}
}
cJSON *ccu_value_convert(cJSON *s_dType,cJSON *s_range,cJSON *d_dType,cJSON *d_range,cJSON *value)
{
cJSON *val = NULL;
printf("[ccu val convert] s_dType=%s,s_range=%s,d_dType=%s,d_range=%s,value=%s\n",
cJSON_Print(s_dType),cJSON_Print(s_range),cJSON_Print(d_dType),cJSON_Print(d_range),cJSON_Print(value));
if(strcmp(d_dType->valuestring,"map")==0){
val = map_type_convert(s_dType,s_range,value,d_range);
}else{
val = msg_convert_value(d_dType,s_dType,value);
}
//printf("[val]%s\n",cJSON_Print(val));
return val;
}
int kk_lan_get_msg_id(void)
{
static int id;
return ++id;
}
int kk_lan_get_msg_id_str(char *msgId,int size)
{
memset(msgId,0,size);
snprintf(msgId,size,"%d",kk_lan_get_msg_id());
}
......
...@@ -10,6 +10,32 @@ ...@@ -10,6 +10,32 @@
#include "kk_data_mng.h" #include "kk_data_mng.h"
#include "cJSON.h" #include "cJSON.h"
#define WILDCARD_CHARACTER_STR "*"
#define SUCCESS_STR "success"
#define GUARD_STATUS_ARMING_LEAVE_HOME "ARMING_LEAVE_HOME"
#define GUARD_STATUS_DISARMING "DISARMING"
#define GUARD_STATUS_ARMING_IN_HOME "ARMING_IN_HOME"
#define EMPTY_STR ""
#define FLOOR_ID_STR "floor_id"
#define ID_STR "id"
#define ROOM_ICON_STR "room_icon"
#define NAME_STR "name"
#define ROOM_STATUS_STR "room_status"
#define DATA_STR "data"
#define ROOMS_STR "rooms"
#define ROOMS_ID_STR "roomId"
#define DEVICES_STR "devices"
#define SCENES_STR "scenes"
#define ACTIONS_STR "actions"
#define ENABLE_STR "enable"
#define SCENE_ID_STR "sceneId"
#define SCENE_TYPE_STR "sceneType"
#define SCENE_TRIGGER_STR "trigger"
#define CONDITION_STR "condition"
...@@ -17,6 +43,7 @@ ...@@ -17,6 +43,7 @@
#define SWITCH_ARG_ON "ON" #define SWITCH_ARG_ON "ON"
#define SWITCH_ARG_OFF "OFF" #define SWITCH_ARG_OFF "OFF"
#define HJ_SERVER "HJ_Server" #define HJ_SERVER "HJ_Server"
#define HJ_PROFILE "HJ_Profile"
#define SUCCESS_STATUS_STR "success" #define SUCCESS_STATUS_STR "success"
...@@ -33,13 +60,19 @@ ...@@ -33,13 +60,19 @@
#define KK_LAN_VERSION "1.0.0"
cJSON * msg_convert_value(cJSON *d_type,cJSON *s_type,cJSON *value); cJSON * msg_convert_value(cJSON *d_type,cJSON *s_type,cJSON *value);
cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON *d_valueRange); cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON *d_valueRange);
int kk_lan_get_msg_id(void);
int kk_lan_get_msg_id_str(char *msgId,int size);
void add_val_to_obj(cJSON *obj,cJSON *val,const char *identifier);
cJSON *ccu_value_convert(cJSON *s_dType,cJSON *s_range,cJSON *d_dType,cJSON *d_range,cJSON *value);
#endif #endif
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "com_api.h" #include "com_api.h"
#include "kk_data_mng.h" #include "kk_data_mng.h"
#include "kk_lan_ctrl.h" #include "kk_lan_ctrl.h"
#include "kk_lan_sync.h"
const char DM_MSG_TO_MIDDWARE[] = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}"; const char DM_MSG_TO_MIDDWARE[] = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}";
char *strrpl(char *in, char *out, int outlen, char *src, char *dst) char *strrpl(char *in, char *out, int outlen, char *src, char *dst)
...@@ -132,26 +133,7 @@ static int kk_send_ack(cJSON *root,int sockfd) ...@@ -132,26 +133,7 @@ static int kk_send_ack(cJSON *root,int sockfd)
free(tmpBuf); free(tmpBuf);
return 0; return 0;
} }
static int _kk_send_data_to_sdk(char *nodeid,char *opcode,cJSON *arg)
{
cJSON *root;
char *out = NULL;
root=cJSON_CreateObject();
if(root){
cJSON_AddStringToObject(root, "nodeid", nodeid);
cJSON_AddStringToObject(root, "opcode", opcode);
cJSON_AddStringToObject(root, "status", "success");
cJSON_AddItemToObject(root,"arg",arg);
out=cJSON_Print(root);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("out:%s\n",out);
cJSON_Minify((char*)out);
kk_send_data_to_sdk(out);
}
cJSON_Delete(root);
return 0;
}
static int kk_heartbeat_ack(int sockfd) static int kk_heartbeat_ack(int sockfd)
{ {
cJSON *root; cJSON *root;
...@@ -382,27 +364,21 @@ static int kk_parse_syncinfo(cJSON *payload) ...@@ -382,27 +364,21 @@ static int kk_parse_syncinfo(cJSON *payload)
cJSON * newccuItem; cJSON * newccuItem;
cJSON *valuejson; cJSON *valuejson;
int value; int value;
printf("\n\n\n00000000000000000000000000000000000000\n\n\n");
kk_map_dev_deinit();
printf("\n\n\n11111111111111111111111111111111111\n\n\n");
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_map_dev_node_t *node = NULL;
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_map_dev_deinit();
paramStr = cJSON_GetObjectItem(payload, DATA_STRING); paramStr = cJSON_GetObjectItem(payload, DATA_STRING);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(paramStr == NULL) return -1; if(paramStr == NULL) return -1;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
dataStr = cJSON_GetObjectItem(paramStr, DATA_STRING); dataStr = cJSON_GetObjectItem(paramStr, DATA_STRING);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(dataStr == NULL) return -1; if(dataStr == NULL) return -1;
gwdevices = cJSON_GetObjectItem(dataStr, DEVICES_STRING); gwdevices = cJSON_GetObjectItem(dataStr, DEVICES_STRING);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(gwdevices == NULL) return -1; if(gwdevices == NULL) return -1;
gwitem = gwdevices->child; gwitem = gwdevices->child;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("\n\n222222222222222222222222222222222\n\n\n");
while(gwitem != NULL){ while(gwitem != NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
subdevices = cJSON_GetObjectItem(gwitem,DEVICES_STRING); subdevices = cJSON_GetObjectItem(gwitem,DEVICES_STRING);
gwdevicecode = cJSON_GetObjectItem(gwitem,MSG_DEVICE_CODE_STR)->valuestring; gwdevicecode = cJSON_GetObjectItem(gwitem,MSG_DEVICE_CODE_STR)->valuestring;
...@@ -412,25 +388,20 @@ static int kk_parse_syncinfo(cJSON *payload) ...@@ -412,25 +388,20 @@ static int kk_parse_syncinfo(cJSON *payload)
while(subitem != NULL){ while(subitem != NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
deviceCode = cJSON_GetObjectItem(subitem,MSG_DEVICE_CODE_STR)->valuestring; deviceCode = cJSON_GetObjectItem(subitem,MSG_DEVICE_CODE_STR)->valuestring;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
productCode = cJSON_GetObjectItem(subitem,MSG_PRODUCT_CODE_STR)->valuestring; productCode = cJSON_GetObjectItem(subitem,MSG_PRODUCT_CODE_STR)->valuestring;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
onlineStatus = cJSON_GetObjectItem(subitem,MSG_ONLINE_STATUS_STR); onlineStatus = cJSON_GetObjectItem(subitem,MSG_ONLINE_STATUS_STR);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
properties = cJSON_GetObjectItem(subitem,MSG_PROPERTIES_STR); properties = cJSON_GetObjectItem(subitem,MSG_PROPERTIES_STR);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
node = kk_map_dev_add(deviceCode,productCode,gwdevicecode,onlineStatus->valuestring);
kk_map_dev_node_add(deviceCode,productCode,gwdevicecode,onlineStatus->valuestring);
property_syn_deal(deviceCode,properties); property_syn_deal(deviceCode,properties);
...@@ -438,175 +409,97 @@ static int kk_parse_syncinfo(cJSON *payload) ...@@ -438,175 +409,97 @@ static int kk_parse_syncinfo(cJSON *payload)
subitem = subitem->next; subitem = subitem->next;
} }
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
gwitem = gwitem->next; gwitem = gwitem->next;
} }
printf("\n\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n\n\n");
return 0; return 0;
} }
static int kk_create_floors_to_sdk(cJSON *root)
{
cJSON *floors = cJSON_CreateArray();
cJSON *floorItem = cJSON_CreateObject();
cJSON_AddStringToObject(floorItem, "floor_icon", "");
cJSON_AddStringToObject(floorItem, "floor_pos", "1");
cJSON_AddStringToObject(floorItem, "id", "1");
cJSON_AddStringToObject(floorItem, "name", "一楼");
cJSON_AddItemToArray(floors, floorItem);
cJSON_AddItemToObject(root, "floors", floors);
return 0;
}
static int kk_create_roominfo_to_sdk(cJSON *root)
{
cJSON *rooms = cJSON_CreateArray();
cJSON *roomsItem = cJSON_CreateObject();
cJSON *room_status;
cJSON_AddStringToObject(roomsItem, "floor_id", "1");
cJSON_AddStringToObject(roomsItem, "id", "1");
cJSON_AddStringToObject(roomsItem, "room_icon", "");
cJSON_AddStringToObject(roomsItem, "name", "卧室");
room_status = cJSON_CreateObject();
cJSON_AddItemToObject(roomsItem, "room_status", room_status);
cJSON_AddItemToArray(rooms, roomsItem);
cJSON_AddItemToObject(root, "rooms", rooms);
return 0;
}
static int kk_create_scene_to_sdk(cJSON *root)
{
cJSON *scenes = cJSON_CreateArray();
cJSON_AddItemToObject(root, "scenes", scenes);
return 0;
}
int kk_create_syncinfo_to_sdk(cJSON *payload)
{
cJSON *air_box_devices;
cJSON *alarms;
cJSON *ccu_link_status;
cJSON *link_arg;
cJSON *ccu_version;
cJSON *central_ac_gws;
cJSON *central_ac_indoorunits;
cJSON *cnwise_music_controllers;
cJSON *code_lib_controllers;
cJSON *controllers;
cJSON *expand_rules;
cJSON *group;
cJSON *guard;
cJSON *gw_version;
char *out = NULL;
cJSON *root=cJSON_CreateObject();
cJSON *aiks_controllers = cJSON_CreateArray();
cJSON_AddItemToObject(root, "aiks_controllers", aiks_controllers);
air_box_devices = cJSON_CreateArray();
cJSON_AddItemToObject(root, "air_box_devices", air_box_devices);
alarms = cJSON_CreateArray();
cJSON_AddItemToObject(root, "alarms", alarms);
ccu_link_status = cJSON_CreateObject();
link_arg = cJSON_CreateObject();
cJSON_AddItemToObject(ccu_link_status, "link_arg", link_arg);
cJSON_AddStringToObject(ccu_link_status, "link_type", "broadband_net");
cJSON_AddItemToObject(root, "ccu_link_status", ccu_link_status);
ccu_version = cJSON_CreateObject();
cJSON_AddStringToObject(ccu_version, "cur_ccu_version", "1.0.0");
cJSON_AddStringToObject(ccu_version, "downloaded_ccu_version", "1.0.0");
cJSON_AddItemToObject(root, "ccu_version", ccu_version);
central_ac_gws = cJSON_CreateArray();
cJSON_AddItemToObject(root, "central_ac_gws", central_ac_gws);
central_ac_indoorunits = cJSON_CreateArray();
cJSON_AddItemToObject(root, "central_ac_indoorunits", central_ac_indoorunits);
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);
controllers = cJSON_CreateArray();
cJSON_AddItemToObject(root, "controllers", controllers);
kk_create_devicestatus_to_sdk(root);
kk_create_devices_to_sdk(root);
kk_create_rooms_to_sdk(root);
#if 1
expand_rules = cJSON_CreateArray();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddItemToObject(root, "expand_rules", expand_rules); int is_ccu_msg(cJSON *productCode,cJSON *deviceCode)
printf("[%s][%d]\n",__FUNCTION__,__LINE__); {
kk_create_floors_to_sdk(root); if((strlen(productCode->valuestring)==strlen(KK_CCU_PRODUCTID) &&
group = cJSON_CreateArray(); !strcmp(productCode->valuestring,KK_CCU_PRODUCTID)) &&
printf("[%s][%d]\n",__FUNCTION__,__LINE__); (strlen(deviceCode->valuestring)==strlen(KK_CCU_ID) &&
cJSON_AddItemToObject(root, "group", group); !strcmp(deviceCode->valuestring,KK_CCU_ID))){
printf("[%s][%d]\n",__FUNCTION__,__LINE__); return 1;
guard = cJSON_CreateObject(); }
cJSON_AddItemToObject(root, "guard", guard);
gw_version = cJSON_CreateObject();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddItemToObject(root, "gw_version", gw_version);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_create_roominfo_to_sdk(root);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_create_scene_to_sdk(root);
#endif
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
out=cJSON_Print(root);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("out:%s\n",out);
_kk_send_data_to_sdk("*","SYNC_INFO",root);
return 0; return 0;
} }
int is_arming_status_notify(cJSON *payload)
{
cJSON *params = NULL;
cJSON *ArmingState = NULL;
if((params = cJSON_GetObjectItem(payload, MSG_PARAMS_STR))!=NULL){
if((ArmingState = cJSON_GetObjectItem(payload, "ArmingState"))!=NULL){
if(ArmingState->type==cJSON_String &&
ArmingState->valuestring!=NULL){
return atoi(ArmingState->valuestring);
}
}
}
return -1;
}
void KK_Data_FromMid(void* str,int len) void KK_Data_FromMid(void* str,int len)
{ {
cJSON *json; cJSON *json;
cJSON *info_root; cJSON *info,*payload;
cJSON *payload,*typeJson; cJSON *msgtype,*deviceCode,*productCode;
cJSON *deviceCode;
printf("[midware->lan]:%s\n",str);
json = cJSON_Parse(str); printf("[midware->lan] len=%d,data=%s\n",len,str);
if(json == NULL){ if((json= cJSON_Parse(str)) == NULL) {
return; return;
} }
info_root = cJSON_GetObjectItem(json, MSG_INFO_STR);
if(info_root == NULL) return; info = cJSON_GetObjectItem(json, MSG_INFO_STR);
payload = cJSON_GetObjectItem(json, MSG_PAYLOAD_STR); payload = cJSON_GetObjectItem(json, MSG_PAYLOAD_STR);
if(payload == NULL) return; if(info==NULL || payload==NULL ||
info->type != cJSON_Object ||payload->type!= cJSON_Object){
return;
}
deviceCode= cJSON_GetObjectItem(info_root, MSG_DEVICE_CODE_STR); msgtype = cJSON_GetObjectItem(info, MSG_TYPE_STR);
productCode = cJSON_GetObjectItem(info, MSG_PRODUCT_CODE_STR);
deviceCode= cJSON_GetObjectItem(info, MSG_DEVICE_CODE_STR);
if(deviceCode == NULL) return; if(msgtype == NULL || productCode==NULL || deviceCode==NULL||
msgtype->type != cJSON_String || productCode->type!= cJSON_String||deviceCode->type!= cJSON_String ||
msgtype->valuestring==NULL|| productCode->valuestring==NULL || deviceCode->valuestring==NULL){
typeJson = cJSON_GetObjectItem(info_root, MSG_TYPE_STR); return;
}
if(typeJson == NULL) return; if (strstr(msgtype->valuestring,SYNC_MSG_TYPE_REPLY) != NULL){
if (strstr(typeJson->valuestring,SYNC_MSG_TYPE_REPLY) != NULL){
kk_parse_syncinfo(payload); kk_parse_syncinfo(payload);
kk_create_syncinfo_to_sdk(payload); kk_create_syncinfo_to_sdk(payload);
printf("TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n"); }else if(strstr(msgtype->valuestring,"/thing/event/property/post")!= NULL){
}else if(strstr(typeJson->valuestring,"/thing/event/property/post")!= NULL){
property_post_deal(deviceCode->valuestring,payload); if(is_ccu_msg(productCode,deviceCode)){
}else if(strstr(typeJson->valuestring,"/thing/topo/delete")!= NULL){ int type;
if((type = is_arming_status_notify(payload))!=-1){
arming_status_notify(type);
}
}else{
property_post_deal(deviceCode->valuestring,payload);
}
}else if(strstr(msgtype->valuestring,"/thing/topo/delete")!= NULL){
device_delete_sync(payload); device_delete_sync(payload);
}else if(strstr(typeJson->valuestring,"/thing/status/online")!= NULL){ }else if(strstr(msgtype->valuestring,"/thing/status/online")!= NULL){
device_add_sync(payload); device_add_sync(payload);
} }
} }
......
...@@ -5,5 +5,6 @@ ...@@ -5,5 +5,6 @@
#include "cJSON.h" #include "cJSON.h"
#include "kk_product.h" #include "kk_product.h"
int kk_data_handle(cJSON *json,int sockfd); int kk_data_handle(cJSON *json,int sockfd);
void kk_handle_sync_info(void);
void KK_Data_FromMid(void* str,int len); void KK_Data_FromMid(void* str,int len);
#endif #endif
\ No newline at end of file
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
#include <string.h> #include <string.h>
#include "kk_data_mng.h" #include "kk_data_mng.h"
#include "kk_lan_node_db.h" #include "kk_lan_node_db.h"
#include "kk_oldccu_msg.h"
static kk_map_dev_ctx g_map_dev_mgr = {0}; static kk_map_dev_ctx g_map_dev_mgr = {0};
...@@ -49,11 +52,11 @@ void kk_map_dev_deinit(void) ...@@ -49,11 +52,11 @@ void kk_map_dev_deinit(void)
kk_map_dev_node_t *n = NULL; kk_map_dev_node_t *n = NULL;
printf("[%s][%d]\n",__FUNCTION__,__LINE__); 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) { list_for_each_entry_safe(node,n,&ctx->dev_list, linked_list, kk_map_dev_node_t) {
printf("[remove list] node->linked_list000000000\n");
if (node != NULL) { if (node != NULL) {
_kk_map_dev_mutex_lock();
if(node->json){ if(node->json){
printf("[delete cjson] node->json.\n"); printf("[delete cjson] node->json.\n");
...@@ -67,126 +70,154 @@ void kk_map_dev_deinit(void) ...@@ -67,126 +70,154 @@ void kk_map_dev_deinit(void)
printf("[remove list] node->linked_list\n"); printf("[remove list] node->linked_list\n");
dlist_del(&node->linked_list); dlist_del(&node->linked_list);
memset(node,0,sizeof(kk_map_dev_node_t)); memset(node,0,sizeof(kk_map_dev_node_t));
_kk_map_dev_mutex_unlock();
} }
} }
_kk_map_dev_mutex_unlock();
} }
static kk_map_dev_node_t *kk_map_dev_node_create(const char *deviceCode,const char *productCode,const char *gwdeviceCode,
const char *onlineStatus,char *buf)
{
kk_map_dev_node_t *node = NULL;
cJSON *json = NULL;
cJSON *newccu = NULL,*oldccu = NULL,*channel = NULL,*optype = NULL;
cJSON *syn_type = NULL,*syn_opcode = NULL;
node = malloc(sizeof(kk_map_dev_node_t));
if (node == NULL) {
return NULL;
}
memset(node,0x0,sizeof(kk_map_dev_node_t));
static int kk_open_cfg_file(char *deviceCode,kk_map_dev_node_t *node) json = cJSON_Parse(buf);
if(json == NULL){
free(buf);
return NULL;
}
node->json = json;
optype = cJSON_GetObjectItem(json, OPEARTETYPE_STRING);
channel = cJSON_GetObjectItem(json, CHANNEL_STRING);
newccu = cJSON_GetObjectItem(json, NEWCCU_STRING);
oldccu = cJSON_GetObjectItem(json, OLDCCU_STRING);
syn_type = cJSON_GetObjectItem(json, "syn_type");
syn_opcode = cJSON_GetObjectItem(json, "syn_opcode");
if(optype == NULL || optype->type!=cJSON_String ||
channel==NULL||channel->type!=cJSON_Number){
goto err;
}
if(newccu==NULL||newccu->type!=cJSON_Array||
oldccu==NULL||oldccu->type!=cJSON_Array){
goto err;
}
if(syn_type!=NULL){
if(syn_type->type==cJSON_Number){
if(syn_opcode==NULL||syn_opcode->type!=cJSON_String){
goto err;
}
}else{
goto err;
}
}
memcpy(node->gwDeviceCode,gwdeviceCode,strlen(gwdeviceCode));
memcpy(node->deviceCode,deviceCode,strlen(deviceCode));
memcpy(node->productCode,productCode,strlen(productCode));
node->online_status = (strcmp(onlineStatus,"1")==0)?1:0;
memcpy(node->opearteType,optype->valuestring,strlen(optype->valuestring));
node->channelNum = channel->valueint;
node->newccu = newccu;
node->oldccu = oldccu;
if(syn_type){
node->syn_type = syn_type->valueint;
node->syn_opcode= (char *)malloc(strlen(syn_opcode->valuestring)+1);
memset(node->syn_opcode,0,strlen(node->syn_opcode)+1);
memcpy(node->syn_opcode,syn_opcode->valuestring,strlen(syn_opcode->valuestring));
}
free(buf);
return node;
err:
free(buf);
return NULL;
}
static char *kk_open_lan_cfg_file(char *deviceCode)
{ {
char path[128] = {0}; char path[128] = {0};
unsigned int filesize; unsigned int filesize;
FILE *fp; FILE *fp;
char *buf = NULL; char *buf = NULL;
cJSON *json = NULL;
cJSON *optype = NULL;
cJSON *syn_type = NULL; snprintf(path,sizeof(path),KK_DEVICE_MAP_FILE_PATH,deviceCode);
sprintf(path,KK_DEVICE_MAP_FILE_PATH,deviceCode);
printf("kk_open_cfg_file path:%s\n",path); printf("kk_open_cfg_file path:%s\n",path);
if(!(fp = fopen(path,"r"))) if(!(fp = fopen(path,"r")))
{ {
ERROR_PRINT("can't open the file tslPath:%s\n",path); ERROR_PRINT("can't open the file tslPath:%s\n",path);
return -1; return NULL;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
fseek(fp, 0L, SEEK_END); fseek(fp, 0L, SEEK_END);
filesize = ftell(fp); filesize = ftell(fp);
buf = malloc(filesize+1); buf = malloc(filesize+1);
if(buf == NULL) if(buf == NULL)
{ {
ERROR_PRINT("MALLOC FAIL!!!\n");
fclose(fp); fclose(fp);
return -1; return NULL;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memset(buf,0x0,filesize+1); memset(buf,0x0,filesize+1);
fseek(fp, 0L, SEEK_SET); fseek(fp, 0L, SEEK_SET);
fread(buf, 1, filesize, fp); fread(buf, 1, filesize, fp);
printf("buf:%s\n",buf); printf("[read lan cfg]:%s\n",buf);
json = cJSON_Parse(buf);
if(json == NULL){
ERROR_PRINT("cJSON_Parse FAIL!!!\n");
free(buf);
fclose(fp);
return -1;
}
node->json = json;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
optype = cJSON_GetObjectItem(json, OPEARTETYPE_STRING);
if(optype != NULL){
memcpy(node->opearteType,optype->valuestring,strlen(optype->valuestring));
}
syn_type = cJSON_GetObjectItem(json, "syn_type");
if(syn_type){
cJSON *syn_opcode = cJSON_GetObjectItem(json, "syn_opcode");
node->syn_type = syn_type->valueint;
node->syn_opcode= (char *)malloc(strlen(syn_opcode->valuestring)+1);
memset(node->syn_opcode,0,strlen(node->syn_opcode)+1);
memcpy(node->syn_opcode,syn_opcode->valuestring,strlen(syn_opcode->valuestring));
}
printf("[%s][%d]node->syn_type=%d****************\n",__FUNCTION__,__LINE__,node->syn_type);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
node->channelNum = cJSON_GetObjectItem(json, CHANNEL_STRING)->valueint;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
node->newccu = cJSON_GetObjectItem(json, NEWCCU_STRING);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
node->oldccu = cJSON_GetObjectItem(json, OLDCCU_STRING);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(node->newccu == NULL || node->oldccu == NULL){
ERROR_PRINT("cJSON_Parse DATA FAIL!!!\n");
free(buf);
fclose(fp);
return -1;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
free(buf);
fclose(fp); fclose(fp);
return 0; return buf;
} }
//todo:
int kk_creater_nodeid(char *deviceCode,int channel,char *nodeId) int kk_creater_nodeid(char *deviceCode,int channel,char *nodeId)
{ {
static int next = 1; static int next = 1;
int node=-1; int node=-1;
if(deviceCode == NULL || channel == NULL || nodeId == NULL){ if(deviceCode == NULL || nodeId == NULL){
printf("bbb\n");
return -1; return -1;
} }
printf("aaa\n");
printf("channel=%d\n",channel);
printf("deviceCode=%s\n",deviceCode);
printf(",,,,\n");
INFO_PRINT("-------------->deviceCode=%s,channel=%d\n",deviceCode,channel);
printf("aaa-1\n");
if(kk_check_lan_node_exist(deviceCode,channel)){ if(kk_check_lan_node_exist(deviceCode,channel)){
printf("aaa-2\n");
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
node = kk_lan_db_node_get(deviceCode,channel); node = kk_lan_db_node_get(deviceCode,channel);
}else{ }else{
printf("aaa-3\n");
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
while(kk_check_lan_node(next)){ while(kk_check_lan_node(next)){
++next; ++next;
} }
INFO_PRINT("#################next=%d\n",next);
if(0==kk_lan_db_node_insert(deviceCode,channel,next)){ if(0==kk_lan_db_node_insert(deviceCode,channel,next)){
node=next; node=next;
} }
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("aaa-44,node=%d\n",node);
sprintf(nodeId,"%d",node); sprintf(nodeId,"%d",node);
printf("aaa-4\n");
INFO_PRINT("[node]deviceCode=%s,channel=%d,node=%d,nodeId=%s\n",deviceCode,channel,node,nodeId); INFO_PRINT("[node]deviceCode=%s,channel=%d,node=%d,nodeId=%s\n",deviceCode,channel,node,nodeId);
return 0; return 0;
...@@ -280,121 +311,34 @@ int _deviceCode_switchto_mac(char * deviceCode,char *mac) ...@@ -280,121 +311,34 @@ int _deviceCode_switchto_mac(char * deviceCode,char *mac)
} }
typedef struct{
char *floor_id;
char *room_id;
char *room_icon;
char *room_name;
cJSON *room_status;
}ROOM_ITEM;
cJSON *_room_build(ROOM_ITEM *item)
{
cJSON *room = cJSON_CreateObject();
cJSON_AddStringToObject(room, "floor_id", item->floor_id);
cJSON_AddStringToObject(room, "id", item->room_id);
cJSON_AddStringToObject(room, "room_icon", item->room_icon);
cJSON_AddStringToObject(room, "name", item->room_name);
cJSON_AddItemToObject(room, "room_status", item->room_status);
return room;
}
cJSON *_rooms_build(int num,ROOM_ITEM **items)
{
cJSON *rooms = cJSON_CreateArray();
cJSON *room;
int i;
for(int i=0;i<num;i++){
room = _room_build(items[i]);
if(room!=NULL){
cJSON_AddItemToArray(rooms,room);
}
}
return rooms;
}
cJSON *kk_create_rooms_to_sdk(cJSON *payload)
{
cJSON *data_1 = cJSON_GetObjectItem(payload,"data");
cJSON *data_2 = cJSON_GetObjectItem(data_1,"data");
cJSON *rooms = cJSON_GetObjectItem(data_2,"rooms");
cJSON *room;
cJSON *roomId,*name,*devices,*scenes;
int i;
int num = cJSON_GetArraySize(rooms);
ROOM_ITEM* items = (ROOM_ITEM*)malloc(sizeof(ROOM_ITEM)*num);
ROOM_ITEM* item = item;
memset(items,0,(sizeof(ROOM_ITEM)*num));
for(i=0;i<num;i++,item++){
room = cJSON_GetArrayItem(rooms,i);
roomId = cJSON_GetObjectItem(room,"roomId");
name = cJSON_GetObjectItem(room,"name");
devices = cJSON_GetObjectItem(room,"devices");
scenes= cJSON_GetObjectItem(room,"scenes");
memcpy(item->floor_id,"",sizeof(""));
memcpy(item->room_id,roomId->valuestring,sizeof(roomId->valuestring));
memcpy(item->room_icon,"",sizeof(""));
memcpy(item->room_name,name->valuestring,sizeof(name->valuestring));
memcpy(item->room_status,"",sizeof(""));
}
_rooms_build(num,&items);
}
int kk_create_devices_to_sdk(cJSON *root)
{
kk_map_dev_node_t *node = NULL;
char nodeid[32] = {0};
char gwmac[32] = {0};
char submac[32] = {0};
char channel[4];
int idx = 1;
kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
cJSON *devices = cJSON_CreateArray();
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++){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON *subdevicesItem = cJSON_CreateObject();
sprintf(channel,"%d",idx);
cJSON_AddStringToObject(subdevicesItem, CHANNEL_STRING, channel);
cJSON_AddStringToObject(subdevicesItem, DEVICE_FIELD_STRING, "");
cJSON_AddStringToObject(subdevicesItem, DEVICE_FIELD_IDNDEX_STRING, "1");
cJSON_AddStringToObject(subdevicesItem, DEVICE_ICON_STRING, "");
cJSON_AddStringToObject(subdevicesItem, DEVICE_POS_STRING, "1");
_deviceCode_switchto_mac(node->gwDeviceCode,gwmac);
printf("gwmac:%s\n",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_AddItemToObject(root, DEVICES_STRING, devices);
return 0;
}
char *double_value_string(double val) char *double_value_string(double val)
...@@ -409,42 +353,7 @@ char *double_value_string(double val) ...@@ -409,42 +353,7 @@ char *double_value_string(double val)
int kk_create_devicestatus_to_sdk(cJSON *root)
{
kk_map_dev_node_t *node = NULL;
char nodeid[32] = {0};
char indxId[4] = {0};
int idx = 1;
int syn_type = 0;
kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
cJSON *device_status = cJSON_CreateArray();
cJSON *args;
cJSON *sub_device;
kk_map_dev_node_t *n = NULL;
list_for_each_entry_safe(node,n, &ctx->dev_list, linked_list, kk_map_dev_node_t){
if(node->syn_type==1){
kk_creater_nodeid(node->deviceCode,1,nodeid);
if((args = kk_devicestatus_build(node))!=NULL){
sub_device=old_ccu_msg_build_json_node_int(atoi(nodeid),node->syn_opcode,NULL,args);
if(sub_device){
cJSON_AddItemToArray(device_status,sub_device);
}
}
}else{
kk_devicestatus_build_aaa(device_status,node);
}
}
cJSON_AddItemToObject(root, DEVICE_STATUS_STRING, device_status);
return 0;
}
...@@ -516,74 +425,36 @@ int kk_map_dev_search_by_deviceCode(char *deviceCode, kk_map_dev_node_t **node) ...@@ -516,74 +425,36 @@ int kk_map_dev_search_by_deviceCode(char *deviceCode, kk_map_dev_node_t **node)
kk_map_dev_node_t *kk_map_dev_add(char *deviceCode,char *productCode,char *gwdeviceCode,char *onlineStatus) kk_map_dev_node_t *kk_map_dev_node_add(const char *deviceCode,const char *productCode,const char *gwdeviceCode,const char *onlineStatus)
{ {
#if 1
kk_map_dev_node_t *node = NULL; kk_map_dev_node_t *node = NULL;
kk_map_dev_ctx *ctx = _kk_map_dev_ctx(); kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
char *buf = NULL;
node = malloc(sizeof(kk_map_dev_node_t));
if (node == NULL) { if(deviceCode==NULL||productCode==NULL||
gwdeviceCode==NULL||onlineStatus==NULL){
return NULL; return NULL;
} }
printf("----------------------------------------->%s\n",onlineStatus);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
_kk_map_dev_mutex_lock(); _kk_map_dev_mutex_lock();
printf("[%s][%d]%d\n",__FUNCTION__,__LINE__,onlineStatus); if((buf = kk_open_lan_cfg_file(productCode))!=NULL){
memset(node,0x0,sizeof(kk_map_dev_node_t)); node = kk_map_dev_node_create(deviceCode,productCode,gwdeviceCode,onlineStatus,buf);
printf("[%s][%d]%d\n",__FUNCTION__,__LINE__,onlineStatus); if(node){
memcpy(node->gwDeviceCode,gwdeviceCode,strlen(gwdeviceCode)); INIT_LIST_HEAD(&node->linked_list);
printf("[%s][%d]%d\n",__FUNCTION__,__LINE__,onlineStatus); list_add_tail(&node->linked_list, &ctx->dev_list);
memcpy(node->deviceCode,deviceCode,strlen(deviceCode)); }
printf("[%s][%d]%d\n",__FUNCTION__,__LINE__,onlineStatus);
memcpy(node->productCode,productCode,strlen(productCode));
printf("[%s][%d]%d\n",__FUNCTION__,__LINE__,onlineStatus);
if(onlineStatus){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("[%s][%d]%d\n",__FUNCTION__,__LINE__,onlineStatus);
}else{
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(strcmp(onlineStatus,"1")==0){
node->online_status=1;
}else{
node->online_status=0;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_open_cfg_file(productCode,node);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
INIT_LIST_HEAD(&node->linked_list);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("#55,%d\n",node);
list_add_tail(&node->linked_list, &ctx->dev_list);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
_kk_map_dev_mutex_unlock(); _kk_map_dev_mutex_unlock();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return node;
#endif
}
return node;
}
/*
int get_productCode_by_deviceCode(const char *deviceCode)
{
kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
kk_map_dev_node_t *search_node = NULL;
list_for_each_entry(search_node, &ctx->dev_list, linked_list, kk_map_dev_node_t) {
if ( (strlen(search_node->deviceCode) == strlen(deviceCode)) &&
(memcmp(search_node->deviceCode, deviceCode, strlen(deviceCode)) == 0)) {
item = kk_zb_dev_hw_info_build(search_node->deviceCode,search_node->productCode,search_node->online_status,NULL,NULL);
return item;
}
}
return NULL;
}
*/
......
...@@ -28,12 +28,12 @@ typedef struct { ...@@ -28,12 +28,12 @@ typedef struct {
struct list_head dev_list; struct list_head dev_list;
} kk_map_dev_ctx; } kk_map_dev_ctx;
kk_map_dev_node_t *kk_map_dev_add(char *deviceCode,char *productCode,char *gwdeviceCode,char *onlineStatus); kk_map_dev_node_t *kk_map_dev_node_add(const char *deviceCode,const char *productCode,const char *gwdeviceCode,const char *onlineStatus);
int kk_create_devicestatus_to_sdk(cJSON *root); int kk_create_devicestatus_to_sdk(cJSON *root);
int kk_create_devices_to_sdk(cJSON *root); int kk_create_devices_to_sdk(cJSON *root);
int _deviceCode_switchto_mac(char * deviceCode,char *mac); int _deviceCode_switchto_mac(char * deviceCode,char *mac);
int mac_switchto_deviceCode(char *mac,char * deviceCode); int mac_switchto_deviceCode(char *mac,char * deviceCode);
kk_map_dev_ctx *_kk_map_dev_ctx(void); kk_map_dev_ctx *_kk_map_dev_ctx(void);
int kk_map_dev_init(void);
#endif #endif
\ No newline at end of file
...@@ -13,24 +13,6 @@ ...@@ -13,24 +13,6 @@
int find_match_pos(cJSON *array,const char *tag,const char *match)
{
int i = 0;
int pos = -1;
cJSON *item;
cJSON *mh;
int size = cJSON_GetArraySize(array);
for(;i<size;i++){
item = cJSON_GetArrayItem(array,i);
mh = cJSON_GetObjectItem(item,tag);
if(strcmp(mh->valuestring,match)==0){
pos = i;
break;
}
}
return pos;
}
int match_opcode_pos(cJSON *array,const char *opcode,int ch) int match_opcode_pos(cJSON *array,const char *opcode,int ch)
{ {
...@@ -55,26 +37,9 @@ int match_opcode_pos(cJSON *array,const char *opcode,int ch) ...@@ -55,26 +37,9 @@ int match_opcode_pos(cJSON *array,const char *opcode,int ch)
} }
int match_value_string(cJSON *valueRange,const char *val)
{
cJSON *item;
int i = 0;
int pos = -1;
int size = cJSON_GetArraySize(valueRange);
for(;i<size;i++){
item = cJSON_GetArrayItem(valueRange,i);
if(strcmp(item->valuestring,val)==0){
pos = i;
break;
}
}
return pos;
}
cJSON * ctrl_conver(kk_map_dev_node_t *devNode,int nodeId,cJSON *arg,cJSON *opcode) cJSON * kk_control_protocol_convert(kk_map_dev_node_t *devNode,int nodeId,cJSON *arg,cJSON *opcode)
{ {
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
cJSON *val; cJSON *val;
...@@ -89,6 +54,7 @@ cJSON * ctrl_conver(kk_map_dev_node_t *devNode,int nodeId,cJSON *arg,cJSON *opco ...@@ -89,6 +54,7 @@ cJSON * ctrl_conver(kk_map_dev_node_t *devNode,int nodeId,cJSON *arg,cJSON *opco
cJSON *o_valueRange; cJSON *o_valueRange;
cJSON *n_identifier; cJSON *n_identifier;
cJSON *epNum;
int pos; int pos;
int channel; int channel;
...@@ -118,99 +84,41 @@ cJSON * ctrl_conver(kk_map_dev_node_t *devNode,int nodeId,cJSON *arg,cJSON *opco ...@@ -118,99 +84,41 @@ cJSON * ctrl_conver(kk_map_dev_node_t *devNode,int nodeId,cJSON *arg,cJSON *opco
n_dataType = cJSON_GetObjectItem(newccuItem,"dataType"); n_dataType = cJSON_GetObjectItem(newccuItem,"dataType");
n_valueRange = cJSON_GetObjectItem(newccuItem,"valueRange"); n_valueRange = cJSON_GetObjectItem(newccuItem,"valueRange");
n_identifier = cJSON_GetObjectItem(newccuItem,"identifier"); n_identifier = cJSON_GetObjectItem(newccuItem,"identifier");
epNum = cJSON_GetObjectItem(newccuItem,"channel");
printf("1111\n");
if(strcmp(o_dataType->valuestring,"map")==0){ if(strcmp(o_dataType->valuestring,"map")==0){
printf("2222\n");
val = map_type_convert(o_dataType,o_valueRange,arg,n_valueRange); val = map_type_convert(o_dataType,o_valueRange,arg,n_valueRange);
}else{ }else{
printf("3333\n");
val = msg_convert_value(o_dataType,n_dataType,arg); val = msg_convert_value(o_dataType,n_dataType,arg);
} }
printf("4444-->%d\n",val->type);
if(val->type==cJSON_False){ printf("----------->epNum=%s\n",epNum->valuestring);
cJSON_AddFalseToObject(params,n_identifier->valuestring); cJSON_AddStringToObject(params,"epNum",epNum->valuestring);
}else if(val->type==cJSON_True){
cJSON_AddTrueToObject(params,n_identifier->valuestring); if(val->type==cJSON_False){
}else if(val->type==cJSON_NULL){ cJSON_AddFalseToObject(params,n_identifier->valuestring);
cJSON_AddNullToObject(params,n_identifier->valuestring); }else if(val->type==cJSON_True){
}else if(val->type==cJSON_Number){ cJSON_AddTrueToObject(params,n_identifier->valuestring);
cJSON_AddNumberToObject(params,n_identifier->valuestring,val->valuedouble); }else if(val->type==cJSON_NULL){
}else if(val->type==cJSON_String){ cJSON_AddNullToObject(params,n_identifier->valuestring);
cJSON_AddStringToObject(params,n_identifier->valuestring,val->valuestring); }else if(val->type==cJSON_Number){
}else if(val->type==cJSON_Array){ cJSON_AddNumberToObject(params,n_identifier->valuestring,val->valuedouble);
printf("......................\n"); }else if(val->type==cJSON_String){
} cJSON_AddStringToObject(params,n_identifier->valuestring,val->valuestring);
}else if(val->type==cJSON_Array){
printf("......................\n");
}
return params; return params;
} }
typedef int(*match_func)(cJSON *);
typedef struct
{
char *Opcode;
match_func func;
}MATCH_ITEM_S;
int opcode_switch(cJSON *root);
static MATCH_ITEM_S match_table[] = {
{SWITCH_OPCODE,opcode_switch}
};
MATCH_ITEM_S *get_match_table(void)
{
return &match_table;
}
int kk_ccu_opcode_handle(cJSON *root)
{
int i;
//int size = sizeof(match_table)/sizeof(MATCH_ITEM_S);
cJSON *opcode = cJSON_GetObjectItem(root,OPCODE_STR);
//MATCH_ITEM_S *pMh = get_match_table();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(opcode==NULL||opcode->type!=cJSON_String){
return -1;
}
/*for(i=0;i<size;i++,pMh++) {
if(strcmp(opcode->valuestring,pMh->Opcode)==0){
if(pMh->func){
printf("[%s][%d]match table[%d]\n",__FUNCTION__,__LINE__,i);
pMh->func(root);
}
}
}*/
opcode_switch(root);
}
//向midware发送数据
int kk_ipc_send_json(cJSON *root)
{
char *msg;
if(root==NULL){
return -1;
}
msg=cJSON_Print(root);
printf("[lan->midware]json:\n%s\n",msg);
cJSON_Minify(msg);
kk_ipc_send(IPC_APP2MID, msg, strlen(msg)+1);
free(msg);
return 0;
}
int opcode_switch(cJSON *root) int kk_ccu_opcode_handle(cJSON *root)
{ {
cJSON *msg; cJSON *msg;
...@@ -226,31 +134,44 @@ int opcode_switch(cJSON *root) ...@@ -226,31 +134,44 @@ int opcode_switch(cJSON *root)
nodeId = cJSON_GetObjectItem(root,NODEID_STR); nodeId = cJSON_GetObjectItem(root,NODEID_STR);
opcode = cJSON_GetObjectItem(root,OPCODE_STR); opcode = cJSON_GetObjectItem(root,OPCODE_STR);
arg = cJSON_GetObjectItem(root,ARG_STR); arg = cJSON_GetObjectItem(root,ARG_STR);
requester= cJSON_GetObjectItem(root,REQUEST_STR); requester= cJSON_GetObjectItem(root,REQUEST_STR);
if(opcode==NULL||opcode->type!=cJSON_String){
return -1;
}
if(nodeId==NULL||opcode==NULL||arg==NULL ){ if(nodeId==NULL||opcode==NULL||arg==NULL ){
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return; return;
} }
if((requester!=NULL) &&(strcmp(requester->valuestring,HJ_SERVER)!=0)){
WARNING_PRINT("[%s] err,%s,%s\n",REQUEST_STR,HJ_SERVER,requester->valuestring);
}
if(requester!=NULL){
WARNING_PRINT("[requester]%s\n",requester->valuestring);
}
kk_lan_db_deviceCode_get(atoi(nodeId->valuestring),deviceCode); kk_lan_db_deviceCode_get(atoi(nodeId->valuestring),deviceCode);
if((requester!=NULL) &&(strcmp(requester->valuestring,HJ_PROFILE)==0) &&
(strcmp(opcode->valuestring,"SWITCH")==0)){
msg=scene_execute(nodeId->valuestring);
kk_ipc_send_json(msg);
return 0;
}
if(kk_map_dev_search_by_deviceCode(deviceCode, &dev)==0){ if(kk_map_dev_search_by_deviceCode(deviceCode, &dev)==0){
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON *params=ctrl_conver(dev,atoi(nodeId->valuestring),arg,opcode); cJSON *params=kk_control_protocol_convert(dev,atoi(nodeId->valuestring),arg,opcode);
msg=property_set(dev->productCode,dev->deviceCode,"*","*",params); msg=property_set(dev->productCode,dev->deviceCode,"*","*",params);
kk_ipc_send_json(msg); kk_ipc_send_json(msg);
}else{ }else{
printf("[%s][%d]\n",__FUNCTION__,__LINE__); WARNING_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
} }
} }
...@@ -261,6 +182,11 @@ int opcode_switch(cJSON *root) ...@@ -261,6 +182,11 @@ int opcode_switch(cJSON *root)
char *node_string(int nodeId) char *node_string(int nodeId)
{ {
char *node = (char *)malloc(33); char *node = (char *)malloc(33);
...@@ -270,39 +196,12 @@ char *node_string(int nodeId) ...@@ -270,39 +196,12 @@ char *node_string(int nodeId)
return node; return node;
} }
char *double_string(double dVal,int size)
{
char *buff = (char *)malloc(size+1);
memset(buff,0,size+1);
snprintf(buff,size,"%6f",dVal);
return buff;
}
int update_device_status_2_oldccu(int nodeId,const char *opcode,const char *arg)
{
cJSON *msg;
char *nodeStr;
if(arg==NULL){
return -1;
}
printf("[%s][%d]nodeId=%d,status=%s\n",__FUNCTION__,__LINE__,nodeId,arg);
if((nodeStr=node_string(nodeId))!=NULL){
msg = old_ccu_msg_build(nodeStr,opcode,"success",arg);
send_msg_to_module(msg);
cJSON_Delete(msg);
free(nodeStr);
return 0;
}
return -1;
}
......
...@@ -69,8 +69,8 @@ int main(int argc, char* argv[]) ...@@ -69,8 +69,8 @@ int main(int argc, char* argv[])
int rc = 0; int rc = 0;
char *ppp; char *ppp;
open("kk_lan",LOG_PID,LOG_USER); open("kk_lan",LOG_PID,LOG_USER);
kk_lan_ccuid_init();
ttttt_test();
kk_scene_build_test(); kk_scene_build_test();
/*set the callback to get the device date to cloud*/ /*set the callback to get the device date to cloud*/
kk_ipc_init(IPC_APP2MID,(ipc_cb*)KK_Data_FromMid,NULL,NULL); kk_ipc_init(IPC_APP2MID,(ipc_cb*)KK_Data_FromMid,NULL,NULL);
......
...@@ -106,6 +106,8 @@ void *TCP_Analyzer(void *pPara) ...@@ -106,6 +106,8 @@ void *TCP_Analyzer(void *pPara)
Size = read(s_ConnInfo[index].socketfd, Buf,sizeof(Buf) ); Size = read(s_ConnInfo[index].socketfd, Buf,sizeof(Buf) );
if (Size <= 0) //没有接收到数据,关闭描述符,释放在TCPServer申请的空间 if (Size <= 0) //没有接收到数据,关闭描述符,释放在TCPServer申请的空间
{ {
printf("Size=%d,errno=%d",Size,errno);
ERROR_PRINT("TCP_Analyzer:remote client close:%d\n",s_ConnInfo[index].socketfd ); ERROR_PRINT("TCP_Analyzer:remote client close:%d\n",s_ConnInfo[index].socketfd );
pthread_mutex_lock(&data_mutex); pthread_mutex_lock(&data_mutex);
close(s_ConnInfo[index].socketfd); close(s_ConnInfo[index].socketfd);
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "kk_data_mng.h" #include "kk_data_mng.h"
#include "kk_newccu_msg.h" #include "kk_newccu_msg.h"
#include "kk_product.h"
...@@ -64,10 +64,64 @@ cJSON * property_report(const char *productCode,const char *deviceCode,const cha ...@@ -64,10 +64,64 @@ cJSON * property_report(const char *productCode,const char *deviceCode,const cha
} }
cJSON *scene_payload_build(const char*method,const char *msgId,cJSON *params)
{
cJSON *payload=cJSON_CreateObject();
cJSON_AddStringToObject(payload, "productCode",KK_CCU_PRODUCTID);
cJSON_AddStringToObject(payload, "deviceCode",KK_CCU_ID);
cJSON_AddStringToObject(payload, "identity","executeScene");
cJSON_AddStringToObject(payload, "msgId",msgId);
cJSON_AddStringToObject(payload, "version",KK_LAN_VERSION);
cJSON_AddStringToObject(payload, "method",method);
cJSON_AddItemToObject(payload,PARAMS_STRING,params);
return payload;
}
cJSON * scene_execute(const char *sceneId)
{
char msgId[32] = {0};
cJSON *root=cJSON_CreateObject();
cJSON *params=cJSON_CreateObject();
cJSON *info,*payload;
printf("[execute scene]sceneId=%s\n",sceneId);
kk_lan_get_msg_id_str(msgId,sizeof(msgId));
cJSON_AddStringToObject(params,"sceneId",sceneId);
info = property_info_build("/thing/service/executeScene",KK_CCU_PRODUCTID,KK_CCU_ID);
payload = scene_payload_build("thing.service.executeScene",msgId,params);
cJSON_AddItemToObject(root,INFO_STRING,info);
cJSON_AddItemToObject(root,PAYLOAD_STRING,payload);
return root;
}
//向midware发送数据
int kk_ipc_send_json(cJSON *root)
{
char *msg;
if(root==NULL){
return -1;
}
msg=cJSON_Print(root);
printf("[lan->midware]json:\n%s\n",msg);
cJSON_Minify(msg);
kk_ipc_send(IPC_APP2MID, msg, strlen(msg)+1);
free(msg);
return 0;
}
......
...@@ -12,6 +12,7 @@ cJSON * property_report(const char *productCode,const char *deviceCode,const cha ...@@ -12,6 +12,7 @@ cJSON * property_report(const char *productCode,const char *deviceCode,const cha
int kk_ipc_send_json(cJSON *root);
......
...@@ -107,8 +107,6 @@ cJSON * val_conver_new2old(cJSON *newccuItem,cJSON *oldccuItem,int syn_type) ...@@ -107,8 +107,6 @@ cJSON * val_conver_new2old(cJSON *newccuItem,cJSON *oldccuItem,int syn_type)
cJSON * n_value = cJSON_GetObjectItem(newccuItem,"value"); cJSON * n_value = cJSON_GetObjectItem(newccuItem,"value");
cJSON *o_dataType; cJSON *o_dataType;
cJSON *val;
cJSON *o_valueRange = cJSON_GetObjectItem(oldccuItem,"valueRange"); cJSON *o_valueRange = cJSON_GetObjectItem(oldccuItem,"valueRange");
cJSON *n_valueRange = cJSON_GetObjectItem(newccuItem,"valueRange"); cJSON *n_valueRange = cJSON_GetObjectItem(newccuItem,"valueRange");
...@@ -118,253 +116,98 @@ cJSON * val_conver_new2old(cJSON *newccuItem,cJSON *oldccuItem,int syn_type) ...@@ -118,253 +116,98 @@ cJSON * val_conver_new2old(cJSON *newccuItem,cJSON *oldccuItem,int syn_type)
}else{ }else{
o_dataType = cJSON_GetObjectItem(oldccuItem,DATATYPE_STRING); o_dataType = cJSON_GetObjectItem(oldccuItem,DATATYPE_STRING);
} }
return ccu_value_convert(n_dataType,n_valueRange,o_dataType,o_valueRange,n_value);
if(strcmp(o_dataType->valuestring,"map")==0){
val = map_type_convert(n_dataType,n_valueRange,n_value,o_valueRange);
}else{
val = msg_convert_value(o_dataType,n_dataType,n_value);
}
return val;
}
typedef struct {
char *area;
char *name;
char *delay;
char *nodeid;
char *operate_type;
char *operation;
char *room_id;
}SCENE_ACTION;
typedef struct{
char *scene_id;
char *name;
char *pannel_id;
char *room_id;
char *time;
char *week;
SCENE_ACTION **act;
int act_num;
}SCENE_BUILD;
cJSON *kk_action_build(SCENE_ACTION *act)
{
cJSON *action = cJSON_CreateObject();
if(act->nodeid==NULL || act->operation==NULL ||
act->operation==NULL ||act->room_id==NULL){
return ;
}
cJSON_AddStringToObject(action, "area",(act->area==NULL)?"":act->area);
cJSON_AddStringToObject(action, "name",(act->name==NULL)?"":act->name);
cJSON_AddStringToObject(action, "delay",(act->delay==NULL)?"0":act->delay);
cJSON_AddStringToObject(action, "nodeid",act->nodeid);
cJSON_AddStringToObject(action, "operate_type",act->operate_type);
cJSON_AddStringToObject(action, "operation",act->operation);
cJSON_AddStringToObject(action, "room_id",act->room_id);
return action;
}
cJSON *kk_actions_build(SCENE_ACTION **act,int num)
{
int i;
cJSON *actions = cJSON_CreateArray();
cJSON *action;
for(i=0;i<num;i++){
action=kk_action_build(act[i]);
cJSON_AddItemToArray(actions,action);
}
return actions;
}
cJSON *kk_scene_build(SCENE_BUILD *content)
{
cJSON *scene = cJSON_CreateObject();
cJSON *actions = kk_actions_build(content->act,content->act_num);
cJSON_AddItemToObject(scene, "actions",actions);
cJSON_AddStringToObject(scene, "id",content->scene_id);
cJSON_AddStringToObject(scene, "name",content->name);
cJSON_AddStringToObject(scene, "pannel_id",(content->pannel_id==NULL)?"*":content->pannel_id);
cJSON_AddStringToObject(scene, "room_id",content->room_id);
cJSON_AddStringToObject(scene, "scene_image","");
cJSON_AddStringToObject(scene, "scene_type","");
if(content->time==NULL){
cJSON_AddStringToObject(scene, "timer_enable","0");
cJSON_AddStringToObject(scene, "time","");
}else{
cJSON_AddStringToObject(scene, "timer_enable","1");
cJSON_AddStringToObject(scene, "time",content->time);
}
cJSON_AddStringToObject(scene, "week",content->week);
return scene;
} }
void kk_scene_build_test(void)
{
cJSON *msg;
SCENE_BUILD scene;
scene.name = calloc(1,20);
memcpy(scene.name,"离家",strlen("离家"));
scene.scene_id = calloc(1,20);
memcpy(scene.scene_id,"123",strlen("123"));
scene.pannel_id= calloc(1,20);
memcpy(scene.pannel_id,"*",strlen("*"));
scene.room_id = calloc(1,20);
memcpy(scene.room_id,"456",strlen("456"));
scene.time = calloc(1,20);
memcpy(scene.time,"",strlen(""));
scene.week = calloc(1,20);
memcpy(scene.week,"",strlen(""));
scene.act_num = 1;
SCENE_ACTION *act = calloc(1,sizeof(SCENE_ACTION)*scene.act_num);
scene.act=&act;
scene.act[0]->area=calloc(1,20);
memcpy(scene.act[0]->area,"",strlen(""));
scene.act[0]->delay=calloc(1,20);
memcpy(scene.act[0]->delay,"",strlen(""));
scene.act[0]->name=calloc(1,20);
memcpy(scene.act[0]->name,"",strlen(""));
scene.act[0]->nodeid=calloc(1,20);
memcpy(scene.act[0]->nodeid,"",strlen(""));
scene.act[0]->operate_type=calloc(1,20);
memcpy(scene.act[0]->operate_type,"",strlen(""));
scene.act[0]->operation=calloc(1,20);
memcpy(scene.act[0]->operation,"",strlen(""));
scene.act[0]->room_id=calloc(1,20);
memcpy(scene.act[0]->room_id,"",strlen(""));
msg = kk_scene_build(&scene);
printf("--------scene--------->\n%s\n",cJSON_Print(msg));
}
cJSON *kk_devicestatus_build(kk_map_dev_node_t *node) cJSON *kk_devicestatus_build(kk_map_dev_node_t *node)
{ {
int i,num = 0;
char nodeid[32] = {0}; char nodeid[32] = {0};
char indxId[4] = {0};
int idx = 1;
int syn_type = 0;
cJSON *newccu,*oldccu;
cJSON *dev_status; cJSON *dev_status;
if (node == NULL) return NULL;
dev_status = cJSON_CreateObject();
kk_map_dev_ctx *ctx = _kk_map_dev_ctx(); kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
#if 1 printf("@@@@kk_devicestatus_build\n");
if (node == NULL ||node->syn_opcode==NULL){
cJSON * newccuItem = node->newccu->child; return NULL;
cJSON * oldccuItem = node->oldccu->child; }
syn_type = node->syn_type;
{ newccu = node->newccu;
cJSON *status = cJSON_CreateObject(); oldccu = node->oldccu;
cJSON *synKey; if(newccu==NULL||newccu->type!=cJSON_Object ||
cJSON *synType; oldccu==NULL||oldccu->type!=cJSON_Object){
return NULL;
}
printf("yyy-1\n"); dev_status = cJSON_CreateObject();
memset(nodeid,0x0,sizeof(nodeid));
printf("yyy-2\n");
kk_creater_nodeid(node->deviceCode,1,nodeid);
printf("yyy-3,%s\n",nodeid);
if(node->syn_opcode){ num = cJSON_GetArraySize(newccu);
cJSON_AddStringToObject(status, OPCODE_STRING, node->syn_opcode); for(i=0;i<num;i++){
} cJSON * newccuItem = cJSON_GetArrayItem(newccu,i);
printf("yyy-4\n"); cJSON * oldccuItem = cJSON_GetArrayItem(oldccu,i);
cJSON_AddNumberToObject(status, NODEID_STRING, atoi(nodeid)); cJSON *synType = cJSON_GetObjectItem(oldccuItem,"synType");
printf("yyy-5\n"); cJSON *synKey = cJSON_GetObjectItem(oldccuItem,"syn");
sprintf(indxId,"%d",idx++); cJSON *val = NULL;
printf("yyy-6\n"); cJSON *status = NULL;
cJSON_AddStringToObject(status, "index", indxId); char indexId[4] = {0};
printf("yyy-7\n");
while(newccuItem != NULL){
//printf("oldccuItem--->%s\n",cJSON_Print(oldccuItem)); if(synType){
if(synType->type!=cJSON_String ||synKey==NULL ||synKey->type!=cJSON_String) {
synType = cJSON_GetObjectItem(oldccuItem,"synType"); continue ;
}
printf("synType->valuestring--->%s\n",synType->valuestring); status = cJSON_CreateObject();
if(strcmp(synType->valuestring,"dummy")){ kk_creater_nodeid(node->deviceCode,1,nodeid);
synKey = cJSON_GetObjectItem(oldccuItem,"syn");
if(strcmp(synType->valuestring,"timing_shutdown")==0) { cJSON_AddStringToObject(status, OPCODE_STRING, node->syn_opcode);
cJSON_AddNumberToObject(status, NODEID_STRING, atoi(nodeid));
cJSON *syn_obj = cJSON_CreateObject(); memset(indexId,0,sizeof(indexId));
snprintf(indexId,sizeof(indexId),"%d",i+1);
cJSON_AddStringToObject(status, "index", indexId);
double t=cJSON_GetObjectItem(newccuItem,"value")->valuedouble; //todo:
char buff[32]={0}; if(strcmp(synType->valuestring,"timing_shutdown")==0) {
cJSON *syn_obj = cJSON_CreateObject();
snprintf(buff,32,"%f",t); double t=cJSON_GetObjectItem(newccuItem,"value")->valuedouble;
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%s\n",buff); char buff[32]={0};
if(t>0){
cJSON_AddBoolToObject(syn_obj, "enable",1);
cJSON_AddStringToObject(syn_obj, "time",buff);
}else{
cJSON_AddBoolToObject(syn_obj, "enable",0);
cJSON_AddNullToObject(syn_obj, "time");
}
cJSON_AddItemToObject(dev_status, synKey->valuestring,syn_obj); snprintf(buff,32,"%f",t);
if(t>0){
cJSON_AddBoolToObject(syn_obj, "enable",1);
cJSON_AddStringToObject(syn_obj, "time",buff);
}else{ }else{
cJSON *val = val_conver_new2old(newccuItem,oldccuItem,1); cJSON_AddBoolToObject(syn_obj, "enable",0);
cJSON_AddNullToObject(syn_obj, "time");
}
if(val){
printf("val--->%s\n",cJSON_Print(val));
printf("val->type=%d,%d,%d\n",val->type,cJSON_String,cJSON_Number);
if(val->type==cJSON_String) {
cJSON_AddStringToObject(dev_status, synKey->valuestring,val->valuestring);
}else if(val->type==cJSON_Number) {
cJSON_AddNumberToObject(dev_status, synKey->valuestring,val->valuedouble);
}else{
cJSON_AddItemToObject(dev_status, synKey->valuestring,val);
}
}
cJSON_AddItemToObject(dev_status, synKey->valuestring,syn_obj);
}else{
if((val = val_conver_new2old(newccuItem,oldccuItem,1))!=NULL){
add_val_to_obj(dev_status,val,synKey->valuestring);
} }
} }
newccuItem = newccuItem->next;
oldccuItem = oldccuItem->next;
} }
} }
#endif
printf("@##$%^&&*(*(((*^%$$#@@@--->%s\n",cJSON_Print(dev_status)); printf("@##$%^&&*(*(((*^%$$#@@@--->%s\n",cJSON_Print(dev_status));
...@@ -372,98 +215,34 @@ cJSON *kk_devicestatus_build(kk_map_dev_node_t *node) ...@@ -372,98 +215,34 @@ cJSON *kk_devicestatus_build(kk_map_dev_node_t *node)
} }
int kk_devicestatus_build_aaa(cJSON *Array,kk_map_dev_node_t *node)
{
char nodeid[32] = {0};
char indxId[4] = {0};
int idx = 1;
cJSON *dev_status;
if (node == NULL) return -1;
kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
cJSON * newccuItem = node->newccu->child;
cJSON * oldccuItem = node->oldccu->child;
while(newccuItem != NULL){
dev_status = cJSON_CreateObject();
memset(nodeid,0x0,sizeof(nodeid));
char *opcodemap = cJSON_GetObjectItem(newccuItem,OPCODEMAP_STRING)->valuestring;
char *channel = cJSON_GetObjectItem(newccuItem,CHANNEL_STRING)->valuestring;
char *dataType = cJSON_GetObjectItem(newccuItem,DATATYPE_STRING)->valuestring;
cJSON *range = cJSON_GetObjectItem(newccuItem,VALUERANGE_STRING);
char *o_dataType = cJSON_GetObjectItem(oldccuItem,DATATYPE_STRING)->valuestring;
printf("identifier=%s\n",cJSON_GetObjectItem(newccuItem,"identifier")->valuestring);
printf("newccuItem=%s\n",cJSON_Print(newccuItem));
kk_creater_nodeid(node->deviceCode,atoi(channel),nodeid);
cJSON_AddStringToObject(dev_status, OPCODE_STRING, opcodemap);
cJSON_AddNumberToObject(dev_status, NODEID_STRING, atoi(nodeid));
sprintf(indxId,"%d",idx++);
cJSON_AddStringToObject(dev_status, "index", indxId);
printf("index=%s,dataType=%s,o_dataType=%s\n",indxId,dataType,o_dataType);
if(strcmp(o_dataType,"string") == 0){
if(strcmp(dataType,"int") == 0 || strcmp(dataType,"double") == 0){
int value = cJSON_GetObjectItem(newccuItem,"value")->valueint;
if(range != NULL){
int index = kk_get_int_value_idx(range,value);
if(index==-1){
index = 0;
}
cJSON * ary=cJSON_GetObjectItem(oldccuItem,"valueRange");
cJSON * def=cJSON_GetArrayItem(ary,index);
cJSON_AddStringToObject(dev_status, "arg",def->valuestring);
printf("yjq=%d\n",index);
}
}else if(strcmp(dataType,"double") == 0){
}
}else if(strcmp(o_dataType,"string_double") == 0){
double value = cJSON_GetObjectItem(newccuItem,"value")->valuedouble;
char *val = double_value_string(value);
cJSON_AddNumberToObject(dev_status, "arg",value);
free(val);
}
cJSON_AddItemToArray(Array,dev_status); static int update_device_status(int nodeId,const char *opcode,const char *arg)
{
cJSON *msg;
char *nodeStr;
if(arg==NULL){
//todo return -1;
newccuItem = newccuItem->next; }
oldccuItem = oldccuItem->next; printf("[%s][%d]nodeId=%d,status=%s\n",__FUNCTION__,__LINE__,nodeId,arg);
if((nodeStr=node_string(nodeId))!=NULL){
msg = old_ccu_msg_build(nodeStr,opcode,"success",arg);
send_msg_to_module(msg);
cJSON_Delete(msg);
free(nodeStr);
return 0;
} }
return 0; return -1;
} }
cJSON * attr_report_conver(const char *deviceCode,kk_map_dev_node_t *devNode,cJSON *params) cJSON * attr_report_conver(const char *deviceCode,kk_map_dev_node_t *devNode,cJSON *params)
{ {
cJSON *root; cJSON *root;
...@@ -494,130 +273,88 @@ cJSON * attr_report_conver(const char *deviceCode,kk_map_dev_node_t *devNode,cJS ...@@ -494,130 +273,88 @@ cJSON * attr_report_conver(const char *deviceCode,kk_map_dev_node_t *devNode,cJS
cJSON *msg; cJSON *msg;
cJSON *args; cJSON *args;
oldccu = devNode->oldccu; oldccu = devNode->oldccu;
newccu = devNode->newccu; newccu = devNode->newccu;
item_size = cJSON_GetArraySize(oldccu); item_size = cJSON_GetArraySize(oldccu);
printf("item_size=%d\n",item_size);
for(i=0;i<item_size;i++){ for(i=0;i<item_size;i++){
o_item = cJSON_GetArrayItem(oldccu,i); o_item = cJSON_GetArrayItem(oldccu,i);
n_item = cJSON_GetArrayItem(newccu,i); n_item = cJSON_GetArrayItem(newccu,i);
o_id_map = cJSON_GetObjectItem(o_item,"identifiermap"); o_id_map = cJSON_GetObjectItem(o_item,"identifiermap");
printf("o_id_map=%s\n",o_id_map->valuestring);
if(o_id_map){
printf("o_id_map=%s\n",cJSON_Print(o_id_map));
}
n_id = cJSON_GetObjectItem(params,o_id_map->valuestring);
printf("[%s][%d]n_id=%s\n",__FUNCTION__,__LINE__,cJSON_Print(n_id));
n_id = cJSON_GetObjectItem(params,o_id_map->valuestring);
if(n_id!=NULL){ if(n_id!=NULL){
if(params){
printf("21-params=%s\n",cJSON_Print(params));
}
n_dataType = cJSON_GetObjectItem(n_item,"dataType"); n_dataType = cJSON_GetObjectItem(n_item,"dataType");
n_valueRange = cJSON_GetObjectItem(n_item,"valueRange"); n_valueRange = cJSON_GetObjectItem(n_item,"valueRange");
o_dataType = cJSON_GetObjectItem(o_item,"dataType"); o_dataType = cJSON_GetObjectItem(o_item,"dataType");
o_valueRange = cJSON_GetObjectItem(o_item,"valueRange"); o_valueRange = cJSON_GetObjectItem(o_item,"valueRange");
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
channel = cJSON_GetObjectItem(o_item,"channel"); channel = cJSON_GetObjectItem(o_item,"channel");
ch = atoi(channel->valuestring); ch = atoi(channel->valuestring);
nodeId = kk_lan_db_node_get(deviceCode,ch); nodeId = kk_lan_db_node_get(deviceCode,ch);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
opcode =cJSON_GetObjectItem(o_item,"opcode"); opcode =cJSON_GetObjectItem(o_item,"opcode");
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("[%s][%d]n_dataType->valuestring=%s,opcode->valuestring=%s\n",__FUNCTION__,__LINE__,n_dataType->valuestring,opcode->valuestring); printf("[%s][%d]n_dataType->valuestring=%s,opcode->valuestring=%s\n",__FUNCTION__,__LINE__,n_dataType->valuestring,opcode->valuestring);
printf("\nn_id->type=%d\n",n_id->type);
//cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateString(""));// //cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateString(""));//
if(n_id->type==cJSON_False){ if(n_id->type==cJSON_False){
printf("[replace] cJSON_False\n");
cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateFalse()); cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateFalse());
}else if(n_id->type==cJSON_True){ }else if(n_id->type==cJSON_True){
printf("[replace] cJSON_True\n");
cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateTrue()); cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateTrue());
}else if(n_id->type==cJSON_NULL){ }else if(n_id->type==cJSON_NULL){
printf("[replace] cJSON_NULL\n");
cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateNull()); cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateNull());
}else if(n_id->type==cJSON_Number){ }else if(n_id->type==cJSON_Number){
printf("[replace] cJSON_Number\n");
if(strcmp(n_dataType->valuestring,"double")==0){ if(strcmp(n_dataType->valuestring,"double")==0){
cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateNumber(n_id->valuedouble)); cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateNumber(n_id->valuedouble));
}else { }else {
cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateNumber(n_id->valueint)); cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateNumber(n_id->valueint));
} }
}else if(n_id->type==cJSON_String){ }else if(n_id->type==cJSON_String){
printf("[replace] cJSON_String\n");
cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateString(n_id->valuestring)); cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateString(n_id->valuestring));
}else if(n_id->type==cJSON_Array){ }else if(n_id->type==cJSON_Array){
//cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateArray(n_id->valuestring));
/*
#define cJSON_Array (1 << 5)
#define cJSON_Object (1 << 6)
#define cJSON_Raw (1 << 7)
*/
printf("......................\n"); printf("......................\n");
} }
//cJSON_ReplaceItemInObject(newccuItem, "value", cJSON_CreateNumber(val));
if((args = ccu_value_convert(n_dataType,n_valueRange,o_dataType,o_valueRange,n_id))!=NULL){
printf("o_dataType=%s\n",o_dataType->valuestring); update_device_status(nodeId,opcode->valuestring,args->valuestring);
//cJSON_Delete(args);
if(strcmp(o_dataType->valuestring,"map")==0){
args = map_type_convert(n_dataType,n_valueRange,n_id,o_valueRange);
}else{
args = msg_convert_value(o_dataType,n_dataType,n_id);
}
if(args){
printf("yy111y,args=%s\n",cJSON_Print(args));
update_device_status_2_oldccu(nodeId,opcode->valuestring,args->valuestring);
}else{
printf("yy111y,args=NULL\n");
} }
} }
} }
printf("yy2222y\n");
if(devNode->syn_type==1){ if(devNode->syn_type==1){
cJSON *arg; cJSON *arg;
char *node_str; char *node_str;
arg = kk_devicestatus_build(devNode); //arg = kk_devicestatus_build(devNode);
printf("yy444y\n"); arg =_kk_sync_devicestatus_arg_build(devNode);
nodeId = kk_lan_db_node_get(deviceCode,1); nodeId = kk_lan_db_node_get(deviceCode,1);
printf("yy555y\n");
node_str=node_string(nodeId); node_str=node_string(nodeId);
printf("yy666y\n");
msg=old_ccu_msg_build_json(node_str,devNode->syn_opcode,NULL,arg); msg=old_ccu_msg_build_json(node_str,devNode->syn_opcode,NULL,arg);
printf("66666666666=%s\n",cJSON_Print(msg));
send_msg_to_module(msg); send_msg_to_module(msg);
free(node_str); free(node_str);
cJSON_Delete(msg); cJSON_Delete(msg);
} }
return root; return root;
} }
...@@ -733,10 +470,41 @@ void property_syn_deal(const char *deviceCode,cJSON *properties) ...@@ -733,10 +470,41 @@ void property_syn_deal(const char *deviceCode,cJSON *properties)
} }
//同步信息
//房间同步
//布防撤防
/*
"0": "离家布防",
"1": "撤防",
"2": "在家布防",
"3": "区域布防"
*/
int arming_status_notify(int type)
{
cJSON *msg = NULL;
printf("[arming status notify] type=%d\n",type);
if(type==0){
msg = old_ccu_msg_build(WILDCARD_CHARACTER_STR,GUARD_STATUS_ARMING_LEAVE_HOME,SUCCESS_STR,WILDCARD_CHARACTER_STR);
}else if(type==1){
msg = old_ccu_msg_build(WILDCARD_CHARACTER_STR,GUARD_STATUS_DISARMING,SUCCESS_STR,WILDCARD_CHARACTER_STR);
}else if(type==2){
msg = old_ccu_msg_build(WILDCARD_CHARACTER_STR,GUARD_STATUS_ARMING_IN_HOME,SUCCESS_STR,WILDCARD_CHARACTER_STR);
}else{
printf("[unkown arming type]!!!\n");
return -1;
}
send_msg_to_module(msg);
cJSON_Delete(msg);
return 0;
}
......
...@@ -12,6 +12,7 @@ int send_msg_to_module(cJSON *root); ...@@ -12,6 +12,7 @@ int send_msg_to_module(cJSON *root);
int arming_status_notify(int type);
......
...@@ -108,7 +108,9 @@ typedef enum { ...@@ -108,7 +108,9 @@ typedef enum {
#define MSG_SCENE_NEGATICE "negativeProperty" #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_SCENE_NAME "name"
#define MSG_SCENE_ROOM_ID "roomId"
#define MSG_SCENE_ROOM_NAME "roomName"
#define MSG_SCENE_SCENCTYPE "sceneType" #define MSG_SCENE_SCENCTYPE "sceneType"
#define MSG_SCENE_ENABLE "enable" #define MSG_SCENE_ENABLE "enable"
#define MSG_SCENE_TRIGGERS "triggers" #define MSG_SCENE_TRIGGERS "triggers"
......
...@@ -103,13 +103,41 @@ int kk_area_init(void) ...@@ -103,13 +103,41 @@ int kk_area_init(void)
} }
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_room_add(const char *name,const char *roomId)
static int kk_check_room_exist(const char *roomId)
{
int isExist = 0;
sqlite3_stmt *stmt;
char *proomId = NULL;
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);
if(!strcmp(proomId,roomId))
{
isExist = 1;
break;
}
}
sqlite3_finalize(stmt);
_kk_area_unlock();
return isExist;
}
static int _kk_room_add(const char *name,const char *roomId)
{ {
int res = 0; int res = 0;
kk_area_ctx_t *ctx = _kk_area_get_ctx(); kk_area_ctx_t *ctx = _kk_area_get_ctx();
char *sqlCmd = NULL; char *sqlCmd = NULL;
char *zErrMsg = 0; char *zErrMsg = 0;
printf("--->kk_room_add,name=%s,roomid=%s\n",name,roomId);
const char *insertCmd = "insert into AreaInfo (name, roomId) \ const char *insertCmd = "insert into AreaInfo (name, roomId) \
values ('%s','%s');"; values ('%s','%s');";
_kk_area_lock(); _kk_area_lock();
...@@ -127,6 +155,65 @@ int kk_room_add(const char *name,const char *roomId) ...@@ -127,6 +155,65 @@ int kk_room_add(const char *name,const char *roomId)
_kk_area_unlock(); _kk_area_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int _kk_room_update(const char *name,const char *roomId)
{
int res = 0;
kk_area_ctx_t *ctx = _kk_area_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
sqlCmd = sqlite3_mprintf("UPDATE AreaInfo SET name='%s' WHERE roomId= '%s'",name,roomId);
_kk_area_lock();
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
//INFO_PRINT("sub device insert data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_area_unlock();
return SUCCESS_RETURN;
}
static int _kk_room_dev_update(const char *name,const char *roomId)
{
int res = 0;
kk_area_ctx_t *ctx = _kk_area_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
sqlCmd = sqlite3_mprintf("UPDATE AreaDevInfo SET roomName='%s' WHERE roomId= '%s'",name,roomId);
_kk_area_lock();
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
//INFO_PRINT("sub device insert data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_area_unlock();
return SUCCESS_RETURN;
}
int kk_room_add(const char *name,const char *roomId)
{
if(kk_check_room_exist(roomId)){
printf("name=%s,room id=%s\n",name,roomId);
_kk_room_dev_update(name,roomId);
_kk_room_update(name,roomId);
return 0;
}else{
return _kk_room_add(name,roomId);
}
}
int kk_room_delete(const char *roomId) int kk_room_delete(const char *roomId)
{ {
int res = 0; int res = 0;
...@@ -153,6 +240,37 @@ int kk_room_delete(const char *roomId) ...@@ -153,6 +240,37 @@ int kk_room_delete(const char *roomId)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_get_device_name(const char* deviceCode,const char *epNum,char *devName,int size)
{
int isGet = 0;
sqlite3_stmt *stmt;
char *pDeviceCode = NULL;
char *pEpNum = NULL;
char *pDevName = NULL;
kk_area_ctx_t *ctx = _kk_area_get_ctx();
const char *searchCmd = "select * from AreaDevInfo;";
_kk_area_lock();
sqlite3_prepare_v2(ctx->pDb, searchCmd, strlen(searchCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
pDeviceCode = (char*)sqlite3_column_text(stmt, DB_DEV_DEVICECODE);
pEpNum = (char*)sqlite3_column_text(stmt, DB_DEV_EPNUM);
if(!strcmp(deviceCode,pDeviceCode) && !strcmp(pEpNum,epNum))
{
pDevName = (char*)sqlite3_column_text(stmt, DB_DEV_DEV_NAME);
memset(devName,0,size);
snprintf(devName,size,"%s",pDevName);
isGet = 1;
}
}
//INFO_PRINT("\n");
sqlite3_finalize(stmt);
_kk_area_unlock();
return isGet;
}
static int _kk_check_dev_exist(const char* deviceCode,const char *epNum) static int _kk_check_dev_exist(const char* deviceCode,const char *epNum)
{ {
int isExist = 0; int isExist = 0;
......
...@@ -29,6 +29,7 @@ int kk_room_dev_remove(const char *deviceCode,const char *epNum); ...@@ -29,6 +29,7 @@ int kk_room_dev_remove(const char *deviceCode,const char *epNum);
int kk_room_device_list_add(const char *deviceCode); int kk_room_device_list_add(const char *deviceCode);
kk_dev_list_t* kk_get_room_deviceCode(const char* roomId); kk_dev_list_t* kk_get_room_deviceCode(const char* roomId);
void kk_free_room_dev_list(void); void kk_free_room_dev_list(void);
int kk_get_device_name(const char* deviceCode,const char *epNum,char *devName,int size);
#endif #endif
...@@ -878,6 +878,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -878,6 +878,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
char *payload_Str = NULL; char *payload_Str = NULL;
cJSON *deviceCode = NULL; cJSON *deviceCode = NULL;
json=cJSON_Parse(data); json=cJSON_Parse(data);
if (json == NULL) { if (json == NULL) {
WARNING_PRINT("Error before: [%s]\n","cJSON_Parse"); WARNING_PRINT("Error before: [%s]\n","cJSON_Parse");
return; return;
......
...@@ -68,29 +68,61 @@ int kk_sync_init(void) ...@@ -68,29 +68,61 @@ int kk_sync_init(void)
ctx->pDb = g_kk_pDb; ctx->pDb = g_kk_pDb;
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int kk_get_rooms_devices(cJSON *roomDevicesArray,char *roomId)
static cJSON * kk_get_room_devices(const char *roomId)
{ {
char *sqlCmd = NULL; const char *selectCmd = "select * from AreaDevInfo WHERE roomId = '%s' and epNum = 1;";
sqlite3_stmt *stmt;
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
char *deviceCode = NULL; char *deviceCode = NULL;
cJSON *deviceObj = NULL;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx(); cJSON *devs = cJSON_CreateArray();
if(roomDevicesArray == NULL || roomId == NULL){ kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
return FAIL_RETURN;
} sqlCmd = sqlite3_mprintf(selectCmd,roomId);
sqlCmd = sqlite3_mprintf("select * from AreaDevInfo where roomId = '%s'",roomId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
deviceObj = cJSON_CreateObject(); cJSON *dev = cJSON_CreateObject();
deviceCode = (char*)sqlite3_column_text(stmt, DB_DEV_DEVICECODE); deviceCode = (char*)sqlite3_column_text(stmt, DB_DEV_DEVICECODE);
cJSON_AddStringToObject(deviceObj, KK_SYNC_DEVICECODE_STR, deviceCode); cJSON_AddStringToObject(dev,KK_SYNC_DEVICECODE_STR,deviceCode);
//cJSON_AddItemToArray(roomDevicesArray,deviceObj); cJSON_AddItemToArray(devs, dev);
} }
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return devs;
}
static cJSON * kk_get_room_sences(const char *roomId)
{
const char *selectCmd = "select * from SceneInfo where roomId = '%s';";
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
char *sceneId = NULL;
cJSON *scenes = cJSON_CreateArray();
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
sqlCmd = sqlite3_mprintf(selectCmd,roomId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *scene = cJSON_CreateObject();
sceneId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENEID);
cJSON_AddStringToObject(scene,KK_SYNC_SCENEID_STR,sceneId);
cJSON_AddItemToArray(scenes, scene);
}
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
return SUCCESS_RETURN;
return scenes;
} }
static int kk_get_rooms_info(cJSON *data) static int kk_get_rooms_info(cJSON *data)
{ {
char *sqlCmd = NULL; char *sqlCmd = NULL;
...@@ -103,31 +135,34 @@ static int kk_get_rooms_info(cJSON *data) ...@@ -103,31 +135,34 @@ static int kk_get_rooms_info(cJSON *data)
return FAIL_RETURN; return FAIL_RETURN;
} }
cJSON *rooms = cJSON_CreateArray(); cJSON *rooms = cJSON_CreateArray();
cJSON *roomItem = cJSON_CreateObject(); cJSON *roomItem = NULL;
cJSON *roomDevicesArray = cJSON_CreateArray(); cJSON *roomDevicesArray = NULL;
cJSON *scenesArray = NULL;
_kk_sync_lock(); _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); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
roomItem = cJSON_CreateObject();
roomId = (char*)sqlite3_column_text(stmt, DB_ROOM_ID); roomId = (char*)sqlite3_column_text(stmt, DB_ROOM_ID);
roomName = (char*)sqlite3_column_text(stmt, DB_ROOM_NAME); roomName = (char*)sqlite3_column_text(stmt, DB_ROOM_NAME);
cJSON_AddStringToObject(roomItem, KK_SYNC_ROOMID_STR, roomId); cJSON_AddStringToObject(roomItem, KK_SYNC_ROOMID_STR, roomId);
cJSON_AddStringToObject(roomItem, KK_SYNC_NANE_STR, roomName); cJSON_AddStringToObject(roomItem, KK_SYNC_NANE_STR, roomName);
kk_get_rooms_devices(roomDevicesArray,roomId);
roomDevicesArray = kk_get_room_devices(roomId);
cJSON_AddItemToObject(roomItem, KK_SYNC_DEVICES_STR, roomDevicesArray);
scenesArray = kk_get_room_sences(roomId);
cJSON_AddItemToObject(roomItem, KK_SYNC_SCENE_STR, scenesArray);
cJSON_AddItemToArray(rooms, roomItem);
} }
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
_kk_sync_unlock(); _kk_sync_unlock();
cJSON_AddItemToObject(roomItem, KK_SYNC_DEVICES_STR, roomDevicesArray);
cJSON *sceneId = cJSON_CreateObject();
cJSON_AddStringToObject(sceneId, KK_SYNC_SCENEID_STR, "sceneId");
cJSON *scenes = cJSON_CreateArray();
cJSON_AddItemToArray(scenes, sceneId);
cJSON_AddItemToObject(roomItem, KK_SYNC_SCENE_STR, scenes);
cJSON_AddItemToArray(rooms, roomItem);
cJSON_AddItemToObject(data, KK_SYNC_ROOMS_STR, rooms); cJSON_AddItemToObject(data, KK_SYNC_ROOMS_STR, rooms);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int kk_get_properties_info(char *deviceCode,cJSON *obj) static int kk_get_properties_info(char *deviceCode,cJSON *obj)
...@@ -185,14 +220,16 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode) ...@@ -185,14 +220,16 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode)
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *subdevicesItem = cJSON_CreateObject(); cJSON *subdevicesItem = cJSON_CreateObject();
char devName[64] = {0};
subDeviceCode = (char*)sqlite3_column_text(stmt, DB_SUB_DEVICECODE); subDeviceCode = (char*)sqlite3_column_text(stmt, DB_SUB_DEVICECODE);
subProductCode = (char*)sqlite3_column_text(stmt, DB_SUB_PRODUCTCODE); subProductCode = (char*)sqlite3_column_text(stmt, DB_SUB_PRODUCTCODE);
subVersion = (char*)sqlite3_column_text(stmt, DB_SUB_VERSION); subVersion = (char*)sqlite3_column_text(stmt, DB_SUB_VERSION);
subIsline = (char*)sqlite3_column_text(stmt, DB_SUB_ONLINE); subIsline = (char*)sqlite3_column_text(stmt, DB_SUB_ONLINE);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_DEVICECODE_STR, subDeviceCode); cJSON_AddStringToObject(subdevicesItem, KK_SYNC_DEVICECODE_STR, subDeviceCode);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_VERSION_STR, subVersion); cJSON_AddStringToObject(subdevicesItem, KK_SYNC_VERSION_STR, subVersion);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_MAC_STR, subDeviceCode); cJSON_AddStringToObject(subdevicesItem, KK_SYNC_MAC_STR, subDeviceCode);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_NANE_STR, "SUBDEV"); 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_AddStringToObject(subdevicesItem, KK_SYNC_ONLINE_STR, subIsline);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_PRODUCTCODE_STR, subProductCode); cJSON_AddStringToObject(subdevicesItem, KK_SYNC_PRODUCTCODE_STR, subProductCode);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_SN_STR, ""); cJSON_AddStringToObject(subdevicesItem, KK_SYNC_SN_STR, "");
...@@ -261,7 +298,35 @@ static int kk_get_devices_info(cJSON *data) ...@@ -261,7 +298,35 @@ static int kk_get_devices_info(cJSON *data)
cJSON_AddItemToObject(data, KK_SYNC_DEVICES_STR, gwdevices); cJSON_AddItemToObject(data, KK_SYNC_DEVICES_STR, gwdevices);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int kk_get_scenes_actions_info(cJSON *actionArray )
int kk_get_room_name_by_scene_id(int scene_id,char *room_name)
{
int res = -1;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
int dbepNum = 0;
char *roomNameStr =NULL;
const char *selectCmd = "select * from SceneInfo WHERE sceneId = '%d';";
_kk_scene_lock();
sqlCmd = sqlite3_mprintf(selectCmd,scene_id);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
roomNameStr = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_ROOMID);
memcpy(room_name,roomNameStr,strlen(roomNameStr));
res = 0;
break;
}
sqlite3_finalize(stmt);
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return res;
}
static int kk_get_scenes_actions_info(cJSON *actionArray,int id)
{ {
char *sqlCmd = NULL; char *sqlCmd = NULL;
//char *zErrMsg = 0; //char *zErrMsg = 0;
...@@ -269,8 +334,10 @@ static int kk_get_scenes_actions_info(cJSON *actionArray ) ...@@ -269,8 +334,10 @@ static int kk_get_scenes_actions_info(cJSON *actionArray )
char *deviceCode = NULL; char *deviceCode = NULL;
char *propertyName = NULL; char *propertyName = NULL;
char *propertyValue = NULL; char *propertyValue = NULL;
char room_name[64] = {0};
char *type = NULL; char *type = NULL;
int delay = 0,epNum = 0; int delay = 0,epNum = 0,scene_id=0;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx(); kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(actionArray == NULL){ if(actionArray == NULL){
return FAIL_RETURN; return FAIL_RETURN;
...@@ -278,20 +345,31 @@ static int kk_get_scenes_actions_info(cJSON *actionArray ) ...@@ -278,20 +345,31 @@ static int kk_get_scenes_actions_info(cJSON *actionArray )
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo"); sqlCmd = sqlite3_mprintf("select * from SceneActionInfo");
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *actionItem = cJSON_CreateObject(); cJSON *actionItem;
scene_id = sqlite3_column_int(stmt, DB_SCENEACTION_SCENEID);
if(id!=scene_id){
continue ;
}
deviceCode = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_DEVICECODE); deviceCode = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_DEVICECODE);
delay = sqlite3_column_int(stmt, DB_SCENEACTION_DELAY); delay = sqlite3_column_int(stmt, DB_SCENEACTION_DELAY);
epNum = sqlite3_column_int(stmt, DB_SCENEACTION_EPNUM); epNum = sqlite3_column_int(stmt, DB_SCENEACTION_EPNUM);
propertyName = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_PROPERTYNAME); propertyName = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_PROPERTYNAME);
propertyValue = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_PROPERTYVALUE); propertyValue = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_PROPERTYVALUE);
type = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_TYPE); type = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_TYPE);
kk_get_room_name_by_scene_id(scene_id,room_name);
actionItem = cJSON_CreateObject();
cJSON_AddStringToObject(actionItem, KK_SYNC_DEVICECODE_STR, deviceCode); cJSON_AddStringToObject(actionItem, KK_SYNC_DEVICECODE_STR, deviceCode);
cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_DELAY_STR, delay); cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_DELAY_STR, delay);
cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, epNum); cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYNAME_STR, propertyName); cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYNAME_STR, propertyName);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_TYPE_STR, type); cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_TYPE_STR, type);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue); cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue);
cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, ""); cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, room_name);
cJSON_AddItemToArray(actionArray, actionItem); cJSON_AddItemToArray(actionArray, actionItem);
} }
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
...@@ -383,7 +461,7 @@ static int kk_get_scenes_info(cJSON *data) ...@@ -383,7 +461,7 @@ static int kk_get_scenes_info(cJSON *data)
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *sceneArrayItem = cJSON_CreateObject(); cJSON *sceneArrayItem = cJSON_CreateObject();
enable = sqlite3_column_int(stmt, DB_SCENEINFO_ENABLE); enable = sqlite3_column_int(stmt, DB_SCENEINFO_ENABLE);
if(enable == 1){ if(enable == 1){
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENE_ENABLE_STR, "启动"); cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENE_ENABLE_STR, "启动");
}else{ }else{
...@@ -392,12 +470,12 @@ static int kk_get_scenes_info(cJSON *data) ...@@ -392,12 +470,12 @@ static int kk_get_scenes_info(cJSON *data)
} }
type = sqlite3_column_int(stmt, DB_SCENEINFO_SCENETYPE); type = sqlite3_column_int(stmt, DB_SCENEINFO_SCENETYPE);
cJSON_AddNumberToObject(sceneArrayItem, KK_SYNC_SCENE_SCENETYPE_STR, type); cJSON_AddNumberToObject(sceneArrayItem, KK_SYNC_SCENE_SCENETYPE_STR, type);
name = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_NAME); name = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENENAME);
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_NANE_STR, name); cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_NANE_STR, name);
sceneId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENEID); sceneId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENEID);
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENEID_STR, sceneId); cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENEID_STR, sceneId);
cJSON *actionArray = cJSON_CreateArray(); cJSON *actionArray = cJSON_CreateArray();
kk_get_scenes_actions_info(actionArray); kk_get_scenes_actions_info(actionArray,atoi(sceneId));
cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_ACTIONS_STR, actionArray); cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_ACTIONS_STR, actionArray);
cJSON *triggerArray = cJSON_CreateArray(); cJSON *triggerArray = cJSON_CreateArray();
kk_get_scenes_trigger_info(triggerArray,sceneId); kk_get_scenes_trigger_info(triggerArray,sceneId);
...@@ -463,11 +541,17 @@ char *kk_sync_get_info() ...@@ -463,11 +541,17 @@ char *kk_sync_get_info()
cJSON_AddStringToObject(root,KK_SYNC_CODE_STR,"0"); cJSON_AddStringToObject(root,KK_SYNC_CODE_STR,"0");
cJSON *data = cJSON_CreateObject(); cJSON *data = cJSON_CreateObject();
cJSON_AddItemToObject(root, KK_SYNC_DATA_STR, data); cJSON_AddItemToObject(root, KK_SYNC_DATA_STR, data);
kk_get_rooms_info(data); kk_get_rooms_info(data);
kk_get_devices_info(data); kk_get_devices_info(data);
kk_get_scenes_info(data); kk_get_scenes_info(data);
HAL_Get_ccuid(ccu_deviceCode);
HAL_GetDevice_Code(ccu_deviceCode);
HAL_GetProduct_Code(ccu_productCode); HAL_GetProduct_Code(ccu_productCode);
HAL_GetVersion(version); HAL_GetVersion(version);
cJSON_AddStringToObject(data, KK_SYNC_DEVICECODE_STR,ccu_deviceCode); cJSON_AddStringToObject(data, KK_SYNC_DEVICECODE_STR,ccu_deviceCode);
cJSON_AddStringToObject(data, KK_SYNC_NANE_STR, "newccu"); cJSON_AddStringToObject(data, KK_SYNC_NANE_STR, "newccu");
......
...@@ -47,7 +47,8 @@ int kk_scene_db_init(void) ...@@ -47,7 +47,8 @@ int kk_scene_db_init(void)
INFO_PRINT("scene db Database opened\n"); INFO_PRINT("scene db Database opened\n");
const char *pSceneTable = "CREATE TABLE IF NOT EXISTS SceneInfo( \ const char *pSceneTable = "CREATE TABLE IF NOT EXISTS SceneInfo( \
name varchar(255), \ roomId varchar(255), \
sceneName varchar(255), \
sceneType INTEGER, \ sceneType INTEGER, \
enable INTEGER, \ enable INTEGER, \
sceneId varchar(255) UNIQUE)"; sceneId varchar(255) UNIQUE)";
...@@ -207,18 +208,18 @@ int kk_scene_update_scene_enable(int enable,const char *sceneId) ...@@ -207,18 +208,18 @@ int kk_scene_update_scene_enable(int enable,const char *sceneId)
*其他说明: *其他说明:
*************************************************************/ *************************************************************/
int kk_scene_insert_scene_info(const char* name,int sceneType,int enable,const char* sceneId) int kk_scene_insert_scene_info(const char* roomId,const char* sceneName,int sceneType,int enable,const char* sceneId)
{ {
int res = 0; int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL; char *sqlCmd = NULL;
char *zErrMsg = 0; char *zErrMsg = 0;
const char *insertCmd = "insert into SceneInfo (name, sceneType,enable,sceneId) \ const char *insertCmd = "insert into SceneInfo (roomId,sceneName, sceneType,enable,sceneId) \
values ('%s','%d','%d','%s');"; values ('%s','%s','%d','%d','%s');";
_kk_scene_lock(); _kk_scene_lock();
sqlCmd = sqlite3_mprintf(insertCmd,name,sceneType,enable,sceneId); sqlCmd = sqlite3_mprintf(insertCmd,roomId,sceneName,sceneType,enable,sceneId);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){ if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg); ERROR_PRINT("SQL error: %s\n", zErrMsg);
...@@ -494,7 +495,7 @@ int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epN ...@@ -494,7 +495,7 @@ int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epN
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL; char *sqlCmd = NULL;
char *zErrMsg = 0; char *zErrMsg = 0;
printf("----->kk_scene_insert_scene_action\n");
const char *insertCmd = "insert into SceneActionInfo (type, deviceCode,epNum,propertyName,propertyValue,delay,sceneId,gwdeviceCode) \ const char *insertCmd = "insert into SceneActionInfo (type, deviceCode,epNum,propertyName,propertyValue,delay,sceneId,gwdeviceCode) \
values ('%s','%s','%d','%s','%s','%d','%s','%s');"; values ('%s','%s','%d','%s','%s','%d','%s','%s');";
......
...@@ -10,7 +10,8 @@ enum{ ...@@ -10,7 +10,8 @@ enum{
}; };
enum{ enum{
DB_SCENEINFO_NAME = 0, DB_SCENEINFO_ROOMID = 0,
DB_SCENEINFO_SCENENAME,
DB_SCENEINFO_SCENETYPE, DB_SCENEINFO_SCENETYPE,
DB_SCENEINFO_ENABLE, DB_SCENEINFO_ENABLE,
DB_SCENEINFO_SCENEID, DB_SCENEINFO_SCENEID,
...@@ -83,7 +84,7 @@ int kk_scene_insert_scene_condition(const char* type,int startTime,int endTime,i ...@@ -83,7 +84,7 @@ int kk_scene_insert_scene_condition(const char* type,int startTime,int endTime,i
char repeat_days,const char* sceneId); char repeat_days,const char* sceneId);
int kk_scene_insert_scene_trigger(const char* type,const char* deviceCode,int epNum,const char* propertyName, int kk_scene_insert_scene_trigger(const char* type,const char* deviceCode,int epNum,const char* propertyName,
const char* compareType,const char* compareValue,const char* sceneId,int isAnd); const char* compareType,const char* compareValue,const char* sceneId,int isAnd);
int kk_scene_insert_scene_info(const char* name,int sceneType,int enable,const char* sceneId); int kk_scene_insert_scene_info(const char* roomName,const char* name,int sceneType,int enable,const char* sceneId);
int kk_scene_update_scene_enable(int enable,const char *sceneId); int kk_scene_update_scene_enable(int enable,const char *sceneId);
int kk_scene_db_init(void); int kk_scene_db_init(void);
#endif #endif
...@@ -582,6 +582,7 @@ static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,cons ...@@ -582,6 +582,7 @@ static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,cons
cJSON *deviceCode,*epNum; cJSON *deviceCode,*epNum;
cJSON *propertyName,*compareType; cJSON *propertyName,*compareType;
cJSON *compareValue; cJSON *compareValue;
int ep;
if(type == NULL || item == NULL || sceneId == NULL){ if(type == NULL || item == NULL || sceneId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
...@@ -589,15 +590,22 @@ static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,cons ...@@ -589,15 +590,22 @@ static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,cons
if(deviceCode == NULL) return FAIL_RETURN; if(deviceCode == NULL) return FAIL_RETURN;
epNum = cJSON_GetObjectItem(item,MSG_SCENE_EPNUM); epNum = cJSON_GetObjectItem(item,MSG_SCENE_EPNUM);
if(epNum == NULL){ if(epNum == NULL){
epNum = cJSON_CreateNumber(1); ep = 1;
}else{
if(epNum->type==cJSON_Number){
ep = epNum->valueint;
}else{
ep = atoi(epNum->valuestring);
}
} }
propertyName = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYNAME); propertyName = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYNAME);
if(propertyName == NULL) return FAIL_RETURN; if(propertyName == NULL) return FAIL_RETURN;
compareType = cJSON_GetObjectItem(item,MSG_SCENE_COMPARETYPE); compareType = cJSON_GetObjectItem(item,MSG_SCENE_COMPARETYPE);
if(compareType == NULL) return FAIL_RETURN; if(compareType == NULL) return FAIL_RETURN;
compareValue = cJSON_GetObjectItem(item,MSG_SCENE_COMPAREVALUE); compareValue = cJSON_GetObjectItem(item,MSG_SCENE_COMPAREVALUE);
if(compareValue == NULL) return FAIL_RETURN; if(compareValue == NULL) return FAIL_RETURN;
res = kk_scene_insert_scene_trigger(type,deviceCode->valuestring,epNum->valueint, res = kk_scene_insert_scene_trigger(type,deviceCode->valuestring,ep,
propertyName->valuestring,compareType->valuestring,compareValue->valuestring,sceneId,isAnd); propertyName->valuestring,compareType->valuestring,compareValue->valuestring,sceneId,isAnd);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_scene_parse_scene_trigger fail!!!\n"); ERROR_PRINT("kk_scene_parse_scene_trigger fail!!!\n");
...@@ -890,6 +898,7 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat ...@@ -890,6 +898,7 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
cJSON *deviceCode; cJSON *deviceCode;
cJSON *epNum; cJSON *epNum;
int iepnum; int iepnum;
char propertyValueStr[64] = {0};
printf("----->kk_scene_parse_scene_action\r\n"); printf("----->kk_scene_parse_scene_action\r\n");
...@@ -942,7 +951,11 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat ...@@ -942,7 +951,11 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
if(epNum == NULL){ if(epNum == NULL){
iepnum = 1; iepnum = 1;
}else{ }else{
iepnum = epNum->valueint; if(epNum->type==cJSON_Number){
iepnum = epNum->valueint;
}else{
iepnum = atoi(epNum->valuestring);
}
} }
delay = cJSON_GetObjectItem(item,MSG_SCENE_DELAY); delay = cJSON_GetObjectItem(item,MSG_SCENE_DELAY);
if(delay == NULL) return FAIL_RETURN; if(delay == NULL) return FAIL_RETURN;
...@@ -963,10 +976,10 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat ...@@ -963,10 +976,10 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
memcpy(info.propertyName,propertyName->valuestring,strlen(propertyName->valuestring)); memcpy(info.propertyName,propertyName->valuestring,strlen(propertyName->valuestring));
if(propertyValue->type==cJSON_Number){ if(propertyValue->type==cJSON_Number){
char temp[64] = {0};
snprintf(temp,64,"%d",propertyValue->valueint); snprintf(propertyValueStr,64,"%d",propertyValue->valueint);
memcpy(info.propertyValue,temp,strlen(temp)); memcpy(info.propertyValue,propertyValueStr,strlen(propertyValueStr));
}else{ }else{
memcpy(info.propertyValue,propertyValue->valuestring,strlen(propertyValue->valuestring)); memcpy(info.propertyValue,propertyValue->valuestring,strlen(propertyValue->valuestring));
} }
...@@ -980,7 +993,7 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat ...@@ -980,7 +993,7 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
} }
res = kk_scene_insert_scene_action(type->valuestring,node->deviceCode,iepnum, res = kk_scene_insert_scene_action(type->valuestring,node->deviceCode,iepnum,
propertyName->valuestring,propertyValue->valuestring,idelay,sceneId,node->fatherDeviceCode); propertyName->valuestring,propertyValueStr,idelay,sceneId,node->fatherDeviceCode);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
INFO_PRINT("kk_scene_insert_scene_action fail!!!\n"); INFO_PRINT("kk_scene_insert_scene_action fail!!!\n");
...@@ -1069,7 +1082,9 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c ...@@ -1069,7 +1082,9 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c
ERROR_PRINT("[%d]kk_scene_parse_addscene fail!!!\n",__LINE__); ERROR_PRINT("[%d]kk_scene_parse_addscene fail!!!\n",__LINE__);
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *name = cJSON_GetObjectItem(args,MSG_SCENE_NAME); cJSON *room_id = cJSON_GetObjectItem(args,MSG_SCENE_ROOM_ID);
if(room_id == NULL) return FAIL_RETURN;
cJSON *name = cJSON_GetObjectItem(args,MSG_SCENE_SCENE_NAME);
if(name == NULL) return FAIL_RETURN; if(name == NULL) return FAIL_RETURN;
cJSON *sceneType = cJSON_GetObjectItem(args,MSG_SCENE_SCENCTYPE); cJSON *sceneType = cJSON_GetObjectItem(args,MSG_SCENE_SCENCTYPE);
if(sceneType == NULL) return FAIL_RETURN; if(sceneType == NULL) return FAIL_RETURN;
...@@ -1089,7 +1104,9 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c ...@@ -1089,7 +1104,9 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c
kk_scene_parse_scene_muticontrol(args,sceneId,isUpdate); kk_scene_parse_scene_muticontrol(args,sceneId,isUpdate);
} }
else{ else{
res = kk_scene_insert_scene_info(name->valuestring,sceneType->valueint,enable->valueint,sceneId); char roomIdStr[32] = {0};
snprintf(roomIdStr,32,"%d",room_id->valueint);
res = kk_scene_insert_scene_info(roomIdStr,name->valuestring,sceneType->valueint,enable->valueint,sceneId);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
INFO_PRINT("kk_scene_insert_scene_info fail!!!\n"); INFO_PRINT("kk_scene_insert_scene_info fail!!!\n");
return res; return res;
......
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