Commit 9aa96c00 authored by 陈伟灿's avatar 陈伟灿

Merge branch 'cwc' into 'master'

Cwc

See merge request chenweican/k-sdk!13
parents 4dcf5660 70cb1a92
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include "klist.h" #include "klist.h"
#include "kk_log.h" #include "kk_log.h"
#include "kk_tsl_common.h" #include "kk_tsl_common.h"
#include "kk_dm_mng.h" #include "kk_dm_mng.h"
typedef struct { typedef struct {
void *mutex; void *mutex;
void *hearbeat_thread; void *hearbeat_thread;
int hearbeat_thread_running; int hearbeat_thread_running;
//struct list_head dev_list; //struct list_head dev_list;
} kk_heartbeat_ctx_t; } kk_heartbeat_ctx_t;
#if 0 #if 0
typedef struct { typedef struct {
unsigned int timerstamp; unsigned int timerstamp;
char deviceCode[DEVICE_CODE_MAXLEN]; char deviceCode[DEVICE_CODE_MAXLEN];
struct list_head linked_list; struct list_head linked_list;
} kk_dev_heartbeat_node_t; } kk_dev_heartbeat_node_t;
static int _kk_add_heartbeat_node(const char* deviceCode,unsigned int timestamp) static int _kk_add_heartbeat_node(const char* deviceCode,unsigned int timestamp)
{ {
kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx(); kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx();
kk_dev_heartbeat_node_t *node = NULL; kk_dev_heartbeat_node_t *node = NULL;
node = malloc(sizeof(kk_dev_heartbeat_node_t)); node = malloc(sizeof(kk_dev_heartbeat_node_t));
if (node == NULL) { if (node == NULL) {
return MEMORY_NOT_ENOUGH; return MEMORY_NOT_ENOUGH;
} }
_kk_heartbeat_lock(); _kk_heartbeat_lock();
memset(node,0x0,sizeof(kk_dev_heartbeat_node_t)); memset(node,0x0,sizeof(kk_dev_heartbeat_node_t));
memcpy(node->deviceCode,deviceCode,strlen(deviceCode)); memcpy(node->deviceCode,deviceCode,strlen(deviceCode));
node->timerstamp = timestamp; node->timerstamp = timestamp;
INIT_LIST_HEAD(&node->linked_list); INIT_LIST_HEAD(&node->linked_list);
list_add_tail(&node->linked_list, &ctx->dev_list); list_add_tail(&node->linked_list, &ctx->dev_list);
_kk_heartbeat_unlock(); _kk_heartbeat_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_heartbeat_update_time(const char deviceCode[DEVICE_CODE_MAXLEN],unsigned int timestamp) int kk_heartbeat_update_time(const char deviceCode[DEVICE_CODE_MAXLEN],unsigned int timestamp)
{ {
kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx(); kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx();
kk_dev_heartbeat_node_t *search_node = NULL; kk_dev_heartbeat_node_t *search_node = NULL;
_kk_heartbeat_lock(); _kk_heartbeat_lock();
list_for_each_entry(search_node, &ctx->dev_list, linked_list, kk_dev_heartbeat_node_t) { list_for_each_entry(search_node, &ctx->dev_list, linked_list, kk_dev_heartbeat_node_t) {
if ( (strlen(search_node->deviceCode) == strlen(deviceCode)) && if ( (strlen(search_node->deviceCode) == strlen(deviceCode)) &&
(memcmp(search_node->deviceCode, deviceCode, strlen(deviceCode)) == 0)) { (memcmp(search_node->deviceCode, deviceCode, strlen(deviceCode)) == 0)) {
search_node->timerstamp = timestamp; search_node->timerstamp = timestamp;
_kk_heartbeat_unlock(); _kk_heartbeat_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
} }
_kk_add_heartbeat_node(deviceCode,timestamp); _kk_add_heartbeat_node(deviceCode,timestamp);
_kk_heartbeat_unlock(); _kk_heartbeat_unlock();
return FAIL_RETURN; return FAIL_RETURN;
} }
#endif #endif
static kk_heartbeat_ctx_t s_kk_heartbeat_ctx = {0}; static kk_heartbeat_ctx_t s_kk_heartbeat_ctx = {0};
static kk_heartbeat_ctx_t *_kk_heartbeat_get_ctx(void) static kk_heartbeat_ctx_t *_kk_heartbeat_get_ctx(void)
{ {
return &s_kk_heartbeat_ctx; return &s_kk_heartbeat_ctx;
} }
static void _kk_heartbeat_lock(void) static void _kk_heartbeat_lock(void)
{ {
kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx(); kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx();
if (ctx->mutex) { if (ctx->mutex) {
HAL_MutexLock(ctx->mutex); HAL_MutexLock(ctx->mutex);
} }
} }
static void _kk_heartbeat_unlock(void) static void _kk_heartbeat_unlock(void)
{ {
kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx(); kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx();
if (ctx->mutex) { if (ctx->mutex) {
HAL_MutexUnlock(ctx->mutex); HAL_MutexUnlock(ctx->mutex);
} }
} }
uint64_t s_start_time = 0;
void *kk_heartbeat_yield(void *args)
{ void *kk_heartbeat_yield(void *args)
kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx(); {
uint64_t current_time = 0; kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx();
dm_mgr_dev_node_t *search_node = NULL; uint64_t current_time = 0;
while (ctx->hearbeat_thread_running) { dm_mgr_dev_node_t *search_node = NULL;
current_time = HAL_UptimeMs(); while (ctx->hearbeat_thread_running) {
_kk_heartbeat_lock(); current_time = HAL_UptimeMs() - s_start_time;
dm_mgr_check_heartbeat_timeout(current_time); _kk_heartbeat_lock();
_kk_heartbeat_unlock(); dm_mgr_check_heartbeat_timeout(current_time);
sleep(30); _kk_heartbeat_unlock();
} sleep(30);
return NULL; }
} return NULL;
}
int kk_heartbeat_init(void)
{ int kk_heartbeat_init(void)
int res = 0; {
kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx(); int res = 0;
/* Create Mutex */ kk_heartbeat_ctx_t *ctx = _kk_heartbeat_get_ctx();
ctx->mutex = HAL_MutexCreate(); /* Create Mutex */
if (ctx->mutex == NULL) { ctx->mutex = HAL_MutexCreate();
return FAIL_RETURN; if (ctx->mutex == NULL) {
} return FAIL_RETURN;
/* Init Device Id*/ }
ctx->hearbeat_thread_running = 1; /* Init Device Id*/
ctx->hearbeat_thread_running = 1;
res = pthread_create(&ctx->hearbeat_thread, NULL, kk_heartbeat_yield, NULL); s_start_time = HAL_UptimeMs();
if (res < 0) {
ERROR_PRINT("HAL_ThreadCreate ota Failed\n"); res = pthread_create(&ctx->hearbeat_thread, NULL, kk_heartbeat_yield, NULL);
//IOT_Linkkit_Close(mid_ctx->master_devid); if (res < 0) {
return FAIL_RETURN; ERROR_PRINT("HAL_ThreadCreate ota Failed\n");
} //IOT_Linkkit_Close(mid_ctx->master_devid);
return SUCCESS_RETURN; return FAIL_RETURN;
}
/* Init Device List */ return SUCCESS_RETURN;
// INIT_LIST_HEAD(&ctx->dev_list);
/* Init Device List */
} // INIT_LIST_HEAD(&ctx->dev_list);
}
...@@ -158,7 +158,7 @@ void gw2mid_cb(void* data, int len, char* chalMark){ ...@@ -158,7 +158,7 @@ void gw2mid_cb(void* data, int len, char* chalMark){
} }
} }
extern uint64_t s_start_time;
void kk_platMsg_handle(void* data, char* chalMark){ void kk_platMsg_handle(void* data, char* chalMark){
char *out; char *out;
...@@ -197,10 +197,10 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -197,10 +197,10 @@ void kk_platMsg_handle(void* data, char* chalMark){
} }
if (chalMark != NULL){ if (chalMark != NULL){
dm_mgr_update_timestamp_by_devicecode(chalMark,HAL_UptimeMs()); dm_mgr_update_timestamp_by_devicecode(chalMark,HAL_UptimeMs()-s_start_time);
} }
dm_mgr_update_timestamp_by_devicecode(info_dcode->valuestring,HAL_UptimeMs()); dm_mgr_update_timestamp_by_devicecode(info_dcode->valuestring,HAL_UptimeMs()-s_start_time);
if (strcmp(msgType->valuestring, KK_THING_TOPO_ADD_MSG)==0){ if (strcmp(msgType->valuestring, KK_THING_TOPO_ADD_MSG)==0){
proCode = cJSON_GetObjectItem(jsonPay, MSG_PRODUCT_CODE_STR); proCode = cJSON_GetObjectItem(jsonPay, MSG_PRODUCT_CODE_STR);
......
...@@ -209,7 +209,7 @@ void kk_device_table_delete(EmberEUI64 mac) ...@@ -209,7 +209,7 @@ void kk_device_table_delete(EmberEUI64 mac)
if(MEMCOMPARE(ptr->mac,mac,sizeof(EmberEUI64))==0){ if(MEMCOMPARE(ptr->mac,mac,sizeof(EmberEUI64))==0){
if(ptr->next==NULL){ if(ptr->next==NULL){
free(ptr); free(ptr);
kk_zb_device_table = NULL; ptr_temp->next = NULL;
emberAfCorePrintln("[KK device table]delete,now is empty !!!"); emberAfCorePrintln("[KK device table]delete,now is empty !!!");
return ; return ;
}else{ }else{
......
...@@ -5,17 +5,19 @@ do ...@@ -5,17 +5,19 @@ do
sleep 30 sleep 30
PIDS=`ps|grep kk_midware |grep -v grep | awk '{print $1}'` PIDS=`ps|grep kk_midware |grep -v grep | awk '{print $1}'`
if [ "$PIDS" != "" ]; then if [ "$PIDS" != "" ]; then
echo "kk_midware is runing!" echo "kk_midware is runing!"
else else
/home/kk/kk_midware >/dev/null 2>&1 & /home/kk/kk_midware >/dev/null 2>&1 &
#运行进程 #运行进程
fi fi
sleep 30 sleep 30
PIDS=`ps|grep kcloud |grep -v grep | awk '{print $1}'` PIDS=`ps|grep kcloud |grep -v grep | awk '{print $1}'`
if [ "$PIDS" != "" ]; then if [ "$PIDS" != "" ]; then
echo "kcloud is runing!" echo "kcloud is runing!"
else else
/home/kk/kcloud >/dev/null 2>&1 & echo "kcloud is not running ,now restart kk_midware and kcloud"
#运行进程 pgrep kk_midware | xargs kill -s 9
/home/kk/kk_midware >/dev/null 2>&1 &
/home/kk/kcloud >/dev/null 2>&1 &
fi fi
done done
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