Circuitos ACX
En este tema se describen los circuitos ACX. Para obtener información general sobre ACX y la lista de términos de ACX, consulte Información general sobre las extensiones de clase de audio ACX.
Como se describe en Resumen de objetos ACX, un objeto AcxCircuit representa una ruta de audio parcial o completa a un dispositivo de audio percibido por el usuario (altavoces, micrófonos, etc.). Un AcxCircuit tiene al menos un pin de entrada y un pin de salida (ACXPIN) y puede agregar uno o varios objetos similares a AcxElements. El circuito representa un punto de conexión existente y sus funcionalidades.
Una secuencia de ACX es un componente de controlador que se crea para representar una secuencia de audio, creada por un circuito. La secuencia se compone de una lista de elementos creados en función de los elementos del circuito primario. Un circuito de secuencia es un circuito en una arquitectura de multi-pila (ruta de audio parcial) que interactúa directamente con el servicio de streaming en modo de usuario superior. Un circuito principal es un circuito en una arquitectura de multi-pila (ruta de audio parcial) que proporciona la identidad del dispositivo de punto de conexión de audio.
Identificación del circuito ACX
Cada circuito ACX tiene un identificador de circuito. ACX define lo siguiente:
Nombre (str), identifica de forma única este tipo de dispositivo de audio del circuito. Se usa para localizar la configuración de INF y forma parte del vínculo simbólico que se usa para acceder a este circuito desde un dispositivo remoto. Ejemplo: "Render0", "Render1" o "Capture0".
Vínculo simbólico. Un vínculo simbólico está asociado a todos los circuitos expuestos. Los clientes usan este vínculo simbólico para abrir una ruta de comunicación con el dispositivo o circuito.
Identificador de componente (guid) del circuito. Identifica de forma única la instancia del circuito (específica del proveedor). No se puede usar en los enlaces AcxCircuitTemplate si se especificó el URI del circuito.
URI de componente (str) del circuito. Identifica de forma única la instancia del circuito (específica del proveedor). No se puede usar en los enlaces AcxCircuitTemplate si se especificó el identificador del circuito.
Identificador de componente (guid) de fábrica del circuito. Identifica de forma única la instancia de fábrica del circuito (específica del proveedor). No se puede usar en los enlaces AcxCircuitTemplate si se especificó el URI de fábrica del circuito.
URI de componente de fábrica del circuito (str). Identifica de forma única la instancia de fábrica del circuito (específica del proveedor). No se puede usar en los enlaces AcxCircuitTemplate si se especificó el identificador de fábrica del circuito.
AcxCircuitCreate
La función AcxCircuitCreate se usa para crear un ACXCIRCUIT. Estructura ACXCIRCUIT_INIT opaca que usa la función AcxCircuitCreate. AcxCircuitInitAllocate se usa para inicializar la estructura ACXCIRCUIT_INIT.
AcxFactoryCircuit
Un controlador ACX también puede crear objetos AcxFactoryCircuit (proveedores de circuitos) durante la secuencia de encendido mediante la función AcxFactoryCircuitCreate y la función AcxDeviceAddFactoryCircuit.
Composición de circuitos ACX
ACX enlaza los circuitos hasta que forman una ruta de audio completa. ACX usa enlaces de audio para conectar circuitos de audio. Para obtener más información, consulte Composición de varios circuitos ACX.
Creación del circuito dinámico de ACX (en cualquier momento)
ACX puede crear un circuito dinámico a petición. Para ello, el controlador asigna una estructura WDFDEVICE_INIT llamando a WdfPdoInitAllocate. Luego, el controlador indica las devoluciones de llamada de PnP/consumo de energía que quiere recibir y crea el dispositivo. El controlador crea una instancia del nuevo dispositivo o circuito llamando a AcxDeviceAddCircuitDevice. Para obtener más información, consulte Enumeración de dispositivos ACX.
Eliminación del circuito dinámico de ACX
El controlador invoca a AcxDeviceRemoveCircuitDevice para quitar el dispositivo de audio de la lista de dispositivos. Esto desencadena la secuencia de apagado en la entidad del circuito/dispositivo de circuito ACX. El dispositivo o circuito del circuito se elimina de forma asincrónica. Para obtener más información, consulte Enumeración de dispositivos ACX.
AcxDeviceRemoveCircuit y AcxDeviceDetachCircuit
Hay dos maneras comunes de administrar la terminación del circuito. AcxDeviceDetachCircuit o AcxDeviceRemoveCircuit.
Si el llamador invoca AcxDeviceDetachCircuit no debe llamar a AcxDeviceRemoveCircuit. Si el controlador de llamada desea eliminar el circuito después de AcxDeviceDetachCircuit, debe usar WdfObjectDelete.
Al llamar a AcxDeviceRemoveCircuit , el controlador de llamada indica a ACX que quite este circuito y lo elimine del dispositivo. En este caso, no es necesario llamar a WdfObjectDelete en el circuito.
En resumen, AcxDeviceDetachCircuit significa que el controlador posee la administración de la duración de los objetos del circuito, AcxDeviceRemoveCircuit significa que el circuito se quitará y eliminará.
Para obtener información general sobre la administración de la duración de objetos de WDF, consulte Ciclo de vida de objetos de marco.
AcxDeviceRemoveCircuitDevice
A diferencia de la terminación de circuitos descrita anteriormente, el controlador de audio usa AcxDeviceRemoveCircuitDevice para quitar un punto de conexión de audio existente y se puede llamar en cualquier momento durante el ciclo de vida del controlador.
Los controladores también pueden optar por destruir y volver a crear dispositivos de audio al reequilibrar. Este es el mismo escenario anterior cuando el dispositivo detecta que la nueva configuración no es compatible con las anteriores.
La eliminación del circuito debe realizarse en las devoluciones de llamada EvtDevicePrepareHardware/EvtDeviceReleaseHardware y el nuevo circuito se vuelve a crear en EvtDevicePrepareHardware. El controlador elimina un circuito anulando el registro del circuito (mediante AcxDeviceRemoveCircuit).
Función de devolución de llamada EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEASE_HARDWARE)
Si un controlador ha registrado una función de devolución de llamada EvtAcxCircuitReleaseHardware, el marco la llama durante las transiciones siguientes:
- Reequilibrio de recursos
- Eliminación ordenada
- Eliminación por sorpresa
El marco de ACX llama a la función de devolución de llamada EvtAcxCircuitReleaseHardware después de que el marco de WDF haya dejado de enviar solicitudes de E/S al dispositivo, las interrupciones asignadas al dispositivo se han deshabilitado y desconectado, y el dispositivo se ha desactivado.
El marco de ACX llama a la función de devolución de llamada EvtAcxCircuitReleaseHardware antes de que el marco WDF llame a la función de devolución de llamada EvtDeviceReleaseHardware del controlador.
Cuando el marco llama a EvtAcxCircuitReleaseHardware, el PDO para el dispositivo sigue existiendo y se puede consultar para obtener información del dispositivo que está disponible en el estado de apagado, por ejemplo, estado de configuración PCI.
Además, los recursos de hardware traducidos que el marco proporciona a EvtDeviceReleaseHardware se siguen asignando al dispositivo. El propósito principal de esta función de devolución de llamada es liberar esos recursos y, en particular, desasignar los recursos de memoria asignados a la función de devolución de llamada EvtAcxCircuitPrepareHardware del controlador. El controlador también puede usar esta devolución de llamada para realizar cualquier otra actividad de administración de ACXCIRCUIT que pueda ser necesaria en el estado de apagado. Normalmente, todas las demás operaciones de apagado de hardware deben realizarse en la función de devolución de llamada EvtDeviceD0Exit del controlador.
El marco ACX siempre llama a la función de devolución de llamada EvtAcxCircuitReleaseHardware del controlador si se ha llamado a la función de devolución de llamada EvtAcxCircuitPrepareHardware del controlador, a menos que EvtAcxCircuitPrepareHardware devuelva un código de error.
Para obtener más información sobre los recursos de hardware, consulte Introducción a los recursos de hardware.
Función de devolución de llamada EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE)
Cuando el marco llama a EvtAcxCircuitReleaseHardware, el PDO para el dispositivo sigue existiendo y se puede consultar para obtener información del dispositivo que está disponible en el estado de apagado, por ejemplo, estado de configuración PCI.
Además, los recursos de hardware traducidos que el marco proporciona a EvtDeviceReleaseHardware se siguen asignando al dispositivo. El propósito principal de esta función de devolución de llamada es liberar esos recursos y, en particular, desasignar los recursos de memoria asignados a la función de devolución de llamada EvtAcxCircuitPrepareHardware del controlador. El controlador también puede usar esta devolución de llamada para realizar cualquier otra actividad de administración de ACXCIRCUIT que pueda ser necesaria en el estado de apagado. Normalmente, todas las demás operaciones de apagado de hardware deben realizarse en la función de devolución de llamada EvtDeviceD0Exit del controlador.
El marco ACX siempre llama a la función de devolución de llamada EvtAcxFactoryCircuitReleaseHardware del controlador si se ha llamado a la función de devolución de llamada EvtAcxFactoryCircuitPrepareHardware del controlador, a menos que EvtAcxFactoryCircuitPrepareHardware devuelva un código de error.
Para obtener más información sobre cómo administrar objetos de WDF y de circuito, consulte Administración de la vida útil del controlador de ACX WDF.
Consulte también
Información general sobre las extensiones de clase de audio de ACX
Comunicaciones entre controladores de varias pilas de ACX