USB 視訊類別擴充單元的裝置需求
本節說明在裝置中實作擴充單元的一些特定需求。 如果不符合這些需求,USB 視訊類別驅動程式可能無法與擴充單元正確搭配運作。
描述項
擴充單位描述元必須包含有效的唯一 GUID。 此 GUID 是由Usbvideo.sys用來公開對應擴充節點上設定的屬性。 您應該使用隨附于Microsoft Windows SDKGuidgen.exe的工具,為擴充單位建立唯一的 GUID。
擴充單元屬性集上的屬性識別碼 (KSPROPERTY_EXTENSION_UNIT) 對應至 USB 視訊類別韌體所公開的類似編號擴充單元控制項識別碼。 擴充單元控制項可透過 IKsControl 介面使用標準 KSPROPERTY 要求來存取。
擴充單位上的控制項,稱為擴充單元控制項識別碼,必須連續從 1 編號到一些最大值 n。 如果有間距,USB 視訊類別驅動程式不會公開超出間距的控制項。 USB 視訊類別驅動程式的目前實作會將擴充單元上的控制項數目限制為 31。
使用屬性識別碼=0 (KSPROPERTY_EXTENSION_UNIT_INFO) 取得延伸單元描述元的一部分,這是影片裝置規格的通用序列匯流排裝置類別定義所定義的語法。 此規格可在 USB 實作者論壇 網站取得。
使用屬性識別碼=1 和更新版本,將要求傳送至對應的擴充單元控制項。
請注意,KSPROPERTY_EXTENSION_UNIT_CONTROL (屬性識別碼=1) 不是實際屬性。 相反地,它表示識別碼 1 和更新版本是指實際的擴充單元控制項識別碼。
KSPROPERTY_EXTENSION_UNIT_PASS_THROUGH (屬性識別碼=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會告訴驅動程式控制項是否為非同步。 狀態中斷端點支援非同步要求。