Freigeben über


WDI-TLV-Generator/Parser-XML-Semantik

TLV (Type-Length-Value) ist ein Protokollentwurf, bei dem jedes Datenbit in einem Bytedatenstrom enthalten ist, der über einen Standardheader type und length verfügt.

Die XML-Datei des TLV-Generators/-Parsers ist eine Liste von Nachrichten, Containern (TLVs) und Eigenschaftengruppen (Strukturen). In diesem Thema wird die XML-Syntax behandelt.

<message />

Beschreibt eine einzelne WDI-Nachricht der obersten Ebene. Für diese Nachrichteneinträge gibt es nur Parser-/Generatorfunktionen.

Attributes

  • commandId – Symbolische Konstante, die in dot11wdi.h definiert werden muss.
  • type - Typname, der für den Code verfügbar gemacht werden soll (Sie verwenden diesen Typ beim Aufrufen von Parser-/Generatorfunktionen).
  • description - Beschreibung des Befehls.
  • direction – Gibt an, ob diese Meldung den TLV-Stream beschreibt, wie er von WDI zum IHV-Miniport als Teil eines M1 (als "ToIhv" bezeichnet) geht, den TLV-Stream beschreibt, während er vom IHV-Miniport zu WDI als M0, M3 oder M4 (als "FromIhv" bezeichnet) oder in beide Richtungen wechselt (als "Beide" bezeichnet). Weitere Informationen finden Sie unter Nachrichtenrichtung in der Übersicht über die WDI-TLV-Parserschnittstelle.

Inhalt

Liste der Containerverweise (<containerRef />). Dies sind die verschiedenen TLVs, aus denen die Nachricht besteht. Sie sind Verweise auf typen, die <containers /> im Abschnitt definiert sind.

Beispiel

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

Verweis auf eine <container /> im <containers /> Abschnitt definierte.

<containerRef /> Attribute

  • id – TLV-ID, die in wditypes.h definiert werden muss.
  • name – Der Name der Variablen in der übergeordneten Struktur.
  • optional – Gibt an, ob es sich um ein optionales Feld handelt. Der Standardwert ist gleich „False“. Generierter Code erzwingt "optional-ness".
  • multiContainer – Gibt an, ob der generierte Code mehrere TLVs desselben Typs erwarten soll. Der Standardwert ist gleich „False“. Wenn false, erzwingt generierter Code, dass nur eine vorhanden ist.
  • type – Verweis auf das Attribut "name" eines bestimmten Elements im <containers /> Abschnitt.
  • versionAdded - Teil der Versionsverwaltung. Gibt an, dass dieser TLV-Container nicht in Bytestreams zu/von Peers mit einer Version angezeigt werden soll, die kleiner als die in diesem Attribut angegebene ist.
  • versionRemoved - Teil der Versionsverwaltung. Gibt an, dass dieser TLV-Container nicht in Bytestreams zu/von Peers mit einer Version angezeigt werden soll, die größer oder gleich der in diesem Attribut angegebenen ist.

<containerRef /> Inhalt

Keine.

<containerRef /> Beispiel

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

<containers />

Beschreibt alle Container/TLVs, die in WDI-Nachrichten verwendet werden. Container können als TLV-Buckets betrachtet werden. Es gibt zwei Typen: <container /> und <aggregateContainer />.

<container />

TLV-Container für einen einzelnen Strukturverweis oder benannten Typ. Es ist statisch dimensioniert, kann aber ein Array im C-Stil sein, solange es statisch dimensioniert ist.

<container /> Attribute

  • name - ID, auf die von WDI-Nachrichten/anderen Containern verwiesen wird.
  • description - Benutzerfreundliche Beschreibung, wofür der Container vorgesehen ist.
  • type – Geben Sie den Namen ein, der für den Code verfügbar gemacht werden soll.
  • isCollection – Gibt an, ob generierter Code viele der gleichen Größenelemente innerhalb desselben TLV -Arrays (Array im C-Stil) erwarten soll. Der Standardwert ist false (es wird nur ein Element des angegebenen Typs erwartet).
  • isZeroValid - Nur gültig, wenn isCollection true ist. Bestimmt, ob ein Nullelementarray zulässig ist. Dies ist nützlich, wenn der TLV-Stream zwischen einer optionalen TLV unterscheiden muss, die nicht vorhanden ist, und einer, die vorhanden ist, aber die Länge null hat (z. B. SSIDs). Da diese Unterscheidung selten ist, ist der Standardwert false.

