#ifndef _BLV_485_DEV_LEDFUN_H_
#define _BLV_485_DEV_LEDFUN_H_

#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_All_Dev_Init.h"

#define DEV_LEDTYPE			((uint8_t)24)    //LED调光类型

#define LEDLIGHTMAX     0x64   //最高亮度
#define LEDLIGHTMIN     0x00   //最低亮度   

#define Dim_Global_Value_Cmd    0x30     //全局亮度设置命令
#define Dim_UpLimit_Value_Cmd   0x31     //全局可调上限设置命令
#define Dim_DnLimit_Value_Cmd   0x32     //全局可调下限设置命令
typedef enum{
	LED_OUT_CH01,
	LED_OUT_CH02,
	LED_OUT_CH03,
	LED_OUT_CH04,
	LED_OUT_CH05,
	LED_OUT_CH06,
	LED_OUT_CH07,
	LED_OUT_CH08,
	LED_OUT_CH09,
	LED_OUT_CH10,
	LED_OUT_CH11,
	LED_OUT_CH12,
	LED_OUT_CH13,
	LED_OUT_CH14,
	LED_OUT_CH15,
	LED_OUT_CH16,
	LED_OUT_CH17,
	LED_OUT_CH18,
	LED_OUT_CH19,
	LED_OUT_CH20,
	LED_OUT_CH21,
	LED_OUT_CH22,
	LED_OUT_CH23,
	LED_OUT_CH24,
	LED_OUT_CH25,
	LED_OUT_CH26,
	LED_OUT_CH27,
	LED_OUT_CH28,	
	LED_OUT_CH29,
	LED_OUT_CH30,
	LED_OUT_CH31,
	LED_OUT_CH32,	
	LED_OUT_CH_MAX,
}RS485_LED_OUT_NUM_E;

#define LED_BUFF_Size			LED_OUT_CH_MAX    //调光回路限制

//typedef void (*RS485_LED_IndiCtrl_ptr)(RS485_LED_INFOP, uint16_t Addr, uint16_t OnOff);			//定义传递参数为地址和状态，返回为空的函数类型指针，用于485开关指示灯赋值

typedef struct
{
	BLV_COMM_RECORD_G comm_record;						//通讯记录
	

	uint8_t DevSendBuf[LED_BUFF_Size]; 			  //发送数组，用来存储所有回路的状态
	uint8_t DevSendBuf_last[LED_BUFF_Size];    //发送数组，用来存储所有回路的上一个状态
	uint8_t DevSendBufNext[LED_BUFF_Size];     //修改为全局亮度使用
//	uint8_t *DevSendBufRs485;    //
//	uint8_t *DevSendBufExUdp;    //
	
	uint8_t DevSaveBuf[LED_BUFF_Size]; 
	
	uint8_t DevReadBuf[LED_BUFF_Size];        //调光回路状态变化控制标志
	uint8_t DevRecBuf[LED_BUFF_Size];         //接收调光回路缓存
	uint8_t DevRecBufLast[LED_BUFF_Size];     //接收调光回路缓存上一次
//	uint8_t *LEDStateChangeFlag; //调光状态变化标志
	
//	uint8_t *LEDKeepFlag;         //调光保存标志   1，已保存   0，已恢复
//	uint8_t *LEDKeepState;       //调光状态保存
	
//	uint8_t LEDGradualTime;  //每次调光渐变时间
	
	uint8_t LEDSn;               //低四位表示Sn号
	
	uint8_t WayCtrli;            //方式控制的下标
	
	uint8_t DevSendCnt;     //设备发送计数   计数达到重发次数都没有回复，判为离线  占4位
	uint8_t DevOffline;       //设备离线标志 1，设备离线   0，设备在线             占2位
	uint8_t DevOfflineLast;       //设备离线标志 1，设备离线   0，设备在线         占2位
	
	
//	uint8_t LEDRangeSetFlag;   //调光上下限设置标志
//	uint8_t LEDRangeSetCnt;    //调光渐变时间设置计数
	
	uint8_t LEDUpLightLimit;        //调光上限
	uint8_t LEDUpLightLimitLast;    //调光上限
	uint8_t LEDDownLightLimit;      //调光下限
	uint8_t LEDDownLightLimitLast;  //调光下限
	uint8_t Dim_Global_Value;         //全局亮度
	uint8_t Dim_Global_Value_Last;    //上次全局亮度
	uint8_t Dim_GV_Flag;              //全局亮度设置标记
	
	uint8_t PWM_Set_Time;         
	uint8_t A9LD_Set_Time;
	uint8_t A8PB_Set_Time;
	uint8_t C12_Set_Time;
	uint8_t RGB_Set_Time;

	uint16_t LEDCtrlFlag;        //调光亮度控制标志
	uint8_t LEDCtrlCnt;         //调光亮度控制计数
	uint8_t LEDLoopValidNum;    //调光有效回路数
	
	uint8_t LEDLightRelease[LED_BUFF_Size];     //按键松开亮度保存
	uint8_t LedUpDown[LED_BUFF_Size];           //循环调光方向
	
	uint8_t LEDLightnessReadFlag;   //调光亮度读取标志
	uint8_t LEDLightnessReadCnt;   //调光亮度读取标志

//	uint8_t LEDGroupNum;          //总线调光组号   控制  方式控制 和读取会改变组号 

	uint8_t LEDCycleStep;       //调光状态机
//	uint8_t LEDUpFlag;          //调光上报标志位
	
	uint8_t DevCtrlWayBuf[LED_BUFF_Size];        //调光控制方式
	uint8_t DevCtrlWayBuf_last[LED_BUFF_Size];   //调光方式控制上一个状态
	uint8_t DevCtrlWayContect[LED_BUFF_Size];    //调光方式控制内容 即步长
	
	uint16_t LEDWayCtrlFlag;    //调光方式控制标志
	uint8_t LEDWayCtrlCnt;     //调光方式控制计数	
	
	uint32_t inquire_tick;		//询问时间戳
//	RS485_LED_IndiCtrl_ptr RS485_LED_IndiCtrl;        //指示灯赋值

	uint8_t init_flag;			//初始化标志位

}__attribute__ ((__packed__))RS485_LED_INFO;						//485温控器的数据与函数




void BLW_RS485_LED_Data_Init(uint16_t DataLen, uint8_t *Data);
void BLW_RS485_LED_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
void BLW_LED_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start);

#endif




















