CodexPadFrameDecoder Arduino 库 1.0.0

载入中...
搜索中...
未找到
Public 类型 | Public 成员函数 | 所有成员列表
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.h 第 32 行定义.

## 成员类型定义说明

## ◆ FrameCallback

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

帧解析回调函数类型。

参数

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

在文件 robust_frame.h 第 46 行定义.

## 构造及析构函数说明

## ◆ 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.cpp 第 23 行定义.

## ◆ ~Parser()

robust_frame::Parser::~Parser | ( |  | ) |

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

在文件 robust_frame.cpp 第 27 行定义.

## 成员函数说明

## ◆ 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.cpp 第 31 行定义.

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

- src/robust_frame.h
- src/robust_frame.cpp