Bagikan melalui


EVT_ACX_CIRCUIT_POWER_UP fungsi panggilan balik (acxcircuit.h)

Panggilan balik EVT_ACX_CIRCUIT_POWER_UP digunakan oleh driver untuk menambahkan fungsionalitas di jalur daya atas objek ACXCIRCUIT.

Sintaks

EVT_ACX_CIRCUIT_POWER_UP EvtAcxCircuitPowerUp;

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

Parameter

Device

Objek WDFDEVICE (dijelaskan dalam WDF - Ringkasan Objek Kerangka Kerja) yang terkait dengan ACXCIRCUIT yang ditentukan.

Circuit

Objek ACXCIRCUIT (dijelaskan dalam Ringkasan Objek ACX) dinyalakan.

PreviousState

Enumerator berjenis WDF_POWER_DEVICE_STATE yang mengidentifikasi status daya perangkat sebelumnya.

Menampilkan nilai

Mengembalikan STATUS_SUCCESS jika panggilan berhasil. Jika tidak, kode kesalahan akan menampilkan kode kesalahan yang sesuai. Untuk informasi selengkapnya, lihat Menggunakan Nilai NTSTATUS. Jika driver gagal panggilan balik ini, kerangka kerja ACX mematikan ACXSTREAMS terkait jika ada, dan menandai ACXCIRCUIT sebagai tertunda-hapus. Kerangka kerja ACX tidak gagal dengan panggilan balik ACX EvtDeviceD0Entry garis bawah, ini memungkinkan ACXCIRCUITs kerja yang ada dari perangkat ini digunakan untuk membangun jalur audio yang berfungsi.

Keterangan

Untuk mendaftarkan fungsi panggilan balik EvtCircuitPowerUp, driver harus memanggil AcxCircuitInitSetAcxCircuitPnpowerCallbacks.

Jika driver telah mendaftarkan fungsi panggilan balik EvtCircuitPowerUp untuk perangkat, kerangka kerja memanggil fungsi setiap kali perangkat memasuki status berfungsi (D0). Perangkat akan memasuki status D0 ketika salah satu hal berikut ini terjadi:

  • Perangkat dijumlahkan (karena perangkat dicolokkan atau sistem di-boot ulang).
  • Sistem dan semua perangkatnya kembali ke status kerjanya dari status berdaya rendah.
  • Perangkat kembali ke status kerjanya setelah memasuki status daya rendah karena diam (jika perangkat mendukung idle berdaya rendah).
  • Manajer Plug and Play telah mendistribusikan kembali sumber daya perangkat keras sistem di antara perangkat sistem.
  • Kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0Entry segera setelah perangkat memasuki status berfungsi (D0) dan tersedia untuk driver, tetapi sebelum gangguan perangkat diaktifkan. Parameter PreviousState mengidentifikasi status daya perangkat tempat perangkat berada sebelum memasuki status D0. Ketika kerangka kerja pertama kali memanggil EvtDeviceD0Entry, kerangka kerja memberikan nilai PreviousState dari WdfPowerDeviceD3Final.

Fungsi panggilan balik ini harus melakukan operasi apa pun yang diperlukan untuk membuat perangkat beroperasi penuh.

Untuk informasi selengkapnya tentang driver yang menyediakan fungsi panggilan balik ini, lihat Mendukung PnP dan Manajemen Daya di Driver Fungsi.

Fungsi panggilan balik EvtCircuitPowerUp dipanggil di IRQL = PASSIVE_LEVEL. Anda tidak boleh membuat fungsi panggilan balik ini dapat di-pageable.

Contoh

Contoh penggunaan ditunjukkan di bawah ini. Contoh ini menunjukkan memulai beberapa nilai timer untuk digunakan dalam kode pengujian.

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

Persyaratan ACX

Versi ACX minimum: 1.0

Untuk informasi selengkapnya tentang versi ACX, lihat Gambaran umum versi ACX.

Persyaratan

Persyaratan Nilai
Header acxcircuit.h
IRQL PASSIVE_LEVEL

Lihat juga