Commit e31335ef authored by chen.weican's avatar chen.weican

【修改内容】调整topic的处理,所有topic在app层处理,以应对不同topic规则。

【提交人】陈伟灿
parent be59c2bf
...@@ -104,8 +104,8 @@ void onConnect(void* context, MQTTAsync_successData* response) ...@@ -104,8 +104,8 @@ void onConnect(void* context, MQTTAsync_successData* response)
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);
......
...@@ -27,6 +27,21 @@ typedef enum { ...@@ -27,6 +27,21 @@ typedef enum {
IPC_UNDEF IPC_UNDEF
} ipc_type; } ipc_type;
typedef enum{
MSG_REGISTER = 0,
MSG_UNREGISTER,
MSG_TOPOADD,
MSG_TOPODELETE,
MSG_TOPOGET,
MSG_LISTFOUND,
MSG_LOGIN,
MSG_LOGOUT,
MSG_PROPERTYPOST,
MSG_EVENTPOST,
MSG_SERVICERESPONSE,
MSG_SETREPLY,
}kk_msg_type_t;
typedef void ipc_cb(void* data, int len); typedef void ipc_cb(void* data, int len);
int kk_ipc_init(ipc_type type, ipc_cb cb); int kk_ipc_init(ipc_type type, ipc_cb cb);
int kk_ipc_dinit(); int kk_ipc_dinit();
......
This diff is collapsed.
#ifndef __KK_DM_MNG__ #ifndef __KK_DM_MNG__
#define __KK_DM_MNG__ #define __KK_DM_MNG__
#include "com_api.h"
#include "kk_tsl_common.h" #include "kk_tsl_common.h"
#include "klist.h" #include "klist.h"
...@@ -9,6 +10,7 @@ ...@@ -9,6 +10,7 @@
#define KK_DM_DEVICE_SUBDEV (0x02) #define KK_DM_DEVICE_SUBDEV (0x02)
#define KK_DM_DEVICE_GATEWAY (0x04) #define KK_DM_DEVICE_GATEWAY (0x04)
#define KK_MID_SYNC_DEFAULT_TIMEOUT_MS (200) #define KK_MID_SYNC_DEFAULT_TIMEOUT_MS (200)
#define IDENTIFY_MAXLEN (64 + 1)
typedef struct { typedef struct {
int devid; int devid;
...@@ -30,8 +32,10 @@ typedef struct { ...@@ -30,8 +32,10 @@ typedef struct {
typedef struct { typedef struct {
int msgid; int msgid;
int devid; int devid;
const char *service_prefix; //const char *service_prefix;
const char *service_name; //const char *service_name;
kk_msg_type_t msgtype;
char identity[IDENTIFY_MAXLEN];
char product_key[PRODUCT_KEY_MAXLEN]; char product_key[PRODUCT_KEY_MAXLEN];
char device_name[DEVICE_NAME_MAXLEN]; char device_name[DEVICE_NAME_MAXLEN];
char *params; char *params;
...@@ -39,5 +43,12 @@ typedef struct { ...@@ -39,5 +43,12 @@ typedef struct {
char *method; char *method;
//iotx_cm_data_handle_cb callback; //iotx_cm_data_handle_cb callback;
} dm_msg_request_t; } dm_msg_request_t;
typedef struct {
kk_msg_type_t msgtype;
char identity[IDENTIFY_MAXLEN];
char product_key[PRODUCT_KEY_MAXLEN];
char device_name[DEVICE_NAME_MAXLEN];
iotx_dm_error_code_t code;
} kk_msg_response_t;
#endif #endif
...@@ -16,10 +16,11 @@ const char DM_URI_THING_EVENT_PROPERTY_POST_METHOD[] DM_READ_ONLY = "thing.even ...@@ -16,10 +16,11 @@ const char DM_URI_THING_EVENT_PROPERTY_POST_METHOD[] DM_READ_ONLY = "thing.even
const char DM_MSG_REQUEST[] DM_READ_ONLY = "{\"msgId\":\"%d\",\"version\":\"%s\",\"params\":%.*s,\"method\":\"%s\"}"; const char DM_MSG_REQUEST[] DM_READ_ONLY = "{\"msgId\":\"%d\",\"version\":\"%s\",\"params\":%.*s,\"method\":\"%s\"}";
const char DM_MSG_INFO[] DM_READ_ONLY = "{\"msgtype\":\"%d\",\"product_type\":\"%s\",\"device_name\":\"%s\",\"identifier\":\"%s\"}";
void kk_sendData2app(void *uri, void *payload){ void kk_sendData2app(void *info, void *payload){
cJSON *root=cJSON_CreateObject(); cJSON *root=cJSON_CreateObject();
cJSON_AddStringToObject(root, "topic", uri); cJSON_AddStringToObject(root, "info", info);
cJSON_AddStringToObject(root, "payload", payload); cJSON_AddStringToObject(root, "payload", payload);
void *buf = cJSON_Print(root); void *buf = cJSON_Print(root);
kk_ipc_send(IPC_MID2APP, buf, strlen(buf) + 1); kk_ipc_send(IPC_MID2APP, buf, strlen(buf) + 1);
...@@ -395,48 +396,56 @@ int dm_msg_combine_logout(_IN_ char product_key[PRODUCT_KEY_MAXLEN], ...@@ -395,48 +396,56 @@ int dm_msg_combine_logout(_IN_ char product_key[PRODUCT_KEY_MAXLEN],
int dm_msg_request (_IN_ dm_msg_request_t *request) int dm_msg_request (_IN_ dm_msg_request_t *request)
{ {
int res = 0, payload_len = 0; int res = 0, payload_len = 0,req_info_len = 0;
char *payload = NULL, *uri = NULL; char *payload = NULL;
lite_cjson_t lite; lite_cjson_t lite;
char *req_info = NULL;
if (request == NULL || request->params == NULL || request->method == NULL) { if (request == NULL || request->params == NULL || request->method == NULL) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
/* Request URI */
res = kk_utils_service_name(request->service_prefix, request->service_name,
request->product_key, request->device_name, &uri);
if (res != SUCCESS_RETURN) {
return FAIL_RETURN;
}
payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + request->params_len + strlen( payload_len = strlen(DM_MSG_REQUEST) + 10 + strlen(DM_MSG_VERSION) + request->params_len + strlen(
request->method) + 1; request->method) + 1;
payload = malloc(payload_len); payload = malloc(payload_len);
if (payload == NULL) { if (payload == NULL) {
free(uri);
return MEMORY_NOT_ENOUGH; return MEMORY_NOT_ENOUGH;
} }
memset(payload, 0, payload_len); memset(payload, 0, payload_len);
snprintf(payload, payload_len, DM_MSG_REQUEST, request->msgid, snprintf(payload, payload_len, DM_MSG_REQUEST, request->msgid,
DM_MSG_VERSION, request->params_len, request->params, request->method); DM_MSG_VERSION, request->params_len, request->params, request->method);
req_info_len = strlen(DM_MSG_INFO)+10+strlen(request->product_key)+strlen(request->device_name)+strlen(request->identity)+1;
req_info = malloc(req_info_len);
if (req_info == NULL) {
free(payload);
return MEMORY_NOT_ENOUGH;
}
memset(req_info, 0, req_info_len);
snprintf(req_info, req_info_len, DM_MSG_INFO, request->msgtype,
request->product_key, request->device_name,request->identity);
memset(&lite, 0, sizeof(lite_cjson_t)); memset(&lite, 0, sizeof(lite_cjson_t));
res = lite_cjson_parse(payload, payload_len, &lite); res = lite_cjson_parse(payload, payload_len, &lite);
if (res < SUCCESS_RETURN) { if (res < SUCCESS_RETURN) {
printf("Wrong JSON Format, URI: %s, Payload: %s", uri, payload); printf("Wrong JSON Format, Payload: %s", payload);
free(uri); free(req_info);
free(payload);
return FAIL_RETURN;
}
memset(&lite, 0, sizeof(lite_cjson_t));
res = lite_cjson_parse(req_info, req_info_len, &lite);
if (res < SUCCESS_RETURN) {
printf("Wrong JSON Format, Payload: %s", req_info_len);
free(req_info);
free(payload); free(payload);
return FAIL_RETURN; return FAIL_RETURN;
} }
printf("DM Send Message, URI: %s, Payload: %s \n", uri, payload);
//if (type & DM_MSG_DEST_CLOUD) { //if (type & DM_MSG_DEST_CLOUD) {
// dm_client_publish(uri, (unsigned char *)payload, strlen(payload), request->callback); // dm_client_publish(uri, (unsigned char *)payload, strlen(payload), request->callback);
kk_sendData2app(uri, payload); kk_sendData2app(req_info, payload);
//} //}
free(uri); free(req_info);
free(payload); free(payload);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -446,20 +455,15 @@ const char DM_MSG_RESPONSE_WITH_DATA[] DM_READ_ONLY = "{\"msgId\":\"%.*s\",\"cod ...@@ -446,20 +455,15 @@ const char DM_MSG_RESPONSE_WITH_DATA[] DM_READ_ONLY = "{\"msgId\":\"%.*s\",\"cod
int dm_msg_response(_IN_ kk_msg_request_payload_t *request, _IN_ kk_msg_response_t *response, int dm_msg_response(_IN_ kk_msg_request_payload_t *request, _IN_ kk_msg_response_t *response,
_IN_ char *data, _IN_ int data_len, _IN_ void *user_data) _IN_ char *data, _IN_ int data_len, _IN_ void *user_data)
{ {
int res = 0, payload_len = 0; int res = 0, payload_len = 0,res_info_len = 0;
char *uri = NULL, *payload = NULL; char *uri = NULL, *payload = NULL;
lite_cjson_t lite; lite_cjson_t lite;
char *res_info = NULL;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if (request == NULL || response == NULL || data == NULL || data_len <= 0) { if (request == NULL || response == NULL || data == NULL || data_len <= 0) {
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
/* Response URI */
res = kk_utils_service_name(response->service_prefix, response->service_name,
response->product_key, response->device_name, &uri);
if (res != SUCCESS_RETURN) {
return FAIL_RETURN;
}
/* Response Payload */ /* Response Payload */
payload_len = strlen(DM_MSG_RESPONSE_WITH_DATA) + request->id.value_length + DM_UTILS_UINT32_STRLEN + data_len + 1; payload_len = strlen(DM_MSG_RESPONSE_WITH_DATA) + request->id.value_length + DM_UTILS_UINT32_STRLEN + data_len + 1;
...@@ -468,10 +472,23 @@ int dm_msg_response(_IN_ kk_msg_request_payload_t *request, _IN_ kk_msg_response ...@@ -468,10 +472,23 @@ int dm_msg_response(_IN_ kk_msg_request_payload_t *request, _IN_ kk_msg_response
free(uri); free(uri);
return MEMORY_NOT_ENOUGH; return MEMORY_NOT_ENOUGH;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memset(payload, 0, payload_len); memset(payload, 0, payload_len);
snprintf(payload, payload_len, DM_MSG_RESPONSE_WITH_DATA, snprintf(payload, payload_len, DM_MSG_RESPONSE_WITH_DATA,
request->id.value_length, request->id.value, response->code, data_len, data); request->id.value_length, request->id.value, response->code, data_len, data);
res_info_len = strlen(DM_MSG_INFO)+10+strlen(response->product_key)+strlen(response->device_name)+strlen(response->identity)+1;
res_info = malloc(res_info_len);
if (res_info == NULL) {
free(payload);
return MEMORY_NOT_ENOUGH;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memset(res_info, 0, res_info_len);
snprintf(res_info, res_info_len, DM_MSG_INFO, response->msgtype,
response->product_key, response->device_name,response->identity);
memset(&lite, 0, sizeof(lite_cjson_t)); memset(&lite, 0, sizeof(lite_cjson_t));
res = lite_cjson_parse(payload, payload_len, &lite); res = lite_cjson_parse(payload, payload_len, &lite);
if (res < SUCCESS_RETURN) { if (res < SUCCESS_RETURN) {
...@@ -480,13 +497,22 @@ int dm_msg_response(_IN_ kk_msg_request_payload_t *request, _IN_ kk_msg_response ...@@ -480,13 +497,22 @@ int dm_msg_response(_IN_ kk_msg_request_payload_t *request, _IN_ kk_msg_response
free(payload); free(payload);
return FAIL_RETURN; return FAIL_RETURN;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("Send URI: %s, Payload: %s", uri, payload); memset(&lite, 0, sizeof(lite_cjson_t));
res = lite_cjson_parse(res_info, res_info_len, &lite);
if (res < SUCCESS_RETURN) {
printf("Wrong JSON Format, Payload: %s", res_info_len);
free(res_info);
free(payload);
return FAIL_RETURN;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
//dm_client_publish(uri, (unsigned char *)payload, strlen(payload), NULL); //dm_client_publish(uri, (unsigned char *)payload, strlen(payload), NULL);
kk_sendData2app(uri, payload); kk_sendData2app(res_info, payload);
free(uri); free(res_info);
free(payload); free(payload);
return SUCCESS_RETURN; return SUCCESS_RETURN;
...@@ -564,6 +590,7 @@ int dm_msg_thing_property_set_reply(const char *topic, const char *payload, unsi ...@@ -564,6 +590,7 @@ int dm_msg_thing_property_set_reply(const char *topic, const char *payload, unsi
memset(&request, 0, sizeof(kk_msg_request_payload_t)); memset(&request, 0, sizeof(kk_msg_request_payload_t));
memset(&response, 0, sizeof(kk_msg_response_t)); memset(&response, 0, sizeof(kk_msg_response_t));
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
/**************to do*******************/ /**************to do*******************/
...@@ -574,19 +601,23 @@ int dm_msg_thing_property_set_reply(const char *topic, const char *payload, unsi ...@@ -574,19 +601,23 @@ int dm_msg_thing_property_set_reply(const char *topic, const char *payload, unsi
res =kk_msg_uri_parse_pkdn((char *)topic, strlen(topic), 2 + KK_URI_OFFSET, 4 + KK_URI_OFFSET, product_key, res =kk_msg_uri_parse_pkdn((char *)topic, strlen(topic), 2 + KK_URI_OFFSET, 4 + KK_URI_OFFSET, product_key,
device_name); device_name);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
res = dm_mgr_search_device_by_pkdn(product_key, device_name, &devid); res = dm_mgr_search_device_by_pkdn(product_key, device_name, &devid);
if (res < SUCCESS_RETURN) { if (res < SUCCESS_RETURN) {
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return res; return res;
} }
res = dm_msg_request_parse((char *)payload, payload_len, &request); res = dm_msg_request_parse((char *)payload, payload_len, &request);
if (res < SUCCESS_RETURN) { if (res < SUCCESS_RETURN) {
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return res ; return res ;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
/* Response */ /* Response */
response.service_prefix = DM_URI_SYS_PREFIX; response.msgtype = MSG_SETREPLY;
response.service_name = DM_URI_THING_SERVICE_PROPERTY_SET_REPLY; memset(response.identity,"",strlen(""));
memcpy(response.product_key, product_key, strlen(product_key)); memcpy(response.product_key, product_key, strlen(product_key));
memcpy(response.device_name, device_name, strlen(device_name)); memcpy(response.device_name, device_name, strlen(device_name));
response.code = (res == SUCCESS_RETURN) ? (IOTX_DM_ERR_CODE_SUCCESS) : (IOTX_DM_ERR_CODE_REQUEST_ERROR); response.code = (res == SUCCESS_RETURN) ? (IOTX_DM_ERR_CODE_SUCCESS) : (IOTX_DM_ERR_CODE_REQUEST_ERROR);
......
...@@ -1234,31 +1234,6 @@ int kk_msg_uri_parse_pkdn(_IN_ char *uri, _IN_ int uri_len, _IN_ int start_deli, ...@@ -1234,31 +1234,6 @@ int kk_msg_uri_parse_pkdn(_IN_ char *uri, _IN_ int uri_len, _IN_ int start_deli,
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_tsl_response_ok(const char *topic, const char *payload, unsigned int payload_len)
{
int res = 0;
char product_key[PRODUCT_KEY_MAXLEN] = {0};
char device_name[DEVICE_NAME_MAXLEN] = {0};
kk_msg_response_t response;
kk_msg_request_payload_t request;
memset(&request, 0, sizeof(kk_msg_request_payload_t));
memset(&response, 0, sizeof(kk_msg_response_t));
res =kk_msg_uri_parse_pkdn((char *)topic, strlen(topic), 2 + KK_URI_OFFSET, 4 + KK_URI_OFFSET, product_key,
device_name);
res = _kk_msg_request_parse((char *)payload, payload_len, &request);
if (res < SUCCESS_RETURN) {
return res ;
}
response.service_prefix = DM_URI_SYS_PREFIX;
response.service_name = DM_URI_THING_SERVICE_PROPERTY_SET_REPLY;
memcpy(response.product_key, product_key, strlen(product_key));
memcpy(response.device_name, device_name, strlen(device_name));
response.code = (res == SUCCESS_RETURN) ? (IOTX_DM_ERR_CODE_SUCCESS) : (IOTX_DM_ERR_CODE_REQUEST_ERROR);
dm_msg_response(&request, &response, "{}", strlen("{}"), NULL);
return SUCCESS_RETURN;
}
int kk_tsl_property_set_byMac(const char mac[DEVICE_MAC_MAXLEN], const char *payload, unsigned int payload_len) int kk_tsl_property_set_byMac(const char mac[DEVICE_MAC_MAXLEN], const char *payload, unsigned int payload_len)
{ {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#define KK_MSG_KEY_ID "id" #define KK_MSG_KEY_ID "msgId"
#define KK_MSG_KEY_VERSION "version" #define KK_MSG_KEY_VERSION "version"
#define KK_MSG_KEY_METHOD "method" #define KK_MSG_KEY_METHOD "method"
#define KK_MSG_KEY_PARAMS "params" #define KK_MSG_KEY_PARAMS "params"
...@@ -49,25 +49,7 @@ typedef struct { ...@@ -49,25 +49,7 @@ typedef struct {
lite_cjson_t message; lite_cjson_t message;
} kk_msg_response_payload_t; } kk_msg_response_payload_t;
typedef struct {
int msgid;
int devid;
const char *service_prefix;
const char *service_name;
char product_key[PRODUCT_KEY_MAXLEN];
char device_name[DEVICE_NAME_MAXLEN];
char *params;
int params_len;
char *method;
//iotx_cm_data_handle_cb callback;
} kk_msg_request_t;
typedef struct {
const char *service_prefix;
const char *service_name;
char product_key[PRODUCT_KEY_MAXLEN];
char device_name[DEVICE_NAME_MAXLEN];
iotx_dm_error_code_t code;
} kk_msg_response_t;
typedef enum { typedef enum {
kk_tsl_set_property_value = 0, kk_tsl_set_property_value = 0,
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#define DEVICE_MAC_MAXLEN (16 + 1) #define DEVICE_MAC_MAXLEN (16 + 1)
#define DEVICE_SN_MAXLEN (32 + 1) #define DEVICE_SN_MAXLEN (32 + 1)
#define TSL_PATH_MAXLEN (64 + 1) #define TSL_PATH_MAXLEN (64 + 1)
#define DM_UTILS_UINT16_STRLEN (5) #define DM_UTILS_UINT16_STRLEN (5)
......
...@@ -500,7 +500,7 @@ int emberAfMain(MAIN_FUNCTION_PARAMETERS) ...@@ -500,7 +500,7 @@ int emberAfMain(MAIN_FUNCTION_PARAMETERS)
kk_print("*******************123****************\r\n"); kk_print("*******************123****************\r\n");
kk_print_info("\r\n-----hello world![%s:%s]-----\r\n",__DATE__,__TIME__); kk_print_info("\r\n-----hello world![%s:%s]-----\r\n",__DATE__,__TIME__);
kk_print_version(); kk_print_version();
kk_tsl_init();
emberSerialInit(APP_SERIAL, BAUD_RATE, PARITY_NONE, 1); //fock child process emberSerialInit(APP_SERIAL, BAUD_RATE, PARITY_NONE, 1); //fock child process
emberAfAppPrintln("Reset info: %d (%p)", emberAfAppPrintln("Reset info: %d (%p)",
......
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