Registro y anulación del registro dinámicos de subdispositivos
Los dispositivos que admiten alguna forma de detección de presencia de jack se denominan dispositivos dinámicos y sus conectores deben admitir la propiedad KSPROPERTY_JACK_DESCRIPTION . En los pasos siguientes se muestra el algoritmo que usa el controlador de un dispositivo dinámico para crear, registrar o anular el registro de los subdispositivos asociados para estos dispositivos dinámicos. Los subdispositivos se crean en forma de filtros.
Los pasos siguientes muestran lo que sucede cuando hay un dispositivo de audio conectado al conector cuando se carga el controlador de dispositivo de audio:
El controlador usa la detección de presencia de jack para determinar que hay un dispositivo conectado al conector. El controlador llama a PcRegisterSubdevice para registrar un filtro de topología con Portcls. Se crea una interfaz KSCATEGORY_AUDIO como resultado del registro del filtro de topología.
La pila de audio se notifica cuando se crea la interfaz de KSCATEGORY_AUDIO y audioEndpoint Builder crea e inicializa un punto de conexión asociado y, a continuación, establece su estado en activo.
El controlador registra un filtro de onda con Portcls y se notifica a la pila de audio.
El controlador llama a PcRegisterPhysicalConnection para conectar el filtro de onda con el filtro de topología. Después, esta conexión física se registra con Portcls.
El controlador establece el miembro IsConnected de la estructura KSJACK_DESCRIPTION en TRUE para indicar que hay un dispositivo conectado al conector.
Nota Si el dispositivo de audio carece de detección de presencia de jack, el miembro IsConnected siempre debe ser TRUE. Para confirmar si el dispositivo admite la detección de presencia de jack, una aplicación cliente puede llamar a IKsJackDescription2::GetJackDescription2 para leer la marca JackCapabilities de la estructura de KSJACK_DESCRIPTION2 . Si esta marca tiene establecido el bit JACKDESC2_PRESENCE_DETECT_CAPABILITY, indica que el punto de conexión admite la detección de presencia de jack. En ese caso, el valor devuelto del miembro IsConnected se puede interpretar como una reflexión precisa del estado de inserción del conector.
En los pasos siguientes se explica lo que sucede si no hay ningún dispositivo de audio conectado al conector cuando se carga el controlador:
El controlador usa la detección de presencia de jack para determinar que no hay ningún dispositivo conectado al conector. Pero registra un filtro de topología con Portcls para el conector y se crea una interfaz KSCATEGORY_AUDIO .
La pila de audio se notifica cuando se crea la interfaz KSCATEGORY_AUDIO . AudioEndpointBuilder consulta el controlador de minipuerto para determinar desde la propiedad KSJACK_DESCRIPTION si se va a establecer el estado del punto de conexión como desconectado.
El controlador establece el miembro IsConnected de la estructura de KSJACK_DESCRIPTION en FALSE para indicar que no hay ningún dispositivo conectado al conector.
Para obtener más información sobre los distintos estados de un punto de conexión de audio, consulte Algoritmo del Generador de puntos de conexión de audio.
Para cumplir con la descripción anterior de los procesos de registro y anulación del registro de subdispositivos, los controladores de dispositivos que admiten la detección de presencia de jack deben reaccionar de la siguiente manera, en respuesta a la inserción y eliminación de enchufes:
Respuesta del controlador de dispositivo a una inserción de enchufe
El controlador debe llamar a PcRegisterSubdevice para registrar un filtro de onda con Portcls. Nota El controlador ya llamado PcRegisterSubdevice en el filtro de topología cuando el controlador se cargó sin ningún dispositivo conectado al conector.
El controlador debe llamar a PcRegisterPhysicalConnection para registrar la conexión "filtro de topología de onda" con Portcls.
El controlador debe establecer el miembro IsConnected de la estructura KSJACK_DESCRIPTION en TRUE.
Respuesta del controlador de dispositivo a una eliminación de enchufes
El controlador debe llamar a IUnregisterPhysicalConnection::UnregisterPhysicalConnection para anular el registro de la conexión física entre el filtro de onda y el filtro de topología.
El controlador debe llamar a IUnregisterSubdevice::UnregisterSubdevice para anular el registro del filtro de onda.
El controlador debe establecer el miembro IsConnected de la estructura KSJACK_DESCRIPTIONFALSE.