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)
cJSON *rlt = NULL;
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);
crt = &convert_table[0];
for(i=0;i<size;i++,crt++){
if(strcmp(d_type->valuestring,crt->type)==0) {
if(crt->func){
rlt = crt->func(value,s_type);
}
break;
}
}
......@@ -277,10 +279,6 @@ cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON
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++){
if(strcmp(s_dataType->valuestring,"dummy")==0){
continue ;
......@@ -304,18 +302,18 @@ cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON
break ;
}
}else if(strstr(s_dataType->valuestring,"map")){
printf("rlt=%d\n",rlt->type);
if(rlt->type==cJSON_String){
printf("111111\n");
if(strcmp(rlt->valuestring,value->valuestring)==0){
printf("22222\n");
args = cJSON_GetArrayItem(d_valueRange,j);
break ;
}
}else if(rlt->type==cJSON_Number){
printf("44444\n");
if(rlt->valueint == value->valueint) {
printf("33333\n");
args = cJSON_GetArrayItem(d_valueRange,j);
break ;
}
......@@ -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 @@
#include "kk_data_mng.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 @@
#define SWITCH_ARG_ON "ON"
#define SWITCH_ARG_OFF "OFF"
#define HJ_SERVER "HJ_Server"
#define HJ_PROFILE "HJ_Profile"
#define SUCCESS_STATUS_STR "success"
......@@ -33,13 +60,19 @@
#define KK_LAN_VERSION "1.0.0"
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);
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
......
This diff is collapsed.
......@@ -5,5 +5,6 @@
#include "cJSON.h"
#include "kk_product.h"
int kk_data_handle(cJSON *json,int sockfd);
void kk_handle_sync_info(void);
void KK_Data_FromMid(void* str,int len);
#endif
\ No newline at end of file
This diff is collapsed.
......@@ -28,12 +28,12 @@ typedef struct {
struct list_head dev_list;
} 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_devices_to_sdk(cJSON *root);
int _deviceCode_switchto_mac(char * deviceCode,char *mac);
int mac_switchto_deviceCode(char *mac,char * deviceCode);
kk_map_dev_ctx *_kk_map_dev_ctx(void);
int kk_map_dev_init(void);
#endif
\ No newline at end of file
......@@ -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)
{
......@@ -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 *val;
......@@ -89,6 +54,7 @@ cJSON * ctrl_conver(kk_map_dev_node_t *devNode,int nodeId,cJSON *arg,cJSON *opco
cJSON *o_valueRange;
cJSON *n_identifier;
cJSON *epNum;
int pos;
int channel;
......@@ -118,18 +84,17 @@ cJSON * ctrl_conver(kk_map_dev_node_t *devNode,int nodeId,cJSON *arg,cJSON *opco
n_dataType = cJSON_GetObjectItem(newccuItem,"dataType");
n_valueRange = cJSON_GetObjectItem(newccuItem,"valueRange");
n_identifier = cJSON_GetObjectItem(newccuItem,"identifier");
epNum = cJSON_GetObjectItem(newccuItem,"channel");
printf("1111\n");
if(strcmp(o_dataType->valuestring,"map")==0){
printf("2222\n");
val = map_type_convert(o_dataType,o_valueRange,arg,n_valueRange);
}else{
printf("3333\n");
val = msg_convert_value(o_dataType,n_dataType,arg);
}
printf("4444-->%d\n",val->type);
printf("----------->epNum=%s\n",epNum->valuestring);
cJSON_AddStringToObject(params,"epNum",epNum->valuestring);
if(val->type==cJSON_False){
cJSON_AddFalseToObject(params,n_identifier->valuestring);
}else if(val->type==cJSON_True){
......@@ -144,73 +109,16 @@ cJSON * ctrl_conver(kk_map_dev_node_t *devNode,int nodeId,cJSON *arg,cJSON *opco
printf("......................\n");
}
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;
......@@ -226,31 +134,44 @@ int opcode_switch(cJSON *root)
nodeId = cJSON_GetObjectItem(root,NODEID_STR);
opcode = cJSON_GetObjectItem(root,OPCODE_STR);
arg = cJSON_GetObjectItem(root,ARG_STR);
requester= cJSON_GetObjectItem(root,REQUEST_STR);
if(opcode==NULL||opcode->type!=cJSON_String){
return -1;
}
if(nodeId==NULL||opcode==NULL||arg==NULL ){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
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);
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){
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);
kk_ipc_send_json(msg);
}else{
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
WARNING_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
}
}
......@@ -261,6 +182,11 @@ int opcode_switch(cJSON *root)
char *node_string(int nodeId)
{
char *node = (char *)malloc(33);
......@@ -270,39 +196,12 @@ char *node_string(int nodeId)
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[])
int rc = 0;
char *ppp;
open("kk_lan",LOG_PID,LOG_USER);
kk_lan_ccuid_init();
ttttt_test();
kk_scene_build_test();
/*set the callback to get the device date to cloud*/
kk_ipc_init(IPC_APP2MID,(ipc_cb*)KK_Data_FromMid,NULL,NULL);
......
......@@ -106,6 +106,8 @@ void *TCP_Analyzer(void *pPara)
Size = read(s_ConnInfo[index].socketfd, Buf,sizeof(Buf) );
if (Size <= 0) //没有接收到数据,关闭描述符,释放在TCPServer申请的空间
{
printf("Size=%d,errno=%d",Size,errno);
ERROR_PRINT("TCP_Analyzer:remote client close:%d\n",s_ConnInfo[index].socketfd );
pthread_mutex_lock(&data_mutex);
close(s_ConnInfo[index].socketfd);
......
......@@ -10,7 +10,7 @@
#include "kk_data_mng.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
}
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
int kk_ipc_send_json(cJSON *root);
......
This diff is collapsed.
......@@ -12,6 +12,7 @@ int send_msg_to_module(cJSON *root);
int arming_status_notify(int type);
......
......@@ -108,7 +108,9 @@ typedef enum {
#define MSG_SCENE_NEGATICE "negativeProperty"
#define MSG_SCENE_SUPPORT "sceneSupport"
#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_ENABLE "enable"
#define MSG_SCENE_TRIGGERS "triggers"
......
......@@ -103,13 +103,41 @@ int kk_area_init(void)
}
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;
kk_area_ctx_t *ctx = _kk_area_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
printf("--->kk_room_add,name=%s,roomid=%s\n",name,roomId);
const char *insertCmd = "insert into AreaInfo (name, roomId) \
values ('%s','%s');";
_kk_area_lock();
......@@ -127,6 +155,65 @@ int kk_room_add(const char *name,const char *roomId)
_kk_area_unlock();
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 res = 0;
......@@ -153,6 +240,37 @@ int kk_room_delete(const char *roomId)
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)
{
int isExist = 0;
......
......@@ -29,6 +29,7 @@ int kk_room_dev_remove(const char *deviceCode,const char *epNum);
int kk_room_device_list_add(const char *deviceCode);
kk_dev_list_t* kk_get_room_deviceCode(const char* roomId);
void kk_free_room_dev_list(void);
int kk_get_device_name(const char* deviceCode,const char *epNum,char *devName,int size);
#endif
......@@ -878,6 +878,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
char *payload_Str = NULL;
cJSON *deviceCode = NULL;
json=cJSON_Parse(data);
if (json == NULL) {
WARNING_PRINT("Error before: [%s]\n","cJSON_Parse");
return;
......
......@@ -68,29 +68,61 @@ int kk_sync_init(void)
ctx->pDb = g_kk_pDb;
return SUCCESS_RETURN;
}
static int kk_get_rooms_devices(cJSON *roomDevicesArray,char *roomId)
static cJSON * kk_get_room_devices(const char *roomId)
{
const char *selectCmd = "select * from AreaDevInfo WHERE roomId = '%s' and epNum = 1;";
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
char *deviceCode = NULL;
cJSON *deviceObj = NULL;
cJSON *devs = cJSON_CreateArray();
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(roomDevicesArray == NULL || roomId == NULL){
return FAIL_RETURN;
}
sqlCmd = sqlite3_mprintf("select * from AreaDevInfo where roomId = '%s'",roomId);
sqlCmd = sqlite3_mprintf(selectCmd,roomId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
deviceObj = cJSON_CreateObject();
cJSON *dev = cJSON_CreateObject();
deviceCode = (char*)sqlite3_column_text(stmt, DB_DEV_DEVICECODE);
cJSON_AddStringToObject(deviceObj, KK_SYNC_DEVICECODE_STR, deviceCode);
//cJSON_AddItemToArray(roomDevicesArray,deviceObj);
cJSON_AddStringToObject(dev,KK_SYNC_DEVICECODE_STR,deviceCode);
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_finalize(stmt);
return SUCCESS_RETURN;
return scenes;
}
static int kk_get_rooms_info(cJSON *data)
{
char *sqlCmd = NULL;
......@@ -103,31 +135,34 @@ static int kk_get_rooms_info(cJSON *data)
return FAIL_RETURN;
}
cJSON *rooms = cJSON_CreateArray();
cJSON *roomItem = cJSON_CreateObject();
cJSON *roomDevicesArray = cJSON_CreateArray();
cJSON *roomItem = NULL;
cJSON *roomDevicesArray = NULL;
cJSON *scenesArray = NULL;
_kk_sync_lock();
sqlCmd = sqlite3_mprintf("select * from AreaInfo");
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
roomItem = cJSON_CreateObject();
roomId = (char*)sqlite3_column_text(stmt, DB_ROOM_ID);
roomName = (char*)sqlite3_column_text(stmt, DB_ROOM_NAME);
cJSON_AddStringToObject(roomItem, KK_SYNC_ROOMID_STR, roomId);
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_finalize(stmt);
_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);
return SUCCESS_RETURN;
}
static int kk_get_properties_info(char *deviceCode,cJSON *obj)
......@@ -185,6 +220,7 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode)
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *subdevicesItem = cJSON_CreateObject();
char devName[64] = {0};
subDeviceCode = (char*)sqlite3_column_text(stmt, DB_SUB_DEVICECODE);
subProductCode = (char*)sqlite3_column_text(stmt, DB_SUB_PRODUCTCODE);
subVersion = (char*)sqlite3_column_text(stmt, DB_SUB_VERSION);
......@@ -192,7 +228,8 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode)
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_DEVICECODE_STR, subDeviceCode);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_VERSION_STR, subVersion);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_MAC_STR, subDeviceCode);
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_PRODUCTCODE_STR, subProductCode);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_SN_STR, "");
......@@ -261,7 +298,35 @@ static int kk_get_devices_info(cJSON *data)
cJSON_AddItemToObject(data, KK_SYNC_DEVICES_STR, gwdevices);
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 *zErrMsg = 0;
......@@ -269,8 +334,10 @@ static int kk_get_scenes_actions_info(cJSON *actionArray )
char *deviceCode = NULL;
char *propertyName = NULL;
char *propertyValue = NULL;
char room_name[64] = {0};
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();
if(actionArray == NULL){
return FAIL_RETURN;
......@@ -278,20 +345,31 @@ static int kk_get_scenes_actions_info(cJSON *actionArray )
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo");
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
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);
delay = sqlite3_column_int(stmt, DB_SCENEACTION_DELAY);
epNum = sqlite3_column_int(stmt, DB_SCENEACTION_EPNUM);
propertyName = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_PROPERTYNAME);
propertyValue = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_PROPERTYVALUE);
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_AddNumberToObject(actionItem, KK_SYNC_SCENE_DELAY_STR, delay);
cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYNAME_STR, propertyName);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_TYPE_STR, type);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue);
cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, "");
cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, room_name);
cJSON_AddItemToArray(actionArray, actionItem);
}
sqlite3_free(sqlCmd);
......@@ -392,12 +470,12 @@ static int kk_get_scenes_info(cJSON *data)
}
type = sqlite3_column_int(stmt, DB_SCENEINFO_SCENETYPE);
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);
sceneId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENEID);
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENEID_STR, sceneId);
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 *triggerArray = cJSON_CreateArray();
kk_get_scenes_trigger_info(triggerArray,sceneId);
......@@ -463,11 +541,17 @@ char *kk_sync_get_info()
cJSON_AddStringToObject(root,KK_SYNC_CODE_STR,"0");
cJSON *data = cJSON_CreateObject();
cJSON_AddItemToObject(root, KK_SYNC_DATA_STR, data);
kk_get_rooms_info(data);
kk_get_devices_info(data);
kk_get_scenes_info(data);
HAL_Get_ccuid(ccu_deviceCode);
HAL_GetDevice_Code(ccu_deviceCode);
HAL_GetProduct_Code(ccu_productCode);
HAL_GetVersion(version);
cJSON_AddStringToObject(data, KK_SYNC_DEVICECODE_STR,ccu_deviceCode);
cJSON_AddStringToObject(data, KK_SYNC_NANE_STR, "newccu");
......
......@@ -47,7 +47,8 @@ int kk_scene_db_init(void)
INFO_PRINT("scene db Database opened\n");
const char *pSceneTable = "CREATE TABLE IF NOT EXISTS SceneInfo( \
name varchar(255), \
roomId varchar(255), \
sceneName varchar(255), \
sceneType INTEGER, \
enable INTEGER, \
sceneId varchar(255) UNIQUE)";
......@@ -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;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
const char *insertCmd = "insert into SceneInfo (name, sceneType,enable,sceneId) \
values ('%s','%d','%d','%s');";
const char *insertCmd = "insert into SceneInfo (roomId,sceneName, sceneType,enable,sceneId) \
values ('%s','%s','%d','%d','%s');";
_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);
if( res != SQLITE_OK ){
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
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
printf("----->kk_scene_insert_scene_action\n");
const char *insertCmd = "insert into SceneActionInfo (type, deviceCode,epNum,propertyName,propertyValue,delay,sceneId,gwdeviceCode) \
values ('%s','%s','%d','%s','%s','%d','%s','%s');";
......
......@@ -10,7 +10,8 @@ enum{
};
enum{
DB_SCENEINFO_NAME = 0,
DB_SCENEINFO_ROOMID = 0,
DB_SCENEINFO_SCENENAME,
DB_SCENEINFO_SCENETYPE,
DB_SCENEINFO_ENABLE,
DB_SCENEINFO_SCENEID,
......@@ -83,7 +84,7 @@ int kk_scene_insert_scene_condition(const char* type,int startTime,int endTime,i
char repeat_days,const char* sceneId);
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);
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_db_init(void);
#endif
......@@ -582,6 +582,7 @@ static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,cons
cJSON *deviceCode,*epNum;
cJSON *propertyName,*compareType;
cJSON *compareValue;
int ep;
if(type == NULL || item == NULL || sceneId == NULL){
return INVALID_PARAMETER;
}
......@@ -589,15 +590,22 @@ static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,cons
if(deviceCode == NULL) return FAIL_RETURN;
epNum = cJSON_GetObjectItem(item,MSG_SCENE_EPNUM);
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);
if(propertyName == NULL) return FAIL_RETURN;
compareType = cJSON_GetObjectItem(item,MSG_SCENE_COMPARETYPE);
if(compareType == NULL) return FAIL_RETURN;
compareValue = cJSON_GetObjectItem(item,MSG_SCENE_COMPAREVALUE);
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);
if(res != SUCCESS_RETURN){
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
cJSON *deviceCode;
cJSON *epNum;
int iepnum;
char propertyValueStr[64] = {0};
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
if(epNum == NULL){
iepnum = 1;
}else{
if(epNum->type==cJSON_Number){
iepnum = epNum->valueint;
}else{
iepnum = atoi(epNum->valuestring);
}
}
delay = cJSON_GetObjectItem(item,MSG_SCENE_DELAY);
if(delay == NULL) return FAIL_RETURN;
......@@ -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));
if(propertyValue->type==cJSON_Number){
char temp[64] = {0};
snprintf(temp,64,"%d",propertyValue->valueint);
memcpy(info.propertyValue,temp,strlen(temp));
snprintf(propertyValueStr,64,"%d",propertyValue->valueint);
memcpy(info.propertyValue,propertyValueStr,strlen(propertyValueStr));
}else{
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
}
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){
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
ERROR_PRINT("[%d]kk_scene_parse_addscene fail!!!\n",__LINE__);
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;
cJSON *sceneType = cJSON_GetObjectItem(args,MSG_SCENE_SCENCTYPE);
if(sceneType == NULL) return FAIL_RETURN;
......@@ -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);
}
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){
INFO_PRINT("kk_scene_insert_scene_info fail!!!\n");
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