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

Merge branch 'yjq' into 'master'

1108代码合并

See merge request chenweican/k-sdk!155
parents fd31b751 7b21e73c
......@@ -245,6 +245,7 @@ void eSerial_start()
#endif
serial_fd = devOpen(serialDev);
printf("------------------------------------>serial_fd=%d\n",serial_fd);
}
/***********************************************************
......@@ -290,7 +291,8 @@ teSerial_Status eSerial_Read(unsigned char *data)
}
else
{
printf("Serial read: %d\n", res);
printf("Serial read: %d,serial_fd=%d\n", res,serial_fd);
if (res == 0)
{
......
......@@ -374,6 +374,22 @@ int kk_data_handle(cJSON *json,int sockfd)
kk_zb_devs_hw_ack(sockfd,conditions);
}else if(strcmp(opcode->valuestring,GET_HISTORY_ALARM_LOG) == 0){
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){
cJSON *key = cJSON_GetObjectItem(json, "arg");
if(key != NULL){
......@@ -495,8 +511,19 @@ int is_arming_status_notify(cJSON *payload)
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)
{
if(payload == NULL){
return -1;
}
......@@ -504,6 +531,9 @@ static int kk_device_onoffline_handle(cJSON *payload,int online)
if(params == NULL) return -1;
cJSON *deviceCode = cJSON_GetObjectItem(params, "deviceCode");
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 *root;
cJSON *array = cJSON_CreateArray();
......@@ -515,6 +545,9 @@ static int kk_device_onoffline_handle(cJSON *payload,int online)
cJSON_AddItemToObject(root, "arg", array);
send_msg_to_module(root);
cJSON_Delete(root);
return 0;
}
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
memcpy(node->deviceCode,deviceCode,strlen(deviceCode));
memcpy(node->productCode,productCode,strlen(productCode));
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));
node->channelNum = channel->valueint;
......
......@@ -157,6 +157,10 @@ int kk_sync_timer_is_running(void)
int main(int argc, char* argv[])
{
int ret = 0;
......
......@@ -971,6 +971,152 @@ char *speedMap[] = {
"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)
{
char epStr[4] = {0};
......@@ -1011,6 +1157,8 @@ int kk_send_indoorAir_status(cJSON *info,const char *deviceCode)
cJSON_AddStringToObject(arg, "runModel", modeMap[WorkMode->valueint]);
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);
cJSON_Delete(root);
return 0;
......@@ -1052,6 +1200,7 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
kk_creater_nodeid(deviceCode->valuestring,1,ac_gw_nodeid);
cJSON *properties = cJSON_GetObjectItem(subitem,"properties");
cJSON *onlineStatus = cJSON_GetObjectItem(subitem,"onlineStatus");
cJSON *indoorItem = cJSON_CreateObject();
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)
cJSON *epsAry = cJSON_GetObjectItem(properties,"eps");
cJSON *EpTotal = cJSON_GetObjectItem(properties,"EpTotal");
int epsize = cJSON_GetArraySize(epsAry);
g_indoor_item = (CENTRAL_AC_INDOOR_ITEM *)malloc(sizeof(CENTRAL_AC_INDOOR_ITEM)*epsize);
if(g_indoor_item == NULL){
......@@ -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]));
cJSON *WorkMode = cJSON_GetObjectItem(infoItem,"WorkMode");
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);
}
......
......@@ -3,6 +3,8 @@
#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_ROOM_ID_SIZE 24
......@@ -46,6 +48,23 @@ typedef struct{
}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);
......@@ -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 {
}vpCFGInfo;
typedef struct{
int state;
int set_time_flag;
int get_ver_flag;
int ota_update_flag;
int file_update_flag;
vpCFGInfo cfg_info;
int updateFlag;
}VP_MANAGE;
......@@ -185,36 +190,20 @@ static int _vp_config_file_version_load(void)
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){
return ;
}
kk_vp_config_file_update_stop(vp_mag.cfg_info.f_ver);
if(vp_mag.state == UPDATING_8009_CONFIG_FILE_INFO||
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_config_file_update_start(vp_mag.cfg_info.next_ver);
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)
{
......@@ -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("[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)
if(status==0 && (vp_mag.cfg_info.f_ver==f_ver) ){
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);
kk_vp_set_state_machine(GET_8009_CONFIG_FILE_INFO);
}else{
kk_vp_set_updateFlag(1);
printf("[%s][%d]update config file.\n",__FUNCTION__,__LINE__);
debug_log(LOG_EMERG_LEVEL,"-------------------->start update config file again<------------------\n");
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)
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 &&
vp_mag.cfg_info.f_size==f_size &&
vp_mag.cfg_info.crc32==crc32){
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO);
return 1;
}
......@@ -301,6 +305,8 @@ void kk_voice_ota_mtu_set(uint16_t mtu)
void kk_vp_manage_init(void)
{
kk_voice_ota_mtu_set(KK_VOICE_OTA_MTU);
vp_scene_id_map_load();
_vp_config_file_version_load();
vp_mag.cfg_info.f_size = _vp_get_cfg_file_size();
......@@ -310,63 +316,80 @@ void kk_vp_manage_init(void)
void *kk_vp_manage_thread(void *arg)
{
INFO_PRINT("[%s] start...\n",__FUNCTION__);
usleep(100*1000);
kk_vp_manage_init();
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){
case GET_8009_SNAPSHOOT_STATE:
kk_vp_get_8009_snapshoot();
kk_vp_get_ota_file_info();
ERROR_PRINT("[%s]thread end...\n",__FUNCTION__);
return 0;
}
sleep(5);
break;
static void *kk_voice_ctrl_status_thread(void *arg)
{
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:
//debug_log(LOG_INFO,"updating...\n");
static time_t set_time;
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);
//todo :超时取消
break;
continue;
}
case STOP_8009_CONFIG_FILE_UPDATE:
kk_vp_config_file_update_stop(vp_mag.cfg_info.f_ver);
if(vp_mag.updateFlag==1){
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO);
}else{
kk_vp_set_state_machine(GET_8009_CONFIG_FILE_INFO);
if((curTime-set_time)>=SET_8009_TIME){
set_time = curTime;
debug_log(LOG_NOTICE_LEVEL,"[timing %ds] set 8009 system time\n",SET_8009_TIME);
kk_vp_set_8009_system_time();
}
sleep(3);
break;
case GET_8009_CONFIG_FILE_INFO:
kk_vp_get_config_file_info();
sleep(15);
break;
default:
break;
if(delay){
usleep(100*1000);
}
usleep(50*1000);
}
ERROR_PRINT("[%s]thread end...\n",__FUNCTION__);
return 0;
}
void kk_voice_panel_uart_dev_chose(int argc, char* argv[])
{
int flag = 0;
......@@ -407,12 +430,43 @@ static int kk_vp_cfg_file_dir_create(void){
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[])
{
size_t s = 1500;
pthread_t uart_tid = 0;
pthread_t mag_tid = 0;
pthread_t t_tid = 0;
pthread_attr_t attr;
pthread_attr_init(&attr);
......@@ -443,6 +497,10 @@ int kk_voice_panel_init(int argc, char* argv[])
return -3;
}
if((pthread_create(&t_tid, NULL, kk_voice_ctrl_status_thread, NULL))!= 0 ) {
return -4;
}
return 0;
}
......
......@@ -8,23 +8,51 @@
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);
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_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_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);
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
......@@ -3,8 +3,9 @@
#include "kk_lan_debug.h"
#include "cJSON.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 {
const int *pidAry;
......@@ -12,15 +13,15 @@ typedef struct {
dev_handle_func func;
}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 *curtain_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *outlet_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *freshAir_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *fanCoilSwitch_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *underfloor_heating_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static cJSON *dimming_light_dev_handle(int ep,uint8_t *arg,uint8_t arg_len);
static 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,kk_map_dev_node_t *node);
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,kk_map_dev_node_t *node);
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,kk_map_dev_node_t *node);
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;
......@@ -63,9 +64,40 @@ static dev_handle_func dev_pid_dispatch(int pid)
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};
cJSON *params = cJSON_CreateObject();
......@@ -77,7 +109,7 @@ cJSON *PowerSwitch_msg_build(int ep,int onoff)
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};
cJSON *params = cJSON_CreateObject();
......@@ -86,12 +118,13 @@ static cJSON *windSpeed_msg_build(int ep,int level)
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WindSpeed",level);
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};
cJSON *params = cJSON_CreateObject();
......@@ -100,14 +133,12 @@ static cJSON *workMode_msg_build(int ep,int mode)
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 *temperature_msg_build(int ep,int tmp)
static cJSON *air_conditioner_dev_temperature_msg_build(int ep,int tmp)
{
char epNum[12] = {0};
cJSON *params = cJSON_CreateObject();
......@@ -116,206 +147,367 @@ static cJSON *temperature_msg_build(int ep,int tmp)
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"Temperature",tmp);
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};
cJSON *params = cJSON_CreateObject();
memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
uint8_t skill_type = arg[0];
cJSON *param = NULL;
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"ColorTemperature",val);
switch(skill_type){
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)
{
char epNum[12] = {0};
cJSON *params = cJSON_CreateObject();
case VP_CTRL_WINDSPEE_SET:{
if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
uint8_t windspeed = arg[2];
debug_log(LOG_INFO_LEVEL,"[windspeed] %d\n",windspeed);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"Brightness",val);
if(windspeed==VP_SKILLTYPE_12_WINDSPEED_LOW){
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)
{
return PowerSwitch_msg_build(ep,onoff);
}
if(pStatus->WindSpeed==4){
param = air_conditioner_dev_windspeed_msg_build(ep,3);
}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)
{
return PowerSwitch_msg_build(ep,onoff);
}
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->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)
{
uint8_t skill_type = arg[0];
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;
}
switch(skill_type){
case VP_CTRL_OPEN://
return PowerSwitch_msg_build(ep,1);
case VP_CTRL_CLOSE:
return PowerSwitch_msg_build(ep,0);
INDOOR_AIR_STATUS * pStatus = indoor_airstatus_table_find_item(deviceCode,ep);
case VP_CTRL_WINDSPEE_SET:{
if(arg[1]!=0x20){
if(pStatus==NULL){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] value err\n");
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(arg[1]!=0x20){
if(pStatus->online!=1){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] offline\n");
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:
if(arg[1]!=0x20){
return NULL;
debug_log(LOG_INFO_LEVEL,"[pStatus->Temperature] %f\n",pStatus->Temperature);
debug_log(LOG_INFO_LEVEL,"[tmp] dec %d\n",arg[3]);
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_CRIT_LEVEL,"[VP] set tmp=%d\n",tmp);
return temperature_msg_build(ep,tmp);
debug_log(LOG_INFO_LEVEL,"[tmp] %f\n",tmp);
param = air_conditioner_dev_temperature_msg_build(ep,tmp);
}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];
cJSON *param = NULL;
switch(skill_type){
case VP_CTRL_OPEN://
return light_msg_build(ep,1);
case VP_CTRL_CLOSE:
return light_msg_build(ep,0);
case VP_CTRL_OPEN:{
debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
param = light_dev_msg_build(ep,1);
}break;
case VP_CTRL_CLOSE:{
debug_log(LOG_INFO_LEVEL,"[OnOff] off\n");
param = light_dev_msg_build(ep,0);
}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};
cJSON *params = cJSON_CreateObject();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddStringToObject(params,"epNum",epNum);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
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;
}
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];
debug_log(LOG_CRIT_LEVEL,"skill_type=%d,ep=%d\n",skill_type,ep);
cJSON *param = NULL;
switch(skill_type){
case VP_CTRL_OPEN://
return curtain_dev_msg_build(ep,1);
case VP_CTRL_CLOSE:
return curtain_dev_msg_build(ep,0);
case VP_CTRL_STOP:
return curtain_dev_msg_build(ep,2);
case VP_CTRL_OPEN:{
if(arg_len==3&&arg[1]==0x20){
int position = arg[2];
debug_log(LOG_INFO_LEVEL,"[position] %d%\n",position);
if(position<0){
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;
}
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];
debug_log(LOG_CRIT_LEVEL,"skill_type=%d,ep=%d\n",skill_type,ep);
cJSON *param = NULL;
switch(skill_type){
case VP_CTRL_OPEN://
return outlet_msg_build(ep,1);
case VP_CTRL_CLOSE:
return outlet_msg_build(ep,0);
case VP_CTRL_OPEN:{
debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
param = outlet_dev_msg_build(ep,1);
}break;
case VP_CTRL_CLOSE:{
debug_log(LOG_INFO_LEVEL,"[OnOff] off\n");
param = outlet_dev_msg_build(ep,0);
}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};
cJSON *params = cJSON_CreateObject();
......@@ -324,12 +516,13 @@ static cJSON *freshAir_windspeed_msg_build(int ep,int level)
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WindSpeed",level);
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};
cJSON *params = cJSON_CreateObject();
......@@ -338,6 +531,7 @@ static cJSON *freshAir_workMode_msg_build(int ep,int mode)
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WorkMode",mode);
return params;
......@@ -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];
if(arg_len!=3){
debug_log(LOG_ERROR_LEVEL,"[err] arg_len=%d\n",arg_len);
return NULL;
}
cJSON *param = NULL;
switch(skill_type){
case VP_CTRL_OPEN://
return PowerSwitch_msg_build(ep,1);
case VP_CTRL_CLOSE:
return PowerSwitch_msg_build(ep,0);
case VP_CTRL_OPEN:{
debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
param = freshair_dev_powerswitch_msg_build(ep,1);
}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:{
if(arg[1]!=0x20){
if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
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){
return freshAir_windspeed_msg_build(ep,1);
param = freshair_dev_windspeed_msg_build(ep,1);
}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){
return freshAir_windspeed_msg_build(ep,3);
param = freshair_dev_windspeed_msg_build(ep,3);
}
break;
}
}break;
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;
}
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){
return freshAir_workMode_msg_build(ep,0);
param = freshair_dev_workmode_msg_build(ep,0);
}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;
}
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};
cJSON *params = cJSON_CreateObject();
......@@ -406,11 +660,12 @@ static cJSON *fanCoilSwitch_windspeed_msg_build(int ep,int level)
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WindSpeed",level);
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};
cJSON *params = cJSON_CreateObject();
......@@ -419,6 +674,7 @@ static cJSON *fanCoilSwitch_workMode_msg_build(int ep,int mode)
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"WorkMode",mode);
return params;
......@@ -433,150 +689,501 @@ static cJSON *fanCoilSwitch_Temperature_msg_build(int ep,int tmp)
snprintf(epNum,sizeof(epNum),"%d",ep);
cJSON_AddStringToObject(params,"epNum",epNum);
cJSON_AddNumberToObject(params,"PowerSwitch",1);
cJSON_AddNumberToObject(params,"Temperature",tmp);
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];
cJSON *param = NULL;
switch(skill_type){
case VP_CTRL_OPEN://
return PowerSwitch_msg_build(ep,1);
case VP_CTRL_CLOSE:
return PowerSwitch_msg_build(ep,0);
case VP_CTRL_OPEN:{
debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
param = fanCoilSwitch_powerswitch_msg_build(ep,1);
}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:{
if(arg[1]!=0x20){
if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
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){
return fanCoilSwitch_windspeed_msg_build(ep,2);
param = fancoilswitch_dev_windspeed_msg_build(ep,2);
}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){
return fanCoilSwitch_windspeed_msg_build(ep,4);
param = fancoilswitch_dev_windspeed_msg_build(ep,4);
}else if(windspeed==VP_SKILLTYPE_12_WINDSPEED_AUTO){
return fanCoilSwitch_windspeed_msg_build(ep,0);
}
break;
param = fancoilswitch_dev_windspeed_msg_build(ep,0);
}else{
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
}break;
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;
}
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){
return freshAir_workMode_msg_build(ep,1);
param = fancoilswitch_dev_workmode_msg_build(ep,1);
}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){
return freshAir_workMode_msg_build(ep,3);
param = fancoilswitch_dev_workmode_msg_build(ep,3);
}else if(mode==VP_SKILLTYPE_1C_WORKMODE_DEHUM){
return freshAir_workMode_msg_build(ep,4);
}
break;
param = fancoilswitch_dev_workmode_msg_build(ep,4);
}else{
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
}break;
case VP_CTRL_TMP_SET:
if(arg[1]!=0x20){
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_CRIT_LEVEL,"[VP] set tmp=%d\n",tmp);
return fanCoilSwitch_Temperature_msg_build(ep,tmp);
debug_log(LOG_INFO_LEVEL,"[tmp] %d\n",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;
}
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){
case VP_CTRL_OPEN://
return PowerSwitch_msg_build(ep,1);
case VP_CTRL_CLOSE:
return PowerSwitch_msg_build(ep,0);
case VP_CTRL_OPEN:{
debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
param = underfloor_heating_powerswitch_msg_build(ep,1);
}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:{
if(arg[1]!=0x20){
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_CRIT_LEVEL,"[VP] set mode=%d\n",mode);
debug_log(LOG_INFO_LEVEL,"[mode] %d\n",mode);
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){
return workMode_msg_build(ep,1);
}
break;
param = underfloor_heating_workmode_msg_build(ep,1);
}
}break;
case VP_CTRL_TMP_SET:
if(arg[1]!=0x20){
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_CRIT_LEVEL,"[VP] set tmp=%d\n",tmp);
return temperature_msg_build(ep,tmp);
debug_log(LOG_INFO_LEVEL,"[tmp] %d\n",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;
}
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];
cJSON *param = NULL;
switch(skill_type){
case VP_CTRL_OPEN://
return PowerSwitch_msg_build(ep,1);
case VP_CTRL_CLOSE:
return PowerSwitch_msg_build(ep,0);
case VP_CTRL_OPEN:{
debug_log(LOG_INFO_LEVEL,"[OnOff] on\n");
param = dimming_light_dev_powerSwitch_msg_build(ep,1);
}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:{
if(arg[1]!=0x20){
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_CRIT_LEVEL,"[VP] set mode=%d\n",mode);
debug_log(LOG_INFO_LEVEL,"[mode] %d\n",mode);
if(mode==0x01){
return ColorTemperature_msg_build(ep,20);
param = dimming_light_dev_colortemperature_msg_build(ep,20);
}else if(mode==0x02){
return ColorTemperature_msg_build(ep,50);
param = dimming_light_dev_colortemperature_msg_build(ep,50);
}else if(mode==0x03){
return ColorTemperature_msg_build(ep,100);
}
break;
param = dimming_light_dev_colortemperature_msg_build(ep,100);
}
case VP_CTRL_BRIGHTNESS_SET:
if(arg[1]!=0x20){
}break;
case VP_CTRL_BRIGHTNESS_SET:{
if(arg_len!=3||arg[1]!=0x20){
debug_log(LOG_WARNING_LEVEL,"[ctrl fail] para err\n");
return NULL;
}
uint8_t bri = arg[2];
return Brightness_msg_build(ep,bri);
break;
debug_log(LOG_INFO_LEVEL,"[bri] %d\n",bri);
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;
}
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)
{
uint8_t i,j;
uint8_t err = 0;
int err = 1;
uint8_t skill_type;
int ep;
int pid = 0;
......@@ -616,24 +1223,32 @@ int kk_lan_vp_control(uint8_t num,uint32_t nodeIdAry[],uint8_t *arg,uint8_t arg_
params = NULL;
if(is_ac_gw_pid(pid)!=0){
debug_log(LOG_CRIT_LEVEL,"air conditioner,pid=%d\n",pid);
params = air_conditioner_dev_handle(ep,arg,arg_len);
params = air_conditioner_dev_handle(deviceCode,ep,arg,arg_len);
}else{
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){
msg=property_set(productCode,deviceCode,"*","*",params);
kk_ipc_send_json(msg);
}else{
err = 1;
break;
err = 0;
}
}
return err;
}
......
......@@ -560,7 +560,9 @@ int kk_lan_device_delete_notify(cJSON *payload)
return -1;
}
indoor_airstatus_table_delete_item(deviceCode->valuestring);
_kk_lan_delete_device(deviceCode->valuestring);
return 0;
}
......
......@@ -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(strcmp(pDevs->online,"1")==0){
node->online_status = 1;
}else{
node->online_status = 0;
}*/
snprintf(pDevs->operateType,sizeof(pDevs->operateType)-1,"%s",node->opearteType);
}else{
......@@ -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){
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{
if(is_ac_gw_pid(atoi(pDevs->pid))!=0){
......
......@@ -3,6 +3,7 @@
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
#include "kk_newccu_msg.h"
#include "kk_voice_panel_cfg.h"
#include "kk_voice_panel_handle.h"
......@@ -20,7 +21,7 @@
static char s_voice_sw[16] = {0};
static uint16_t _g_seq;
static FILE *update_fp = NULL;
......@@ -28,6 +29,7 @@ static FILE *ota_fp = NULL;
#define VP_CH 0
#define SOUND_SETE_VP_CH 9
#define VP_RES 0
......@@ -393,11 +395,43 @@ uint16_t vp_get_seq(void)
{
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_len = 0;
uint8_t data_buf[1024] = {0};
int data_len = 0;
pro_data_t pro_data;
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)
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_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_len = 0;
uint8_t data_buf[1024] = {0};
int data_len = 0;
pro_data_t pro_data;
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
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++){
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();
}
......@@ -551,19 +591,35 @@ int _vp_get_cfg_file_crc32(void)
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()
{
if(update_fp!=NULL){
fclose (update_fp);
}
update_fp = fopen (VP_CONFIG_FILE_TAR_GZ,"rb");
if(update_fp==NULL){
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){
fclose (update_fp);
if(ver == NULL || len < strlen(s_voice_sw)){
return -1;
}
memcpy(ver,s_voice_sw,strlen(s_voice_sw));
return 0;
}
......@@ -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)
{
uint8_t err;
......@@ -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]);
kk_vp_set_state_machine(SET_8009_SYSTEM);
kk_vp_set_config_file_version(f_ver);
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]);
......@@ -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)
{
uint8_t data[12]={0};
......@@ -659,10 +811,16 @@ static void kk_vp_get_snapshoot_handle(pro_data_t *pro_data)
uint16_t nodeId = 0;
uint8_t netStatus = 0x02;
if(pro_data->args_len!=1){
char* pMac = getMac();
if(pro_data->args_len!=1||pMac==NULL){
return ;
}
for(int j =0;j<6;j++){
mac[j] = (convert_byte(pMac[3*j])<<4)|convert_byte(pMac[3*j+1]);
}
//todo:
data[0] = err;
for(i=0;i<8;i++){
......@@ -679,7 +837,7 @@ static void kk_vp_scene_trigger_handle(pro_data_t *pro_data)
{
cJSON *msg = NULL;
uint8_t data[256]={0};
uint8_t data[1024]={0};
uint8_t off = 0;
uint16_t *sceneAry;
......@@ -750,7 +908,8 @@ static void kk_vp_set_8009_system_time_handle(pro_data_t *pro_data)
minute = pro_data->arg[6];
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);
}
......@@ -766,7 +925,7 @@ static void kk_vp_get_system_time_handle(pro_data_t *pro_data)
}
time_t curTime = time(NULL);
struct tm *c = gmtime(&curTime);
struct tm *c = localtime(&curTime);
data[0] = 0;
data[1] = ((c->tm_year+1900)>>8)&0Xff;
......@@ -791,31 +950,30 @@ static void kk_vp_action_handle(pro_data_t *pro_data)
uint32_t *OperatorIdAry = NULL;
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){
nodeIdAry = 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++){
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];
debug_log(LOG_DEBUG_LEVEL,"[Node Id %d] %08x\n",i,nodeIdAry[i]);
debug_log(LOG_DEBUG_LEVEL,"[Operator Id %d] %08x\n",i,OperatorIdAry[i]);
debug_log(LOG_DEBUG_LEVEL,"[%d]Node Id=0x%08x,Operator Id=0x%08x\n",i,nodeIdAry[i],OperatorIdAry[i]);
}
skillType = pro_data->arg[1+8*i];
debug_log(LOG_DEBUG_LEVEL,"[skillType] %02x\n",skillType);
debug_log(LOG_DEBUG_LEVEL,"arg len=%d\n",pro_data->args_len-1-8*devNum);
debug_log(LOG_DEBUG_LEVEL,"skill type=0x%02x,arg len=%d\n",skillType,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){
uint8_t data[256]={0};
memset(data,0,sizeof(data));
data[0] = err;
data[1] = devNum;
//todo:根据实际的执行
for(i=0;i<devNum;i++){
data[2+8*i] = (nodeIdAry[i]>>24)&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)
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;
uint16_t req_size;
uint8_t data[256] = {0};
uint8_t len = 0;
uint8_t r_len = 0;
uint8_t t_len = 0;
uint8_t data[1024] = {0};
uint16_t len = 0;
uint16_t r_len = 0;
uint16_t t_len = 0;
uint8_t *pCrc = NULL;
uint32_t crc;
......@@ -914,14 +1072,40 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
pCrc = &data[len];
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){
while(req_size>t_len){
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;
len += r_len;
}else if(r_len==0){
if(errno!=EINTR){
break;
}
}else{
break;
}
......@@ -938,7 +1122,7 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
data[len++] = crc&0xff;
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);
usleep(100*1000);
//usleep(100*1000);
}
......@@ -1034,9 +1218,7 @@ static void kk_vp_voice_control_handle(pro_data_t *pro_data)
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]);
}
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)
{
uint8_t res[1] = {0};
debug_log(LOG_DEBUG_LEVEL,"get snapshoot\n");
kk_get_voice_version();
vp_send_data_build(OPCODE_8009_SNAPSHOOT,sizeof(res),res);
}
......@@ -1078,7 +1315,9 @@ void kk_vp_set_8009_system_time(void)
uint8_t data[7] = {0};
time_t curTime = time(NULL);
struct tm *c = gmtime(&curTime);
struct tm *c = localtime(&curTime);
data[0] = ((c->tm_year+1900)>>8)&0Xff;
data[1] =(c->tm_year+1900)&0Xff;
......@@ -1104,6 +1343,10 @@ void kk_vp_config_file_update_start(uint32_t ver)
f_ver = ver;
f_size = _vp_get_cfg_file_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();
data[0] = (f_ver>>24)&0xff;
......@@ -1165,7 +1408,9 @@ void kk_vp_get_ota_file_info(void)
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 *pRead = NULL;
......@@ -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",
(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);
......@@ -1476,8 +1715,10 @@ void kk_vp_syncinfo_handle(_IN cJSON *payload)
}
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){
......@@ -1541,6 +1782,7 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data)
err = 2;
}*/
data[len++] = err;
data[len++] = (offset>>24)&0xff;
......@@ -1553,6 +1795,7 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data)
data[len++] = req_size&0xff;
pCrc = &data[len];
if(err==0){
int err = fseek(ota_fp, offset, SEEK_SET);
if(err==0){
......@@ -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);
}
}
crc = CreateCrc32(pCrc, req_size);
data[len++] = (crc>>24)&0xff;
data[len++] = (crc>>16)&0xff;
data[len++] = (crc>>8)&0xff;
data[len++] = crc&0xff;
vp_reply_data_build(pro_data->seq,pro_data->ch,OPCODE_VOICE_OTA_REQUEST,len,data);
usleep(100*1000);
}
......@@ -1621,15 +1867,17 @@ static void kk_vp_ota_file_update_status_handle(pro_data_t *pro_data)
status = pro_data->arg[3];
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]);
kk_vp_voice_version_set(verBuf,strlen(verBuf));
kk_voice_ota_finish_notify(verBuf);
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);
uint8_t data[5] = {0};
data[0] = err;
data[1] = (ver>>16)&0xff;
......@@ -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);
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 stop time:%s\n",dateTime);
//kk_vp_update_result_check(status,ver);
}
......@@ -1700,61 +1943,6 @@ static void kk_voice_volume_handle(pro_data_t *pro_data)
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 @@
#define KK_VOICE_OTA_MTU 128
typedef void (*vp_handle_func)(pro_data_t *pro_data);
......@@ -65,7 +66,7 @@ void kk_vp_get_config_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);
......@@ -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_load(int scene_id,uint16_t map_id);
int vp_scene_id_map_save(void);
int _vp_get_cfg_file_crc32(void);
int _vp_get_cfg_file_size(void);
void kk_voice_control(int val);
......@@ -93,7 +98,10 @@ int kk_vp_voice_version_get(char *ver,int len);
void kk_voice_switch(int val);
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
......@@ -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));
}
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;
uint8_t len;
int len;
uint16_t crc;
uart_data[i++] = PRO_SOF_1;
......@@ -422,7 +422,7 @@ void pro_send_link_ack(pro_data_t *pro_data)
uint8_t buf[PRO_LINK_PAKCET_SIZE];
uint16_t len = 2;
uint16_t crc;
uint8_t i = 0;
uint16_t i = 0;
buf[i++] = PRO_SOF_1;
buf[i++] = PRO_SOF_2;
......@@ -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)
{
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,"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);
char print_buf[512] = {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 ++)
{
......@@ -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
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);
dev_send_uart(data_buf, data_len);
......@@ -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
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);
dev_send_uart(data_buf, data_len);
......@@ -744,7 +743,7 @@ void set_mac_ack(pro_data_t pro_data)
pro_data_tmp.cf.sof_flag = 0;
//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;
for(i = 0; i < mac_len; i++)
......@@ -771,7 +770,7 @@ void set_mac_ack(pro_data_t pro_data)
pro_data_tmp.args_len++;
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);
dev_send_uart(data_buf, data_len);
......@@ -806,7 +805,7 @@ void read_flash_mac_ack(pro_data_t pro_data)
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);
dev_send_uart(data_buf, data_len);
......@@ -876,7 +875,7 @@ extern void kk_vp_opcode_handle(pro_data_t *pro_data);
void uart_frame_handle()
{
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;
//uint8_t pro_data_buf[256];
......@@ -891,57 +890,6 @@ void uart_frame_handle()
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;
}
......@@ -113,7 +113,7 @@ typedef struct
uint8_t ch;
uint16_t opcode;
uint16_t args_len;
uint8_t arg[256];
uint8_t arg[1024];
} pro_data_t;
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);
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);
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