Partager via


PSET_DMA_ENGINE_STATE fonction de rappel (hdaudio.h)

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

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_V2 ou 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 (reset)
  • 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 tableau de handles . Définissez ce paramètre sur une valeur différente de zéro.

[in] Handles

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

Valeur retournée

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 de retour possibles status.

Code de retour Description
STATUS_INVALID_HANDLE
Indique que l’un des handles n’est pas valide.
STATUS_INVALID_PARAMETER
Indique que l’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 à l’un des moteurs DMA.

Remarques

Cette routine modifie l’état d’un ou de 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 tableau de handles identifient. Pour plus d’informations, consultez Synchronisation de deux flux ou plus.

Avant d’appeler cette routine, configurez chaque moteur DMA dans le tableau de handles :

  • 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 à un moteur DMA dans le tableau de handles , une tentative de modification du flux à un état autre que Réinitialiser entraîne l’échec de l’appel SetDmaEngineState et retourne le 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 Suspendu ou Arrêté :

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

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête hdaudio.h (inclure Hdaudio.h)
IRQL <=DISPATCH_LEVEL

Voir aussi

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCycliqueStream ::SetState

SetupDmaEngineWithBdl