Sirkuit ACX

Topik ini membahas sirkuit ACX. Untuk gambaran umum ACX dan daftar istilah ACX, lihat Gambaran umum ekstensi kelas audio ACX.

Seperti yang dijelaskan dalam Ringkasan objek ACX, objek AcxCircuit mewakili jalur audio parsial atau penuh ke perangkat audio yang dirasakan pengguna (speaker, mikrofon, dll.). AcxCircuit memiliki setidaknya satu pin input dan satu pin output (ACXPIN), dan dapat menggabungkan satu atau beberapa AcxElements seperti objek. Sirkuit mewakili titik akhir yang ada dan kemampuannya.

Dan ACX Stream adalah komponen driver yang dibuat untuk mewakili aliran audio, yang dibuat oleh Sirkuit. Stream terdiri dari daftar Elemen yang dibuat berdasarkan Elemen Sirkuit induk. Sirkuit Stream adalah sirkuit dalam arsitektur multi-tumpukan (jalur audio parsial) yang langsung berinteraksi dengan layanan streaming mode pengguna atas. Sirkuit Inti adalah sirkuit dalam arsitektur multi-tumpukan (jalur audio parsial) yang memberikan identitas perangkat titik akhir audio.

Identifikasi sirkuit ACX

Setiap sirkuit ACX memiliki pengidentifikasi sirkuit. ACX mendefinisikan hal-hal berikut:

  • Nama (str), secara unik mengidentifikasi jenis perangkat audio sirkuit ini. Ini digunakan untuk menemukan pengaturan INF, dan merupakan bagian dari tautan simbolis yang digunakan untuk mengakses sirkuit ini dari perangkat jarak jauh. Contoh: "Render0", "Render1" atau "Capture0".

  • Tautan simbolis. Tautan simbolis dikaitkan dengan semua sirkuit yang terekspos. Klien menggunakan tautan simbolis ini untuk membuka jalur komunikasi dengan perangkat/sirkuit.

  • ID komponen sirkuit (guid). Secara unik mengidentifikasi instans sirkuit (khusus vendor). Ini tidak dapat digunakan dalam pengikatan AcxCircuitTemplate jika URI sirkuit telah ditentukan.

  • URI komponen sirkuit (str). Secara unik mengidentifikasi instans sirkuit (khusus vendor). Ini tidak dapat digunakan dalam pengikatan template AcxCircuit jika ID Sirkuit telah ditentukan.

  • ID komponen Circuit Factory (guid). Secara unik mengidentifikasi instans pabrik sirkuit (khusus vendor). Ini tidak dapat digunakan dalam pengikatan AcxCircuitTemplate apabila URI Circuit Factory telah ditentukan.

  • URI komponen Circuit Factory (str). Secara unik mengidentifikasi instans pabrik sirkuit (khusus vendor). Ini tidak dapat digunakan dalam pengikatan AcxCircuitTemplate jika ID Pabrik Sirkuit ditentukan.

AcxCircuitBuat

Fungsi AcxCircuitCreate digunakan untuk membuat ACXCIRCUIT. Struktur ACXCIRCUIT_INIT buram yang digunakan oleh fungsi AcxCircuitCreate. AcxCircuitInitAllocate digunakan untuk menginisialisasi struktur ACXCIRCUIT_INIT.

AcxFactoryCircuit

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

Komposisi sirkuit ACX

ACX mengikat sirkuit bersama-sama sampai membentuk jalur audio lengkap. ACX menggunakan pengikatan audio untuk menyambungkan sirkuit audio bersama-sama. Untuk informasi selengkapnya, lihat Komposisi Multicircuit ACX.

Pembentukan dinamis sirkuit ACX (kapan saja)

ACX dapat membuat sirkuit dinamis sesuai permintaan. Untuk melakukan ini, driver mengalokasikan struktur WDFDEVICE_INIT dengan memanggil WdfPdoInitAllocate. Driver kemudian menentukan callback PnP/daya yang ingin diterimanya dan membuat perangkat. Driver membuat instans perangkat/sirkuit baru dengan memanggil AcxDeviceAddCircuitDevice. Untuk informasi selengkapnya, lihat Enumerasi perangkat ACX.

Penghapusan dinamis sirkuit ACX

Driver memanggil AcxDeviceRemoveCircuitDevice untuk menghapus perangkat audio dari daftar perangkat. Ini memicu urutan mematikan daya pada perangkat/entitas sirkuit ACX. Perangkat/sirkuit dihapus secara asinkron. Untuk informasi selengkapnya, lihat Enumerasi perangkat ACX.

AcxDeviceRemoveCircuit dan AcxDeviceDetachCircuit

Ada dua cara umum untuk mengelola penghentian sirkuit. AcxDeviceDetachCircuit atau AcxDeviceRemoveCircuit.

Jika pemanggil memanggil AcxDeviceDetachCircuit , pemanggil tidak boleh memanggil AcxDeviceRemoveCircuit. Jika driver panggilan ingin menghapus sirkuit setelah AcxDeviceDetachCircuit harus menggunakan WdfObjectDelete.

