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

【修改内容】增加子设备删除的功能上报,并同步删除对应的数据

【提交人】陈伟灿
parent 798605dc
...@@ -33,10 +33,15 @@ int _kk_sendto_cloud(cJSON *root) ...@@ -33,10 +33,15 @@ int _kk_sendto_cloud(cJSON *root)
cJSON *info,*pData; cJSON *info,*pData;
char *topic = NULL; char *topic = NULL;
char *payload = NULL; char *payload = NULL;
cJSON *msgTypeStr = NULL;
info = cJSON_GetObjectItem(root, MSG_INFO_STR); info = cJSON_GetObjectItem(root, MSG_INFO_STR);
if(info == NULL){ if(info == NULL){
return -1; return -1;
} }
msgTypeStr = cJSON_GetObjectItem(info, MSG_TYPE_STR);
if(msgTypeStr == NULL){
return -1;
}
topic = KK_Make_Topic(info); topic = KK_Make_Topic(info);
if(topic == NULL){ if(topic == NULL){
return -1; return -1;
...@@ -46,6 +51,11 @@ int _kk_sendto_cloud(cJSON *root) ...@@ -46,6 +51,11 @@ int _kk_sendto_cloud(cJSON *root)
free(topic); free(topic);
return -1; return -1;
} }
//If topo delete,need UnSubscribe the topic
if(strstr(msgTypeStr->valuestring,KK_FILTER_DELETE_TOPIC) != NULL){
KK_Subdev_UnSubscribe(pData);
}
char* out=cJSON_Print(pData); char* out=cJSON_Print(pData);
INFO_PRINT("[%s][%d] payload:%s\n",__FUNCTION__,__LINE__,out); INFO_PRINT("[%s][%d] payload:%s\n",__FUNCTION__,__LINE__,out);
KK_MQTT_SendMsg(topic,(const char*)out); KK_MQTT_SendMsg(topic,(const char*)out);
......
...@@ -121,7 +121,6 @@ static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code, ...@@ -121,7 +121,6 @@ static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code,
static int _kk_utils_topic_ota(_IN_ char* str, _OU_ char **topic) static int _kk_utils_topic_ota(_IN_ char* str, _OU_ char **topic)
{ {
int service_name_len = 0; int service_name_len = 0;
int *pstr_uri = NULL;
if (str == NULL ||topic == NULL || *topic != NULL) { if (str == NULL ||topic == NULL || *topic != NULL) {
return -1; return -1;
} }
...@@ -136,7 +135,43 @@ static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code, ...@@ -136,7 +135,43 @@ static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code,
return 0; return 0;
} }
int KK_Subdev_UnSubscribe(cJSON *payload)
{
cJSON *params,*productCode,*deviceCode;
char *topic = NULL;
int topic_len = 0;
if(payload == NULL){
goto errorreturn;
}
params = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(params == NULL){
goto errorreturn;
}
productCode = cJSON_GetObjectItem(params, MSG_PRODUCT_CODE_STR);
if(productCode == NULL){
goto errorreturn;
}
deviceCode = cJSON_GetObjectItem(params, MSG_DEVICE_CODE_STR);
if(deviceCode == NULL){
goto errorreturn;
}
topic_len = strlen(KK_URI_SYS_PREFIX) + strlen(productCode->valuestring)+strlen(deviceCode->valuestring) + 1;
topic = malloc(topic_len);
if (topic == NULL) {
goto errorreturn;
}
memset(topic,0,topic_len);
snprintf(topic, topic_len, KK_URI_SYS_PREFIX, productCode->valuestring,deviceCode->valuestring);
INFO_PRINT("[%s][%d] TOPIC:%s\n",__FUNCTION__,__LINE__,topic);
KK_MQTT_UnsubTopic(topic);
free(topic);
return 0;
errorreturn:
return -1;
}
char* KK_Make_Topic(cJSON *info) char* KK_Make_Topic(cJSON *info)
{ {
cJSON *type,*product_code,*device_code; cJSON *type,*product_code,*device_code;
...@@ -147,11 +182,7 @@ char* KK_Make_Topic(cJSON *info) ...@@ -147,11 +182,7 @@ char* KK_Make_Topic(cJSON *info)
if(type == NULL){ if(type == NULL){
goto errorreturn; goto errorreturn;
} }
#if 0 //just for test
if(strstr(type->valuestring,"/thing/topo/add") != NULL){
KK_MQTT_SubTopic("/sys/kk/2/1122334455667788/#");
}
#endif
product_code = cJSON_GetObjectItem(info, MSG_PRODUCT_CODE_STR); product_code = cJSON_GetObjectItem(info, MSG_PRODUCT_CODE_STR);
if(product_code == NULL){ if(product_code == NULL){
goto errorreturn; goto errorreturn;
...@@ -166,89 +197,7 @@ char* KK_Make_Topic(cJSON *info) ...@@ -166,89 +197,7 @@ char* KK_Make_Topic(cJSON *info)
else{ else{
_kk_utils_topic(type->valuestring,product_code->valuestring,device_code->valuestring,&topic); _kk_utils_topic(type->valuestring,product_code->valuestring,device_code->valuestring,&topic);
} }
#if 0
switch(msgtype)
{
case MSG_REGISTER:
_kk_utils_topic(DM_URI_THING_SUB_REGISTER,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_UNREGISTER:
_kk_utils_topic(DM_URI_THING_SUB_UNREGISTER,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_TOPOADD:
_kk_utils_topic(DM_URI_THING_TOPO_ADD,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_TOPODELETE:
_kk_utils_topic(DM_URI_THING_TOPO_DELETE,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_TOPOGET:
_kk_utils_topic(DM_URI_THING_TOPO_GET,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_LISTFOUND:
_kk_utils_topic(DM_URI_THING_LIST_FOUND,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_LOGIN:
_kk_utils_topic(DM_URI_COMBINE_LOGIN,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_LOGOUT:
_kk_utils_topic(DM_URI_COMBINE_LOGOUT,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_PROPERTYPOST:
_kk_utils_topic(DM_URI_THING_EVENT_PROPERTY_POST,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_EVENTPOST:
{
cJSON *identify;
char *service_name = NULL;
int service_name_len = 0;
identify = cJSON_GetObjectItem(root, MSG_INDENTIFIER_STR);
if(identify == NULL){
goto errorreturn;
}
service_name_len = strlen(DM_URI_THING_EVENT_POST) + strlen(identify->valuestring) + 1;
service_name = malloc(service_name_len);
if (service_name == NULL) {
goto errorreturn;
}
snprintf(service_name,service_name_len,DM_URI_THING_EVENT_POST,identify->valuestring);
_kk_utils_topic(service_name,product_code->valuestring,device_code->valuestring,&topic);
free(service_name);
}
break;
case MSG_SERVICERESPONSE:
{
cJSON *identify;
char *service_name = NULL;
int service_name_len = 0;
identify = cJSON_GetObjectItem(root, MSG_INDENTIFIER_STR);
if(identify == NULL){
goto errorreturn;
}
service_name_len = strlen(DM_URI_THING_SERVICE_RESPONSE) + strlen(identify->valuestring) + 1;
service_name = malloc(service_name_len);
if (service_name == NULL) {
goto errorreturn;
}
snprintf(service_name,service_name_len,DM_URI_THING_SERVICE_RESPONSE,identify->valuestring);
_kk_utils_topic(service_name,product_code->valuestring,device_code->valuestring,&topic);
free(service_name);
}
break;
case MSG_SETREPLY:
_kk_utils_topic(DM_URI_THING_SERVICE_PROPERTY_SET_REPLY,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_OTA_PROCESS:
_kk_utils_topic_ota(0,product_code->valuestring,device_code->valuestring,&topic);
break;
case MSG_OTA_INFORM:
_kk_utils_topic_ota(1,product_code->valuestring,device_code->valuestring,&topic);
break;
}
#endif
INFO_PRINT("[%s][%d] TOPIC:%s\n",__FUNCTION__,__LINE__,topic); INFO_PRINT("[%s][%d] TOPIC:%s\n",__FUNCTION__,__LINE__,topic);
return topic; return topic;
errorreturn: errorreturn:
......
...@@ -315,7 +315,7 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp) ...@@ -315,7 +315,7 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp)
INFO_PRINT("---------->dev timeout,send offline\n"); INFO_PRINT("---------->dev timeout,send offline\n");
search_node->isOffline = 1; search_node->isOffline = 1;
iotx_dm_dev_offline(search_node->devid); iotx_dm_dev_offline(search_node->devid);
kk_subDev_update_online(search_node->isOffline,search_node->deviceCode); kk_subDev_update_offline(search_node->isOffline,search_node->deviceCode);
} }
//_dm_mgr_mutex_unlock(); //_dm_mgr_mutex_unlock();
...@@ -326,7 +326,7 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp) ...@@ -326,7 +326,7 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp)
INFO_PRINT("---------->dev online again,send online\n"); INFO_PRINT("---------->dev online again,send online\n");
search_node->isOffline = 0; search_node->isOffline = 0;
iotx_dm_dev_online(search_node->devid); iotx_dm_dev_online(search_node->devid);
kk_subDev_update_online(search_node->isOffline,search_node->deviceCode); kk_subDev_update_offline(search_node->isOffline,search_node->deviceCode);
} }
} }
} }
...@@ -428,14 +428,12 @@ int dm_mgr_deinit(void) ...@@ -428,14 +428,12 @@ int dm_mgr_deinit(void)
} }
const char DM_URI_THING_EVENT_POST[] = "/thing/event/%s/post"; const char DM_URI_THING_EVENT_POST[] = "/thing/event/%s/post";
const char DM_MSG_THING_UPSTREAM_REQUEST_PARAMS[] DM_READ_ONLY = const char DM_MSG_THING_UPSTREAM_REQUEST_PARAMS[] DM_READ_ONLY = "%s";
"{\"value\":%s,\"timestamp\":\"%s\"}";
static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid, static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid,
_IN_ char *identify, _IN_ char *identify,
_IN_ char *params, _IN_ int params_len, _IN_ char *method, _OU_ dm_msg_request_t *request) _IN_ char *params, _IN_ int params_len, _IN_ char *method, _OU_ dm_msg_request_t *request)
{ {
int res = 0; int res = 0;
char timestamp[DM_UTILS_UINT64_STRLEN] = {0};
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
int paramLen = 0; int paramLen = 0;
int msgTypeLen = 0; int msgTypeLen = 0;
...@@ -445,18 +443,16 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid, ...@@ -445,18 +443,16 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid,
return FAIL_RETURN; return FAIL_RETURN;
} }
/* TimeStamp */
HAL_Snprintf(timestamp, DM_UTILS_UINT64_STRLEN, "%llu", (unsigned long long)HAL_UptimeMs());
/* dm_log_debug("Time Stamp: %s", timestamp); */ /* dm_log_debug("Time Stamp: %s", timestamp); */
paramLen = strlen(DM_MSG_THING_UPSTREAM_REQUEST_PARAMS) + paramLen = strlen(DM_MSG_THING_UPSTREAM_REQUEST_PARAMS) +
params_len + strlen(timestamp) + 1; params_len + 1;
payload_param = malloc(paramLen); payload_param = malloc(paramLen);
if (payload_param == NULL) { if (payload_param == NULL) {
return MEMORY_NOT_ENOUGH; return MEMORY_NOT_ENOUGH;
} }
memset(payload_param, 0, paramLen); memset(payload_param, 0, paramLen);
HAL_Snprintf(payload_param, paramLen, DM_MSG_THING_UPSTREAM_REQUEST_PARAMS, params,timestamp); HAL_Snprintf(payload_param, paramLen, DM_MSG_THING_UPSTREAM_REQUEST_PARAMS, params);
request->msgid = msgid; request->msgid = msgid;
request->devid = devid; request->devid = devid;
...@@ -1225,3 +1221,38 @@ int dm_mgr_subdev_create(int devtype,_IN_ char productCode[PRODUCT_CODE_MAXLEN], ...@@ -1225,3 +1221,38 @@ int dm_mgr_subdev_create(int devtype,_IN_ char productCode[PRODUCT_CODE_MAXLEN],
return res; return res;
} }
int dm_mgr_subdev_delete(_IN_ char deviceCode[DEVICE_CODE_MAXLEN])
{
int res = 0;
dm_mgr_dev_node_t *node = NULL;
INFO_PRINT("dm_mgr_subdev_delete deviceCode:%s\n",deviceCode);
res = kk_subDev_delete_by_dcode(deviceCode);//delete db data
if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return FAIL_RETURN;
}
res = dm_mgr_get_device_by_devicecode(deviceCode,&node);
if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return FAIL_RETURN;
}
if(node->dev_type == KK_DM_DEVICE_CCU){
ERROR_PRINT("ERROR [%s][%d]\n",__FUNCTION__,__LINE__);
return FAIL_RETURN;
}
list_del(&node->linked_list);
if (node->dev_shadow) {
kk_tsl_destroy(&node->dev_shadow);
}
free(node);
node = NULL;
return SUCCESS_RETURN;
}
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "kk_log.h" #include "kk_log.h"
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,\"time\":\"%lu\",\"method\":\"%s\"}";
const char DM_MSG_INFO[] DM_READ_ONLY = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}"; const char DM_MSG_INFO[] DM_READ_ONLY = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}";
void kk_sendData2app(void *info, void *payload){ void kk_sendData2app(void *info, void *payload){
...@@ -502,14 +502,14 @@ int dm_msg_request (_IN_ dm_msg_request_t *request) ...@@ -502,14 +502,14 @@ int dm_msg_request (_IN_ dm_msg_request_t *request)
} }
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 + 20;
payload = malloc(payload_len); payload = malloc(payload_len);
if (payload == NULL) { if (payload == NULL) {
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,HAL_UptimeMs(), request->method);
req_info_len = strlen(DM_MSG_INFO)+10+strlen(request->productCode)+strlen(request->deviceCode)+strlen(request->msgTypeStr)+1; req_info_len = strlen(DM_MSG_INFO)+10+strlen(request->productCode)+strlen(request->deviceCode)+strlen(request->msgTypeStr)+1;
req_info = malloc(req_info_len); req_info = malloc(req_info_len);
......
...@@ -116,8 +116,9 @@ static int _kk_load_subDevice(void) ...@@ -116,8 +116,9 @@ static int _kk_load_subDevice(void)
usleep(100000); usleep(100000);
//如果为认证,需要认证 //如果为认证,需要认证
//再上线 //再上线
iotx_dm_subscribe(devId); iotx_dm_subscribe(devId);
kk_dm_ota_report_version(devId,sqlite3_column_text(stmt, DB_VERSION));//version kk_dm_ota_report_version(devId,sqlite3_column_text(stmt, DB_VERSION));//version
//usleep(100000); //usleep(100000);
} }
...@@ -205,7 +206,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ ...@@ -205,7 +206,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
} }
int kk_subDev_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN]) int kk_subDev_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN])
{ {
const char *deleteCmd = "delete from SubDeviceInfo where deviceCode = %s;"; const char *deleteCmd = "delete from SubDeviceInfo where deviceCode = '%s';";
char *sqlCmd = NULL; char *sqlCmd = NULL;
int rc = 0; int rc = 0;
char *zErrMsg = 0; char *zErrMsg = 0;
......
...@@ -8,7 +8,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ ...@@ -8,7 +8,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
int kk_subDev_delete_byMac(char device_mac[DEVICE_MAC_MAXLEN]); int kk_subDev_delete_byMac(char device_mac[DEVICE_MAC_MAXLEN]);
int kk_subDev_update_online(int isOnline,const char *device_mac); int kk_subDev_update_offline(int isOnline,const char *device_mac);
int kk_subDev_update_auth(int isAuth,const char *deviceCode); int kk_subDev_update_auth(int isAuth,const char *deviceCode);
......
...@@ -195,7 +195,14 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -195,7 +195,14 @@ void kk_platMsg_handle(void* data, char* chalMark){
kk_tsl_property_set_by_devicecode(info_dcode->valuestring, outstr, strlen(outstr)+1); kk_tsl_property_set_by_devicecode(info_dcode->valuestring, outstr, strlen(outstr)+1);
free(outstr); free(outstr);
}else{ }else if(strstr(msgType->valuestring, "/thing/topo/delete") != NULL){
INFO_PRINT("kk_platMsg_handle data: handle delete\n");
devCode = cJSON_GetObjectItem(jsonPay, "deviceCode");
kk_ipc_send(IPC_MID2APP,data,strlen(data));
dm_mgr_subdev_delete(devCode->valuestring);
}else{
INFO_PRINT("kk_platMsg_handle data: don't handle it [%s]\n",data); INFO_PRINT("kk_platMsg_handle data: don't handle it [%s]\n",data);
//kk_tsl_service_property_set(topic->valuestring, payload->valuestring, strlen(payload->valuestring), NULL); //kk_tsl_service_property_set(topic->valuestring, payload->valuestring, strlen(payload->valuestring), NULL);
...@@ -528,256 +535,6 @@ int main(const int argc, const char **argv) ...@@ -528,256 +535,6 @@ int main(const int argc, const char **argv)
kk_set_product_info(); kk_set_product_info();
kk_tsl_api_init(); kk_tsl_api_init();
#if 0
tsl_str = kk_load_json("15", KK_DM_DEVICE_CCU);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("2", KK_DM_DEVICE_GATEWAY);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("11", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("24", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("83", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("84", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("85", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("89", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("90", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("91", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("96", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("97", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("98", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("102", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("103", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("104", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("105", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("106", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("1002", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("1003", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("1004", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("1007", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("1022", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
tsl_str = kk_load_json("2102", KK_DM_DEVICE_SUBDEV);
if(tsl_str != NULL)
{
res = kk_tsl_create(tsl_str,strlen(tsl_str),&dev_shadow[i]);
free(tsl_str);
if(res != 0){
return FAIL_RETURN;
}
}
i++;
#endif
#if 1
kk_ipc_init(IPC_MID2APP, mid_cb, NULL, NULL); kk_ipc_init(IPC_MID2APP, mid_cb, NULL, NULL);
kk_ipc_init(IPC_MID2PLAT, mid2p_cb, NULL, "*"); kk_ipc_init(IPC_MID2PLAT, mid2p_cb, NULL, "*");
...@@ -826,8 +583,6 @@ int main(const int argc, const char **argv) ...@@ -826,8 +583,6 @@ int main(const int argc, const char **argv)
return -1; return -1;
} }
#endif
int ct = 0; int ct = 0;
for (;;) { for (;;) {
usleep(200000); usleep(200000);
......
...@@ -1753,3 +1753,172 @@ int kk_tsl_post_service(int devId, const char *service_identifier, int response_ ...@@ -1753,3 +1753,172 @@ int kk_tsl_post_service(int devId, const char *service_identifier, int response_
} }
static void __kk_tsl_property_free(_IN_ kk_tsl_data_t *property)
{
if (property->identifier) {
free(property->identifier);
property->identifier = NULL;
}
kk_tsl_datavalue_free(&property->data_value);
}
static void _kk_tsl_properties_free(_IN_ kk_tsl_data_t *properties, _IN_ int number)
{
int index = 0;
kk_tsl_data_t *property = NULL;
for (index = 0; index < number; index++) {
property = properties + index;
__kk_tsl_property_free(property);
}
}
static void _kk_tsl_event_outputdata_free(_IN_ kk_tsl_data_t *outputdata)
{
if (outputdata->identifier) {
free(outputdata->identifier);
outputdata->identifier = NULL;
}
kk_tsl_datavalue_free(&outputdata->data_value);
}
static void _kk_tsl_event_outputdatas_free(_IN_ kk_tsl_data_t *outputdatas, _IN_ int number)
{
int index = 0;
kk_tsl_data_t *outputdata = NULL;
for (index = 0; index < number; index++) {
outputdata = outputdatas + index;
_kk_tsl_event_outputdata_free(outputdata);
}
}
static void _kk_tsl_event_free(_IN_ kk_tsl_event_t *event)
{
if (event->identifier) {
free(event->identifier);
event->identifier = NULL;
}
if (event->output_datas) {
_kk_tsl_event_outputdatas_free(event->output_datas, event->output_data_number);
free(event->output_datas);
event->output_datas = NULL;
}
}
static void _kk_tsl_events_free(_IN_ kk_tsl_event_t *events, _IN_ int number)
{
int index = 0;
kk_tsl_event_t *event = NULL;
for (index = 0; index < number; index++) {
event = events + index;
_kk_tsl_event_free(event);
}
}
static void _kk_tsl_service_outputdata_free(_IN_ kk_tsl_data_t *outputdata)
{
if (outputdata->identifier) {
free(outputdata->identifier);
outputdata->identifier = NULL;
}
kk_tsl_datavalue_free(&outputdata->data_value);
}
static void _kk_tsl_service_outputdatas_free(_IN_ kk_tsl_data_t *outputdatas, _IN_ int number)
{
int index = 0;
kk_tsl_data_t *outputdata = NULL;
for (index = 0; index < number; index++) {
outputdata = outputdatas + index;
_kk_tsl_service_outputdata_free(outputdata);
}
}
static void _kk_tsl_service_inputdata_free(_IN_ kk_tsl_data_t *inputdata)
{
if (inputdata->identifier) {
free(inputdata->identifier);
inputdata->identifier = NULL;
}
kk_tsl_datavalue_free(&inputdata->data_value);
}
static void _kk_tsl_service_inputdatas_free(_IN_ kk_tsl_data_t *inputdatas, _IN_ int number)
{
int index = 0;
kk_tsl_data_t *inputdata = NULL;
for (index = 0; index < number; index++) {
inputdata = inputdatas + index;
_kk_tsl_service_inputdata_free(inputdata);
}
}
static void _kk_tsl_service_free(_IN_ kk_tsl_service_t *service)
{
if (service->identifier) {
free(service->identifier);
service->identifier = NULL;
}
if (service->output_datas) {
_kk_tsl_service_outputdatas_free(service->output_datas, service->output_data_number);
free(service->output_datas);
service->output_datas = NULL;
}
if (service->input_datas) {
_kk_tsl_service_inputdatas_free(service->input_datas, service->input_data_number);
free(service->input_datas);
service->input_datas = NULL;
}
}
static void _kk_tsl_services_free(_IN_ kk_tsl_service_t *services, _IN_ int number)
{
int index = 0;
kk_tsl_service_t *service = NULL;
for (index = 0; index < number; index++) {
service = services + index;
_kk_tsl_service_free(service);
}
}
void kk_tsl_destroy(_IN_ kk_tsl_t **shadow)
{
if (shadow == NULL || *shadow == NULL) {
return;
}
_kk_tsl_api_lock();
/* Free Properties */
if ((*shadow)->properties) {
_kk_tsl_properties_free((*shadow)->properties, (*shadow)->property_number);
free((*shadow)->properties);
(*shadow)->properties = NULL;
}
/* Free Events */
if ((*shadow)->events) {
_kk_tsl_events_free((*shadow)->events, (*shadow)->event_number);
free((*shadow)->events);
(*shadow)->events = NULL;
}
/* Free Services */
if ((*shadow)->services) {
_kk_tsl_services_free((*shadow)->services, (*shadow)->service_number);
free((*shadow)->services);
(*shadow)->services = NULL;
}
free(*shadow);
*shadow = NULL;
_kk_tsl_api_unlock();
}
...@@ -1131,5 +1131,12 @@ int kk_tsl_get_service_input_output_value(_IN_ kk_tsl_data_target_e type, _IN_ k ...@@ -1131,5 +1131,12 @@ int kk_tsl_get_service_input_output_value(_IN_ kk_tsl_data_target_e type, _IN_ k
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
void kk_tsl_datavalue_free(kk_tsl_data_value_t *data_value)
{
if (g_iotx_data_type_mapping[data_value->type].func_free == NULL) {
return;
}
g_iotx_data_type_mapping[data_value->type].func_free(data_value);
}
...@@ -136,11 +136,33 @@ int kk_sub_tsl_add(EmberEUI64 device_mac,const char *productCode) ...@@ -136,11 +136,33 @@ int kk_sub_tsl_add(EmberEUI64 device_mac,const char *productCode)
_sub_dev_mutex_unlock(); _sub_dev_mutex_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_sub_tsl_delete(EmberEUI64 device_mac)
{
sub_dev_node_t *node = NULL;
kk_sub_dev_ctx_t *ctx = _sub_dev_get_ctx();
char *tsl_str = NULL;
int res = 0;
char macString[19] = {0};
rpc_eui64ToString(device_mac,macString);
_sub_dev_mutex_lock();
res = kk_sub_tsl_get_device_by_mac(macString, &node);
if (res != SUCCESS_RETURN) {
_sub_dev_mutex_unlock();
return FAIL_RETURN;
}
list_del(&node->linked_list);
free(node);
node = NULL;
_sub_dev_mutex_unlock();
return SUCCESS_RETURN;
}
int kk_sub_tsl_get_device_by_mac(_IN_ char device_mac[DEVICE_MAC_MAXLEN], _OU_ sub_dev_node_t **node) int kk_sub_tsl_get_device_by_mac(_IN_ char device_mac[DEVICE_MAC_MAXLEN], _OU_ sub_dev_node_t **node)
{ {
kk_sub_dev_ctx_t *ctx = _sub_dev_get_ctx(); kk_sub_dev_ctx_t *ctx = _sub_dev_get_ctx();
sub_dev_node_t *search_node = NULL; sub_dev_node_t *search_node = NULL;
_sub_dev_mutex_lock();
list_for_each_entry(search_node, &ctx->dev_list, linked_list, sub_dev_node_t) { list_for_each_entry(search_node, &ctx->dev_list, linked_list, sub_dev_node_t) {
if ((strlen(search_node->device_mac) == strlen(device_mac)) && if ((strlen(search_node->device_mac) == strlen(device_mac)) &&
...@@ -152,13 +174,11 @@ int kk_sub_tsl_get_device_by_mac(_IN_ char device_mac[DEVICE_MAC_MAXLEN], _OU_ s ...@@ -152,13 +174,11 @@ int kk_sub_tsl_get_device_by_mac(_IN_ char device_mac[DEVICE_MAC_MAXLEN], _OU_ s
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
} }
_sub_dev_mutex_unlock();
printf("Device Not Found, device_mac: %s\n", device_mac); printf("Device Not Found, device_mac: %s\n", device_mac);
return FAIL_RETURN; return FAIL_RETURN;
} }
const char DM_MSG_REQUEST[] = "{\"LightStatus\":\"1\"}";
int kk_test(void) int kk_test(void)
{ {
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
......
...@@ -12,8 +12,9 @@ static void kk_rpc_send_message(cJSON *data,char *msgtype,char *method,EmberEUI6 ...@@ -12,8 +12,9 @@ static void kk_rpc_send_message(cJSON *data,char *msgtype,char *method,EmberEUI6
cJSON *info = rpc_cJSON_CreateObject(); cJSON *info = rpc_cJSON_CreateObject();
if(info != NULL){ if(info != NULL){
rpc_cJSON_AddStringToObject(info, "msgType",msgtype); rpc_cJSON_AddStringToObject(info, "msgType",msgtype);
rpc_cJSON_AddStringToObject(info, "productCode","24"); rpc_cJSON_AddStringToObject(info, "productCode","2");
rpc_eui64ToString(mac,macString); rpc_eui64ToString(mac,macString);
rpc_cJSON_AddStringToObject(info, "deviceCode",macString); rpc_cJSON_AddStringToObject(info, "deviceCode",macString);
} }
...@@ -41,8 +42,14 @@ void kk_rpc_report_devices(cJSON *data,EmberEUI64 mac) ...@@ -41,8 +42,14 @@ void kk_rpc_report_devices(cJSON *data,EmberEUI64 mac)
{ {
kk_rpc_send_message(data,KK_REPORT_DEVICE_JOINED_TYPE,KK_REPORT_DEVICE_JOINED_METHOD,mac); kk_rpc_send_message(data,KK_REPORT_DEVICE_JOINED_TYPE,KK_REPORT_DEVICE_JOINED_METHOD,mac);
} }
void kk_rpc_report_left_devices(cJSON *data,EmberEUI64 mac)
{
kk_rpc_send_message(data,KK_REPORT_DEVICE_LEFT_TYPE,KK_REPORT_DEVICE_LEAVE_METHOD,mac);
}
void kk_rpc_report_status(cJSON *data,EmberEUI64 mac) void kk_rpc_report_status(cJSON *data,EmberEUI64 mac)
{ {
kk_rpc_send_message(data,KK_REPORT_ATTRIBUTE_TYPE,KK_REPORT_ATTRIBUTE_METHOD,mac); kk_rpc_send_message(data,KK_REPORT_ATTRIBUTE_TYPE,KK_REPORT_ATTRIBUTE_METHOD,mac);
} }
...@@ -55,21 +62,39 @@ typedef struct{ ...@@ -55,21 +62,39 @@ typedef struct{
uint8_t productCode; uint8_t productCode;
}kk_report_device_s; }kk_report_device_s;
void kk_rpc_reportLeftDevices(EmberEUI64 mac)
{
cJSON* devicesJson;
EmberEUI64 testMac = {0x4A,0x83,0xD3,0xFE,0xFF,0x81,0x8E,0x58};
EmberEUI64 testMac_GW = {0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11};
char macString[RPC_EUI64_STRING_LENGTH];
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
devicesJson = rpc_cJSON_CreateObject();
rpc_eui64ToString(mac,macString);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
rpc_cJSON_AddStringToObject(devicesJson, "productCode",TEST_PRODUCT_CODE);
rpc_cJSON_AddStringToObject(devicesJson, "deviceCode",macString);
kk_rpc_report_left_devices(devicesJson,testMac_GW);
kk_sub_tsl_delete(mac);
}
void kk_rpc_reportDevices(kk_report_device_s device) void kk_rpc_reportDevices(EmberEUI64 mac)
{ {
cJSON* devicesJson; cJSON* devicesJson;
EmberEUI64 testMac = {0x4A,0x83,0xD3,0xFE,0xFF,0x81,0x8E,0x58};
EmberEUI64 testMac_GW = {0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11};
devicesJson = rpc_cJSON_CreateObject(); devicesJson = rpc_cJSON_CreateObject();
rpc_cJSON_AddAppVersionToObject(devicesJson,device.AppVersion);
rpc_cJSON_AddStringToObject(devicesJson, "deviceType","1");
rpc_cJSON_AddStringToObject(devicesJson, "deviceCode","2");
rpc_cJSON_AddStringToObject(devicesJson, "productType","3");
rpc_cJSON_AddStringToObject(devicesJson, "productCode",TEST_PRODUCT_CODE); rpc_cJSON_AddStringToObject(devicesJson, "productCode",TEST_PRODUCT_CODE);
kk_sub_tsl_add(device.mac,TEST_PRODUCT_CODE); rpc_cJSON_AddStringToObject(devicesJson, "deviceCode","588E81FFFED3834A");
kk_rpc_report_devices(devicesJson,device.mac); rpc_cJSON_AddStringToObject(devicesJson, "mac","588E81FFFED3834A");
kk_sub_tsl_add(testMac,TEST_PRODUCT_CODE);
kk_rpc_report_devices(devicesJson,testMac_GW);
} }
int kk_rpc_report_LightStatus(EmberEUI64 mac,int status,uint16_t clusterId,uint16_t attributeId) int kk_rpc_report_LightStatus(EmberEUI64 mac,int status,uint16_t clusterId,uint16_t attributeId)
{ {
...@@ -363,10 +388,10 @@ void emberAfPluginDeviceTableNewDeviceCallback(EmberEUI64 nodeEui64) ...@@ -363,10 +388,10 @@ void emberAfPluginDeviceTableNewDeviceCallback(EmberEUI64 nodeEui64)
//rpc_add_device(deviceTable[deviceTableIndex].nodeId); //rpc_add_device(deviceTable[deviceTableIndex].nodeId);
kk_report_device_s device; //kk_report_device_s device;
//device.mac = nodeEui64; //device.mac = nodeEui64;
device.AppVersion = 0x10; //device.AppVersion = 0x10;
memcpy(device.mac,nodeEui64,EUI64_SIZE); //memcpy(device.mac,nodeEui64,EUI64_SIZE);
kk_rpc_reportDevices(device); kk_rpc_reportDevices(nodeEui64);
} }
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
#include "RPC_API.h" #include "RPC_API.h"
#define KK_REPORT_DEVICE_JOINED_TYPE "/thing/topo/add" #define KK_REPORT_DEVICE_JOINED_TYPE "/thing/topo/add"
#define KK_REPORT_DEVICE_LEFT_TYPE "/thing/topo/delete"
#define KK_REPORT_ATTRIBUTE_TYPE "/thing/event/property/post" #define KK_REPORT_ATTRIBUTE_TYPE "/thing/event/property/post"
#define KK_IPC_VERSION "1.0" #define KK_IPC_VERSION "1.0"
#define KK_REPORT_DEVICE_JOINED_METHOD "thing.topo.add" #define KK_REPORT_DEVICE_JOINED_METHOD "thing.topo.add"
#define KK_REPORT_DEVICE_LEAVE_METHOD "thing.topo.leave" #define KK_REPORT_DEVICE_LEAVE_METHOD "thing.topo.delete"
#define KK_REPORT_ATTRIBUTE_METHOD "thing.event.property.post" #define KK_REPORT_ATTRIBUTE_METHOD "thing.event.property.post"
#define KK_READ_ATTRIBUTE_METHOD "thing.service.property.get" #define KK_READ_ATTRIBUTE_METHOD "thing.service.property.get"
......
...@@ -716,7 +716,8 @@ void emberAfPluginDeviceTableRejoinDeviceCallback(EmberEUI64 nodeEui64) ...@@ -716,7 +716,8 @@ void emberAfPluginDeviceTableRejoinDeviceCallback(EmberEUI64 nodeEui64)
cJSON* nodeJson = rpc_reportDeviceState("rejoin",deviceTable[deviceTableIndex].eui64); cJSON* nodeJson = rpc_reportDeviceState("rejoin",deviceTable[deviceTableIndex].eui64);
rpc_printfJSON("rejoin",nodeJson); rpc_printfJSON("rejoin",nodeJson);
rpc_send_message(nodeJson,"device rejoin"); //rpc_send_message(nodeJson,"device rejoin");
kk_rpc_reportDevices(deviceTable[deviceTableIndex].eui64);
} }
void emberAfPluginDeviceTableDeviceLeftCallback(EmberEUI64 nodeEui64) void emberAfPluginDeviceTableDeviceLeftCallback(EmberEUI64 nodeEui64)
...@@ -730,7 +731,9 @@ void emberAfPluginDeviceTableDeviceLeftCallback(EmberEUI64 nodeEui64) ...@@ -730,7 +731,9 @@ void emberAfPluginDeviceTableDeviceLeftCallback(EmberEUI64 nodeEui64)
cJSON* nodeJson = rpc_reportDeviceState("left",deviceTable[deviceTableIndex].eui64); cJSON* nodeJson = rpc_reportDeviceState("left",deviceTable[deviceTableIndex].eui64);
rpc_printfJSON("left",nodeJson); rpc_printfJSON("left",nodeJson);
rpc_send_message(nodeJson,"device left"); //rpc_send_message(nodeJson,"device left");
kk_rpc_reportLeftDevices(deviceTable[deviceTableIndex].eui64);
} }
static cJSON* rpc_buildDeviceEndpoint(EmberEUI64 eui64, uint8_t endpoint) static cJSON* rpc_buildDeviceEndpoint(EmberEUI64 eui64, uint8_t endpoint)
......
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