WDI TLV ジェネレーター/パーサーの XML セマンティクス

TLV (Type-Length-Value) は、データの各ビットが標準の Type ヘッダーと Length ヘッダーを持つバイト ストリームに含まれるプロトコル デザインです。

TLV ジェネレーター/パーサー XML ファイルは、メッセージ、コンテナー (TLV)、プロパティ グループ (構造体) の一覧です。 このトピックでは、XML 構文について説明します。

<message />

1 つの最上位レベルの WDI メッセージを記述します。 これらのメッセージ エントリにはパーサー/ジェネレーター関数のみ存在します。

属性

  • commandId - dot11wdi.h で定義する必要があるシンボリック定数。
  • type - コードに公開される型名 (パーサー/ジェネレーター関数を呼び出すときにこの型を使用します)。
  • description - コマンドの説明。
  • direction – このメッセージが、M1 の一部として WDI から IHV ミニポートに移動する TLV ストリームを記述するかどうか ("ToIhv" と呼ばれる)、M0、M3、または M4 として IHV ミニポートから WDI に移動する TLV ストリームを記述するかどうか ("FromIhv" と呼ばれる)、または双方向に移動するかどうか ("Both" と呼ばれる) を示します。 「WDI TLV パーサー インターフェイスの概要」の「メッセージの方向」を参照してください。

Content

コンテナー参照の一覧 (<containerRef />)。 これらは、メッセージを構成する異なる TLV です。 これらは、<containers /> セクションで定義されている型への参照です。

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

<containers /> セクションで定義されている <container /> への参照です。

<containerRef /> 属性

  • id - wditypes.h で定義する必要がある TLV ID。
  • name - 親構造体内の変数の名前。
  • optional - 省略可能なフィールドであるかどうかを指定します。 既定では false です。 生成されたコードでは、"optional-ness" が適用されます。
  • multiContainer – 生成されたコードが同じ型の複数の TLV を想定する必要があるかどうかを指定します。 既定では false です。 false の場合、生成されたコードは 1 つのみ存在することが強制されます。
  • type - <containers /> セクション内の特定の要素の "name" 属性への参照。
  • versionAdded - バージョン管理の一部。 この TLV コンテナーは、この属性で示されているバージョン未満のバージョンで、ピアとの間のバイト ストリームに表示されてはならないことを示します。
  • versionRemoved - バージョン管理の一部。 この TLV コンテナーは、この属性で示されているバージョン以上のバージョンで、ピアとの間のバイト ストリームに表示されてはならないことを示します。

<containerRef /> Content

なし。

<containerRef />

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

<containers />

WDI メッセージで使用されるすべてのコンテナー/TLV を記述します。 コンテナーは TLV のバケットと見なすことができます。 <container /><aggregateContainer /> の 2 種類があります。

<container />

1 つの構造体の参照または名前を指定した型の TLV コンテナー。 これは静的にサイズが設定されますが、静的にサイズが設定されている限り、C スタイルの配列である可能性があります。

<container /> 属性

  • name - WDI メッセージまたは他のコンテナーによって参照される ID。
  • description - コンテナーの用途のわかりやすい説明。
  • type – コードに公開される型名。
  • isCollection - 生成されたコードで、同じ TLV (C スタイル配列) 内の同じサイズ要素の多くを想定する必要があるかどうかを指定します。 既定値は false です (指定された型の 1 つの要素のみを想定します)。
  • isZeroValid - isCollection が true の場合にのみ有効です。 0 個の要素配列が許可されるかどうかを判定します。 これは、TLV ストリームで、存在しない省略可能な TLV と、存在するが長さが 0 の TLV (SSID など) を区別する必要がある場合に便利です。 この区別はめったに行われることはないため、既定値は false です。

<container /> Contents

<groupRef /><namedType /> のいずれか。

<container />

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

<propertyGroups /> セクションで定義されているプロパティ グループ (構造体) への参照。

<groupRef /> 属性

  • name - 親構造体内の構造体の名前。
  • ref - <propertyGroups /> セクション内の名前付き構造体への参照。
  • description – 構造体の用途に関するわかりやすい記述子。

<groupRef /> Content

なし。

<groupRef /> 使用例

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

wditypes.hpp または dot11wdi.h によって公開される生の型への参照。 既定のシリアライザー (memcpy) を使用します。パディングの問題が発生するおそれがあるため、ご自身の責任で使用してください。

<namedType /> 属性

  • name - 親構造体内の構造体の名前。
  • type - 実際のコードで使用する型名。
  • description – 構造体の用途に関するわかりやすい説明。

<namedType /> Content

なし。

<namedType />

<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 コンテナー。 これは、入れ子になった TLV を処理するために使用されます。

<aggregateContainer /> 属性

  • name - WDI メッセージまたは他のコンテナーによって参照される ID。
  • description – コンテナーの用途のわかりやすい説明。
  • type - コードに公開される型名。

<aggregateContainer /> Content

<containerRef /> の一覧。

<aggregateContainer />

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

すべてのコンテナーで使用されるすべての構造体を記述します。 構造体は、<container /> によって使用されることも、別の <propertyGroup /> によって参照されることもあります (入れ子構造)。 これらは TLV コンテナーとは独立して定義されるため、再利用できます。 TLV ヘッダーはありません。

これらの定義は、構造体のパディングの問題を解決するのに役立ち、データの解釈方法についてコード ジェネレーターに指示するために必要です。

Note

ここでは順序が重要です。 すべてのデータ オフセットは、プロパティ グループの記述に基づいて暗黙的に指定され、ここで定義されている順序でデータの書き込みや解析が行われます。 これらの構造体はここで定義する必要があります。

プリミティブ フィールド型 (<bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>)

これらは使用可能なプリミティブ型であり、生成されたコードによって適切に変換やマーシャリングが行われます。

プリミティブ フィールド型の属性

  • name - 親構造体のフィールド名。
  • description – プロパティの用途のわかりやすい説明。
  • count - 指定されたプロパティの数。 既定値は 1 です。 1 より大きい値を指定すると、このプロパティはコード内のサイズが静的に設定された配列になります。

プリミティブ フィールド型の内容

なし

<propertyGroup />

個々の構造体。

<propertyGroup /> 属性

  • name - WDI メッセージまたは他のコンテナーによって参照される ID。
  • description – グループの用途のわかりやすい説明。
  • type - コードに公開される型名。

<propertyGroup /> Contents

いくつかのプロパティ型 (構造体のフィールド) があります。

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

  • <groupRef />

  • <namedType />

<propertyGroup />

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