Share via


Semántica XML del generador/analizador TLV de WDI

TLV (Type-Length-Value) es un diseño de protocolo en el que cada bit de datos se encuentra en una secuencia de bytes que tiene un encabezado Type y Length estándar.

El archivo XML del generador o analizador de TLV es una lista de mensajes, contenedores (TLV) y grupos de propiedades (structs). En este tema se trata la sintaxis XML.

<message />

Describe un único mensaje WDI de nivel superior. Solo hay funciones de analizador o generador para estas entradas de mensaje.

Atributos

  • commandId - Constante simbólica que debe definirse en dot11wdi.h.
  • type - Nombre de tipo que se va a exponer al código (se usa este tipo al llamar a funciones de analizador o generador).
  • description - Descripción del comando.
  • direction : indica si este mensaje describe la secuencia TLV a medida que va de WDI a la miniporte IHV como parte de un M1 (llamado "ToIhv"), describe la secuencia de TLV a medida que va del miniporte IHV a WDI como un M0, M3 o M4 (llamado "FromIhv"), o va en ambas direcciones (denominadas "Ambos"). Consulte Dirección del mensaje en la información general de la interfaz del analizador TLV de WDI.

Contenido

Lista de referencias de contenedor (<containerRef />). Estos son los diferentes TLV que componen el mensaje. Son referencias a tipos definidos en la <containers /> sección .

Ejemplo

<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 />

Referencia a un <container /> definido en la <containers /> sección .

<containerRef /> Atributos

  • id - Id. de TLV que se debe definir en wditypes.h.
  • name : el nombre de la variable en la estructura primaria.
  • optional : especifica si es o no un campo opcional. El valor predeterminado es false. El código generado aplica "optional-ness".
  • multiContainer : especifica si el código generado debe esperar o no varios TLV del mismo tipo. El valor predeterminado es false. Si es false, el código generado exige que solo haya uno presente.
  • type - Referencia al atributo "name" de un elemento específico en la <containers /> sección.
  • versionAdded - Parte del control de versiones. Indica que este contenedor de TLV no debe aparecer en secuencias de bytes hacia y desde elementos del mismo nivel con una versión inferior a la indicada en este atributo.
  • versionRemoved - Parte del control de versiones. Indica que este contenedor de TLV no debe aparecer en secuencias de bytes hacia o desde elementos del mismo nivel con una versión mayor o igual que la indicada en este atributo.

<containerRef /> Contenido

Ninguno.

<containerRef /> Ejemplo

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

<containers />

Describe todos los contenedores o TLV usados en los mensajes WDI. Los contenedores se pueden considerar depósitos de TLV. Hay 2 tipos: <container /> y <aggregateContainer />.

<container />

Contenedor TLV para una única referencia de estructura o tipo con nombre. Tiene un tamaño estático, pero puede ser una matriz de estilo C siempre que tenga un tamaño estático.

<container /> Atributos

  • name : identificador al que hacen referencia los mensajes WDI u otros contenedores.
  • description - Descripción descriptivo de lo que es el contenedor.
  • type : escriba el nombre que se va a exponer al código.
  • isCollection : especifica si el código generado debe esperar o no muchos de los mismos elementos de tamaño dentro del mismo TLV (matriz de estilo C). El valor predeterminado es false (solo se espera un elemento del tipo especificado).
  • isZeroValid - Solo válido cuando isCollection es true. Determina si se permite una matriz de elementos cero. Esto resulta útil cuando la secuencia TLV necesita distinguir entre un TLV opcional que no está presente frente a uno que está presente, pero tiene una longitud cero (como los SSID). Dado que esta distinción es poco frecuente, el valor predeterminado es false.

<container /> Contenido

Uno de estos valores: <groupRef /> o <namedType />.

<container /> Ejemplo

<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 />

Referencia a un grupo de propiedades (estructura) definido en la <propertyGroups /> sección .

<groupRef /> Atributos

  • name : nombre de la estructura de la estructura primaria.
  • ref - Referencia a una estructura con nombre en una <propertyGroups /> sección.
  • description – Descriptor descriptivo para el que se usa la estructura.

<groupRef /> Contenido

Ninguno.

<groupRef /> Ejemplos

<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 />

Referencia a un tipo sin formato expuesto por wditypes.hpp o dot11wdi.h. Usa el serializador predeterminado (memcpy), por lo que se usa en su propio riesgo debido a problemas de relleno.

<namedType /> Atributos

  • name : nombre de la estructura de la estructura primaria.
  • type - Escriba el nombre que se va a usar en el código real.
  • description – Descripción fácil de usar para la estructura.

<namedType /> Contenido

Ninguno.

<namedType /> Ejemplo

<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 />

Contenedor TLV para muchos contenedores diferentes. Se usa para controlar los TLV anidados.

<aggregateContainer /> Atributos

  • name : identificador al que hacen referencia los mensajes WDI u otros contenedores.
  • description – Descripción de lo que es el contenedor.
  • type : escriba el nombre que se va a exponer al código.

<aggregateContainer /> Contenido

Lista de <containerRef />.

<aggregateContainer /> Ejemplo

<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 />

Describe todas las estructuras usadas en todos los contenedores. Las estructuras pueden ser utilizadas por un <container />o a las que hace referencia otra <propertyGroup /> (estructuras anidadas). Se definen independientemente de los contenedores TLV para que se puedan volver a usar. No tienen un encabezado TLV.

Estas definiciones son necesarias, ya que ayudan a resolver problemas de relleno con estructuras y proporcionan las instrucciones del generador de código sobre cómo interpretar los datos.

Nota

El orden es importante aquí. Todos los desplazamientos de datos están implícitos en función de la descripción del grupo de propiedades y los datos se escriben o analizan en el orden en que se define aquí. Estas estructuras deben definirse aquí.

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

Estos son los tipos primitivos disponibles y se convierten o serializarán correctamente mediante el código generado.

Atributos para tipos de campo primitivos

  • name - Nombre de campo en la estructura primaria.
  • description – Descripción de lo que es la propiedad.
  • count - Cuántos de la propiedad especificada hay. El valor predeterminado es uno. Los valores mayores que uno convierten esta propiedad en una matriz de tamaño estático en el código.

Contenido de tipos de campos primitivos

Ninguno

<propertyGroup />

Una estructura individual.

<propertyGroup /> Atributos

  • name : identificador al que hacen referencia los mensajes WDI u otros contenedores.
  • description – Descripción amigable de lo que es el grupo de propiedades.
  • type : escriba el nombre que se va a exponer al código.

<propertyGroup /> Contenido

Hay varios tipos de propiedad posibles (campos de estructura).

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

  • <groupRef />

  • <namedType />

<propertyGroup /> Ejemplo

<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>