WDI TLV 生成器/分析程序 XML 语义

TLV (Type-Length-Value) 是一种协议设计,其中每个数据位都包含在具有标准 Type 和 Length 标头的字节流中。

TLV 生成器/分析程序 XML 文件是消息、容器 (TLV) 和属性组的列表, (结构) 。 本主题介绍 XML 语法。

<message />

描述单个顶级 WDI 消息。 这些消息条目只有分析器/生成器函数。

属性

  • commandId - 必须在 dot11wdi.h 中定义的符号常量。
  • type - (调用分析程序/生成器函数) 时使用此类型的代码要公开的类型名称。
  • description - 命令的说明。
  • direction – 指示此消息是否描述从 WDI 到 IHV 微型端口的 TLV 流,作为名为“ToIhv”) 的 M1 (的一部分, 将 TLV 流从 IHV 微型端口以 M0、M3 或 M4 ((称为“FromIhv”) )的形式描述为 WDI,或者它双向 (称为“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 />

<container /> 节中定义的 的 <containers /> 引用。

<containerRef /> 属性

  • id - 必须在 wditypes.h 中定义的 TLV ID。
  • name - 父结构中变量的名称。
  • optional - 指定它是否为可选字段。 默认值为 False。 生成的代码强制实施“optional-ness”。
  • multiContainer – 指定生成的代码是否应需要多个相同类型的 TLV。 默认值为 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 消息/其他容器引用的 ID。
  • description - 容器用途的友好说明。
  • type – 键入要向代码公开的名称。
  • isCollection - 指定生成的代码是否应要求在同一 TLV (C 样式数组) 内使用许多相同大小的元素。 默认值为 false, (只需要给定类型的一个元素) 。
  • isZeroValid - 仅当 为 true 时 isCollection 有效。 确定是否允许零元素数组。 当 TLV 流需要区分不存在的可选 TLV 与不存在但长度为零 ((如 SSID) )的可选 TLV 时,这非常有用。 由于这种区别很少见,因此默认值为 false。

<container /> 内容

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

无。

<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 容器。 这用于处理嵌套 TLV。

<aggregateContainer /> 属性

  • name - WDI 消息/其他容器引用的 ID。
  • 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 />

描述所有容器中使用的所有结构。 结构可由 使用,也可以由另一<propertyGroup /><container /> (嵌套结构) 引用。 它们是独立于 TLV 容器定义的,因此可以重用它们。 它们没有 TLV 标头。

这些定义是必要的,因为它们有助于解决结构的填充问题,并为代码生成器提供有关如何解释数据的说明。

注意

这里的秩序很重要。 所有数据偏移量都基于属性组说明进行暗示,并且数据将按照此处定义的顺序写入/分析。 必须在此处定义这些结构。

基元字段类型 (<bool/> <uint8/> <uint16/> <uint32/> <int8/> <int16/> <int32/>)

这些是可用的基元类型,由生成的代码相应地转换/封送。

基元字段类型的属性

  • name - 父结构中的字段名称。
  • description – 属性用途的友好说明。
  • count - 给定属性的数量。 默认值为 1。 大于 1 的值使此属性成为代码中静态大小的数组。

基元字段类型的内容

<propertyGroup />

单个结构。

<propertyGroup /> 属性

  • name - WDI 消息/其他容器引用的 ID。
  • 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>