156 lines
4.3 KiB
C
156 lines
4.3 KiB
C
#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
|