Структура сообщений WiFiCx
Сообщения команд WiFiCx основаны на предыдущих командах модели WDI.
Все сообщения команд Wi-Fi должны начинаться со структуры WDI_MESSAGE_HEADER. После заголовка команды следует от нуля и более структур типа-длины-значения (TLV).
Идентификаторы сообщений команды, определенные для сообщений, отправляемых с узла на устройство Wi-Fi, задокументированы в идентификаторы задач WiFiCx, свойства WiFiCxи индикаторы состояния WiFiCx.
TLV
Структура TLV определяется в следующей таблице. Данные в TLVs хранятся в малоуровневом порядке байтов.
Поле | Тип | Описание |
---|---|---|
Тип | 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 в заданном буфере.
В этом примере родительский буфер является WDI_MESSAGE_HEADER, который определяет конец буфера TLV. Обратите внимание, что WDI_TLV_BSS_ENTRY могут перемежаться между другими различными типами TLV в родительском буфере.
Смещение | Поле | Тип |
---|---|---|
0 | WDI_MESSAGE_HEADER | Заголовок сообщения |
sizeof(WDI_MESSAGE_HEADER) | TLV₀ (WDI_TLV_BSS_ENTRY) | WDI_BSS_ENTRY |
TLV₀ + L₀ + размер (заголовка TLV) | TLV₁ (WDI_TLV_BSS_ENTRY) | WDI_BSS_ENTRY |
TLV₁ + L₁ + размер(заголовка TLV) | TLV₂ (WDI_TLV_BSS_ENTRY) | WDI_BSS_ENTRY |
TLV₂ + L₂ + размер(TLV заголовка) | TLV₃ (OTHER_TLV_TYPE) | Другой тип TLV |
TLV₃ + L₃ + размер(заголовка TLV) | TLV₄ (WDI_TLV_BSS_ENTRY) | WDI_BSS_ENTRY |
Для TLV, содержащих другие TLV, в справочных разделах TLV есть столбец , допускающий несколько экземпляров TLV. Если в этом столбце установлена галочка, указанный TLV может отображаться несколько раз. Пример этого см. в WDI_TLV_CONNECT_PARAMETERS.