#ifndef __APP_RS485IR_H__
#define __APP_RS485IR_H__

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

#define DEV_IRTYPE			0x0F




#define  IR_NOT_EXIST       0x00        //红外不存在
#define  IR_Mute            0x01        //静音
#define	 IR_Power           0x02        //电源
#define	 IR_VoiceInc 	    0x03        //音量加
#define	 IR_VoiceDec		0x04        //音量减
#define	 IR_ChannelInc      0x05        //频道加
#define	 IR_ChannelDec		0x06        //频道减
#define	 IR_Up				0x07        //向上
#define	 IR_Down			0x08        //向下
#define	 IR_Left			0x09        //向左
#define	 IR_Right           0x0A        //向右
#define	 IR_Ok				0x0B        //确定
#define	 IR_Home			0x0C        //主页
#define	 IR_Menu			0x0D        //菜单
#define	 IR_Source			0x0E        //信源
#define	 IR_Replay			0x0F        //回看





typedef struct RS485_IR_INFO* 		RS485_IR_INFOP;         //定义红外转发结构体指针


typedef void (*RS485_IR_Cycle_ptr)(uint8_t DevPort, uint8_t DevAddr);						    //定义传递参数为端口号和设备地址，返回为空的函数类型指针，用于485设备轮询控制
//typedef void (*RS485_Card_IndiDataGet_ptr)(u16 Addr, u8 OnOff);			                    //定义传递参数为地址和状态，返回为空的函数类型指针，用于485红外指示灯赋值
//typedef void (*RS485_IR_Read_ptr)(u8 *, u8);								                    //定义传递参数为数组信息，返回值为空的函数指针类型，用于485红外接收
//typedef void (*RS485_IR_TV_Ctrl_ptr)(u8 addr);          			                            //定义传递参数为地址信息，返回值为空的函数指针类型，用于红外电视控制
typedef void (*RS485_IR_IndiCtrl_ptr)(RS485_IR_INFOP, uint16_t Addr, uint16_t OnOff);			//定义传递参数为地址和状态，返回为空的函数类型指针，用于485开关指示灯赋值
typedef uint16_t (*RS485_IR_LoopStateRead_ptr)(RS485_IR_INFOP, uint16_t);                       //指定回路状态判断


typedef struct
{
//	uint8_t *DevReadBuf; 			    //按键数组，每个字节存按键的状态
//	uint8_t  DevReadLen;    	        //按键状态字节数
//	uint8_t *DevSendBuf; 			    //发送数组
//	uint8_t *DevSendBuf_last;           //发送数组
//	uint8_t  DevSendLen;    	        //发送字节数

	BLV_COMM_RECORD_G comm_record;	    //通讯记录
	
	uint8_t DevSendCnt;                 //设备发送计数   计数达到重发次数都没有回复，判为离线  占4位
	uint8_t DevOffline;                 //设备离线标志 1，设备离线   0，设备在线             占2位
	uint8_t DevOfflineLast;             //设备离线标志 1，设备离线   0，设备在线         占2位
	
	uint8_t   IrTvState;                //电视状态   开机或关机
	uint8_t   IrTvStateLast;            //电视状态   开机或关机
	uint8_t   IrTvStateRs485;           //电视状态   开机或关机
	uint8_t   IrTvStateMap;             //电视状态   开机或关机
	
	uint8_t		IrCtrlTvData;           //电视控制数据
	uint8_t   IrCtrlTvFlag;             //电视控制标志位
	uint8_t   IrCtrlTvCnt;              //电视控制计数
	
	uint8_t   AirInfo[4];               //空调信息    开关机   模式   设置温度   风速
	uint8_t   AirInfoLast[4]; 
	uint8_t   IrCtrlAirFlag;            //空调控制标志位
	uint8_t   IrCtrlAirCnt;             //空调控制计数
	
	uint8_t   AirOpenFlag;              //空调开启标志 针对一次开机开不起来，需要多发一次开机的情况
	
	uint32_t inquire_tick;		        //询问时间戳
/*无线全局变量开始*/	
//	CFG_Dev_AddP   RFCfgDevAddRs485;   //所属无线485
/*无线全局变量结束*/	
	
/*南京尚景添-IRACC中央空调协议转换模块变量开始*/    
    
    
/*南京尚景添-IRACC中央空调协议转换模块变量结束*/ 
    
	RS485_IR_LoopStateRead_ptr  RS485_IR_LoopStateRead;     //读取
	RS485_IR_IndiCtrl_ptr RS485_IR_IndiCtrl;                //指示灯赋值
	
//	RS485_IR_TV_Ctrl_ptr RS485_IR_TV_Ctrl;                  //红外电视控制          
//	RS485_IR_Cycle_ptr RS485_IR_Cycle_Dis;    		        //结合发送数组进行指示灯控制的函数
//	RS485_IR_Read_ptr Rs485_IR_ReadDis;				        //485红外接收处理函数
}__attribute__ ((__packed__))RS485_IR_INFO;				    //485红外的数据与函数



//uint8_t Rs485_IR_Data_Get(CFG_Dev_AddP CfgDevAdd);



void RS485_IrSend_Data_Init(uint8_t devaddr);
void RS485_IrSend_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);

//void Ir_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr,uint16_t DevOutputLoop,uint16_t state);
//void Ir_Control_State2(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr,uint16_t DevOutputLoop,uint16_t state);


#endif //__APP_RS485IR_H__








