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.