Dengan memanggil AcxDeviceRemoveCircuit , driver panggilan memberi tahu ACX untuk menghapus sirkuit ini dan menghapus/menghapusnya dari perangkat. Dalam hal ini tidak perlu memanggil WdfObjectDelete di sirkuit.

Singkatnya, AcxDeviceDetachCircuit berarti bahwa driver memiliki manajemen masa pakai objek sirkuit, AcxDeviceRemoveCircuit berarti bahwa sirkuit akan dihapus dan dihapus.

Untuk informasi umum tentang manajemen masa pakai objek WDF, lihat Siklus Hidup Objek Kerangka Kerja.

AcxDeviceRemoveCircuitDevice

Berbeda dari penghentian sirkuit yang dibahas di atas, AcxDeviceRemoveCircuitDevice digunakan oleh driver audio untuk menghapus titik akhir audio yang ada dan dapat dipanggil kapan saja selama siklus hidup driver.

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

Fungsi panggilan balik EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEASE_HARDWARE)

Jika driver telah mendaftarkan fungsi panggilan balik EvtAcxCircuitReleaseHardware , kerangka kerja memanggilnya selama transisi berikut:

  • Penyeimbangan ulang sumber daya
  • Penghapusan tertib
  • Penghapusan kejutan

Kerangka kerja ACX memanggil fungsi panggilan balik EvtAcxCircuitReleaseHardware setelah kerangka kerja WDF berhenti mengirim permintaan I/O ke perangkat, setiap gangguan yang ditetapkan ke perangkat telah dinonaktifkan dan terputus, dan perangkat telah dimatikan.

Kerangka kerja ACX memanggil fungsi panggilan balik EvtAcxCircuitReleaseHardware sebelum kerangka kerja WDF memanggil fungsi panggilan balik EvtDeviceReleaseHardware driver.

Ketika kerangka kerja memanggil EvtAcxCircuitReleaseHardware, PDO untuk perangkat masih ada dan dapat dikueri untuk informasi perangkat yang tersedia dalam status mati, misalnya status konfigurasi PCI.

Selain itu, sumber daya perangkat keras yang diterjemahkan yang disediakan kerangka kerja ke EvtDeviceReleaseHardware masih ditetapkan ke perangkat. Tujuan utama fungsi panggilan balik ini adalah untuk merilis sumber daya tersebut, dan khususnya untuk membuka peta sumber daya memori apa pun yang dipetakan oleh fungsi panggilan balik EvtAcxCircuitPrepareHardware driver dipetakan. Driver juga dapat menggunakan panggilan balik ini untuk melakukan aktivitas manajemen ACXCIRCUIT lainnya yang mungkin diperlukan dalam status mati. Biasanya, semua operasi matikan perangkat keras lainnya harus berlangsung dalam fungsi panggilan balik EvtDeviceD0Exit driver.

Kerangka kerja ACX selalu memanggil fungsi panggilan balik EvtAcxCircuitReleaseHardware driver jika fungsi panggilan balik EvtAcxCircuitPrepareHardware driver telah dipanggil, kecuali EvtAcxCircuitPrepareHardware mengembalikan kode kegagalan.

Untuk informasi selengkapnya tentang sumber daya perangkat keras, lihat Pengenalan Sumber Daya Perangkat Keras.

Fungsi panggilan balik EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE)

Ketika kerangka kerja memanggil EvtAcxFactoryCircuitReleaseHardware , PDO untuk perangkat masih ada dan dapat dikueri untuk informasi perangkat yang tersedia dalam status mati, misalnya status konfigurasi PCI.

Selain itu, sumber daya perangkat keras yang diterjemahkan yang disediakan kerangka kerja ke EvtDeviceReleaseHardware masih ditetapkan ke perangkat. Tujuan utama fungsi panggilan balik ini adalah untuk merilis sumber daya tersebut, dan khususnya untuk membuka peta sumber daya memori apa pun yang dipetakan oleh fungsi panggilan balik EvtAcxCircuitPrepareHardware driver dipetakan. Driver juga dapat menggunakan panggilan balik ini untuk melakukan aktivitas manajemen ACXCIRCUIT lainnya yang mungkin diperlukan dalam status mati. Biasanya, semua operasi matikan perangkat keras lainnya harus berlangsung dalam fungsi panggilan balik EvtDeviceD0Exit driver.

Kerangka kerja ACX selalu memanggil fungsi panggilan balik EvtAcxFactoryCircuitReleaseHardware driver jika fungsi panggilan balik EvtAcxFactoryCircuitPrepareHardware driver telah dipanggil, kecuali EvtAcxFactoryCircuitPrepareHardware mengembalikan kode kegagalan.

Untuk informasi selengkapnya tentang mengelola objek WDF dan sirkuit, lihat ACX WDF Driver Lifetime Management.

Lihat juga

Ikhtisar Ekstensi Kelas Audio ACX

Komunikasi lintas driver multi tumpukan ACX

Manajemen Siklus Hidup Driver ACX WDF

Ringkasan Objek ACX