- 该设备使用 HID 协议类,采用 64 字节块(在 HID 术语中称为“报告”)。
- 每个 64 字节块的第一个字节是长度字节,表示接下来的 63 个字节中实际使用了多少个字节。
- 如果长度字节小于 63,则应丢弃剩余字节。
- 如果长度字节为 63 或更大,则使用后面全部 63 个字节。
数据链路协议
命令序列示例(GetKioskId)
以下交互展示了GetKioskID 命令的完整 ACK/NAK 流程:
数据帧
示例:<A[Frame-ID]|[Length][Data][LRC]>
LRC 和长度计算示例
ACK 帧
发送以确认已成功接收并验证数据帧。 示例:<+0>、<+1>
结构: <+[Frame-ID]>
[Frame-ID] 与正在确认的数据帧匹配。
NAK 帧
当接收方无法解析数据帧时发送。 示例:<-0|1>、<-1|7>
结构: <-[Frame-ID]|[Err]>
发送方不会根据错误代码改变其行为;错误代码仅用于调试。
协议规则
数据链路层遵循以下时序规则:- 预计在 30 毫秒内收到 ACK/NAK 确认。
- 如果未收到 ACK,或者收到 NAK,发送方可以使用相同的帧 ID 重新发送帧。
- 在等待 ACK/NAK 期间,发送方不得发送另一帧。
- 接收帧时:如果开头字节不是
<A0或<A1,不要发送 NAK,而是继续读取,直到收到有效的帧起始符。