<container /> Inhalt

Einer der folgenden Werte: <groupRef /> oder <namedType />.

<container /> Beispiel

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

Verweis auf eine im <propertyGroups /> Abschnitt definierte Eigenschaftengruppe (Struktur).

<groupRef /> Attribute

  • name – Name der Struktur in der übergeordneten Struktur.
  • ref – Verweis auf eine benannte Struktur in einem <propertyGroups /> Abschnitt.
  • description – Benutzerfreundlicher Deskriptor, wofür die -Struktur verwendet wird.

<groupRef /> Inhalt

Keine.

<groupRef /> Beispiele

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

Verweis auf einen rohen Typ, der von wditypes.hpp oder dot11wdi.h verfügbar gemacht wird. Verwendet das Standardserialisierungsprogramm (memcpy). Verwenden Sie daher aufgrund von Auffüllungsproblemen auf eigenes Risiko.

<namedType /> Attribute

  • name – Name der Struktur in der übergeordneten Struktur.
  • type – Geben Sie den Namen ein, der im tatsächlichen Code verwendet werden soll.
  • description – Benutzerfreundliche Beschreibung, wofür die Struktur verwendet wird.

<namedType /> Inhalt

Keine.

<namedType /> Beispiel

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

TLV-Container für viele verschiedene Container. Dies wird für die Behandlung geschachtelter TLVs verwendet.

<aggregateContainer /> Attribute

  • name - ID, auf die von WDI-Nachrichten/anderen Containern verwiesen wird.
  • description – Benutzerfreundliche Beschreibung, wofür der Container vorgesehen ist.
  • type – Geben Sie den Namen ein, der für den Code verfügbar gemacht werden soll.

<aggregateContainer /> Inhalt

Liste mit <containerRef />.

<aggregateContainer /> Beispiel

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

Beschreibt alle Strukturen, die in allen Containern verwendet werden. Strukturen können entweder von verwendet oder von einer <container />anderen <propertyGroup /> referenziert werden (geschachtelte Strukturen). Sie werden unabhängig von TLVs-Containern definiert, sodass sie wiederverwendet werden können. Sie verfügen nicht über einen TLV-Header.

Diese Definitionen sind erforderlich, da sie beim Lösen von Auffüllungsproblemen mit Strukturen helfen und dem Codegenerator Anweisungen zur Interpretation der Daten geben.

Hinweis

Hier kommt es auf die Reihenfolge an. Alle Datenoffsets werden basierend auf der Beschreibung der Eigenschaftengruppe impliziert, und die Daten werden in der Reihenfolge geschrieben/analysiert, in der sie hier definiert sind. Diese Strukturen müssen hier definiert werden.

Primitive Feldtypen (<bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>)

Dies sind die verfügbaren primitiven Typen, die vom generierten Code entsprechend konvertiert/marshalled werden.

Attribute für primitive Feldtypen

  • name - Feldname in der übergeordneten Struktur.
  • description – Freundliche Beschreibung, wofür die Eigenschaft ist.
  • count – Gibt an, wie viele der angegebenen Eigenschaft vorhanden sind. Standard ist 1. Werte, die größer als eins sind, machen diese Eigenschaft zu einem statisch dimensionierten Array im Code.

Inhalt für primitive Feldtypen

Keine

<propertyGroup />

Eine individuelle Struktur.

<propertyGroup /> Attribute

  • name - ID, auf die von WDI-Nachrichten/anderen Containern verwiesen wird.
  • description – Benutzerfreundliche Beschreibung, wofür die Eigenschaftengruppe dient.
  • type – Geben Sie den Namen ein, der für den Code verfügbar gemacht werden soll.

<propertyGroup /> Inhalt

Es gibt mehrere mögliche Eigenschaftstypen (Strukturfelder).

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

  • <groupRef />

  • <namedType />

<propertyGroup /> Beispiel

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