Commit f9cfef42 authored by 陈伟灿's avatar 陈伟灿

Merge branch 'cwc' into 'master'

【修改内容】增加物模型中heartbeat的解析

See merge request chenweican/k-sdk!38
parents 08dd429e 048c4aa3
...@@ -202,7 +202,7 @@ int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devTy ...@@ -202,7 +202,7 @@ int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devTy
} }
} }
int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN], int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN],
_IN_ char mac[DEVICE_MAC_MAXLEN],_IN_ char fatherDeviceCode[DEVICE_CODE_MAXLEN],_IN_ int isOffline, _OU_ int *devid) _IN_ char mac[DEVICE_MAC_MAXLEN],_IN_ char fatherDeviceCode[DEVICE_CODE_MAXLEN],_IN_ int isOffline, _OU_ int *devid,_OU_ int *heartbeat)
{ {
int res = 0; int res = 0;
dm_mgr_ctx *ctx = _dm_mgr_get_ctx(); dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
...@@ -253,11 +253,13 @@ int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MA ...@@ -253,11 +253,13 @@ int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MA
tsl_str = kk_load_json(productCode, dev_type); tsl_str = kk_load_json(productCode, dev_type);
if(tsl_str != NULL) if(tsl_str != NULL)
{ {
res = kk_tsl_create(tsl_str,strlen(tsl_str),&node->dev_shadow); int heartbeat = 0;
res = kk_tsl_create(tsl_str,strlen(tsl_str),&node->dev_shadow,&heartbeat);
free(tsl_str); free(tsl_str);
if(res != 0){ if(res != 0){
return FAIL_RETURN; return FAIL_RETURN;
} }
node->hb_timeout = heartbeat;
} }
else{ else{
return FAIL_RETURN; return FAIL_RETURN;
...@@ -273,6 +275,9 @@ int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MA ...@@ -273,6 +275,9 @@ int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MA
if (devid) { if (devid) {
*devid = node->devid; *devid = node->devid;
} }
if (heartbeat){
*heartbeat = node->hb_timeout;
}
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -390,7 +395,10 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp) ...@@ -390,7 +395,10 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp)
if(search_node->dev_type == KK_DM_DEVICE_CCU){ if(search_node->dev_type == KK_DM_DEVICE_CCU){
continue; continue;
} }
if((timestamp - search_node->timestamp) >= TEST_TIMEOUT/*search_node->hb_timeout*/){ if(search_node->hb_timeout == 0){
search_node->hb_timeout = TEST_TIMEOUT;
}
if((timestamp - search_node->timestamp) >= search_node->hb_timeout/*search_node->hb_timeout*/){
if(search_node->isOffline == 0){ if(search_node->isOffline == 0){
INFO_PRINT("---------->dev timeout,send offline\n"); INFO_PRINT("---------->dev timeout,send offline\n");
...@@ -398,9 +406,7 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp) ...@@ -398,9 +406,7 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp)
iotx_dm_dev_offline(search_node->devid); iotx_dm_dev_offline(search_node->devid);
kk_subDev_update_offline(search_node->isOffline,search_node->deviceCode); kk_subDev_update_offline(search_node->isOffline,search_node->deviceCode);
} }
//_dm_mgr_mutex_unlock();
//return DEVICE_HEARTBEAT_TIMEOUT;
} }
else{ else{
if(search_node->isOffline == 1 && search_node->timestamp != 0) {//need send online if(search_node->isOffline == 1 && search_node->timestamp != 0) {//need send online
...@@ -458,7 +464,7 @@ int dm_mgr_init(void) ...@@ -458,7 +464,7 @@ int dm_mgr_init(void)
char productCode[PRODUCT_CODE_MAXLEN] = {0}; char productCode[PRODUCT_CODE_MAXLEN] = {0};
char deviceCode[DEVICE_CODE_MAXLEN]= {0}; char deviceCode[DEVICE_CODE_MAXLEN]= {0};
char mac[DEVICE_MAC_MAXLEN]= {0}; char mac[DEVICE_MAC_MAXLEN]= {0};
int devId = 0; int devId = 0,heartbeat = 0;
memset(ctx, 0, sizeof(dm_mgr_ctx)); memset(ctx, 0, sizeof(dm_mgr_ctx));
/* Create Mutex */ /* Create Mutex */
...@@ -474,7 +480,7 @@ int dm_mgr_init(void) ...@@ -474,7 +480,7 @@ int dm_mgr_init(void)
HAL_Get_mac(mac); HAL_Get_mac(mac);
res = dm_mgr_device_create(KK_DM_DEVICE_CCU,KK_DM_CCU_DEVICE_PRODUCT_CODE,"CCU_66666",mac,"",0,&devId); res = dm_mgr_device_create(KK_DM_DEVICE_CCU,KK_DM_CCU_DEVICE_PRODUCT_CODE,"CCU_66666",mac,"",0,&devId,&heartbeat);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
goto ERROR; goto ERROR;
} }
...@@ -1415,10 +1421,10 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version) ...@@ -1415,10 +1421,10 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version)
int dm_mgr_subdev_create(int devtype,_IN_ char productCode[PRODUCT_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN], int dm_mgr_subdev_create(int devtype,_IN_ char productCode[PRODUCT_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN],
_IN_ char mac[DEVICE_MAC_MAXLEN],_IN_ char fatherDeviceCode[DEVICE_CODE_MAXLEN],_IN_ int isOffline, _OU_ int *devid){ _IN_ char mac[DEVICE_MAC_MAXLEN],_IN_ char fatherDeviceCode[DEVICE_CODE_MAXLEN],_IN_ int isOffline, _OU_ int *devid,_OU_ int *heartbeat){
int res = 0; int res = 0;
res = dm_mgr_device_create(devtype,productCode,deviceCode,mac,fatherDeviceCode,isOffline,devid); res = dm_mgr_device_create(devtype,productCode,deviceCode,mac,fatherDeviceCode,isOffline,devid,heartbeat);
if(TSL_ALREADY_EXIST == res) if(TSL_ALREADY_EXIST == res)
{ {
ERROR_PRINT("SUBDEV ALREADY EXIST!!!\n"); ERROR_PRINT("SUBDEV ALREADY EXIST!!!\n");
......
...@@ -2029,8 +2029,8 @@ int iot_linkkit_subdev_query_id(char product_key[IOTX_PRODUCT_KEY_LEN + 1], char ...@@ -2029,8 +2029,8 @@ int iot_linkkit_subdev_query_id(char product_key[IOTX_PRODUCT_KEY_LEN + 1], char
int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char deviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN]){ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char deviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN]){
int res = 0; int res = 0;
int devid = 0; int devid = 0;
int heartbeat = 0;
res = dm_mgr_subdev_create(devType,productCode,deviceCode,mac,fatherDeviceCode,0,&devid); res = dm_mgr_subdev_create(devType,productCode,deviceCode,mac,fatherDeviceCode,0,&devid,&heartbeat);
if (res != SUCCESS_RETURN && TSL_ALREADY_EXIST != res) { if (res != SUCCESS_RETURN && TSL_ALREADY_EXIST != res) {
ERROR_PRINT("subdev create Failed\n"); ERROR_PRINT("subdev create Failed\n");
return FAIL_RETURN; return FAIL_RETURN;
...@@ -2040,7 +2040,7 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d ...@@ -2040,7 +2040,7 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d
if (TSL_ALREADY_EXIST == res){ if (TSL_ALREADY_EXIST == res){
//todo //todo
}else{ }else{
res = kk_subDev_insert_db(devType,productCode,deviceCode,fatherDeviceCode,mac,"1.1.0"); res = kk_subDev_insert_db(devType,productCode,deviceCode,fatherDeviceCode,mac,"1.1.0",heartbeat);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
} }
...@@ -2065,8 +2065,8 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d ...@@ -2065,8 +2065,8 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d
int kk_mid_subdev_batch_add( char productCode[PRODUCT_CODE_MAXLEN], char deviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN]){ int kk_mid_subdev_batch_add( char productCode[PRODUCT_CODE_MAXLEN], char deviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN]){
int res = 0; int res = 0;
int devid = 0; int devid = 0;
int heartbeat = 0;
res = dm_mgr_subdev_create(KK_DM_DEVICE_SUBDEV,productCode,deviceCode,mac,fatherDeviceCode,0,&devid); res = dm_mgr_subdev_create(KK_DM_DEVICE_SUBDEV,productCode,deviceCode,mac,fatherDeviceCode,0,&devid,&heartbeat);
if (res != SUCCESS_RETURN && TSL_ALREADY_EXIST != res) { if (res != SUCCESS_RETURN && TSL_ALREADY_EXIST != res) {
ERROR_PRINT("subdev create Failed\n"); ERROR_PRINT("subdev create Failed\n");
return FAIL_RETURN; return FAIL_RETURN;
...@@ -2076,7 +2076,7 @@ int kk_mid_subdev_batch_add( char productCode[PRODUCT_CODE_MAXLEN], char deviceC ...@@ -2076,7 +2076,7 @@ int kk_mid_subdev_batch_add( char productCode[PRODUCT_CODE_MAXLEN], char deviceC
if (TSL_ALREADY_EXIST == res){ if (TSL_ALREADY_EXIST == res){
//todo //todo
}else{ }else{
res = kk_subDev_insert_db(KK_DM_DEVICE_SUBDEV,productCode,deviceCode,fatherDeviceCode,mac,"1.1.0"); res = kk_subDev_insert_db(KK_DM_DEVICE_SUBDEV,productCode,deviceCode,fatherDeviceCode,mac,"1.1.0",heartbeat);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
} }
......
...@@ -72,7 +72,8 @@ static int kk_subDev_db_Init(void) ...@@ -72,7 +72,8 @@ static int kk_subDev_db_Init(void)
fatherDeviceCode varchar(33), \ fatherDeviceCode varchar(33), \
version varchar(33), \ version varchar(33), \
isAuth INTEGER, \ isAuth INTEGER, \
devType INTEGER)"; devType INTEGER, \
heartbeat INTEGER)";
char *pcErr; char *pcErr;
...@@ -98,7 +99,7 @@ static int _kk_load_subDevice(void) ...@@ -98,7 +99,7 @@ static int _kk_load_subDevice(void)
const char *searchCmd = "select * from SubDeviceInfo;"; const char *searchCmd = "select * from SubDeviceInfo;";
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx(); kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
int devId = 0; int devId = 0,heartbeat = 0;
int res = 0; int res = 0;
_kk_subDb_lock(); _kk_subDb_lock();
sqlite3_prepare_v2(ctx->pDb, searchCmd, strlen(searchCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, searchCmd, strlen(searchCmd), &stmt, NULL);
...@@ -108,7 +109,7 @@ static int _kk_load_subDevice(void) ...@@ -108,7 +109,7 @@ static int _kk_load_subDevice(void)
sqlite3_column_text(stmt, DB_DEVICECODE), sqlite3_column_text(stmt, DB_DEVICECODE),
sqlite3_column_text(stmt, DB_MAC), sqlite3_column_text(stmt, DB_MAC),
sqlite3_column_text(stmt, DB_FATHERDEVICECODE), sqlite3_column_text(stmt, DB_FATHERDEVICECODE),
sqlite3_column_int(stmt, DB_ONLINE),&devId); sqlite3_column_int(stmt, DB_ONLINE),&devId,&heartbeat);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
ERROR_PRINT("[%s][%d]dm_mgr_subdev_create FAIL!!!\n",__FUNCTION__,__LINE__); ERROR_PRINT("[%s][%d]dm_mgr_subdev_create FAIL!!!\n",__FUNCTION__,__LINE__);
...@@ -181,10 +182,10 @@ static int _kk_check_subDev_exist(const char* deviceCode) ...@@ -181,10 +182,10 @@ static int _kk_check_subDev_exist(const char* deviceCode)
} }
int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
char deviceCode[DEVICE_CODE_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char version[DEVICE_VERSION_MAXLEN]) char deviceCode[DEVICE_CODE_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char version[DEVICE_VERSION_MAXLEN],int heartbeat)
{ {
const char *insertCmd = "insert into SubDeviceInfo (idx,isOffline,productCode,deviceCode,mac,fatherDeviceCode,version,isAuth,devType) \ const char *insertCmd = "insert into SubDeviceInfo (idx,isOffline,productCode,deviceCode,mac,fatherDeviceCode,version,isAuth,devType,heartbeat) \
values ('%d','%d', '%s','%s','%s','%s','%s','%d','%d');"; values ('%d','%d', '%s','%s','%s','%s','%s','%d','%d','%d');";
char *sqlCmd = NULL; char *sqlCmd = NULL;
int rc = 0; int rc = 0;
char *zErrMsg = 0; char *zErrMsg = 0;
...@@ -197,7 +198,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ ...@@ -197,7 +198,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
_kk_subDb_lock(); _kk_subDb_lock();
sqlCmd = sqlite3_mprintf(insertCmd,ctx->subDevNum,0,productCode,deviceCode,mac,fatherDeviceCode,version,0,devType); sqlCmd = sqlite3_mprintf(insertCmd,ctx->subDevNum,0,productCode,deviceCode,mac,fatherDeviceCode,version,0,devType,heartbeat);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){ if( rc != SQLITE_OK ){
......
#ifndef _KK_SUBDEV_DB_H_ #ifndef _KK_SUBDEV_DB_H_
#define _KK_SUBDEV_DB_H_ #define _KK_SUBDEV_DB_H_
#include "kk_tsl_common.h" #include "kk_tsl_common.h"
int kk_subDb_init(void); int kk_subDb_init(void);
int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
char deviceCode[DEVICE_CODE_MAXLEN],char fatherMac[DEVICE_MAC_MAXLEN],char mac[DEVICE_MAC_MAXLEN], char version[DEVICE_VERSION_MAXLEN]); char deviceCode[DEVICE_CODE_MAXLEN],char fatherMac[DEVICE_MAC_MAXLEN],char mac[DEVICE_MAC_MAXLEN], char version[DEVICE_VERSION_MAXLEN],int heartbeat);
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_offline(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);
#endif #endif
...@@ -374,7 +374,10 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -374,7 +374,10 @@ void kk_platMsg_handle(void* data, char* chalMark){
int idx = 0; int idx = 0;
kk_tsl_event_t *eventItem =NULL; kk_tsl_event_t *eventItem =NULL;
char tmpStr[128] = {0}; char tmpStr[128] = {0};
dm_mgr_get_device_shadow_by_devicecode(info_dcode->valuestring,&dev_shadow); res = dm_mgr_get_device_shadow_by_devicecode(info_dcode->valuestring,&dev_shadow);
if (res < SUCCESS_RETURN) {
goto error;
}
for(idx = 0; idx < dev_shadow->event_number; idx++){ for(idx = 0; idx < dev_shadow->event_number; idx++){
eventItem = dev_shadow->events + idx; eventItem = dev_shadow->events + idx;
if(eventItem != NULL){ if(eventItem != NULL){
......
...@@ -233,6 +233,9 @@ static int _kk_msg_set_numberOrStr(kk_msg_set_type_t type, kk_tsl_t *dev_shadow, ...@@ -233,6 +233,9 @@ static int _kk_msg_set_numberOrStr(kk_msg_set_type_t type, kk_tsl_t *dev_shadow,
} }
break; break;
case KK_TSL_DATA_TYPE_DOUBLE: { case KK_TSL_DATA_TYPE_DOUBLE: {
if (root->type == cJSON_String && root->value_length > 0){
root->value_double = atof(root->value);
}
res = set_shadow_data_func(dev_shadow, key, strlen(key), &root->value_double, 0); res = set_shadow_data_func(dev_shadow, key, strlen(key), &root->value_double, 0);
} }
break; break;
......
...@@ -53,6 +53,8 @@ ...@@ -53,6 +53,8 @@
#define KK_TSL_KEY_LENGTH "length" #define KK_TSL_KEY_LENGTH "length"
#define KK_TSL_KEY_SIZE "size" #define KK_TSL_KEY_SIZE "size"
#define KK_TSL_KEY_ITEM "item" #define KK_TSL_KEY_ITEM "item"
#define KK_TSL_KEY_HEARTBEAT "heartbeat"
#define KK_MSG_KEY_DELIMITER '.' #define KK_MSG_KEY_DELIMITER '.'
#define KK_URI_SERVICE_DELIMITER '/' #define KK_URI_SERVICE_DELIMITER '/'
#define KK_URI_OFFSET 0 #define KK_URI_OFFSET 0
......
...@@ -1580,7 +1580,28 @@ int kk_tsl_assemble_service_output(_IN_ kk_tsl_t *shadow, _IN_ char *identifier, ...@@ -1580,7 +1580,28 @@ int kk_tsl_assemble_service_output(_IN_ kk_tsl_t *shadow, _IN_ char *identifier,
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow)
static int _kk_tsl_heartbeat_parse(_OU_ int *heartbeat, _IN_ lite_cjson_t *root)
{
int res = 0;
lite_cjson_t lite_item;
lite_cjson_t lite_item_heartbeat;
//Parse Identifier (Mandatory)
memset(&lite_item, 0, sizeof(lite_cjson_t));
res = lite_cjson_object_item(root, KK_TSL_KEY_PROFILE, strlen(KK_TSL_KEY_PROFILE), &lite_item);
if (res != SUCCESS_RETURN || !lite_cjson_is_object(&lite_item)) {
return JSON_PARSE_FAILED;
}
res = lite_cjson_object_item(&lite_item, KK_TSL_KEY_HEARTBEAT, strlen(KK_TSL_KEY_HEARTBEAT), &lite_item_heartbeat);
if (res != SUCCESS_RETURN || !lite_cjson_is_string(&lite_item_heartbeat)) {
return JSON_PARSE_FAILED;
}
*heartbeat = atoi(lite_item_heartbeat.value)*1000;
return SUCCESS_RETURN;
}
int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow,_OU_ int *heartbeat)
{ {
int res = 0; int res = 0;
lite_cjson_t lite_root; lite_cjson_t lite_root;
...@@ -1603,6 +1624,9 @@ int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow ...@@ -1603,6 +1624,9 @@ int kk_tsl_create(_IN_ const char *tsl, _IN_ int tsl_len, _OU_ kk_tsl_t **shadow
return JSON_PARSE_FAILED; return JSON_PARSE_FAILED;
} }
// Parse heartbeat time
_kk_tsl_heartbeat_parse(heartbeat,&lite_root);
//Parse Properties (Mandatory) //Parse Properties (Mandatory)
res = _kk_tsl_properties_parse(*shadow, &lite_root); res = _kk_tsl_properties_parse(*shadow, &lite_root);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
......
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