Compartilhar via


Semântica XML do gerador/analisador do WDI TLV

TLV (Type-Length-Value) é um design de protocolo em que cada bit de dados está contido em um fluxo de bytes que tem um cabeçalho Type e Length padrão.

O arquivo XML do gerador/analisador TLV é uma lista de mensagens, contêineres (TLVs) e grupos de propriedades (structs). Este tópico aborda a sintaxe XML.

<message />

Descreve uma única mensagem WDI de nível superior. Há apenas funções de analisador/gerador para essas entradas de mensagem.

Atributos

  • commandId - Constante simbólica que deve ser definida em dot11wdi.h.
  • type - Nome do tipo a ser exposto ao código (você usa esse tipo ao chamar em funções de analisador/gerador).
  • description - Descrição do comando.
  • direction – Indica se essa mensagem descreve o fluxo TLV conforme ele vai do WDI para o miniporto IHV como parte de um M1 (chamado "ToIhv"), descreve o fluxo TLV conforme ele vai do miniporto IHV para o WDI como um M0, M3 ou M4 (chamado "FromIhv") ou vai em ambas as direções (chamado "Ambos"). Consulte Direção da mensagem na visão geral da interface do analisador TLV do WDI.

Conteúdo

Lista de referências de contêiner (<containerRef />). Essas são as diferentes TLVs que compõem a mensagem. São referências a tipos definidos na <containers /> seção .

Exemplo

<message commandId="WDI_SET_P2P_LISTEN_STATE"
         type="WDI_SET_P2P_LISTEN_STATE_PARAMETERS"
         description="Parameters to set listen state."
         direction="ToIhv">
  <containerRef id="WDI_TLV_P2P_CHANNEL_NUMBER"
                name="ListenChannel"
                optional="true"
                type="WFDChannelContainer" />
  <containerRef id="WDI_TLV_P2P_LISTEN_STATE"
                name="ListenState"
                type="P2PListenStateContainer" />
</message>

<containerRef />

Referência a um <container /> definido na <containers /> seção .

<containerRef /> Atributos

  • id – ID TLV que deve ser definida em wditypes.h.
  • name - O nome da variável na estrutura pai.
  • optional – Especifica se é ou não um campo opcional. Falso por padrão. O código gerado impõe "opcional".
  • multiContainer – Especifica se o código gerado deve ou não esperar várias TLVs do mesmo tipo. Falso por padrão. Se false, o código gerado impõe que apenas um esteja presente.
  • type – Referência ao atributo "name" de um elemento específico na <containers /> seção .
  • versionAdded - Parte do controle de versão. Indica que esse contêiner TLV não deve aparecer em fluxos de bytes de/para pares com uma versão menor do que a indicada neste atributo.
  • versionRemoved - Parte do controle de versão. Indica que esse contêiner TLV não deve aparecer em fluxos de bytes de/para pares com uma versão maior ou igual à indicada neste atributo.

<containerRef /> Conteúdo

Nenhum.

<containerRef /> Exemplo

<containerRef id="WDI_TLV_P2P_CHANNEL_NUMBER"
              name="ListenChannel"
              optional="true"
              type="WFDChannelContainer"/>

<containers />

Descreve todos os contêineres/TLVs usados em mensagens WDI. Os contêineres podem ser considerados buckets TLV. Há dois tipos: <container /> e <aggregateContainer />.

<container />

Contêiner TLV para uma única referência de estrutura ou tipo nomeado. Ele é dimensionado estaticamente, mas pode ser uma matriz de estilo C, desde que seja dimensionada estaticamente.

<container /> Atributos

  • name – ID referenciada por mensagens WDI/outros contêineres.
  • description – Descrição amigável do que serve o contêiner.
  • type – Nome do tipo a ser exposto ao código.
  • isCollection – Especifica se o código gerado deve ou não esperar muitos do mesmo elemento de tamanho dentro do mesmo TLV (matriz de estilo C). O padrão é false (espere apenas um elemento do tipo fornecido).
  • isZeroValid - Válido somente quando isCollection for true. Determina se uma matriz de elementos zero é permitida. Isso é útil quando o fluxo TLV precisa distinguir entre um TLV opcional que não está presente versus um que está presente, mas tem comprimento zero (como SSIDs). Como essa distinção é rara, o padrão é false.

<container /> Contents

Uma opção entre <groupRef /> ou <namedType />.

<container /> Exemplo

<container name="P2PListenStateContainer"
           description="Container for P2P Listen State setting."
           type="WDI_P2P_LISTEN_STATE_CONTAINER">
  <namedType name="ListenState"
             type="WDI_P2P_LISTEN_STATE"
             description="P2P Listen State."/>
</container>

<groupRef />

Referência a um grupo de propriedades (estrutura) definido na <propertyGroups /> seção .

<groupRef /> Atributos

  • name - Nome da estrutura na estrutura pai.
  • ref – Referência a uma estrutura nomeada em uma <propertyGroups /> seção.
  • description – Descritor amigável para o que a estrutura é usada.

<groupRef /> Conteúdo

Nenhum.

<groupRef /> Exemplos

<container name="WFDChannelContainer"
           description="Container for a Wi-Fi Direct channel."
           type="WDI_P2P_CHANNEL_CONTAINER">
  <groupRef name="Channel"
            ref="WFDChannelStruct"
            description="Wi-Fi Direct Channel." />
