/** ****************************************************************************** * @file uart_protocol.h * @brief UART 通讯协议模块公共接口 * * 协议帧格式 (5字节): * AA CMD ITEM VALUE CRC * CRC = CMD ^ ITEM ^ VALUE * * 命令类型: * 0x01 面板→主板: 读查询 * 0x02 面板→主板: 写设置 * 0x81 主板→面板: 上报 * 0xAA 主板→面板: 写成功 ACK (单字节, 注意与帧头冲突待后续修复) ****************************************************************************** */ #ifndef __UART_PROTOCOL_H #define __UART_PROTOCOL_H #ifdef __cplusplus extern "C" { #endif #include /* ========== 通讯协议常量 (V2.0) ========== */ #define ITEM_QUERY_ALL 0x00u #define ITEM_INPUT_SRC 0x01u #define ITEM_BT_CONN 0x02u #define ITEM_BT_AUDIO 0x03u #define ITEM_DAC_MUTE 0x04u #define ITEM_AUTO_RECONN 0x05u #define ITEM_BATTERY 0x09u #define ITEM_CHG_FULL 0x0Au #define ITEM_CHG_ING 0x0Bu #define ITEM_VOL_LR 0x0Cu #define ITEM_VOL_BASS 0x0Du #define ITEM_SOFT_RESET 0x12u #define ITEM_BASS_MUTE 0x13u /* ========== 接收缓冲 (供 HAL_UART_RxCpltCallback 传入缓冲指针) ========== */ extern uint8_t g_rxByte; /* 单字节接收缓冲, 定义于 uart_protocol.c */ /* ========== UART 接收回调 (在 HAL_UART_RxCpltCallback 中调用) ========== */ void UART_RxByteCallback(uint8_t data); /* ========== 帧处理 (在主循环中调用) ========== */ /** * @brief 查询是否有完整协议帧待处理 * @retval 1=有待处理帧, 0=无 */ uint8_t UART_IsFrameReady(void); /** * @brief 清除帧就绪标志 (在主循环中处理前调用) */ void UART_ClearFrameReady(void); /** * @brief 处理收到的完整协议帧 * 须先调用 UART_ClearFrameReady() 再调用此函数 */ void ProcessReceivedFrame(void); /* ========== 发送函数 ========== */ void SendSetInputSrc(uint8_t src); void SendSetVolLR(uint8_t pct); void SendSetVolBass(uint8_t pct); void SendSetDacMute(uint8_t unmute); void SendBTDisconnect(void); void SendSoftReset(void); void SendBassMute(void); void SendQueryAll(void); #ifdef __cplusplus } #endif #endif /* __UART_PROTOCOL_H */