Registrazione e annullamento della registrazione del sottodispositivo dinamico
I dispositivi che supportano una forma di rilevamento della presenza di jack sono denominati dispositivi dinamici e i relativi jack devono supportare la proprietà KSPROPERTY_JACK_DESCRIPTION . I passaggi seguenti illustrano l'algoritmo usato dal driver di un dispositivo dinamico per creare, registrare o annullare la registrazione dei sottodispositivi associati per questi dispositivi dinamici. I sottodispositivi vengono creati sotto forma di filtri.
I passaggi seguenti mostrano cosa accade quando è presente un dispositivo audio collegato al jack quando viene caricato il driver di dispositivo audio:
Il driver usa il rilevamento della presenza jack per determinare che è presente un dispositivo collegato al jack. Il driver chiama PcRegisterSubdevice per registrare un filtro di topologia con Portcls. Un'interfaccia KSCATEGORY_AUDIO viene creata in seguito alla registrazione del filtro della topologia.
Lo stack audio riceve una notifica quando viene creata l'interfaccia KSCATEGORY_AUDIO e il Generatore AudioEndpoint crea e inizializza un endpoint associato e quindi ne imposta lo stato su attivo.
Il driver registra un filtro d'onda con Portcls e lo stack audio riceve una notifica.
Il driver chiama PcRegisterPhysicalConnection per connettere il filtro wave con il filtro della topologia. Questa connessione fisica viene quindi registrata con Portcls.
Il driver imposta il membro IsConnected della struttura KSJACK_DESCRIPTION su TRUE per indicare che è presente un dispositivo collegato al jack.
Nota Se il dispositivo audio non rileva la presenza del jack, il membro IsConnected deve sempre essere TRUE. Per verificare se il dispositivo supporta il rilevamento della presenza jack, un'applicazione client può chiamare IKsJackDescription2::GetJackDescription2 per leggere il flag JackCapabilities della struttura KSJACK_DESCRIPTION2 . Se questo flag ha il JACKDESC2_PRESENCE_DETECT_CAPABILITY bit impostato, indica che l'endpoint supporta il rilevamento della presenza di jack. In tal caso, il valore restituito del membro IsConnected può essere interpretato come un riflesso accurato dello stato di inserimento del jack.
La procedura seguente spiega cosa accade se non è presente alcun dispositivo audio collegato al jack quando il driver viene caricato:
Il driver usa il rilevamento della presenza jack per determinare che non vi è alcun dispositivo collegato al jack. Registra tuttavia un filtro di topologia con Portcls per il jack e viene creata un'interfaccia KSCATEGORY_AUDIO .
Lo stack audio riceve una notifica quando viene creata l'interfaccia KSCATEGORY_AUDIO . AudioEndpointBuilder esegue una query sul driver miniport per determinare dalla proprietà KSJACK_DESCRIPTION se impostare lo stato dell'endpoint come scollegato.
Il driver imposta il membro IsConnected della struttura KSJACK_DESCRIPTION su FALSE per indicare che non è presente alcun dispositivo collegato al jack.
Per altre informazioni sui diversi stati di un endpoint audio, vedere Algoritmo di Generatore di endpoint audio.
Per rispettare la descrizione precedente dei processi di registrazione e annullamento della registrazione del sottodispositivo, i driver di dispositivi che supportano il rilevamento della presenza di jack devono reagire nel modo seguente, in risposta all'inserimento e alla rimozione di plug:
Risposta del driver di dispositivo a un inserimento plug
Il driver deve chiamare PcRegisterSubdevice per registrare un filtro d'onda con Portcls. Nota Il driver già chiamato PcRegisterSubdevice nel filtro della topologia quando il driver è stato caricato senza alcun dispositivo collegato al jack.
Il driver deve chiamare PcRegisterPhysicalConnection per registrare la connessione "wave topology filter" con Portcls.
Il driver deve impostare il membro IsConnected della struttura KSJACK_DESCRIPTION su TRUE.
Risposta del driver di dispositivo a una rimozione del plug
Il driver deve chiamare IUnregisterPhysicalConnection::UnregisterPhysicalConnection per annullare la registrazione della connessione fisica tra il filtro wave e il filtro della topologia.
Il driver deve chiamare IUnregisterSubdevice::UnregisterSubdevice per annullare la registrazione del filtro wave.
Il driver deve impostare il membro IsConnected della struttura KSJACK_DESCRIPTIONFALSE.