WiFiCx 消息结构
WiFiCx 命令消息基于以前的 WDI 模型命令。
所有Wi-Fi命令消息都必须以 WDI_MESSAGE_HEADER 结构开头。 命令标头后跟零个或多个 type-length-value (TLV) 结构。
为从主机发送到Wi-Fi设备的消息定义的命令消息 ID 记录在 WiFiCx 任务 OID、 WiFiCx 属性 OID 和 WiFiCx 状态指示中。
TLV
下表中定义了 TLV 的结构。 TLV 中的数据按 little-endian 字节顺序排列。
字段 | 类型 | 说明 |
---|---|---|
类型 | UINT16 | TLV 结构的类型。 必须跳过无法识别的 TLV 类型,而不会触发错误。 |
值缓冲区的长度 | UINT16 | 值缓冲区的大小(以字节为单位)。 |
值 | BYTE[*] | 有效负载缓冲区,可能包含结构、结构列表或其他 TLV。 如果 TLV 中的数据超出预期,则应跳过其他数据而不会触发错误。 |
有两种类型的 TLV 分组:静态大小的 TLV 列表和多 TLV 组。
静态大小的 TLV 列表
静态大小的 TLV 列表包含多个静态大小的成员。 它们类似于标准 C 样式数组。
在此示例中, WDI_TLV_UNICAST_ALGORITHM_LIST 定义为WDI_ALGO_PAIRS列表。
类型:WDI_TLV_UNICAST_ALGORITHM_LIST
长度:N * sizeof (WDI_ALGO_PAIRS)
值:WDI_ALGO_PAIRS[N]
此用法在 TLV 参考主题中使用数组表示法指定。
多 TLV 组
如果事先不知道给定对象的大小,则使用多 TLV 组。 此使用模式指定在给定缓冲区中应有 N 个不同的可变大小的 TLV。 (N) 的条目数事先未知,并且由给定缓冲区中匹配的 TLV 数推断。
在此示例中,父缓冲区是定义 TLV 缓冲区末尾的 WDI_MESSAGE_HEADER。 请注意, WDI_TLV_BSS_ENTRY 可能穿插在父缓冲区中的其他不同 TLV 类型之间。
Offset | 字段 | 类型 |
---|---|---|
0 | WDI_MESSAGE_HEADER | 消息标头 |
sizeof (WDI_MESSAGE_HEADER) | TLV₀ (WDI_TLV_BSS_ENTRY) | WDI_BSS_ENTRY |
TLV₀ + L₀ + sizeof (TLV 标头) | TLV₁ (WDI_TLV_BSS_ENTRY) | WDI_BSS_ENTRY |
TLV₁ + L₁ + sizeof (TLV 标头) | TLVー (WDI_TLV_BSS_ENTRY) | WDI_BSS_ENTRY |
TLVー + Lー + sizeof (TLV 标头) | TLV₃ (OTHER_TLV_TYPE) | 其他一些 TLV 类型 |
TLV₃ + L₃ + sizeof (TLV 标头) | TLV₄ (WDI_TLV_BSS_ENTRY) | WDI_BSS_ENTRY |
对于包含其他 TLV 的 TLV,TLV 参考主题具有 “允许多个 TLV 实例” 列。 如果选中此列,则允许指定 TLV 出现多次。 有关此示例,请参阅 WDI_TLV_CONNECT_PARAMETERS。