Files
Leakage-Control/calib_board/usr/bsp/tjc_usart_hmi.h
2026-01-22 19:24:33 +08:00

156 lines
4.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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