Commit 0efc40de authored by chen.weican's avatar chen.weican

【修改内容】1,修改面板系列属性上报采用逐一上报方式;2,修改内存泄漏点

【提交人】陈伟灿
parent 2d0627b1
#ifndef MQTT_CONF_H_ #ifndef MQTT_CONF_H_
#define MQTT_CONF_H_ #define MQTT_CONF_H_
#define ADDRESS "tcp://172.25.240.31:1983" #define ADDRESS "tcp://172.25.240.31:1983"
#define CLIENTID "kk_%s" #define CLIENTID "kk_%s"
#define TOPIC "/sys/a1OYuSBt23u/aIqEbWno8yDdsjCX15iq/thing/service/property/set" #define TOPIC "/sys/a1OYuSBt23u/aIqEbWno8yDdsjCX15iq/thing/service/property/set"
#define PAYLOAD "Hello cwc World!" #define PAYLOAD "Hello cwc World!"
#define QOS 2 #define QOS 2
#define TIMEOUT 10000L #define TIMEOUT 10000L
#define USRNAME "hangzhou_gateway " #define USRNAME "hangzhou_gateway "
#define PASSWORD "2ca1442865ff4cb99870f60f2c646190" #define PASSWORD "2ca1442865ff4cb99870f60f2c646190"
#define AUTO_CONN 1 #define AUTO_CONN 1
#define CONNECT_TIMEOUT 3 #define CONNECT_TIMEOUT 3
typedef enum {
RETURN_FAIL = -1,
#endif RETURN_SUCCESS = 0,
} kk_kcloud_error_code_t;
#endif
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "mqtt_api.h" #include "mqtt_api.h"
#include "com_api.h" #include "com_api.h"
#include "cJSON.h" #include "cJSON.h"
#include "kk_product.h" #include "kk_product.h"
#define KK_FILTER_ADD_TOPIC "/thing/topo/add" #define KK_FILTER_ADD_TOPIC "/thing/topo/add"
#define KK_FILTER_ADD_TOPIC_REPLY "/thing/topo/add_reply" #define KK_FILTER_ADD_TOPIC_REPLY "/thing/topo/add_reply"
#define KK_FILTER_DELETE_TOPIC "/thing/topo/delete" #define KK_FILTER_DELETE_TOPIC "/thing/topo/delete"
#define KK_FILTER_DELETE_TOPIC_REPLY "/thing/topo/delete_reply" #define KK_FILTER_DELETE_TOPIC_REPLY "/thing/topo/delete_reply"
#define KK_FILTER_REGISTER_TOPIC "/thing/sub/register" #define KK_FILTER_REGISTER_TOPIC "/thing/sub/register"
#define KK_FILTER_REGISTER_TOPIC_REPLY "/thing/sub/register_reply" #define KK_FILTER_REGISTER_TOPIC_REPLY "/thing/sub/register_reply"
#define KK_FILTER_LOGIN_TOPIC "/thing/combine/login" #define KK_FILTER_LOGIN_TOPIC "/thing/combine/login"
#define KK_FILTER_LOGIN_TOPIC_REPLY "/thing/combine/login_reply" #define KK_FILTER_LOGIN_TOPIC_REPLY "/thing/combine/login_reply"
#define KK_FILTER_SET_TOPIC "/thing/service/property/set" #define KK_FILTER_SET_TOPIC "/thing/service/property/set"
#define KK_FILTER_SET_TOPIC_REPLY "/thing/service/property/set_reply" #define KK_FILTER_SET_TOPIC_REPLY "/thing/service/property/set_reply"
#define KK_FILTER_EVENT_POST_TOPIC "/thing/event/property/post" #define KK_FILTER_EVENT_POST_TOPIC "/thing/event/property/post"
#define KK_FILTER_EVENT_POST_REPLY "/thing/event/property/post_reply" #define KK_FILTER_EVENT_POST_REPLY "/thing/event/property/post_reply"
#define KK_FILTER_STATUS_ONLINE "/thing/status/online" #define KK_FILTER_STATUS_ONLINE "/thing/status/online"
#define KK_FILTER_STATUS_ONLINE_REPLY "/thing/status/online_reply" #define KK_FILTER_STATUS_ONLINE_REPLY "/thing/status/online_reply"
#define KK_FILTER_STATUS_OFFLINE "/thing/status/offline" #define KK_FILTER_STATUS_OFFLINE "/thing/status/offline"
#define KK_FILTER_STATUS_OFFLINE_REPLY "/thing/status/offline_reply" #define KK_FILTER_STATUS_OFFLINE_REPLY "/thing/status/offline_reply"
#define KK_CLOUDSTATE_MSG "/thing/ccu/cloudstate" #define KK_CLOUDSTATE_MSG "/thing/ccu/cloudstate"
#define KK_CLOUDSTATE_MSG_REPLY "/thing/ccu/cloudstate_reply" #define KK_CLOUDSTATE_MSG_REPLY "/thing/ccu/cloudstate_reply"
const char DM_MSG_TO_MIDDWARE[] = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}"; const char DM_MSG_TO_MIDDWARE[] = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}";
#define KK_TOPIC_SERVICE_DELIMITER '/' #define KK_TOPIC_SERVICE_DELIMITER '/'
#define KK_POWER_SWITCH_1 "PowerSwitch_1"
int _kk_sendto_cloud(cJSON *root) #define KK_POWER_SWITCH_2 "PowerSwitch_2"
{ #define KK_POWER_SWITCH_3 "PowerSwitch_3"
cJSON *info,*pData;
char *topic = NULL;
char *payload = NULL; static char *s_split_product[] = {
cJSON *msgTypeStr = NULL; "85", //三路面板
info = cJSON_GetObjectItem(root, MSG_INFO_STR); "3002", //双路面板
if(info == NULL){ "3003" //三路面板
return -1;
} };
msgTypeStr = cJSON_GetObjectItem(info, MSG_TYPE_STR); static int kk_check_need_split(cJSON * info)
if(msgTypeStr == NULL){ {
return -1; cJSON *productCode = NULL;
} int i = 0;
topic = KK_Make_Topic(info); int num = sizeof(s_split_product)/sizeof(char*);
if(topic == NULL){
return -1;
} if(info == NULL){
pData = cJSON_GetObjectItem(root, MSG_PAYLOAD_STR); return 0;
if(pData == NULL){ }
free(topic); productCode = cJSON_GetObjectItem(info, MSG_PRODUCT_CODE_STR);
return -1; if(productCode == NULL){
} return 0;
//If topo delete,need UnSubscribe the topic }
if(strstr(msgTypeStr->valuestring,KK_FILTER_DELETE_TOPIC) != NULL){ for(i = 0; i < num; i++){
KK_Subdev_UnSubscribe(pData); if(strncmp(s_split_product[i],productCode->valuestring,strlen(productCode->valuestring)) == 0){
free(topic); return 1;
return 0; }
}
} return 0;
else if(strstr(msgTypeStr->valuestring,KK_CLOUDSTATE_MSG) != NULL){ }
KK_Send_CloudState(kk_get_cloud_status()); static int kk_split_send_data(cJSON *pData,const char* topic)
free(topic); {
return 0; cJSON *pParam = NULL;
cJSON *pParam_new = NULL;
} cJSON *powerswitch1 = NULL;
char* out=cJSON_Print(pData); cJSON *powerswitch2 = NULL;
INFO_PRINT("[%s][%d] payload:%s\n",__FUNCTION__,__LINE__,out); cJSON *powerswitch3 = NULL;
KK_MQTT_SendMsg(topic,(const char*)out); if(pData == NULL){
free(topic); return RETURN_FAIL;
free(out); }
return 0; pParam = cJSON_GetObjectItem(pData, MSG_PARAMS_STR);
} if(pParam == NULL){
return RETURN_FAIL;
}
void KK_Data_FromDev(void* str,int len) char* param_tmp = cJSON_Print(pParam);
{ powerswitch1 = cJSON_GetObjectItem(pParam, KK_POWER_SWITCH_1);
cJSON *root,*cmd; if(powerswitch1 != NULL){
if(str == NULL){ cJSON_DeleteItemFromObject(pData,MSG_PARAMS_STR);
return; cJSON *pParam_new = cJSON_CreateObject();
} cJSON_AddNumberToObject(pParam_new, KK_POWER_SWITCH_1, powerswitch1->valueint);
root=cJSON_Parse((char*)str); cJSON_AddItemToObject(pData,MSG_PARAMS_STR,pParam_new);
if(root == NULL){ char* out=cJSON_Print(pData);
ERROR_PRINT("[%s][%d] root is null \n",__FUNCTION__,__LINE__); KK_MQTT_SendMsg(topic,(const char*)out);
return; free(out);
}
cmd = cJSON_GetObjectItem(root, "cmd"); }
if(cmd == NULL){ pParam = cJSON_Parse(param_tmp);
_kk_sendto_cloud(root); powerswitch2 = cJSON_GetObjectItem(pParam, KK_POWER_SWITCH_2);
} if(powerswitch2 != NULL){
else{ cJSON_DeleteItemFromObject(pData,MSG_PARAMS_STR);
KK_Subdev_Subscribe(root); pParam_new = cJSON_CreateObject();
} cJSON_AddNumberToObject(pParam_new, KK_POWER_SWITCH_2, powerswitch2->valueint);
cJSON_Delete(root); cJSON_AddItemToObject(pData,MSG_PARAMS_STR,pParam_new);
char* out=cJSON_Print(pData);
} KK_MQTT_SendMsg(topic,(const char*)out);
static int _check_invalid_topic(const char* topic) free(out);
{ }
if(strstr(topic, KK_FILTER_ADD_TOPIC) != NULL && \ powerswitch3 = cJSON_GetObjectItem(pParam, KK_POWER_SWITCH_3);
strstr(topic,KK_FILTER_ADD_TOPIC_REPLY) == NULL){ if(powerswitch3 != NULL){
return 1; cJSON_DeleteItemFromObject(pData,MSG_PARAMS_STR);
} pParam_new = cJSON_CreateObject();
else if(strstr(topic, KK_FILTER_DELETE_TOPIC) != NULL && \ cJSON_AddNumberToObject(pParam_new, KK_POWER_SWITCH_3, powerswitch3->valueint);
strstr(topic,KK_FILTER_DELETE_TOPIC_REPLY) == NULL){ cJSON_AddItemToObject(pData,MSG_PARAMS_STR,pParam_new);
return 1; char* out=cJSON_Print(pData);
} KK_MQTT_SendMsg(topic,(const char*)out);
else if(strstr(topic, KK_FILTER_REGISTER_TOPIC) != NULL && \ free(out);
strstr(topic,KK_FILTER_REGISTER_TOPIC_REPLY) == NULL){ }
return 1; free(param_tmp);
} return RETURN_SUCCESS;
else if(strstr(topic, KK_FILTER_LOGIN_TOPIC) != NULL && \
strstr(topic,KK_FILTER_LOGIN_TOPIC_REPLY) == NULL){ }
return 1; int _kk_sendto_cloud(cJSON *root)
} {
else if(strstr(topic, KK_FILTER_SET_TOPIC_REPLY) != NULL){ cJSON *info,*pData;
return 1; char *topic = NULL;
} char *payload = NULL;
else if(strstr(topic, KK_FILTER_EVENT_POST_TOPIC) != NULL && \ cJSON *msgTypeStr = NULL;
strstr(topic,KK_FILTER_LOGIN_TOPIC_REPLY) == NULL){ info = cJSON_GetObjectItem(root, MSG_INFO_STR);
return 1; if(info == NULL){
} return RETURN_FAIL;
else if(strstr(topic, KK_FILTER_STATUS_ONLINE) != NULL && \ }
strstr(topic,KK_FILTER_STATUS_ONLINE_REPLY) == NULL){ msgTypeStr = cJSON_GetObjectItem(info, MSG_TYPE_STR);
return 1; if(msgTypeStr == NULL){
} return RETURN_FAIL;
else if(strstr(topic, KK_FILTER_STATUS_OFFLINE) != NULL && \ }
strstr(topic,KK_FILTER_STATUS_OFFLINE_REPLY) == NULL){ topic = KK_Make_Topic(info);
return 1; if(topic == NULL){
} return RETURN_FAIL;
return 0; }
} pData = cJSON_GetObjectItem(root, MSG_PAYLOAD_STR);
if(pData == NULL){
static int _kk_topic_parse_msgType(_IN_ char *topic, _IN_ int start_deli,_OU_ char **msgTypeStr) free(topic);
{ return RETURN_FAIL;
int res = 0, start = 0, len = 0, slice = 0; }
char *msgTypeStr_tmp = NULL; //If topo delete,need UnSubscribe the topic
if(strstr(msgTypeStr->valuestring,KK_FILTER_DELETE_TOPIC) != NULL){
if (topic == NULL) { KK_Subdev_UnSubscribe(pData);
return -1; free(topic);
} return RETURN_SUCCESS;
res = kk_utils_memtok(topic, strlen(topic), KK_TOPIC_SERVICE_DELIMITER, start_deli, &start);
if (res != 0) { }
return -1; else if(strstr(msgTypeStr->valuestring,KK_CLOUDSTATE_MSG) != NULL){
} KK_Send_CloudState(kk_get_cloud_status());
len = strlen(topic) - start + 1; free(topic);
msgTypeStr_tmp = (char*)malloc(len+1); return RETURN_SUCCESS;
if(msgTypeStr_tmp == NULL){
ERROR_PRINT("[%s][%d]malloc fail!!!\n",__FUNCTION__,__LINE__); }
return -1; if(kk_check_need_split(info)){
} kk_split_send_data(pData,topic);
memcpy(msgTypeStr_tmp, topic + start, len); }
*msgTypeStr = msgTypeStr_tmp; else{
INFO_PRINT("[%s][%d]%s\n",__FUNCTION__,__LINE__,*msgTypeStr); char* out=cJSON_Print(pData);
KK_MQTT_SendMsg(topic,(const char*)out);
free(out);
/* dm_log_debug("URI Product Key: %.*s, Device Name: %.*s", slice - start - 1, uri + start + 1, end - slice - 1, }
uri + slice + 1); */ free(topic);
return RETURN_SUCCESS;
return 0; }
}
static int _kk_topic_parse_pkdn(_IN_ char *topic, _IN_ int start_deli, void KK_Data_FromDev(void* str,int len)
_OU_ char productCode[PRODUCT_CODE_LEN],_OU_ char deviceCode[DEVICE_CODE_LEN]) {
{ cJSON *root,*cmd;
int res = 0, start = 0, end = 0, slice = 0; if(str == NULL){
return;
if (topic == NULL || deviceCode == NULL) { }
return -1; root=cJSON_Parse((char*)str);
} if(root == NULL){
res = kk_utils_memtok(topic, strlen(topic), KK_TOPIC_SERVICE_DELIMITER, start_deli, &start); ERROR_PRINT("[%s][%d] root is null \n",__FUNCTION__,__LINE__);
if (res != 0) { return;
return -1; }
} cmd = cJSON_GetObjectItem(root, "cmd");
res = kk_utils_memtok(topic, strlen(topic), KK_TOPIC_SERVICE_DELIMITER, start_deli + 1, &slice); if(cmd == NULL){
if (res != 0) { _kk_sendto_cloud(root);
return -1; }
} else{
KK_Subdev_Subscribe(root);
res = kk_utils_memtok(topic, strlen(topic), KK_TOPIC_SERVICE_DELIMITER, start_deli + 2, &end); }
if (res != 0) { cJSON_Delete(root);
return -1;
} }
static int _check_invalid_topic(const char* topic)
memcpy(productCode, topic + start + 1, slice - start - 1); {
memcpy(deviceCode, topic + slice + 1, end - slice - 1); if(strstr(topic, KK_FILTER_ADD_TOPIC) != NULL && \
strstr(topic,KK_FILTER_ADD_TOPIC_REPLY) == NULL){
return 0; return 1;
} }
else if(strstr(topic, KK_FILTER_DELETE_TOPIC) != NULL && \
static char * _kk_data_create(const char *topic,const char *data) strstr(topic,KK_FILTER_DELETE_TOPIC_REPLY) == NULL){
{ return 1;
cJSON *root; }
char *out; else if(strstr(topic, KK_FILTER_REGISTER_TOPIC) != NULL && \
char *infoStr = NULL; strstr(topic,KK_FILTER_REGISTER_TOPIC_REPLY) == NULL){
int infoStr_len = 0; return 1;
int res = 0; }
char productCode[PRODUCT_CODE_LEN] = {0}; else if(strstr(topic, KK_FILTER_LOGIN_TOPIC) != NULL && \
char deviceCode[DEVICE_CODE_LEN] = {0}; strstr(topic,KK_FILTER_LOGIN_TOPIC_REPLY) == NULL){
char * msgStr = NULL; return 1;
}
res =_kk_topic_parse_pkdn((char *)topic,3,productCode,deviceCode); else if(strstr(topic, KK_FILTER_SET_TOPIC_REPLY) != NULL){
res|=_kk_topic_parse_msgType((char *)topic,5,&msgStr); return 1;
infoStr_len = strlen(DM_MSG_TO_MIDDWARE)+strlen(productCode)+strlen(deviceCode)+strlen(msgStr)+10; }
infoStr = malloc(infoStr_len); else if(strstr(topic, KK_FILTER_EVENT_POST_TOPIC) != NULL && \
if(infoStr == NULL){ strstr(topic,KK_FILTER_LOGIN_TOPIC_REPLY) == NULL){
ERROR_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__); return 1;
free(msgStr); }
return NULL; else if(strstr(topic, KK_FILTER_STATUS_ONLINE) != NULL && \
} strstr(topic,KK_FILTER_STATUS_ONLINE_REPLY) == NULL){
memset(infoStr,0x0,infoStr_len); return 1;
snprintf(infoStr,infoStr_len,DM_MSG_TO_MIDDWARE,msgStr,productCode,deviceCode); }
else if(strstr(topic, KK_FILTER_STATUS_OFFLINE) != NULL && \
root=cJSON_CreateObject(); strstr(topic,KK_FILTER_STATUS_OFFLINE_REPLY) == NULL){
cJSON* infoObj = cJSON_Parse(infoStr); return 1;
cJSON* payloadObj = cJSON_Parse(data); }
cJSON_AddItemToObject(root, MSG_INFO_STR, infoObj); return 0;
cJSON_AddItemToObject(root, MSG_PAYLOAD_STR,payloadObj); }
out=cJSON_Print(root);
cJSON_Delete(root); static int _kk_topic_parse_msgType(_IN_ char *topic, _IN_ int start_deli,_OU_ char **msgTypeStr)
free(msgStr); {
free(infoStr); int res = 0, start = 0, len = 0, slice = 0;
INFO_PRINT("[%s][%d]%s\n",__FUNCTION__,__LINE__,out); char *msgTypeStr_tmp = NULL;
return out;
//free(out); /* Print to text, Delete the cJSON, print it, release the string. */ if (topic == NULL) {
} return RETURN_FAIL;
const char DM_MSG_CLOUDSTATE[] = "{\"msgId\":\"1\",\"version\":\"1.0\",\"params\":{\"IOTCloudState\":\"%d\"},\"method\":\"thing.ccu.cloudstate_reply\"}"; }
res = kk_utils_memtok(topic, strlen(topic), KK_TOPIC_SERVICE_DELIMITER, start_deli, &start);
int KK_Send_CloudState(int state) if (res != 0) {
{ return RETURN_FAIL;
char *infoStr = NULL; }
char *payloadStr = NULL; len = strlen(topic) - start + 1;
int infoStr_len = 0; msgTypeStr_tmp = (char*)malloc(len+1);
int payloadStr_len = 0; if(msgTypeStr_tmp == NULL){
cJSON *root; ERROR_PRINT("[%s][%d]malloc fail!!!\n",__FUNCTION__,__LINE__);
char *out; return RETURN_FAIL;
}
infoStr_len = strlen(DM_MSG_TO_MIDDWARE)+strlen(KK_CLOUDSTATE_MSG_REPLY)+10; memcpy(msgTypeStr_tmp, topic + start, len);
infoStr = malloc(infoStr_len); *msgTypeStr = msgTypeStr_tmp;
if(infoStr == NULL){ INFO_PRINT("[%s][%d]%s\n",__FUNCTION__,__LINE__,*msgTypeStr);
ERROR_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1;
} /* dm_log_debug("URI Product Key: %.*s, Device Name: %.*s", slice - start - 1, uri + start + 1, end - slice - 1,
memset(infoStr,0x0,infoStr_len); uri + slice + 1); */
snprintf(infoStr,infoStr_len,DM_MSG_TO_MIDDWARE,KK_CLOUDSTATE_MSG_REPLY,"","");
return RETURN_SUCCESS;
payloadStr_len = strlen(DM_MSG_CLOUDSTATE) + 10; }
payloadStr = malloc(payloadStr_len);
if(payloadStr == NULL){ static int _kk_topic_parse_pkdn(_IN_ char *topic, _IN_ int start_deli,
ERROR_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__); _OU_ char productCode[PRODUCT_CODE_LEN],_OU_ char deviceCode[DEVICE_CODE_LEN])
return -1; {
} int res = 0, start = 0, end = 0, slice = 0;
memset(payloadStr,0x0,payloadStr_len);
snprintf(payloadStr,payloadStr_len,DM_MSG_CLOUDSTATE,state); if (topic == NULL || deviceCode == NULL) {
return RETURN_FAIL;
root=cJSON_CreateObject(); }
cJSON* infoObj = cJSON_Parse(infoStr); res = kk_utils_memtok(topic, strlen(topic), KK_TOPIC_SERVICE_DELIMITER, start_deli, &start);
cJSON* payloadObj = cJSON_Parse(payloadStr); if (res != 0) {
cJSON_AddItemToObject(root, MSG_INFO_STR, infoObj); return RETURN_FAIL;
cJSON_AddItemToObject(root, MSG_PAYLOAD_STR,payloadObj); }
out=cJSON_Print(root); res = kk_utils_memtok(topic, strlen(topic), KK_TOPIC_SERVICE_DELIMITER, start_deli + 1, &slice);
kk_ipc_send(IPC_APP2MID, out, strlen(out)+1); if (res != 0) {
cJSON_Delete(root); return RETURN_FAIL;
free(payloadStr); }
free(infoStr);
INFO_PRINT("[%s][%d]%s\n",__FUNCTION__,__LINE__,out); res = kk_utils_memtok(topic, strlen(topic), KK_TOPIC_SERVICE_DELIMITER, start_deli + 2, &end);
free(out); if (res != 0) {
return 0; return RETURN_FAIL;
} }
void KK_Sendto_DevData(const char *topic,const char *data)
{ memcpy(productCode, topic + start + 1, slice - start - 1);
if(_check_invalid_topic(topic)) memcpy(deviceCode, topic + slice + 1, end - slice - 1);
{
return;//ingore the message return RETURN_SUCCESS;
} }
INFO_PRINT("[%s][%d]receive from cloud,topic:%s\n",__FUNCTION__,__LINE__,topic);
char *send_data = _kk_data_create(topic,data); static char * _kk_data_create(const char *topic,const char *data)
if(send_data == NULL){ {
return; cJSON *root;
} char *out;
kk_ipc_send(IPC_APP2MID, send_data, strlen(send_data)+1); char *infoStr = NULL;
free(send_data); int infoStr_len = 0;
} int res = 0;
char productCode[PRODUCT_CODE_LEN] = {0};
char deviceCode[DEVICE_CODE_LEN] = {0};
char * msgStr = NULL;
res =_kk_topic_parse_pkdn((char *)topic,3,productCode,deviceCode);
res|=_kk_topic_parse_msgType((char *)topic,5,&msgStr);
infoStr_len = strlen(DM_MSG_TO_MIDDWARE)+strlen(productCode)+strlen(deviceCode)+strlen(msgStr)+10;
infoStr = malloc(infoStr_len);
if(infoStr == NULL){
ERROR_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
free(msgStr);
return NULL;
}
memset(infoStr,0x0,infoStr_len);
snprintf(infoStr,infoStr_len,DM_MSG_TO_MIDDWARE,msgStr,productCode,deviceCode);
root=cJSON_CreateObject();
cJSON* infoObj = cJSON_Parse(infoStr);
cJSON* payloadObj = cJSON_Parse(data);
cJSON_AddItemToObject(root, MSG_INFO_STR, infoObj);
cJSON_AddItemToObject(root, MSG_PAYLOAD_STR,payloadObj);
out=cJSON_Print(root);
cJSON_Delete(root);
free(msgStr);
free(infoStr);
INFO_PRINT("[%s][%d]%s\n",__FUNCTION__,__LINE__,out);
return out;
//free(out); /* Print to text, Delete the cJSON, print it, release the string. */
}
const char DM_MSG_CLOUDSTATE[] = "{\"msgId\":\"1\",\"version\":\"1.0\",\"params\":{\"IOTCloudState\":\"%d\"},\"method\":\"thing.ccu.cloudstate_reply\"}";
int KK_Send_CloudState(int state)
{
char *infoStr = NULL;
char *payloadStr = NULL;
int infoStr_len = 0;
int payloadStr_len = 0;
cJSON *root;
char *out;
infoStr_len = strlen(DM_MSG_TO_MIDDWARE)+strlen(KK_CLOUDSTATE_MSG_REPLY)+10;
infoStr = malloc(infoStr_len);
if(infoStr == NULL){
ERROR_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
return RETURN_FAIL;
}
memset(infoStr,0x0,infoStr_len);
snprintf(infoStr,infoStr_len,DM_MSG_TO_MIDDWARE,KK_CLOUDSTATE_MSG_REPLY,"","");
payloadStr_len = strlen(DM_MSG_CLOUDSTATE) + 10;
payloadStr = malloc(payloadStr_len);
if(payloadStr == NULL){
ERROR_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
return RETURN_FAIL;
}
memset(payloadStr,0x0,payloadStr_len);
snprintf(payloadStr,payloadStr_len,DM_MSG_CLOUDSTATE,state);
root=cJSON_CreateObject();
cJSON* infoObj = cJSON_Parse(infoStr);
cJSON* payloadObj = cJSON_Parse(payloadStr);
cJSON_AddItemToObject(root, MSG_INFO_STR, infoObj);
cJSON_AddItemToObject(root, MSG_PAYLOAD_STR,payloadObj);
out=cJSON_Print(root);
kk_ipc_send(IPC_APP2MID, out, strlen(out)+1);
cJSON_Delete(root);
free(payloadStr);
free(infoStr);
INFO_PRINT("[%s][%d]%s\n",__FUNCTION__,__LINE__,out);
free(out);
return RETURN_SUCCESS;
}
void KK_Sendto_DevData(const char *topic,const char *data)
{
if(_check_invalid_topic(topic))
{
return;//ingore the message
}
INFO_PRINT("[%s][%d]receive from cloud,topic:%s\n",__FUNCTION__,__LINE__,topic);
char *send_data = _kk_data_create(topic,data);
if(send_data == NULL){
return;
}
kk_ipc_send(IPC_APP2MID, send_data, strlen(send_data)+1);
free(send_data);
}
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "mqtt_api.h" #include "mqtt_api.h"
static const char* OPT_SEND = "MQTTAsync_sendMessage"; static const char* OPT_SEND = "MQTTAsync_sendMessage";
static const char* OPT_SUB = "MQTTAsync_subscribe"; static const char* OPT_SUB = "MQTTAsync_subscribe";
static const char* OPT_UNSUB = "MQTTAsync_unsubscribe"; static const char* OPT_UNSUB = "MQTTAsync_unsubscribe";
static MQTTAsync s_Client; static MQTTAsync s_Client;
static int s_mqttStop = 0; static int s_mqttStop = 0;
static int s_cloudStatus = 0; static int s_cloudStatus = 0;
int kk_get_cloud_status(void){ int kk_get_cloud_status(void){
return s_cloudStatus; return s_cloudStatus;
} }
/*Connect lost callback*/ /*Connect lost callback*/
static void connlost(void *context, char *cause) static void connlost(void *context, char *cause)
{ {
if(context == NULL || cause == NULL) if(context == NULL || cause == NULL)
{ {
ERROR_PRINT("PARAM ERROR\n"); ERROR_PRINT("PARAM ERROR\n");
s_mqttStop = 1; s_mqttStop = 1;
return; return;
} }
MQTTAsync client = (MQTTAsync)context; MQTTAsync client = (MQTTAsync)context;
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer; MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
int rc; int rc;
INFO_PRINT("\nConnection lost\n"); INFO_PRINT("\nConnection lost\n");
INFO_PRINT("cause: %s\n", cause); INFO_PRINT("cause: %s\n", cause);
s_cloudStatus = 0; s_cloudStatus = 0;
KK_Send_CloudState(s_cloudStatus); KK_Send_CloudState(s_cloudStatus);
conn_opts.keepAliveInterval = 20; conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1; conn_opts.cleansession = 1;
if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to start connect, return code %d\n", rc); ERROR_PRINT("Failed to start connect, return code %d\n", rc);
s_mqttStop = 1; s_mqttStop = 1;
} }
} }
void onDisconnectFailure(void* context, MQTTAsync_failureData* response) void onDisconnectFailure(void* context, MQTTAsync_failureData* response)
{ {
WARNING_PRINT("Disconnect failed\n"); WARNING_PRINT("Disconnect failed\n");
s_mqttStop = 1; s_mqttStop = 1;
} }
void onDisconnect(void* context, MQTTAsync_successData* response) void onDisconnect(void* context, MQTTAsync_successData* response)
{ {
WARNING_PRINT("Successful disconnection\n"); WARNING_PRINT("Successful disconnection\n");
s_mqttStop = 1; s_mqttStop = 1;
} }
void onSendFailure(void* context, MQTTAsync_failureData* response) void onSendFailure(void* context, MQTTAsync_failureData* response)
{ {
if(context == NULL || response == NULL) if(context == NULL || response == NULL)
{ {
ERROR_PRINT("PARAM ERROR\n"); ERROR_PRINT("PARAM ERROR\n");
return; return;
} }
MQTTAsync client = (MQTTAsync)context; MQTTAsync client = (MQTTAsync)context;
MQTTAsync_disconnectOptions opts = MQTTAsync_disconnectOptions_initializer; MQTTAsync_disconnectOptions opts = MQTTAsync_disconnectOptions_initializer;
int rc; int rc;
WARNING_PRINT("Message send failed token %d error code %d\n", response->token, response->code); WARNING_PRINT("Message send failed token %d error code %d\n", response->token, response->code);
opts.onSuccess = onDisconnect; opts.onSuccess = onDisconnect;
opts.onFailure = onDisconnectFailure; opts.onFailure = onDisconnectFailure;
opts.context = client; opts.context = client;
if ((rc = MQTTAsync_disconnect(client, &opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_disconnect(client, &opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to start disconnect, return code %d\n", rc); ERROR_PRINT("Failed to start disconnect, return code %d\n", rc);
} }
} }
void onSend(void* context, MQTTAsync_successData* response) void onSend(void* context, MQTTAsync_successData* response)
{ {
if(response == NULL) if(response == NULL)
{ {
ERROR_PRINT("PARAM ERROR\n"); ERROR_PRINT("PARAM ERROR\n");
return; return;
} }
INFO_PRINT("Message with token value %d delivery confirmed\n", response->token); INFO_PRINT("Message with token value %d delivery confirmed\n", response->token);
} }
void onConnectFailure(void* context, MQTTAsync_failureData* response) void onConnectFailure(void* context, MQTTAsync_failureData* response)
{ {
s_mqttStop = 1; s_mqttStop = 1;
if(response == NULL) if(response == NULL)
{ {
ERROR_PRINT("PARAM ERROR\n"); ERROR_PRINT("PARAM ERROR\n");
return; return;
} }
WARNING_PRINT("Connect failed, rc %d\n", response ? response->code : 0); WARNING_PRINT("Connect failed, rc %d\n", response ? response->code : 0);
} }
void onConnect(void* context, MQTTAsync_successData* response) void onConnect(void* context, MQTTAsync_successData* response)
{ {
INFO_PRINT("Successful connection\n"); INFO_PRINT("Successful connection\n");
s_cloudStatus = 1; s_cloudStatus = 1;
KK_Send_CloudState(s_cloudStatus); KK_Send_CloudState(s_cloudStatus);
} }
int messageArrived(void* context, char* topicName, int topicLen, MQTTAsync_message* message) int messageArrived(void* context, char* topicName, int topicLen, MQTTAsync_message* message)
{ {
/* not expecting any messages */ /* not expecting any messages */
//INFO_PRINT("onMessageArrived topic:%s,message length:%d.\n",topicName,message->payloadlen); //INFO_PRINT("onMessageArrived topic:%s,message length:%d.\n",topicName,message->payloadlen);
//INFO_PRINT("payload:%s,\n",message->payload); //INFO_PRINT("payload:%s,\n",message->payload);
KK_MQTT_RecvMsg(topicName,message->payload); KK_MQTT_RecvMsg(topicName,message->payload);
MQTTAsync_freeMessage(&message); MQTTAsync_freeMessage(&message);
MQTTAsync_free(topicName); MQTTAsync_free(topicName);
return 1; return 1;
} }
static void mqttTraceCallback(enum MQTTASYNC_TRACE_LEVELS level, char *message) static void mqttTraceCallback(enum MQTTASYNC_TRACE_LEVELS level, char *message)
{ {
//printf("mqttTraceCallback level:%d,msg:%s.\n",level,message); //printf("mqttTraceCallback level:%d,msg:%s.\n",level,message);
} }
static void onDeliveryComplete(void* context, MQTTAsync_token token) static void onDeliveryComplete(void* context, MQTTAsync_token token)
{ {
//INFO_PRINT("onDeliveryComplete,token:%d \n",token); //INFO_PRINT("onDeliveryComplete,token:%d \n",token);
} }
static void onConnectBuild(void *context, char *cause) static void onConnectBuild(void *context, char *cause)
{ {
int rc = 0; int rc = 0;
INFO_PRINT("onConnectBuild:%s \n",cause); INFO_PRINT("onConnectBuild:%s \n",cause);
rc = KK_Client_Gateway_Subscribe(); rc = KK_Client_Gateway_Subscribe();
if(rc != 0) if(rc != 0)
{ {
ERROR_PRINT("KK_MQTT_SubTopic ERROR rc = %d\n",rc); ERROR_PRINT("KK_MQTT_SubTopic ERROR rc = %d\n",rc);
} }
} }
static void onDisConnected(void *context, MQTTProperties* properties,enum MQTTReasonCodes reasonCode) static void onDisConnected(void *context, MQTTProperties* properties,enum MQTTReasonCodes reasonCode)
{ {
INFO_PRINT("onDisConnected,maybe kicked by broker.\n"); INFO_PRINT("onDisConnected,maybe kicked by broker.\n");
} }
static void onOptSuccess(void* context, MQTTAsync_successData* response) static void onOptSuccess(void* context, MQTTAsync_successData* response)
{ {
if(strcmp((char *)context,OPT_SEND)==0) if(strcmp((char *)context,OPT_SEND)==0)
{ {
INFO_PRINT("MQTTAsync_sendMessage success,return token:%d,msg length:%d \n", INFO_PRINT("MQTTAsync_sendMessage success,return token:%d,msg length:%d \n",
response->token,response->alt.pub.message.payloadlen); response->token,response->alt.pub.message.payloadlen);
} }
else if(strcmp((char *)context,OPT_SUB)==0) else if(strcmp((char *)context,OPT_SUB)==0)
{ {
INFO_PRINT("MQTTAsync_subscribe success,return token:%d \n",response->token); INFO_PRINT("MQTTAsync_subscribe success,return token:%d \n",response->token);
} }
else if(strcmp((char *)context,OPT_UNSUB)==0) else if(strcmp((char *)context,OPT_UNSUB)==0)
{ {
INFO_PRINT("MQTTAsync_unsubscribe success,return token:%d \n",response->token); INFO_PRINT("MQTTAsync_unsubscribe success,return token:%d \n",response->token);
} }
} }
static void onOptFail(void* context, MQTTAsync_failureData* response) static void onOptFail(void* context, MQTTAsync_failureData* response)
{ {
if(strcmp((char *)context,OPT_SEND)==0) if(strcmp((char *)context,OPT_SEND)==0)
{ {
WARNING_PRINT("MQTTAsync_sendMessage fail,token:%d,code:%d,msg:%s \n", WARNING_PRINT("MQTTAsync_sendMessage fail,token:%d,code:%d,msg:%s \n",
response->token,response->code,response->message); response->token,response->code,response->message);
} }
else if(strcmp((char *)context,OPT_SUB)==0) else if(strcmp((char *)context,OPT_SUB)==0)
{ {
WARNING_PRINT("MQTTAsync_subscribe fail,return token:%d \n",response->token); WARNING_PRINT("MQTTAsync_subscribe fail,return token:%d \n",response->token);
} }
else if(strcmp((char *)context,OPT_UNSUB)==0) else if(strcmp((char *)context,OPT_UNSUB)==0)
{ {
WARNING_PRINT("MQTTAsync_unsubscribe fail,return token:%d \n",response->token); WARNING_PRINT("MQTTAsync_unsubscribe fail,return token:%d \n",response->token);
} }
} }
static void mqtt_set_callbacks(void) static void mqtt_set_callbacks(void)
{ {
MQTTAsync_setConnectionLostCallback(s_Client,NULL,connlost); MQTTAsync_setConnectionLostCallback(s_Client,NULL,connlost);
MQTTAsync_setMessageArrivedCallback(s_Client,NULL,messageArrived); MQTTAsync_setMessageArrivedCallback(s_Client,NULL,messageArrived);
MQTTAsync_setDeliveryCompleteCallback(s_Client,NULL,onDeliveryComplete); MQTTAsync_setDeliveryCompleteCallback(s_Client,NULL,onDeliveryComplete);
MQTTAsync_setConnected(s_Client,NULL,onConnectBuild); MQTTAsync_setConnected(s_Client,NULL,onConnectBuild);
MQTTAsync_setDisconnected(s_Client,NULL,onDisConnected); MQTTAsync_setDisconnected(s_Client,NULL,onDisConnected);
} }
void KK_Get_MqttClient(MQTTAsync *pClient) void KK_Get_MqttClient(MQTTAsync *pClient)
{ {
if(pClient != NULL) if(pClient != NULL)
{ {
*pClient = s_Client; *pClient = s_Client;
} }
} }
MQTTAsync KK_MQTT_Connect(void) MQTTAsync KK_MQTT_Connect(void)
{ {
int rc = 0; int rc = 0;
MQTTAsync_createOptions opts = MQTTAsync_createOptions_initializer; MQTTAsync_createOptions opts = MQTTAsync_createOptions_initializer;
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer; MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
MQTTAsync_setTraceCallback(mqttTraceCallback); MQTTAsync_setTraceCallback(mqttTraceCallback);
opts.MQTTVersion = MQTTVERSION_3_1_1; opts.MQTTVersion = MQTTVERSION_3_1_1;
char mac[16]={0}; char mac[16]={0};
char clientBuf[20] = {0}; char clientBuf[20] = {0};
HAL_Get_mac(mac); HAL_Get_mac(mac);
sprintf(clientBuf, CLIENTID, mac); sprintf(clientBuf, CLIENTID, mac);
if ((rc = MQTTAsync_createWithOptions(&s_Client, ADDRESS, clientBuf, MQTTCLIENT_PERSISTENCE_NONE, NULL,&opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_createWithOptions(&s_Client, ADDRESS, clientBuf, MQTTCLIENT_PERSISTENCE_NONE, NULL,&opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to create client object, return code %d\n", rc); ERROR_PRINT("Failed to create client object, return code %d\n", rc);
return NULL; return NULL;
} }
/*Set the mqtt callback*/ /*Set the mqtt callback*/
mqtt_set_callbacks(); mqtt_set_callbacks();
conn_opts.keepAliveInterval = 60; conn_opts.keepAliveInterval = 60;
conn_opts.connectTimeout = CONNECT_TIMEOUT; conn_opts.connectTimeout = CONNECT_TIMEOUT;
conn_opts.automaticReconnect = AUTO_CONN; conn_opts.automaticReconnect = AUTO_CONN;
conn_opts.minRetryInterval = 1; conn_opts.minRetryInterval = 1;
conn_opts.maxRetryInterval = 32; conn_opts.maxRetryInterval = 32;
conn_opts.username = USRNAME; conn_opts.username = USRNAME;
conn_opts.password = PASSWORD; conn_opts.password = PASSWORD;
conn_opts.cleansession = 1; conn_opts.cleansession = 1;
conn_opts.onSuccess = onConnect; conn_opts.onSuccess = onConnect;
conn_opts.onFailure = onConnectFailure; conn_opts.onFailure = onConnectFailure;
conn_opts.context = s_Client; conn_opts.context = s_Client;
if ((rc = MQTTAsync_connect(s_Client, &conn_opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_connect(s_Client, &conn_opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to start connect, return code %d\n", rc); ERROR_PRINT("Failed to start connect, return code %d\n", rc);
return NULL; return NULL;
} }
return s_Client; return s_Client;
} }
int KK_MQTT_SubTopic(char *topicName) int KK_MQTT_SubTopic(char *topicName)
{ {
INFO_PRINT("to subtopic:%s \n",topicName); INFO_PRINT("to subtopic:%s \n",topicName);
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer; MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
int rc; int rc;
opts.onSuccess = onOptSuccess; opts.onSuccess = onOptSuccess;
opts.onFailure = onOptFail; opts.onFailure = onOptFail;
opts.context = (void*)OPT_SUB; opts.context = (void*)OPT_SUB;
if ((rc = MQTTAsync_subscribe(s_Client,topicName, QOS, &opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_subscribe(s_Client,topicName, QOS, &opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to start subscribe, return code:%d.\n", rc); ERROR_PRINT("Failed to start subscribe, return code:%d.\n", rc);
return -1; return -1;
} }
return 0; return 0;
} }
int KK_MQTT_SendMsg(char *topicName,const char *payload) int KK_MQTT_SendMsg(char *topicName,const char *payload)
{ {
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer; MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
MQTTAsync_message pubmsg = MQTTAsync_message_initializer; MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
int rc; int rc;
opts.onSuccess = onOptSuccess; opts.onSuccess = onOptSuccess;
opts.onFailure = onOptFail; opts.onFailure = onOptFail;
opts.context = (void*)OPT_SEND; opts.context = (void*)OPT_SEND;
pubmsg.payload = (void*)payload; pubmsg.payload = (void*)payload;
pubmsg.payloadlen = strlen(payload); pubmsg.payloadlen = strlen(payload);
pubmsg.qos = QOS; pubmsg.qos = QOS;
pubmsg.retained = 0; pubmsg.retained = 0;
INFO_PRINT("mqtt send payload len:%d.\n",pubmsg.payloadlen); INFO_PRINT("mqtt send payload :%s.\n",payload);
if ((rc = MQTTAsync_sendMessage(s_Client, topicName, &pubmsg, &opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_sendMessage(s_Client, topicName, &pubmsg, &opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to start sendMessage, return code:%d.\n", rc); ERROR_PRINT("Failed to start sendMessage, return code:%d.\n", rc);
return -1; return -1;
} }
return rc; return rc;
} }
int KK_MQTT_RecvMsg(const char *topicName,const char *payload) int KK_MQTT_RecvMsg(const char *topicName,const char *payload)
{ {
if(topicName == NULL || payload ==NULL) if(topicName == NULL || payload ==NULL)
{ {
ERROR_PRINT("PARAM ERROR\n"); ERROR_PRINT("PARAM ERROR\n");
return -1; return -1;
} }
KK_Sendto_DevData(topicName,payload); KK_Sendto_DevData(topicName,payload);
return 0; return 0;
} }
int KK_MQTT_UnsubTopic(const char *topicName) int KK_MQTT_UnsubTopic(const char *topicName)
{ {
INFO_PRINT("to unsubtopic:%s \n",topicName); INFO_PRINT("to unsubtopic:%s \n",topicName);
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer; MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
int rc; int rc;
opts.onSuccess = onOptSuccess; opts.onSuccess = onOptSuccess;
opts.onFailure = onOptFail; opts.onFailure = onOptFail;
opts.context = (void*)OPT_UNSUB; opts.context = (void*)OPT_UNSUB;
if ((rc = MQTTAsync_unsubscribe(s_Client,topicName,&opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_unsubscribe(s_Client,topicName,&opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to start unubscribe, return code:%d.\n", rc); ERROR_PRINT("Failed to start unubscribe, return code:%d.\n", rc);
return -1; return -1;
} }
return rc; return rc;
} }
#ifndef __KK_PRODUCT_H__ #ifndef __KK_PRODUCT_H__
#define __KK_PRODUCT_H__ #define __KK_PRODUCT_H__
#include <stdio.h> #include <stdio.h>
#ifndef _IN_ #ifndef _IN_
#define _IN_ #define _IN_
#endif #endif
#ifndef _OU_ #ifndef _OU_
#define _OU_ #define _OU_
#endif #endif
#define PRODUCT_TYPE_LEN (32+1) #define PRODUCT_TYPE_LEN (32+1)
#define PRODUCT_CODE_LEN (32+1) #define PRODUCT_CODE_LEN (32+1)
#define DEVICE_CODE_LEN (32+1) #define DEVICE_CODE_LEN (32+1)
#define MAC_ADDR_LEN_MAX (10) #define MAC_ADDR_LEN_MAX (10)
#define PID_STRLEN_MAX (64) #define PID_STRLEN_MAX (64)
#define MID_STRLEN_MAX (64) #define MID_STRLEN_MAX (64)
#define IOTX_URI_MAX_LEN (135) /* IoTx CoAP/HTTP uri & MQTT topic maximal length */ #define IOTX_URI_MAX_LEN (135) /* IoTx CoAP/HTTP uri & MQTT topic maximal length */
#define PID_STR_MAXLEN (64) #define PID_STR_MAXLEN (64)
#define MID_STR_MAXLEN (64) #define MID_STR_MAXLEN (64)
#define PRODUCT_SECRET_MAXLEN (64 + 1) #define PRODUCT_SECRET_MAXLEN (64 + 1)
#define FIRMWARE_VERSION_MAXLEN (32 + 1) #define FIRMWARE_VERSION_MAXLEN (32 + 1)
#define VERSION_MAXLEN (32 + 1) #define VERSION_MAXLEN (32 + 1)
#define HAL_CID_LEN (64 + 1) #define HAL_CID_LEN (64 + 1)
#define NETWORK_ADDR_LEN (16) /* IPÍøÂçµØÖ·µÄ³¤¶È */ #define NETWORK_ADDR_LEN (16+1) /* IPÍøÂçµØÖ·µÄ³¤¶È */
#define MAC_ADDR_LEN (17+1) #define MAC_ADDR_LEN (17+1)
#define SN_ADDR_LEN (32+1) #define SN_ADDR_LEN (32+1)
#define PRODUCT_TPYE "kk" #define PRODUCT_TPYE "kk"
#define PRODUCT_CODE "15" #define PRODUCT_CODE "15"
int HAL_SetProduct_Type(_IN_ char *product_type); int HAL_SetProduct_Type(_IN_ char *product_type);
int HAL_SetProduct_Code(_IN_ char *product_code); int HAL_SetProduct_Code(_IN_ char *product_code);
int HAL_SetDevice_Code(_IN_ char *device_code); int HAL_SetDevice_Code(_IN_ char *device_code);
int HAL_GetProduct_Type(_OU_ char *product_type); int HAL_GetProduct_Type(_OU_ char *product_type);
int HAL_GetProduct_Code(_OU_ char *product_code); int HAL_GetProduct_Code(_OU_ char *product_code);
int HAL_GetDevice_Code(_OU_ char *device_code); int HAL_GetDevice_Code(_OU_ char *device_code);
#endif #endif
...@@ -311,16 +311,16 @@ int kk_get_wlist_num(void) ...@@ -311,16 +311,16 @@ int kk_get_wlist_num(void)
} }
int kk_getwlist_ByIdx(int idx,kk_wlist_dev_t* wlist_dev) int kk_getwlist_ByIdx(int idx,kk_wlist_dev_t* wlist_dev)
{ {
char *macs = NULL; char macs[DEVICE_MAC_MAXLEN] = {0};
char *PID = NULL; char PID[PRODUCT_CODE_MAXLEN] = {0};
char *DID = NULL; char DID[DEVICE_CODE_MAXLEN] = {0};
char *SN = NULL; char SN[PRODUCT_CODE_MAXLEN] = {0};
char identifier_name[64] = {0}; char identifier_name[64] = {0};
int res = 0; int res = 0;
_kk_wlist_lock(); _kk_wlist_lock();
sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTMAC_IDENTIFIER,idx); sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTMAC_IDENTIFIER,idx);
res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,NULL,&macs); res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,macs,NULL);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
goto fail_return; goto fail_return;
} }
...@@ -328,7 +328,7 @@ int kk_getwlist_ByIdx(int idx,kk_wlist_dev_t* wlist_dev) ...@@ -328,7 +328,7 @@ int kk_getwlist_ByIdx(int idx,kk_wlist_dev_t* wlist_dev)
memset(identifier_name,0x0,sizeof(identifier_name)); memset(identifier_name,0x0,sizeof(identifier_name));
sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTPRODUCTID_IDENTIFIER,idx); sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTPRODUCTID_IDENTIFIER,idx);
res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,NULL,&PID); res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,PID,NULL);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
goto fail_return; goto fail_return;
...@@ -337,7 +337,7 @@ int kk_getwlist_ByIdx(int idx,kk_wlist_dev_t* wlist_dev) ...@@ -337,7 +337,7 @@ int kk_getwlist_ByIdx(int idx,kk_wlist_dev_t* wlist_dev)
memset(identifier_name,0x0,sizeof(identifier_name)); memset(identifier_name,0x0,sizeof(identifier_name));
sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTSN_IDENTIFIER,idx); sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTSN_IDENTIFIER,idx);
res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,NULL,&SN); res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,SN,NULL);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
goto fail_return; goto fail_return;
...@@ -346,7 +346,7 @@ int kk_getwlist_ByIdx(int idx,kk_wlist_dev_t* wlist_dev) ...@@ -346,7 +346,7 @@ int kk_getwlist_ByIdx(int idx,kk_wlist_dev_t* wlist_dev)
memset(identifier_name,0x0,sizeof(identifier_name)); memset(identifier_name,0x0,sizeof(identifier_name));
sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTDEVICEID_IDENTIFIER,idx); sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTDEVICEID_IDENTIFIER,idx);
res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,NULL,&DID); res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,DID,NULL);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
goto fail_return; goto fail_return;
} }
...@@ -364,7 +364,7 @@ int kk_get_wlistIdx_byMac(const char* device_mac) ...@@ -364,7 +364,7 @@ int kk_get_wlistIdx_byMac(const char* device_mac)
{ {
kk_wlist_ctx_t *ctx = _kk_wlist_get_ctx(); kk_wlist_ctx_t *ctx = _kk_wlist_get_ctx();
int res = 0; int res = 0;
char *pmac = NULL; char pmac[DEVICE_MAC_MAXLEN] = {0};
char identifier_name[64] = {0}; char identifier_name[64] = {0};
int idx = 0,findIdx = 0; int idx = 0,findIdx = 0;
if(ctx->isOpened != 1) if(ctx->isOpened != 1)
...@@ -383,7 +383,7 @@ int kk_get_wlistIdx_byMac(const char* device_mac) ...@@ -383,7 +383,7 @@ int kk_get_wlistIdx_byMac(const char* device_mac)
{ {
memset(identifier_name,0x0,sizeof(identifier_name)); memset(identifier_name,0x0,sizeof(identifier_name));
sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTMAC_IDENTIFIER,idx); sprintf(identifier_name,KK_TSL_GATAWAY_WHITELISTMAC_IDENTIFIER,idx);
res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,NULL,&pmac); res = kk_tsl_get_value(kk_tsl_get_event_output_value,0,identifier_name,pmac,NULL);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
continue; continue;
} }
......
...@@ -574,7 +574,7 @@ void *ccu_property_monitor(void *args) ...@@ -574,7 +574,7 @@ void *ccu_property_monitor(void *args)
{ {
mid_ctx_t *mid_ctx = kk_mid_get_ctx(); mid_ctx_t *mid_ctx = kk_mid_get_ctx();
char s_IP[NETWORK_ADDR_LEN]; char s_IP[NETWORK_ADDR_LEN];
char *s_IP_TSL = NULL; char s_IP_TSL[NETWORK_ADDR_LEN] = {0};
int res = 0; int res = 0;
int needReport = 0; int needReport = 0;
int time_second = 60; int time_second = 60;
...@@ -587,7 +587,7 @@ void *ccu_property_monitor(void *args) ...@@ -587,7 +587,7 @@ void *ccu_property_monitor(void *args)
} }
//dm_ota_yield(MID_YIELD_TIMEOUT_MS); //dm_ota_yield(MID_YIELD_TIMEOUT_MS);
HAL_Get_IP(s_IP,NULL); HAL_Get_IP(s_IP,NULL);
res = kk_tsl_get_value(kk_tsl_get_property_value,0,KK_TSL_CCU_WANIP_IDENTIFIER,NULL,&s_IP_TSL); res = kk_tsl_get_value(kk_tsl_get_property_value,0,KK_TSL_CCU_WANIP_IDENTIFIER,s_IP_TSL,NULL);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_tsl_get_value Failed\n"); ERROR_PRINT("kk_tsl_get_value Failed\n");
} }
...@@ -599,6 +599,7 @@ void *ccu_property_monitor(void *args) ...@@ -599,6 +599,7 @@ void *ccu_property_monitor(void *args)
needReport = 1; needReport = 1;
} }
} }
if(needReport&&(kk_get_cloudstatus() == 1)){ if(needReport&&(kk_get_cloudstatus() == 1)){
needReport = 0; needReport = 0;
kk_tsl_post_property(KK_DM_DEVICE_CCU_DEVICEID,NULL,0); kk_tsl_post_property(KK_DM_DEVICE_CCU_DEVICEID,NULL,0);
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
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