Bagikan melalui


Deskriptor asosiasi antarmuka USB

Deskriptor asosiasi antarmuka USB (IAD) memungkinkan perangkat mengelompokkan antarmuka milik 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 menentukan 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 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 Bus Serial Universal. 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 ada di 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

Nilai kode memberi peringatan versi Windows yang tidak mendukung IAD untuk menginstal driver bus tujuan khusus yang mengindeks 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 diletakkan tepat sebelum antarmuka dalam grup antarmuka yang dijelaskan oleh IAD.

Bidang kelas fungsi (bFunctionClass), subkelas (bFunctionSubclassClass), dan bidang protokol (bFunctionProtocol) 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 menyarankan 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 isi IAD

Driver klien tidak dapat mengakses deskriptor IAD secara langsung. Pemberitahuan Perubahan Rekayasa (Engineering Change Notification/ECN) IAD menentukan bahwa IAD harus disertakan dalam informasi konfigurasi yang dikembalikan perangkat ketika menerima permintaan dari perangkat lunak induk untuk deskriptor konfigurasi (GetDescriptor configuration). Perangkat lunak host tidak dapat mengambil IAD secara langsung dengan permintaan GetDescriptor.

Namun, driver klien dapat mengajukan permintaan ke driver induk perangkat USB untuk identitas perangkat keras (ID) perangkat, dan ID perangkat keras perangkat berisi informasi yang disematkan tentang bidang IAD.

Contoh deskriptor asosiasi antarmuka USB

Bagian ini mengilustrasikan tata letak deskriptor untuk perangkat USB komposit. Contoh perangkat 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 masukan manusia (HID)

Fungsi ini hanya berisi antarmuka dua (2).

Sistem ini menghasilkan perangkat keras dan ID yang kompatibel untuk fungsi, 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:

Deskriptor 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

Deskriptor 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 pengendalian 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

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

Penggambaran 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

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

Deskriptor 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

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