Circuiti ACX
Questo argomento illustra i circuiti ACX. Per una panoramica generale di ACX e dell'elenco dei termini ACX, vedere Panoramica delle estensioni della classe audio ACX.
Come descritto in Riepilogo degli oggetti ACX, un oggetto AcxCircuit rappresenta un percorso audio parziale o completo a un dispositivo audio percepito dall'utente (altoparlanti, microfoni e così via). AcxCircuit ha almeno un pin di input e un pin di output (ACXPIN) e può aggregare uno o più AcxElement come oggetti. Il circuito rappresenta un endpoint esistente e le relative funzionalità.
E ACX Stream è un componente driver creato per rappresentare un flusso audio, creato da un circuito. Il flusso è costituito da un elenco di elementi creati in base agli elementi del circuito padre. Un circuito di flusso è un circuito in un'architettura multistack (percorso audio parziale) che si interfaccia direttamente con il servizio di streaming in modalità utente superiore. Un circuito Core è un circuito in un'architettura multistack (percorso audio parziale) che fornisce l'identità del dispositivo endpoint audio.
Identificazione del circuito ACX
Ogni circuito ACX ha un identificatore di circuito. ACX definisce quanto segue:
Nome (str), identifica in modo univoco questo tipo di dispositivo audio del circuito. Viene usato per individuare l'impostazione di INF ed è parte del collegamento simbolico usato per accedere a questo circuito da un dispositivo remoto. Esempio: "Render0", "Render1" o "Capture0".
Collegamento simbolico. Un collegamento simbolico è associato a tutti i circuiti esposti. I client usano questo collegamento simbolico per aprire un percorso di comunicazione con il dispositivo/circuito.
ID componente del circuito (guid). Identifica in modo univoco l'istanza del circuito (specifica del fornitore). Non può essere usato nelle associazioni AcxCircuitTemplate se è stato specificato l'URI del circuito.
URI componente del circuito (str). Identifica in modo univoco l'istanza del circuito (specifica del fornitore). Non può essere usato nelle associazioni AcxCircuitTemplate se è stato specificato l'ID circuito.
ID componente (GUID) di Circuit Factory. Identifica in modo univoco l'istanza della factory del circuito (specifica del fornitore). Non può essere usato nelle associazioni AcxCircuitTemplate se è stato specificato l'URI di Circuit Factory.
URI componente di Circuit Factory (str). Identifica in modo univoco l'istanza della factory del circuito (specifica del fornitore). Non può essere usato nelle associazioni AcxCircuitTemplate se è stato specificato l'ID factory del circuito.
AcxCircuitCreate
La funzione AcxCircuitCreate viene usata per creare un ACXCIRCUIT. Struttura ACXCIRCUIT_INIT opaca utilizzata dalla funzione AcxCircuitCreate. AcxCircuitInitAllocate viene usato per inizializzare la struttura ACXCIRCUIT_INIT.
AcxFactoryCircuit
Un driver ACX può anche creare oggetti AcxFactoryCircuit (provider di circuiti) durante la sequenza di alimentazione usando la funzione AcxFactoryCircuitCreate e la funzione AcxDeviceAddFactoryCircuit.
Composizione del circuito ACX
ACX associa i circuiti fino a quando non formano un percorso audio completo. ACX usa associazioni audio per connettere i circuiti audio tra loro. Per altre informazioni, vedere Composizione multicircuito ACX.
Creazione dinamica del circuito ACX (in qualsiasi momento)
ACX può creare un circuito dinamico su richiesta. A tale scopo, il driver alloca una struttura WDFDEVICE_INIT chiamando WdfPdoInitAllocate. Il driver specifica quindi qualsiasi callback di alimentazione/PnP che vuole ricevere e crea il dispositivo. Il driver crea un'istanza del nuovo dispositivo/circuito chiamando AcxDeviceAddCircuitDevice. Per altre informazioni, vedere enumerazione del dispositivo ACX.
Rimozione dinamica del circuito ACX
Il driver richiama AcxDeviceRemoveCircuitDevice per rimuovere il dispositivo audio dall'elenco dei dispositivi. In questo modo viene attivata la sequenza di risparmio di energia nell'entità circuito/circuito ACX. Il dispositivo/circuito del circuito viene eliminato in modo asincrono. Per altre informazioni, vedere enumerazione del dispositivo ACX.
AcxDeviceRemoveCircuit e AcxDeviceDetachCircuit
Esistono due modi comuni per gestire la terminazione del circuito. AcxDeviceDetachCircuit o AcxDeviceRemoveCircuit.
Se il chiamante richiama AcxDeviceDetachCircuit, non deve chiamare AcxDeviceRemoveCircuit. Se il driver chiamante vuole eliminare il circuito dopo AcxDeviceDetachCircuit, deve usare WdfObjectDelete.
Chiamando AcxDeviceRemoveCircuit, il driver chiamante indica ad ACX di rimuovere questo circuito e rimuoverlo/eliminarlo dal dispositivo. In questo caso non è necessario chiamare WdfObjectDelete sul circuito.
In sintesi, AcxDeviceDetachCircuit significa che il driver è proprietario della gestione della durata degli oggetti circuito, AcxDeviceRemoveCircuit significa che il circuito verrà rimosso ed eliminato.
Per informazioni generali sulla gestione della durata degli oggetti WDF, vedere Ciclo di vita degli oggetti framework.
AcxDeviceRemoveCircuitDevice
Diversa dalla terminazione del circuito descritta in precedenza, AcxDeviceRemoveCircuitDevice viene usato dal driver audio per rimuovere un endpoint audio esistente e può essere chiamato in qualsiasi momento durante il ciclo di vita del driver.
I driver possono anche scegliere di distruggere e ricreare sempre i dispositivi audio al ribilanciamento. Questo è lo stesso scenario precedente quando il dispositivo rileva che le nuove impostazioni non sono compatibili con quelle precedenti.
L'eliminazione del circuito deve essere eseguita in EvtDevicePrepareHardware/EvtDeviceReleaseHardware callback e il nuovo circuito viene ricreato in EvtDevicePrepareHardware. Il driver elimina un circuito annullando la registrazione del circuito (usando AcxDeviceRemoveCircuit).
Funzione di callback EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEA edizione Standard_HARDWARE)
Se un driver ha registrato una funzione di callback EvtAcxCircuitReleaseHardware, il framework lo chiama durante le transizioni seguenti:
- Ribilanciamento delle risorse
- Rimozione ordinata
- Rimozione a sorpresa
Il framework ACX chiama la funzione di callback EvtAcxCircuitReleaseHardware dopo che il framework WDF ha interrotto l'invio di richieste di I/O al dispositivo, eventuali interrupt assegnati al dispositivo sono stati disabilitati e disconnessi e il dispositivo è stato disattivato.
Il framework ACX chiama la funzione di callback EvtAcxCircuitReleaseHardware prima che il framework WDF chiami la funzione di callback EvtDeviceReleaseHardware del driver.
Quando il framework chiama EvtAcxCircuitReleaseHardware il PDO per il dispositivo esiste ancora e può essere sottoposto a query per le informazioni sul dispositivo disponibili nello stato spento, ad esempio lo stato di configurazione PCI.
Inoltre, le risorse hardware tradotte fornite dal framework a EvtDeviceReleaseHardware sono ancora assegnate al dispositivo. Lo scopo principale di questa funzione di callback è rilasciare tali risorse e in particolare per annullare il mapping delle risorse di memoria mappate dalla funzione di callback EvtAcxCircuitPrepareHardware del driver. Il driver può anche usare questo callback per eseguire qualsiasi altra attività di gestione ACXCIRCUIT che potrebbe essere necessaria nello stato spento. In genere, tutte le altre operazioni di arresto hardware devono essere eseguite nella funzione di callback EvtDeviceD0Exit del driver.
Il framework ACX chiama sempre la funzione di callback EvtAcxCircuitReleaseHardware del driver se è stata chiamata la funzione di callback EvtAcxCircuitPrepareHardware del driver, a meno che evtAcxCircuitPrepareHardware non abbia restituito un codice di errore.
Per altre informazioni sulle risorse hardware, vedere Introduzione alle risorse hardware.
Funzione di callback EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEA edizione Standard_HARDWARE)
Quando il framework chiama evtAcxFactoryCircuitReleaseHardware il PDO per il dispositivo esiste ancora e può essere sottoposto a query per le informazioni sul dispositivo disponibili nello stato spento, ad esempio lo stato di configurazione PCI.
Inoltre, le risorse hardware tradotte fornite dal framework a EvtDeviceReleaseHardware sono ancora assegnate al dispositivo. Lo scopo principale di questa funzione di callback è rilasciare tali risorse e in particolare per annullare il mapping delle risorse di memoria mappate dalla funzione di callback EvtAcxCircuitPrepareHardware del driver. Il driver può anche usare questo callback per eseguire qualsiasi altra attività di gestione ACXCIRCUIT che potrebbe essere necessaria nello stato spento. In genere, tutte le altre operazioni di arresto hardware devono essere eseguite nella funzione di callback EvtDeviceD0Exit del driver.
Il framework ACX chiama sempre la funzione di callback EvtAcxFactoryCircuitReleaseHardware del driver se è stata chiamata la funzione di callback EvtAcxFactoryCircuitPrepareHardware del driver, a meno che non venga restituito un codice di errore.
Per altre informazioni sulla gestione di oggetti WDF e circuiti, vedere Gestione della durata dei driver WDF ACX.
Vedi anche
Panoramica delle estensioni della classe audio ACX
Comunicazioni tra driver multi stack ACX