共用方式為


WDI TLV 產生器/剖析器 XML 語意

TLV (Type-Length-Value) 是一種通訊協定設計,其中每個資料位都包含在具有標準 Type 和 Length 標頭的位元組資料流程中。

TLV 產生器/剖析器 XML 檔案是訊息清單、容器 (TLV) ,以及 (結構) 的屬性群組。 本主題涵蓋 XML 語法。

<message />

描述單一最上層 WDI 訊息。 這些訊息專案只有剖析器/產生器函式。

屬性

  • commandId - 必須在 dot11wdi.h 中定義的符號常數。
  • type - 呼叫剖析器/產生器) 函式時,要公開給程式碼 (類型的名稱。
  • description - 命令的描述。
  • direction – 指出此訊息是否描述從 WDI 到 IHV 迷你埠的 TLV 資料流程,做為 M1 (的一部分,稱為 「ToIhv」) , 描述從 IHV 迷你埠到 WDI 的 TLV 資料流程,因為 M0、M3 或 M4 (稱為 「FromIhv」) ,否則會雙向 (稱為「兩者」) 。 請參閱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 />

<container />區段中定義的 <containers /> 參考。

<containerRef /> 屬性

  • id - 必須在 wditypes.h 中定義的 TLV 識別碼。
  • name - 父結構中的變數名稱。
  • optional - 指定它是否為選擇性欄位。 預設為 False。 產生的程式碼會強制執行 「optional-ness」。
  • multiContainer – 指定產生的程式碼是否應該預期具有相同類型的多個 TTLV。 預設為 False。 如果為 false,產生的程式碼會強制只有一個存在。
  • type - 區段中特定專案的 「name」 屬性 <containers /> 參考。
  • versionAdded - 版本設定的一部分。 表示這個 TLV 容器不應該出現在位元組資料流程中,其版本小於此屬性所指出的版本。
  • versionRemoved - 版本設定的一部分。 表示這個 TLV 容器不應該出現在位元組資料流程中,其版本大於或等於此屬性中所指出的版本。

<containerRef /> 內容

無。

<containerRef /> 範例

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

<containers />

描述 WDI 訊息中使用的所有容器/TLV。 容器可以視為 TLV 貯體。 有 2 種類型: <container /><aggregateContainer />

<container />

單一結構參考或具名類型的 TLV 容器。 它是靜態大小,但可能是 C 樣式的陣列,只要它是靜態大小即可。

<container /> 屬性

  • name - WDI 訊息/其他容器所參考的識別碼。
  • description - 容器用途的易記描述。
  • type – 要公開給程式碼的類型名稱。
  • isCollection - 指定產生的程式碼是否應該預期相同 TLV (C 樣式陣列內的許多大小元素) 。 預設值為 false, (只預期指定型別) 的一個專案。
  • isZeroValid - 只有在 為 true 時才 isCollection 有效。 判斷是否允許零個專案陣列。 當 TLV 資料流程需要區別不存在的選擇性 TLV 與不存在但長度為零但長度為零的 TLV 時,例如 SSID () 。 由於此區別很少見,因此預設值為 false。

<container /> 內容

<namedType /><groupRef /> 其中一個。

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

無。

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

無。

<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 容器。 這用於處理巢狀 TTLV。

<aggregateContainer /> 屬性

  • name - WDI 訊息/其他容器所參考的識別碼。
  • description – 容器用途的易記描述。
  • type - 要公開給程式碼的類型名稱。

<aggregateContainer /> 內容

<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 標頭。

這些定義是必要的,因為它們有助於解決結構填補問題,並提供如何解譯資料的程式碼產生器指示。

注意

順序在這裡很重要。 所有資料位移都會根據屬性群組描述來隱含,並以此處定義的順序寫入/剖析資料。 必須在這裡定義這些結構。

基本欄位類型 (<bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>)

這些是可用的基本類型,並由產生的程式碼適當地轉換/封送處理。

基本欄位類型的屬性

  • name - 父結構中的功能變數名稱。
  • description – 屬性用途的易記描述。
  • count - 指定的屬性有多少。 預設值為 1。 大於一的值會使此屬性成為程式碼中靜態調整大小的陣列。

基本欄位類型的內容

<propertyGroup />

個別結構。

<propertyGroup /> 屬性

  • name - WDI 訊息/其他容器所參考的識別碼。
  • description – 屬性群組用途的易記描述。
  • type - 要公開給程式碼的類型名稱。

<propertyGroup /> 內容

(結構欄位) 有幾個可能的屬性類型。

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