Commit 048c4aa3 authored by chen.weican's avatar chen.weican

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

【提交人】陈伟灿
parent 08dd429e
......@@ -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],
_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;
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
tsl_str = kk_load_json(productCode, dev_type);
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);
if(res != 0){
return FAIL_RETURN;
}
node->hb_timeout = heartbeat;
}
else{
return FAIL_RETURN;
......@@ -273,6 +275,9 @@ int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MA
if (devid) {
*devid = node->devid;
}
if (heartbeat){
*heartbeat = node->hb_timeout;
}
return SUCCESS_RETURN;
}
......@@ -390,7 +395,10 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp)
if(search_node->dev_type == KK_DM_DEVICE_CCU){
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){
INFO_PRINT("---------->dev timeout,send offline\n");
......@@ -398,9 +406,7 @@ int dm_mgr_check_heartbeat_timeout(uint64_t timestamp)
iotx_dm_dev_offline(search_node->devid);
kk_subDev_update_offline(search_node->isOffline,search_node->deviceCode);
}
//_dm_mgr_mutex_unlock();
//return DEVICE_HEARTBEAT_TIMEOUT;
}
else{
if(search_node->isOffline == 1 && search_node->timestamp != 0) {//need send online
......@@ -458,7 +464,7 @@ int dm_mgr_init(void)
char productCode[PRODUCT_CODE_MAXLEN] = {0};
char deviceCode[DEVICE_CODE_MAXLEN]= {0};
char mac[DEVICE_MAC_MAXLEN]= {0};
int devId = 0;
int devId = 0,heartbeat = 0;
memset(ctx, 0, sizeof(dm_mgr_ctx));
/* Create Mutex */
......@@ -474,7 +480,7 @@ int dm_mgr_init(void)
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) {
goto ERROR;
}
......@@ -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],
_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;
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)
{
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
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 devid = 0;
res = dm_mgr_subdev_create(devType,productCode,deviceCode,mac,fatherDeviceCode,0,&devid);
int heartbeat = 0;
res = dm_mgr_subdev_create(devType,productCode,deviceCode,mac,fatherDeviceCode,0,&devid,&heartbeat);
if (res != SUCCESS_RETURN && TSL_ALREADY_EXIST != res) {
ERROR_PRINT("subdev create Failed\n");
return FAIL_RETURN;
......@@ -2040,7 +2040,7 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d
if (TSL_ALREADY_EXIST == res){
//todo
}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) {
return FAIL_RETURN;
}
......@@ -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 res = 0;
int devid = 0;
res = dm_mgr_subdev_create(KK_DM_DEVICE_SUBDEV,productCode,deviceCode,mac,fatherDeviceCode,0,&devid);
int heartbeat = 0;
res = dm_mgr_subdev_create(KK_DM_DEVICE_SUBDEV,productCode,deviceCode,mac,fatherDeviceCode,0,&devid,&heartbeat);
if (res != SUCCESS_RETURN && TSL_ALREADY_EXIST != res) {
ERROR_PRINT("subdev create Failed\n");
return FAIL_RETURN;
......@@ -2076,7 +2076,7 @@ int kk_mid_subdev_batch_add( char productCode[PRODUCT_CODE_MAXLEN], char deviceC
if (TSL_ALREADY_EXIST == res){
//todo
}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) {
return FAIL_RETURN;
}
......
......@@ -72,7 +72,8 @@ static int kk_subDev_db_Init(void)
fatherDeviceCode varchar(33), \
version varchar(33), \
isAuth INTEGER, \
devType INTEGER)";
devType INTEGER, \
heartbeat INTEGER)";
char *pcErr;
......@@ -98,7 +99,7 @@ static int _kk_load_subDevice(void)
const char *searchCmd = "select * from SubDeviceInfo;";
sqlite3_stmt *stmt;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
int devId = 0;
int devId = 0,heartbeat = 0;
int res = 0;
_kk_subDb_lock();
sqlite3_prepare_v2(ctx->pDb, searchCmd, strlen(searchCmd), &stmt, NULL);
......@@ -108,7 +109,7 @@ static int _kk_load_subDevice(void)
sqlite3_column_text(stmt, DB_DEVICECODE),
sqlite3_column_text(stmt, DB_MAC),
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){
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)
}
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) \
values ('%d','%d', '%s','%s','%s','%s','%s','%d','%d');";
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','%d');";
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
......@@ -197,7 +198,7 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
return SUCCESS_RETURN;
}
_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);
if( rc != SQLITE_OK ){
......
#ifndef _KK_SUBDEV_DB_H_
#define _KK_SUBDEV_DB_H_
#include "kk_tsl_common.h"
int kk_subDb_init(void);
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]);
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_auth(int isAuth,const char *deviceCode);
#endif
#ifndef _KK_SUBDEV_DB_H_
#define _KK_SUBDEV_DB_H_
#include "kk_tsl_common.h"
int kk_subDb_init(void);
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],int heartbeat);
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_auth(int isAuth,const char *deviceCode);
#endif
......@@ -374,7 +374,10 @@ void kk_platMsg_handle(void* data, char* chalMark){
int idx = 0;
kk_tsl_event_t *eventItem =NULL;
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++){
eventItem = dev_shadow->events + idx;
if(eventItem != NULL){
......
......@@ -233,6 +233,9 @@ static int _kk_msg_set_numberOrStr(kk_msg_set_type_t type, kk_tsl_t *dev_shadow,
}
break;
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);
}
break;
......
......@@ -53,6 +53,8 @@
#define KK_TSL_KEY_LENGTH "length"
#define KK_TSL_KEY_SIZE "size"
#define KK_TSL_KEY_ITEM "item"
#define KK_TSL_KEY_HEARTBEAT "heartbeat"
#define KK_MSG_KEY_DELIMITER '.'
#define KK_URI_SERVICE_DELIMITER '/'
#define KK_URI_OFFSET 0
......
......@@ -1580,7 +1580,28 @@ int kk_tsl_assemble_service_output(_IN_ kk_tsl_t *shadow, _IN_ char *identifier,
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;
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
return JSON_PARSE_FAILED;
}
// Parse heartbeat time
_kk_tsl_heartbeat_parse(heartbeat,&lite_root);
//Parse Properties (Mandatory)
res = _kk_tsl_properties_parse(*shadow, &lite_root);
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