



#ifndef _BLV_485_DEV_RGB_CTRLFUN_H_
#define _BLV_485_DEV_RGB_CTRLFUN_H_

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

#define DEV_RGBTYPE			((uint8_t)24)    //RGB调光类型

#define RGBLIGHTMAX     0x64   //最高亮度
#define RGBLIGHTMIN     0x00   //最低亮度   

typedef enum{
	RGB_OUT_CH1,
	RGB_OUT_CH2,
	RGB_OUT_CH3,
	RGB_OUT_CH4,
	RGB_OUT_CH_MAX,
}RS485_RGB_OUT_NUM_E;

#define RGB_BUFF_Size			RGB_OUT_CH_MAX    //调光回路限制

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

typedef struct
{
	uint8_t DevSendBuf[RGB_BUFF_Size]; 			  //发送数组，用来存储所有回路的状态
	uint8_t DevSendBuf_last[RGB_BUFF_Size];   //发送数组，用来存储所有回路的上一个状态
	uint8_t DevSendBufNext[RGB_BUFF_Size];    //对内服务器上报比较 用于场景反馈灯控制
//	uint8_t *DevSendBufRs485;    //
//	uint8_t *DevSendBufExUdp;    //
	
	 
	uint8_t DevReadBuf[RGB_BUFF_Size];        //调光回路状态变化控制标志
//	uint8_t *RGBStateChangeFlag; //调光状态变化标志
	
//	uint8_t *RGBKeepFlag;         //调光保存标志   1，已保存   0，已恢复
//	uint8_t *RGBKeepState;       //调光状态保存
	
	uint8_t RGBGradualTime;  //每次调光渐变时间
	
	uint8_t RGBSn;               //低四位表示Sn号
	
	uint8_t WayCtrli;            //方式控制的下标
	
	uint8_t DevSendCnt;     //设备发送计数   计数达到重发次数都没有回复，判为离线  占4位
	uint8_t DevOffline;       //设备离线标志 1，设备离线   0，设备在线             占2位
	uint8_t DevOfflineLast;       //设备离线标志 1，设备离线   0，设备在线         占2位
	
	
//	uint8_t RGBRangeSetFlag;   //调光上下限设置标志
//	uint8_t RGBRangeSetCnt;    //调光渐变时间设置计数
	
	uint8_t RGBUpLightLimit;        //调光上限
	uint8_t RGBUpLightLimitLast;    //调光上限
	uint8_t RGBDownLightLimit;      //调光下限
	uint8_t RGBDownLightLimitLast;  //调光下限
	
	uint8_t RGBCtrlFlag;        //调光亮度控制标志
	uint8_t RGBCtrlCnt;         //调光亮度控制计数
	uint8_t RGBLoopValidNum;    //调光有效回路数
	
	uint8_t RGBLightRelease[RGB_BUFF_Size];     //按键松开亮度保存
	
	uint8_t RGBLightnessReadFlag;   //调光亮度读取标志
	uint8_t RGBLightnessReadCnt;   //调光亮度读取标志
	
	uint8_t RGBCycleStep;       //调光状态机
//	uint8_t RGBUpFlag;          //调光上报标志位
	
	uint8_t DevCtrlWayBuf[RGB_BUFF_Size];        //调光控制方式
	uint8_t DevCtrlWayBuf_last[RGB_BUFF_Size];   //调光方式控制上一个状态
	uint8_t DevCtrlWayContect[RGB_BUFF_Size];    //调光方式控制内容 即步长
	
	uint8_t RGBWayCtrlFlag;    //调光方式控制标志
	uint8_t RGBWayCtrlCnt;     //调光方式控制计数	

//	RS485_RGB_IndiCtrl_ptr RS485_RGB_IndiCtrl;        //指示灯赋值
}__attribute__ ((__packed__))RS485_RGB_INFO;						//485温控器的数据与函数



void BLW_RS485_RGB_Data_Init(uint8_t devaddr);
uint8_t BLW_RGBCycleCtrl(uint32_t dev_addr);
uint8_t BLW_Rs485_RGB_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLW_RGB_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start);
uint16_t BLW_RGB_Read_State(uint32_t devaddr,uint16_t loop);
uint8_t RGB_State_Change_Get(uint32_t devaddr);
//void BLW_RGB_Group_Control_State(uint32_t devaddr,uint16_t state);
uint8_t Get_BLV485_RGB_Online_Status(uint32_t devaddr);
void RGB_State_Add(uint32_t devaddr);
void RGB_State_Dec(uint32_t devaddr);

#endif





















