Partager via


PSET_DMA_ENGINE_STATE fonction de rappel (hdaudio.h)

La routine SetDmaEngineState définit l’état d’un ou plusieurs moteurs DMA à l’état En cours d’exécution, Arrêté, Suspendu ou Réinitialiser.

Le type de pointeur de fonction pour une routine SetDmaEngineState est défini comme suit.

Syntaxe

PSET_DMA_ENGINE_STATE PsetDmaEngineState;

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

Paramètres

[in] _context

Spécifie la valeur de contexte du membre Context de la structure HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2ou HDAUDIO_BUS_INTERFACE_BDL.

[in] StreamState

Spécifie le nouvel état du flux. Définissez ce paramètre sur l’une des valeurs d’énumération HDAUDIO_STREAM_STATE suivantes :

  • PauseState (suspendu)
  • ResetState (réinitialiser)
  • RunState (en cours d’exécution)
  • StopState (arrêté)
Dans l’implémentation actuelle, PauseState et StopState représentent le même état matériel.

[in] NumberOfHandles

Spécifie le nombre de handles dans le handles tableau. Définissez ce paramètre sur une valeur différente de zéro.

[in] Handles

Pointeur vers un tableau de handles vers des moteurs DMA. Spécifiez une valeur deNULL non pour ce paramètre.

Valeur de retour

SetDmaEngineState retourne STATUS_SUCCESS si l’appel réussit à modifier les états des moteurs DMA. Sinon, la routine retourne un code d’erreur approprié. Le tableau suivant présente certains des codes d’état de retour possibles.

Retourner le code Description
STATUS_INVALID_HANDLE
Indique qu’un des handles n’est pas valide.
STATUS_INVALID_PARAMETER
Indique qu’une des valeurs de paramètre est incorrecte (valeur de paramètre non valide ou pointeur incorrect).
STATUS_INVALID_DEVICE_REQUEST
Indique qu’aucune mémoire tampon n’est actuellement allouée pour l’un des moteurs DMA.

Remarques

Cette routine modifie l’état d’un ou plusieurs moteurs DMA à l’état spécifié par le paramètre streamState. La routine synchronise les transitions d’état de tous les moteurs DMA que les handles du gèrent tableau identifient. Pour plus d’informations, consultez synchronisation de deux flux ou plus.

Avant d’appeler cette routine, configurez chaque moteur DMA dans le gère tableau :

  • Si vous utilisez la version HDAUDIO_BUS_INTERFACE de HD Audio DDI, appelez AllocateDmaBuffer pour configurer le moteur DMA.
  • Si vous utilisez la version HDAUDIO_BUS_INTERFACE_BDL de la DDI, appelez SetupDmaEngineWithBdl pour configurer le moteur DMA.
Si aucune mémoire tampon DMA n’est actuellement allouée pour un moteur DMA dans le gère tableau, une tentative de modification du flux à un état autre que Reset entraîne l’échec de l’appel SetDmaEngineState l’échec et le retour du code d’erreur STATUS_INVALID_DEVICE_REQUEST.

L’état du flux ne peut pas passer directement entre l’exécution et la réinitialisation. Au lieu de cela, le flux doit d’abord passer par un état intermédiaire de Pause ou Arrêté :

  • À partir d’un état d’exécution ou de réinitialisation, l’état du flux peut passer directement à l’état suspendu ou arrêté.
  • À partir d’un état suspendu ou arrêté, l’état du flux peut passer directement à l’état En cours d’exécution ou de réinitialisation.
Un pilote audio WDM appelle cette routine pendant un appel à sa méthode SetState. Par exemple, consultez IMiniportWaveCycliqueStream ::SetState.

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête hdaudio.h (include Hdaudio.h)
IRQL <=DISPATCH_LEVEL

Voir aussi

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCycliqueStream ::SetState

SetupDmaEngineWithBdl