Commit 7af7906d authored by chen.weican's avatar chen.weican

【修改内容】调整网关与主机的通讯协议,并统一格式。

【提交人】陈伟灿
parent f54206d2
...@@ -44,9 +44,11 @@ int _kk_sendto_cloud(cJSON *root) ...@@ -44,9 +44,11 @@ int _kk_sendto_cloud(cJSON *root)
free(topic); free(topic);
return -1; return -1;
} }
INFO_PRINT("[%s][%d] payload:%s\n",__FUNCTION__,__LINE__,pData->valuestring); char* out=cJSON_Print(pData);
KK_MQTT_SendMsg(topic,(const char*)pData->valuestring); INFO_PRINT("[%s][%d] payload:%s\n",__FUNCTION__,__LINE__,out);
KK_MQTT_SendMsg(topic,(const char*)out);
free(topic); free(topic);
free(out);
return 0; return 0;
} }
...@@ -190,8 +192,10 @@ static char * _kk_data_create(const char *topic,const char *data) ...@@ -190,8 +192,10 @@ static char * _kk_data_create(const char *topic,const char *data)
snprintf(infoStr,infoStr_len,DM_MSG_TO_MIDDWARE,msgStr,productType,productCode,deviceCode); snprintf(infoStr,infoStr_len,DM_MSG_TO_MIDDWARE,msgStr,productType,productCode,deviceCode);
root=cJSON_CreateObject(); root=cJSON_CreateObject();
cJSON_AddStringToObject(root,MSG_INFO_STR,infoStr); cJSON* infoObj = cJSON_Parse(infoStr);
cJSON_AddStringToObject(root,MSG_PAYLOAD_STR,data); cJSON* payloadObj = cJSON_Parse(data);
cJSON_AddItemToObject(root, MSG_INFO_STR, infoObj);
cJSON_AddItemToObject(root, MSG_PAYLOAD_STR,payloadObj);
out=cJSON_Print(root); out=cJSON_Print(root);
cJSON_Delete(root); cJSON_Delete(root);
free(msgStr); free(msgStr);
...@@ -230,8 +234,10 @@ int KK_Send_CloudState(int state) ...@@ -230,8 +234,10 @@ int KK_Send_CloudState(int state)
snprintf(payloadStr,payloadStr_len,DM_MSG_CLOUDSTATE,state); snprintf(payloadStr,payloadStr_len,DM_MSG_CLOUDSTATE,state);
root=cJSON_CreateObject(); root=cJSON_CreateObject();
cJSON_AddStringToObject(root,MSG_INFO_STR,infoStr); cJSON* infoObj = cJSON_Parse(infoStr);
cJSON_AddStringToObject(root,MSG_PAYLOAD_STR,payloadStr); cJSON* payloadObj = cJSON_Parse(payloadStr);
cJSON_AddItemToObject(root, MSG_INFO_STR, infoObj);
cJSON_AddItemToObject(root, MSG_PAYLOAD_STR,payloadObj);
out=cJSON_Print(root); out=cJSON_Print(root);
kk_ipc_send(IPC_APP2MID, out, strlen(out)+1); kk_ipc_send(IPC_APP2MID, out, strlen(out)+1);
cJSON_Delete(root); cJSON_Delete(root);
......
...@@ -151,19 +151,24 @@ static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code, ...@@ -151,19 +151,24 @@ static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code,
char* KK_Make_Topic(cJSON *info) char* KK_Make_Topic(cJSON *info)
{ {
cJSON *type,*product_code,*device_code,*root; cJSON *type,*product_code,*device_code;
char *topic = NULL; char *topic = NULL;
root=cJSON_Parse((char*)info->valuestring); //root=cJSON_Parse((char*)info->valuestring);
type = cJSON_GetObjectItem(root, MSG_TYPE_STR); type = cJSON_GetObjectItem(info, MSG_TYPE_STR);
if(type == NULL){ if(type == NULL){
goto errorreturn; goto errorreturn;
} }
product_code = cJSON_GetObjectItem(root, MSG_PRODUCT_CODE_STR); #if 0 //just for test
if(strstr(type->valuestring,"/thing/topo/add") != NULL){
KK_MQTT_SubTopic("/sys/kk/2/1122334455667788/#");
}
#endif
product_code = cJSON_GetObjectItem(info, MSG_PRODUCT_CODE_STR);
if(product_code == NULL){ if(product_code == NULL){
goto errorreturn; goto errorreturn;
} }
device_code = cJSON_GetObjectItem(root, MSG_DEVICE_CODE_STR); device_code = cJSON_GetObjectItem(info, MSG_DEVICE_CODE_STR);
if(device_code == NULL){ if(device_code == NULL){
goto errorreturn; goto errorreturn;
} }
...@@ -257,10 +262,8 @@ char* KK_Make_Topic(cJSON *info) ...@@ -257,10 +262,8 @@ char* KK_Make_Topic(cJSON *info)
} }
#endif #endif
INFO_PRINT("[%s][%d] TOPIC:%s\n",__FUNCTION__,__LINE__,topic); INFO_PRINT("[%s][%d] TOPIC:%s\n",__FUNCTION__,__LINE__,topic);
cJSON_Delete(root);
return topic; return topic;
errorreturn: errorreturn:
cJSON_Delete(root);
return NULL; return NULL;
} }
......
...@@ -13,13 +13,14 @@ const char DM_MSG_INFO[] DM_READ_ONLY = "{\"msgtype\":\"%s\",\"productType\":\"% ...@@ -13,13 +13,14 @@ const char DM_MSG_INFO[] DM_READ_ONLY = "{\"msgtype\":\"%s\",\"productType\":\"%
void kk_sendData2app(void *info, void *payload){ void kk_sendData2app(void *info, void *payload){
cJSON *root=cJSON_CreateObject(); cJSON *root=cJSON_CreateObject();
cJSON_AddStringToObject(root, "info", info); cJSON* infoObj = cJSON_Parse(info);
cJSON_AddStringToObject(root, "payload", payload); cJSON* payloadObj = cJSON_Parse(payload);
cJSON_AddItemToObject(root, "info", infoObj);
cJSON_AddItemToObject(root, "payload",payloadObj);
void *buf = cJSON_Print(root); void *buf = cJSON_Print(root);
kk_ipc_send(IPC_MID2APP, buf, strlen(buf) + 1); kk_ipc_send(IPC_MID2APP, buf, strlen(buf) + 1);
free(buf); free(buf);
cJSON_Delete(root); cJSON_Delete(root);
} }
const char DM_MSG_THING_SUB_REGISTER_METHOD[] = "thing.sub.register"; const char DM_MSG_THING_SUB_REGISTER_METHOD[] = "thing.sub.register";
......
...@@ -230,24 +230,25 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -230,24 +230,25 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
char *out; char *out;
int res = 0; int res = 0;
cJSON *json; cJSON *json;
cJSON *info_root,*info; cJSON *info_root;
cJSON *payload,*typeJson; cJSON *payload,*typeJson;
char *payload_Str = 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;
} }
info_root = cJSON_GetObjectItem(json, MSG_INFO_STR); info_root = cJSON_GetObjectItem(json, MSG_INFO_STR);
info = cJSON_Parse(info_root->valuestring); typeJson = cJSON_GetObjectItem(info_root, MSG_TYPE_STR);
typeJson = cJSON_GetObjectItem(info, MSG_TYPE_STR);
payload = cJSON_GetObjectItem(json, MSG_PAYLOAD_STR); payload = cJSON_GetObjectItem(json, MSG_PAYLOAD_STR);
payload_Str = cJSON_Print(payload);
if (strstr(typeJson->valuestring,KK_REGISTER_TOPIC_REPLY)){ if (strstr(typeJson->valuestring,KK_REGISTER_TOPIC_REPLY)){
//====todo====== //====todo======
//get devicececret and save it //get devicececret and save it
INFO_PRINT(" topic:register_reply \n"); INFO_PRINT(" topic:register_reply \n");
dm_msg_response_payload_t response; dm_msg_response_payload_t response;
res = dm_msg_response_parse((char *)payload->valuestring, strlen(payload->valuestring)+1, &response); res = dm_msg_response_parse((char *)payload_Str, strlen(payload->valuestring)+1, &response);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
goto directReturn; goto directReturn;
} }
...@@ -261,7 +262,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -261,7 +262,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
// //
INFO_PRINT(" topic:add_reply \n"); INFO_PRINT(" topic:add_reply \n");
dm_msg_response_payload_t response; dm_msg_response_payload_t response;
res = dm_msg_response_parse((char *)payload->valuestring, strlen(payload->valuestring)+1, &response); res = dm_msg_response_parse((char *)payload_Str, strlen(payload->valuestring)+1, &response);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
goto directReturn; goto directReturn;
} }
...@@ -275,7 +276,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -275,7 +276,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
// //
INFO_PRINT(" topic:login_reply \n"); INFO_PRINT(" topic:login_reply \n");
dm_msg_response_payload_t response; dm_msg_response_payload_t response;
res = dm_msg_response_parse((char *)payload->valuestring, strlen(payload->valuestring)+1, &response); res = dm_msg_response_parse((char *)payload_Str, strlen(payload->valuestring)+1, &response);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
goto directReturn; goto directReturn;
} }
...@@ -285,13 +286,12 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -285,13 +286,12 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
_iotx_linkkit_upstream_mutex_unlock(); _iotx_linkkit_upstream_mutex_unlock();
}else if (strstr(typeJson->valuestring,KK_THING_SERVICE_PROPERTY_SET)){ }else if (strstr(typeJson->valuestring,KK_THING_SERVICE_PROPERTY_SET)){
INFO_PRINT("property set \n"); INFO_PRINT("property set \n");
cJSON *deviceCode = cJSON_GetObjectItem(info, MSG_DEVICE_CODE_STR); cJSON *deviceCode = cJSON_GetObjectItem(info_root, MSG_DEVICE_CODE_STR);
dm_msg_thing_property_set_reply(deviceCode->valuestring,payload->valuestring, strlen(payload->valuestring), NULL); dm_msg_thing_property_set_reply(deviceCode->valuestring,payload_Str, strlen(payload_Str), NULL);
//kk_tsl_service_property_set(topic->valuestring, payload->valuestring, strlen(payload->valuestring), NULL); //kk_tsl_service_property_set(topic->valuestring, payload->valuestring, strlen(payload->valuestring), NULL);
}else if (strstr(typeJson->valuestring,KK_THING_CLOUDSTATE_MSG)){ }else if (strstr(typeJson->valuestring,KK_THING_CLOUDSTATE_MSG)){
INFO_PRINT("cloud state notify \n"); INFO_PRINT("cloud state notify \n");
cJSON *payloadStr = cJSON_Parse(payload->valuestring); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *paramStr = cJSON_GetObjectItem(payloadStr, MSG_PARAMS_STR);
cJSON *state = cJSON_GetObjectItem(paramStr, "IOTCloudState"); cJSON *state = cJSON_GetObjectItem(paramStr, "IOTCloudState");
int state_int = atoi(state->valuestring); int state_int = atoi(state->valuestring);
res = kk_tsl_set_value(kk_tsl_set_property_value,0,KK_TSL_CCU_WANSTATE_IDENTIFIER,&state_int,NULL); res = kk_tsl_set_value(kk_tsl_set_property_value,0,KK_TSL_CCU_WANSTATE_IDENTIFIER,&state_int,NULL);
...@@ -304,7 +304,6 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -304,7 +304,6 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
{ {
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res); ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
} }
cJSON_Delete(payloadStr);
}else if (strstr(typeJson->valuestring,KK_THING_OTA_DEVICE_UPGRADE)){ }else if (strstr(typeJson->valuestring,KK_THING_OTA_DEVICE_UPGRADE)){
INFO_PRINT("ota upgrade... \n"); INFO_PRINT("ota upgrade... \n");
kk_dm_ota_send(data, strlen(data)+1); kk_dm_ota_send(data, strlen(data)+1);
...@@ -315,8 +314,8 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -315,8 +314,8 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
} }
directReturn: directReturn:
free(payload_Str);
cJSON_Delete(json); cJSON_Delete(json);
cJSON_Delete(info);
......
...@@ -33,7 +33,8 @@ char * g_filerToPlatTable[] = ...@@ -33,7 +33,8 @@ char * g_filerToPlatTable[] =
static int _kk_filter_to_plat(const char* msgtype) static int _kk_filter_to_plat(const char* msgtype)
{ {
int i = 0,num = 0; int i = 0,num = 0;
num = sizeof(g_filerToPlatTable); num = sizeof(g_filerToPlatTable)/sizeof(char *);
for(i =0; i < num; i++){ for(i =0; i < num; i++){
if(strstr(msgtype,g_filerToPlatTable[i])) if(strstr(msgtype,g_filerToPlatTable[i]))
{ {
...@@ -66,19 +67,19 @@ void mid_cb(void* data, int len){ ...@@ -66,19 +67,19 @@ void mid_cb(void* data, int len){
else else
{ {
info_root = cJSON_GetObjectItem(json, MSG_INFO_STR); info_root = cJSON_GetObjectItem(json, MSG_INFO_STR);
info = cJSON_Parse(info_root->valuestring); deviceCode = cJSON_GetObjectItem(info_root, MSG_DEVICE_CODE_STR);
deviceCode = cJSON_GetObjectItem(info, MSG_DEVICE_CODE_STR); type = cJSON_GetObjectItem(info_root, MSG_TYPE_STR);
type = cJSON_GetObjectItem(info, MSG_TYPE_STR);
if(_kk_filter_to_plat(type->valuestring)){ if(_kk_filter_to_plat(type->valuestring)){
cJSON_Delete(json); cJSON_Delete(json);
cJSON_Delete(info); cJSON_Delete(info);
return; return;
} }
int DevType = dm_mgr_get_deviceType_by_mac(deviceCode->valuestring); int devType = 0;
if(DevType == KK_DM_DEVICE_GATEWAY){ dm_mgr_get_deviceType_by_mac(deviceCode->valuestring,&devType);
if(devType == KK_DM_DEVICE_GATEWAY){
kk_ipc_send_ex(IPC_MID2PLAT, data, strlen(data), deviceCode->valuestring);//send to gw itself kk_ipc_send_ex(IPC_MID2PLAT, data, strlen(data), deviceCode->valuestring);//send to gw itself
}else if(DevType == KK_DM_DEVICE_SUBDEV){ }else if(devType == KK_DM_DEVICE_SUBDEV){
dm_mgr_dev_node_t *gw_node = NULL; dm_mgr_dev_node_t *gw_node = NULL;
res = dm_mgr_get_device_by_mac(deviceCode->valuestring,&gw_node); res = dm_mgr_get_device_by_mac(deviceCode->valuestring,&gw_node);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
......
...@@ -28,32 +28,6 @@ typedef enum { ...@@ -28,32 +28,6 @@ typedef enum {
IPC_UNDEF IPC_UNDEF
} ipc_type; } ipc_type;
typedef enum{
/******MIDDWARE TO APP**************/
MSG_REGISTER = 0,
MSG_UNREGISTER,
MSG_TOPOADD,
MSG_TOPODELETE,
MSG_TOPOGET,
MSG_LISTFOUND,
MSG_LOGIN,
MSG_LOGOUT,
MSG_PROPERTYPOST,
MSG_EVENTPOST,
MSG_SERVICERESPONSE,
MSG_SETREPLY,
MSG_OTA_PROCESS,
MSG_OTA_INFORM,
/*******APP TO MIDDWARE**************/
MSG_REGISTER_REPLY,
MSG_TOPOADD_REPLY,
MSG_OFFLINE_REPLY,
MSG_LOGIN_REPLY,
MSG_PROPERTYSET,
MSG_OTA_UPGRADE,
MSG_INVALID,
}kk_msg_type_t;
#define MSG_TYPE_STR "msgtype" #define MSG_TYPE_STR "msgtype"
#define MSG_PRODUCT_TYPE_STR "productType" #define MSG_PRODUCT_TYPE_STR "productType"
......
...@@ -105,15 +105,14 @@ int kk_tsl_init(void) ...@@ -105,15 +105,14 @@ int kk_tsl_init(void)
//kk_test(); //kk_test();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_sub_tsl_add(EmberEUI64 device_mac,const char *product_type) int kk_sub_tsl_add(EmberEUI64 device_mac,const char *productCode)
{ {
sub_dev_node_t *node = NULL; sub_dev_node_t *node = NULL;
kk_sub_dev_ctx_t *ctx = _sub_dev_get_ctx(); kk_sub_dev_ctx_t *ctx = _sub_dev_get_ctx();
char name[TSL_PATH_MAXLEN] = {0};
char *tsl_str = NULL; char *tsl_str = NULL;
int res = 0; int res = 0;
char macString[19] = {0}; char macString[19] = {0};
if(product_type == NULL) if(productCode == NULL)
{ {
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
...@@ -128,7 +127,7 @@ int kk_sub_tsl_add(EmberEUI64 device_mac,const char *product_type) ...@@ -128,7 +127,7 @@ int kk_sub_tsl_add(EmberEUI64 device_mac,const char *product_type)
_sub_dev_mutex_lock(); _sub_dev_mutex_lock();
memset(node,0,sizeof(sub_dev_node_t) ); memset(node,0,sizeof(sub_dev_node_t) );
memcpy(node->device_mac, macString, strlen(macString)); memcpy(node->device_mac, macString, strlen(macString));
memcpy(node->product_type, product_type, strlen(product_type)); memcpy(node->productCode, productCode, strlen(productCode));
node->devid = _sub_tsl_next_devid(); node->devid = _sub_tsl_next_devid();
INIT_LIST_HEAD(&node->linked_list); INIT_LIST_HEAD(&node->linked_list);
...@@ -162,7 +161,7 @@ const char DM_MSG_REQUEST[] = "{\"LightStatus\":\"1\"}"; ...@@ -162,7 +161,7 @@ const char DM_MSG_REQUEST[] = "{\"LightStatus\":\"1\"}";
int kk_test(void) int kk_test(void)
{ {
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_test_fuc("112233445566",DM_MSG_REQUEST); //kk_test_fuc("112233445566",DM_MSG_REQUEST);
//kk_get_Identity_Num(0); //kk_get_Identity_Num(0);
return 0; return 0;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
typedef struct { typedef struct {
int devid; int devid;
char product_type[PRODUCT_KEY_MAXLEN]; char productCode[PRODUCT_TYPE_MAXLEN];
char device_mac[DEVICE_MAC_MAXLEN]; char device_mac[DEVICE_MAC_MAXLEN];
struct list_head linked_list; struct list_head linked_list;
} sub_dev_node_t; } sub_dev_node_t;
......
...@@ -4,33 +4,44 @@ ...@@ -4,33 +4,44 @@
extern kk_tsl_zigbee_map_t g_tsl_zigbee_map []; extern kk_tsl_zigbee_map_t g_tsl_zigbee_map [];
static void kk_rpc_send_message(cJSON *data,char *method,EmberEUI64 mac) static void kk_rpc_send_message(cJSON *data,char *msgtype,char *method,EmberEUI64 mac)
{ {
static uint16_t msgid; static uint16_t msgid;
cJSON *item = rpc_cJSON_CreateObject();
char msgIdString[10]; char msgIdString[10];
sprintf(msgIdString,"%d",++msgid);
rpc_cJSON_AddStringToObject(item, "msgId",msgIdString);
rpc_cJSON_AddStringToObject(item, "version", KK_IPC_VERSION);
if(mac!=NULL){
rpc_cJSON_AddMACToObject(item,mac);
}
rpc_cJSON_AddStringToObject(item, "method",method);
rpc_cJSON_AddItemToObject(item, "params", data); cJSON *info = rpc_cJSON_CreateObject();
if(info != NULL){
rpc_cJSON_AddStringToObject(info, "msgType",msgtype);
rpc_cJSON_AddStringToObject(info, "productCode","");
rpc_cJSON_AddStringToObject(info, "deviceCode","");
}
cJSON *payload = rpc_cJSON_CreateObject();
if(payload != NULL){
sprintf(msgIdString,"%d",++msgid);
rpc_cJSON_AddStringToObject(payload, "msgId",msgIdString);
rpc_cJSON_AddStringToObject(payload, "version", KK_IPC_VERSION);
rpc_cJSON_AddStringToObject(payload, "method",method);
rpc_cJSON_AddItemToObject(payload, "params", data);
}
cJSON *root = rpc_cJSON_CreateObject();
if(root != NULL){
rpc_cJSON_AddItemToObject(root, "info", info);
rpc_cJSON_AddItemToObject(root, "payload", payload);
}
char* p = rpc_cJSON_Print(item); char* p = rpc_cJSON_Print(root);
emberAfAppPrintln("send json:\n%s\n",p); emberAfAppPrintln("send json:\n%s\n",p);
free(p); free(p);
jrpc_send_msg(item); jrpc_send_msg(root);
rpc_cJSON_Delete(root);
} }
void kk_rpc_report_devices(cJSON *data,EmberEUI64 mac) void kk_rpc_report_devices(cJSON *data,EmberEUI64 mac)
{ {
kk_rpc_send_message(data,KK_REPORT_DEVICE_JOINED_METHOD,mac); kk_rpc_send_message(data,KK_REPORT_DEVICE_JOINED_TYPE,KK_REPORT_DEVICE_JOINED_METHOD,mac);
} }
void kk_rpc_report_status(cJSON *data,EmberEUI64 mac) void kk_rpc_report_status(cJSON *data,EmberEUI64 mac)
{ {
kk_rpc_send_message(data,KK_REPORT_ATTRIBUTE_METHOD,mac); kk_rpc_send_message(data,KK_REPORT_ATTRIBUTE_TYPE,KK_REPORT_ATTRIBUTE_METHOD,mac);
} }
typedef struct{ typedef struct{
...@@ -53,9 +64,9 @@ void kk_rpc_reportDevices(kk_report_device_s device) ...@@ -53,9 +64,9 @@ void kk_rpc_reportDevices(kk_report_device_s device)
rpc_cJSON_AddAppVersionToObject(devicesJson,device.AppVersion); rpc_cJSON_AddAppVersionToObject(devicesJson,device.AppVersion);
rpc_cJSON_AddStringToObject(devicesJson, "deviceType","1"); rpc_cJSON_AddStringToObject(devicesJson, "deviceType","1");
rpc_cJSON_AddStringToObject(devicesJson, "deviceCode","2"); rpc_cJSON_AddStringToObject(devicesJson, "deviceCode","2");
rpc_cJSON_AddStringToObject(devicesJson, "productType",PRODUCT_TYPE); rpc_cJSON_AddStringToObject(devicesJson, "productType",TEST_PRODUCT_CODE);
rpc_cJSON_AddStringToObject(devicesJson, "productCode","4"); rpc_cJSON_AddStringToObject(devicesJson, "productCode","4");
kk_sub_tsl_add(device.mac,PRODUCT_TYPE); kk_sub_tsl_add(device.mac,TEST_PRODUCT_CODE);
kk_rpc_report_devices(devicesJson,device.mac); kk_rpc_report_devices(devicesJson,device.mac);
} }
int kk_rpc_report_LightStatus(EmberEUI64 mac,int status,uint16_t clusterId,uint16_t attributeId) int kk_rpc_report_LightStatus(EmberEUI64 mac,int status,uint16_t clusterId,uint16_t attributeId)
...@@ -78,7 +89,7 @@ int kk_rpc_report_LightStatus(EmberEUI64 mac,int status,uint16_t clusterId,uint1 ...@@ -78,7 +89,7 @@ int kk_rpc_report_LightStatus(EmberEUI64 mac,int status,uint16_t clusterId,uint1
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1; return -1;
} }
pCtrlIdx = kk_find_ctrl_obj(node->product_type); pCtrlIdx = kk_find_ctrl_obj(node->productCode);
if(pCtrlIdx == -1){ if(pCtrlIdx == -1){
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1; return -1;
...@@ -143,7 +154,7 @@ error_return: ...@@ -143,7 +154,7 @@ error_return:
} }
#if 0
int kk_test_fuc(char *mac,const char *params) int kk_test_fuc(char *mac,const char *params)
{ {
sub_dev_node_t *node = NULL; sub_dev_node_t *node = NULL;
...@@ -191,6 +202,7 @@ int kk_test_fuc(char *mac,const char *params) ...@@ -191,6 +202,7 @@ int kk_test_fuc(char *mac,const char *params)
return 0; return 0;
} }
#endif
cJSON *rpc_read_attribue(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac) cJSON *rpc_read_attribue(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac)
{ {
rpc_nwk_info_s info; rpc_nwk_info_s info;
...@@ -210,7 +222,7 @@ cJSON *rpc_read_attribue(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac ...@@ -210,7 +222,7 @@ cJSON *rpc_read_attribue(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac
goto error_return; goto error_return;
} }
pCtrlIdx = kk_find_ctrl_obj(node->product_type); pCtrlIdx = kk_find_ctrl_obj(node->productCode);
if(pCtrlIdx < SUCCESS_RETURN){ if(pCtrlIdx < SUCCESS_RETURN){
goto error_return; goto error_return;
} }
...@@ -260,7 +272,7 @@ cJSON *rpc_Control(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac) ...@@ -260,7 +272,7 @@ cJSON *rpc_Control(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac)
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS); set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
goto error_return; goto error_return;
} }
pCtrlIdx = kk_find_ctrl_obj(node->product_type); pCtrlIdx = kk_find_ctrl_obj(node->productCode);
if(pCtrlIdx == -1){ if(pCtrlIdx == -1){
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS); set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
......
...@@ -5,13 +5,16 @@ ...@@ -5,13 +5,16 @@
#include "network-creator-security.h" #include "network-creator-security.h"
#include "RPC_API.h" #include "RPC_API.h"
#define KK_REPORT_DEVICE_JOINED_TYPE "/thing/topo/add"
#define KK_REPORT_ATTRIBUTE_TYPE "/thing/service/property/report"
#define KK_IPC_VERSION "1.0" #define KK_IPC_VERSION "1.0"
#define KK_REPORT_DEVICE_JOINED_METHOD "thing.topo.add" #define KK_REPORT_DEVICE_JOINED_METHOD "thing.topo.add"
#define KK_REPORT_DEVICE_LEAVE_METHOD "thing.topo.leave" #define KK_REPORT_DEVICE_LEAVE_METHOD "thing.topo.leave"
#define KK_REPORT_ATTRIBUTE_METHOD "thing.service.property.report" #define KK_REPORT_ATTRIBUTE_METHOD "thing.service.property.report"
#define KK_READ_ATTRIBUTE_METHOD "thing.service.property.get" #define KK_READ_ATTRIBUTE_METHOD "thing.service.property.get"
#define PRODUCT_TYPE "3" #define TEST_PRODUCT_CODE "24"
cJSON *rpc_Control(jrpc_context * ctx, cJSON * params, cJSON *id,cJSON *mac); cJSON *rpc_Control(jrpc_context * ctx, cJSON * params, cJSON *id,cJSON *mac);
...@@ -21,9 +24,9 @@ int lightStatusSet(jrpc_context * ctx,const char *mac,void* data); ...@@ -21,9 +24,9 @@ int lightStatusSet(jrpc_context * ctx,const char *mac,void* data);
#define RPC_KK_TEST_FUNCTION_TABLE \ #define RPC_KK_TEST_FUNCTION_TABLE \
{(rpc_function*)rpc_Control,"thing.service.property.set"},\ {(rpc_function*)rpc_Control,"/thing/service/property/set"},\
{(rpc_function*)rpc_Control,KK_READ_ATTRIBUTE_METHOD},\ {(rpc_function*)rpc_Control,KK_READ_ATTRIBUTE_METHOD},\
{(rpc_function*)rpc_nwkPermitJoin,"thing.service.NetChannelState.set"} {(rpc_function*)rpc_nwkPermitJoin,"/thing/service/NetChannelState/set"}
......
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
kk_tsl_zigbee_map_t g_tsl_zigbee_map [] = { kk_tsl_zigbee_map_t g_tsl_zigbee_map [] = {
{ {
PRODUCT_TYPE, TEST_PRODUCT_CODE,
3, 3,
{ {
{KK_TSL_DATA_TYPE_TEXT,"LightStatus",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID}, {KK_TSL_DATA_TYPE_TEXT,"OperationMode",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
{KK_TSL_DATA_TYPE_TEXT,"LightAdjustLevel",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID}, {KK_TSL_DATA_TYPE_TEXT,"WorkMode",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
{KK_TSL_DATA_TYPE_TEXT,"LightAlias",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID}, {KK_TSL_DATA_TYPE_TEXT,"Position",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
} }
}, },
{ {
...@@ -24,13 +24,13 @@ kk_tsl_zigbee_map_t g_tsl_zigbee_map [] = { ...@@ -24,13 +24,13 @@ kk_tsl_zigbee_map_t g_tsl_zigbee_map [] = {
}; };
int kk_find_ctrl_obj(const char *product_type) int kk_find_ctrl_obj(const char *productCode)
{ {
int map_num = sizeof(g_tsl_zigbee_map) / sizeof(kk_tsl_zigbee_map_t); int map_num = sizeof(g_tsl_zigbee_map) / sizeof(kk_tsl_zigbee_map_t);
int index = 0; int index = 0;
for(index = 0;index < map_num; index++) for(index = 0;index < map_num; index++)
{ {
if(!strcmp(product_type,g_tsl_zigbee_map[index].product_type)) if(!strcmp(productCode,g_tsl_zigbee_map[index].productCode))
{ {
return index; return index;
} }
......
...@@ -18,7 +18,7 @@ typedef struct{ ...@@ -18,7 +18,7 @@ typedef struct{
}kk_zigbee_ctrl_map_t; }kk_zigbee_ctrl_map_t;
typedef struct{ typedef struct{
char *product_type; char *productCode;
int num; int num;
kk_zigbee_ctrl_map_t zigbee_ctrl[PROPERTIES_MAX_NUM]; kk_zigbee_ctrl_map_t zigbee_ctrl[PROPERTIES_MAX_NUM];
}kk_tsl_zigbee_map_t; }kk_tsl_zigbee_map_t;
......
...@@ -55,7 +55,6 @@ void rpcInterfaceParse(void) ...@@ -55,7 +55,6 @@ void rpcInterfaceParse(void)
emberAfAppPrint("i=%d,%s\r\n",i,rpc_table[i].name); emberAfAppPrint("i=%d,%s\r\n",i,rpc_table[i].name);
jrpc_register_procedure(&my_server, rpc_table[i].func, rpc_table[i].name, NULL ); jrpc_register_procedure(&my_server, rpc_table[i].func, rpc_table[i].name, NULL );
} }
jrpc_server_run(&my_server); jrpc_server_run(&my_server);
jrpc_server_destroy(&my_server); jrpc_server_destroy(&my_server);
...@@ -90,18 +89,31 @@ cJSON * test_func(jrpc_context * ctx, cJSON * params, cJSON *id) { ...@@ -90,18 +89,31 @@ cJSON * test_func(jrpc_context * ctx, cJSON * params, cJSON *id) {
static int send_result_resp(cJSON * result, static int send_result_resp(cJSON * result,
cJSON * id) { cJSON * id) {
int return_value = 0; int return_value = 0;
cJSON *info_root = rpc_cJSON_CreateObject();
if(info_root){
rpc_cJSON_AddStringToObject(info_root, "msgType", "");
rpc_cJSON_AddStringToObject(info_root, "productType", "");
rpc_cJSON_AddStringToObject(info_root, "productCode", "");
rpc_cJSON_AddStringToObject(info_root, "deviceCode", "");
}
cJSON *payload_root = rpc_cJSON_CreateObject();
if(payload_root){
rpc_cJSON_AddItemToObject(payload_root, "msgId", id);
rpc_cJSON_AddItemToObject(payload_root, "code", result);
rpc_cJSON_AddStringToObject(payload_root, "data", "{}");
}
cJSON *result_root = rpc_cJSON_CreateObject(); cJSON *result_root = rpc_cJSON_CreateObject();
if (result) if(result_root){
rpc_cJSON_AddItemToObject(result_root, "code", result); rpc_cJSON_AddItemToObject(result_root, "info", info_root);
if(id){ rpc_cJSON_AddItemToObject(result_root, "payload", payload_root);
printf("id json:\n%s\n",id->valuestring);
rpc_cJSON_AddItemToObject(result_root, "msgId", id);
} }
char * str_result = rpc_cJSON_Print(result_root); char * str_result = rpc_cJSON_Print(result_root);
printf("send json:\n%s\n",str_result); printf("send json:\n%s\n",str_result);
return_value = kk_ipc_send(IPC_PLAT2MID, str_result, strlen(str_result)+1); return_value = kk_ipc_send(IPC_PLAT2MID, str_result, strlen(str_result)+1);
free(str_result); free(str_result);
rpc_cJSON_Delete(result_root); rpc_cJSON_Delete(result_root);
return return_value; return return_value;
} }
...@@ -110,17 +122,37 @@ static int send_result_resp(cJSON * result, ...@@ -110,17 +122,37 @@ static int send_result_resp(cJSON * result,
static int send_error_resp(int code, char* message, static int send_error_resp(int code, char* message,
cJSON * id) { cJSON * id) {
int return_value = 0; int return_value = 0;
cJSON *edata;
cJSON *info_root = rpc_cJSON_CreateObject();
if(info_root){
rpc_cJSON_AddStringToObject(info_root, "msgType", "");
rpc_cJSON_AddStringToObject(info_root, "productType", "");
rpc_cJSON_AddStringToObject(info_root, "productCode", "");
rpc_cJSON_AddStringToObject(info_root, "deviceCode", "");
}
cJSON *payload_root = rpc_cJSON_CreateObject();
if(payload_root){
rpc_cJSON_AddItemToObject(payload_root, "msgId", id);
rpc_cJSON_AddNumberToObject(payload_root, "code", code);
edata = rpc_cJSON_CreateObject();
if(edata){
rpc_cJSON_AddStringToObject(edata, "message", message);
}
rpc_cJSON_AddItemToObject(payload_root, "data", edata);
}
cJSON *result_root = rpc_cJSON_CreateObject(); cJSON *result_root = rpc_cJSON_CreateObject();
cJSON *error_root = rpc_cJSON_CreateObject(); if(result_root){
rpc_cJSON_AddNumberToObject(error_root, "code", code); rpc_cJSON_AddItemToObject(result_root, "info", info_root);
rpc_cJSON_AddStringToObject(error_root, "message", message); rpc_cJSON_AddItemToObject(result_root, "payload", payload_root);
rpc_cJSON_AddItemToObject(result_root, "error", error_root); }
rpc_cJSON_AddItemToObject(result_root, "id", id);
char * str_result = rpc_cJSON_Print(result_root); char * str_result = rpc_cJSON_Print(result_root);
//printf("alla=========== :%d\n", strlen(str_result)+1); //printf("alla=========== :%d\n", strlen(str_result)+1);
return_value = kk_ipc_send(IPC_PLAT2MID, str_result, strlen(str_result)+1); return_value = kk_ipc_send(IPC_PLAT2MID, str_result, strlen(str_result)+1);
printf("send_error_resp:\n%s\n", str_result); printf("send_error_resp:\n%s\n", str_result);
free(str_result); free(str_result);
rpc_cJSON_Delete(result_root); rpc_cJSON_Delete(result_root);
free(message); free(message);
return return_value; return return_value;
...@@ -154,32 +186,30 @@ static int invoke_procedure(struct jrpc_server *server, ...@@ -154,32 +186,30 @@ static int invoke_procedure(struct jrpc_server *server,
} }
static int eval_request(struct jrpc_server *server, cJSON *root) { static int eval_request(struct jrpc_server *server, cJSON *root) {
cJSON *method, *params, *id,*mac; cJSON *params, *id,*mac,*info,*msgType,*payload;
method = rpc_cJSON_GetObjectItem(root, "method"); info = rpc_cJSON_GetObjectItem(root, "info");
if (method != NULL && method->type == cJSON_String) { if(info != NULL){
params = rpc_cJSON_GetObjectItem(root, "params");
if (params == NULL|| params->type == cJSON_Array msgType = rpc_cJSON_GetObjectItem(info, "msgType");
|| params->type == cJSON_Object) { mac = rpc_cJSON_GetObjectItem(info, "deviceCode");
id = rpc_cJSON_GetObjectItem(root, "msgId"); }
if (id == NULL|| id->type == cJSON_String payload = rpc_cJSON_GetObjectItem(root, "payload");
|| id->type == cJSON_Number) { if(payload != NULL){
mac = rpc_cJSON_GetObjectItem(root, "mac");
if(mac->type = cJSON_String){ params = rpc_cJSON_GetObjectItem(payload, "params");
//We have to copy ID because using it on the reply and deleting the response Object will also delete ID id = rpc_cJSON_GetObjectItem(payload, "msgId");
cJSON * id_copy = NULL; }
if (id != NULL) if(id != NULL && params != NULL && msgType != NULL && mac != NULL){
id_copy =
(id->type == cJSON_String) ? rpc_cJSON_CreateString( cJSON * id_copy = NULL;
id->valuestring) : id_copy = (id->type == cJSON_String) ? rpc_cJSON_CreateString(id->valuestring) : \
rpc_cJSON_CreateNumber(id->valueint); rpc_cJSON_CreateNumber(id->valueint);
if (server->debug_level) return invoke_procedure(server, msgType->valuestring,
printf("Method Invoked[2]: %s\n", method->valuestring); params, id_copy,mac);
return invoke_procedure(server, method->valuestring,
params, id_copy,mac); }
}
}
}
}
send_error_resp(JRPC_INVALID_REQUEST, send_error_resp(JRPC_INVALID_REQUEST,
strdup("The JSON sent is not a valid Request object."), NULL); strdup("The JSON sent is not a valid Request object."), NULL);
return -1; return -1;
......
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