#ifndef __TJCUSARTHMI_H_ #define __TJCUSARTHMI_H_ #include "stm32f4xx.h" #include "main.h" // 包含 HAL 库头文件 #include "bsp_Uart.h" #include "bsp_Flash.h" // 添加Flash操作支持 // 定义使用的串口句柄(在main.c中定义的huart2) extern UART_HandleTypeDef huart2; // 定义串口屏使用的串口 #define TJC_UART huart2 // 环形缓冲区长度 #define RINGBUFF_LEN (500) // 指令结束符(TJC串口屏协议) #define TJC_END_BYTES 0xFF // 最大指令长度 #define MAX_COMMAND_LEN 200 // 增加长度以适应设备信息 // 自定义指令定义 #define CUSTOM_CMD_HEADER_0 0xAA #define CUSTOM_CMD_HEADER_1 0x55 // 指令类型 #define CMD_DISPLAY_DATA 0x02 // 显示数据 #define CMD_ALARM 0x03 // 报警 #define CMD_DELETE_DEVICE 0x04 // 删除设备 // 显示数据子命令 #define SUB_CMD_SHOW_DEVICES 0x01 // 显示已添加的设备 #define SUB_CMD_REGION_STATS 0x02 // 主界面区域显示 #define SUB_CMD_REGION1_DEVICES 0x03 // 第一个区域设备 #define SUB_CMD_REGION2_DEVICES 0x04 // 第二个区域设备 #define SUB_CMD_REGION3_DEVICES 0x05 // 第三个区域设备 #define SUB_CMD_REGION4_DEVICES 0x06 // 第四个区域设备 // 报警子命令 #define SUB_CMD_HISTORY_ALARM 0x01 // 历史报警 #define SUB_CMD_REALTIME_ALARM 0x02 // 实时报警 // 添加设备指令识别 #define ADD_DEVICE_CMD_BYTE 0x43 // 'C'的ASCII码 // 分隔符 #define DATA_SEPARATOR 0xAA // 通信状态枚举 typedef enum { COMM_STATUS_NORMAL = 0, // 正常 COMM_STATUS_ABNORMAL // 异常 } CommStatus; // 漏液状态枚举 typedef enum { LEAK_NORMAL = 0, // 正常 LEAK_ABNORMAL // 漏液 } LeakStatus; // 断带状态枚举 typedef enum { BREAK_NORMAL = 0, // 正常 BREAK_ABNORMAL // 断带 } BreakStatus; // 通道状态结构体 typedef struct { LeakStatus leak_status; // 漏液状态 BreakStatus break_status; // 断带状态 int leak_meter; // 漏液米数(如果漏液状态为漏液,则显示具体米数,否则显示0) } ChannelStatus; // 报警类型枚举 typedef enum { ALARM_LEAK = 0, // 漏液 ALARM_BREAK, // 断带 ALARM_COMM // 通信异常 } AlarmType; // 设备信息结构体 typedef struct { uint8_t port; // 端口号 char region[20]; // 区域名(英文) uint8_t device_id; // 设备ID (1-254) char device_name[20]; // 设备名(英文) LeakStatus leak_status; // 漏液状态 BreakStatus break_status; // 断带状态 CommStatus comm_status; // 通信状态 ChannelStatus channels[4]; // 四个通道的状态 } DeviceInfo; // 报警信息结构体 typedef struct { char region[20]; // 设备区域 uint8_t device_id; // 设备ID char device_name[20]; // 设备名称 AlarmType alarm_type; // 报警类型 char start_time[20]; // 开始时间 char end_time[20]; // 结束时间 } AlarmInfo; // 区域统计结构体 typedef struct { char region_name[20]; // 区域名 uint8_t total_devices; // 总设备数量 uint8_t leak_devices; // 漏液设备数量 uint8_t break_devices; // 断带设备数量 uint8_t comm_devices; // 通信异常设备数量 } RegionStats; // 外部可调用函数的声明 void TJC_Init(bsp_Uart_t *pUart); void TJC_SendData(uint8_t *data, uint16_t len); void TJCPrintf(const char *cmd, ...); // 环形缓冲区相关函数 uint16_t TJC_CleanBufferFromInvalidPatterns(void); void initRingBuffer(void); void writeRingBuff(uint8_t data); void deleteRingBuff(uint16_t size); uint16_t getRingBuffLength(void); uint8_t read1BFromRingBuff(uint16_t position); uint8_t isRingBuffOverflow(void); // 指令处理相关函数 void TJC_ProcessCommand(uint8_t *cmd, uint16_t len); uint8_t TJC_CheckEndBytes(uint8_t *data, uint16_t len, uint16_t *end_pos); void TJC_SendResponse(const char *response); void TJC_ProcessSerialData(u8 *data, u16 len, void *p_arg); void TJC_DeleteDevices(uint8_t *delete_flags, uint8_t flag_count); void TJC_ProcessDeleteCommand(uint8_t *cmd, uint16_t len); /*测试发送历史报警数据*/ void TJC_SendInitCommands(void); // 新增函数声明 uint16_t CalculateCRC16(uint8_t *data, uint16_t length); void TJC_ProcessCustomCommand(uint8_t *cmd, uint16_t len); void TJC_SendAlarmHistory(void); void TJC_SendRealtimeAlarms(void); void TJC_SendDeviceList(void); uint8_t TJC_AddDeviceToFlash(uint8_t *data, uint16_t len); void TJC_SendRegionStats(void); // 新增:发送区域统计 void TJC_SendRegionDeviceDetails(uint8_t region_index); // 宏定义简化 #define usize getRingBuffLength() #define code_c() initRingBuffer() #define udelete(x) deleteRingBuff(x) #define u(x) read1BFromRingBuff(x) #endif