Condividi tramite


Enumerazione del dispositivo ACX

Questo argomento illustra l'enumerazione del dispositivo ACX, l'avvio e l'arresto e il ribilanciamento del dispositivo. Per una panoramica generale di ACX, vedere Panoramica delle estensioni della classe audio ACX. Per informazioni sul risparmio energia ACX e PnP, vedere Risparmio energia ACX.

Enumerazione e avvio di dispositivi ACX per dispositivi audio statici

Per informazioni sul funzionamento dell'avvio di ACX, verrà descritto lo scenario seguente.

  • Un dispositivo audio è rappresentato da un singolo circuito.
  • Una durata audio/circuito è associata alla durata del dispositivo PnP.
  • Un singolo dispositivo può creare più circuiti per dispositivi audio diversi.
  • Ambiente in modalità kernel kmDF.

La sequenza di avvio è:

  • Driver WDMEntry. Ambito driver. Routine driverEntry per i driver WDF

    • Traccia init.
    • Facoltativamente, eseguire la registrazione per scaricare.
    • Creare WDFDRIVER.
    • Chiama ACX per eseguire qualsiasi inserimento del driver.
    • Facoltativamente, eseguire qualsiasi post driver init.
  • Dispositivo WDFAggiungi. Ambito dispositivo. EVT_WDF_DRIVER_DEVICE_ADD funzione di callback

    • Chiamare ACX per init context del dispositivo - ACX_DEVICEINIT_CONFIG_INIT(&devInitCfg) ACX_DEVICEINIT_CONFIG_INIT funzione
    • Registrare i callback di Power Power PnP di WDF - WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpPowerCallbacks);
    • Creare un dispositivo con AcxDeviceInitialize
    • Chiama ACX per eseguire qualsiasi inserimento del dispositivo.
    • Facoltativamente, eseguire qualsiasi inserimento del dispositivo.
  • WDF PrepareHardware. Ambito dispositivo. EVT_WDF_DEVICE_PREPARE_HARDWARE funzione di callback.

    • Creare e init risorse hardware (per interrupt e thread, registrarli con ACX).

    • Creare uno o più circuiti (una sola volta).

      • Creare un contesto AcxCircuitInit.
      • Aggiungere callback.
      • Creare un AcxCircuit.
      • Facoltativamente, eseguire qualsiasi init post circuito.
      • Registrare il circuito con AcxDeviceAddCircuitDevice.
  • Callback voce D0 dispositivo WDF. Ambito dispositivo. EVT_WDF_DEVICE_D0_ENTRY funzione di callback.

  • ACX richiama il callback EvtAcxCircuitPowerUp su tutti i circuiti. Ambito circuito.

  • ACX Sposta i flussi (se presenti) sullo stato precedente prima che il dispositivo fosse spento. Ambito dell'istanza di flusso.

  • Le code WDF vengono riavviate.

  • EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT funzione di callback. Ambito dispositivo.

  • EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART funzione di callback. Ambito dispositivo. - Init dopo ogni accensione da Dx.

Aggiunta di flusso ACX

  • AcX Stream Add (instance) on ACX Circuit (ACX callback on ACX circuits) –in any time after the WDF self-managed I/O Init or Restart is invoked and device is in D0 . Ambito circuito.
    • Input: contesto AcxStreamInit, ACXCIRCUIT.
    • Aggiungere callback.
    • Creare un oggetto AcxStream (istanza).
    • Facoltativamente, eseguire qualsiasi init dell'istanza di post-stream.
    • Al ritorno, ACX attiva questa istanza di flusso e, poiché in questo scenario è l'unica nel percorso audio, consente di trasmettere i messaggi in streaming.

Enumerazione e avvio di dispositivi ACX per dispositivi audio dinamici

In questo scenario si presuppone quanto segue.

  • Supporto audio dinamico (creazione/eliminazione di dispositivi audio in fase di esecuzione).
  • La durata del dispositivo non è associata alla durata del circuito.
  • Un singolo dispositivo può creare più circuiti per dispositivi audio diversi.
  • Piggyback sul modello statico semplice descritto in precedenza aggiungendo solo elementi specifici del modello dinamico.
  • Usa pdo non elaborati figlio.
  • Ambiente in modalità kernel kmDF.

