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

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

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