Condividi tramite


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 di funzione per un routine SetDmaEngineState viene definito come segue.

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 del membro Context della struttura HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2o HDAUDIO_BUS_INTERFACE_BDL.

[in] StreamState

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

  • 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 nel handle matrice. Impostare questo parametro su un valore diverso da zero.

[in] Handles

Puntatore a una matrice di handle ai motori DMA. Specificare un valorenull non 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 illustra 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 è attualmente allocato alcun buffer per uno dei motori DMA.

Osservazioni

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 nell'gestisce matrice identificata. Per altre informazioni, vedere la sincronizzazione di due o più flussi.

Prima di chiamare questa routine, configurare ogni motore DMA nel gestisce matrice:

  • 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 gestisce matrice, un tentativo di modificare il flusso in qualsiasi stato diverso da Reset fa sì che la chiamata SetDmaEngineState non riesca e restituisca codice di errore STATUS_INVALID_DEVICE_REQUEST.

Lo stato del flusso non può passare direttamente tra In esecuzione e Reimposta. Al contrario, il flusso deve prima passare attraverso uno stato intermedio sospeso o Arrestato:

  • Da uno stato In esecuzione o Reimposta, lo stato del flusso può cambiare direttamente in Sospeso o Arrestato.
  • Da uno stato sospeso o arrestato, lo stato del flusso può passare direttamente a In esecuzione o Reimposta.
Un driver audio WDM chiama questa routine durante una chiamata al relativo metodo SetState. Ad esempio, vedere IMiniportWaveCyclicStream::SetState.

Fabbisogno

Requisito Valore
piattaforma di destinazione Desktop
intestazione hdaudio.h (include Hdaudio.h)
IRQL <=DISPATCH_LEVEL

Vedere anche

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCyclicStream::SetState

SetupDmaEngineWithBdl