/** ****************************************************************************** * @file cmd_parser.h * @brief ASCII指令解析模块头文件 * @author Application Layer * @version 1.0 ****************************************************************************** * @attention * 本模块实现ASCII文本指令的解析和处理 * 指令格式: $CMD,param1,param2*CS\r\n * 支持异或校验,FF为调试特权后门 * 包含完善的安全防护机制 ****************************************************************************** */ #ifndef __CMD_PARSER_H #define __CMD_PARSER_H #ifdef __cplusplus extern "C" { #endif #include #include #define CMD_MAX_LEN 8 #define PARAM_MAX_LEN 32 #define PARSE_TIMEOUT_MS 1000 typedef enum { CMD_CODE_UNKNOWN = 0, CMD_CODE_RL = 1, CMD_CODE_DI = 2, CMD_CODE_ECHO = 3, CMD_CODE_FWD = 4 } cmd_code_t; typedef struct { char cmd[CMD_MAX_LEN]; char param1[PARAM_MAX_LEN]; char param2[PARAM_MAX_LEN]; uint8_t received_cs; uint8_t calculated_cs; bool valid; bool skip_checksum; } cmd_frame_t; /** * @brief 初始化指令解析模块 * @note 重置解析状态机,清空缓冲区 * @param 无 * @retval 无 */ void CmdParser_Init(void); /** * @brief 指令解析任务处理函数 * @note 在主循环中调用,处理已接收的完整指令帧 * @param 无 * @retval 无 */ void CmdParser_Task(void); /** * @brief 喂入单字节数据到解析器 * @note 通常在UART接收中断中调用 * @param byte: 接收到的字节数据 * @param current_tick: 当前系统tick(用于超时检测) * @retval 无 */ void CmdParser_FeedByte(uint8_t byte, uint32_t current_tick); /** * @brief 检查是否有完整的指令帧 * @note 用于查询解析状态 * @param frame: 输出参数,存储解析结果 * @retval true: 有完整帧, false: 无 */ bool CmdParser_HasCompleteFrame(cmd_frame_t *frame); /** * @brief 确认指令已处理 * @note 处理完指令后调用,重置解析器 * @param 无 * @retval 无 */ void CmdParser_Acknowledge(void); /** * @brief 获取解析错误计数 * @note 用于调试和诊断 * @param 无 * @retval 错误计数 */ uint32_t CmdParser_GetErrorCount(void); /** * @brief 获取接收到的有效指令计数 * @note 用于调试和诊断 * @param 无 * @retval 有效指令计数 */ uint32_t CmdParser_GetValidCount(void); #ifdef __cplusplus } #endif #endif