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’accès de mise sous tension 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 - Summary of Framework Objects) associé à l’ACXCIRCUIT spécifié.

Circuit

L’objet ACXCIRCUIT (décrit dans Résumé des objets ACX) mis sous tension.

PreviousState

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

Valeur retournée

Retourne STATUS_SUCCESS si l’appel a réussi. Sinon, elle retourne un code d’erreur approprié. Pour plus d’informations, consultez Utilisation de valeurs NTSTATUS. Si le pilote échoue à ce rappel, l’infrastructure ACX arrête l’ACXSTREAMS associé, le cas échéant, et marque l’ACXCIRCUIT comme étant en attente de suppression. L’infrastructure ACX n’échoue pas au rappel ACX EvtDeviceD0Entry, ce qui permet aux ACXCIRCUITs de travail existants de cet appareil d’être utilisés pour créer 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 passe à son état de fonctionnement (D0). Un appareil passe à l’état D0 lorsque l’un des éléments suivants 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 à leur état de fonctionnement à partir d’un état de faible consommation.
  • L’appareil revient à son état de fonctionnement après son entrée dans un état de faible consommation d’énergie, car il était inactif (si l’appareil prend en charge l’inactivité à faible consommation d’énergie).
  • Le gestionnaire de Plug-and-Play a redistribué les ressources matérielles du système entre les appareils du système.
  • Le framework appelle la fonction de rappel EvtDeviceD0Entry immédiatement après que l’appareil est entré 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 se trouvait l’appareil avant son entrée dans l’état D0. Lorsque l’infrastructure appelle EvtDeviceD0Entry pour la première fois, 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 du PnP et de la gestion de l’alimentation dans le pilote de fonction.

La fonction de rappel EvtCircuitPowerUp est appelée dans 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 le démarrage de certaines valeurs du 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 ACX minimale : 1.0

Pour plus d’informations sur les versions d’ACX, consultez Vue d’ensemble des versions d’ACX.

Configuration requise

Condition requise Valeur
En-tête acxcircuit.h
IRQL PASSIVE_LEVEL

Voir aussi