PSET_DMA_ENGINE_STATE función de devolución de llamada (hdaudio.h)

La rutina SetDmaEngineState establece el estado de uno o varios motores DMA en el estado Running, Stopped, Paused o Reset.

El tipo de puntero de función para una rutina SetDmaEngineState se define de la siguiente manera.

Sintaxis

PSET_DMA_ENGINE_STATE PsetDmaEngineState;

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

Parámetros

[in] _context

Especifica el valor de contexto del miembro Context del HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2 o HDAUDIO_BUS_INTERFACE_BDL estructura.

[in] StreamState

Especifica el nuevo estado de secuencia. Establezca este parámetro en uno de los siguientes valores de enumeración HDAUDIO_STREAM_STATE:

  • PauseState (en pausa)
  • ResetState (reset)
  • RunState (en ejecución)
  • StopState (detenido)
En la implementación actual, PauseState y StopState representan el mismo estado de hardware.

[in] NumberOfHandles

Especifica el número de identificadores de la matriz handles . Establezca este parámetro en un valor distinto de cero.

[in] Handles

Puntero a una matriz de controladores a motores DMA. Especifique un valor distinto de NULL para este parámetro.

Valor devuelto

SetDmaEngineState devuelve STATUS_SUCCESS si la llamada cambia correctamente los estados de los motores DMA. De lo contrario, la rutina devuelve un código de error adecuado. En la tabla siguiente se muestran algunos de los posibles códigos de estado de retorno.

Código devuelto Descripción
STATUS_INVALID_HANDLE
Indica que uno de los identificadores no es válido.
STATUS_INVALID_PARAMETER
Indica que uno de los valores de parámetro es incorrecto (valor de parámetro no válido o puntero incorrecto).
STATUS_INVALID_DEVICE_REQUEST
Indica que no hay ningún búfer asignado actualmente para uno de los motores DMA.

Comentarios

Esta rutina cambia el estado de uno o varios motores DMA al estado que especifica el parámetro streamState . La rutina sincroniza las transiciones de estado de todos los motores DMA que identifican los controladores de la matriz handles . Para obtener más información, vea Sincronizar dos o más secuencias.

Antes de llamar a esta rutina, configure cada motor DMA en la matriz handles :

  • Si usa la versión HDAUDIO_BUS_INTERFACE de la DDI de audio HD, llame a AllocateDmaBuffer para configurar el motor DMA.
  • Si usa la versión HDAUDIO_BUS_INTERFACE_BDL de DDI, llame a SetupDmaEngineWithBdl para configurar el motor DMA.
Si no se asigna ningún búfer DMA actualmente para cualquier motor DMA de la matriz handles , un intento de cambiar la secuencia a cualquier estado distinto de Reset hace que se produzca un error en la llamada a SetDmaEngineState y se devuelva el código de error STATUS_INVALID_DEVICE_REQUEST.

El estado de la secuencia no puede realizar la transición directamente entre Running y Reset. En su lugar, la secuencia debe pasar primero a través de un estado intermedio de Pausado o Detenido:

  • Desde un estado En ejecución o Restablecer, el estado de la secuencia puede cambiar directamente a Pausado o Detenido.
  • Desde un estado en pausa o detenido, el estado de la secuencia puede cambiar directamente a En ejecución o Restablecer.
Un controlador de audio WDM llama a esta rutina durante una llamada a su método SetState . Por ejemplo, vea IMiniportWaveCyclicStream::SetState.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado hdaudio.h (incluye Hdaudio.h)
IRQL <=DISPATCH_LEVEL

Consulte también

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCyclicStream::SetState

SetupDmaEngineWithBdl