Commit 7b21e73c authored by 尹佳钦's avatar 尹佳钦

1108代码合并

parent fd31b751
...@@ -245,6 +245,7 @@ void eSerial_start() ...@@ -245,6 +245,7 @@ void eSerial_start()
#endif #endif
serial_fd = devOpen(serialDev); serial_fd = devOpen(serialDev);
printf("------------------------------------>serial_fd=%d\n",serial_fd);
} }
/*********************************************************** /***********************************************************
...@@ -290,7 +291,8 @@ teSerial_Status eSerial_Read(unsigned char *data) ...@@ -290,7 +291,8 @@ teSerial_Status eSerial_Read(unsigned char *data)
} }
else else
{ {
printf("Serial read: %d\n", res); printf("Serial read: %d,serial_fd=%d\n", res,serial_fd);
if (res == 0) if (res == 0)
{ {
......
...@@ -374,6 +374,22 @@ int kk_data_handle(cJSON *json,int sockfd) ...@@ -374,6 +374,22 @@ int kk_data_handle(cJSON *json,int sockfd)
kk_zb_devs_hw_ack(sockfd,conditions); kk_zb_devs_hw_ack(sockfd,conditions);
}else if(strcmp(opcode->valuestring,GET_HISTORY_ALARM_LOG) == 0){ }else if(strcmp(opcode->valuestring,GET_HISTORY_ALARM_LOG) == 0){
kk_handle_get_history_info(); kk_handle_get_history_info();
}else if(strcmp(opcode->valuestring,"SOUND_VAL") == 0){
arg = cJSON_GetObjectItem(json, ARG_STRING);
int val = atoi(arg->valuestring);
if(val>100){
val = 100;
}else if(val<0){
val = 0;
}
}else if(strcmp(opcode->valuestring,"SOUND_SWITCH") == 0){
arg = cJSON_GetObjectItem(json, ARG_STRING);
if(strcmp(arg->valuestring,"on")){
}else if(strcmp(arg->valuestring,"off")){
}
}else if(strcmp(opcode->valuestring,DEL_HISTORY_ALARM_LOG) == 0){ }else if(strcmp(opcode->valuestring,DEL_HISTORY_ALARM_LOG) == 0){
cJSON *key = cJSON_GetObjectItem(json, "arg"); cJSON *key = cJSON_GetObjectItem(json, "arg");
if(key != NULL){ if(key != NULL){
...@@ -495,8 +511,19 @@ int is_arming_status_notify(cJSON *payload) ...@@ -495,8 +511,19 @@ int is_arming_status_notify(cJSON *payload)
return -1; return -1;
} }
static void kk_dev_node_onoffline_handle(const char *deviceCode,int online)
{
kk_map_dev_node_t *node = NULL;
if(kk_map_dev_search_by_deviceCode(deviceCode,&node) != 0){
return ;
}
node->online_status = (online==1)?1:0;
}
static int kk_device_onoffline_handle(cJSON *payload,int online) static int kk_device_onoffline_handle(cJSON *payload,int online)
{ {
if(payload == NULL){ if(payload == NULL){
return -1; return -1;
} }
...@@ -504,6 +531,9 @@ static int kk_device_onoffline_handle(cJSON *payload,int online) ...@@ -504,6 +531,9 @@ static int kk_device_onoffline_handle(cJSON *payload,int online)
if(params == NULL) return -1; if(params == NULL) return -1;
cJSON *deviceCode = cJSON_GetObjectItem(params, "deviceCode"); cJSON *deviceCode = cJSON_GetObjectItem(params, "deviceCode");
if(deviceCode == NULL) return -1; if(deviceCode == NULL) return -1;
kk_dev_node_onoffline_handle(deviceCode->valuestring,online);
cJSON *hw_info = kk_zb_dev_hw_info_build_by_deviceCode(0,deviceCode->valuestring,online); cJSON *hw_info = kk_zb_dev_hw_info_build_by_deviceCode(0,deviceCode->valuestring,online);
cJSON *root; cJSON *root;
cJSON *array = cJSON_CreateArray(); cJSON *array = cJSON_CreateArray();
...@@ -515,6 +545,9 @@ static int kk_device_onoffline_handle(cJSON *payload,int online) ...@@ -515,6 +545,9 @@ static int kk_device_onoffline_handle(cJSON *payload,int online)
cJSON_AddItemToObject(root, "arg", array); cJSON_AddItemToObject(root, "arg", array);
send_msg_to_module(root); send_msg_to_module(root);
cJSON_Delete(root); cJSON_Delete(root);
return 0; return 0;
} }
static int kk_del_historyalarm_handle(cJSON *payload) static int kk_del_historyalarm_handle(cJSON *payload)
......
...@@ -141,7 +141,7 @@ static kk_map_dev_node_t *kk_map_dev_node_create(const char *deviceCode,const ch ...@@ -141,7 +141,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_ALERT_LEVEL,"[add node]node->deviceCode=%s\n",node->deviceCode); debug_log(LOG_ALERT_LEVEL,"[add node]node->deviceCode=%s,node->online_status=%d\n",node->deviceCode,node->online_status);
memcpy(node->opearteType,optype->valuestring,strlen(optype->valuestring)); memcpy(node->opearteType,optype->valuestring,strlen(optype->valuestring));
node->channelNum = channel->valueint; node->channelNum = channel->valueint;
......
...@@ -157,6 +157,10 @@ int kk_sync_timer_is_running(void) ...@@ -157,6 +157,10 @@ int kk_sync_timer_is_running(void)
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
int ret = 0; int ret = 0;
......
...@@ -971,6 +971,152 @@ char *speedMap[] = { ...@@ -971,6 +971,152 @@ char *speedMap[] = {
"UNKONWN", "UNKONWN",
"UNKONWN", "UNKONWN",
}; };
static INDOOR_AIR_DEV indoor_air_status[MAX_AC_GW_AIR_NUM];
int indoor_airstatus_table_match_item(const char *deviceCode)
{
int i;
for(i=0;i<MAX_AC_GW_AIR_NUM;i++){
if(strcmp(deviceCode,indoor_air_status[i].deviceCode)==0){
return i;
}
}
return -1;
}
int indoor_airstatus_table_find_empty_item(void)
{
int i;
for(i=0;i<MAX_AC_GW_AIR_NUM;i++){
if(strlen(indoor_air_status[i].deviceCode)==0){
return i;
}
}
return -1;
}
int indoor_airstatus_table_match_status_item(int epNum,INDOOR_AIR_STATUS *status)
{
int i;
INDOOR_AIR_STATUS *ptr=status;
for(i=0;i<MAX_AC_INDOOR_AIR_NUM;i++,ptr++){
if(ptr->epNum==epNum){
return i;
}
}
return -1;
}
int indoor_airstatus_table_find_empty_status_item(INDOOR_AIR_STATUS *status)
{
int i;
INDOOR_AIR_STATUS *ptr=status;
for(i=0;i<MAX_AC_INDOOR_AIR_NUM;i++,ptr++){
if(ptr->epNum==0){
return i;
}
}
return -1;
}
int indoor_airstatus_table_insert_item(const char *deviceCode,int epNum,int online,int PowerSwitch,double Temperature,int WindSpeed,int WorkMode)
{
if(PowerSwitch==0&&Temperature==0&&WindSpeed==0&&WorkMode==0){
return -1;
}
int ix = indoor_airstatus_table_match_item(deviceCode);
if(ix!=-1){
int ix2 = indoor_airstatus_table_match_status_item(epNum,indoor_air_status[ix].status);
if(ix2!=-1){
indoor_air_status[ix].status[ix2].online = online;
indoor_air_status[ix].status[ix2].PowerSwitch = PowerSwitch;
indoor_air_status[ix].status[ix2].Temperature = Temperature;
indoor_air_status[ix].status[ix2].WindSpeed = WindSpeed;
indoor_air_status[ix].status[ix2].WorkMode = WorkMode;
debug_log(LOG_NOTICE_LEVEL,"[update] ix=%d,ix2=%d\n",ix,ix2);
}else{
ix2 = indoor_airstatus_table_find_empty_status_item(indoor_air_status[ix].status);
if(ix2==-1){
debug_log(LOG_WARNING_LEVEL,"table full!!!\n");
return -1;
}
debug_log(LOG_NOTICE_LEVEL,"[add] epNum=%d,ix2=%d\n",epNum,ix2);
indoor_air_status[ix].status[ix2].epNum = epNum;
indoor_air_status[ix].status[ix2].online = online;
indoor_air_status[ix].status[ix2].PowerSwitch = PowerSwitch;
indoor_air_status[ix].status[ix2].Temperature = Temperature;
indoor_air_status[ix].status[ix2].WindSpeed = WindSpeed;
indoor_air_status[ix].status[ix2].WorkMode = WorkMode;
}
}else{
ix = indoor_airstatus_table_find_empty_item();
if(ix==-1){
debug_log(LOG_WARNING_LEVEL,"table full!!!\n");
return -1;
}
debug_log(LOG_NOTICE_LEVEL,"[add] deviceCode=%s\n",deviceCode);
snprintf(indoor_air_status[ix].deviceCode,PRODUCT_CODE_LEN,"%s",deviceCode);
indoor_air_status[ix].status[0].epNum = epNum;
indoor_air_status[ix].status[0].online = online;
indoor_air_status[ix].status[0].PowerSwitch = PowerSwitch;
indoor_air_status[ix].status[0].Temperature = Temperature;
indoor_air_status[ix].status[0].WindSpeed = WindSpeed;
indoor_air_status[ix].status[0].WorkMode = WorkMode;
}
return 0;
}
INDOOR_AIR_STATUS *indoor_airstatus_table_find_item(const char *deviceCode,int epNum)
{
int ix = indoor_airstatus_table_match_item(deviceCode);
if(ix!=-1){
int ix2 = indoor_airstatus_table_match_status_item(epNum,indoor_air_status[ix].status);
if(ix2!=-1){
return &indoor_air_status[ix].status[ix2];
}
}
return NULL;
}
int indoor_airstatus_table_delete_item(const char *deviceCode)
{
debug_log(LOG_NOTICE_LEVEL,"[delete] deviceCode=%s\n",deviceCode);
int ix = indoor_airstatus_table_match_item(deviceCode);
if(ix!=-1){
memset(indoor_air_status[ix].deviceCode,0,PRODUCT_CODE_LEN);
for(int i=0;i<MAX_AC_INDOOR_AIR_NUM;i++){
memset(&indoor_air_status[ix].status[i],0,sizeof(INDOOR_AIR_STATUS));
}
}else{
return -1;
}
return 0;
}
int kk_send_indoorAir_status(cJSON *info,const char *deviceCode) int kk_send_indoorAir_status(cJSON *info,const char *deviceCode)
{ {
char epStr[4] = {0}; char epStr[4] = {0};
...@@ -1011,6 +1157,8 @@ int kk_send_indoorAir_status(cJSON *info,const char *deviceCode) ...@@ -1011,6 +1157,8 @@ int kk_send_indoorAir_status(cJSON *info,const char *deviceCode)
cJSON_AddStringToObject(arg, "runModel", modeMap[WorkMode->valueint]); cJSON_AddStringToObject(arg, "runModel", modeMap[WorkMode->valueint]);
cJSON_AddItemToObject(root, "arg", arg); cJSON_AddItemToObject(root, "arg", arg);
indoor_airstatus_table_insert_item(deviceCode,atoi(epNum->valuestring),1,PowerSwitch->valueint,Temperature->valuedouble,WindSpeed->valueint,WorkMode->valueint);
send_msg_to_module(root); send_msg_to_module(root);
cJSON_Delete(root); cJSON_Delete(root);
return 0; return 0;
...@@ -1052,6 +1200,7 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data) ...@@ -1052,6 +1200,7 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
kk_creater_nodeid(deviceCode->valuestring,1,ac_gw_nodeid); kk_creater_nodeid(deviceCode->valuestring,1,ac_gw_nodeid);
cJSON *properties = cJSON_GetObjectItem(subitem,"properties"); cJSON *properties = cJSON_GetObjectItem(subitem,"properties");
cJSON *onlineStatus = cJSON_GetObjectItem(subitem,"onlineStatus");
cJSON *indoorItem = cJSON_CreateObject(); cJSON *indoorItem = cJSON_CreateObject();
kk_get_ac_indoor_info_by_deviceCode(data,deviceCode->valuestring,roomId,NULL,1); kk_get_ac_indoor_info_by_deviceCode(data,deviceCode->valuestring,roomId,NULL,1);
...@@ -1065,6 +1214,8 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data) ...@@ -1065,6 +1214,8 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
cJSON *epsAry = cJSON_GetObjectItem(properties,"eps"); cJSON *epsAry = cJSON_GetObjectItem(properties,"eps");
cJSON *EpTotal = cJSON_GetObjectItem(properties,"EpTotal"); cJSON *EpTotal = cJSON_GetObjectItem(properties,"EpTotal");
int epsize = cJSON_GetArraySize(epsAry); int epsize = cJSON_GetArraySize(epsAry);
g_indoor_item = (CENTRAL_AC_INDOOR_ITEM *)malloc(sizeof(CENTRAL_AC_INDOOR_ITEM)*epsize); g_indoor_item = (CENTRAL_AC_INDOOR_ITEM *)malloc(sizeof(CENTRAL_AC_INDOOR_ITEM)*epsize);
if(g_indoor_item == NULL){ if(g_indoor_item == NULL){
...@@ -1097,6 +1248,13 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data) ...@@ -1097,6 +1248,13 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
memcpy(g_indoor_item[k].ac_gw_status.speed,speedMap[WindSpeed->valueint],strlen(speedMap[WindSpeed->valueint])); memcpy(g_indoor_item[k].ac_gw_status.speed,speedMap[WindSpeed->valueint],strlen(speedMap[WindSpeed->valueint]));
cJSON *WorkMode = cJSON_GetObjectItem(infoItem,"WorkMode"); cJSON *WorkMode = cJSON_GetObjectItem(infoItem,"WorkMode");
memcpy(g_indoor_item[k].ac_gw_status.mode,modeMap[WorkMode->valueint],strlen(modeMap[WorkMode->valueint])); memcpy(g_indoor_item[k].ac_gw_status.mode,modeMap[WorkMode->valueint],strlen(modeMap[WorkMode->valueint]));
cJSON *epNum = cJSON_GetObjectItem(infoItem,"epNum");
indoor_airstatus_table_insert_item(deviceCode->valuestring,epNum->valueint,onlineStatus->valueint,PowerSwitch->valueint,Temperature->valuedouble,WindSpeed->valueint,WorkMode->valueint);
debug_log(LOG_EMERG_LEVEL,"mark!!!\n");
} }
kk_create_new_central_ac(gwDeviceCode->valuestring,deviceCode->valuestring,nodeid); kk_create_new_central_ac(gwDeviceCode->valuestring,deviceCode->valuestring,nodeid);
} }
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
#include "cJSON.h" #include "cJSON.h"
#define MAX_AC_GW_AIR_NUM 5
#define MAX_AC_INDOOR_AIR_NUM 16
#define AIR_AC_INDOOR_ID_SIZE 8 #define AIR_AC_INDOOR_ID_SIZE 8
#define AIR_AC_INDOOR_ROOM_ID_SIZE 24 #define AIR_AC_INDOOR_ROOM_ID_SIZE 24
...@@ -46,6 +48,23 @@ typedef struct{ ...@@ -46,6 +48,23 @@ typedef struct{
}SYN_SCENE_ITEM; }SYN_SCENE_ITEM;
typedef struct{
int epNum;
int online;
int PowerSwitch;
double Temperature;
int WindSpeed;
int WorkMode;
}INDOOR_AIR_STATUS;
typedef struct{
char deviceCode[PRODUCT_CODE_LEN];
INDOOR_AIR_STATUS status[MAX_AC_INDOOR_AIR_NUM];
}INDOOR_AIR_DEV;
cJSON *kk_get_raw_sync_data(cJSON *payload); cJSON *kk_get_raw_sync_data(cJSON *payload);
...@@ -64,7 +83,9 @@ cJSON * val_conver_new2old(cJSON *newccuItem,cJSON *oldccuItem,int syn_type); ...@@ -64,7 +83,9 @@ cJSON * val_conver_new2old(cJSON *newccuItem,cJSON *oldccuItem,int syn_type);
int indoor_airstatus_table_insert_item(const char *deviceCode,int epNum,int online,int PowerSwitch,double Temperature,int WindSpeed,int WorkMode);
INDOOR_AIR_STATUS *indoor_airstatus_table_find_item(const char *deviceCode,int epNum);
int indoor_airstatus_table_delete_item(const char *deviceCode);
......
...@@ -96,9 +96,14 @@ typedef struct { ...@@ -96,9 +96,14 @@ typedef struct {
}vpCFGInfo; }vpCFGInfo;
typedef struct{ typedef struct{
int state; int set_time_flag;
int get_ver_flag;
int ota_update_flag;
int file_update_flag;
vpCFGInfo cfg_info; vpCFGInfo cfg_info;
int updateFlag;
}VP_MANAGE; }VP_MANAGE;
...@@ -185,36 +190,20 @@ static int _vp_config_file_version_load(void) ...@@ -185,36 +190,20 @@ static int _vp_config_file_version_load(void)
return 1; return 1;
} }
void kk_vp_set_updateFlag(int flag)
{
vp_mag.updateFlag = (flag!=0)?1:0;
}
void kk_vp_config_file_update(void) void kk_voice_update_config_file(void)
{ {
if(vp_mag.updateFlag==0){ kk_vp_config_file_update_stop(vp_mag.cfg_info.f_ver);
return ;
}
if(vp_mag.state == UPDATING_8009_CONFIG_FILE_INFO|| kk_vp_config_file_update_start(vp_mag.cfg_info.next_ver);
vp_mag.state == START_8009_CONFIG_FILE_UPDATE){
kk_vp_set_state_machine(STOP_8009_CONFIG_FILE_UPDATE);
}else{
kk_vp_set_state_machine(START_8009_CONFIG_FILE_UPDATE);
}
kk_vp_set_updateFlag(0); vp_mag.file_update_flag = 1;
} }
void kk_vp_set_state_machine(int state)
{
if(vp_mag.state!=state){
INFO_PRINT("[vp state machine]%d->%d\n",vp_mag.state,state);
vp_mag.state = state;
}
}
int kk_vp_get_config_file_version(void) int kk_vp_get_config_file_version(void)
{ {
...@@ -244,8 +233,9 @@ void kk_vp_cfg_info_check(uint32_t f_ver,uint32_t f_size,uint32_t crc32) ...@@ -244,8 +233,9 @@ void kk_vp_cfg_info_check(uint32_t f_ver,uint32_t f_size,uint32_t crc32)
printf("[VP]File Version=%08x,File Size=%08x,CRC32=%08x\n",f_ver,f_size,crc32); printf("[VP]File Version=%08x,File Size=%08x,CRC32=%08x\n",f_ver,f_size,crc32);
printf("[LAN]File Version=%08x,File Size=%08x,CRC32=%08x\n",vp_mag.cfg_info.f_ver,vp_mag.cfg_info.f_size,vp_mag.cfg_info.crc32); printf("[LAN]File Version=%08x,File Size=%08x,CRC32=%08x\n",vp_mag.cfg_info.f_ver,vp_mag.cfg_info.f_size,vp_mag.cfg_info.crc32);
kk_vp_set_updateFlag(1);
printf("[%s][%d]update config file.\n",__FUNCTION__,__LINE__); debug_log(LOG_EMERG_LEVEL,"-------------------->start update config file<------------------\n");
kk_voice_update_config_file();
} }
} }
...@@ -254,13 +244,29 @@ void kk_vp_update_result_check(uint8_t status,uint32_t f_ver) ...@@ -254,13 +244,29 @@ void kk_vp_update_result_check(uint8_t status,uint32_t f_ver)
if(status==0 && (vp_mag.cfg_info.f_ver==f_ver) ){ if(status==0 && (vp_mag.cfg_info.f_ver==f_ver) ){
vp_mag.cfg_info.next_ver=vp_mag.cfg_info.f_ver+1; vp_mag.cfg_info.next_ver=vp_mag.cfg_info.f_ver+1;
printf("[cfg ver]File Version=%08x\n",vp_mag.cfg_info.f_ver); printf("[cfg ver]File Version=%08x\n",vp_mag.cfg_info.f_ver);
kk_vp_set_state_machine(GET_8009_CONFIG_FILE_INFO);
}else{ }else{
kk_vp_set_updateFlag(1); debug_log(LOG_EMERG_LEVEL,"-------------------->start update config file again<------------------\n");
printf("[%s][%d]update config file.\n",__FUNCTION__,__LINE__); kk_voice_update_config_file();
} }
} }
void kk_voice_reset_ver_flag(void)
{
vp_mag.get_ver_flag = 0;
vp_mag.ota_update_flag = 0;
}
void kk_voice_set_time_flag(void)
{
vp_mag.set_time_flag = 1;
}
void kk_get_voice_version(void)
{
debug_log(LOG_INFO_LEVEL,"mark!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
vp_mag.get_ver_flag = 1;
}
...@@ -270,13 +276,11 @@ void kk_vp_update_result_check(uint8_t status,uint32_t f_ver) ...@@ -270,13 +276,11 @@ void kk_vp_update_result_check(uint8_t status,uint32_t f_ver)
int kk_vp_config_file_info_check(int f_ver,int f_size,int crc32) int kk_vp_config_file_info_check(int f_ver,int f_size,int crc32)
{ {
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO);
if(vp_mag.cfg_info.f_ver==f_ver && if(vp_mag.cfg_info.f_ver==f_ver &&
vp_mag.cfg_info.f_size==f_size && vp_mag.cfg_info.f_size==f_size &&
vp_mag.cfg_info.crc32==crc32){ vp_mag.cfg_info.crc32==crc32){
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO);
return 1; return 1;
} }
...@@ -301,6 +305,8 @@ void kk_voice_ota_mtu_set(uint16_t mtu) ...@@ -301,6 +305,8 @@ void kk_voice_ota_mtu_set(uint16_t mtu)
void kk_vp_manage_init(void) void kk_vp_manage_init(void)
{ {
kk_voice_ota_mtu_set(KK_VOICE_OTA_MTU);
vp_scene_id_map_load(); vp_scene_id_map_load();
_vp_config_file_version_load(); _vp_config_file_version_load();
vp_mag.cfg_info.f_size = _vp_get_cfg_file_size(); vp_mag.cfg_info.f_size = _vp_get_cfg_file_size();
...@@ -310,63 +316,80 @@ void kk_vp_manage_init(void) ...@@ -310,63 +316,80 @@ void kk_vp_manage_init(void)
void *kk_vp_manage_thread(void *arg) void *kk_vp_manage_thread(void *arg)
{ {
INFO_PRINT("[%s] start...\n",__FUNCTION__); INFO_PRINT("[%s] start...\n",__FUNCTION__);
usleep(100*1000);
kk_vp_manage_init(); kk_vp_manage_init();
while (1) while (1)
{ {
kk_vp_config_file_update(); if(vp_mag.file_update_flag==1||vp_mag.ota_update_flag==1){
sleep(1);
continue;
}
kk_vp_get_config_file_info();
sleep(60*30);
}
switch(vp_mag.state){ ERROR_PRINT("[%s]thread end...\n",__FUNCTION__);
case GET_8009_SNAPSHOOT_STATE: return 0;
kk_vp_get_8009_snapshoot(); }
kk_vp_get_ota_file_info();
sleep(5); static void *kk_voice_ctrl_status_thread(void *arg)
break; {
debug_log(LOG_INFO_LEVEL,"[%s] start...\n",__FUNCTION__);
case SET_8009_SYSTEM:
kk_vp_set_8009_system_time();
sleep(5);
break;
case START_8009_CONFIG_FILE_UPDATE: #define SET_8009_TIME (60*60)
kk_vp_config_file_update_start(vp_mag.cfg_info.next_ver);
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO);
break;
case UPDATING_8009_CONFIG_FILE_INFO: static time_t set_time;
//debug_log(LOG_INFO,"updating...\n");
while (1)
{
int delay = 1;
time_t curTime = time(NULL);
if(vp_mag.get_ver_flag == 0){
debug_log(LOG_DEBUG_LEVEL,"get 8009 snapshoot\n");
kk_vp_get_8009_snapshoot();
sleep(2);
continue;
}
if(vp_mag.set_time_flag == 0){
struct tm *c = localtime(&curTime);
if(c->tm_year!=70){
set_time = curTime;
debug_log(LOG_NOTICE_LEVEL,"set 8009 system time\n");
kk_vp_set_8009_system_time();
}
sleep(2);
continue;
}
if(vp_mag.file_update_flag==1||vp_mag.ota_update_flag==1){
sleep(1); sleep(1);
//todo :超时取消 continue;
break; }
case STOP_8009_CONFIG_FILE_UPDATE:
kk_vp_config_file_update_stop(vp_mag.cfg_info.f_ver); if((curTime-set_time)>=SET_8009_TIME){
if(vp_mag.updateFlag==1){ set_time = curTime;
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO); debug_log(LOG_NOTICE_LEVEL,"[timing %ds] set 8009 system time\n",SET_8009_TIME);
}else{ kk_vp_set_8009_system_time();
kk_vp_set_state_machine(GET_8009_CONFIG_FILE_INFO);
} }
sleep(3);
break;
case GET_8009_CONFIG_FILE_INFO:
kk_vp_get_config_file_info();
sleep(15);
break;
default: if(delay){
break; usleep(100*1000);
} }
usleep(50*1000);
} }
ERROR_PRINT("[%s]thread end...\n",__FUNCTION__);
return 0; return 0;
} }
void kk_voice_panel_uart_dev_chose(int argc, char* argv[]) void kk_voice_panel_uart_dev_chose(int argc, char* argv[])
{ {
int flag = 0; int flag = 0;
...@@ -407,12 +430,43 @@ static int kk_vp_cfg_file_dir_create(void){ ...@@ -407,12 +430,43 @@ static int kk_vp_cfg_file_dir_create(void){
return system(cmd); return system(cmd);
} }
static pthread_mutex_t voice_uart_mutex;
void voice_uart_lock(void)
{
pthread_mutex_lock(&voice_uart_mutex);
}
void voice_uart_unlock(void)
{
pthread_mutex_unlock(&voice_uart_mutex);
}
void kk_voice_ota_start(char *in)
{
char file[128] = {0};
char *ptr = strstr(in,"_");
if (ptr!=NULL) {
snprintf(file,sizeof(file),"/data/OTA/%s", ptr+1);
}else {
snprintf(file, sizeof(file), "/data/OTA/%s", in);
}
debug_log(LOG_WARNING_LEVEL,"%s.\n",file);
kk_vp_ota_file_update_start(file);
}
int kk_voice_panel_init(int argc, char* argv[]) int kk_voice_panel_init(int argc, char* argv[])
{ {
size_t s = 1500; size_t s = 1500;
pthread_t uart_tid = 0; pthread_t uart_tid = 0;
pthread_t mag_tid = 0; pthread_t mag_tid = 0;
pthread_t t_tid = 0;
pthread_attr_t attr; pthread_attr_t attr;
pthread_attr_init(&attr); pthread_attr_init(&attr);
...@@ -443,6 +497,10 @@ int kk_voice_panel_init(int argc, char* argv[]) ...@@ -443,6 +497,10 @@ int kk_voice_panel_init(int argc, char* argv[])
return -3; return -3;
} }
if((pthread_create(&t_tid, NULL, kk_voice_ctrl_status_thread, NULL))!= 0 ) {
return -4;
}
return 0; return 0;
} }
......
...@@ -8,23 +8,51 @@ ...@@ -8,23 +8,51 @@
int kk_voice_panel_init(int argc, char* argv[]); int kk_voice_panel_init(int argc, char* argv[]);
#define GET_8009_SNAPSHOOT_STATE 0
#define SET_8009_SYSTEM 1
#define START_8009_CONFIG_FILE_UPDATE 2
#define UPDATING_8009_CONFIG_FILE_INFO 3
#define STOP_8009_CONFIG_FILE_UPDATE 4
#define GET_8009_CONFIG_FILE_INFO 5
#define KK_VOICE_OTA_MTU 128
void kk_vp_set_state_machine(int state);
void kk_vp_set_config_file_version(int ver); void kk_vp_set_config_file_version(int ver);
int kk_vp_config_file_info_check(int f_ver,int f_size,int crc32); int kk_vp_config_file_info_check(int f_ver,int f_size,int crc32);
void kk_vp_update_result_check(uint8_t status,uint32_t f_ver); void kk_vp_update_result_check(uint8_t status,uint32_t f_ver);
void kk_vp_set_config_file_version(int ver); void kk_vp_set_config_file_version(int ver);
void kk_vp_cfg_info_check(uint32_t f_ver,uint32_t f_size,uint32_t crc32); void kk_vp_cfg_info_check(uint32_t f_ver,uint32_t f_size,uint32_t crc32);
void kk_vp_cfg_info_set(uint32_t f_ver,uint32_t f_size,uint32_t crc32); void kk_vp_cfg_info_set(uint32_t f_ver,uint32_t f_size,uint32_t crc32);
void kk_vp_set_updateFlag(int flag);
void kk_voice_ota_mtu_set(uint16_t mtu);
void voice_uart_lock(void);
void voice_uart_unlock(void);
void kk_voice_ota_start(char *in);
int kk_voice_exit_factory_mode(void); int kk_voice_exit_factory_mode(void);
void kk_voice_ota_mtu_set(uint16_t mtu);
void kk_voice_update_config_file(void);
void kk_voice_reset_ver_flag(void);
void kk_get_voice_version(void);
#endif #endif
...@@ -3,8 +3,9 @@ ...@@ -3,8 +3,9 @@
#include "kk_lan_debug.h" #include "kk_lan_debug.h"
#include "cJSON.h" #include "cJSON.h"
#include "kk_voice_panel_cfg.h" #include "kk_voice_panel_cfg.h"
#include "kk_lan_sync.h"
typedef cJSON *(*dev_handle_func)(int ep,uint8_t *arg,uint8_t arg_len); typedef cJSON *(*dev_handle_func)(int ep,uint8_t *arg,uint8_t arg_len,kk_map_dev_node_t *node);
typedef struct { typedef struct {
const int *pidAry; const int *pidAry;
...@@ -12,15 +13,15 @@ typedef struct { ...@@ -12,15 +13,15 @@ typedef struct {
dev_handle_func func; dev_handle_func func;
}DEV_PID_S; }DEV_PID_S;
static cJSON *air_conditioner_dev_handle(int ep,uint8_t *arg,uint8_t arg_len); static cJSON *air_conditioner_dev_handle(const char *deviceCode,int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *light_dev_handle(int ep,uint8_t *arg,uint8_t arg_len); static cJSON *light_dev_handle(int ep,uint8_t *arg,uint8_t arg_len,kk_map_dev_node_t *node);
static cJSON *curtain_dev_handle(int ep,uint8_t *arg,uint8_t arg_len); static cJSON *curtain_dev_handle(int ep,uint8_t *arg,uint8_t arg_len,kk_map_dev_node_t *node);
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,kk_map_dev_node_t *node);
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,kk_map_dev_node_t *node);
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,kk_map_dev_node_t *node);
static cJSON *underfloor_heating_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,kk_map_dev_node_t *node);
static cJSON *dimming_light_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,kk_map_dev_node_t *node);
static const int air_conditioner_dev_pid[] = AIR_CONDITIONER_DEV_PID; static const int air_conditioner_dev_pid[] = AIR_CONDITIONER_DEV_PID;
...@@ -63,9 +64,40 @@ static dev_handle_func dev_pid_dispatch(int pid) ...@@ -63,9 +64,40 @@ static dev_handle_func dev_pid_dispatch(int pid)
return NULL; return NULL;
} }
//****************************************************************************
cJSON *PowerSwitch_msg_build(int ep,int onoff) static cJSON *get_value(kk_map_dev_node_t *node,const char* key)
{
cJSON *value = NULL;
int i,size;
if(key==NULL||node==NULL||node->newccu==NULL||node->newccu->type!=cJSON_Array){
return NULL;
}
size = cJSON_GetArraySize(node->newccu);
for(i=0;i<size;i++){
cJSON *obj = cJSON_GetArrayItem(node->newccu,i);
cJSON *id = cJSON_GetObjectItem(obj,"identifier");
if(id==NULL){
continue;
}
if(strcmp(id->valuestring,key)==0){
value = cJSON_GetObjectItem(obj,"value");
return value;
}
}
return NULL;
}
//****************************************************************************
cJSON *air_conditioner_dev_powerswitch_msg_build(int ep,int onoff)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
...@@ -77,7 +109,7 @@ cJSON *PowerSwitch_msg_build(int ep,int onoff) ...@@ -77,7 +109,7 @@ cJSON *PowerSwitch_msg_build(int ep,int onoff)
return params; return params;
} }
static cJSON *windSpeed_msg_build(int ep,int level) static cJSON *air_conditioner_dev_windspeed_msg_build(int ep,int level)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
...@@ -86,12 +118,13 @@ static cJSON *windSpeed_msg_build(int ep,int level) ...@@ -86,12 +118,13 @@ static cJSON *windSpeed_msg_build(int ep,int level)
snprintf(epNum,sizeof(epNum),"%d",ep); snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum); cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WindSpeed",level); cJSON_AddNumberToObject(params,"WindSpeed",level);
return params; return params;
} }
static cJSON *workMode_msg_build(int ep,int mode) static cJSON *air_conditioner_dev_workmode_msg_build(int ep,int mode)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
...@@ -100,14 +133,12 @@ static cJSON *workMode_msg_build(int ep,int mode) ...@@ -100,14 +133,12 @@ static cJSON *workMode_msg_build(int ep,int mode)
snprintf(epNum,sizeof(epNum),"%d",ep); snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum); cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WorkMode",mode); cJSON_AddNumberToObject(params,"WorkMode",mode);
return params; return params;
} }
static cJSON *air_conditioner_dev_temperature_msg_build(int ep,int tmp)
static cJSON *temperature_msg_build(int ep,int tmp)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
...@@ -116,206 +147,367 @@ static cJSON *temperature_msg_build(int ep,int tmp) ...@@ -116,206 +147,367 @@ static cJSON *temperature_msg_build(int ep,int tmp)
snprintf(epNum,sizeof(epNum),"%d",ep); snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum); cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"Temperature",tmp); cJSON_AddNumberToObject(params,"Temperature",tmp);
return params; return params;
} }
static cJSON *ColorTemperature_msg_build(int ep,int val) static cJSON *air_conditioner_dev_handle(const char *deviceCode,int ep,uint8_t *arg,uint8_t arg_len)
{ {
char epNum[12] = {0}; uint8_t skill_type = arg[0];
cJSON *params = cJSON_CreateObject(); cJSON *param = NULL;
memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum); switch(skill_type){
cJSON_AddNumberToObject(params,"ColorTemperature",val); case VP_CTRL_OPEN:{
debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
param =air_conditioner_dev_powerswitch_msg_build(ep,1);
}break;
return params; case VP_CTRL_CLOSE:{
} debug_log(LOG_INFO_LEVEL,"[OnOff] off\n");
param =air_conditioner_dev_powerswitch_msg_build(ep,0);
}break;
static cJSON *Brightness_msg_build(int ep,int val) case VP_CTRL_WINDSPEE_SET:{
{ if(arg_len!=3||arg[1]!=0x20){
char epNum[12] = {0}; debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
cJSON *params = cJSON_CreateObject(); return NULL;
}
memset(epNum,0,sizeof(epNum)); uint8_t windspeed = arg[2];
snprintf(epNum,sizeof(epNum),"%d",ep); debug_log(LOG_INFO_LEVEL,"[windspeed] %d\n",windspeed);
cJSON_AddStringToObject(params,"epNum",epNum); if(windspeed==VP_SKILLTYPE_12_WINDSPEED_LOW){
cJSON_AddNumberToObject(params,"Brightness",val); param = air_conditioner_dev_windspeed_msg_build(ep,2);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_MID){
param = air_conditioner_dev_windspeed_msg_build(ep,3);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_HIGH){
param = air_conditioner_dev_windspeed_msg_build(ep,4);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_AUTO){
param = air_conditioner_dev_windspeed_msg_build(ep,0);
}
}break;
return params; case VP_CTRL_MODE:{
} if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
uint8_t mode = arg[2];
debug_log(LOG_INFO_LEVEL,"[mode] %d\n",mode);
if(mode==VP_SKILLTYPE_1C_WORKMODE_COLD){
param = air_conditioner_dev_workmode_msg_build(ep,1);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_HEATING){
param = air_conditioner_dev_workmode_msg_build(ep,2);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_FAN){
param = air_conditioner_dev_workmode_msg_build(ep,3);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_DEHUM){
param = air_conditioner_dev_workmode_msg_build(ep,4);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_AUTO){
param = air_conditioner_dev_workmode_msg_build(ep,0);
}
}break;
case VP_CTRL_TMP_SET:{
if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
uint8_t tmp = arg[2];
debug_log(LOG_INFO_LEVEL,"[tmp] %d\n",tmp);
if(tmp>30){
tmp = 30;
}else if(tmp<17){
tmp = 17;
}
param = air_conditioner_dev_temperature_msg_build(ep,tmp);
}break;
case VP_CTRL_WINDSPEE_UP:{
if(arg[1]!=0x42){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
INDOOR_AIR_STATUS * pStatus = indoor_airstatus_table_find_item(deviceCode,ep);
if(pStatus==NULL){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
}
if(pStatus->online!=1){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] offline\n");
return NULL;
}
debug_log(LOG_INFO_LEVEL,"[pStatus->WindSpeed] %d\n",pStatus->WindSpeed);
debug_log(LOG_INFO_LEVEL,"[WindSpeed] inc\n");
if(pStatus->WindSpeed==2){
param = air_conditioner_dev_windspeed_msg_build(ep,3);
}else if(pStatus->WindSpeed==3||pStatus->WindSpeed==4||pStatus->WindSpeed==0){
param = air_conditioner_dev_windspeed_msg_build(ep,4);
}
}break;
case VP_CTRL_WINDSPEE_DOWN:{
if(arg[1]!=0x42){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
INDOOR_AIR_STATUS * pStatus = indoor_airstatus_table_find_item(deviceCode,ep);
if(pStatus==NULL){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
}
if(pStatus->online!=1){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] offline\n");
return NULL;
}
//**************************************************************************** debug_log(LOG_INFO_LEVEL,"[pStatus->WindSpeed] %d\n",pStatus->WindSpeed);
debug_log(LOG_INFO_LEVEL,"[WindSpeed] dec\n");
static cJSON *light_msg_build(int ep,int onoff) if(pStatus->WindSpeed==4){
{ param = air_conditioner_dev_windspeed_msg_build(ep,3);
return PowerSwitch_msg_build(ep,onoff); }else if(pStatus->WindSpeed==3||pStatus->WindSpeed==2||pStatus->WindSpeed==0){
} param = air_conditioner_dev_windspeed_msg_build(ep,2);
}
}break;
case VP_CTRL_TMP_UP:{
if(arg_len!=5||arg[1]!=0x42&&arg[2]!=0x02){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
INDOOR_AIR_STATUS * pStatus = indoor_airstatus_table_find_item(deviceCode,ep);
static cJSON *freshAir_msg_build(int ep,int onoff) if(pStatus==NULL){
{ debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return PowerSwitch_msg_build(ep,onoff); return NULL;
} }
if(pStatus->online!=1){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] offline\n");
return NULL;
}
debug_log(LOG_INFO_LEVEL,"[pStatus->Temperature] %f\n",pStatus->Temperature);
debug_log(LOG_INFO_LEVEL,"[tmp] inc %d\n",arg[3]);
double tmp = pStatus->Temperature + arg[3];
//**************************************************************************** if(tmp>30){
tmp = 30;
}else if(tmp<17){
tmp = 17;
}
debug_log(LOG_INFO_LEVEL,"[tmp] %f\n",tmp);
param = air_conditioner_dev_temperature_msg_build(ep,tmp);
}break;
static cJSON *air_conditioner_dev_handle(int ep,uint8_t *arg,uint8_t arg_len) case VP_CTRL_TMP_DOWN:{
{ if(arg_len!=5||arg[1]!=0x42&&arg[2]!=0x02){
uint8_t skill_type = arg[0]; debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
switch(skill_type){ INDOOR_AIR_STATUS * pStatus = indoor_airstatus_table_find_item(deviceCode,ep);
case VP_CTRL_OPEN://
return PowerSwitch_msg_build(ep,1);
case VP_CTRL_CLOSE:
return PowerSwitch_msg_build(ep,0);
case VP_CTRL_WINDSPEE_SET:{ if(pStatus==NULL){
if(arg[1]!=0x20){ debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL; return NULL;
} }
uint8_t windspeed = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set windspeed=%d\n",windspeed);
if(windspeed==VP_SKILLTYPE_12_WINDSPEED_LOW){
return windSpeed_msg_build(ep,2);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_MID){
return windSpeed_msg_build(ep,3);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_HIGH){
return windSpeed_msg_build(ep,4);
}
break;
}
case VP_CTRL_MODE:{ if(pStatus->online!=1){
if(arg[1]!=0x20){ debug_log(LOG_WARNING_LEVEL,"[ctrl fail] offline\n");
return NULL; return NULL;
} }
uint8_t mode = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set mode=%d\n",mode);
if(mode==VP_SKILLTYPE_1C_WORKMODE_COLD){
return workMode_msg_build(ep,1);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_HEATING){
return workMode_msg_build(ep,2);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_FAN){
return workMode_msg_build(ep,3);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_DEHUM){
return workMode_msg_build(ep,4);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_AUTO){
return workMode_msg_build(ep,0);
}
break;
}
case VP_CTRL_TMP_SET: debug_log(LOG_INFO_LEVEL,"[pStatus->Temperature] %f\n",pStatus->Temperature);
if(arg[1]!=0x20){ debug_log(LOG_INFO_LEVEL,"[tmp] dec %d\n",arg[3]);
return NULL;
double tmp = pStatus->Temperature - arg[3];
if(tmp>30){
tmp = 30;
}else if(tmp<17){
tmp = 17;
} }
uint8_t tmp = arg[2]; debug_log(LOG_INFO_LEVEL,"[tmp] %f\n",tmp);
debug_log(LOG_CRIT_LEVEL,"[VP] set tmp=%d\n",tmp); param = air_conditioner_dev_temperature_msg_build(ep,tmp);
return temperature_msg_build(ep,tmp);
}break;
default:break; default:break;
} }
return NULL; return param;
} }
static cJSON *light_dev_handle(int ep,uint8_t *arg,uint8_t arg_len) static cJSON *light_dev_msg_build(int ep,int onoff)
{
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,"PowerSwitch",onoff);
return params;
}
static cJSON *light_dev_handle(int ep,uint8_t *arg,uint8_t arg_len,kk_map_dev_node_t *node)
{ {
uint8_t skill_type = arg[0]; uint8_t skill_type = arg[0];
cJSON *param = NULL;
switch(skill_type){ switch(skill_type){
case VP_CTRL_OPEN:// case VP_CTRL_OPEN:{
return light_msg_build(ep,1); debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
case VP_CTRL_CLOSE: param = light_dev_msg_build(ep,1);
return light_msg_build(ep,0); }break;
case VP_CTRL_CLOSE:{
debug_log(LOG_INFO_LEVEL,"[OnOff] off\n");
param = light_dev_msg_build(ep,0);
}break;
default:break; default:break;
} }
return NULL; return param;
} }
static cJSON *curtain_dev_msg_build(int ep,int OperationMode) static cJSON *curtain_dev_mode_msg_build(int ep,int OperationMode)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memset(epNum,0,sizeof(epNum)); memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep); snprintf(epNum,sizeof(epNum),"%d",ep);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddStringToObject(params,"epNum",epNum); cJSON_AddStringToObject(params,"epNum",epNum);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddNumberToObject(params,"OperationMode",OperationMode); cJSON_AddNumberToObject(params,"OperationMode",OperationMode);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return params;
}
static cJSON *curtain_dev_position_msg_build(int ep,int position)
{
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,"OperationMode",1);
cJSON_AddNumberToObject(params,"Position",position);
return params; return params;
} }
static cJSON *curtain_dev_handle(int ep,uint8_t *arg,uint8_t arg_len)
static cJSON *curtain_dev_handle(int ep,uint8_t *arg,uint8_t arg_len,kk_map_dev_node_t *node)
{ {
uint8_t skill_type = arg[0]; uint8_t skill_type = arg[0];
debug_log(LOG_CRIT_LEVEL,"skill_type=%d,ep=%d\n",skill_type,ep); cJSON *param = NULL;
switch(skill_type){ switch(skill_type){
case VP_CTRL_OPEN:// case VP_CTRL_OPEN:{
return curtain_dev_msg_build(ep,1); if(arg_len==3&&arg[1]==0x20){
case VP_CTRL_CLOSE: int position = arg[2];
return curtain_dev_msg_build(ep,0); debug_log(LOG_INFO_LEVEL,"[position] %d%\n",position);
case VP_CTRL_STOP: if(position<0){
return curtain_dev_msg_build(ep,2); position = 0;
}else if(position>100){
position = 100;
}
param = curtain_dev_position_msg_build(ep,position);
}else{
debug_log(LOG_INFO_LEVEL,"[mode] open\n");
param = curtain_dev_mode_msg_build(ep,1);
}
}break;
case VP_CTRL_CLOSE:{
debug_log(LOG_INFO_LEVEL,"[mode] close\n");
param = curtain_dev_mode_msg_build(ep,0);
}break;
case VP_CTRL_STOP:{
debug_log(LOG_INFO_LEVEL,"[mode] stop\n");
param = curtain_dev_mode_msg_build(ep,2);
}
default:break; default:break;
} }
return NULL; return param;
} }
static cJSON *outlet_msg_build(int ep,int onoff) static cJSON *outlet_dev_msg_build(int ep,int onoff)
{ {
return PowerSwitch_msg_build(ep,onoff); 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,"PowerSwitch",onoff);
return params;
} }
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,kk_map_dev_node_t *node)
{ {
uint8_t skill_type = arg[0]; uint8_t skill_type = arg[0];
debug_log(LOG_CRIT_LEVEL,"skill_type=%d,ep=%d\n",skill_type,ep); cJSON *param = NULL;
switch(skill_type){ switch(skill_type){
case VP_CTRL_OPEN:// case VP_CTRL_OPEN:{
return outlet_msg_build(ep,1); debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
case VP_CTRL_CLOSE: param = outlet_dev_msg_build(ep,1);
return outlet_msg_build(ep,0); }break;
case VP_CTRL_CLOSE:{
debug_log(LOG_INFO_LEVEL,"[OnOff] off\n");
param = outlet_dev_msg_build(ep,0);
}break;
default:break; default:break;
} }
return NULL; return param;
} }
cJSON *freshair_dev_powerswitch_msg_build(int ep,int onoff)
{
char epNum[12] = {0};
cJSON *params = cJSON_CreateObject();
static cJSON *freshAir_windspeed_msg_build(int ep,int level) memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",onoff);
return params;
}
static cJSON *freshair_dev_windspeed_msg_build(int ep,int level)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
...@@ -324,12 +516,13 @@ static cJSON *freshAir_windspeed_msg_build(int ep,int level) ...@@ -324,12 +516,13 @@ static cJSON *freshAir_windspeed_msg_build(int ep,int level)
snprintf(epNum,sizeof(epNum),"%d",ep); snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum); cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WindSpeed",level); cJSON_AddNumberToObject(params,"WindSpeed",level);
return params; return params;
} }
static cJSON *freshAir_workMode_msg_build(int ep,int mode) static cJSON *freshair_dev_workmode_msg_build(int ep,int mode)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
...@@ -338,6 +531,7 @@ static cJSON *freshAir_workMode_msg_build(int ep,int mode) ...@@ -338,6 +531,7 @@ static cJSON *freshAir_workMode_msg_build(int ep,int mode)
snprintf(epNum,sizeof(epNum),"%d",ep); snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum); cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WorkMode",mode); cJSON_AddNumberToObject(params,"WorkMode",mode);
return params; return params;
...@@ -345,59 +539,119 @@ static cJSON *freshAir_workMode_msg_build(int ep,int mode) ...@@ -345,59 +539,119 @@ static cJSON *freshAir_workMode_msg_build(int ep,int mode)
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,kk_map_dev_node_t *node)
{ {
uint8_t skill_type = arg[0]; uint8_t skill_type = arg[0];
cJSON *param = NULL;
if(arg_len!=3){
debug_log(LOG_ERROR_LEVEL,"[err] arg_len=%d\n",arg_len);
return NULL;
}
switch(skill_type){ switch(skill_type){
case VP_CTRL_OPEN:// case VP_CTRL_OPEN:{
return PowerSwitch_msg_build(ep,1); debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
case VP_CTRL_CLOSE: param = freshair_dev_powerswitch_msg_build(ep,1);
return PowerSwitch_msg_build(ep,0); }break;
case VP_CTRL_CLOSE:{
debug_log(LOG_INFO_LEVEL,"[OnOff] off\n");
param = freshair_dev_powerswitch_msg_build(ep,0);
}break;
case VP_CTRL_WINDSPEE_SET:{ case VP_CTRL_WINDSPEE_SET:{
if(arg[1]!=0x20){ if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
} }
uint8_t windspeed = arg[2]; uint8_t windspeed = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set windspeed=%d\n",windspeed); debug_log(LOG_INFO_LEVEL,"[windspeed] %d\n",windspeed);
if(windspeed==VP_SKILLTYPE_12_WINDSPEED_LOW){ if(windspeed==VP_SKILLTYPE_12_WINDSPEED_LOW){
return freshAir_windspeed_msg_build(ep,1); param = freshair_dev_windspeed_msg_build(ep,1);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_MID){ }else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_MID){
return freshAir_windspeed_msg_build(ep,2); param = freshair_dev_windspeed_msg_build(ep,2);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_HIGH){ }else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_HIGH){
return freshAir_windspeed_msg_build(ep,3); param = freshair_dev_windspeed_msg_build(ep,3);
} }
break; }break;
}
case VP_CTRL_MODE:{ case VP_CTRL_MODE:{
if(arg[1]!=0x20){ if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
} }
uint8_t mode = arg[2]; uint8_t mode = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set mode=%d\n",mode); debug_log(LOG_INFO_LEVEL,"[mode] %d\n",mode);
if(mode==VP_SKILLTYPE_1C_WORKMODE_AUTO){ if(mode==VP_SKILLTYPE_1C_WORKMODE_AUTO){
return freshAir_workMode_msg_build(ep,0); param = freshair_dev_workmode_msg_build(ep,0);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_MANUAL){ }else if(mode==VP_SKILLTYPE_1C_WORKMODE_MANUAL){
return freshAir_workMode_msg_build(ep,1); param = freshair_dev_workmode_msg_build(ep,1);
} }
break; }break;
case VP_CTRL_WINDSPEE_UP:{
if(arg_len!=3||arg[1]!=0x42){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
} }
default:break;
cJSON *value = get_value(node,"WindSpeed");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
} }
if(value->valueint==0){
param = freshair_dev_windspeed_msg_build(ep,1);
}else if(value->valueint==1){
param = freshair_dev_windspeed_msg_build(ep,2);
}else if(value->valueint==2||value->valueint==3){
param = freshair_dev_windspeed_msg_build(ep,3);
}
}break;
case VP_CTRL_WINDSPEE_DOWN:{
if(arg_len!=3||arg[1]!=0x42){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
cJSON *value = get_value(node,"WindSpeed");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL; return NULL;
}
if(value->valueint==3){
param = freshair_dev_windspeed_msg_build(ep,2);
}else if(value->valueint==2){
param = freshair_dev_windspeed_msg_build(ep,1);
}else if(value->valueint==1||value->valueint==0){
param = freshair_dev_windspeed_msg_build(ep,0);
}
}break;
default:break;
}
return param;
}
cJSON *fanCoilSwitch_powerswitch_msg_build(int ep,int onoff)
{
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,"PowerSwitch",onoff);
return params;
} }
static cJSON *fanCoilSwitch_windspeed_msg_build(int ep,int level) static cJSON *fancoilswitch_dev_windspeed_msg_build(int ep,int level)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
...@@ -406,11 +660,12 @@ static cJSON *fanCoilSwitch_windspeed_msg_build(int ep,int level) ...@@ -406,11 +660,12 @@ static cJSON *fanCoilSwitch_windspeed_msg_build(int ep,int level)
snprintf(epNum,sizeof(epNum),"%d",ep); snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum); cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WindSpeed",level); cJSON_AddNumberToObject(params,"WindSpeed",level);
return params; return params;
} }
static cJSON *fanCoilSwitch_workMode_msg_build(int ep,int mode) static cJSON *fancoilswitch_dev_workmode_msg_build(int ep,int mode)
{ {
char epNum[12] = {0}; char epNum[12] = {0};
cJSON *params = cJSON_CreateObject(); cJSON *params = cJSON_CreateObject();
...@@ -419,6 +674,7 @@ static cJSON *fanCoilSwitch_workMode_msg_build(int ep,int mode) ...@@ -419,6 +674,7 @@ static cJSON *fanCoilSwitch_workMode_msg_build(int ep,int mode)
snprintf(epNum,sizeof(epNum),"%d",ep); snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum); cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WorkMode",mode); cJSON_AddNumberToObject(params,"WorkMode",mode);
return params; return params;
...@@ -433,150 +689,501 @@ static cJSON *fanCoilSwitch_Temperature_msg_build(int ep,int tmp) ...@@ -433,150 +689,501 @@ static cJSON *fanCoilSwitch_Temperature_msg_build(int ep,int tmp)
snprintf(epNum,sizeof(epNum),"%d",ep); snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum); cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"Temperature",tmp); cJSON_AddNumberToObject(params,"Temperature",tmp);
return params; return params;
} }
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,kk_map_dev_node_t *node)
{ {
uint8_t skill_type = arg[0]; uint8_t skill_type = arg[0];
cJSON *param = NULL;
switch(skill_type){ switch(skill_type){
case VP_CTRL_OPEN:// case VP_CTRL_OPEN:{
return PowerSwitch_msg_build(ep,1); debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
case VP_CTRL_CLOSE: param = fanCoilSwitch_powerswitch_msg_build(ep,1);
return PowerSwitch_msg_build(ep,0); }break;
case VP_CTRL_CLOSE:{
debug_log(LOG_INFO_LEVEL,"[OnOff] off\n");
param = fanCoilSwitch_powerswitch_msg_build(ep,0);
}break;
case VP_CTRL_WINDSPEE_SET:{ case VP_CTRL_WINDSPEE_SET:{
if(arg[1]!=0x20){ if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
} }
uint8_t windspeed = arg[2]; uint8_t windspeed = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set windspeed=%d\n",windspeed); debug_log(LOG_INFO_LEVEL,"[windSpeed] %d\n",windspeed);
if(windspeed==VP_SKILLTYPE_12_WINDSPEED_LOW){ if(windspeed==VP_SKILLTYPE_12_WINDSPEED_LOW){
return fanCoilSwitch_windspeed_msg_build(ep,2); param = fancoilswitch_dev_windspeed_msg_build(ep,2);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_MID){ }else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_MID){
return fanCoilSwitch_windspeed_msg_build(ep,3); param = fancoilswitch_dev_windspeed_msg_build(ep,3);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_HIGH){ }else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_HIGH){
return fanCoilSwitch_windspeed_msg_build(ep,4); param = fancoilswitch_dev_windspeed_msg_build(ep,4);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_AUTO){ }else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_AUTO){
return fanCoilSwitch_windspeed_msg_build(ep,0); param = fancoilswitch_dev_windspeed_msg_build(ep,0);
} }else{
break; debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
} }
}break;
case VP_CTRL_MODE:{ case VP_CTRL_MODE:{
if(arg[1]!=0x20){ if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
} }
uint8_t mode = arg[2]; uint8_t mode = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set mode=%d\n",mode); debug_log(LOG_INFO_LEVEL,"[mode] %d\n",mode);
if(mode==VP_SKILLTYPE_1C_WORKMODE_COLD){ if(mode==VP_SKILLTYPE_1C_WORKMODE_COLD){
return freshAir_workMode_msg_build(ep,1); param = fancoilswitch_dev_workmode_msg_build(ep,1);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_HEATING){ }else if(mode==VP_SKILLTYPE_1C_WORKMODE_HEATING){
return freshAir_workMode_msg_build(ep,2); param = fancoilswitch_dev_workmode_msg_build(ep,2);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_FAN){ }else if(mode==VP_SKILLTYPE_1C_WORKMODE_FAN){
return freshAir_workMode_msg_build(ep,3); param = fancoilswitch_dev_workmode_msg_build(ep,3);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_DEHUM){ }else if(mode==VP_SKILLTYPE_1C_WORKMODE_DEHUM){
return freshAir_workMode_msg_build(ep,4); param = fancoilswitch_dev_workmode_msg_build(ep,4);
} }else{
break; debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
} }
}break;
case VP_CTRL_TMP_SET: case VP_CTRL_TMP_SET:{
if(arg[1]!=0x20){ if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
} }
uint8_t tmp = arg[2]; uint8_t tmp = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set tmp=%d\n",tmp); debug_log(LOG_INFO_LEVEL,"[tmp] %d\n",tmp);
return fanCoilSwitch_Temperature_msg_build(ep,tmp); if(tmp>30){
tmp = 30;
}else if(tmp<17){
tmp = 17;
}
default:break; param = fanCoilSwitch_Temperature_msg_build(ep,tmp);
}break;
case VP_CTRL_WINDSPEE_UP:{
if(arg[1]!=0x42){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
cJSON *value = get_value(node,"WindSpeed");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
}
debug_log(LOG_INFO_LEVEL,"[value] %d\n",value->valueint);
debug_log(LOG_INFO_LEVEL,"[WindSpeed] inc\n");
if(value->valueint==2){
param = fancoilswitch_dev_windspeed_msg_build(ep,3);
}else if(value->valueint==3){
param = fancoilswitch_dev_windspeed_msg_build(ep,4);
}else if(value->valueint==4||value->valueint==0){
param = fancoilswitch_dev_windspeed_msg_build(ep,4);
}else{
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value=%d\n",value->valueint);
return NULL;
}
}break;
case VP_CTRL_WINDSPEE_DOWN:{
if(arg[1]!=0x42){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
cJSON *value = get_value(node,"WindSpeed");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
} }
debug_log(LOG_INFO_LEVEL,"[value] %d\n",value->valueint);
debug_log(LOG_INFO_LEVEL,"[WindSpeed] dec\n");
if(value->valueint==4){
param = fancoilswitch_dev_windspeed_msg_build(ep,3);
}else if(value->valueint==3){
param = fancoilswitch_dev_windspeed_msg_build(ep,2);
}else if(value->valueint==2||value->valueint==0){
param = fancoilswitch_dev_windspeed_msg_build(ep,2);
}else{
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value=%d\n",value->valueint);
return NULL;
}
}break;
case VP_CTRL_TMP_UP:{
if(arg_len!=5||arg[1]!=0x42&&arg[2]!=0x02){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
cJSON *value = get_value(node,"Temperature");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
}
debug_log(LOG_INFO_LEVEL,"[value] %d\n",value->valueint);
debug_log(LOG_INFO_LEVEL,"[tmp] inc %d\n",arg[3]);
double tmp = value->valuedouble + arg[3];
if(tmp>30){
tmp = 30;
}else if(tmp<17){
tmp = 17;
}
debug_log(LOG_INFO_LEVEL,"[tmp] %f\n",tmp);
param = fanCoilSwitch_Temperature_msg_build(ep,tmp);
}break;
case VP_CTRL_TMP_DOWN:{
if(arg_len!=5||arg[1]!=0x42&&arg[2]!=0x02){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
}
cJSON *value = get_value(node,"Temperature");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
}
debug_log(LOG_INFO_LEVEL,"[value] %d\n",value->valueint);
debug_log(LOG_INFO_LEVEL,"[tmp] dec %d\n",arg[3]);
double tmp = value->valuedouble - arg[3];
if(tmp>30){
tmp = 30;
}else if(tmp<17){
tmp = 17;
}
debug_log(LOG_INFO_LEVEL,"[tmp] %f\n",tmp);
param = fanCoilSwitch_Temperature_msg_build(ep,tmp);
}break;
default:break;
}
return param;
} }
static cJSON *underfloor_heating_dev_handle(int ep,uint8_t *arg,uint8_t arg_len)
cJSON *underfloor_heating_powerswitch_msg_build(int ep,int onoff)
{ {
uint8_t skill_type = arg[0]; 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,"PowerSwitch",onoff);
return params;
}
static cJSON *underfloor_heating_workmode_msg_build(int ep,int mode)
{
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,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WorkMode",mode);
return params;
}
static cJSON *underfloor_heating_temperature_msg_build(int ep,int tmp)
{
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,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WorkMode",1);
cJSON_AddNumberToObject(params,"Temperature",tmp);
return params;
}
static cJSON *underfloor_heating_dev_handle(int ep,uint8_t *arg,uint8_t arg_len,kk_map_dev_node_t *node)
{
uint8_t skill_type = arg[0];
cJSON *param = NULL;
switch(skill_type){ switch(skill_type){
case VP_CTRL_OPEN:// case VP_CTRL_OPEN:{
return PowerSwitch_msg_build(ep,1); debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
case VP_CTRL_CLOSE: param = underfloor_heating_powerswitch_msg_build(ep,1);
return PowerSwitch_msg_build(ep,0); }break;
case VP_CTRL_CLOSE:{
debug_log(LOG_INFO_LEVEL,"[OnOff] off\n");
param = underfloor_heating_powerswitch_msg_build(ep,0);
}break;
case VP_CTRL_MODE:{ case VP_CTRL_MODE:{
if(arg[1]!=0x20){ if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
} }
uint8_t mode = arg[2]; uint8_t mode = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set mode=%d\n",mode); debug_log(LOG_INFO_LEVEL,"[mode] %d\n",mode);
if(mode==VP_SKILLTYPE_1C_WORKMODE_AUTO){ if(mode==VP_SKILLTYPE_1C_WORKMODE_AUTO){
return workMode_msg_build(ep,0); param = underfloor_heating_workmode_msg_build(ep,0);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_MANUAL){ }else if(mode==VP_SKILLTYPE_1C_WORKMODE_MANUAL){
return workMode_msg_build(ep,1); param = underfloor_heating_workmode_msg_build(ep,1);
}
break;
} }
}break;
case VP_CTRL_TMP_SET: case VP_CTRL_TMP_SET:{
if(arg[1]!=0x20){ if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
} }
uint8_t tmp = arg[2]; uint8_t tmp = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set tmp=%d\n",tmp); debug_log(LOG_INFO_LEVEL,"[tmp] %d\n",tmp);
return temperature_msg_build(ep,tmp);
default:break; if(tmp>30){
tmp = 30;
}else if(tmp<20){
tmp = 20;
}
param = underfloor_heating_temperature_msg_build(ep,tmp);
}break;
case VP_CTRL_TMP_UP:{
if(arg_len!=5||arg[1]!=0x42&&arg[2]!=0x02){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
} }
cJSON *value = get_value(node,"Temperature");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
}
debug_log(LOG_INFO_LEVEL,"[value] %d\n",value->valueint);
debug_log(LOG_INFO_LEVEL,"[tmp] inc %d\n",arg[3]);
double tmp = value->valuedouble + arg[3];
if(tmp>30){
tmp = 30;
}else if(tmp<20){
tmp = 20;
}
debug_log(LOG_INFO_LEVEL,"tmp=%f\n",tmp);
param = underfloor_heating_temperature_msg_build(ep,tmp);
}break;
case VP_CTRL_TMP_DOWN:{
if(arg[1]!=0x42&&arg[2]!=0x02){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
}
cJSON *value = get_value(node,"Temperature");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
}
debug_log(LOG_INFO_LEVEL,"[value] %d\n",value->valueint);
debug_log(LOG_INFO_LEVEL,"[tmp] dec %d\n",arg[3]);
double tmp = value->valuedouble - arg[3];
if(tmp>30){
tmp = 30;
}else if(tmp<20){
tmp = 20;
}
debug_log(LOG_INFO_LEVEL,"tmp=%f\n",tmp);
param = underfloor_heating_temperature_msg_build(ep,tmp);
}break;
default:break;
}
return param;
}
cJSON *dimming_light_dev_powerSwitch_msg_build(int ep,int onoff)
{
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,"PowerSwitch",onoff);
return params;
} }
static cJSON *dimming_light_dev_handle(int ep,uint8_t *arg,uint8_t arg_len) static cJSON *dimming_light_dev_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,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"ColorTemperature",val);
return params;
}
static cJSON *dimming_light_dev_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,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"Brightness",val);
return params;
}
static cJSON *dimming_light_dev_handle(int ep,uint8_t *arg,uint8_t arg_len,kk_map_dev_node_t *node)
{ {
uint8_t skill_type = arg[0]; uint8_t skill_type = arg[0];
cJSON *param = NULL;
switch(skill_type){ switch(skill_type){
case VP_CTRL_OPEN:// case VP_CTRL_OPEN:{
return PowerSwitch_msg_build(ep,1); debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
case VP_CTRL_CLOSE: param = dimming_light_dev_powerSwitch_msg_build(ep,1);
return PowerSwitch_msg_build(ep,0); }break;
case VP_CTRL_CLOSE:{
debug_log(LOG_INFO_LEVEL,"[OnOff] off\n");
param = dimming_light_dev_powerSwitch_msg_build(ep,0);
}break;
case VP_CTRL_SET_COLOR_TMP:{ case VP_CTRL_SET_COLOR_TMP:{
if(arg[1]!=0x20){ if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
} }
uint8_t mode = arg[2]; uint8_t mode = arg[2];
debug_log(LOG_CRIT_LEVEL,"[VP] set mode=%d\n",mode); debug_log(LOG_INFO_LEVEL,"[mode] %d\n",mode);
if(mode==0x01){ if(mode==0x01){
return ColorTemperature_msg_build(ep,20); param = dimming_light_dev_colortemperature_msg_build(ep,20);
}else if(mode==0x02){ }else if(mode==0x02){
return ColorTemperature_msg_build(ep,50); param = dimming_light_dev_colortemperature_msg_build(ep,50);
}else if(mode==0x03){ }else if(mode==0x03){
return ColorTemperature_msg_build(ep,100); param = dimming_light_dev_colortemperature_msg_build(ep,100);
}
break;
} }
case VP_CTRL_BRIGHTNESS_SET: }break;
if(arg[1]!=0x20){
case VP_CTRL_BRIGHTNESS_SET:{
if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL; return NULL;
} }
uint8_t bri = arg[2]; uint8_t bri = arg[2];
return Brightness_msg_build(ep,bri); debug_log(LOG_INFO_LEVEL,"[bri] %d\n",bri);
break; if(bri>100){
bri = 100;
}else if(bri<=1){
bri = 1;
}
param = dimming_light_dev_brightness_msg_build(ep,bri);
}break;
default:break;
case VP_CTRL_BRIGHTNESS_DOWN:{
if(arg_len!=5||arg[1]!=0x42&&arg[2]!=0x02){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
} }
cJSON *value = get_value(node,"Brightness");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL; return NULL;
}
debug_log(LOG_INFO_LEVEL,"[value] %d\n",value->valueint);
debug_log(LOG_INFO_LEVEL,"[bri] dec %d\n",arg[3]);
int bri = value->valueint-arg[3];
if(bri>100){
bri = 100;
}else if(bri<=1){
bri = 1;
}
debug_log(LOG_INFO_LEVEL,"bri=%d\n",bri);
param = dimming_light_dev_brightness_msg_build(ep,bri);
}break;
case VP_CTRL_BRIGHTNESS_UP:{
if(arg_len!=5||arg[1]!=0x42&&arg[2]!=0x02){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
cJSON *value = get_value(node,"Brightness");
if(value==NULL||value->type!=cJSON_Number){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
return NULL;
}
debug_log(LOG_INFO_LEVEL,"[value] %d\n",value->valueint);
debug_log(LOG_INFO_LEVEL,"[bri] inc %d\n",arg[3]);
int bri = value->valueint+arg[3];
if(bri>100){
bri = 100;
}else if(bri<=1){
bri = 1;
}
debug_log(LOG_INFO_LEVEL,"bri=%d\n",bri);
param = dimming_light_dev_brightness_msg_build(ep,bri);
}break;
default:break;
}
return param;
} }
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)
{ {
uint8_t i,j; uint8_t i,j;
uint8_t err = 0; int err = 1;
uint8_t skill_type; uint8_t skill_type;
int ep; int ep;
int pid = 0; int pid = 0;
...@@ -616,24 +1223,32 @@ int kk_lan_vp_control(uint8_t num,uint32_t nodeIdAry[],uint8_t *arg,uint8_t arg_ ...@@ -616,24 +1223,32 @@ int kk_lan_vp_control(uint8_t num,uint32_t nodeIdAry[],uint8_t *arg,uint8_t arg_
params = NULL; params = NULL;
if(is_ac_gw_pid(pid)!=0){ if(is_ac_gw_pid(pid)!=0){
debug_log(LOG_CRIT_LEVEL,"air conditioner,pid=%d\n",pid); params = air_conditioner_dev_handle(deviceCode,ep,arg,arg_len);
params = air_conditioner_dev_handle(ep,arg,arg_len);
}else{ }else{
if((func = dev_pid_dispatch(pid))!=NULL){ if((func = dev_pid_dispatch(pid))!=NULL){
debug_log(LOG_CRIT_LEVEL,"skill_type=%02x,ep=%d\n",skill_type,ep);
params = func(ep,arg,arg_len); if(node==NULL){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] node=NULL\n");
continue ;
}
if(node->online_status==0){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] dev offline\n");
continue ;
}
params = func(ep,arg,arg_len,node);
} }
} }
if(params!=NULL){ if(params!=NULL){
msg=property_set(productCode,deviceCode,"*","*",params); msg=property_set(productCode,deviceCode,"*","*",params);
kk_ipc_send_json(msg); kk_ipc_send_json(msg);
}else{ err = 0;
err = 1;
break;
} }
} }
return err; return err;
} }
......
...@@ -560,7 +560,9 @@ int kk_lan_device_delete_notify(cJSON *payload) ...@@ -560,7 +560,9 @@ int kk_lan_device_delete_notify(cJSON *payload)
return -1; return -1;
} }
indoor_airstatus_table_delete_item(deviceCode->valuestring);
_kk_lan_delete_device(deviceCode->valuestring); _kk_lan_delete_device(deviceCode->valuestring);
return 0; return 0;
} }
......
...@@ -390,7 +390,11 @@ static int kk_vp_sync_device_multi_eps(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c ...@@ -390,7 +390,11 @@ 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){
/*if(strcmp(pDevs->online,"1")==0){
node->online_status = 1;
}else{
node->online_status = 0;
}*/
snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s",node->opearteType); snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s",node->opearteType);
}else{ }else{
...@@ -467,6 +471,12 @@ static int kk_vp_sync_device_single_ep(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c ...@@ -467,6 +471,12 @@ static int kk_vp_sync_device_single_ep(_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){
snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s",node->opearteType); snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s",node->opearteType);
/*if(strcmp(pDevs->online,"1")==0){
node->online_status = 1;
}else{
node->online_status = 0;
}*/
}else{ }else{
if(is_ac_gw_pid(atoi(pDevs->pid))!=0){ if(is_ac_gw_pid(atoi(pDevs->pid))!=0){
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include "kk_newccu_msg.h" #include "kk_newccu_msg.h"
#include "kk_voice_panel_cfg.h" #include "kk_voice_panel_cfg.h"
#include "kk_voice_panel_handle.h" #include "kk_voice_panel_handle.h"
...@@ -20,7 +21,7 @@ ...@@ -20,7 +21,7 @@
static char s_voice_sw[16] = {0};
static uint16_t _g_seq; static uint16_t _g_seq;
static FILE *update_fp = NULL; static FILE *update_fp = NULL;
...@@ -28,6 +29,7 @@ static FILE *ota_fp = NULL; ...@@ -28,6 +29,7 @@ static FILE *ota_fp = NULL;
#define VP_CH 0 #define VP_CH 0
#define SOUND_SETE_VP_CH 9
#define VP_RES 0 #define VP_RES 0
...@@ -393,11 +395,43 @@ uint16_t vp_get_seq(void) ...@@ -393,11 +395,43 @@ uint16_t vp_get_seq(void)
{ {
return _g_seq++; return _g_seq++;
} }
void vp_send_data_build_ex(uint16_t opCode,int len,uint8_t *data)
{
uint8_t data_buf[1024] = {0};
int data_len = 0;
pro_data_t pro_data;
memset(&pro_data,0,sizeof(pro_data_t));
pro_data.seq = vp_get_seq();
pro_data.ch = SOUND_SETE_VP_CH;
pro_data.opcode = opCode;
pro_data.cf.ack = 0;
pro_data.cf.dir = 1;
pro_data.cf.sof_flag = 1;
void vp_send_data_build(uint16_t opCode,uint8_t len,uint8_t *data) pro_data.args_len = len;
memcpy(pro_data.arg,data,len);
data_len = proto_frame_to_uart(&pro_data,data_buf);
debug_log(LOG_INFO_LEVEL,"\n[LAN->VP]len=%d\n",data_len);
uint8_t dataStr[512] = {0};
for(int i=0;i<data_len;i++){
snprintf((char *)dataStr + strlen((char *)dataStr), sizeof(dataStr), "%02X ",data_buf[i]);
}
debug_log(LOG_INFO_LEVEL,"%s\n\n",dataStr);
voice_uart_lock();
eSerial_WriteBuffer(data_buf, data_len);
voice_uart_unlock();
}
void vp_send_data_build(uint16_t opCode,int len,uint8_t *data)
{ {
uint8_t data_buf[256] = {0}; uint8_t data_buf[1024] = {0};
uint8_t data_len = 0; int data_len = 0;
pro_data_t pro_data; pro_data_t pro_data;
memset(&pro_data,0,sizeof(pro_data_t)); memset(&pro_data,0,sizeof(pro_data_t));
...@@ -422,13 +456,16 @@ void vp_send_data_build(uint16_t opCode,uint8_t len,uint8_t *data) ...@@ -422,13 +456,16 @@ void vp_send_data_build(uint16_t opCode,uint8_t len,uint8_t *data)
snprintf((char *)dataStr + strlen((char *)dataStr), sizeof(dataStr), "%02X ",data_buf[i]); snprintf((char *)dataStr + strlen((char *)dataStr), sizeof(dataStr), "%02X ",data_buf[i]);
} }
debug_log(LOG_INFO_LEVEL,"%s\n\n",dataStr); debug_log(LOG_INFO_LEVEL,"%s\n\n",dataStr);
voice_uart_lock();
eSerial_WriteBuffer(data_buf, data_len); eSerial_WriteBuffer(data_buf, data_len);
voice_uart_unlock();
} }
void vp_reply_data_build(uint16_t seq,uint8_t ch,uint16_t opCode,uint8_t len,uint8_t *data) void vp_reply_data_build(uint16_t seq,uint8_t ch,uint16_t opCode,int len,uint8_t *data)
{ {
uint8_t data_buf[256] = {0}; uint8_t data_buf[1024] = {0};
uint8_t data_len = 0; int data_len = 0;
pro_data_t pro_data; pro_data_t pro_data;
memset(&pro_data,0,sizeof(pro_data_t)); memset(&pro_data,0,sizeof(pro_data_t));
...@@ -447,13 +484,16 @@ void vp_reply_data_build(uint16_t seq,uint8_t ch,uint16_t opCode,uint8_t len,uin ...@@ -447,13 +484,16 @@ void vp_reply_data_build(uint16_t seq,uint8_t ch,uint16_t opCode,uint8_t len,uin
data_len = proto_frame_to_uart(&pro_data,data_buf); data_len = proto_frame_to_uart(&pro_data,data_buf);
debug_log(LOG_INFO_LEVEL,"\n[LAN->VP]len=%d\n",data_len);
uint8_t dataStr[512] = {0}; uint8_t dataStr[1024] = {0};
for(int i=0;i<data_len;i++){ for(int i=0;i<data_len;i++){
snprintf((char *)dataStr + strlen((char *)dataStr), sizeof(dataStr), "%02X ",data_buf[i]); snprintf((char *)dataStr + strlen((char *)dataStr), sizeof(dataStr), "%02X ",data_buf[i]);
} }
debug_log(LOG_INFO_LEVEL,"%s\n\n",dataStr); debug_log(LOG_INFO_LEVEL,"%s\n\n",dataStr);
voice_uart_lock();
eSerial_WriteBuffer(data_buf, data_len); eSerial_WriteBuffer(data_buf, data_len);
voice_uart_unlock();
} }
...@@ -551,19 +591,35 @@ int _vp_get_cfg_file_crc32(void) ...@@ -551,19 +591,35 @@ int _vp_get_cfg_file_crc32(void)
return crc32; return crc32;
} }
int kk_vp_voice_version_set(char *ver,int len)
{
if(ver == NULL || len >= strlen(s_voice_sw)){
return -1;
}
memcpy(s_voice_sw,ver,strlen(ver));
return 0;
}
static void vp_open_fd() static void vp_open_fd()
{ {
if(update_fp!=NULL){
fclose (update_fp);
}
update_fp = fopen (VP_CONFIG_FILE_TAR_GZ,"rb"); update_fp = fopen (VP_CONFIG_FILE_TAR_GZ,"rb");
if(update_fp==NULL){ if(update_fp==NULL){
debug_log(LOG_WARNING_LEVEL,"[%s]fopen err!\n",VP_CONFIG_FILE_TAR_GZ); debug_log(LOG_WARNING_LEVEL,"[%s]fopen err!\n",VP_CONFIG_FILE_TAR_GZ);
} }
} }
static void vp_close_fd()
int kk_vp_voice_version_get(char *ver,int len)
{ {
if(update_fp!=NULL){ if(ver == NULL || len < strlen(s_voice_sw)){
fclose (update_fp); return -1;
} }
memcpy(ver,s_voice_sw,strlen(s_voice_sw));
return 0;
} }
...@@ -593,23 +649,37 @@ static void vp_close_fd() ...@@ -593,23 +649,37 @@ static void vp_close_fd()
static char s_voice_sw[16] = {0};
int kk_vp_voice_version_get(char *ver,int len)
{
if(ver == NULL || len < strlen(s_voice_sw)){
return -1;
}
memcpy(ver,s_voice_sw,strlen(s_voice_sw));
return 0;
}
int kk_vp_voice_version_set(char *ver,int len)
{
if(ver == NULL || len >= strlen(s_voice_sw)){
return -1;
}
memcpy(s_voice_sw,ver,strlen(ver));
return 0;
}
static void kk_vp_get_8009_snapshoot_handle(pro_data_t *pro_data) static void kk_vp_get_8009_snapshoot_handle(pro_data_t *pro_data)
{ {
uint8_t err; uint8_t err;
...@@ -639,7 +709,6 @@ static void kk_vp_get_8009_snapshoot_handle(pro_data_t *pro_data) ...@@ -639,7 +709,6 @@ static void kk_vp_get_8009_snapshoot_handle(pro_data_t *pro_data)
f_ver = MK_UINT32(&pro_data->arg[15]); f_ver = MK_UINT32(&pro_data->arg[15]);
kk_vp_set_state_machine(SET_8009_SYSTEM);
kk_vp_set_config_file_version(f_ver); kk_vp_set_config_file_version(f_ver);
memset(s_voice_sw,0x0,sizeof(s_voice_sw)); memset(s_voice_sw,0x0,sizeof(s_voice_sw));
//string version=std::to_string(pro_data->arg[1])+"."+std::to_string(pro_data->arg[2])+"."+std::to_string(pro_data->arg[3]); //string version=std::to_string(pro_data->arg[1])+"."+std::to_string(pro_data->arg[2])+"."+std::to_string(pro_data->arg[3]);
...@@ -649,6 +718,89 @@ static void kk_vp_get_8009_snapshoot_handle(pro_data_t *pro_data) ...@@ -649,6 +718,89 @@ static void kk_vp_get_8009_snapshoot_handle(pro_data_t *pro_data)
} }
} }
char MAC[18];
#define CMD_MAC "fw_printenv ethaddr -n"
int _System(const char * cmd, char *pRetMsg, int msg_len){
FILE * fp;
int res = -1;
int ret = 0;
if (cmd == NULL || pRetMsg == NULL || msg_len < 0)
{
printf("Param Error!\n");
return -1;
}
if ((fp = popen(cmd, "r") ) == NULL)
{
printf("Popen Error!\n");
return -2;
}else{
int i = 0;
char c = 0;
memset(pRetMsg, 0, msg_len);
//while(fgets(pRetMsg, msg_len, fp) != NULL)
while(fread(&c,1,1,fp),!feof(fp))
{
//printf("%s, i=%d\n",pRetMsg, i);
pRetMsg[i++]=c;
if (i >= msg_len -1){
break;
}
}
//printf("end %s \n",pRetMsg);
if ((res = pclose(fp)) == -1)
{
printf("close popenerror!\n");
return -3;
}
if (pRetMsg[strlen(pRetMsg)-1] == '\n'){
pRetMsg[strlen(pRetMsg)-1] = '\0';
}
return ret;
}
}
char* getMac(){
char tmp[128] = {0};
int ret = 0;
if (strlen(MAC) > 0){
return MAC;
}
ret = _System(CMD_MAC, tmp, sizeof(tmp));
if (ret == 0 && strlen(tmp) > 0){
memset(MAC, 0x00, sizeof(MAC));
strncpy(MAC, tmp, sizeof(MAC));
MAC[sizeof(MAC) - 1] = 0;
return MAC;
}else{
printf("==== get mac error, exit sys_ota!!!!!! \n");
return NULL;
}
}
static char convert_byte(char temp)
{
char data = 0;
if ((temp >= '0') && (temp <= '9'))
{
data = (temp - '0');
}
else if ((temp >= 'a') && (temp <= 'f'))
{
data = (temp - 'a' + 10);
}
else if ((temp >= 'A') && (temp <= 'F'))
{
data = (temp - 'A' + 10);
}
return data;
}
static void kk_vp_get_snapshoot_handle(pro_data_t *pro_data) static void kk_vp_get_snapshoot_handle(pro_data_t *pro_data)
{ {
uint8_t data[12]={0}; uint8_t data[12]={0};
...@@ -659,10 +811,16 @@ static void kk_vp_get_snapshoot_handle(pro_data_t *pro_data) ...@@ -659,10 +811,16 @@ static void kk_vp_get_snapshoot_handle(pro_data_t *pro_data)
uint16_t nodeId = 0; uint16_t nodeId = 0;
uint8_t netStatus = 0x02; uint8_t netStatus = 0x02;
if(pro_data->args_len!=1){ char* pMac = getMac();
if(pro_data->args_len!=1||pMac==NULL){
return ; return ;
} }
for(int j =0;j<6;j++){
mac[j] = (convert_byte(pMac[3*j])<<4)|convert_byte(pMac[3*j+1]);
}
//todo: //todo:
data[0] = err; data[0] = err;
for(i=0;i<8;i++){ for(i=0;i<8;i++){
...@@ -679,7 +837,7 @@ static void kk_vp_scene_trigger_handle(pro_data_t *pro_data) ...@@ -679,7 +837,7 @@ static void kk_vp_scene_trigger_handle(pro_data_t *pro_data)
{ {
cJSON *msg = NULL; cJSON *msg = NULL;
uint8_t data[256]={0}; uint8_t data[1024]={0};
uint8_t off = 0; uint8_t off = 0;
uint16_t *sceneAry; uint16_t *sceneAry;
...@@ -750,7 +908,8 @@ static void kk_vp_set_8009_system_time_handle(pro_data_t *pro_data) ...@@ -750,7 +908,8 @@ static void kk_vp_set_8009_system_time_handle(pro_data_t *pro_data)
minute = pro_data->arg[6]; minute = pro_data->arg[6];
sec = pro_data->arg[7]; sec = pro_data->arg[7];
kk_vp_set_state_machine(GET_8009_CONFIG_FILE_INFO); kk_voice_set_time_flag();
debug_log(LOG_INFO_LEVEL,"\n%d-%d-%d %d:%d:%d\n",year,month,day,hour,minute,sec); debug_log(LOG_INFO_LEVEL,"\n%d-%d-%d %d:%d:%d\n",year,month,day,hour,minute,sec);
} }
...@@ -766,7 +925,7 @@ static void kk_vp_get_system_time_handle(pro_data_t *pro_data) ...@@ -766,7 +925,7 @@ static void kk_vp_get_system_time_handle(pro_data_t *pro_data)
} }
time_t curTime = time(NULL); time_t curTime = time(NULL);
struct tm *c = gmtime(&curTime); struct tm *c = localtime(&curTime);
data[0] = 0; data[0] = 0;
data[1] = ((c->tm_year+1900)>>8)&0Xff; data[1] = ((c->tm_year+1900)>>8)&0Xff;
...@@ -791,31 +950,30 @@ static void kk_vp_action_handle(pro_data_t *pro_data) ...@@ -791,31 +950,30 @@ static void kk_vp_action_handle(pro_data_t *pro_data)
uint32_t *OperatorIdAry = NULL; uint32_t *OperatorIdAry = NULL;
uint8_t skillType; uint8_t skillType;
debug_log(LOG_CRIT_LEVEL,"\n\n*****************VP CTRL*****************\n");
debug_log(LOG_CRIT_LEVEL,"\n\n****************************KK VOICE CONTROL****************************\n");
if((devNum = pro_data->arg[0])!=0){ if((devNum = pro_data->arg[0])!=0){
nodeIdAry = malloc(sizeof(uint32_t)*devNum); nodeIdAry = malloc(sizeof(uint32_t)*devNum);
OperatorIdAry = malloc(sizeof(uint32_t)*devNum); OperatorIdAry = malloc(sizeof(uint32_t)*devNum);
debug_log(LOG_DEBUG_LEVEL,"devNum=%d",devNum); debug_log(LOG_DEBUG_LEVEL,"devNum=%d\n",devNum);
for(i=0;i<devNum;i++){ for(i=0;i<devNum;i++){
nodeIdAry[i] =(pro_data->arg[1+8*i]<<24) | (pro_data->arg[2+8*i]<<16) | (pro_data->arg[3+8*i]<<8) | pro_data->arg[4+8*i]; nodeIdAry[i] =(pro_data->arg[1+8*i]<<24) | (pro_data->arg[2+8*i]<<16) | (pro_data->arg[3+8*i]<<8) | pro_data->arg[4+8*i];
OperatorIdAry[i] = (pro_data->arg[5+8*i]<<24) | (pro_data->arg[6+8*i]<<16) | (pro_data->arg[7+8*i]<<8) | pro_data->arg[8+8*i]; OperatorIdAry[i] = (pro_data->arg[5+8*i]<<24) | (pro_data->arg[6+8*i]<<16) | (pro_data->arg[7+8*i]<<8) | pro_data->arg[8+8*i];
debug_log(LOG_DEBUG_LEVEL,"[Node Id %d] %08x\n",i,nodeIdAry[i]); debug_log(LOG_DEBUG_LEVEL,"[%d]Node Id=0x%08x,Operator Id=0x%08x\n",i,nodeIdAry[i],OperatorIdAry[i]);
debug_log(LOG_DEBUG_LEVEL,"[Operator Id %d] %08x\n",i,OperatorIdAry[i]);
} }
skillType = pro_data->arg[1+8*i]; skillType = pro_data->arg[1+8*i];
debug_log(LOG_DEBUG_LEVEL,"[skillType] %02x\n",skillType); debug_log(LOG_DEBUG_LEVEL,"skill type=0x%02x,arg len=%d\n",skillType,pro_data->args_len-1-8*devNum);
debug_log(LOG_DEBUG_LEVEL,"arg len=%d\n",pro_data->args_len-1-8*devNum);
err = kk_lan_vp_control(devNum,nodeIdAry,&pro_data->arg[1+8*i],pro_data->args_len-1-8*devNum); err = kk_lan_vp_control(devNum,nodeIdAry,&pro_data->arg[1+8*i],pro_data->args_len-1-8*devNum);
if(err==0){ if(err==0){
uint8_t data[256]={0}; uint8_t data[256]={0};
memset(data,0,sizeof(data)); memset(data,0,sizeof(data));
data[0] = err; data[0] = err;
data[1] = devNum; data[1] = devNum;
//todo:根据实际的执行
for(i=0;i<devNum;i++){ for(i=0;i<devNum;i++){
data[2+8*i] = (nodeIdAry[i]>>24)&0xff; data[2+8*i] = (nodeIdAry[i]>>24)&0xff;
data[3+8*i] = (nodeIdAry[i]>>16)&0xff; data[3+8*i] = (nodeIdAry[i]>>16)&0xff;
...@@ -870,14 +1028,14 @@ static void kk_vp_config_file_update_notify_handle(pro_data_t *pro_data) ...@@ -870,14 +1028,14 @@ static void kk_vp_config_file_update_notify_handle(pro_data_t *pro_data)
static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data) static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
{ {
uint8_t err = 0; int err = 0;
uint32_t f_ver,offset; uint32_t f_ver,offset;
uint16_t req_size; uint16_t req_size;
uint8_t data[256] = {0}; uint8_t data[1024] = {0};
uint8_t len = 0; uint16_t len = 0;
uint8_t r_len = 0; uint16_t r_len = 0;
uint8_t t_len = 0; uint16_t t_len = 0;
uint8_t *pCrc = NULL; uint8_t *pCrc = NULL;
uint32_t crc; uint32_t crc;
...@@ -914,14 +1072,40 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data) ...@@ -914,14 +1072,40 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
pCrc = &data[len]; pCrc = &data[len];
if(err==0){ if(err==0){
int err = fseek(update_fp, offset, SEEK_SET);
if(update_fp!=NULL){
err = fseek(update_fp, offset, SEEK_SET);
}
if(err==0){ if(err==0){
while(req_size>t_len){ while(req_size>t_len){
r_len = fread(&data[len], 1, req_size, update_fp); r_len = fread(&data[len], 1, req_size, update_fp);
debug_log(LOG_ERROR_LEVEL,"r_len=%d\n",r_len);
if(r_len>=0){ if(update_fp==NULL){
debug_log(LOG_ERROR_LEVEL,"NULL\n");
}
if(r_len<req_size){
debug_log(LOG_ERROR_LEVEL,"r_len<req_size\n");
if(feof(update_fp)!=0){
debug_log(LOG_ERROR_LEVEL,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@eof\n");
break;
}else if(ferror(update_fp)!=0){
debug_log(LOG_ERROR_LEVEL,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@err:%d,%d\n",ferror(update_fp),errno);
break;
}
}
if(r_len>0){
t_len+=r_len; t_len+=r_len;
len += r_len; len += r_len;
}else if(r_len==0){
if(errno!=EINTR){
break;
}
}else{ }else{
break; break;
} }
...@@ -938,7 +1122,7 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data) ...@@ -938,7 +1122,7 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
data[len++] = crc&0xff; data[len++] = crc&0xff;
debug_log(LOG_DEBUG_LEVEL,"crc32=%x\n",crc); debug_log(LOG_DEBUG_LEVEL,"crc32=%x\n",crc);
vp_reply_data_build(pro_data->seq,pro_data->ch,OPCODE_CONFIG_DATA_REQUEST,len,data); vp_reply_data_build(pro_data->seq,pro_data->ch,OPCODE_CONFIG_DATA_REQUEST,len,data);
usleep(100*1000); //usleep(100*1000);
} }
...@@ -1034,9 +1218,7 @@ static void kk_vp_voice_control_handle(pro_data_t *pro_data) ...@@ -1034,9 +1218,7 @@ static void kk_vp_voice_control_handle(pro_data_t *pro_data)
return ; return ;
} }
debug_log(LOG_CRIT_LEVEL,"[VP] voice contrl status =%d.\n\n",pro_data->arg[0]);
kk_vp_voice_control_notify(pro_data->arg[0]); kk_vp_voice_control_notify(pro_data->arg[0]);
} }
static void kk_vp_config_file_info_query_handle(pro_data_t *pro_data) static void kk_vp_config_file_info_query_handle(pro_data_t *pro_data)
...@@ -1066,10 +1248,65 @@ static void kk_vp_config_file_info_query_handle(pro_data_t *pro_data) ...@@ -1066,10 +1248,65 @@ static void kk_vp_config_file_info_query_handle(pro_data_t *pro_data)
/////////////////////////////////////////// ///////////////////////////////////////////
void kk_voice_control(int val)
{
uint8_t res[1] = {0};
if(val>100){
val = 100;
}else if(val<0){
val = 0;
}
res[0] = val;
debug_log(LOG_DEBUG_LEVEL,"sound control\n");
vp_send_data_build_ex(OPCODE_VOICE_CONTROL,sizeof(res),res);
}
void kk_voice_switch(int val)
{
uint8_t res[3] = {0};
if(val==0||val==1){
res[0] = val;
res[1] = 0xff;
res[2] = 0xff;
debug_log(LOG_DEBUG_LEVEL,"voice switch\n");
vp_send_data_build(OPCODE_VOICE_SWITCH,sizeof(res),res);
}
}
void kk_voice_cfg_init(void)
{
uint8_t res[3] = {0};
res[0] = 0xff;
res[1] = (KK_VOICE_OTA_MTU>>8)&0xff;
res[2] = KK_VOICE_OTA_MTU&0xff;
debug_log(LOG_DEBUG_LEVEL,"@@@@@@@@@@@@@@@@@@@@@@@\n");
vp_send_data_build(OPCODE_VOICE_SWITCH,sizeof(res),res);
}
void kk_voice_test(void)
{
uint8_t res[1] = {1};
vp_send_data_build(0XEDB4,sizeof(res),res);
}
void kk_vp_get_8009_snapshoot(void) void kk_vp_get_8009_snapshoot(void)
{ {
uint8_t res[1] = {0}; uint8_t res[1] = {0};
debug_log(LOG_DEBUG_LEVEL,"get snapshoot\n"); debug_log(LOG_DEBUG_LEVEL,"get snapshoot\n");
kk_get_voice_version();
vp_send_data_build(OPCODE_8009_SNAPSHOOT,sizeof(res),res); vp_send_data_build(OPCODE_8009_SNAPSHOOT,sizeof(res),res);
} }
...@@ -1078,7 +1315,9 @@ void kk_vp_set_8009_system_time(void) ...@@ -1078,7 +1315,9 @@ void kk_vp_set_8009_system_time(void)
uint8_t data[7] = {0}; uint8_t data[7] = {0};
time_t curTime = time(NULL); time_t curTime = time(NULL);
struct tm *c = gmtime(&curTime); struct tm *c = localtime(&curTime);
data[0] = ((c->tm_year+1900)>>8)&0Xff; data[0] = ((c->tm_year+1900)>>8)&0Xff;
data[1] =(c->tm_year+1900)&0Xff; data[1] =(c->tm_year+1900)&0Xff;
...@@ -1104,6 +1343,10 @@ void kk_vp_config_file_update_start(uint32_t ver) ...@@ -1104,6 +1343,10 @@ void kk_vp_config_file_update_start(uint32_t ver)
f_ver = ver; f_ver = ver;
f_size = _vp_get_cfg_file_size(); f_size = _vp_get_cfg_file_size();
printf("f_size=%d\n",f_size); printf("f_size=%d\n",f_size);
if(f_size==0){
debug_log(LOG_EMERG_LEVEL,"[err]!!!!!!!!!!!!!!\n");
return ;
}
crc32 = _vp_get_cfg_file_crc32(); crc32 = _vp_get_cfg_file_crc32();
data[0] = (f_ver>>24)&0xff; data[0] = (f_ver>>24)&0xff;
...@@ -1165,7 +1408,9 @@ void kk_vp_get_ota_file_info(void) ...@@ -1165,7 +1408,9 @@ void kk_vp_get_ota_file_info(void)
vp_send_data_build(OPCODE_VOICE_OTA_INFO_GET,sizeof(res),res); vp_send_data_build(OPCODE_VOICE_OTA_INFO_GET,sizeof(res),res);
} }
static int _vp_get_ota_file_crc32(char* file)
static int _vp_get_ota_file_crc32(char *file)
{ {
char *buff = NULL; char *buff = NULL;
char *pRead = NULL; char *pRead = NULL;
...@@ -1319,12 +1564,6 @@ void kk_vp_ota_file_update_start(char* file) ...@@ -1319,12 +1564,6 @@ void kk_vp_ota_file_update_start(char* file)
debug_log(LOG_DEBUG_LEVEL,"File Version=%d.%d.%d,File Size=%d,CRC32 Value=%08X\n", 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); (f_ver>>16)&0xff,(f_ver>>8&0xff),f_ver&0xff,f_size,crc32);
char dateTime[64] = {0};
time_t curTime = time(NULL);
struct tm *ptm = localtime(&curTime);
snprintf(dateTime,sizeof(dateTime),"%d-%d-%d %d:%d:%d",(ptm->tm_year+1900),(ptm->tm_mon+1),ptm->tm_mday,ptm->tm_hour,ptm->tm_min,ptm->tm_sec);
debug_log(LOG_EMERG_LEVEL,"ota start time:%s\n",dateTime);
vp_send_data_build(OPCODE_VOICE_OTA_UPGRADE_STATR,sizeof(data),data); vp_send_data_build(OPCODE_VOICE_OTA_UPGRADE_STATR,sizeof(data),data);
...@@ -1476,8 +1715,10 @@ void kk_vp_syncinfo_handle(_IN cJSON *payload) ...@@ -1476,8 +1715,10 @@ void kk_vp_syncinfo_handle(_IN cJSON *payload)
} }
if(kk_vp_config_file_update_check()!=0){ if(kk_vp_config_file_update_check()!=0){
printf("[%s][%d][vp config file] update.\n",__FUNCTION__,__LINE__);
kk_vp_set_updateFlag(1); debug_log(LOG_EMERG_LEVEL,"-------------------->start update config file<------------------\n");
kk_voice_update_config_file();
} }
if(root!=NULL){ if(root!=NULL){
...@@ -1541,6 +1782,7 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data) ...@@ -1541,6 +1782,7 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data)
err = 2; err = 2;
}*/ }*/
data[len++] = err; data[len++] = err;
data[len++] = (offset>>24)&0xff; data[len++] = (offset>>24)&0xff;
...@@ -1553,6 +1795,7 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data) ...@@ -1553,6 +1795,7 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data)
data[len++] = req_size&0xff; data[len++] = req_size&0xff;
pCrc = &data[len]; pCrc = &data[len];
if(err==0){ if(err==0){
int err = fseek(ota_fp, offset, SEEK_SET); int err = fseek(ota_fp, offset, SEEK_SET);
if(err==0){ if(err==0){
...@@ -1569,12 +1812,15 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data) ...@@ -1569,12 +1812,15 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data)
debug_log(LOG_ERROR_LEVEL,"[fseek fail]offset=%d\n",offset); debug_log(LOG_ERROR_LEVEL,"[fseek fail]offset=%d\n",offset);
} }
} }
crc = CreateCrc32(pCrc, req_size); crc = CreateCrc32(pCrc, req_size);
data[len++] = (crc>>24)&0xff; data[len++] = (crc>>24)&0xff;
data[len++] = (crc>>16)&0xff; data[len++] = (crc>>16)&0xff;
data[len++] = (crc>>8)&0xff; data[len++] = (crc>>8)&0xff;
data[len++] = crc&0xff; data[len++] = crc&0xff;
vp_reply_data_build(pro_data->seq,pro_data->ch,OPCODE_VOICE_OTA_REQUEST,len,data); vp_reply_data_build(pro_data->seq,pro_data->ch,OPCODE_VOICE_OTA_REQUEST,len,data);
usleep(100*1000);
} }
...@@ -1621,15 +1867,17 @@ static void kk_vp_ota_file_update_status_handle(pro_data_t *pro_data) ...@@ -1621,15 +1867,17 @@ static void kk_vp_ota_file_update_status_handle(pro_data_t *pro_data)
status = pro_data->arg[3]; status = pro_data->arg[3];
if(status==0x00){ if(status==0x00){
kk_vp_set_state_machine(GET_8009_SNAPSHOOT_STATE);
sprintf(verBuf,"%d.%d.%d",pro_data->arg[0],pro_data->arg[1],pro_data->arg[2]); sprintf(verBuf,"%d.%d.%d",pro_data->arg[0],pro_data->arg[1],pro_data->arg[2]);
kk_vp_voice_version_set(verBuf,strlen(verBuf)); kk_vp_voice_version_set(verBuf,strlen(verBuf));
kk_voice_ota_finish_notify(verBuf); kk_voice_ota_finish_notify(verBuf);
debug_log(LOG_NOTICE_LEVEL,"\n*********************OTA SUCCESS******************\n"); debug_log(LOG_NOTICE_LEVEL,"\n*********************OTA SUCCESS******************\n");
kk_voice_reset_ver_flag();
} }
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); 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}; uint8_t data[5] = {0};
data[0] = err; data[0] = err;
data[1] = (ver>>16)&0xff; data[1] = (ver>>16)&0xff;
...@@ -1639,12 +1887,7 @@ static void kk_vp_ota_file_update_status_handle(pro_data_t *pro_data) ...@@ -1639,12 +1887,7 @@ static void kk_vp_ota_file_update_status_handle(pro_data_t *pro_data)
vp_reply_data_build(pro_data->seq,pro_data->ch,OPCODE_VOICE_OTA_STATUS_NOTIFY,sizeof(data),data); vp_reply_data_build(pro_data->seq,pro_data->ch,OPCODE_VOICE_OTA_STATUS_NOTIFY,sizeof(data),data);
char dateTime[64] = {0}; //kk_vp_update_result_check(status,ver);
time_t curTime = time(NULL);
struct tm *ptm = localtime(&curTime);
snprintf(dateTime,sizeof(dateTime),"%d-%d-%d %d:%d:%d",(ptm->tm_year+1900),(ptm->tm_mon+1),ptm->tm_mday,ptm->tm_hour,ptm->tm_min,ptm->tm_sec);
debug_log(LOG_EMERG_LEVEL,"ota stop time:%s\n",dateTime);
} }
...@@ -1700,61 +1943,6 @@ static void kk_voice_volume_handle(pro_data_t *pro_data) ...@@ -1700,61 +1943,6 @@ static void kk_voice_volume_handle(pro_data_t *pro_data)
cJSON_Delete(root); cJSON_Delete(root);
} }
} }
#define SOUND_SETE_VP_CH 9
void vp_send_data_build_ex(uint16_t opCode,int len,uint8_t *data)
{
uint8_t data_buf[1024] = {0};
int data_len = 0;
pro_data_t pro_data;
memset(&pro_data,0,sizeof(pro_data_t));
pro_data.seq = vp_get_seq();
pro_data.ch = SOUND_SETE_VP_CH;
pro_data.opcode = opCode;
pro_data.cf.ack = 0;
pro_data.cf.dir = 1;
pro_data.cf.sof_flag = 1;
pro_data.args_len = len;
memcpy(pro_data.arg,data,len);
data_len = proto_frame_to_uart(&pro_data,data_buf);
debug_log(LOG_INFO_LEVEL,"\n[LAN->VP]len=%d\n",data_len);
uint8_t dataStr[512] = {0};
for(int i=0;i<data_len;i++){
snprintf((char *)dataStr + strlen((char *)dataStr), sizeof(dataStr), "%02X ",data_buf[i]);
}
debug_log(LOG_INFO_LEVEL,"%s\n\n",dataStr);
eSerial_WriteBuffer(data_buf, data_len);
}
void kk_voice_control(int val)
{
uint8_t res[1] = {0};
if(val>100){
val = 100;
}else if(val<0){
val = 0;
}
res[0] = val;
debug_log(LOG_DEBUG_LEVEL,"sound control\n");
vp_send_data_build_ex(OPCODE_VOICE_CONTROL,sizeof(res),res);
}
void kk_voice_switch(int val)
{
uint8_t res[3] = {0};
if(val==0||val==1){
res[0] = val;
res[1] = 0xff;
res[2] = 0xff;
debug_log(LOG_DEBUG_LEVEL,"voice switch\n");
vp_send_data_build(OPCODE_VOICE_SWITCH,sizeof(res),res);
}
}
\ No newline at end of file
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#define KK_VOICE_OTA_MTU 128
typedef void (*vp_handle_func)(pro_data_t *pro_data); typedef void (*vp_handle_func)(pro_data_t *pro_data);
...@@ -65,7 +66,7 @@ void kk_vp_get_config_file_info(void); ...@@ -65,7 +66,7 @@ void kk_vp_get_config_file_info(void);
void kk_vp_get_ota_file_info(void); void kk_vp_get_ota_file_info(void);
void kk_vp_ota_file_update_start(char *file);
void kk_vp_ota_file_update_stop(uint32_t ver); void kk_vp_ota_file_update_stop(uint32_t ver);
...@@ -86,6 +87,10 @@ void vp_scene_id_map_deinit(void); ...@@ -86,6 +87,10 @@ void vp_scene_id_map_deinit(void);
int vp_scene_id_item_add(int scene_id); int vp_scene_id_item_add(int scene_id);
int vp_scene_id_item_load(int scene_id,uint16_t map_id); int vp_scene_id_item_load(int scene_id,uint16_t map_id);
int vp_scene_id_map_save(void); int vp_scene_id_map_save(void);
int _vp_get_cfg_file_crc32(void); int _vp_get_cfg_file_crc32(void);
int _vp_get_cfg_file_size(void); int _vp_get_cfg_file_size(void);
void kk_voice_control(int val); void kk_voice_control(int val);
...@@ -93,7 +98,10 @@ int kk_vp_voice_version_get(char *ver,int len); ...@@ -93,7 +98,10 @@ int kk_vp_voice_version_get(char *ver,int len);
void kk_voice_switch(int val); void kk_voice_switch(int val);
void kk_vp_ota_file_update_start(char* file); void kk_vp_ota_file_update_start(char* file);
void vp_send_data_build(uint16_t opCode,uint8_t len,uint8_t *data); void vp_send_data_build(uint16_t opCode,int len,uint8_t *data);
void kk_voice_set_time_flag(void);
#endif #endif
...@@ -378,11 +378,11 @@ uint8_t cf_to_uint8_t(control_field_t *cf) ...@@ -378,11 +378,11 @@ uint8_t cf_to_uint8_t(control_field_t *cf)
return ((((uint8_t)(cf->ack))) + ((cf->dir) << 5) + ((cf->sof_flag) << 4) + ((cf->mf_flag) << 3)); return ((((uint8_t)(cf->ack))) + ((cf->dir) << 5) + ((cf->sof_flag) << 4) + ((cf->mf_flag) << 3));
} }
uint8_t proto_frame_to_uart(pro_data_t *pro_data, uint8_t *uart_data) uint16_t proto_frame_to_uart(pro_data_t *pro_data, uint8_t *uart_data)
{ {
uint8_t i = 0; uint16_t i = 0;
uint16_t cf; uint16_t cf;
uint8_t len; int len;
uint16_t crc; uint16_t crc;
uart_data[i++] = PRO_SOF_1; uart_data[i++] = PRO_SOF_1;
...@@ -422,7 +422,7 @@ void pro_send_link_ack(pro_data_t *pro_data) ...@@ -422,7 +422,7 @@ void pro_send_link_ack(pro_data_t *pro_data)
uint8_t buf[PRO_LINK_PAKCET_SIZE]; uint8_t buf[PRO_LINK_PAKCET_SIZE];
uint16_t len = 2; uint16_t len = 2;
uint16_t crc; uint16_t crc;
uint8_t i = 0; uint16_t i = 0;
buf[i++] = PRO_SOF_1; buf[i++] = PRO_SOF_1;
buf[i++] = PRO_SOF_2; buf[i++] = PRO_SOF_2;
...@@ -464,16 +464,15 @@ void dev_send_uart(uint8_t *data, uint16_t data_len) ...@@ -464,16 +464,15 @@ void dev_send_uart(uint8_t *data, uint16_t data_len)
static void uart_protocol_print(pro_data_t *pro_data) static void uart_protocol_print(pro_data_t *pro_data)
{ {
debug_log(LOG_DEBUG_LEVEL,"\n[VP->LAN]\n");
debug_log(LOG_DEBUG_LEVEL,"seq:\t\t%02X\n", pro_data->seq); debug_log(LOG_DEBUG_LEVEL,"seq:\t\t%02X\n", pro_data->seq);
debug_log(LOG_DEBUG_LEVEL,"channel:\t%02X\n", pro_data->ch); debug_log(LOG_DEBUG_LEVEL,"channel:\t%02X\n", pro_data->ch);
debug_log(LOG_DEBUG_LEVEL,"opcode:\t\t%04X\n", pro_data->opcode); debug_log(LOG_DEBUG_LEVEL,"opcode:\t%04X\n", pro_data->opcode);
debug_log(LOG_DEBUG_LEVEL,"args_len:\t%d\n", pro_data->args_len); debug_log(LOG_DEBUG_LEVEL,"args_len:\t%d\n", pro_data->args_len);
char print_buf[512] = {0}; char print_buf[512] = {0};
int i = 0; int i = 0;
snprintf(print_buf, sizeof(print_buf), "args:\t\t"); snprintf(print_buf, sizeof(print_buf), "args:\t");
for (i = 0; i < pro_data->args_len; i ++) for (i = 0; i < pro_data->args_len; i ++)
{ {
...@@ -499,7 +498,7 @@ void connect_status_ack(pro_data_t pro_data) ...@@ -499,7 +498,7 @@ void connect_status_ack(pro_data_t pro_data)
pro_data_tmp.arg[pro_data_tmp.args_len++] = 0; // err status pro_data_tmp.arg[pro_data_tmp.args_len++] = 0; // err status
uint8_t data_buf[255] = {0}; uint8_t data_buf[255] = {0};
uint8_t data_len = 0; int data_len = 0;
data_len = proto_frame_to_uart(&pro_data_tmp,data_buf); data_len = proto_frame_to_uart(&pro_data_tmp,data_buf);
dev_send_uart(data_buf, data_len); dev_send_uart(data_buf, data_len);
...@@ -518,7 +517,7 @@ void system_restart_ack(pro_data_t pro_data) ...@@ -518,7 +517,7 @@ void system_restart_ack(pro_data_t pro_data)
pro_data_tmp.arg[pro_data_tmp.args_len++] = 0; // err status pro_data_tmp.arg[pro_data_tmp.args_len++] = 0; // err status
uint8_t data_buf[255] = {0}; uint8_t data_buf[255] = {0};
uint8_t data_len = 0; int data_len = 0;
data_len = proto_frame_to_uart(&pro_data_tmp,data_buf); data_len = proto_frame_to_uart(&pro_data_tmp,data_buf);
dev_send_uart(data_buf, data_len); dev_send_uart(data_buf, data_len);
...@@ -744,7 +743,7 @@ void set_mac_ack(pro_data_t pro_data) ...@@ -744,7 +743,7 @@ void set_mac_ack(pro_data_t pro_data)
pro_data_tmp.cf.sof_flag = 0; pro_data_tmp.cf.sof_flag = 0;
//pro_data_tmp.arg[pro_data_tmp.args_len++] = 0; // err status //pro_data_tmp.arg[pro_data_tmp.args_len++] = 0; // err status
uint8_t mac_len = pro_data_tmp.arg[0]; int mac_len = pro_data_tmp.arg[0];
int i = 0; int i = 0;
for(i = 0; i < mac_len; i++) for(i = 0; i < mac_len; i++)
...@@ -771,7 +770,7 @@ void set_mac_ack(pro_data_t pro_data) ...@@ -771,7 +770,7 @@ void set_mac_ack(pro_data_t pro_data)
pro_data_tmp.args_len++; pro_data_tmp.args_len++;
uint8_t data_buf[255] = {0}; uint8_t data_buf[255] = {0};
uint8_t data_len = 0; int data_len = 0;
data_len = proto_frame_to_uart(&pro_data_tmp,data_buf); data_len = proto_frame_to_uart(&pro_data_tmp,data_buf);
dev_send_uart(data_buf, data_len); dev_send_uart(data_buf, data_len);
...@@ -806,7 +805,7 @@ void read_flash_mac_ack(pro_data_t pro_data) ...@@ -806,7 +805,7 @@ void read_flash_mac_ack(pro_data_t pro_data)
uint8_t data_buf[255] = {0}; uint8_t data_buf[255] = {0};
uint8_t data_len = 0; int data_len = 0;
data_len = proto_frame_to_uart(&pro_data_tmp,data_buf); data_len = proto_frame_to_uart(&pro_data_tmp,data_buf);
dev_send_uart(data_buf, data_len); dev_send_uart(data_buf, data_len);
...@@ -876,7 +875,7 @@ extern void kk_vp_opcode_handle(pro_data_t *pro_data); ...@@ -876,7 +875,7 @@ extern void kk_vp_opcode_handle(pro_data_t *pro_data);
void uart_frame_handle() void uart_frame_handle()
{ {
uint8_t *data = g_uart_data.data; uint8_t *data = g_uart_data.data;
uint8_t data_len = g_uart_data.data_len; int data_len = g_uart_data.data_len;
pro_data_t pro_data; pro_data_t pro_data;
//uint8_t pro_data_buf[256]; //uint8_t pro_data_buf[256];
...@@ -891,57 +890,6 @@ void uart_frame_handle() ...@@ -891,57 +890,6 @@ void uart_frame_handle()
kk_vp_opcode_handle(&pro_data); kk_vp_opcode_handle(&pro_data);
// handle msg
switch (pro_data.opcode)
{
case OPCODE_CONNECT_STATUS_QUERY:
{
connect_status_ack(pro_data);
break;
}
case OPCODE_BURN_MAC:
{
//��ʱ��֧��
set_mac_ack(pro_data);
break;
}
case OPCODE_READ_MAC:
{
read_mac_ack(pro_data);
break;
}
case OPCODE_READ_VERSION:
{
read_version_ack(pro_data);
break;
}
case OPCODE_EXIT_SUBBOARD_TEST:
{
exit_subboard_test_ack(pro_data);
break;
}
case OPCODE_READ_MAC_FROM_FLASH:
{
read_flash_mac_ack(pro_data);
break;
}
case OPCODE_SYSTEM_RESTART:
{
system_restart_ack(pro_data);
break;
}
default:
{
//GW_LOG_DBG("gw others opcode %04X ack\n", pro_data.opcode);
break;
}
}
return; return;
} }
...@@ -113,7 +113,7 @@ typedef struct ...@@ -113,7 +113,7 @@ typedef struct
uint8_t ch; uint8_t ch;
uint16_t opcode; uint16_t opcode;
uint16_t args_len; uint16_t args_len;
uint8_t arg[256]; uint8_t arg[1024];
} pro_data_t; } pro_data_t;
int my_system(const char * cmd); int my_system(const char * cmd);
...@@ -130,7 +130,7 @@ int get_proto_frame(uint8_t *data, uint16_t data_len, pro_data_t *pro_data); ...@@ -130,7 +130,7 @@ int get_proto_frame(uint8_t *data, uint16_t data_len, pro_data_t *pro_data);
void pro_send_link_ack(pro_data_t *pro_data); void pro_send_link_ack(pro_data_t *pro_data);
uint8_t proto_frame_to_uart(pro_data_t *pro_data, uint8_t *uart_data); uint16_t proto_frame_to_uart(pro_data_t *pro_data, uint8_t *uart_data);
int get_uart_frame(uint8_t * buf,int len); int get_uart_frame(uint8_t * buf,int len);
void uart_frame_handle(); void uart_frame_handle();
......
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