Partager via


EVT_ACX_CIRCUIT_POWER_UP fonction de rappel (acxcircuit.h)

Le rappel EVT_ACX_CIRCUIT_POWER_UP est utilisé par le pilote pour ajouter des fonctionnalités dans le chemin d’alimentation d’un objet ACXCIRCUIT.

Syntaxe

EVT_ACX_CIRCUIT_POWER_UP EvtAcxCircuitPowerUp;

NTSTATUS EvtAcxCircuitPowerUp(
  WDFDEVICE Device,
  ACXCIRCUIT Circuit,
  WDF_POWER_DEVICE_STATE PreviousState
)
{...}

Paramètres

Device

Objet WDFDEVICE (décrit dans WDF - Résumé des objets framework) associé à l’ACXCIRCUIT spécifié.

Circuit

Objet ACXCIRCUIT (décrit dans Résumé des objets ACX) alimenté.

PreviousState

Énumérateur WDF_POWER_DEVICE_STATE typé qui identifie l’état d’alimentation de l’appareil précédent.

Valeur de retour

Retourne STATUS_SUCCESS si l’appel a réussi. Sinon, elle retourne un code d’erreur approprié. Pour plus d’informations, consultez Using NTSTATUS Values. Si le pilote échoue ce rappel, l’infrastructure ACX arrête l’ACXSTREAMS associé le cas échéant et étiquette l’ACXCIRCUIT en tant que suppression en attente. L’infrastructure ACX n’échoue pas le rappel ACX EvtDeviceD0Entry, ce qui permet aux acXCIRCUITs de travail existants de cet appareil d’être utilisés pour générer des chemins audio de travail.

Remarques

Pour inscrire une fonction de rappel EvtCircuitPowerUp, un pilote doit appeler AcxCircuitInitSetAcxCircuitPnpPowerCallbacks.

Si le pilote a inscrit une fonction de rappel EvtCircuitPowerUp pour un appareil, l’infrastructure appelle la fonction chaque fois que l’appareil entre dans son état de travail (D0). Un appareil entre dans l’état D0 lorsque l’une des opérations suivantes se produit :

  • Un appareil est énuméré (car l’appareil a été branché ou le système a été redémarré).
  • Le système et tous ses appareils retournent à leurs états de travail à partir d’un état à faible alimentation.
  • L’appareil revient à son état de fonctionnement après avoir entré un état de faible alimentation car il était inactif (si l’appareil prend en charge l’inactivité à faible alimentation).
  • Le gestionnaire Plug-and-Play a redistribué les ressources matérielles du système entre les appareils du système.
  • L’infrastructure appelle la fonction de rappel EvtDeviceD0Entry immédiatement après que l’appareil entre dans son état de fonctionnement (D0) et est disponible pour le pilote, mais avant que les interruptions de l’appareil aient été activées. Le paramètre PreviousState identifie l’état d’alimentation de l’appareil dans lequel l’appareil était entré avant d’entrer dans l’état D0. Lorsque l’infrastructure appelle d’abord EvtDeviceD0Entry, elle fournit une valeur PreviousState de WdfPowerDeviceD3Final.

Cette fonction de rappel doit effectuer toutes les opérations nécessaires pour rendre l’appareil entièrement opérationnel.

Pour plus d’informations sur les pilotes qui fournissent cette fonction de rappel, consultez Prise en charge de PnP et de gestion de l’alimentation dans le pilote de fonction.

La fonction de rappel EvtCircuitPowerUp est appelée à IRQL = PASSIVE_LEVEL. Vous ne devez pas rendre cette fonction de rappel paginable.

Exemple

L’exemple d’utilisation est illustré ci-dessous. Cet exemple montre comment démarrer des valeurs de minuteur à utiliser dans le code de test.

EVT_ACX_CIRCUIT_POWER_UP            CodecR_EvtCircuitPowerUp;

NTSTATUS
CreateCircuit()
{
    ...
    ACX_CIRCUIT_PNPPOWER_CALLBACKS_INIT(&powerCallbacks);
    powerCallbacks.EvtAcxCircuitPowerUp = CodecR_EvtCircuitPowerUp;
    powerCallbacks.EvtAcxCircuitPowerDown = CodecR_EvtCircuitPowerDown;
    AcxCircuitInitSetAcxCircuitPnpPowerCallbacks(circuitInit, &powerCallbacks);
    ...
}

NTSTATUS
CodecR_EvtCircuitPowerUp (
    _In_ WDFDEVICE  Device,
    _In_ ACXCIRCUIT Circuit,
    _In_ WDF_POWER_DEVICE_STATE PreviousState
    )
{
    UNREFERENCED_PARAMETER(Device);
    UNREFERENCED_PARAMETER(PreviousState);

    CODEC_RENDER_CIRCUIT_CONTEXT *  circuitCtx;
    CODEC_MUTE_ELEMENT_CONTEXT *    muteCtx;
    CODEC_VOLUME_ELEMENT_CONTEXT *  volumeCtx;

    PAGED_CODE();

    // for testing.
    circuitCtx = GetRenderCircuitContext(Circuit);
    ASSERT(circuitCtx);

    ASSERT(circuitCtx->MuteElement);
    muteCtx = GetCodecMuteElementContext(circuitCtx->MuteElement);
    ASSERT(muteCtx);

    ASSERT(muteCtx->Timer);
    WdfTimerStart(muteCtx->Timer, WDF_REL_TIMEOUT_IN_MS(10));

    ASSERT(circuitCtx->VolumeElement);
    volumeCtx = GetCodecVolumeElementContext(circuitCtx->VolumeElement);
    ASSERT(volumeCtx);

    ASSERT(volumeCtx->Timer);
    WdfTimerStart(volumeCtx->Timer, WDF_REL_TIMEOUT_IN_MS(1000));

Configuration requise pour ACX

version minimale d’ACX : 1.0

Pour plus d’informations sur les versions ACX, consultez vue d’ensemble de la version ACX.

Exigences

Exigence Valeur
d’en-tête acxcircuit.h
IRQL PASSIVE_LEVEL

Voir aussi