La sequenza di avvio per questo scenario è:

  • Driver WDMEntry. Ambito driver.

    • Traccia init.
    • Facoltativamente, eseguire la registrazione per scaricare.
    • Creare WDFDRIVER.
    • Chiama ACX per eseguire qualsiasi inserimento del driver.
    • Facoltativamente, eseguire qualsiasi post driver init.
  • Dispositivo WDFAggiungi. Ambito dispositivo.

    • Chiamare ACX per init del contesto init del dispositivo.
    • Creare un dispositivo.
    • Chiama ACX per eseguire qualsiasi inserimento del dispositivo.
    • Facoltativamente, eseguire qualsiasi inserimento del dispositivo.
  • WDF PrepareHardware. Ambito dispositivo.

    • Creare e init risorse hardware (per interrupt e thread, registrarli con ACX).
  • Callback voce D0 dispositivo WDF. Ambito dispositivo.

  • Le code WDF vengono riavviate.

  • WDF DeviceSelfManagedIoInit. Ambito dispositivo.

  • Dispositivo WDFSelfManagedIoRestart. Ambito dispositivo.

    • Init dopo ogni accensione da Dx.

Creazione dinamica del circuito (in qualsiasi momento)

  • Il driver alloca una struttura WDFDEVICE_INIT chiamando WdfPdoInitAllocate. Il driver è responsabile della chiamata di WdfDeviceInitFree se si verificano errori prima di creare correttamente un dispositivo.
  • Il driver specifica i callback PnP/power che desidera ricevere.
  • Il driver crea un dispositivo.
  • Il driver crea un'istanza del nuovo dispositivo/circuito chiamando AcxDeviceAddCircuitDevice.
  • WDF/PnP assume il controllo e viene eseguito il semplice modello di enumerazione/avvio descritto nella sezione precedente.

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.

Poiché il driver ACX registrato con ACX come factory del circuito, il framework ACX usa la factory registrata per chiedere al driver di creare un nuovo circuito.

AcxFactoryCircuitCreate(Device, &attributes, &factoryInit, &factory);

AcxDeviceAddFactoryCircuit(Device, factory);

Ribilanciamento del dispositivo ACX

Il ribilanciamento viene eseguito quando l'utilizzo delle risorse di sistema richiede al sistema operativo di ribilanciare le risorse tra i dispositivi. Per informazioni generali sul ribilanciamento, vedere Implementare il ribilanciamento PnP per i driver audio PortCls.

ACX supporta il ribilanciamento del dispositivo come indicato di seguito:

  • Nella sequenza WDF/ACX di risparmio energia, il driver rilascia tutte le risorse di streaming (EvtAcxStreamPowerDown, EvtAcxStreamReleaseHardware), le risorse del circuito (EvtAcxCircuitPowerDown, EvtAcxCircuitReleaseHardware) e le risorse del dispositivo (EvtDeviceReleaseHardware).

  • Tutte le richieste vengono sospese e gli handle vengono lasciati aperti.

  • Nella sequenza di alimentazione WDF/ACX, il driver verifica che le nuove risorse siano compatibili con quelle correnti e apporta eventuali modifiche consentite alle relative impostazioni. Se le risorse non sono compatibili con l'inizializzazione corrente del dispositivo/circuito, il driver deve eliminare i circuiti correnti e crearne di nuovi. Vedere di seguito altre informazioni.

  • Nella sequenza di risparmio energia, WDF richiama la voce EvtDevicePrepareHardware e EvtDeviceD0 e ACX richiama il corrispondente EvtAcxCircuitPrepareHardware e EvtAcxCircuitPowerUp e sposta tutti i flussi negli stati preesistenti.

  • Non appena le code passano allo stato di accensione/esecuzione, il flusso di I/O viene nuovamente eseguito.

ACX non consente la rimozione (non riesce a rimuovere query) o il ribilanciamento (non riesce a eseguire query-stop) se sono presenti flussi in stato attivo (RUN).

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).

Handle di file in modalità utente

ACX non attende che gli handle di file in modalità utente vengano chiusi prima di creare nuovamente nuovi circuiti. La durata degli handle del sistema di file non è legata alla durata delle risorse hardware usate dal dispositivo o dai circuiti. È responsabilità dei client ascoltare l'arrivo o la rimozione dell'interfaccia e chiudere e riaprire gli handle di file.

Gli handle di file precedenti sono contrassegnati come obsoleti e ACX ha esito negativo per tutte le richieste di I/O associate.

Vedi anche

Panoramica delle estensioni della classe audio ACX

Documentazione di riferimento su ACX

Sequenze di callback per PnP e Risparmio energia