Files
luban-lite-t3e-pro/application/rt-thread/t3e-pro/components/mcu_sdk/zigbee_fun.c
2025-09-30 11:56:06 +08:00

1204 lines
36 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @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"
}
}
}