</container>

<namedType />

Referência a um tipo bruto exposto por wditypes.hpp ou dot11wdi.h. Usa o serializador padrão (memcpy), portanto, use por sua conta e risco devido a problemas de preenchimento.

<namedType /> Atributos

  • name - Nome da estrutura na estrutura pai.
  • type - Digite o nome a ser usado no código real.
  • description – Descrição amigável para o que a estrutura é usada.

<namedType /> Conteúdo

Nenhum.

<namedType /> Exemplo

<container name="P2PListenStateContainer"
           description="Container for P2P Listen State setting."
           type="WDI_P2P_LISTEN_STATE_CONTAINER">
  <namedType name="ListenState"
             type="WDI_P2P_LISTEN_STATE"
             description="P2P Listen State."/>
</container>

<aggregateContainer />

Contêiner TLV para muitos contêineres diferentes. Isso é usado para lidar com TLVs aninhadas.

<aggregateContainer /> Atributos

  • name – ID referenciada por mensagens WDI/outros contêineres.
  • description – Descrição amigável de para que serve o contêiner.
  • type - Nome do tipo a ser exposto ao código.

<aggregateContainer /> Conteúdo

Lista de <containerRef />.

<aggregateContainer /> Exemplo

<aggregateContainer
    name="P2PInvitationRequestInfoContainer"
    type="WDI_P2P_INVITATION_REQUEST_INFO_CONTAINER"
    description="Generic container for Invitation Request-related containers.">
  <containerRef
    id="WDI_TLV_P2P_INVITATION_REQUEST_PARAMETERS"
    type="P2PInvitationRequestParamsContainer"
    name="RequestParams" />
  <containerRef
    id="WDI_TLV_P2P_GROUP_BSSID"
    type="MacAddressContainer"
    name="GroupBSSID"
    optional="true" />
  <containerRef
    id="WDI_TLV_P2P_CHANNEL_NUMBER"
    type="WFDChannelContainer"
    name="OperatingChannel"
    optional="true" />
  <containerRef
    id="WDI_TLV_P2P_GROUP_ID"
    type="P2PGroupIDContainer"
    name="GroupID" />
</aggregateContainer>

<propertyGroups />

Descreve todas as estruturas usadas em todos os contêineres. As estruturas podem ser usadas por um <container />ou referenciadas por outra <propertyGroup /> (estruturas aninhadas). Eles são definidos independentemente de contêineres de TLVs para que possam ser reutilizados. Eles não têm um cabeçalho TLV.

Essas definições são necessárias, pois ajudam a resolver problemas de preenchimento com estruturas e dão ao gerador de código instruções sobre como interpretar os dados.

Observação

A ordem importa aqui. Todos os deslocamentos de dados são implícitos com base na descrição do grupo de propriedades e os dados são gravados/analisados na ordem em que são definidos aqui. Essas estruturas precisam ser definidas aqui.

Tipos de campo primitivo (<bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>)

Esses são os tipos primitivos disponíveis e são convertidos/empacotados adequadamente pelo código gerado.

Atributos para tipos de campo primitivos

  • name – Nome do campo na estrutura pai.
  • description – Descrição amigável de para que serve a propriedade.
  • count - Quantos da propriedade fornecida existem. O padrão é um. Valores maiores que um transformam essa propriedade em uma matriz de tamanho estatica no código.

Conteúdo para tipos de campo primitivos

Nenhum

<propertyGroup />

Uma estrutura individual.

<propertyGroup /> Atributos

  • name – ID referenciada por mensagens WDI/outros contêineres.
  • description – Descrição amigável de para que serve o grupo de propriedades.
  • type - Nome do tipo a ser exposto ao código.

<propertyGroup /> Contents

Há vários tipos de propriedade possíveis (campos de struct).

  • <bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>

  • <groupRef />

  • <namedType />

<propertyGroup /> Exemplo

<propertyGroup name="P2PDiscoverModeStruct"
               type="WDI_P2P_DISCOVER_MODE"
               description="Structure definition for P2P Discover Mode Parameters">
  <namedType name="DiscoveryType"
             type="WDI_P2P_DISCOVER_TYPE"
             description="Type of discovery to be performed by the port."/>
  <bool name="ForcedDiscovery"
        description="A flag indicating that a complete device discovery is required. If this flag is not set, a partial discovery may be performed." />
  <namedType name="ScanType"
             type="WDI_P2P_SCAN_TYPE"
             description="Type of scan to be performed by port in scan phase." />
  <bool name="ScanRepeatCount"
        description="How many times the full scan procedure should be repeated. If set to 0, scan should be repeated until the task is aborted by the host."/>
</propertyGroup>
<propertyGroup name="P2PDeviceInfoParametersStruct"
               type="WDI_P2P_DEVICE_INFO_PARAMETERS"
               description="Structure definition for P2P Device Information Parameters.">
  <uint8 count="6"
         name="DeviceAddress"
         description="Peer's device address." />
  <uint16 name="ConfigurationMethods"
          description="Configuration Methods supported by this device." />
  <groupRef name="DeviceType"
            description="Primary Device Type."
            ref="WFDDeviceType" />
</propertyGroup>