/** * @file zigbee_fun.c * @brief this file contains basic fuctions and DP data report fucntion which is base on DP type * @author * @date 2020.03.13 * @par email: * @copyright HANGZHOU TUYA INFORMATION TECHNOLOGY CO.,LTD * @par company * http://www.tuya.com */ #include #include #include #include #include "rtconfig.h" #include "nvs_eepom.h" #include "zigbee_fun.h" #include "zigbee.h" // #define TAG "zigbee_R" // #define TAGT "zigbee_T" // #define DBG_TAG "zigbee" #define DBG_TAG "zigbee" #define DBG_LVL DBG_INFO #include //接收消息 rt_mq_t zig_rx_evt_queue = NULL; //定义一个队列返回变量 rt_thread_t zigbee_thread=NULL; void zigbee_fun_task(void *pvParameter); //struct serial_configure uart_config=RT_SERIAL_CONFIG_DEFAULT; static rt_device_t serial; int zigbee_uart_int(void) { //使能 long pin = 0; unsigned int g; unsigned int p; pin = hal_gpio_name2pin("PD.2"); g = GPIO_GROUP(pin); p = GPIO_GROUP_PIN(pin); hal_gpio_direction_output(g, p); hal_gpio_clr_output(g, p); aic_mdelay(100); hal_gpio_set_output(g, p); #ifdef AIC_BOARD_MODEL3C //串口初始化 char uart_name[]="uart1"; #else //串口初始化 char uart_name[]="uart3"; #endif LOG_I("Try to open(%s)",uart_name); serial = rt_device_find(uart_name); if (!serial) { LOG_I("find %s failed!\n", uart_name); return -RT_ERROR; } rt_err_t ret = rt_device_open(serial, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX); // ASSERT(ret != RT_EOK, "open %s failed : %d !\n", uart_name, ret); if (ret != RT_EOK) { LOG_I("open %s failed : %d !\n", uart_name, ret); return -RT_ERROR; } //uart_config. //配置串口 //rt_device_control(serial,RT_DEVICE_CTRL_CONFIG,(void*)&uart_config); //创建动态消息队列 返回消息队列对象的句柄 zig_rx_evt_queue= rt_mq_create("zigbee_mq", //消息队列的名称 sizeof(ZIGEvent), //消息队列中一条消息的最大长度,单位字节 10, //消息队列的最大个数 RT_IPC_FLAG_PRIO ); //消息队列采用的阻塞线程的等待方式,它可以取如下数值:RT_IPC_FLAG_FIFO //按照先进先出排序或RT_IPC_FLAG_PRIO //按照优先级排序 if(!zig_rx_evt_queue) { LOG_E("RT-Thread zig_rx_evt_queue create mq fail"); } //创建任务 zigbee_thread = rt_thread_create("zigbee_fun", //名称 zigbee_fun_task, //线程代码 RT_NULL, //参数 10240, //栈大小 13, //优先级 100); //时间片 if (zigbee_thread != RT_NULL) { rt_thread_startup(zigbee_thread); //线程进入就绪态 } else { LOG_I("dynamic_thread create failure\n"); } return RT_EOK; } void esp_log_buffer_hex(const char *tag, const void *buffer, uint16_t buff_len) { if (buff_len == 0) { return; } char *ptr_line=(char *)buffer; printf("\n"); printf("%s:",tag); for(int i=0;i 0) // // { // // rxdata[rxBytes] = 0;//在串口接收的数据增加结束符 // // // // esp_log_buffer_hex(TAG,rxdata,rxBytes); // // //将接收到的数据发出去 // // //LOG_I( "rx:%s", (char *)rxdata); // // } if(evt.buffStr)//接收到的是指针 用完释放内存 { LOG_I("free receData.buffStr:%x",(uint32_t)evt.buffStr); free(evt.buffStr); evt.buffStr=NULL; } //rt_thread_mdelay(10); if(rt_mq_recv(zig_rx_evt_queue,&evt,sizeof(ZIGEvent),100)==RT_EOK) {//上报 switch(evt.event) { #ifdef SUPPORT_MCU_OTA case ZIG_STATE_Update_Start: case ZIG_STATE_Update_RUNING: { mcu_ota_fw_request(); } break; #endif case ZIG_STATE_RTC_CURRENT: { } break; case ZIG_STATE_RTC_UPDATE://间隔1个小时获取一次时间 用于校准 { mcu_get_zigbee_state();//主动查询网络状态,入网状态的话查询时间(不入网,则不查询时间) } break; case ZIG_STATE_RTC_RUNING: { } break; case ZIG_STATE_CONFIG_START://开始配网 { mcu_network_start(); } break; case ZIG_STATE_CONFIG_CHECK://主动查询入网状态 { mcu_get_zigbee_state(); } break; case ZIG_STATE_CONFIG_JOINING://入网中 { } break; case ZIG_STATE_CONFIG_GATEWAY://已入网 { //开关状态同步上报 mcu_dp_bool_update(DPID_SWITCH_1,GET_nvs_Sys_Info_relay1()); mcu_dp_bool_update(DPID_SWITCH_2,GET_nvs_Sys_Info_relay2()); mcu_dp_bool_update(DPID_SWITCH_3,GET_nvs_Sys_Info_relay3()); mcu_dp_bool_update(DPID_SWITCH_4,GET_nvs_Sys_Info_relay4()); rt_thread_mdelay(200); //灯组1的 //开关状态 mcu_dp_bool_update(DPID_GROUP_SWITCH_LED_1,nvs_SysInfo.downlights[0].status); //色温 mcu_dp_value_update(DPID_GROUP_TEMP_VALUE1,nvs_SysInfo.downlights[0].colortemperature); //亮度 mcu_dp_value_update(DPID_GROUP_BRIGHT_VALUE1,nvs_SysInfo.downlights[0].brightness); rt_thread_mdelay(200); //灯组2的 mcu_dp_bool_update(DPID_GROUP_SWITCH_LED_2,nvs_SysInfo.downlights[1].status); mcu_dp_value_update(DPID_GROUP_TEMP_VALUE2,nvs_SysInfo.downlights[1].colortemperature); mcu_dp_value_update(DPID_GROUP_BRIGHT_VALUE2,nvs_SysInfo.downlights[1].brightness); rt_thread_mdelay(200); //灯组3的 mcu_dp_bool_update(DPID_GROUP_SWITCH_LED_3,nvs_SysInfo.downlights[2].status); mcu_dp_value_update(DPID_GROUP_TEMP_VALUE3,nvs_SysInfo.downlights[2].colortemperature); mcu_dp_value_update(DPID_GROUP_BRIGHT_VALUE3,nvs_SysInfo.downlights[2].brightness); rt_thread_mdelay(200); //灯组4的 mcu_dp_bool_update(DPID_GROUP_SWITCH_LED_4,nvs_SysInfo.downlights[3].status); mcu_dp_value_update(DPID_GROUP_TEMP_VALUE4,nvs_SysInfo.downlights[3].colortemperature); mcu_dp_value_update(DPID_GROUP_BRIGHT_VALUE4,nvs_SysInfo.downlights[3].brightness); rt_thread_mdelay(200); //窗帘组1的开关状态 mcu_dp_enum_update(DPID_GROUP_CURTIAN_STATUS_1,nvs_SysInfo.curtains[0].status); if(nvs_SysInfo.curtains[0].status==2)//关 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_1,0); } else if(evt.length==0)//开 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_1,100); } rt_thread_mdelay(200); //窗帘组2的开关状态 mcu_dp_enum_update(DPID_GROUP_CURTIAN_STATUS_2,nvs_SysInfo.curtains[1].status); if(nvs_SysInfo.curtains[1].status==2)//关 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_2,0); } else if(evt.length==0)//开 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_2,100); } rt_thread_mdelay(200); //窗帘组3的开关状态 mcu_dp_enum_update(DPID_GROUP_CURTIAN_STATUS_3,nvs_SysInfo.curtains[2].status); if(nvs_SysInfo.curtains[2].status==2)//关 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_3,0); } else if(evt.length==0)//开 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_3,100); } rt_thread_mdelay(200); //窗帘组4的开关状态 mcu_dp_enum_update(DPID_GROUP_CURTIAN_STATUS_4,nvs_SysInfo.curtains[3].status); if(nvs_SysInfo.curtains[3].status==2)//关 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_4,0); } else if(evt.length==0)//开 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_4,100); } rt_thread_mdelay(200); //空调的状态上报 mcu_dp_enum_update(DPID_SCENE_AIR_SWITCH,!nvs_SysInfo.airconditioner.onoff); mcu_dp_enum_update(DPID_SCENE_AIR_MODE,nvs_SysInfo.airconditioner.mode); mcu_dp_enum_update(DPID_SCENE_AIR_MODE,nvs_SysInfo.airconditioner.mode); mcu_dp_enum_update(DPID_SCENE_AIR_MODE,nvs_SysInfo.airconditioner.mode); rt_thread_mdelay(200); mcu_dp_enum_update(DPID_SCENE_AIR_SPEED,nvs_SysInfo.airconditioner.speed); mcu_dp_enum_update(DPID_SCENE_AIR_FAN,nvs_SysInfo.airconditioner.direct); mcu_dp_enum_update(DPID_SCENE_AIR_TEMP,nvs_SysInfo.airconditioner.temp); rt_thread_mdelay(200); //投影仪的状态上报 mcu_dp_enum_update(DPID_SCENE_PROJECTOR_SWITCH,!nvs_SysInfo.projector.onoff); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_VOLUME,nvs_SysInfo.projector.volume); rt_thread_mdelay(200); } break; case ZIG_STATE_CONFIG_ERROR://入网错误 { } break; //------------------------------ case ZIG_STATE_Scene_switch_set://复合开关的选择 当场景还是开关 { // if(GET_nvs_Sys_Info_currentrelay()==RELAY_1gang) // { // mcu_dp_enum_update(DPID_MODE_1,0); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_2,1); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_3,1); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_4,1); //枚举型数据上报; // } // else if(GET_nvs_Sys_Info_currentrelay()==RELAY_2gang) // { // mcu_dp_enum_update(DPID_MODE_1,0); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_2,0); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_3,1); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_4,1); //枚举型数据上报; // } // else if(GET_nvs_Sys_Info_currentrelay()==RELAY_3gang) // { // mcu_dp_enum_update(DPID_MODE_1,0); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_2,0); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_3,0); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_4,1); //枚举型数据上报; // } // else //if(GET_nvs_Sys_Info_currentrelay()==RELAY_4gang) // { // mcu_dp_enum_update(DPID_MODE_1,0); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_2,0); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_3,0); //枚举型数据上报; // mcu_dp_enum_update(DPID_MODE_4,0); //枚举型数据上报; // } } break; //------------------------------开关 case ZIG_STATE_1on: { mcu_dp_bool_update(DPID_SWITCH_1,1); } break; case ZIG_STATE_1off: { mcu_dp_bool_update(DPID_SWITCH_1,0); } break; //----------- case ZIG_STATE_2on: { mcu_dp_bool_update(DPID_SWITCH_2,1); } break; case ZIG_STATE_2off: { mcu_dp_bool_update(DPID_SWITCH_2,0); } break; //----------- case ZIG_STATE_3on: { mcu_dp_bool_update(DPID_SWITCH_3,1); } break; case ZIG_STATE_3off: { mcu_dp_bool_update(DPID_SWITCH_3,0); } break; //----------- case ZIG_STATE_4on: { mcu_dp_bool_update(DPID_SWITCH_4,1); } break; case ZIG_STATE_4off: { mcu_dp_bool_update(DPID_SWITCH_4,0); } break; //------------------------------场景-->首屏场景 case ZIG_STATE_SCENE_1: { mcu_dp_enum_update(DPID_SCENE_1,0); } break; case ZIG_STATE_SCENE_2: { mcu_dp_enum_update(DPID_SCENE_2,0); } break; case ZIG_STATE_SCENE_3: { mcu_dp_enum_update(DPID_SCENE_3,0); } break; case ZIG_STATE_SCENE_4: { mcu_dp_enum_update(DPID_SCENE_4,0); } break; case ZIG_STATE_SCENE_5: { LOG_I("SCENE_5"); mcu_dp_enum_update(DPID_SCENE_5,0); } break; case ZIG_STATE_SCENE_6: { LOG_I("SCENE_6"); mcu_dp_enum_update(DPID_SCENE_6,0); } break; case ZIG_STATE_SCENE_7: { LOG_I("SCENE_7"); mcu_dp_enum_update(DPID_SCENE_7,0); } break; case ZIG_STATE_SCENE_8: { LOG_I("SCENE_8"); mcu_dp_enum_update(DPID_SCENE_8,0); } break; //------------------------------场景-->场景开关 //------------------------------场景-->空调 //------------------------------场景-->投影仪 //------------------------------调光-->灯群1 case ZIG_STATE_light1_switch_led://开关 { mcu_dp_bool_update(DPID_GROUP_SWITCH_LED_1,evt.length); //群组控制 if(nvs_SysInfo.downlights[0].GroupID) { mcu_send_cmd_group_bool_update(nvs_SysInfo.downlights[0].GroupID,0x0006,evt.length); } } break; case ZIG_STATE_light1_temp: //色温 { mcu_dp_value_update(DPID_GROUP_TEMP_VALUE1,evt.length); //群组控制 if(nvs_SysInfo.downlights[0].GroupID) { unsigned char movetolevel[5]; //cmd move to color temperature //color temperature mireds unsigned short temperature=(unsigned short)(evt.length*12.03);//0~100--->0~1023 temperature=1023-temperature; movetolevel[0]=temperature/256; movetolevel[1]=temperature%256; //transition time movetolevel[2]=0; movetolevel[3]=5;//过渡时间(渐变时间) mcu_send_cmd_group_raw_update(nvs_SysInfo.downlights[0].GroupID,0x0300,0x0A,(const unsigned char *)movetolevel,4); } } break; case ZIG_STATE_light1_bright: //亮度 { mcu_dp_value_update(DPID_GROUP_BRIGHT_VALUE1,evt.length); //群组控制 if(nvs_SysInfo.downlights[0].GroupID) { unsigned char movetolevel[3]; movetolevel[0]=(unsigned char)(evt.length*2.55); movetolevel[1]=0; movetolevel[2]=5;//过渡时间(渐变时间) mcu_send_cmd_group_raw_update(nvs_SysInfo.downlights[0].GroupID,0x0008,0x04,(const unsigned char *)movetolevel,3); } } break; //------------------------------调光-->灯群2 case ZIG_STATE_light2_switch_led://开关 { mcu_dp_bool_update(DPID_GROUP_SWITCH_LED_2,evt.length); //群组控制 if(nvs_SysInfo.downlights[1].GroupID) { mcu_send_cmd_group_bool_update(nvs_SysInfo.downlights[1].GroupID,0x0006,evt.length); } } break; case ZIG_STATE_light2_temp: //色温 { mcu_dp_value_update(DPID_GROUP_TEMP_VALUE2,evt.length); //群组控制 if(nvs_SysInfo.downlights[1].GroupID) { unsigned char movetolevel[5]; //cmd move to color temperature //color temperature mireds unsigned short temperature=(unsigned short)(evt.length*12.03);//0~100--->0~1023 temperature=1023-temperature; movetolevel[0]=temperature/256; movetolevel[1]=temperature%256; //transition time movetolevel[2]=0; movetolevel[3]=5;//过渡时间(渐变时间) mcu_send_cmd_group_raw_update(nvs_SysInfo.downlights[1].GroupID,0x0300,0x0A,(const unsigned char *)movetolevel,4); } } break; case ZIG_STATE_light2_bright: //亮度 { mcu_dp_value_update(DPID_GROUP_BRIGHT_VALUE2,evt.length); //群组控制 if(nvs_SysInfo.downlights[1].GroupID) { unsigned char movetolevel[3]; movetolevel[0]=(unsigned char)(evt.length*2.55); movetolevel[1]=0; movetolevel[2]=5;//过渡时间(渐变时间) mcu_send_cmd_group_raw_update(nvs_SysInfo.downlights[1].GroupID,0x0008,0x04,(const unsigned char *)movetolevel,3); } } break; //------------------------------调光-->灯群3 case ZIG_STATE_light3_switch_led://开关 { mcu_dp_bool_update(DPID_GROUP_SWITCH_LED_3,evt.length); //群组控制 if(nvs_SysInfo.downlights[2].GroupID) { mcu_send_cmd_group_bool_update(nvs_SysInfo.downlights[2].GroupID,0x0006,evt.length); } } break; case ZIG_STATE_light3_temp: //色温 { mcu_dp_value_update(DPID_GROUP_TEMP_VALUE3,evt.length); //群组控制 if(nvs_SysInfo.downlights[2].GroupID) { unsigned char movetolevel[5]; //cmd move to color temperature //color temperature mireds unsigned short temperature=(unsigned short)(evt.length*12.03);//0~100--->0~1023 temperature=1023-temperature; movetolevel[0]=temperature/256; movetolevel[1]=temperature%256; //transition time movetolevel[2]=0; movetolevel[3]=5;//过渡时间(渐变时间) mcu_send_cmd_group_raw_update(nvs_SysInfo.downlights[2].GroupID,0x0300,0x0A,(const unsigned char *)movetolevel,4); } } break; case ZIG_STATE_light3_bright: //亮度 { mcu_dp_value_update(DPID_GROUP_BRIGHT_VALUE3,evt.length); //群组控制 if(nvs_SysInfo.downlights[2].GroupID) { unsigned char movetolevel[3]; movetolevel[0]=(unsigned char)(evt.length*2.55); movetolevel[1]=0; movetolevel[2]=5;//过渡时间(渐变时间) mcu_send_cmd_group_raw_update(nvs_SysInfo.downlights[2].GroupID,0x0008,0x04,(const unsigned char *)movetolevel,3); } } break; //------------------------------调光-->灯群4 case ZIG_STATE_light4_switch_led://开关 { mcu_dp_bool_update(DPID_GROUP_SWITCH_LED_4,evt.length); //群组控制 if(nvs_SysInfo.downlights[3].GroupID) { mcu_send_cmd_group_bool_update(nvs_SysInfo.downlights[3].GroupID,0x0006,evt.length); } } break; case ZIG_STATE_light4_temp: //色温 { mcu_dp_value_update(DPID_GROUP_TEMP_VALUE4,evt.length); //群组控制 if(nvs_SysInfo.downlights[3].GroupID) { unsigned char movetolevel[5]; //cmd move to color temperature //color temperature mireds unsigned short temperature=(unsigned short)(evt.length*12.03);//0~100--->0~1023 temperature=1023-temperature; movetolevel[0]=temperature/256; movetolevel[1]=temperature%256; //transition time movetolevel[2]=0; movetolevel[3]=5;//过渡时间(渐变时间) mcu_send_cmd_group_raw_update(nvs_SysInfo.downlights[3].GroupID,0x0300,0x0A,(const unsigned char *)movetolevel,4); } } break; case ZIG_STATE_light4_bright: //亮度 { mcu_dp_value_update(DPID_GROUP_BRIGHT_VALUE4,evt.length); //群组控制 if(nvs_SysInfo.downlights[3].GroupID) { unsigned char movetolevel[3]; movetolevel[0]=(unsigned char)(evt.length*2.55); movetolevel[1]=0; movetolevel[2]=5;//过渡时间(渐变时间) mcu_send_cmd_group_raw_update(nvs_SysInfo.downlights[3].GroupID,0x0008,0x04,(const unsigned char *)movetolevel,3); } } break; //------------------------------窗帘-->窗帘群1 case ZIG_STATE_Curtain1_status://状态 开/关/停 { mcu_dp_enum_update(DPID_GROUP_CURTIAN_STATUS_1,evt.length); if(evt.length==2)//关 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_1,0); } else if(evt.length==0)//开 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_1,100); } //群组控制 if(nvs_SysInfo.curtains[0].GroupID) { mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[0].GroupID,0x01,evt.length); rt_thread_mdelay(100); mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[0].GroupID,0x01,evt.length); rt_thread_mdelay(100); mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[0].GroupID,0x01,evt.length); } } break; case ZIG_STATE_Curtain1_value: //百分比 { //mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_1,evt.length); } //------------------------------窗帘-->窗帘群2 case ZIG_STATE_Curtain2_status://状态 开/关/停 { mcu_dp_enum_update(DPID_GROUP_CURTIAN_STATUS_2,evt.length); if(evt.length==2)//关 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_2,0); } else if(evt.length==0)//开 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_2,100); } //群组控制 if(nvs_SysInfo.curtains[1].GroupID) { mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[1].GroupID,0x01,evt.length); rt_thread_mdelay(100); mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[1].GroupID,0x01,evt.length); rt_thread_mdelay(100); mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[1].GroupID,0x01,evt.length); } } break; case ZIG_STATE_Curtain2_value: //百分比 { //mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_2,evt.length); } break; //------------------------------窗帘-->窗帘群3 case ZIG_STATE_Curtain3_status://状态 开/关/停 { mcu_dp_enum_update(DPID_GROUP_CURTIAN_STATUS_3,evt.length); if(evt.length==2)//关 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_3,0); } else if(evt.length==0)//开 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_3,100); } //群组控制 if(nvs_SysInfo.curtains[2].GroupID) { mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[2].GroupID,0x01,evt.length); rt_thread_mdelay(100); mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[2].GroupID,0x01,evt.length); rt_thread_mdelay(100); mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[2].GroupID,0x01,evt.length); } } break; case ZIG_STATE_Curtain3_value: //百分比 { //mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_3,evt.length); } break; //------------------------------窗帘-->窗帘群4 case ZIG_STATE_Curtain4_status://状态 开/关/停 { mcu_dp_enum_update(DPID_GROUP_CURTIAN_STATUS_4,evt.length); if(evt.length==2)//关 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_4,0); } else if(evt.length==0)//开 { mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_4,100); } //群组控制 if(nvs_SysInfo.curtains[3].GroupID) { mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[3].GroupID,0x01,evt.length); rt_thread_mdelay(100); mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[3].GroupID,0x01,evt.length); rt_thread_mdelay(100); mcu_send_cmd_group_enum_update(nvs_SysInfo.curtains[3].GroupID,0x01,evt.length); } } break; case ZIG_STATE_Curtain4_value: //百分比 { //mcu_dp_value_update(DPID_GROUP_CURTIAN_VALUE_4,evt.length); } break; //空调 case ZIG_STATE_SCENE_AirconditionerON://空调开(可下发可上报) { LOG_I("ZIG_STATE_SCENE_AirconditionerON"); mcu_dp_enum_update(DPID_SCENE_AIR_SWITCH,0); } break; case ZIG_STATE_SCENE_AirconditionerOFF://空调关(可下发可上报) { LOG_I("ZIG_STATE_SCENE_AirconditionerOFF"); mcu_dp_enum_update(DPID_SCENE_AIR_SWITCH,1); } break; //设备界面的 case ZIG_STATE_SCENE_Airconditionercool://制冷(可下发可上报) { LOG_I("ZIG_STATE_SCENE_Airconditionercool"); mcu_dp_enum_update(DPID_SCENE_AIR_MODE,nvs_SysInfo.airconditioner.mode); } break; case ZIG_STATE_SCENE_Airconditionerheat://制热(可下发可上报) { LOG_I("ZIG_STATE_SCENE_Airconditionercool"); mcu_dp_enum_update(DPID_SCENE_AIR_MODE,nvs_SysInfo.airconditioner.mode); } break; case ZIG_STATE_SCENE_Airconditionermode://空调模式 {//AUTO, COOL, HEAT, DRY, FAN LOG_I("ZIG_STATE_SCENE_Airconditionermode"); mcu_dp_enum_update(DPID_SCENE_AIR_MODE,nvs_SysInfo.airconditioner.mode); } break; case ZIG_STATE_SCENE_Airconditionerspeed://空调风速 {//AUTO, LOW, MEDIUM, HIGH LOG_I("ZIG_STATE_SCENE_Airconditionerspeed"); mcu_dp_enum_update(DPID_SCENE_AIR_SPEED,nvs_SysInfo.airconditioner.speed); } break; case ZIG_STATE_SCENE_Airconditionerdirect://空调风向 {//AUTO, UP, MEDIUM, DOWN, LEFTORRIGHT LOG_I("ZIG_STATE_SCENE_Airconditionerdirect"); mcu_dp_enum_update(DPID_SCENE_AIR_FAN,nvs_SysInfo.airconditioner.direct); } break; case ZIG_STATE_SCENE_Airconditionertempadd://增加1°(可下发可上报) case ZIG_STATE_SCENE_Airconditionertempsub://减少1°(可下发可上报) { LOG_I("ZIG_STATE_SCENE_Airconditionertemp"); mcu_dp_enum_update(DPID_SCENE_AIR_TEMP,nvs_SysInfo.airconditioner.temp); } break; //投影仪 case ZIG_STATE_SCENE_ProjectorON: { LOG_I("ZIG_STATE_SCENE_ProjectorON"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_SWITCH,0); } break; case ZIG_STATE_SCENE_ProjectorOFF: { LOG_I("ZIG_STATE_SCENE_ProjectorOFF"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_SWITCH,1); } break; case ZIG_STATE_SCENE_Projector_volume: { LOG_I("ZIG_STATE_SCENE_Projector_volume"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_VOLUME,nvs_SysInfo.projector.volume); } break; case ZIG_STATE_SCENE_Projector_quit: { LOG_I("ZIG_STATE_SCENE_Projector_quit"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_QUIT,0); } break; case ZIG_STATE_SCENE_Projector_return: { LOG_I("ZIG_STATE_SCENE_Projector_return"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_RETURN,0); } break; case ZIG_STATE_SCENE_Projector_home: { LOG_I("ZIG_STATE_SCENE_Projector_home"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_HOME,0); } break; case ZIG_STATE_SCENE_Projector_menu: { LOG_I("ZIG_STATE_SCENE_Projector_menu"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_MENU,0); } break; case ZIG_STATE_SCENE_Projector_up: { LOG_I("ZIG_STATE_SCENE_Projector_up"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_DIRECTION,0); } break; case ZIG_STATE_SCENE_Projector_down: { LOG_I("ZIG_STATE_SCENE_Projector_down"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_DIRECTION,1); } break; case ZIG_STATE_SCENE_Projector_left: { LOG_I("ZIG_STATE_SCENE_Projector_left"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_DIRECTION,2); } break; case ZIG_STATE_SCENE_Projector_right: { LOG_I("ZIG_STATE_SCENE_Projector_right"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_DIRECTION,3); } break; case ZIG_STATE_SCENE_Projector_sure: { LOG_I("ZIG_STATE_SCENE_Projector_sure"); mcu_dp_enum_update(DPID_SCENE_PROJECTOR_SURE,0); } break; //1路场景开关1 1路 全开全关也还是那1路 case ZIG_STATE_GANG11on: case ZIG_STATE_GANG1_ALLon: { LOG_I("gang 1 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH1_1,0);//enum:on(0) off(1) } break; case ZIG_STATE_GANG11off: case ZIG_STATE_GANG1_ALLoff: { LOG_I("gang 1 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH1_1,1); } break; //1路场景开关1 case ZIG_STATE_GANG21on: { LOG_I("gang 21 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH2_1,0); } break; case ZIG_STATE_GANG21off: { LOG_I("gang 21 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH2_1,1); } break; case ZIG_STATE_GANG22on: { LOG_I("gang 22 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH2_2,0); } break; case ZIG_STATE_GANG22off: { LOG_I("gang 22 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH2_2,1); } break; case ZIG_STATE_GANG2_ALLon: { LOG_I("gang2 all on"); mcu_dp_enum_update(DPID_SCENE_SWITCH2_1,0); mcu_dp_enum_update(DPID_SCENE_SWITCH2_1,0); } break; case ZIG_STATE_GANG2_ALLoff: { LOG_I("gang2 all off"); mcu_dp_enum_update(DPID_SCENE_SWITCH2_1,1); mcu_dp_enum_update(DPID_SCENE_SWITCH2_1,1); } break; //-------------------------------------------- //3路场景开关 case ZIG_STATE_GANG31on: { LOG_I("gang 31 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH3_1,0); } break; case ZIG_STATE_GANG31off: { LOG_I("gang 31 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH3_1,1); } break; case ZIG_STATE_GANG32on: { LOG_I("gang 32 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH3_2,0); } break; case ZIG_STATE_GANG32off: { LOG_I("gang 32 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH3_2,1); } break; case ZIG_STATE_GANG33on: { LOG_I("gang 33 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH3_3,0); } break; case ZIG_STATE_GANG33off: { LOG_I("gang 33 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH3_3,1); } break; case ZIG_STATE_GANG3_ALLon: { LOG_I("gang3 all on"); mcu_dp_enum_update(DPID_SCENE_SWITCH3_1,0); mcu_dp_enum_update(DPID_SCENE_SWITCH3_2,0); mcu_dp_enum_update(DPID_SCENE_SWITCH3_3,0); } break; case ZIG_STATE_GANG3_ALLoff: { LOG_I("gang3 all off"); mcu_dp_enum_update(DPID_SCENE_SWITCH3_1,1); mcu_dp_enum_update(DPID_SCENE_SWITCH3_2,1); mcu_dp_enum_update(DPID_SCENE_SWITCH3_3,1); } break; //4路场景开关 case ZIG_STATE_GANG41on: { LOG_I("gang 41 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_1,0); } break; case ZIG_STATE_GANG41off: { LOG_I("gang 41 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_1,1); } break; case ZIG_STATE_GANG42on: { LOG_I("gang 42 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_2,0); } break; case ZIG_STATE_GANG42off: { LOG_I("gang 42 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_2,1); } break; case ZIG_STATE_GANG43on: { LOG_I("gang 43 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_3,0); } break; case ZIG_STATE_GANG43off: { LOG_I("gang 43 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_3,1); } break; case ZIG_STATE_GANG44on: { LOG_I("gang 44 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_4,0); } break; case ZIG_STATE_GANG44off: { LOG_I("gang 44 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_4,1); } break; case ZIG_STATE_GANG4_ALLon: { LOG_I("gang4 all on"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_1,0); mcu_dp_enum_update(DPID_SCENE_SWITCH4_2,0); mcu_dp_enum_update(DPID_SCENE_SWITCH4_3,0); mcu_dp_enum_update(DPID_SCENE_SWITCH4_4,0); } break; case ZIG_STATE_GANG4_ALLoff: { LOG_I("gang4 all off"); mcu_dp_enum_update(DPID_SCENE_SWITCH4_1,1); mcu_dp_enum_update(DPID_SCENE_SWITCH4_2,1); mcu_dp_enum_update(DPID_SCENE_SWITCH4_3,1); mcu_dp_enum_update(DPID_SCENE_SWITCH4_4,1); } break; //6路场景开关 case ZIG_STATE_GANG61on: { LOG_I("gang 61 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_1,0); } break; case ZIG_STATE_GANG61off: { LOG_I("gang 61 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_1,1); } break; case ZIG_STATE_GANG62on: { LOG_I("gang 62 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_2,0); } break; case ZIG_STATE_GANG62off: { LOG_I("gang 62 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_2,1); } break; case ZIG_STATE_GANG63on: { LOG_I("gang 63 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_3,0); } break; case ZIG_STATE_GANG63off: { LOG_I("gang 63 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_3,1); } break; case ZIG_STATE_GANG64on: { LOG_I("gang 64 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_4,0); } break; case ZIG_STATE_GANG64off: { LOG_I("gang 64 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_4,1); } break; case ZIG_STATE_GANG65on: { LOG_I("gang 65 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_5,0); } break; case ZIG_STATE_GANG65off: { LOG_I("gang 65 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_5,1); } break; case ZIG_STATE_GANG66on: { LOG_I("gang 66 on"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_6,0); } break; case ZIG_STATE_GANG66off: { LOG_I("gang 66 off"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_6,1); } break; case ZIG_STATE_GANG6_ALLon: { LOG_I("gang6 all on"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_1,0); mcu_dp_enum_update(DPID_SCENE_SWITCH6_2,0); mcu_dp_enum_update(DPID_SCENE_SWITCH6_3,0); mcu_dp_enum_update(DPID_SCENE_SWITCH6_4,0); mcu_dp_enum_update(DPID_SCENE_SWITCH6_5,0); mcu_dp_enum_update(DPID_SCENE_SWITCH6_6,0); } break; case ZIG_STATE_GANG6_ALLoff: { LOG_I("gang6 all off"); mcu_dp_enum_update(DPID_SCENE_SWITCH6_1,1); mcu_dp_enum_update(DPID_SCENE_SWITCH6_2,1); mcu_dp_enum_update(DPID_SCENE_SWITCH6_3,1); mcu_dp_enum_update(DPID_SCENE_SWITCH6_4,1); mcu_dp_enum_update(DPID_SCENE_SWITCH6_5,1); mcu_dp_enum_update(DPID_SCENE_SWITCH6_6,1); } break; default: { LOG_I( "event error!!!"); } break; } } else { //const int rxBytes = uart_read_bytes(ZIG_UART_NUM, rxdata, ZIG_RX_BUF_SIZE,25/portTICK_PERIOD_MS); int rxBytes = rt_device_read(serial, -1, rxdata, ZIG_RX_BUF_SIZE); if (rxBytes > 0) { //rxdata[rxBytes] = 0;//在串口接收的数据增加结束符 //LOG_I( "rx:%s", (char *)rxdata); LOG_I("rxBytes:%d\r\n",rxBytes); esp_log_buffer_hex(LOG_TAG,rxdata,rxBytes); //ulog_hexdump(DBG_TAG,16,&rxdata,rxBytes); for(int rxBytesindex=0;rxBytesindex