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)
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);
//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);
......
......@@ -27,6 +27,21 @@ typedef enum {
IPC_UNDEF
} 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);
int kk_ipc_init(ipc_type type, ipc_cb cb);
int kk_ipc_dinit();
......
This diff is collapsed.
#ifndef __KK_DM_MNG__
#define __KK_DM_MNG__
#include "com_api.h"
#include "kk_tsl_common.h"
#include "klist.h"
......@@ -9,6 +10,7 @@
#define KK_DM_DEVICE_SUBDEV (0x02)
#define KK_DM_DEVICE_GATEWAY (0x04)
#define KK_MID_SYNC_DEFAULT_TIMEOUT_MS (200)
#define IDENTIFY_MAXLEN (64 + 1)
typedef struct {
int devid;
......@@ -30,8 +32,10 @@ typedef struct {
typedef struct {
int msgid;
int devid;
const char *service_prefix;
const char *service_name;
//const char *service_prefix;
//const char *service_name;
kk_msg_type_t msgtype;
char identity[IDENTIFY_MAXLEN];
char product_key[PRODUCT_KEY_MAXLEN];
char device_name[DEVICE_NAME_MAXLEN];
char *params;
......@@ -39,5 +43,12 @@ typedef struct {
char *method;
//iotx_cm_data_handle_cb callback;
} 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
......@@ -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_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_AddStringToObject(root, "topic", uri);
cJSON_AddStringToObject(root, "info", info);
cJSON_AddStringToObject(root, "payload", payload);
void *buf = cJSON_Print(root);
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],
int dm_msg_request (_IN_ dm_msg_request_t *request)
{
int res = 0, payload_len = 0;
char *payload = NULL, *uri = NULL;
int res = 0, payload_len = 0,req_info_len = 0;
char *payload = NULL;
lite_cjson_t lite;
char *req_info = NULL;
if (request == NULL || request->params == NULL || request->method == NULL) {
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(
request->method) + 1;
payload = malloc(payload_len);
if (payload == NULL) {
free(uri);
return MEMORY_NOT_ENOUGH;
}
memset(payload, 0, payload_len);
snprintf(payload, payload_len, DM_MSG_REQUEST, request->msgid,
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));
res = lite_cjson_parse(payload, payload_len, &lite);
if (res < SUCCESS_RETURN) {
printf("Wrong JSON Format, URI: %s, Payload: %s", uri, payload);
free(uri);
printf("Wrong JSON Format, Payload: %s", payload);
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);
return FAIL_RETURN;
}
printf("DM Send Message, URI: %s, Payload: %s \n", uri, payload);
//if (type & DM_MSG_DEST_CLOUD) {
// 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);
return SUCCESS_RETURN;
}
......@@ -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,
_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;
lite_cjson_t lite;
char *res_info = NULL;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if (request == NULL || response == NULL || data == NULL || data_len <= 0) {
return INVALID_PARAMETER;
}
/* 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;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
/* Response Payload */
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
free(uri);
return MEMORY_NOT_ENOUGH;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memset(payload, 0, payload_len);
snprintf(payload, payload_len, DM_MSG_RESPONSE_WITH_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));
res = lite_cjson_parse(payload, payload_len, &lite);
if (res < SUCCESS_RETURN) {
......@@ -480,13 +497,22 @@ int dm_msg_response(_IN_ kk_msg_request_payload_t *request, _IN_ kk_msg_response
free(payload);
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);
kk_sendData2app(uri, payload);
kk_sendData2app(res_info, payload);
free(uri);
free(res_info);
free(payload);
return SUCCESS_RETURN;
......@@ -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(&response, 0, sizeof(kk_msg_response_t));
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
/**************to do*******************/
......@@ -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,
device_name);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
res = dm_mgr_search_device_by_pkdn(product_key, device_name, &devid);
if (res < SUCCESS_RETURN) {
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return res;
}
res = dm_msg_request_parse((char *)payload, payload_len, &request);
if (res < SUCCESS_RETURN) {
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return res ;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
/* Response */
response.service_prefix = DM_URI_SYS_PREFIX;
response.service_name = DM_URI_THING_SERVICE_PROPERTY_SET_REPLY;
response.msgtype = MSG_SETREPLY;
memset(response.identity,"",strlen(""));
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);
......
......@@ -1234,31 +1234,6 @@ int kk_msg_uri_parse_pkdn(_IN_ char *uri, _IN_ int uri_len, _IN_ int start_deli,
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)
{
......
......@@ -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_METHOD "method"
#define KK_MSG_KEY_PARAMS "params"
......@@ -49,25 +49,7 @@ typedef struct {
lite_cjson_t message;
} 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 {
kk_tsl_set_property_value = 0,
......
......@@ -18,6 +18,7 @@
#define DEVICE_MAC_MAXLEN (16 + 1)
#define DEVICE_SN_MAXLEN (32 + 1)
#define TSL_PATH_MAXLEN (64 + 1)
#define DM_UTILS_UINT16_STRLEN (5)
......
......@@ -500,7 +500,7 @@ int emberAfMain(MAIN_FUNCTION_PARAMETERS)
kk_print("*******************123****************\r\n");
kk_print_info("\r\n-----hello world![%s:%s]-----\r\n",__DATE__,__TIME__);
kk_print_version();
kk_tsl_init();
emberSerialInit(APP_SERIAL, BAUD_RATE, PARITY_NONE, 1); //fock child process
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