다음을 통해 공유


WDI TLV 생성기/파서 XML 의미 체계

TLV(Type-Length-Value)는 각 데이터 비트가 표준 형식 및 길이 헤더가 있는 바이트 스트림에 포함된 프로토콜 디자인입니다.

TLV 생성기/파서 XML 파일은 메시지, 컨테이너(TLLV) 및 속성 그룹(구조체)의 목록입니다. 이 항목에서는 XML 구문을 다룹니다.

<message />

단일 최상위 WDI 메시지를 설명합니다. 이러한 메시지 항목에는 파서/생성기 함수만 있습니다.

특성

  • commandId - dot11wdi.h에 정의해야 하는 기호 상수입니다.
  • type - 코드에 노출될 형식 이름입니다(파서/생성기 함수를 호출할 때 이 형식 사용).
  • description - 명령에 대한 설명입니다.
  • direction – 이 메시지가 M1의 일부로 WDI에서 IHV 미니포트로 가는 TLV 스트림을 설명하는지("ToIhv"라고 함) TLV 스트림을 IHV 미니포트에서 WDI로 M0, M3 또는 M4("FromIhv"라고 함)로 설명하는지 또는 양방향("둘 다"라고 함)으로 가는지를 나타냅니다. WDI TLV 파서 인터페이스 개요의메시지 방향을 참조하세요.

콘텐츠

컨테이너 참조 목록(<containerRef />). 메시지를 구성하는 다양한 LLV입니다. 섹션에 정의된 형식에 대한 참조입니다 <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 – 생성된 코드에 동일한 형식의 여러 TLLV가 필요한지 여부를 지정합니다. 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 메시지에 사용되는 모든 컨테이너/TLLV에 대해 설명합니다. 컨테이너는 TLV 버킷으로 간주될 수 있습니다. 및 <aggregateContainer />형식은 2가지입니다<container />.

<container />

단일 구조 참조 또는 명명된 형식에 대한 TLV 컨테이너입니다. 정적으로 크기가 조정되지만 정적으로 크기가 조정되는 한 C 스타일 배열일 수 있습니다.

<container /> 특성

  • name - WDI 메시지/기타 컨테이너에서 참조하는 ID입니다.
  • description - 컨테이너의 용도에 대한 친숙한 설명입니다.
  • type – 코드에 노출할 형식 이름입니다.
  • isCollection - 생성된 코드가 동일한 TLV(C 스타일 배열) 내에서 동일한 크기 요소를 많이 예상해야 하는지 여부를 지정합니다. 기본값은 false입니다(지정된 형식의 요소 하나만 예상).
  • isZeroValid - 가 true인 경우에만 유효합니다 isCollection . 0 요소 배열이 허용되는지 여부를 결정합니다. 이는 TLV 스트림이 존재하지 않지만 길이가 0인 선택적 TLV(예: SSID)를 구분해야 하는 경우에 유용합니다. 이 구분은 드물기 때문에 기본값은 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 컨테이너입니다. 중첩된 TLLV를 처리하는 데 사용됩니다.

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

모든 컨테이너에 사용되는 모든 구조체에 대해 설명합니다. 구조체는 <container />에서 사용하거나 다른 <propertyGroup /> (중첩된 구조체)에서 참조할 수 있습니다. 다시 사용할 수 있도록 TLLV 컨테이너와 독립적으로 정의됩니다. 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>