WDI TLV 產生器/剖析器 XML 語意
TLV (Type-Length-Value) 是一種通訊協定設計,其中每個資料位都包含在具有標準 Type 和 Length 標頭的位元組資料流程中。
TLV 產生器/剖析器 XML 檔案是訊息清單、容器 (TLV) ,以及 (結構) 的屬性群組。 本主題涵蓋 XML 語法。
<message />
<containerRef />
<containers />
<container />
<groupRef />
<namedType />
<aggregateContainer />
<propertyGroups />
- 基本欄位類型 (
<bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>
) <propertyGroup />
<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>