Inscription et annulation de l’inscription dynamique des sous-appareils
Les appareils qui prennent en charge une certaine forme de détection de présence de prise sont appelés appareils dynamiques, et leurs prises doivent prendre en charge la propriété KSPROPERTY_JACK_DESCRIPTION . Les étapes suivantes montrent l’algorithme utilisé par le pilote d’un périphérique dynamique pour créer, inscrire ou annuler l’inscription des sous-appareils associés pour ces appareils dynamiques. Les sous-appareils sont créés sous la forme de filtres.
Les étapes suivantes montrent ce qui se passe lorsqu’un périphérique audio est branché à la prise lorsque le pilote de périphérique audio est chargé :
Le pilote utilise la détection de présence de prise pour déterminer qu’un appareil est branché sur la prise. Le pilote appelle PcRegisterSubdevice pour inscrire un filtre de topologie avec Portcls. Une interface KSCATEGORY_AUDIO est créée à la suite de l’inscription du filtre de topologie.
La pile audio est avertie lorsque l’interface KSCATEGORY_AUDIO est créée et que le générateur AudioEndpoint crée et initialise un point de terminaison associé, puis définit son état sur actif.
Le pilote enregistre un filtre d’ondes avec Portcls et la pile audio est avertie.
Le pilote appelle PcRegisterPhysicalConnection pour connecter le filtre d’ondes au filtre de topologie. Cette connexion physique est ensuite inscrite auprès de Portcls.
Le pilote définit le membre IsConnected de la structure KSJACK_DESCRIPTION sur TRUE pour indiquer qu’un appareil est branché à la prise.
Note Si le périphérique audio n’a pas de détection de présence de prise, le membre IsConnected doit toujours avoir la valeur TRUE. Pour vérifier si l’appareil prend en charge la détection de présence de prise, une application cliente peut appeler IKsJackDescription2::GetJackDescription2 pour lire l’indicateur JackCapabilities de la structure KSJACK_DESCRIPTION2 . Si cet indicateur a le JACKDESC2_PRESENCE_DETECT_CAPABILITY bit défini, il indique que le point de terminaison prend en charge la détection de présence de prise. Dans ce cas, la valeur de retour du membre IsConnected peut être interprétée comme une réflexion précise de la status d’insertion de la prise.
Les étapes suivantes expliquent ce qui se passe si aucun périphérique audio n’est branché sur la prise lorsque le pilote est chargé :
Le pilote utilise la détection de présence de prise pour déterminer qu’aucun appareil n’est branché sur la prise. Mais il inscrit un filtre de topologie avec Portcls pour la prise, et une interface KSCATEGORY_AUDIO est créée.
La pile audio est avertie lorsque l’interface KSCATEGORY_AUDIO est créée. AudioEndpointBuilder interroge le pilote miniport pour déterminer, à partir de la propriété KSJACK_DESCRIPTION , s’il faut définir l’état du point de terminaison comme étant débranché.
Le pilote définit le membre IsConnected de la structure KSJACK_DESCRIPTION sur FALSE pour indiquer qu’aucun appareil n’est branché sur la prise.
Pour plus d’informations sur les différents états d’un point de terminaison audio, consultez Algorithme du générateur de points de terminaison audio.
Pour se conformer à la description précédente des processus d’inscription et de désinscription des sous-appareils, les pilotes de périphériques qui prennent en charge la détection de présence de prise doivent réagir de la manière suivante, en réponse à l’insertion et à la suppression de la fiche :
Réponse du pilote de périphérique à une insertion de plug
Le pilote doit appeler PcRegisterSubdevice pour inscrire un filtre d’ondes avec Portcls. Note Le pilote a déjà appelé PcRegisterSubdevice sur le filtre de topologie lorsque le pilote a été chargé sans périphérique branché sur la prise.
Le pilote doit appeler PcRegisterPhysicalConnection pour inscrire la connexion « wave to topology filter » auprès de Portcls.
Le pilote doit définir le membre IsConnected de la structure KSJACK_DESCRIPTION sur TRUE.
Réponse du pilote de périphérique à une suppression de plug
Le pilote doit appeler IUnregisterPhysicalConnection::UnregisterPhysicalConnection pour annuler l’inscription de la connexion physique entre le filtre d’ondes et le filtre de topologie.
Le pilote doit appeler IUnregisterSubdevice::UnregisterSubdevice pour annuler l’inscription du filtre d’ondes.
Le pilote doit définir le membre IsConnected de la structure KSJACK_DESCRIPTIONFALSE.