Deskriptor asosiasi antarmuka USB
Deskriptor asosiasi antarmuka USB (IAD) memungkinkan perangkat mengelompokkan antarmuka yang termasuk dalam fungsi. Artikel ini menjelaskan bagaimana driver klien dapat menentukan apakah perangkat berisi IAD untuk fungsi.
Spesifikasi Universal Serial Bus, revisi 2.0, tidak mendukung pengelompokan lebih dari satu antarmuka perangkat komposit dalam satu fungsi. Namun, grup kerja perangkat USB (DWG) membuat kelas perangkat USB yang memungkinkan fungsi dengan beberapa antarmuka. Forum Pelaksana USB mengeluarkan pemberitahuan perubahan rekayasa (ECN) yang mendefinisikan mekanisme untuk mengelompokkan antarmuka.
ECN menentukan deskriptor USB, yang disebut deskriptor asosiasi antarmuka (IAD), yang memungkinkan produsen perangkat keras untuk menentukan pengelompokan antarmuka. Kelas perangkat yang kemungkinan besar akan menggunakan IAD meliputi:
- Spesifikasi kelas video USB (kode kelas - 0x0E)
- Spesifikasi kelas audio USB (kode kelas - 0x01)
- Spesifikasi kelas Usb Bluetooth (kode kelas - 0xE0)
Cara menggunakan IAD
Sub bagian berikut menjelaskan informasi tentang cara menggunakan IAD.
Perangkat komposit yang memperingatkan Windows dari IAD di firmware
Produsen perangkat komposit biasanya menetapkan nilai nol ke kelas perangkat (bDeviceClass), subkelas (bDeviceSubClass), dan bidang protokol (bDeviceProtocol) di deskriptor perangkat, seperti yang ditentukan oleh Spesifikasi Universal Serial Bus. Produsen dapat mengaitkan setiap antarmuka individu dengan kelas dan protokol perangkat yang berbeda.
Tim inti USB-IF telah merancang kelas khusus dan kumpulan kode protokol yang memberi tahu sistem operasi bahwa satu atau beberapa IAD hadir dalam firmware perangkat. Deskriptor perangkat harus memiliki nilai yang muncul dalam tabel berikut atau sistem operasi tidak mendeteksi IAD perangkat atau mengelompokkan antarmuka perangkat dengan benar.
Bidang deskriptor perangkat | Nilai yang diperlukan |
---|---|
bDeviceClass | 0xEF |
bDeviceSubClass | 0x02 |
bDeviceProtocol | 0x01 |
Kode nilai pemberitahuan versi Windows yang tidak mendukung IAD untuk menginstal driver bus tujuan khusus yang menghitung perangkat dengan benar. Tanpa kode ini dalam deskriptor perangkat, sistem mungkin gagal menghitung perangkat, atau perangkat mungkin tidak berfungsi dengan baik.
Perangkat dapat memiliki lebih dari satu IAD. Setiap IAD harus terletak segera sebelum antarmuka dalam grup antarmuka yang dijelaskan IAD.
Bidang kelas fungsi (bFunctionClass), subkelas (bFunctionSubclassClass), dan protokol (bFunctionProtocol) dari IAD harus berisi nilai yang ditentukan oleh kelas perangkat USB yang menjelaskan antarmuka dalam fungsi.
Bidang kelas dan subkelas IAD tidak diperlukan untuk mencocokkan bidang kelas dan subkelas antarmuka dalam koleksi antarmuka yang dijelaskan IAD. Microsoft merekomendasikan agar antarmuka pertama koleksi memiliki bidang kelas dan subkelas yang cocok dengan bidang kelas dan subkelas IAD. Tabel berikut menunjukkan bidang mana yang harus cocok.
Bidang IAD | Bidang antarmuka yang sesuai |
---|---|
bFunctionClass | bInterfaceClass |
bFunctionSubclassClass | bInterfaceSubClass |
Bidang bFirstInterface dari IAD menunjukkan jumlah antarmuka pertama dalam fungsi. Bidang bInterfaceCount dari IAD menunjukkan berapa banyak antarmuka dalam koleksi antarmuka. Antarmuka dalam koleksi antarmuka IAD harus berdekatan (tidak boleh ada celah dalam daftar nomor antarmuka), sehingga hitungan dengan nomor antarmuka pertama cukup untuk menentukan semua antarmuka dalam koleksi.
Mengakses konten IAD
Driver klien tidak dapat mengakses deskriptor IAD secara langsung. Pemberitahuan perubahan rekayasa IAD (ECN) menentukan bahwa IAD harus disertakan dalam informasi konfigurasi yang dikembalikan perangkat ketika mereka menerima permintaan dari perangkat lunak host untuk pendeskripsi konfigurasi (konfigurasi GetDescriptor). Perangkat lunak host tidak dapat mengambil IAD secara langsung dengan permintaan GetDescriptor.
Namun, driver klien dapat meminta driver induk perangkat USB untuk pengidentifikasi perangkat keras (ID) perangkat keras perangkat, dan ID perangkat keras perangkat berisi informasi yang disematkan tentang bidang IAD.
Contoh deskriptor asosiasi antarmuka USB
Bagian ini menggambarkan tata letak deskriptor untuk perangkat USB komposit. Perangkat contoh memiliki dua fungsi:
Fungsi kelas video
Deskriptor asosiasi antarmuka (IAD) mendefinisikan fungsi ini. Fungsi ini berisi dua antarmuka: antarmuka nol (0) dan antarmuka satu (1).
Sistem menghasilkan perangkat keras dan pengidentifikasi yang kompatibel (ID) untuk fungsi tersebut, seperti yang dijelaskan dalam Dukungan untuk Kelas Perangkat Komunikasi Seluler Nirkabel. Setelah OS cocok dengan file INF yang sesuai, sistem memuat tumpukan driver kelas video.
Fungsi perangkat input manusia (HID)
Fungsi ini hanya berisi antarmuka dua (2).
Sistem menghasilkan perangkat keras dan ID yang kompatibel untuk fungsi tersebut, seperti yang dijelaskan dalam Enumerasi Koleksi Antarmuka pada Perangkat Komposit USB. Setelah OS cocok dengan file INF yang sesuai, sistem memuat driver kelas perangkat input manusia (HID).
Deskriptornya adalah sebagai berikut:
Pendeskripsi perangkat
BYTE bLength 0x12
BYTE bDescriptorType 0x01
WORD bcdUSB 0x0200
BYTE bDeviceClass 0xEF
BYTE bDeviceSubClass 0x02
BYTE bDeviceProtocol 0x01
BYTE bMaxPacketSize0 0x40
WORD idVendor 0x045E
WORD idProduct 0xFFFF
WORD bcdDevice 0x0100
BYTE iManufacturer 0x01
WORD iProduct 0x02
WORD iSerialNumber 0x02
BYTE bNumConfigurations 0x01
Pendeskripsi konfigurasi
BYTE bLength 0x09
BYTE bDescriptorType 0x02
WORD wTotalLength 0x...
BYTE bNumInterfaces 0x03
BYTE bConfigurationValue 0x01
BYTE iConfiguration 0x01
BYTE bmAttributes 0x80 // (BUS Powered)
BYTE bMaxPower 0x19 // (50 mA)
Deskriptor asosiasi antarmuka
BYTE bLength 0x08
BYTE bDescriptorType 0x0B
BYTE bFirstInterface 0x00
BYTE bInterfaceCount 0x02
BYTE bFunctionClass 0x0E
BYTE bFunctionSubClass 0x03
BYTE bFunctionProtocol 0x00
BYTE iFunction 0x04
Deskriptor antarmuka kontrol video
BYTE bLength 0x09
BYTE bDescriptorType 0x04
BYTE bInterfaceNumber 0x00
BYTE bAlternateSetting 0x00
BYTE bNumEndpoints 0x01
BYTE bInterfaceClass 0x0E
BYTE bInterfaceSubClass 0x01
BYTE bInterfaceProtocol 0x00
BYTE iInterface 0x05
Deskriptor khusus kelas kontrol video
. . . .
. . . .
. . . .
Deskriptor titik akhir kontrol video
. . . .
. . . .
. . . .
Deskriptor antarmuka streaming video
BYTE bLength 0x09
BYTE bDescriptorType 0x04
BYTE bInterfaceNumber 0x01
BYTE bAlternateSetting 0x00
BYTE bNumEndpoints 0x01
BYTE bInterfaceClass 0x0E
BYTE bInterfaceSubClass 0x02
BYTE bInterfaceProtocol 0x00
BYTE iInterface 0x06
Deskriptor khusus kelas streaming video
. . . .
. . . .
. . . .
Deskriptor titik akhir streaming video
. . . .
. . . .
. . . .
Pendeskripsi antarmuka perangkat input manusia (HID)
BYTE bLength 0x09
BYTE bDescriptorType 0x04
BYTE bInterfaceNumber 0x02
BYTE bAlternateSetting 0x00
BYTE bNumEndpoints 0x01
BYTE bInterfaceClass 0x03
BYTE bInterfaceSubClass 0x01
BYTE bInterfaceProtocol 0x01
BYTE iInterface 0x07
Deskriptor khusus kelas HID
. . . .
. . . .
. . . .
Deskriptor titik akhir HID
. . . .
. . . .
. . . .
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk