Enumerasi perangkat ACX

Topik ini membahas enumerasi perangkat ACX, startup dan shutdown, dan penyeimbangan ulang perangkat. Untuk gambaran umum ACX, lihat gambaran umum ekstensi kelas audio ACX . Untuk informasi tentang manajemen daya ACX dan PnP, lihat manajemen daya ACX.

Enumerasi dan startup perangkat ACX untuk perangkat audio statis

Untuk mempelajari cara kerja startup ACX, skenario berikut akan dijelaskan.

  • Perangkat audio diwakili oleh satu sirkuit.
  • Masa pakai audio/sirkuit terkait dengan masa pakai perangkat PnP.
  • Satu perangkat dapat membuat beberapa sirkuit untuk perangkat audio yang berbeda.
  • Lingkungan mode kernel KMDF.

Urutan memulai adalah:

Tambah Aliran ACX

  • Penambahan Stream ACX (instans) pada Sirkuit ACX (panggilan balik ACX pada sirkuit ACX) – dapat dipanggil kapan saja setelah Inisialisasi I/O yang Dikelola Mandiri WDF atau Restart dilakukan dan perangkat berada dalam status D0. Cakupan sirkuit.
    • Input: Konteks AcxStreamInit, ACXCIRCUIT.
    • Tambahkan fungsi callback.
    • Membuat AcxStream (instans).
    • Secara opsional lakukan init Instans post stream apa pun.
    • Saat kembali, ACX mengaktifkan instans aliran ini, dan karena dalam skenario ini adalah satu-satunya di jalur audio, ACX memungkinkan streaming pesan untuk dilalui.

Enumerasi dan startup perangkat ACX untuk perangkat audio dinamis

Dalam skenario ini, hal berikut diasumsikan.

  • Dukungan audio dinamis (buat/hapus perangkat audio pada run-time).
  • Masa pakai perangkat tidak terkait dengan masa pakai sirkuit.
  • Satu perangkat dapat membuat beberapa sirkuit untuk perangkat audio yang berbeda.
  • Piggyback pada pola statis sederhana yang dijelaskan di atas dengan hanya menambahkan elemen khusus untuk pola dinamis.
  • Menggunakan PDO mentah bawaan.
  • Lingkungan mode kernel KMDF.

Urutan start up untuk skenario ini adalah:

  • WDM DriverEntry. Cakupan driver.

    • Pelacakan inisialisasi.
    • Anda bisa memilih untuk mendaftar memuat keluar.
    • Buat WDFDRIVER.
    • Hubungi ACX untuk melakukan inisialisasi driver pos apa pun.
    • Opsional, lakukan inisialisasi driver jika diperlukan.
  • Perangkat WDFTambahkan. Cakupan perangkat.

    • Panggil ACX untuk memulai konteks init perangkat.
    • Buat perangkat.
    • Panggil ACX untuk melakukan init perangkat pos apa pun.
    • Secara opsional lakukan inisialisasi lanjutan perangkat.
  • WDF PrepareHardware. Cakupan perangkat.

    • Buat dan inisialisasi sumber daya perangkat keras (untuk interupsi dan utas, daftarkan ke ACX).
  • Panggilan balik Entri D0 Perangkat WDF. Cakupan perangkat.

  • Antrean WDF dihidupkan kembali.

  • Perangkat WDFSelfManagedIoInit. Cakupan perangkat.

  • Perangkat WDF, SelfManagedIoRestart. Cakupan perangkat.

    • Inisialisasi setelah perangkat dinyalakan dari Dx.

Pembuatan sirkuit dinamis (kapan saja)

  • Driver mengalokasikan struktur WDFDEVICE_INIT dengan memanggil WdfPdoInitAllocate. Driver bertanggung jawab memanggil WdfDeviceInitFree jika terjadi kegagalan sebelum perangkat berhasil dibuat.
  • Driver menentukan callback PnP/daya yang ingin diterimanya.
  • Driver membuat perangkat.
  • Pengemudi menginisiasi perangkat/sirkuit baru dengan memanggil AcxDeviceAddCircuitDevice.
  • WDF/PnP mengambil kendali dan pola sederhana enum/startup yang dijelaskan di bagian sebelumnya mulai diterapkan.

AcxFactoryCircuit

Driver ACX juga dapat membuat objek AcxFactoryCircuit (penyedia sirkuit) selama urutan pengaktifan daya, menggunakan fungsi AcxFactoryCircuitCreate dan fungsi AcxDeviceAddFactoryCircuit.

Karena driver ACX mendaftarkan dirinya dengan ACX sebagai pabrik sirkuit, kerangka kerja ACX menggunakan pabrik terdaftar untuk meminta driver membuat sirkuit baru.

AcxFactoryCircuitCreate(Device, &attributes, &factoryInit, &factory);

AcxDeviceAddFactoryCircuit(Device, factory);

Penyeimbangan ulang perangkat ACX

Penyeimbangan ulang dilakukan ketika penggunaan sumber daya sistem memerlukan sistem operasi untuk menyeimbangkan kembali sumber daya antar perangkat. Untuk informasi umum tentang penyeimbangan ulang, lihat Menerapkan Penyeimbangan Ulang PnP untuk Driver Audio PortCls.

ACX mendukung penyeimbangan ulang perangkat sebagai berikut:

  • Dalam urutan penonaktifan daya WDF/ACX, driver melepaskan semua sumber daya streaming (EvtAcxStreamPowerDown, EvtAcxStreamReleaseHardware), maupun sumber daya sirkuit (EvtAcxCircuitPowerDown, EvtAcxCircuitReleaseHardware), serta sumber daya perangkat (EvtDeviceReleaseHardware).

  • Semua permintaan tertunda, dan handle tetap dibiarkan.

  • Dalam urutan WDF/ACX penyalaan, driver memastikan sumber daya baru kompatibel dengan yang saat ini digunakan, dan membuat penyesuaian yang diizinkan untuk pengaturan driver tersebut. Jika sumber daya tidak kompatibel dengan inisialisasi perangkat/sirkuit saat ini, driver harus menghapus sirkuit saat ini dan membuat yang baru. Lihat informasi selengkapnya di bawah ini.

  • Dalam urutan power up, WDF memanggil entri EvtDevicePrepareHardware dan EvtDeviceD0, dan ACX memanggil entri EvtAcxCircuitPrepareHardware dan EvtAcxCircuitPowerUp yang sesuai, dan memindahkan semua aliran ke status yang sudah ada sebelumnya.

  • Segera setelah antrean bergerak ke status aktif/jalan, alur I/O akan mengalir kembali.

ACX tidak mengizinkan penghapusan (gagal query-remove) atau penyeimbangan ulang (gagal query-stop) untuk dilakukan jika ada aliran yang berstatus aktif (RUN).

Driver juga dapat memilih untuk selalu menghancurkan dan membuat ulang perangkat audio pada penyeimbangan ulang. Ini adalah skenario yang sama di atas ketika perangkat mendeteksi bahwa pengaturan baru tidak kompatibel dengan yang lama. Penghapusan sirkuit harus dilakukan dalam callback EvtDevicePrepareHardware/EvtDeviceReleaseHardware, dan sirkuit baru harus dibuat kembali di EvtDevicePrepareHardware. Driver menghapus sirkuit dengan membatalkan registrasi sirkuit (menggunakan AcxDeviceRemoveCircuit). Sirkuit pabrik biasanya tidak boleh dihapus selama penyeimbangan ulang.

Handel file mode pengguna

ACX tidak menunggu handle berkas dalam mode pengguna ditutup dahulu sebelum membuat ulang sirkuit baru. Umur penanganan sistem file tidak bergantung pada umur sumber daya perangkat keras yang digunakan oleh perangkat/sirkuit. Klien-klien bertanggung jawab untuk memantau kedatangan/penghapusan antarmuka dan menutup dan membuka kembali handle berkas.

Handle file lama ditandai usang dan ACX menolak semua permintaan I/O yang terkait dengannya.

Lihat juga

Ikhtisar Ekstensi Kelas Audio ACX

dokumentasi referensi ACX

Urutan Panggilan Balik PnP dan Manajemen Daya