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

Merge branch 'yjq' into 'master'

局域网

See merge request chenweican/k-sdk!133
parents 4c4600c3 5cc42166
...@@ -65,7 +65,7 @@ char *strrpl(char *in, char *out, int outlen, char *src, char *dst) ...@@ -65,7 +65,7 @@ char *strrpl(char *in, char *out, int outlen, char *src, char *dst)
} }
return out; return out;
} }
static char * _kk_data_create(char *msgtype,const char *productCode,const char *deviceCode,const char *param) char * _kk_data_create(char *msgtype,const char *productCode,const char *deviceCode,const char *param)
{ {
cJSON *root; cJSON *root;
cJSON *payload; cJSON *payload;
...@@ -108,31 +108,20 @@ static char * _kk_data_create(char *msgtype,const char *productCode,const char * ...@@ -108,31 +108,20 @@ static char * _kk_data_create(char *msgtype,const char *productCode,const char *
return out; return out;
//free(out); /* Print to text, Delete the cJSON, print it, release the string. */ //free(out); /* Print to text, Delete the cJSON, print it, release the string. */
} }
void kk_handle_sync_info(void)
{
char *send_data = NULL;
send_data = _kk_data_create(SYNC_MSG_TYPE,"*","*","*");
if(send_data == NULL){
return;
}
debug_log(LOG_INFO_LEVEL,"[sync] send.\n");
kk_ipc_send(IPC_APP2MID, send_data, strlen(send_data)+1);
free(send_data);
extern void kk_sync_info_push(void);
extern void kk_sync_info(void);
void kk_handle_sync_info(void)
{
kk_sync_info();
} }
void kk_handle_sync_push_info(void) void kk_handle_sync_push_info(void)
{ {
char *send_data = NULL; kk_sync_info_push();
send_data = _kk_data_create(SYNCPUSH_MSG_TYPE,"*","*","*");
if(send_data == NULL){
return;
}
debug_log(LOG_INFO_LEVEL,"[sync] send.\n");
kk_ipc_send(IPC_APP2MID, send_data, strlen(send_data)+1);
free(send_data);
} }
......
...@@ -140,7 +140,7 @@ static kk_map_dev_node_t *kk_map_dev_node_create(const char *deviceCode,const ch ...@@ -140,7 +140,7 @@ static kk_map_dev_node_t *kk_map_dev_node_create(const char *deviceCode,const ch
memcpy(node->deviceCode,deviceCode,strlen(deviceCode)); memcpy(node->deviceCode,deviceCode,strlen(deviceCode));
memcpy(node->productCode,productCode,strlen(productCode)); memcpy(node->productCode,productCode,strlen(productCode));
node->online_status = (strcmp(onlineStatus,"1")==0)?1:0; node->online_status = (strcmp(onlineStatus,"1")==0)?1:0;
debug_log(LOG_CRITICAL_LEVEL,"[add node]node->deviceCode=%s\n",node->deviceCode);
memcpy(node->opearteType,optype->valuestring,strlen(optype->valuestring)); memcpy(node->opearteType,optype->valuestring,strlen(optype->valuestring));
node->channelNum = channel->valueint; node->channelNum = channel->valueint;
...@@ -442,6 +442,10 @@ int kk_map_dev_search_by_deviceCode(const char *deviceCode, kk_map_dev_node_t ** ...@@ -442,6 +442,10 @@ int kk_map_dev_search_by_deviceCode(const char *deviceCode, kk_map_dev_node_t **
//list_for_each_entry_safe //list_for_each_entry_safe
list_for_each_entry(search_node, &ctx->dev_list, linked_list, kk_map_dev_node_t) { list_for_each_entry(search_node, &ctx->dev_list, linked_list, kk_map_dev_node_t) {
debug_log(LOG_CRITICAL_LEVEL,"search_node->deviceCode=%s,deviceCode=%s\n",search_node->deviceCode,deviceCode);
debug_log(LOG_CRITICAL_LEVEL,"%d,%d\n",strlen(search_node->deviceCode),strlen(deviceCode));
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)) {
/* dm_log_debug("Device Found, devid: %d", devid); */ /* dm_log_debug("Device Found, devid: %d", devid); */
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
if( level >= LOG_LEVEL && level <= LOG_CRITICAL_LEVEL) { \ if( level >= LOG_LEVEL && level <= LOG_CRITICAL_LEVEL) { \
char buff[64] = {0};\ char buff[64] = {0};\
time_t curTime = time(NULL); \ time_t curTime = time(NULL); \
struct tm *c = gmtime(&curTime);\ struct tm *c = localtime(&curTime);\
snprintf(buff,sizeof(buff),"%d-%d-%d %d:%d:%d",(c->tm_year+1900),(c->tm_mon+1),c->tm_mday,c->tm_hour,c->tm_min,c->tm_sec);\ snprintf(buff,sizeof(buff),"%d-%d-%d %d:%d:%d",(c->tm_year+1900),(c->tm_mon+1),c->tm_mday,c->tm_hour,c->tm_min,c->tm_sec);\
printf("%s%s [%s:%d(%s)] "format"\033[m", LOG_LEVEL_(level),buff,__FILE__,__LINE__,__func__,##__VA_ARGS__); \ printf("%s%s [%s:%d(%s)] "format"\033[m", LOG_LEVEL_(level),buff,__FILE__,__LINE__,__func__,##__VA_ARGS__); \
} \ } \
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "kk_lan_voice_panel.h" #include "kk_lan_voice_panel.h"
#include "kk_data_mng.h" #include "kk_data_mng.h"
#include "kk_lan_debug.h" #include "kk_lan_debug.h"
extern char * _kk_data_create(char *msgtype,const char *productCode,const char *deviceCode,const char *param);
static char s_ccuid[DEVICE_CODE_LEN] = {0}; static char s_ccuid[DEVICE_CODE_LEN] = {0};
...@@ -103,15 +104,63 @@ int prg_run_singleton(const char *prg) ...@@ -103,15 +104,63 @@ int prg_run_singleton(const char *prg)
} }
#define SYNC_INFO_FLAG 0x01
#define SYNC_INFO_PUSH_FLAG 0x02
static int g_sync_flag;
void kk_sync_info(void)
{
if(g_sync_flag&SYNC_INFO_FLAG){
debug_log(LOG_FOCUS_LEVEL,"[SYNC INFO] delay.\n");
}
g_sync_flag|=SYNC_INFO_FLAG;
}
void kk_sync_info_push(void)
{
if(g_sync_flag&SYNC_INFO_PUSH_FLAG){
debug_log(LOG_FOCUS_LEVEL,"[SYNC INFO PUSH] delay.\n");
}
g_sync_flag|=SYNC_INFO_PUSH_FLAG;
}
void handler(int signum) void handler(int signum)
{ {
printf("[sig]---------------------->signum=%d\n",signum); printf("[sig]---------------------->signum=%d\n",signum);
if(signum!=17){ if(signum==SIGALRM){
printf("[SIGALRM]\n");
}
if(signum!=17 &&signum!=SIGALRM){
exit(-1); exit(-1);
} }
} }
void kk_sync_timer_start(void)
{
struct itimerval timer;
timer.it_value.tv_sec = 30;
timer.it_value.tv_usec = 0;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 0;
if(setitimer(ITIMER_REAL, &timer, NULL)<0){
debug_log(LOG_CRITICAL_LEVEL,"err.\n");
};
}
int kk_sync_timer_is_running(void)
{
struct itimerval timer;
getitimer(ITIMER_REAL,&timer);
if(timer.it_value.tv_sec!=0||timer.it_value.tv_usec!=0){
return 1;
}
return 0;
}
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
...@@ -124,6 +173,8 @@ int main(int argc, char* argv[]) ...@@ -124,6 +173,8 @@ int main(int argc, char* argv[])
for(int i=1;i<32;i++){ for(int i=1;i<32;i++){
signal(i, handler); signal(i, handler);
} }
//signal(SIGPIPE, SIG_IGN); //signal(SIGPIPE, SIG_IGN);
...@@ -152,8 +203,37 @@ int main(int argc, char* argv[]) ...@@ -152,8 +203,37 @@ int main(int argc, char* argv[])
kk_lan_db_node_init(); kk_lan_db_node_init();
//kk_handle_sync_info(); //kk_handle_sync_info();
while(1){ while(1){
sleep(1);
if(kk_sync_timer_is_running()==0&&g_sync_flag!=0){
char *send_data = NULL;
if(g_sync_flag&SYNC_INFO_FLAG){
debug_log(LOG_INFO_LEVEL,"[SYNC INFO].\n");
send_data = _kk_data_create(SYNC_MSG_TYPE,"*","*","*");
g_sync_flag&=~SYNC_INFO_FLAG;
}else if(g_sync_flag&SYNC_INFO_PUSH_FLAG){
debug_log(LOG_INFO_LEVEL,"[SYNC INFO PUSH].\n");
send_data = _kk_data_create(SYNCPUSH_MSG_TYPE,"*","*","*");
kk_handle_sync_push_info();
g_sync_flag&=~SYNC_INFO_PUSH_FLAG;
}else{
g_sync_flag = 0;
debug_log(LOG_CRITICAL_LEVEL,"err\n");
}
if(send_data != NULL){
kk_ipc_send(IPC_APP2MID, send_data, strlen(send_data)+1);
kk_sync_timer_start();
free(send_data);
}
}
usleep(50);
} }
return 0; return 0;
} }
......
...@@ -169,8 +169,14 @@ static int _vp_config_file_version_load(void) ...@@ -169,8 +169,14 @@ static int _vp_config_file_version_load(void)
version = cJSON_GetObjectItem(json,"version"); version = cJSON_GetObjectItem(json,"version");
if(version!=NULL &&version->type==cJSON_Number){ if(version!=NULL &&version->type==cJSON_Number){
if(version->valueint<=0){
vp_mag.cfg_info.f_ver = 0;
vp_mag.cfg_info.next_ver = 0;
}else{
vp_mag.cfg_info.f_ver = version->valueint; vp_mag.cfg_info.f_ver = version->valueint;
vp_mag.cfg_info.next_ver = version->valueint; vp_mag.cfg_info.next_ver = version->valueint;
}
printf("[vp load config version]%d\n",vp_mag.cfg_info.f_ver); printf("[vp load config version]%d\n",vp_mag.cfg_info.f_ver);
} }
...@@ -302,6 +308,8 @@ void *kk_vp_manage_thread(void *arg) ...@@ -302,6 +308,8 @@ void *kk_vp_manage_thread(void *arg)
switch(vp_mag.state){ switch(vp_mag.state){
case GET_8009_SNAPSHOOT_STATE: case GET_8009_SNAPSHOOT_STATE:
kk_vp_get_8009_snapshoot(); kk_vp_get_8009_snapshoot();
kk_vp_get_ota_file_info();
sleep(5); sleep(5);
break; break;
......
...@@ -19,6 +19,8 @@ static cJSON *curtain_dev_handle(int ep,uint8_t *arg,uint8_t arg_len); ...@@ -19,6 +19,8 @@ static cJSON *curtain_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *outlet_dev_handle(int ep,uint8_t *arg,uint8_t arg_len); static cJSON *outlet_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *freshAir_dev_handle(int ep,uint8_t *arg,uint8_t arg_len); static cJSON *freshAir_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *fanCoilSwitch_dev_handle(int ep,uint8_t *arg,uint8_t arg_len); static cJSON *fanCoilSwitch_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *underfloor_heating_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *dimming_light_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static const int air_conditioner_dev_pid[] = AIR_CONDITIONER_DEV_PID; static const int air_conditioner_dev_pid[] = AIR_CONDITIONER_DEV_PID;
...@@ -27,6 +29,11 @@ static const int curtain_dev_pid[] = CURTAIN_DEV_PID; ...@@ -27,6 +29,11 @@ static const int curtain_dev_pid[] = CURTAIN_DEV_PID;
static const int outlet_dev_pid[] = OUTLET_DEV_PID; static const int outlet_dev_pid[] = OUTLET_DEV_PID;
static const int freshAir_dev_pid[] = FRESHAIR_DEV_PID; static const int freshAir_dev_pid[] = FRESHAIR_DEV_PID;
static const int fanCoilSwitch_dev_pid[] = FANCOILSWITCH_DEV_PID; static const int fanCoilSwitch_dev_pid[] = FANCOILSWITCH_DEV_PID;
static const int underfloor_heating_dev_pid[] = UNDERFLOOR_HEATING_DEV_PID;
static const int dimming_light_dev_pid[] = DIMMING_LIGHT_DEV_PID;
static DEV_PID_S g_dev_pid[] = { static DEV_PID_S g_dev_pid[] = {
...@@ -34,7 +41,9 @@ static DEV_PID_S g_dev_pid[] = { ...@@ -34,7 +41,9 @@ static DEV_PID_S g_dev_pid[] = {
{ curtain_dev_pid,sizeof(curtain_dev_pid) / sizeof(int),curtain_dev_handle}, { curtain_dev_pid,sizeof(curtain_dev_pid) / sizeof(int),curtain_dev_handle},
{ outlet_dev_pid,sizeof(outlet_dev_pid) / sizeof(int),outlet_dev_handle}, { outlet_dev_pid,sizeof(outlet_dev_pid) / sizeof(int),outlet_dev_handle},
{ freshAir_dev_pid,sizeof(freshAir_dev_pid) / sizeof(int),freshAir_dev_handle}, { freshAir_dev_pid,sizeof(freshAir_dev_pid) / sizeof(int),freshAir_dev_handle},
{ fanCoilSwitch_dev_pid,sizeof(fanCoilSwitch_dev_pid) / sizeof(int),fanCoilSwitch_dev_handle} { fanCoilSwitch_dev_pid,sizeof(fanCoilSwitch_dev_pid) / sizeof(int),fanCoilSwitch_dev_handle},
{ underfloor_heating_dev_pid,sizeof(underfloor_heating_dev_pid) / sizeof(int),underfloor_heating_dev_handle},
{ dimming_light_dev_pid,sizeof(dimming_light_dev_pid) / sizeof(int),dimming_light_dev_handle},
}; };
static dev_handle_func dev_pid_dispatch(int pid) static dev_handle_func dev_pid_dispatch(int pid)
...@@ -96,6 +105,8 @@ static cJSON *workMode_msg_build(int ep,int mode) ...@@ -96,6 +105,8 @@ static cJSON *workMode_msg_build(int ep,int mode)
return params; return params;
} }
static cJSON *temperature_msg_build(int ep,int tmp) static cJSON *temperature_msg_build(int ep,int tmp)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
...@@ -110,8 +121,33 @@ static cJSON *temperature_msg_build(int ep,int tmp) ...@@ -110,8 +121,33 @@ static cJSON *temperature_msg_build(int ep,int tmp)
return params; return params;
} }
static cJSON *ColorTemperature_msg_build(int ep,int val)
{
char epNum[12] = {0};
cJSON *params = cJSON_CreateObject();
memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"ColorTemperature",val);
return params;
}
static cJSON *Brightness_msg_build(int ep,int val)
{
char epNum[12] = {0};
cJSON *params = cJSON_CreateObject();
memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"Brightness",val);
return params;
}
...@@ -460,7 +496,78 @@ static cJSON *fanCoilSwitch_dev_handle(int ep,uint8_t *arg,uint8_t arg_len) ...@@ -460,7 +496,78 @@ static cJSON *fanCoilSwitch_dev_handle(int ep,uint8_t *arg,uint8_t arg_len)
return NULL; return NULL;
} }
static cJSON *underfloor_heating_dev_handle(int ep,uint8_t *arg,uint8_t arg_len)
{
uint8_t skill_type = arg[0];
switch(skill_type){
case VP_CTRL_OPEN://
return PowerSwitch_msg_build(ep,1);
case VP_CTRL_CLOSE:
return PowerSwitch_msg_build(ep,0);
case VP_CTRL_MODE:{
if(arg[1]!=0x20){
return NULL;
}
uint8_t mode = arg[2];
_debug_log(LOG_FOCUS_LEVEL,"[VP] set mode=%d\n",mode);
if(mode==VP_SKILLTYPE_1C_WORKMODE_AUTO){
return workMode_msg_build(ep,0);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_MANUAL){
return workMode_msg_build(ep,1);
}
break;
}
case VP_CTRL_TMP_SET:
if(arg[1]!=0x20){
return NULL;
}
uint8_t tmp = arg[2];
_debug_log(LOG_FOCUS_LEVEL,"[VP] set tmp=%d\n",tmp);
return temperature_msg_build(ep,tmp);
default:break;
}
return NULL;
}
static cJSON *dimming_light_dev_handle(int ep,uint8_t *arg,uint8_t arg_len)
{
uint8_t skill_type = arg[0];
switch(skill_type){
case VP_CTRL_OPEN://
return PowerSwitch_msg_build(ep,1);
case VP_CTRL_CLOSE:
return PowerSwitch_msg_build(ep,0);
case VP_CTRL_SET_COLOR_TMP:{
if(arg[1]!=0x20){
return NULL;
}
uint8_t mode = arg[2];
_debug_log(LOG_FOCUS_LEVEL,"[VP] set mode=%d\n",mode);
if(mode==VP_SKILLTYPE_1C_WORKMODE_AUTO){
return workMode_msg_build(ep,0);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_MANUAL){
return workMode_msg_build(ep,1);
}
break;
}
case VP_CTRL_BRIGHTNESS_SET:
if(arg[1]!=0x20){
return NULL;
}
uint8_t bri = arg[2];
Brightness_msg_build(ep,bri);
break;
default:break;
}
return NULL;
}
int kk_lan_vp_control(uint8_t num,uint32_t nodeIdAry[],uint8_t *arg,uint8_t arg_len) int kk_lan_vp_control(uint8_t num,uint32_t nodeIdAry[],uint8_t *arg,uint8_t arg_len)
......
...@@ -70,29 +70,35 @@ ...@@ -70,29 +70,35 @@
//DEVICE PID DEFINE //DEVICE PID DEFINE
//3001,3002,3003,3022,3023,3024
#define LIGHT_DEV_PID {\ #define LIGHT_DEV_PID {\
3024\ 3001,3002,3003,3009,3010,3011,3022,3023,3024,3069,3078,3079,3085,3086,3087,3115\
} }
//3005,3006,3007,3008,3009,3010,3011,3026,3027,3067
#define CURTAIN_DEV_PID {\ #define CURTAIN_DEV_PID {\
3027\ 3005,3006,3012,3013,3017,3026,3027,3067,3068,3088,3089\
} }
//3019,3020,3037,3038
#define OUTLET_DEV_PID {\ #define OUTLET_DEV_PID {\
3019,3020,3037,3038\ 3019,3020,3037,3038,3037,3038\
} }
#define FRESHAIR_DEV_PID {\ #define FRESHAIR_DEV_PID {\
3032\ 3032,3099\
} }
#define FANCOILSWITCH_DEV_PID {\ #define FANCOILSWITCH_DEV_PID {\
3034\ 3031,3033,3034,3035,3036,3095,3098\
} }
#define UNDERFLOOR_HEATING_DEV_PID {\
3029,3030,3097\
}
#define DIMMING_LIGHT_DEV_PID {\
3092\
}
......
...@@ -256,22 +256,25 @@ static int kk_vp_get_device_name(_IN cJSON *devices,_IN const char*epNum,_IN con ...@@ -256,22 +256,25 @@ static int kk_vp_get_device_name(_IN cJSON *devices,_IN const char*epNum,_IN con
name->type==cJSON_String){ name->type==cJSON_String){
printf("[%s][%d]name=%s\n",__FUNCTION__,__LINE__,name->valuestring); printf("[%s][%d]name=%s\n",__FUNCTION__,__LINE__,name->valuestring);
if((epNumObj = cJSON_GetObjectItem(deviceItem,"epNum"))!=NULL){
if(multi!=0){ if(multi!=0){
if((epNumObj = cJSON_GetObjectItem(deviceItem,"epNum"))!=NULL && if(epNumObj->type==cJSON_String &&
epNumObj->type==cJSON_String &&
!strcmp(epNumObj->valuestring,epNum)){ !strcmp(epNumObj->valuestring,epNum)){
snprintf(buf,size,"%s",name->valuestring); snprintf(buf,size,"%s",name->valuestring);
return 1; return 1;
} }
}else{ }else{
if((epNumObj = cJSON_GetObjectItem(deviceItem,"epNum"))!=NULL && if(epNumObj->type==cJSON_String &&
epNumObj->type==cJSON_String &&
!strcmp(epNumObj->valuestring,"1")){ !strcmp(epNumObj->valuestring,"1")){
snprintf(buf,size,"%s",name->valuestring); snprintf(buf,size,"%s",name->valuestring);
return 1; return 1;
} }
return 1; return 1;
} }
}else{
snprintf(buf,size,"%s",name->valuestring);
return 1;
}
} }
} }
} }
...@@ -288,6 +291,7 @@ static int kk_vp_get_device_info(_IN cJSON *rooms,_IN VP_ZB_DEV_ITEM *pDevs,_IN ...@@ -288,6 +291,7 @@ static int kk_vp_get_device_info(_IN cJSON *rooms,_IN VP_ZB_DEV_ITEM *pDevs,_IN
int i = 0,roomNum = 0,isFind = 0; int i = 0,roomNum = 0,isFind = 0;
roomNum = cJSON_GetArraySize(rooms); roomNum = cJSON_GetArraySize(rooms);
//printf("[%s][%d]roomNum=%d\n",__FUNCTION__,__LINE__,roomNum); //printf("[%s][%d]roomNum=%d\n",__FUNCTION__,__LINE__,roomNum);
for(i=0;i<roomNum;i++){ for(i=0;i<roomNum;i++){
...@@ -307,6 +311,12 @@ static int kk_vp_get_device_info(_IN cJSON *rooms,_IN VP_ZB_DEV_ITEM *pDevs,_IN ...@@ -307,6 +311,12 @@ static int kk_vp_get_device_info(_IN cJSON *rooms,_IN VP_ZB_DEV_ITEM *pDevs,_IN
isFind = kk_vp_get_device_name(devices,pDevs->ch,pDevs->mac,multi,sizeof(pDevs->name),pDevs->name); isFind = kk_vp_get_device_name(devices,pDevs->ch,pDevs->mac,multi,sizeof(pDevs->name),pDevs->name);
if(!strcmp(pDevs->name,"")){
if(is_ac_gw_pid(atoi(pDevs->pid))!=0){
snprintf(pDevs->name,sizeof(pDevs->name),"%s","空调网关");
}
}
if(isFind!=0){ if(isFind!=0){
debug_log(LOG_CRITICAL_LEVEL,"roomId->valuestring=%s\n",roomId->valuestring); debug_log(LOG_CRITICAL_LEVEL,"roomId->valuestring=%s\n",roomId->valuestring);
snprintf(pDevs->room,sizeof(pDevs->room),"%s",roomId->valuestring); snprintf(pDevs->room,sizeof(pDevs->room),"%s",roomId->valuestring);
...@@ -386,13 +396,15 @@ static int kk_vp_sync_device_multi_eps(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c ...@@ -386,13 +396,15 @@ static int kk_vp_sync_device_multi_eps(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c
if(kk_map_dev_search_by_deviceCode(pDevs->mac,&node) == 0){ if(kk_map_dev_search_by_deviceCode(pDevs->mac,&node) == 0){
debug_log(LOG_CRITICAL_LEVEL,"--->mark\n");
snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s",node->opearteType); snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s",node->opearteType);
}else{ }else{
debug_log(LOG_CRITICAL_LEVEL,"--->mark\n");
if(is_ac_gw_pid(atoi(pDevs->pid))!=0){ if(is_ac_gw_pid(atoi(pDevs->pid))!=0){
snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s","12008"); snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s","12008");
}else{ }else{
debug_log(LOG_CRITICAL_LEVEL,"--->mark\n");
snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s","1"); snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s","1");
} }
} }
...@@ -459,12 +471,15 @@ static int kk_vp_sync_device_single_ep(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c ...@@ -459,12 +471,15 @@ static int kk_vp_sync_device_single_ep(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c
snprintf(pDevs->nodeId,sizeof(pDevs->nodeId)-1,"%d",nodeId); snprintf(pDevs->nodeId,sizeof(pDevs->nodeId)-1,"%d",nodeId);
if(kk_map_dev_search_by_deviceCode(pDevs->mac,&node) != 0){ debug_log(LOG_CRITICAL_LEVEL,"pDevs->mac=%s--->mark\n",pDevs->mac);
if(kk_map_dev_search_by_deviceCode(pDevs->mac,&node) == 0){
snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s",node->opearteType); snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s",node->opearteType);
}else{ }else{
if(is_ac_gw_pid(atoi(pDevs->pid))!=0){ if(is_ac_gw_pid(atoi(pDevs->pid))!=0){
debug_log(LOG_CRITICAL_LEVEL,"--->mark\n");
snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s","12008"); snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s","12008");
}else{ }else{
debug_log(LOG_CRITICAL_LEVEL,"--->mark\n");
snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s","1"); snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s","1");
} }
} }
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
static uint16_t _g_seq; static uint16_t _g_seq;
static FILE *update_fp = NULL; static FILE *update_fp = NULL;
static FILE *ota_fp = NULL;
#define VP_CH 0 #define VP_CH 0
...@@ -44,6 +45,12 @@ static void kk_vp_config_file_info_query_handle(pro_data_t *pro_data); ...@@ -44,6 +45,12 @@ static void kk_vp_config_file_info_query_handle(pro_data_t *pro_data);
static void kk_vp_config_file_update_status_handle(pro_data_t *pro_data); static void kk_vp_config_file_update_status_handle(pro_data_t *pro_data);
static void kk_vp_voice_control_handle(pro_data_t *pro_data); static void kk_vp_voice_control_handle(pro_data_t *pro_data);
static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data);
static void kk_vp_ota_file_update_start_handle(pro_data_t *pro_data);
static void kk_vp_ota_file_update_stop_handle(pro_data_t *pro_data);
static void kk_vp_ota_info_query_handle(pro_data_t *pro_data);
static void kk_vp_ota_file_update_status_handle(pro_data_t *pro_data);
static VP_OPCODE_HANDLE vp_opcode_table[] = { static VP_OPCODE_HANDLE vp_opcode_table[] = {
...@@ -58,12 +65,20 @@ static VP_OPCODE_HANDLE vp_opcode_table[] = { ...@@ -58,12 +65,20 @@ static VP_OPCODE_HANDLE vp_opcode_table[] = {
{OPCODE_CONFIG_FILE_UPDATE_STOP,kk_vp_config_file_update_stop_handle}, {OPCODE_CONFIG_FILE_UPDATE_STOP,kk_vp_config_file_update_stop_handle},
{OPCODE_CONFIG_FILE_INFO_GET,kk_vp_config_file_info_query_handle}, {OPCODE_CONFIG_FILE_INFO_GET,kk_vp_config_file_info_query_handle},
{OPCODE_CONFIG_FILE_UPDATE_STATUS,kk_vp_config_file_update_status_handle}, {OPCODE_CONFIG_FILE_UPDATE_STATUS,kk_vp_config_file_update_status_handle},
{OPCODE_VOICE_CONTROL_NOTIFY,kk_vp_voice_control_handle} {OPCODE_VOICE_CONTROL_NOTIFY,kk_vp_voice_control_handle},
{OPCODE_VOICE_OTA_INFO_GET,kk_vp_ota_info_query_handle},
{OPCODE_VOICE_OTA_UPGRADE_STATR,kk_vp_ota_file_update_start_handle},
{OPCODE_VOICE_OTA_REQUEST,kk_vp_ota_file_update_data_req_handle},
{OPCODE_VOICE_OTA_UPGRADE_STOP,kk_vp_ota_file_update_stop_handle},
{OPCODE_VOICE_OTA_STATUS_NOTIFY,kk_vp_ota_file_update_status_handle},
}; };
uint32_t ms_uiCrc32Tab[256] = { /* CRC polynomial 0xedb88320 */ uint32_t ms_uiCrc32Tab[256] = { /* CRC polynomial 0xedb88320 */
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
...@@ -532,6 +547,20 @@ static void vp_close_fd() ...@@ -532,6 +547,20 @@ static void vp_close_fd()
} }
} }
static void open_ota_fd()
{
ota_fp = fopen (VP_OTA_FILE_BZIP,"rb");
if(ota_fp==NULL){
debug_log(LOG_WARNING_LEVEL,"[%s]fopen err!\n",VP_OTA_FILE_BZIP);
}
}
static void close_ota_fd()
{
if(ota_fp!=NULL){
fclose (ota_fp);
}
}
...@@ -912,7 +941,6 @@ static void kk_vp_config_file_update_stop_handle(pro_data_t *pro_data) ...@@ -912,7 +941,6 @@ static void kk_vp_config_file_update_stop_handle(pro_data_t *pro_data)
ver = (pro_data->arg[0]<<24) | (pro_data->arg[1]<<16) | (pro_data->arg[2]<<8) | pro_data->arg[3]; ver = (pro_data->arg[0]<<24) | (pro_data->arg[1]<<16) | (pro_data->arg[2]<<8) | pro_data->arg[3];
status = pro_data->arg[4]; status = pro_data->arg[4];
} }
static void kk_vp_config_file_update_status_handle(pro_data_t *pro_data) static void kk_vp_config_file_update_status_handle(pro_data_t *pro_data)
...@@ -1104,6 +1132,132 @@ void kk_vp_get_config_file_info(void) ...@@ -1104,6 +1132,132 @@ void kk_vp_get_config_file_info(void)
void kk_vp_get_ota_file_info(void)
{
uint8_t res[1] = {0};
debug_log(LOG_DEBUG_LEVEL,"[LAN->VP]OTA info get,OPCODE=%04X\n",OPCODE_VOICE_OTA_INFO_GET);
vp_send_data_build(OPCODE_VOICE_OTA_INFO_GET,sizeof(res),res);
}
static int _vp_get_ota_file_size(void)
{
int size = 0;
FILE *fp = NULL;
fp = fopen (VP_OTA_FILE_BZIP,"r");
if(fp==NULL){
debug_log(LOG_WARNING_LEVEL,"[%s]fopen err!\n",VP_OTA_FILE_BZIP);
return 0;
}
fseek (fp, 0, SEEK_END);
size=ftell(fp);
fclose(fp);
return size;
}
static int _vp_get_ota_file_crc32(void)
{
char *buff = NULL;
char *pRead = NULL;
int t_len = 0;
int remain = 0;
int r_len = 0;
uint32_t crc32 = 0;
FILE *fp = NULL;
int size = 0;
fp = fopen (VP_OTA_FILE_BZIP,"r");
if(fp==NULL){
debug_log(LOG_WARNING_LEVEL,"[%s]fopen err!\n",VP_OTA_FILE_BZIP);
printf("open err.\n");
return -1;
}
fseek (fp, 0, SEEK_END);
size=ftell(fp);
fseek (fp, 0, SEEK_SET);
buff = malloc(size+1);
memset(buff,0,size+1);
pRead = buff;
remain = size;
while(remain>0){
r_len = fread(pRead, 1, size, fp);
if(remain>=r_len){
remain -= r_len;
pRead+=r_len;
printf("[remain]r_len=%d,remain=%d\n",r_len,remain);
}else{
remain = 0;
pRead[size] = '\0';
}
}
crc32 = CreateCrc32((uint8_t *)buff, size);
printf("crc32=%x\n",crc32);
free(buff);
fclose(fp);
return crc32;
}
void kk_vp_ota_file_update_start(uint32_t ver)
{
uint8_t data[11] = {0};
uint32_t f_ver,f_size,crc32;
f_ver = ver;
f_size = _vp_get_ota_file_size();
crc32 = _vp_get_ota_file_crc32();
data[0] = (f_ver>>16)&0xff;
data[1] = (f_ver>>8)&0xff;
data[2] = f_ver&0xff;
data[3] = (f_size>>24)&0xff;
data[4] = (f_size>>16)&0xff;
data[5] = (f_size>>8)&0xff;
data[6] = f_size&0xff;
data[7] = (crc32>>24)&0xff;
data[8] = (crc32>>16)&0xff;
data[9] = (crc32>>8)&0xff;
data[10] = crc32&0xff;
kk_vp_cfg_info_set(f_ver,f_size,crc32);
debug_log(LOG_DEBUG_LEVEL,"[LAN->VP]ota file update start,OPCODE=%04X\n",OPCODE_VOICE_OTA_UPGRADE_STATR);
_debug_log(LOG_DEBUG_LEVEL,"File Version=%d.%d.%d,File Size=%d,CRC32 Value=%08X\n",
(f_ver>>16)&0xff,(f_ver>>8&0xff),f_ver&0xff,f_size,crc32);
vp_send_data_build(OPCODE_VOICE_OTA_UPGRADE_STATR,sizeof(data),data);
open_ota_fd();
}
void kk_vp_ota_file_update_stop(uint32_t ver)
{
uint8_t f_ver[3];
f_ver[0] = (ver>>16)&0xff;
f_ver[1] = (ver>>8)&0xff;
f_ver[2] = ver&0xff;
debug_log(LOG_DEBUG_LEVEL,"[LAN->VP]config file update stop,OPCODE=%04X\n",OPCODE_VOICE_OTA_UPGRADE_STOP);
vp_send_data_build(OPCODE_VOICE_OTA_UPGRADE_STOP,sizeof(f_ver),f_ver);
}
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
int kk_vp_opcode_handle(_IN pro_data_t *pro_data) int kk_vp_opcode_handle(_IN pro_data_t *pro_data)
{ {
...@@ -1249,7 +1403,172 @@ void kk_vp_syncinfo_handle(_IN cJSON *payload) ...@@ -1249,7 +1403,172 @@ void kk_vp_syncinfo_handle(_IN cJSON *payload)
} }
static void kk_vp_ota_file_update_start_handle(pro_data_t *pro_data)
{
uint8_t err;
uint32_t f_size,crc32;
if(pro_data->args_len==0){
return ;
}
if((err = pro_data->arg[0])==0){
if(pro_data->args_len!=12){
return ;
}
f_size = MK_UINT32(&pro_data->arg[4]);
crc32 = MK_UINT32(&pro_data->arg[8]);
//kk_vp_config_file_info_check(f_ver,f_size,crc32);
_debug_log(LOG_DEBUG_LEVEL,"[VP->LAN] File Version=%d.%d.%d,File Size=%d,CRC32 Value=%08X\n",
pro_data->arg[1],pro_data->arg[2],pro_data->arg[3],f_size,crc32);
}
}
static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data)
{
uint8_t err = 0;
uint32_t offset;
uint16_t req_size;
uint8_t data[256] = {0};
uint8_t len = 0;
uint8_t r_len = 0;
uint8_t t_len = 0;
uint8_t *pCrc = NULL;
uint32_t crc;
if(pro_data->args_len!=9){
return ;
}
offset = MK_UINT32(&pro_data->arg[3]);
req_size = MK_UINT16(&pro_data->arg[7]);
debug_log(LOG_DEBUG_LEVEL,"[VP->LAN]f_ver=%d.%d.%d,offset=%d,req_size=%d\n",pro_data->arg[0],pro_data->arg[1],pro_data->arg[2],offset,req_size);
if(ota_fp==NULL){
_debug_log(LOG_ERROR_LEVEL,"[ota_fp] NULL!\n");
err = 1;
}
/*
if(f_ver!=kk_vp_get_config_file_version()){
printf("[file version] not match!%d,%d\n",f_ver,kk_vp_get_config_file_version());
err = 2;
}*/
data[len++] = err;
data[len++] = (offset>>24)&0xff;
data[len++] = (offset>>16)&0xff;
data[len++] = (offset>>8)&0xff;
data[len++] = offset&0xff;
data[len++] = (req_size>>8)&0xff;
data[len++] = req_size&0xff;
pCrc = &data[len];
if(err==0){
int err = fseek(ota_fp, offset, SEEK_SET);
if(err==0){
while(req_size>t_len){
r_len = fread(&data[len], 1, req_size, ota_fp);
if(r_len>=0){
t_len+=r_len;
len += r_len;
}else{
break;
}
}
}else{
debug_log(LOG_ERROR_LEVEL,"[fseek fail]offset=%d\n",offset);
}
}
crc = CreateCrc32(pCrc, req_size);
data[len++] = (crc>>24)&0xff;
data[len++] = (crc>>16)&0xff;
data[len++] = (crc>>8)&0xff;
data[len++] = crc&0xff;
vp_reply_data_build(pro_data->seq,pro_data->ch,OPCODE_VOICE_OTA_REQUEST,len,data);
usleep(100*1000);
}
static void kk_vp_ota_file_update_stop_handle(pro_data_t *pro_data)
{
uint8_t err,status;
uint32_t ver;
if(pro_data->args_len==0){
return ;
}
if((err = pro_data->arg[0])==0){
if(pro_data->args_len!=4){
return ;
}
ver = MK_VERSION(&pro_data->arg[1]);
_debug_log(LOG_DEBUG_LEVEL,"[VP OTA STOP] ver=%d.%d.%d\n",pro_data->arg[1],pro_data->arg[2],pro_data->arg[3]);
}
}
static void kk_vp_ota_file_update_status_handle(pro_data_t *pro_data)
{
int err = 0;
int ver;
unsigned char status;
if(pro_data->args_len!=4){
return ;
}
ver = MK_UINT24(&pro_data->arg[0]);
status = pro_data->arg[3];
debug_log(LOG_DEBUG_LEVEL,"\nver=%d.%d.%d,status=%d\n",pro_data->arg[0],pro_data->arg[1],pro_data->arg[2],status);
uint8_t data[5] = {0};
data[0] = err;
data[1] = (ver>>16)&0xff;
data[2] = (ver>>8)&0xff;
data[3] = ver&0xff;
data[4] = status;
vp_reply_data_build(pro_data->seq,pro_data->ch,OPCODE_VOICE_OTA_STATUS_NOTIFY,sizeof(data),data);
//kk_vp_update_result_check(status,ver);
}
static void kk_vp_ota_info_query_handle(pro_data_t *pro_data)
{
uint8_t err;
uint32_t f_ver;
if(pro_data->args_len!=4) {
return ;
}
if((err = pro_data->arg[0])==0) {
f_ver = MK_UINT24(&pro_data->arg[1]);
debug_log(LOG_DEBUG_LEVEL,"[VP->LAN] OTA File Version=%d.%d.%d\n",pro_data->arg[0],pro_data->arg[1],pro_data->arg[2]);
//kk_vp_cfg_info_check(f_ver,f_size,crc32);
}
}
......
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
#define VP_CONFIG_FILE "/etc/smarthome/voice_data.json" #define VP_CONFIG_FILE "/etc/smarthome/voice_data.json"
#define VP_CONFIG_FILE_MD5 "/data/kk/voice_data.MD5" #define VP_CONFIG_FILE_MD5 "/data/kk/voice_data.MD5"
#define VP_CONFIG_FILE_TAR_GZ "/data/kk/voice_data.tar.gz" #define VP_CONFIG_FILE_TAR_GZ "/data/kk/voice_data.tar.gz"
#define VP_OTA_FILE_BZIP "/data/kk/kk_voice.bzip"
#define OPCODE_8009_SNAPSHOOT 0x1000 #define OPCODE_8009_SNAPSHOOT 0x1000
#define OPCODE_SNAPSHOOT 0x1001 #define OPCODE_SNAPSHOOT 0x1001
...@@ -23,6 +26,17 @@ ...@@ -23,6 +26,17 @@
#define OPCODE_CONFIG_FILE_UPDATE_STATUS 0x1010 #define OPCODE_CONFIG_FILE_UPDATE_STATUS 0x1010
#define OPCODE_VOICE_CONTROL_NOTIFY 0x1022 #define OPCODE_VOICE_CONTROL_NOTIFY 0x1022
#define OPCODE_VOICE_OTA_UPGRADE_STATR 0x1016
#define OPCODE_VOICE_OTA_REQUEST 0x1017
#define OPCODE_VOICE_OTA_UPGRADE_STOP 0x1018
#define OPCODE_VOICE_OTA_INFO_GET 0x1019
#define OPCODE_VOICE_OTA_STATUS_NOTIFY 0x101A
typedef void (*vp_handle_func)(pro_data_t *pro_data); typedef void (*vp_handle_func)(pro_data_t *pro_data);
typedef struct typedef struct
{ {
...@@ -48,6 +62,11 @@ void kk_vp_get_config_file_info(void); ...@@ -48,6 +62,11 @@ void kk_vp_get_config_file_info(void);
void kk_vp_get_ota_file_info(void);
void kk_vp_ota_file_update_start(uint32_t ver);
void kk_vp_ota_file_update_stop(uint32_t ver);
......
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