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

지정된 ACXCIRCUIT와 연결된 WDFDEVICE 개체( WDF - 프레임워크 개체 요약에 설명됨)입니다.

Circuit

ACXCIRCUIT 개체( ACX 개체 요약에 설명됨)가 전원이 공급되었습니다.

PreviousState

이전 디바이스 전원 상태를 식별하는 WDF_POWER_DEVICE_STATE 형식의 열거자입니다.

반환 값

호출에 성공하면 를 반환합니다 STATUS_SUCCESS . 그렇지 않으면 적절한 오류 코드를 반환합니다. 자세한 내용은 NTSTATUS 값 사용을 참조하세요. 드라이버가 이 콜백에 실패하면 ACX 프레임워크는 연결된 ACXSTREAMS(있는 경우)를 종료하고 ACXCIRCUIT에 보류 중인 삭제로 태그를 지정합니다. ACX 프레임워크는 밑줄 ACX EvtDeviceD0Entry 콜백에 실패하지 않습니다. 이렇게 하면 이 디바이스의 기존 작업 ACXCIRCUIT를 사용하여 작업 오디오 경로를 빌드할 수 있습니다.

설명

EvtCircuitPowerUp 콜백 함수를 등록하려면 드라이버가 AcxCircuitInitSetAcxCircuitPnpPowerCallbacks를 호출해야 합니다.

드라이버가 디바이스에 대해 EvtCircuitPowerUp 콜백 함수를 등록한 경우 프레임워크는 디바이스가 작동(D0) 상태가 될 때마다 함수를 호출합니다. 다음 중 하나가 발생하면 디바이스가 D0 상태가 됩니다.

  • 디바이스가 열거됩니다(디바이스가 연결되어 있거나 시스템이 다시 부팅되었기 때문).
  • 시스템 및 모든 디바이스는 저전력 상태에서 작업 상태로 돌아갑니다.
  • 디바이스가 유휴 상태이므로(디바이스가 저전력 유휴 상태를 지원하는 경우) 저전력 상태로 전환한 후 디바이스가 작동 상태로 돌아갑니다.
  • 플러그 앤 플레이 관리자는 시스템의 디바이스 간에 시스템의 하드웨어 리소스를 재배포했습니다.
  • 프레임워크는 디바이스가 작동(D0) 상태가 된 직후에 EvtDeviceD0Entry 콜백 함수를 호출하고 드라이버에서 사용할 수 있지만 디바이스의 인터럽트가 활성화되기 전에 호출합니다. PreviousState 매개 변수는 디바이스가 D0 상태가 되기 전에 있었던 디바이스 전원 상태를 식별합니다. 프레임워크가 EvtDeviceD0Entry를 처음 호출할 때 WdfPowerDeviceD3Final의 PreviousState 값을 제공합니다.

이 콜백 함수는 디바이스가 완전히 작동하도록 하는 데 필요한 모든 작업을 수행해야 합니다.

이 콜백 함수를 제공하는 드라이버에 대한 자세한 내용은 함수 드라이버에서 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

추가 정보