Поделиться через


функция обратного вызова EVT_ACX_CIRCUIT_POWER_UP (acxcircuit.h)

Обратный вызов EVT_ACX_CIRCUIT_POWER_UP используется драйвером для добавления функций в путь питания объекта ACXCIRCUIT.

Синтаксис

EVT_ACX_CIRCUIT_POWER_UP EvtAcxCircuitPowerUp;

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

Параметры

Device

Объект WDFDEVICE (описанный в WDF — сводка объектов платформы), связанный с указанным ACXCIRCUIT.

Circuit

Объект ACXCIRCUIT (описано в сводке объектов ACX) с питанием.

PreviousState

Перечислитель WDF_POWER_DEVICE_STATE типа, определяющий предыдущее состояние питания устройства.

Возвращаемое значение

Возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код ошибки. Дополнительные сведения см. в использовании значений NTSTATUS. Если драйвер завершает работу этого обратного вызова, платформа ACX завершает работу связанного ACXSTREAMS, если таковой есть, и тегирует ACXCIRCUIT в качестве ожидающего удаления. Платформа ACX не завершается ошибкой обратного вызова ACX EvtDeviceD0Entry, что позволяет использовать существующие рабочие функции ACXCIRCUITs с этого устройства для создания рабочих звуковых путей.

Замечания

Чтобы зарегистрировать функцию обратного вызова EvtCircuitPowerUp, драйвер должен вызвать AcxCircuitInitSetAcxCircuitPnpPowerCallbacks.

Если драйвер зарегистрировал функцию обратного вызова EvtCircuitPowerUp для устройства, платформа вызывает функцию при каждом входе устройства в рабочее состояние (D0). Устройство введет состояние D0, когда происходит одно из следующих действий:

  • Перечисляется устройство (так как устройство было подключено или система была перезагружена).
  • Система и все его устройства возвращаются в рабочие состояния из низкой мощности.
  • Устройство возвращается в рабочее состояние после ввода состояния низкой мощности, так как оно неактивно (если устройство поддерживает низкое питание).
  • Диспетчер Plug and Play распространял аппаратные ресурсы системы среди устройств системы.
  • Платформа вызывает функцию обратного вызова EvtDeviceD0Entry сразу после того, как устройство вступает в рабочее состояние (D0) и доступно драйверу, но до включения прерываний устройства. Параметр PreviousState определяет состояние питания устройства, в котором устройство находилось до ввода состояния D0. Когда платформа сначала вызывает EvtDeviceD0Entry, она предоставляет значение WdfPowerDeviceDeviceD3Final.

Эта функция обратного вызова должна выполнять все операции, необходимые для обеспечения полной работы устройства.

Дополнительные сведения о драйверах, предоставляющих эту функцию обратного вызова, см. в поддержки PnP и управления питанием в драйвере функций.

Функция обратного вызова EvtCircuitPowerUp вызывается в IRQL = PASSIVE_LEVEL. Эту функцию обратного вызова не следует выполнять на страницу.

Пример

Ниже показан пример использования. В этом примере показаны некоторые значения таймера для использования в тестовом коде.

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));

Требования к ACX

минимальная версия ACX: 1.0

Дополнительные сведения о версиях ACX см. в обзоре версий ACX.

Требования

Требование Ценность
заголовка acxcircuit.h
IRQL PASSIVE_LEVEL

См. также