PSET_DMA_ENGINE_STATE funzione di callback (hdaudio.h)

La routine SetDmaEngineState imposta lo stato di uno o più motori DMA sullo stato Running, Stopped, Paused o Reset.

Il tipo di puntatore della funzione per una routine SetDmaEngineState è definito come indicato di seguito.

Sintassi

PSET_DMA_ENGINE_STATE PsetDmaEngineState;

NTSTATUS PsetDmaEngineState(
  [in] PVOID _context,
  [in] HDAUDIO_STREAM_STATE StreamState,
  [in] ULONG NumberOfHandles,
  [in] PHANDLE Handles
)
{...}

Parametri

[in] _context

Specifica il valore di contesto dal membro Contesto della struttura HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2 o HDAUDIO_BUS_INTERFACE_BDL .

[in] StreamState

Specifica il nuovo stato del flusso. Impostare questo parametro su uno dei valori di enumerazione seguenti HDAUDIO_STREAM_STATE:

  • PauseState (sospeso)
  • ResetState (reimpostazione)
  • RunState (in esecuzione)
  • StopState (arrestato)
Nell'implementazione corrente , PauseState e StopState rappresentano lo stesso stato hardware.

[in] NumberOfHandles

Specifica il numero di handle nella matrice handle . Impostare questo parametro su un valore diverso da zero.

[in] Handles

Puntatore a una matrice di handle ai motori DMA. Specificare un valore non NULL per questo parametro.

Valore restituito

SetDmaEngineState restituisce STATUS_SUCCESS se la chiamata riesce a modificare gli stati dei motori DMA. In caso contrario, la routine restituisce un codice di errore appropriato. La tabella seguente mostra alcuni dei possibili codici di stato restituiti.

Codice restituito Descrizione
STATUS_INVALID_HANDLE
Indica che uno degli handle non è valido.
STATUS_INVALID_PARAMETER
Indica che uno dei valori dei parametri non è corretto (valore del parametro non valido o puntatore non valido).
STATUS_INVALID_DEVICE_REQUEST
Indica che non viene allocato alcun buffer per uno dei motori DMA.

Commenti

Questa routine modifica lo stato di uno o più motori DMA allo stato specificato dal parametro streamState . La routine sincronizza le transizioni di stato di tutti i motori DMA gestiti nella matrice handle . Per altre informazioni, vedere Sincronizzazione di due o più flussi.

Prima di chiamare questa routine, configurare ogni motore DMA nella matrice handle :

  • Se si usa la versione HDAUDIO_BUS_INTERFACE di HD Audio DDI, chiamare AllocateDmaBuffer per configurare il motore DMA.
  • Se si usa la versione HDAUDIO_BUS_INTERFACE_BDL di DDI, chiamare SetupDmaEngineWithBdl per configurare il motore DMA.
Se non viene allocato alcun buffer DMA per qualsiasi motore DMA nella matrice handle , un tentativo di modificare il flusso in qualsiasi stato diverso da Reset causa l'esito negativo della chiamata SetDmaEngineState e restituisce il codice di errore STATUS_INVALID_DEVICE_REQUEST.

Lo stato del flusso non può passare direttamente tra Esecuzione e Reimpostazione. Il flusso deve invece passare prima uno stato intermedio di Pausa o Arrestato:

  • Da uno stato Di esecuzione o reimpostazione, lo stato del flusso può essere modificato direttamente in Sospeso o Arrestato.
  • Da uno stato sospeso o arrestato, lo stato del flusso può cambiare direttamente in Esecuzione o Reimpostazione.
Un driver audio WDM chiama questa routine durante una chiamata al relativo metodo SetState . Ad esempio, vedere IMiniportWaveCyclicStream::SetState.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione hdaudio.h (includere Hdaudio.h)
IRQL <=DISPATCH_LEVEL

Vedi anche

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCyclicStream::SetState

SetupDmaEngineWithBdl