Sémantique XML du générateur/analyseur WDI TLV
TLV (Type-Length-Value) est une conception de protocole où chaque bit de données est contenu dans un flux d’octets qui a un en-tête Type et Longueur standard.
Le fichier XML du générateur/analyseur TLV est une liste de messages, de conteneurs (TTLVs) et de groupes de propriétés (structs). Cette rubrique traite de la syntaxe XML.
<message />
<containerRef />
<containers />
<container />
<groupRef />
<namedType />
<aggregateContainer />
<propertyGroups />
- Types de champs primitifs (
<bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>
) <propertyGroup />
<message />
Décrit un seul message WDI de niveau supérieur. Il n’existe que des fonctions d’analyseur/générateur pour ces entrées de message.
Attributs
commandId
- Constante symbolique qui doit être définie dans dot11wdi.h.type
- Nom du type à exposer au code (vous utilisez ce type lors de l’appel de fonctions d’analyseur/générateur).description
- Description de la commande.direction
: indique si ce message décrit le flux TLV tel qu’il passe de WDI au miniport IHV dans le cadre d’un M1 (appelé « ToIhv »), décrit le flux TLV tel qu’il va du miniport IHV à WDI en tant que M0, M3 ou M4 (appelé « FromIhv »), ou s’il va dans les deux sens (appelé « Les deux »). Consultez La vue d’ensemble de la direction des messages dans l’interface de l’analyseur WDI TLV.
Contenu
Liste des références de conteneur (<containerRef />
). Il s’agit des différentes TLV qui composent le message. Il s’agit de références à des types définis dans la <containers />
section .
Exemple
<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 />
Référence à un <container />
défini dans la <containers />
section .
<containerRef />
Attributs
id
- ID TLV qui doit être défini dans wditypes.h.name
- Nom de la variable dans la structure parente.optional
- Spécifie s’il s’agit ou non d’un champ facultatif. False par défaut. Le code généré applique « optional-ness ».multiContainer
: spécifie si le code généré doit s’attendre à plusieurs TLVs du même type. False par défaut. Si la valeur est false, le code généré applique qu’un seul est présent.type
- Référence à l’attribut « name » d’un élément spécifique dans la<containers />
section .versionAdded
- Partie du contrôle de version. Indique que ce conteneur TLV ne doit pas apparaître dans les flux d’octets vers/depuis des homologues dont la version est inférieure à celle indiquée dans cet attribut.versionRemoved
- Partie du contrôle de version. Indique que ce conteneur TLV ne doit pas apparaître dans les flux d’octets vers/depuis des homologues dont la version est supérieure ou égale à celle indiquée dans cet attribut.
<containerRef />
Contenu
Aucun.
<containerRef />
Exemple
<containerRef id="WDI_TLV_P2P_CHANNEL_NUMBER"
name="ListenChannel"
optional="true"
type="WFDChannelContainer"/>
<containers />
Décrit tous les conteneurs/VTL utilisés dans les messages WDI. Les conteneurs peuvent être considérés comme des compartiments TLV. Il existe 2 types : <container />
et <aggregateContainer />
.
<container />
Conteneur TLV pour une référence de structure unique ou un type nommé. Il est dimensionné de façon statique, mais il peut s’agir d’un tableau de style C tant qu’il est dimensionné de manière statique.
<container />
Attributs
name
- ID référencé par les messages WDI/autres conteneurs.description
- Description conviviale de l’objet du conteneur.type
: tapez le nom à exposer au code.isCollection
- Spécifie si le code généré doit s’attendre à un grand nombre d’éléments de même taille au sein du même tableau TLV (style C). La valeur par défaut est false (attendez un seul élément du type donné).isZeroValid
- Valide uniquement lorsqueisCollection
a la valeur true. Détermine si un tableau de zéro élément est autorisé. Cela est utile lorsque le flux TLV doit faire la distinction entre un TLV facultatif qui n’est pas présent et un autre qui est présent mais a une longueur nulle (comme les SSID). Étant donné que cette distinction est rare, la valeur par défaut est false.
<container />
Contents
Un de <groupRef />
ou <namedType />
.
<container />
Exemple
<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 />
Référence à un groupe de propriétés (structure) défini dans la <propertyGroups />
section .
<groupRef />
Attributs
name
- Nom de la structure dans la structure parente.ref
- Référence à une structure nommée dans une<propertyGroups />
section.description
: descripteur convivial de l’utilisation de la structure.
<groupRef />
Contenu
Aucun.
<groupRef />
Exemples
<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 />
Référence à un type brut exposé par wditypes.hpp ou dot11wdi.h. Utilise le sérialiseur par défaut (memcpy), utilisez donc à vos propres risques en raison de problèmes de remplissage.
<namedType />
Attributs
name
- Nom de la structure dans la structure parente.type
- Tapez le nom à utiliser dans le code réel.description
: description conviviale de l’utilisation de la structure.
<namedType />
Contenu
Aucun.
<namedType />
Exemple
<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 />
Conteneur TLV pour de nombreux conteneurs différents. Il est utilisé pour gérer les TTLV imbriquées.
<aggregateContainer />
Attributs
name
- ID référencé par les messages WDI/autres conteneurs.description
– Description conviviale de l’objet du conteneur.type
- Nom du type à exposer au code.
<aggregateContainer />
Contenu
Liste de <containerRef />
.
<aggregateContainer />
Exemple
<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 />
Décrit toutes les structures utilisées dans tous les conteneurs. Les structures peuvent être utilisées par un <container />
, ou référencées par une autre <propertyGroup />
(structures imbriquées). Ils sont définis indépendamment des conteneurs TLVs afin qu’ils puissent être réutilisés. Ils n’ont pas d’en-tête TLV.
Ces définitions sont nécessaires, car elles aident à résoudre les problèmes de remplissage avec les structures et donnent des instructions au générateur de code sur la façon d’interpréter les données.
Notes
L’ordre est important ici. Tous les décalages de données sont implicites en fonction de la description du groupe de propriétés, et les données sont écrites/analysées dans l’ordre dans lequel elles sont définies ici. Ces structures doivent être définies ici.
Types de champs primitifs (<bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>
)
Il s’agit des types primitifs disponibles et sont convertis/marshalés de manière appropriée par le code généré.
Attributs pour les types de champs primitifs
name
- Nom du champ dans la structure parente.description
– Description conviviale de ce à quoi la propriété est destinée.count
- Combien de la propriété donnée il y a. Un comme valeur par défaut. Les valeurs supérieures à un font de cette propriété un tableau de taille statique dans le code.
Contenu des types de champs primitifs
None
<propertyGroup />
Structure individuelle.
<propertyGroup />
Attributs
name
- ID référencé par les messages WDI/autres conteneurs.description
: description conviviale de l’objet du groupe de propriétés.type
- Nom du type à exposer au code.
<propertyGroup />
Contents
Il existe plusieurs types de propriétés possibles (champs struct).
<bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>
<groupRef />
<namedType />
<propertyGroup />
Exemple
<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>