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

    . . . .
    . . . .
    . . . .