Files
luban-lite-t3e-pro/application/rt-thread/t3e-pro/components/mcu_sdk/zigbee_fun.c

1204 lines
36 KiB
C
Raw Normal View History

2025-09-30 11:56:06 +08:00
/**
* @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 <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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 <rtdbg.h>
//接收消息
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<buff_len;i++)
{
printf("%02x ",ptr_line[i]);
if(i&&((i%15)==0))
{
printf("\r");
}
}
printf("\n");
}
//串口发送
void zigbee_uart_sendByte(unsigned char value)
{
rt_device_write(serial, 0, &value, 1);
}
void zigbee_uart_sendBytes(unsigned char *in, unsigned short len)
{
//LOG_I("zigbee_uart_sendBytes\n");
esp_log_buffer_hex(LOG_TAG,(const char *)in,len);//一行 32byte内容
rt_device_write(serial, 0, in, len);
}
#define ZIG_RX_BUF_SIZE (512)
#define ZIG_TX_BUF_SIZE (512)
void zigbee_fun_task(void *pvParameter)
{
// char ch;
ZIGEvent evt;
evt.event=ZIG_STATE_IDLE;
evt.length=0;
evt.buffStr=NULL;
zigbee_protocol_init(); // #error "please call this fuction in main init"
rt_thread_mdelay(1000);
mcu_reset_zigbee();//系统重启后也让模组重启一次 会主动下发网络状态
// mcu_get_zigbee_state();//获取状态 如果入网更新时间
//rt_thread_mdelay(1000);
// Configure a temporary buffer for the incoming data
uint8_t *rxdata = (uint8_t *) malloc(ZIG_RX_BUF_SIZE);
LOG_I("zigbee_fun_task running");
// for(;;)
// {
// rt_thread_mdelay(1000);
// }
for(;;)
{
// // rt_thread_mdelay(1000);
// // LOG_I("zigbee_fun_task");
// // zigbee_uart_service();
//
// // const int rxBytes = uart_read_bytes(ZIG_UART_NUM, rxdata, ZIG_RX_BUF_SIZE,50 / portTICK_RATE_MS);
// // if (rxBytes > 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<rxBytes;rxBytesindex++)
{
//LOG_I("rxBytesindex:%d",rxBytesindex);
//uart_receive_input(ch);//#error "please call this fuction in the interrupt fuction of serial receive, and delete this line"
uart_receive_input(rxdata[rxBytesindex]);//#error "please call this fuction in the interrupt fuction of serial receive, and delete this line"
}
}
else
{
if (rxBytes < 0)
pr_debug("read() return [%ld] %s\n",rt_get_errno(), rt_strerror(rt_get_errno()));
}
zigbee_uart_service();//#error "please call this fucntion in main while(1){}, and delete this line"
}
}
}