USB 비디오 클래스 확장 단위에 대한 디바이스 요구 사항
이 섹션에서는 디바이스에서 확장 단위를 구현하기 위한 몇 가지 특정 요구 사항을 설명합니다. 이러한 요구 사항이 충족되지 않으면 USB 비디오 클래스 드라이버가 확장 단위에서 제대로 작동하지 않을 수 있습니다.
설명자
확장 단위 설명자에는 유효한 고유 GUID가 포함되어야 합니다. 이 GUID는 Usbvideo.sys 해당 확장 노드에 설정된 속성을 노출하는 데 사용됩니다. Microsoft Windows SDK 포함된 Guidgen.exe이라는 도구를 사용하여 확장 단위에 대한 고유한 GUID를 만들어야 합니다.
확장 단위 속성 집합(KSPROPERTY_EXTENSION_UNIT)의 속성 식별자는 USB Video Class 펌웨어에서 노출되는 비슷한 번호의 확장 단위 컨트롤 ID에 해당합니다. 확장 단위 컨트롤은 IKsControl 인터페이스를 통해 표준 KSPROPERTY 요청을 사용하여 액세스할 수 있습니다.
확장 단위 컨트롤 ID라고 하는 확장 단위의 컨트롤은 1에서 일부 최대값 n까지 지속적으로 번호가 매겨져야 합니다. 간격이 있는 경우 USB 비디오 클래스 드라이버는 간격을 벗어나는 컨트롤을 노출하지 않습니다. USB 비디오 클래스 드라이버의 현재 구현은 확장 단위의 컨트롤 수를 31개로 제한합니다.
속성 ID=0(KSPROPERTY_EXTENSION_UNIT_INFO)을 사용하여 비디오 디바이스 사양에 대한 유니버설 직렬 버스 디바이스 클래스 정의에 정의된 확장 단위 설명자의 일부를 가져옵니다. 이 사양은 USB 구현자 포럼 웹 사이트에서 사용할 수 있습니다.
속성 ID=1 이상을 사용하여 해당 확장 단위 컨트롤에 요청을 보냅니다.
KSPROPERTY_EXTENSION_UNIT_CONTROL(속성 ID=1)는 실제 속성이 아닙니다. 대신 식별자 1 이상이 실제 확장 단위 컨트롤 ID를 참조한다는 것을 나타냅니다.
KSPROPERTY_EXTENSION_UNIT_PASS_THROUGH(속성 ID=0xffff)는 구현되지 않습니다.
샘플 확장 단위 플러그 인 DLL에 표시된 전체 샘플에서 가져온 다음 코드 예제는 KSPROPERTY_EXTENSION_UNIT_INFO 요청을 만드는 방법을 보여줍니다.
ExtensionProp.Property.Set = PROPSETID_VIDCAP_EXTENSION_UNIT;
ExtensionProp.Property.Id = KSPROPERTY_EXTENSION_UNIT_INFO;
ExtensionProp.Property.Flags = KSPROPERTY_TYPE_GET |
KSPROPERTY_TYPE_TOPOLOGY;
ExtensionProp.NodeId = m_dwNodeId;
hr = m_pKsControl->KsProperty(
(PKSPROPERTY) &ExtensionProp,
sizeof(ExtensionProp),
(PVOID) pInfo,
ulSize,
&ulBytesReturned);
return hr;
}
제어 요청
디바이스는 USB 비디오 클래스 사양에 따라 모든 확장 장치 컨트롤에 대한 GET_CUR, GET_INFO, GET_LEN, GET_MIN, GET_MAX, GET_DEF 및 GET_RES 요청을 지원해야 합니다. 디바이스에서 이러한 함수를 구현하지 않으면 해당 속성이 사용자 모드에 노출되지 않습니다.
디바이스를 초기화하는 동안 드라이버는 디바이스에 GET_INFO, GET_LEN, GET_MIN 및 GET_MAX 제어 요청을 실행합니다. 이러한 초기 요청이 실패하면 Usbvideo.sys 특정 컨트롤을 사용하지 않도록 설정합니다.
GET_INFO 반환된 값은 지정된 컨트롤에 유효한 GET 및 SET 요청을 드라이버에 알려줍니다. 또한 GET_INFO 컨트롤이 비동기인지 여부를 드라이버에 알려줍니다. 비동기 요청은 상태 인터럽트 엔드포인트에서 지원됩니다.