Commit d09c540f authored by 黄振令's avatar 黄振令

【修改内容】1. 修改网关添加逻辑;2. 增加网关与主机tcp通道

【提交人】huang.zhenling
parent f187487c
...@@ -39,11 +39,11 @@ typedef struct { ...@@ -39,11 +39,11 @@ typedef struct {
}Bloop_ctrl_t; }Bloop_ctrl_t;
Bloop_ctrl_t Bloop_ctrl; static Bloop_ctrl_t Bloop_ctrl;
Bloop_ctrl_t Mloop_ctrl; static Bloop_ctrl_t Mloop_ctrl;
struct ev_loop* gloop = NULL; static struct ev_loop* gloop = NULL;
pthread_t g_pTh = NULL; static pthread_t g_pTh = NULL;
static char* _parse_data_by_subscribe(char* data, int len, int *outLen, void** chlMark){ static char* _parse_data_by_subscribe(char* data, int len, int *outLen, void** chlMark){
......
This diff is collapsed.
...@@ -236,7 +236,8 @@ int HAL_GetDevice_Code(_OU_ char *device_code) ...@@ -236,7 +236,8 @@ int HAL_GetDevice_Code(_OU_ char *device_code)
{ {
int len = strlen(g_device_code); int len = strlen(g_device_code);
memset(device_code, 0x0, DEVICE_CODE_LEN); memset(device_code, 0x0, DEVICE_CODE_LEN);
strncpy(device_code, g_device_code, len); //strncpy(device_code, g_device_code, len);
strncpy(device_code, "CCU_66666", strlen("CCU_66666"));
return len; return len;
} }
int HAL_GetVersion(_OU_ char *version) int HAL_GetVersion(_OU_ char *version)
......
...@@ -43,6 +43,20 @@ static int _kk_filter_to_plat(const char* msgtype) ...@@ -43,6 +43,20 @@ static int _kk_filter_to_plat(const char* msgtype)
} }
return 0; return 0;
} }
void kk_sendData2gw(void* data, int len, char* chalMark){
if (chalMark== NULL || strlen(chalMark) == 0){
ERROR_PRINT(" chalMark is null");
return;
}
if (kk_is_tcp_channel(chalMark) > -1){
kk_tcp_channel_ser_send(data, len, chalMark);
}else{
kk_ipc_send_ex(IPC_MID2PLAT, data, len, chalMark);
}
}
void mid_cb(void* data, int len){ void mid_cb(void* data, int len){
if (data != NULL){ if (data != NULL){
...@@ -78,7 +92,7 @@ void mid_cb(void* data, int len){ ...@@ -78,7 +92,7 @@ void mid_cb(void* data, int len){
int devType = 0; int devType = 0;
dm_mgr_get_devicetype_by_devicecode(deviceCode->valuestring,&devType); dm_mgr_get_devicetype_by_devicecode(deviceCode->valuestring,&devType);
if(devType == KK_DM_DEVICE_GATEWAY){ if(devType == KK_DM_DEVICE_GATEWAY){
kk_ipc_send_ex(IPC_MID2PLAT, data, strlen(data), deviceCode->valuestring);//send to gw itself kk_sendData2gw(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_devicecode(deviceCode->valuestring,&gw_node); res = dm_mgr_get_device_by_devicecode(deviceCode->valuestring,&gw_node);
...@@ -88,7 +102,7 @@ void mid_cb(void* data, int len){ ...@@ -88,7 +102,7 @@ void mid_cb(void* data, int len){
cJSON_Delete(info); cJSON_Delete(info);
return; return;
} }
kk_ipc_send_ex(IPC_MID2PLAT, data, strlen(data), gw_node->fatherDeviceCode);//send to sub device kk_sendData2gw(data, strlen(data), gw_node->fatherDeviceCode);//send to sub device
} }
else{ else{
ERROR_PRINT("wrong type\n"); ERROR_PRINT("wrong type\n");
...@@ -134,6 +148,14 @@ void mid2p_cb(void* data, int len, char* chalMark){ ...@@ -134,6 +148,14 @@ void mid2p_cb(void* data, int len, char* chalMark){
} }
} }
void gw2mid_cb(void* data, int len, char* chalMark){
if (data != NULL){
printf("gw2mid_cb chalMark=%s, data: %s RECEIVED \r\n", chalMark, data);
mid2p_cb(data,len,chalMark);
}
}
void kk_platMsg_handle(void* data, char* chalMark){ void kk_platMsg_handle(void* data, char* chalMark){
char *out; char *out;
...@@ -171,6 +193,8 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -171,6 +193,8 @@ void kk_platMsg_handle(void* data, char* chalMark){
goto error; goto error;
} }
dm_mgr_update_timestamp_by_devicecode(info_dcode->valuestring,HAL_UptimeMs());
if (strcmp(msgType->valuestring, "/thing/topo/add")==0){ if (strcmp(msgType->valuestring, "/thing/topo/add")==0){
proCode = cJSON_GetObjectItem(jsonPay, "productCode"); proCode = cJSON_GetObjectItem(jsonPay, "productCode");
devCode = cJSON_GetObjectItem(jsonPay, "deviceCode"); devCode = cJSON_GetObjectItem(jsonPay, "deviceCode");
...@@ -297,7 +321,7 @@ void *ota_dispatch_yield(void *args) ...@@ -297,7 +321,7 @@ void *ota_dispatch_yield(void *args)
#define UDP_LAN_PORT 25556 #define UDP_LAN_PORT 25556
#define UDP_LAN_PORT_HOST 25555 #define UDP_LAN_PORT_HOST 25555
#define test_
void *udp_dispatch_yield(void *args){ void *udp_dispatch_yield(void *args){
...@@ -354,6 +378,7 @@ void *udp_dispatch_yield(void *args){ ...@@ -354,6 +378,7 @@ void *udp_dispatch_yield(void *args){
char szDec[1024] = {0}; char szDec[1024] = {0};
char host_ip[32] = {0}; char host_ip[32] = {0};
char mac[32] = {0}; char mac[32] = {0};
char device_code[DEVICE_CODE_LEN] = {0};
int devId = 0; int devId = 0;
while(1) while(1)
...@@ -372,6 +397,74 @@ void *udp_dispatch_yield(void *args){ ...@@ -372,6 +397,74 @@ void *udp_dispatch_yield(void *args){
DEBUG_PRINT("lan recmsg: %s\n", szDec); DEBUG_PRINT("lan recmsg: %s\n", szDec);
//DEBUG_PRINT("udp client ip:%s ,port is :%d htons(UDP_LAN_PORT)=%d \n",inet_ntoa(from.sin_addr),from.sin_port, htons(UDP_LAN_PORT)); //DEBUG_PRINT("udp client ip:%s ,port is :%d htons(UDP_LAN_PORT)=%d \n",inet_ntoa(from.sin_addr),from.sin_port, htons(UDP_LAN_PORT));
#ifdef test_
//"search_kk_ccu|deviceCode=1122334455667788;protocol=tcp"
if(strstr(szDec, "search_kk_ccu|") != NULL){
char* getConnet = szDec + strlen("search_kk_ccu|");
char* tmp = NULL;
char* endIdx = NULL;
int itemLen = 0;
int itemConnetLen = 0;
char gwDevCode[DEVICE_CODE_LEN] = {0};
char proto[10] = {0};
tmp = strstr(getConnet, "deviceCode=");
itemLen = strlen("deviceCode=");
if (tmp != NULL){
endIdx = strstr(tmp, ";");
if(endIdx == NULL){
itemConnetLen = strlen(tmp) - itemLen;
}else{
itemConnetLen = endIdx - tmp - itemLen;
}
memcpy(gwDevCode, tmp + itemLen,itemConnetLen);
}
tmp = strstr(getConnet, "protocol=");
itemLen = strlen("protocol=");
if (tmp != NULL){
endIdx = strstr(tmp, ";");
if(endIdx == NULL){
itemConnetLen = strlen(tmp) - itemLen;
}else{
itemConnetLen = endIdx - tmp - itemLen;
}
memcpy(proto, tmp + itemLen,itemConnetLen);
}
DEBUG_PRINT("gwDevCode =%s proto=%s \n",gwDevCode,proto);
if(strcmp(proto,"tcp") == 0){
//
kk_TCP_channel_init(gw2mid_cb);
kk_set_tcp_channel(gwDevCode,inet_ntoa(from.sin_addr));
}
memset(host_ip, 0, sizeof(host_ip));
memset(mac, 0, sizeof(mac));
memset(szOut, 0, sizeof(szOut));
HAL_Get_IP(host_ip,"ens33");
HAL_GetDevice_Code(device_code);
sprintf(szOut,"search_kk_ccu_ack|deviceCode=%s;ip=%s;port=%d",device_code,host_ip,16565);
DEBUG_PRINT("szOut:%s\n",szOut);
DEBUG_PRINT("udp client ip:%s ,port is :%d \n",inet_ntoa(from.sin_addr),from.sin_port);
//sendto(sock, szOut, strlen(szOut), 0, (struct sockaddr*)&from,len);
addrto_host.sin_addr.s_addr = inet_addr(inet_ntoa(from.sin_addr));
addrto_host.sin_port = htons(UDP_LAN_PORT_HOST);
//addrto_host.sin_port = from.sin_port;
//if(strcmp(host_ip,inet_ntoa(from.sin_addr)) == 0)
//{
sendto(sock_host, szOut, strlen(szOut), 0, (struct sockaddr*)&addrto_host,sizeof(addrto_host));
//}
//else
//{
// DEBUG_PRINT("udp client is not local ip , refused send ack to it\n");
//}
}
#else
json=cJSON_Parse(szDec); json=cJSON_Parse(szDec);
if (!json) { if (!json) {
ERROR_PRINT("Error before: [%s]\n","cJSON_Parse"); ERROR_PRINT("Error before: [%s]\n","cJSON_Parse");
...@@ -450,7 +543,7 @@ void *udp_dispatch_yield(void *args){ ...@@ -450,7 +543,7 @@ void *udp_dispatch_yield(void *args){
cJSON_Delete(json); cJSON_Delete(json);
} }
#endif
} }
usleep(100000); usleep(100000);
......
...@@ -81,6 +81,13 @@ void kk_rpc_reportLeftDevices(EmberEUI64 mac) ...@@ -81,6 +81,13 @@ void kk_rpc_reportLeftDevices(EmberEUI64 mac)
kk_sub_tsl_delete(mac); kk_sub_tsl_delete(mac);
} }
int kk_sendData2CCU(char* data, int len){
if (strcmp(GW2CCU_PROTOCOL,"tcp") == 0 ){
kk_tcp_client_send(data, len);
}else{
kk_ipc_send(IPC_PLAT2MID, data, len);
}
}
void kk_rpc_reportDevices(EmberEUI64 mac) void kk_rpc_reportDevices(EmberEUI64 mac)
{ {
...@@ -216,7 +223,8 @@ int kk_test_fuc(char *mac,const char *params) ...@@ -216,7 +223,8 @@ int kk_test_fuc(char *mac,const char *params)
int value = rpc_get_u8(propertyItem->valuestring); int value = rpc_get_u8(propertyItem->valuestring);
printf("[%s][%d]value:%d\n",__FUNCTION__,__LINE__,value); printf("[%s][%d]value:%d\n",__FUNCTION__,__LINE__,value);
res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_set(NULL,mac,&value); res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_set(NULL,mac,&value);
if(res < 0) { if(res < 0)
{
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1; return -1;
} }
...@@ -261,7 +269,8 @@ cJSON *rpc_read_attribue(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac ...@@ -261,7 +269,8 @@ cJSON *rpc_read_attribue(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac
{ {
int value = rpc_get_u8(propertyItem->valuestring); int value = rpc_get_u8(propertyItem->valuestring);
res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_set(ctx,mac->valuestring,&value); res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_set(ctx,mac->valuestring,&value);
if(ret < 0){ if(ret < 0)
{
goto error_return; goto error_return;
} }
else{ else{
...@@ -318,7 +327,8 @@ cJSON *rpc_Control(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac) ...@@ -318,7 +327,8 @@ cJSON *rpc_Control(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac)
} }
res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_set(ctx,mac->valuestring,&value); res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_set(ctx,mac->valuestring,&value);
if(res < 0){ if(res < 0)
{
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;
} }
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "network-creator.h" #include "network-creator.h"
#include "network-creator-security.h" #include "network-creator-security.h"
#include "RPC_API.h" #include "RPC_API.h"
#include "com_api.h"
#define KK_REPORT_DEVICE_JOINED_TYPE "/thing/topo/add" #define KK_REPORT_DEVICE_JOINED_TYPE "/thing/topo/add"
#define KK_REPORT_DEVICE_LEFT_TYPE "/thing/topo/delete" #define KK_REPORT_DEVICE_LEFT_TYPE "/thing/topo/delete"
...@@ -16,11 +18,14 @@ ...@@ -16,11 +18,14 @@
#define KK_READ_ATTRIBUTE_METHOD "thing.service.property.get" #define KK_READ_ATTRIBUTE_METHOD "thing.service.property.get"
#define TEST_PRODUCT_CODE "24" #define TEST_PRODUCT_CODE "24"
#define GW2CCU_PROTOCOL "tcp"
#define GW_DEVICE_CODE "1122334455667788"
cJSON *rpc_Control(jrpc_context * ctx, cJSON * params, cJSON *id,cJSON *mac); cJSON *rpc_Control(jrpc_context * ctx, cJSON * params, cJSON *id,cJSON *mac);
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);
int lightStatusSet(jrpc_context * ctx,const char *mac,void* data); int lightStatusSet(jrpc_context * ctx,const char *mac,void* data);
int kk_sendData2CCU(char* data, int len);
int rpc_nwkPermitJoin(jrpc_context * ctx,const char *mac,void* data); int rpc_nwkPermitJoin(jrpc_context * ctx,const char *mac,void* data);
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include "rpc_colorControl.h" #include "rpc_colorControl.h"
#include "rpc_onoff.h" #include "rpc_onoff.h"
#include "com_api.h"
#include "kk_test.h" #include "kk_test.h"
//#include "kk_log.h" //#include "kk_log.h"
...@@ -112,7 +111,7 @@ static int send_result_resp(cJSON * result, ...@@ -112,7 +111,7 @@ static int send_result_resp(cJSON * result,
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_sendData2CCU(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;
...@@ -150,7 +149,7 @@ static int send_error_resp(int code, char* message, ...@@ -150,7 +149,7 @@ static int send_error_resp(int code, char* message,
} }
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_sendData2CCU(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);
...@@ -268,9 +267,11 @@ int _init_param(struct jrpc_server *server) { ...@@ -268,9 +267,11 @@ int _init_param(struct jrpc_server *server) {
} }
int addGW_and_getIP(char* ip){
//char rgMessage[128] = "search_kk_gw|null"; int search_ccu(char devcode[33], char ip[16], int* port){
char sendCmdFmt[] = "search_kk_ccu|deviceCode=%s;protocol=%s";
char sendMessage[128] = {0};
char revMessage[128] = {0}; char revMessage[128] = {0};
int sock; int sock;
int sk_recv; int sk_recv;
...@@ -282,22 +283,23 @@ int addGW_and_getIP(char* ip){ ...@@ -282,22 +283,23 @@ int addGW_and_getIP(char* ip){
struct sockaddr_in Addrto; struct sockaddr_in Addrto;
struct sockaddr_in AddrRev; struct sockaddr_in AddrRev;
sprintf(sendMessage,sendCmdFmt,GW_DEVICE_CODE,GW2CCU_PROTOCOL);
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{ {
printf("addGW_and_getIP socket fail\n"); printf("[%s] socket fail\n",__FUNCTION__);
return -1; return -1;
} }
if ((sk_recv = socket(AF_INET, SOCK_DGRAM, 0)) == -1) if ((sk_recv = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{ {
printf("addGW_and_getIP socket sk_recv fail\n"); printf("[%s] socket sk_recv fail\n",__FUNCTION__);
close(sock); close(sock);
return -1; return -1;
} }
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, &iOptval, sizeof(int)) < 0) if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, &iOptval, sizeof(int)) < 0)
{ {
printf("addGW_and_getIP setsockopt failed!"); printf("[%s] setsockopt failed\n",__FUNCTION__);
close(sock); close(sock);
close(sk_recv); close(sk_recv);
return -1; return -1;
...@@ -305,7 +307,7 @@ int addGW_and_getIP(char* ip){ ...@@ -305,7 +307,7 @@ int addGW_and_getIP(char* ip){
if (setsockopt(sk_recv, SOL_SOCKET, SO_REUSEADDR, &iOptval, sizeof(int)) < 0) if (setsockopt(sk_recv, SOL_SOCKET, SO_REUSEADDR, &iOptval, sizeof(int)) < 0)
{ {
printf("addGW_and_getIP setsockopt failed!"); printf("[%s] setsockopt failed\n",__FUNCTION__);
close(sock); close(sock);
close(sk_recv); close(sk_recv);
return -1; return -1;
...@@ -314,7 +316,7 @@ int addGW_and_getIP(char* ip){ ...@@ -314,7 +316,7 @@ int addGW_and_getIP(char* ip){
flag = fcntl(sk_recv, F_GETFL, 0); flag = fcntl(sk_recv, F_GETFL, 0);
if (flag < 0) if (flag < 0)
{ {
printf("addGW_and_getIP fcntl failed.\n"); printf("[%s] fcntl failed.\n",__FUNCTION__);
close(sock); close(sock);
close(sk_recv); close(sk_recv);
return -1;; return -1;;
...@@ -322,7 +324,7 @@ int addGW_and_getIP(char* ip){ ...@@ -322,7 +324,7 @@ int addGW_and_getIP(char* ip){
flag |= O_NONBLOCK; flag |= O_NONBLOCK;
if (fcntl(sk_recv, F_SETFL, flag) < 0) if (fcntl(sk_recv, F_SETFL, flag) < 0)
{ {
printf("addGW_and_getIP fcntl failed.\n"); printf("[%s] fcntl failed.\n",__FUNCTION__);
close(sock); close(sock);
close(sk_recv); close(sk_recv);
return -1; return -1;
...@@ -341,40 +343,76 @@ int addGW_and_getIP(char* ip){ ...@@ -341,40 +343,76 @@ int addGW_and_getIP(char* ip){
if (bind(sk_recv, (struct sockaddr *)&AddrRev, sizeof(AddrRev)) == -1) if (bind(sk_recv, (struct sockaddr *)&AddrRev, sizeof(AddrRev)) == -1)
{ {
printf("addGW_and_getIP bind failed!\n"); printf("[%s] bind failed!\n",__FUNCTION__);
close(sock); close(sock);
close(sk_recv); close(sk_recv);
return -1; return -1;
} }
char info[] = "{\"msgtype\":\"/thing/topo/add\",\"productType\":\"gw\",\"productCode\":\"2\",\"deviceCode\":\"1122334455667788\"}";
char payload[] = "{\"msgId\":\"1\",\"version\":\"1.0\",\"params\":{\"deviceCode\":\"1122334455667788\",\"productCode\":\"2\",\"mac\":\"1122334455667788\"}}";
cJSON* root = cJSON_CreateObject();
cJSON* infoObj = cJSON_Parse(info);
cJSON* payloadObj = cJSON_Parse(payload);
cJSON_AddItemToObject(root, "info", infoObj);
cJSON_AddItemToObject(root, "payload",payloadObj);
char* outbuf = cJSON_Print(root);
cJSON_Delete(root);
while (1) while (1)
{ {
if ((iSendbytes = sendto(sock, outbuf, strlen(outbuf)+1, 0, (struct sockaddr*)&Addrto, sizeof(struct sockaddr))) == -1) if ((iSendbytes = sendto(sock, sendMessage, strlen(sendMessage)+1, 0, (struct sockaddr*)&Addrto, sizeof(struct sockaddr))) == -1)
{ {
printf("addGW_and_getIP sendto fail, errno=%d\n", errno); printf("[%s] sendto fail, errno=%d\n", __FUNCTION__,errno);
close(sock); close(sock);
close(sk_recv); close(sk_recv);
free(outbuf);
return -1; return -1;
} }
sleep(1); sleep(1);
recvLen = recvfrom(sk_recv, revMessage, sizeof(revMessage), 0, (struct sockaddr *)&AddrRev, &iAddrLength); recvLen = recvfrom(sk_recv, revMessage, sizeof(revMessage), 0, (struct sockaddr *)&AddrRev, &iAddrLength);
if (recvLen > 0){ if (recvLen > 0){
printf("addGW_and_getIP recv:%s\n", revMessage); printf("[%s] recv:%s\n", __FUNCTION__, revMessage);
if (strstr(revMessage, "/thing/topo/add_reply") != NULL){ //"search_kk_ccu_ack|deviceCode=CCU_66666;ip=192.168.36.128;port=16565"
memcpy(ip, inet_ntoa(AddrRev.sin_addr), strlen(inet_ntoa(AddrRev.sin_addr))); if (strstr(revMessage, "search_kk_ccu_ack|") != NULL){
printf(" recv ip:%s\n", ip); char* ackConnet = revMessage + strlen("search_kk_ccu_ack|");
char* tmp = NULL;
char* endIdx = NULL;
int itemLen = 0;
int itemConnetLen = 0;
tmp = strstr(ackConnet, "deviceCode=");
itemLen = strlen("deviceCode=");
if (tmp != NULL){
endIdx = strstr(tmp, ";");
if(endIdx == NULL){
itemConnetLen = strlen(tmp) - itemLen;
}else{
itemConnetLen = endIdx - tmp - itemLen;
}
memcpy(devcode, tmp + itemLen,itemConnetLen);
}
tmp = strstr(ackConnet, "ip=");
itemLen = strlen("ip=");
if (tmp != NULL){
endIdx = strstr(tmp, ";");
if(endIdx == NULL){
itemConnetLen = strlen(tmp) - itemLen;
}else{
itemConnetLen = endIdx - tmp - itemLen;
}
memcpy(ip, tmp + itemLen,itemConnetLen);
}
tmp = strstr(ackConnet, "port=");
itemLen = strlen("port=");
if (tmp != NULL){
endIdx = strstr(tmp, ";");
if(endIdx == NULL){
itemConnetLen = strlen(tmp) - itemLen;
}else{
itemConnetLen = endIdx - tmp - itemLen;
}
char portstr[20] = {0};
memcpy(portstr, tmp + itemLen,itemConnetLen);
*port = atoi(portstr);
}
//memcpy(ip, inet_ntoa(AddrRev.sin_addr), strlen(inet_ntoa(AddrRev.sin_addr)));
printf(" recv deviceCode:%s ip:%s port:%d \n", devcode, ip, *port);
break; break;
} }
} }
...@@ -382,24 +420,43 @@ int addGW_and_getIP(char* ip){ ...@@ -382,24 +420,43 @@ int addGW_and_getIP(char* ip){
} }
close(sock); close(sock);
close(sk_recv); close(sk_recv);
free(outbuf);
return 0; return 0;
} }
void ipcHandle(void) void ipcHandle(void)
{ {
char deviceCode[33] = {0};
char ip[16] = {0}; char ip[16] = {0};
int port = 0;
emberAfAppPrint( "Thread rpc Interface Parse create\n" ); emberAfAppPrint( "Thread rpc Interface Parse create\n" );
addGW_and_getIP(ip); search_ccu(deviceCode, ip, &port);
_init_param(&my_server); _init_param(&my_server);
kk_ipc_init(IPC_PLAT2MID, _cb, "1122334455667788",ip); if(strcmp(GW2CCU_PROTOCOL, "tcp") == 0){
kk_tcp_client_init(ip, port, _cb);
}else{
kk_ipc_init(IPC_PLAT2MID, _cb, GW_DEVICE_CODE, ip);
}
emberAfAppPrint("sizeof(rpc_table)=%d,sizeof(rpc_table_s)=%d,%d\n",sizeof(rpc_table),sizeof(rpc_table_s),sizeof(rpc_table)/sizeof(rpc_table_s)); emberAfAppPrint("sizeof(rpc_table)=%d,sizeof(rpc_table_s)=%d,%d\n",sizeof(rpc_table),sizeof(rpc_table_s),sizeof(rpc_table)/sizeof(rpc_table_s));
for(int i=0;i<sizeof(rpc_table)/sizeof(rpc_table_s);i++){ for(int i=0;i<sizeof(rpc_table)/sizeof(rpc_table_s);i++){
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 );
} }
//send add gw to ccu
char info[] = "{\"msgtype\":\"/thing/topo/add\",\"productType\":\"gw\",\"productCode\":\"2\",\"deviceCode\":\"1122334455667788\"}";
char payload[] = "{\"msgId\":\"1\",\"version\":\"1.0\",\"params\":{\"deviceCode\":\"1122334455667788\",\"productCode\":\"2\",\"mac\":\"1122334455667788\"}}";
cJSON* root = cJSON_CreateObject();
cJSON* infoObj = cJSON_Parse(info);
cJSON* payloadObj = cJSON_Parse(payload);
cJSON_AddItemToObject(root, "info", infoObj);
cJSON_AddItemToObject(root, "payload",payloadObj);
char* outbuf = cJSON_Print(root);
cJSON_Delete(root);
//kk_sendData2CCU(outbuf, strlen(outbuf));
kk_sendData2CCU("allan test", strlen("allan test"));
free(outbuf);
//handle procidure //handle procidure
while(1){ while(1){
// //
...@@ -422,7 +479,7 @@ int jrpc_send_msg(cJSON * msgJson) { ...@@ -422,7 +479,7 @@ int jrpc_send_msg(cJSON * msgJson) {
return_value = kk_ipc_send(IPC_PLAT2MID, str_result, strlen(str_result)+1); return_value = kk_sendData2CCU(str_result, strlen(str_result)+1);
free(str_result); free(str_result);
return return_value; return return_value;
} }
......
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