WiFiCx 命令消息基于以前的 WDI 模型命令。
All Wi-Fi command messages must start with a WDI_MESSAGE_HEADER structure. 命令标头后跟零个或多个类型长度值 (TLV) 结构。
为从主机发送到 Wi-Fi 设备的消息定义的命令消息 ID 记录在 WiFiCx 任务 OID、 WiFiCx 属性 OID 和 WiFiCx 状态指示中。
TLVs
下表定义了 TLV 的结构。 TLV 中的数据按小字节顺序排列。
| Field | 类型 | Description |
|---|---|---|
| 类型 | UINT16 | TLV 结构的类型。 必须跳过无法识别的 TLV 类型,而不会触发错误。 |
| 值缓冲区的长度 | UINT16 | 值缓冲区的大小(以字节为单位)。 |
| Value | BYTE[*] | 有效负载缓冲区,可能包含结构、结构列表或其他 TLV。 如果 TLV 中的数据超出预期,则应跳过其他数据,而不会触发错误。 |
有两种类型的 TLV 分组:静态大小的 TLV 列表和多 TLV 组。
静态大小的 TLV 列表
静态大小的 TLV 列表包含多个静态大小的成员。 它们类似于标准 C 样式数组。
In this example, WDI_TLV_UNICAST_ALGORITHM_LIST is defined as a list of WDI_ALGO_PAIRS.
Type: WDI_TLV_UNICAST_ALGORITHM_LIST
Length: N * sizeof(WDI_ALGO_PAIRS)
Value: WDI_ALGO_PAIRS[N]
此用法在具有数组表示法的 TLV 引用主题中指定。
Multi-TLV groups
当给定对象的大小提前未知时,将使用多 TLV 组。 此使用模式指定给定缓冲区内需要 N 个不同的可变大小的TLV。 条目数(N)提前未知,并按给定缓冲区中匹配的TLV 数推断。
In this example, the parent buffer is a WDI_MESSAGE_HEADER, which defines the end of the TLV buffer. Note that WDI_TLV_BSS_ENTRY may be interspersed between other different TLV types in the parent buffer.
| Offset | Field | 类型 |
|---|---|---|
| 0 | WDI_MESSAGE_HEADER | 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 |
| T + LLV + sizeof(TLV 标头) | TLV₃ (OTHER_TLV_TYPE) | 其他一些 TLV 类型 |
| TLV₃ + L₃ + sizeof(TLV 标头) | TLV₄ (WDI_TLV_BSS_ENTRY) | WDI_BSS_ENTRY |
对于包含其他 TLV 的 TLV,TLV 参考主题具有允许 的多个 TLV 实例 列。 如果选中此列,则允许指定的 TLV 多次显示。 For an example of this, see WDI_TLV_CONNECT_PARAMETERS.