CodexPadFrameDecoder Arduino 库 1.0.3
载入中...
搜索中...
未找到
robust_frame::Parser类 参考

robust_frame 协议帧解析器。 更多...

#include <robust_frame.h>

Public 类型

using FrameCallback = void (*)(const uint8_t *data, void *user_data)
 帧解析回调函数类型。
 

Public 成员函数

 Parser (const size_t max_payload_size, FrameCallback callback, void *user_data)
 构造函数,根据最大载荷长度动态分配内部缓冲区。
 
 ~Parser ()
 析构函数,释放内部动态分配的缓冲区。
 
void Feed (const uint8_t byte)
 处理单个字节的核心状态机。
 

详细描述

robust_frame 协议帧解析器。

负责帧同步、转义还原和 CRC 校验,通过回调输出完整的有效载荷。 不依赖任何特定通信方式,仅需通过 Feed() 逐字节喂入数据。 最大载荷长度由构造函数参数指定,内部缓冲区按需动态分配。

在文件 robust_frame.h32 行定义.

成员类型定义说明

◆ FrameCallback

using robust_frame::Parser::FrameCallback = void (*)(const uint8_t *data, void *user_data)

帧解析回调函数类型。

参数
data有效载荷数据指针(不含帧头帧尾和 CRC)。
user_data用户自定义上下文指针,由构造函数传入,在回调中原样返回。

在文件 robust_frame.h46 行定义.

构造及析构函数说明

◆ Parser()

robust_frame::Parser::Parser ( const size_t max_payload_size,
FrameCallback callback,
void * user_data )

构造函数,根据最大载荷长度动态分配内部缓冲区。

参数
[in]max_payload_size最大有效载荷长度(字节数),不含 CRC。 内部实际分配的缓冲区大小为 max_payload_size + 1, 额外 1 字节用于存储 CRC 校验值。
[in]callback帧解析成功时的回调函数(若为 nullptr 则不回调)。
[in]user_data回调时传入的用户自定义上下文指针(通常传 this 指针)。

在文件 robust_frame.cpp23 行定义.

◆ ~Parser()

robust_frame::Parser::~Parser ( )

析构函数,释放内部动态分配的缓冲区。

在文件 robust_frame.cpp27 行定义.

成员函数说明

◆ Feed()

void robust_frame::Parser::Feed ( const uint8_t byte)

处理单个字节的核心状态机。

参数
[in]byte输入的字节。

状态转换图:

  • kSyncHeader:等待帧头 0xAA,收到后进入 kCollectPayload。
  • kCollectPayload:
    • 收到 0x55(帧尾)→ 校验 CRC,若通过则回调有效载荷,然后 Reset。
    • 收到 0xDB(转义字符)→ 进入 kUnescape。
    • 收到 0xAA(意外帧头)或缓冲区满 → Reset 并重新从该字节开始同步。
    • 其他 → 存入内部缓冲区。
  • kUnescape:将字节与 0x20 异或还原,检查结果是否为合法特殊字符(0xAA/0x55/0xDB), 若不是则丢弃当前帧并重新同步;否则存储还原后的字节并回到 kCollectPayload。
注解
缓冲区满或遇到意外的帧头会触发 Reset 并从当前字节重新尝试同步。

在文件 robust_frame.cpp31 行定义.


该类的文档由以下文件生成: