#ifndef _LCDCOMM_H_DEF #define _LCDCOMM_H_DEF /*------------------------------- 头文件 -------------------------------------- */ /*------------------------------- 宏定义 -------------------------------------- */ enum { MAIN, // 主板 FACE, // 面板 GPRS, // GPRS PDA, // PDA PDA_MAINTAIN, // PDA维护 HMI_COMM_TYPE, }; enum { TEST_LED, // LED测试 TEST_LCD, // LCD测试 TEST_NUM, }; enum { RMT_PAIR, // 遥控器配对 RMT_CLRPAIR, // 遥控器清除配对 RMT_SUM, }; // H:横向,V:竖向,P:正序,N:负序 enum { LCD_HP, // 横向正序 LCD_HN, // 横向负序 LCD_VP, // 竖向正序 LCD_VN, // 竖向负序 LCD_DISP_NUM, }; #define FRAME_NUMBER 5 // 接收、发送帧缓冲区列表总数:5条 #define UART_FRAME_LEN 256 // 单帧总长度 #define HMI_RECV_EN() {GPIO_R485_OE1_OFF();} #define HMI_SEND_EN() {GPIO_R485_OE1_ON();} #define HMI_EN_INIT() {GPIO_R485_OE1_INIT();} #define SCREEN_LINE_BYTES 20 //屏幕每行字节数 #define SCREEN_ROWS 5 //屏幕的共多少行 #define SCREEN_BYTES (SCREEN_LINE_BYTES*SCREEN_ROWS) /*按键定义*/ #define HA_KEY_ENTER 1 #define HA_KEY_ESC 2 #define HA_KEY_UP 3 #define HA_KEY_DOWN 4 #define HA_KEY_LEFT 5 #define HA_KEY_RIGHT 6 #define HA_KEY_ADD 7 #define HA_KEY_SUB 8 #define HA_KEY_RST 9 //区号 #define NO_KEY 0xff #define KE_KEY_LONG_BIT (0x80) #define KE_KEY_MASK 0x7f /*hmi发来的命令*/ #define HMI_CMD_POLL 0x00 /*查询命令*/ #define HMI_CMD_INIT_LCD 0x01/*初始化lcd*/ #define HMI_CMD_CLEAR_SCREEN 0x02/*清全屏*/ #define HMI_CMD_WRITE_SINGLE 0x03/*写数据*/ #define HMI_CMD_WRITE_DATAS 0x04/*写连续数据*/ #define HMI_CMD_BLIGHT 0x08/*背光控制*/ #define HMI_CMD_LED 0x09/*面板灯状态*/ #define HMI_CMD_RATE 0x0A/*对比度设置*/ #define HMI_CMD_WIRELESS 0x0B/*遥控器*/ #define HMI_CMD_LEDRUN 0x0C/*跑马灯*/ #define HMI_CMD_LCDRUN 0x0D/*LCD测试*/ #define HMI_CMD_GPRS 0x0E /*GPRS*/ #define HMI_CMD_DOWN 0x0F/*数据下载*/ #define HMI_CMD_RESPOND 0x20// 响应面板帧 #define DRV_CMD_TEMP 0x18 /*lcd驱动板上电报文*/ #define DRV_CMD_POWERON 0x19 /*lcd驱动板上电报文*/ #define DRV_CMD_KEY 0x1A /*lcd驱动板上送按键状态*/ #define DRV_CMD_YX 0x1B /*遥信*/ #define DRV_CMD_SET 0x1C /*定值*/ #define DRV_CMD_YKQ 0x1D /*遥控器*/ #define DRV_CMD_GPRS 0x1E/*GPRS*/ #define DRV_CMD_DOWN 0x1F /*下载报文应答*/ #define UART_FRAME_TYPE_Wireless 0x24 //遥控器运行模式 #define UART_FRAME_TYPE_RM_TEST 0x25//遥控器测试 #define LIGHT_ON 1 #define LIGHT_OFF 0 #define LCD_INTRUST_ADD 1 #define LCD_INTRUST_SUB 0 // #define LCD_KEY_MASK 0x07 #define LCD_KEY_MASK 0x7f // modify by zhy 20201103 增加按键缓存个数 #define LCD_KEY_MAX (LCD_KEY_MASK+1) /*发给驱动板的指令缓冲区*/ // #define LCD_MAX_INST_MASK 0x07 //发给驱动板的指令最大缓冲个数 #define LCD_MAX_INST_MASK 0x7f //发给驱动板的指令最大缓冲个数 modify by zhy 20201103 增加缓存命令个数 #define LCD_MAX_INST_BUFS (LCD_MAX_INST_MASK+1) //发给驱动板的指令最大缓冲个数 /*发给驱动板的数据定义*/ #define LCD_MAX_CONTINUE_MASK 0x7f #define LCD_MAX_CONTINUE_BUFS (LCD_MAX_CONTINUE_MASK+1) #define UART_FRAME_MAXCNT 8 //最大帧数 /*------------------------------ 类型结构 ------------------------------------- */ typedef struct LCD_KEY { BYTE tail; BYTE head; BYTE keybuf[LCD_KEY_MAX]; }LCD_KEY_DEF; typedef struct INST //单个数据结构 { BYTE cmd; BYTE len; BYTE para[UART_FRAME_LEN]; }INST_DEF; typedef struct LCD_INST_BUF { BYTE tail; BYTE head; INST_DEF tInst[LCD_MAX_INST_BUFS]; }LCD_INST_BUF_DEF; typedef struct CONTINUE_DATA //连续数据结构 { BYTE x; BYTE y; BYTE attrib; BYTE dat[24]; }CONTINUE_DATA_DEF; typedef struct CONTINUE_DATA_BUF //连续数据结构缓冲区 { BYTE tail; BYTE head; BYTE index; CONTINUE_DATA_DEF tBuf[LCD_MAX_CONTINUE_BUFS]; }CONTINUE_DATA_BUF_DEF; /*初始化状态定义*/ typedef struct INIT_DATA { bool flag; BYTE para[10]; }INIT_DEF; /*背光灯状态缓冲区*/ typedef struct LIGHT { bool flag; BYTE light; }LIGHT_DEF; typedef struct LCDINTRUST { bool flag; BYTE byAddOrSub; }LCDINTRUST_DEF; typedef struct TELE { bool flag; BYTE cmd; }TELE_DEF; typedef struct LCD_COMM { bool bRecv; BYTE wait; BYTE ReSend; bool bClrScreen; bool bClrflag; bool b_init_OK; bool bVirLcd; bool bErrComm; bool bTestLed; bool bTestLcd; bool bTeleMatch; bool bTeleClrMatch; bool bLcdUpdate; bool bLedUpdate; BYTE ExtraCommNo; //外部通信端口 DWORD dwTemprate; DWORD dWaitT; INIT_DEF tInit; LIGHT_DEF tLight; LCDINTRUST_DEF tLcdIntrust; LCD_INST_BUF_DEF tInstBuf; CONTINUE_DATA_BUF_DEF tContinue; LCD_KEY_DEF tKey; TELE_DEF tTele; bool bGps; BYTE arrGpsData[64]; bool bCall; }LCD_COMM_DEF; struct hmi { u8 tail[2]; //接收、发送缓冲区存入帧位置 u8 head[2]; //接收、发送缓冲区取出帧位置 u8 num[2]; //接收、发送缓冲区有效帧数量 u8 sendlen[FRAME_NUMBER]; //发送帧长度 u8 recvbuf[FRAME_NUMBER][UART_FRAME_LEN]; u8 sendbuf[FRAME_NUMBER][UART_FRAME_LEN]; //考虑通道强占的情况 }; typedef struct UART_COMM { u8 cTypeCounter; //接受帧类型 u8 cRecvLenth; //通道A 接收到数据计数器 u8 cRecvCnt; //有效数据记数 u8 cSendLenth; u8 cSendCnt; u8 sum; u8 recvsum; u8 bSend; u32 dTWait; u8 bData; u8 s_head; u8 s_tail; u8 s_buf[UART_FRAME_MAXCNT][UART_FRAME_LEN]; u8 r_head; u8 r_tail; u8 r_buf[UART_FRAME_MAXCNT][UART_FRAME_LEN]; }UART_COMM; /*------------------------------ 变量声明 ------------------------------------- */ extern DWORD dHMIDiStatus; extern LCD_COMM_DEF g_tLcdComm; extern UART_COMM g_tUartHMI; extern char m_TzCount[12]; extern char m_HzCount[12]; /*------------------------------ 函数声明 ------------------------------------- */ void Add_Continue_Data(BYTE x,BYTE y,BYTE *pdat,BYTE len,BYTE mode); void Add_Clear_Screen(void); void add_led_test(u8 test_no); BYTE Get_Key(void); void InitLcdComm(void); void HMI_Comm_App(void); void HMI_Board_Recv(int len,BYTE *para); void add_rmt_pair(u8 pair); int hzk_exit(void); #endif