Estrutura de mensagens WiFiCx

As mensagens de comando WiFiCx são baseadas nos comandos anteriores do modelo WDI.

Todas as mensagens de comando Wi-Fi devem começar com uma estrutura WDI_MESSAGE_HEADER . O cabeçalho de comando é seguido por zero ou mais estruturas TLV (type-length-value).

As IDs de mensagem de comando definidas para mensagens enviadas do host para o dispositivo Wi-Fi são documentadas em OIDs de Tarefa WiFiCx, OIDs de Propriedade WiFiCx e indicações de status WiFiCx.

TLVs

A estrutura de TLVs é definida na tabela a seguir. Os dados em TLVs estão em ordem de bytes little-endian.

Campo Tipo Descrição
Type UINT16 O tipo da estrutura TLV. Tipos de TLV não reconhecidos devem ser ignorados sem disparar erros.
Comprimento do buffer de valor UINT16 O tamanho do buffer Valor em bytes.
Valor BYTE[*] O buffer de carga, que pode conter uma estrutura, uma lista de estruturas ou outras TLVs. Se houver mais dados do que o esperado em um TLV, os dados adicionais deverão ser ignorados sem disparar erros.

Há dois tipos de agrupamentos TLV: listas TLV dimensionadas estaticamente e grupos multi-TLV.

Listas TLV dimensionadas estaticamente

As listas TLV de tamanho estatica contêm vários membros de tamanho estatica. Eles são análogos a matrizes de estilo C padrão.

Neste exemplo, WDI_TLV_UNICAST_ALGORITHM_LIST é definido como uma lista de WDI_ALGO_PAIRS.

Tipo: WDI_TLV_UNICAST_ALGORITHM_LIST

Comprimento: N * sizeof(WDI_ALGO_PAIRS)

Valor: WDI_ALGO_PAIRS[N]

Esse uso é especificado nos tópicos de referência TLV com notação de matriz.

Grupos multi-TLV

Quando o tamanho de um determinado objeto não é conhecido antecipadamente, grupos de vários TLV são usados. Esse padrão de uso especifica que N TLVs de tamanho variavelmente diferentes são esperadas em um determinado buffer. O número de entradas (N) não é conhecido antecipadamente e é inferido pelo número de TLVs correspondentes no buffer fornecido.

Neste exemplo, o buffer pai é um WDI_MESSAGE_HEADER, que define o final do buffer TLV. Observe que WDI_TLV_BSS_ENTRY pode ser intercalado entre outros tipos diferentes de TLV no buffer pai.

Deslocamento Campo Type
0 WDI_MESSAGE_HEADER Cabeçalho da mensagem
sizeof(WDI_MESSAGE_HEADER) TLV₀ (WDI_TLV_BSS_ENTRY) WDI_BSS_ENTRY
TLV₀ + L₀ + sizeof(Cabeçalho TLV) TLV₁ (WDI_TLV_BSS_ENTRY) WDI_BSS_ENTRY
TLV₁ + L₁ + sizeof(Cabeçalho TLV) TLV₂ (WDI_TLV_BSS_ENTRY) WDI_BSS_ENTRY
TLV₂ + L₂ + sizeof(Cabeçalho TLV) TLV₃ (OTHER_TLV_TYPE) Algum outro tipo de TLV
TLV₃ + L₃ + sizeof(Cabeçalho TLV) TLV₄ (WDI_TLV_BSS_ENTRY) WDI_BSS_ENTRY

Para TLVs que contêm outras TLVs, os tópicos de referência TLV têm uma coluna de várias instâncias TLV permitidas . Se essa coluna for verificada, o TLV especificado poderá aparecer várias vezes. Para obter um exemplo disso, consulte WDI_TLV_CONNECT_PARAMETERS.