動態子裝置註冊和取消註冊
支援某種形式的插孔存在偵測的裝置稱為動態裝置,而且其插孔必須支援 KSPROPERTY_JACK_DESCRIPTION 屬性。 下列步驟顯示動態裝置驅動程式用來建立、註冊或取消註冊這些動態裝置相關聯子裝置的演算法。 子裝置會以篩選形式建立。
下列步驟顯示載入音訊裝置驅動程式時,有音訊裝置插入插接器時會發生什麼情況:
驅動程式會使用插接狀態偵測來判斷裝置已插入插接器。 驅動程式會呼叫 PcRegisterSubdevice ,以向 Portcls註冊拓撲篩選器。 KSCATEGORY_AUDIO介面會建立為拓撲篩選準則註冊的結果。
當 建立KSCATEGORY_AUDIO 介面, 且 AudioEndpoint Builder 會建立並初始化相關聯的端點時,通知音訊堆疊,然後將其狀態設定為使用中。
驅動程式會向 Portcls 註冊波浪篩選器,並通知音訊堆疊。
驅動程式會呼叫 PcRegisterPhysicalConnection ,以將波篩選器與拓撲篩選器連線。 然後,此實體連線會向 Portcls 註冊。
驅動程式會將 KSJACK_DESCRIPTION 結構的 IsConnected 成員設定為 TRUE ,以指出裝置已插入插接器。
注意 如果音訊裝置缺少插孔存在偵測, IsConnected 成員必須一律為 TRUE。 若要確認裝置是否支援插接狀態偵測,用戶端應用程式可以呼叫 IKsJackDescription2::GetJackDescription2 來讀取 KSJACK_DESCRIPTION2 結構的 JackCapabilities 旗標。 如果此旗標已設定JACKDESC2_PRESENCE_DETECT_CAPABILITY位,則表示端點支援插機狀態偵測。 在此情況下, IsConnected 成員的傳回值可以解譯為插接器插入狀態的精確反映。
下列步驟說明載入驅動程式時,沒有插入到插接器中的音訊裝置會發生什麼情況:
驅動程式會使用插接狀態偵測來判斷沒有裝置插入插接器。 但是它會向埠cl 註冊拓撲篩選,並建立 KSCATEGORY_AUDIO 介面。
建立 KSCATEGORY_AUDIO 介面時,系統會通知音訊堆疊。 AudioEndpointBuilder 會查詢迷你埠驅動程式,以從 KSJACK_DESCRIPTION 屬性判斷是否要將端點的狀態設定為未叢集。
驅動程式會將KSJACK_DESCRIPTION結構的IsConnected成員設定為FALSE,表示沒有裝置插入插接器。
如需音訊端點不同狀態的詳細資訊,請參閱 音訊端點產生器演算法。
為了符合上述子裝置註冊和取消註冊程式的描述,支援插接狀態偵測的裝置驅動程式必須以下列方式回應,以回應插入和移除:
插入插入的裝置驅動程式回應
驅動程式必須呼叫 PcRegisterSubdevice ,才能向 Portcls 註冊波浪篩選器。 注意 驅動程式已在拓撲篩選器上呼叫 PcRegisterSubdevice ,當驅動程式載入時,未將任何裝置插入到插接器中。
驅動程式必須呼叫 PcRegisterPhysicalConnection ,以向 Portcls 註冊「波對拓撲篩選」連線。
驅動程式必須將KSJACK_DESCRIPTION結構的IsConnected成員設定為TRUE。
裝置驅動程式回應外掛程式移除
驅動程式必須呼叫 IUnregisterPhysicalConnection::UnregisterPhysicalConnection ,才能取消註冊波浪篩選與拓撲篩選之間的實體連線。
驅動程式必須呼叫 IUnregisterSubdevice::UnregisterSubdevice ,才能取消註冊波篩選器。
驅動程式必須設定KSJACK_DESCRIPTION結構FALSE的IsConnected成員。