Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Deskriptor perangkat berisi informasi tentang perangkat USB secara keseluruhan. This article describes the USB_DEVICE_DESCRIPTOR structure and includes information about how a client driver can send a get-descriptor request to obtain the device descriptor.
Setiap perangkat Universal Serial Bus (USB) harus dapat memberikan satu deskriptor perangkat yang berisi informasi yang relevan tentang perangkat. The USB_DEVICE_DESCRIPTOR structure describes a device descriptor. Windows menggunakan informasi tersebut untuk memperoleh berbagai set informasi. For example, the idVendor and idProduct fields specify vendor and product identifiers, respectively. Windows uses those field values to construct a hardware ID for the device. Untuk melihat ID perangkat keras perangkat tertentu:
- Open Device Manager.
- Right-click on the USB device and select Properties.
- Select the Details tab in the properties dialog box.
- Drop down the Property list.
- Select the Hardware Ids property
The values indicate the hardware IDs ("USB\XXX") that Windows generates.
The bcdUSB field of the USB_DEVICE_DESCRIPTOR structure indicates the version of the USB specification to which the device conforms. Misalnya, 0x0200 menunjukkan bahwa perangkat dirancang sesuai spesifikasi USB 2.0. The bcdDevice value indicates the device-defined revision number.
The USB driver stack uses bcdDevice, along with idVendor and idProduct, to generate hardware and compatible IDs for the device. You can view those identifiers in Device Manager. Deskriptor perangkat juga menunjukkan jumlah total konfigurasi yang didukung perangkat.
Perangkat mungkin melaporkan informasi yang berbeda dalam deskriptor perangkatnya ketika perangkat terhubung ke komputer host dalam kapasitas kecepatan tinggi daripada ketika terhubung dalam kapasitas kecepatan penuh. Perangkat tidak boleh mengubah informasi yang terkandung dalam deskriptor perangkat selama masa pakai koneksi, termasuk selama perubahan status daya.
Host mendapatkan pendeskripsi perangkat melalui transfer kontrol. Dalam transfer, jenis permintaan adalah GET DESCRIPTOR dan penerima adalah perangkat. Driver klien dapat memulai transfer tersebut dengan salah satu dari dua cara: dengan menggunakan objek perangkat target USB kerangka kerja atau dengan mengirim URB dengan informasi permintaan.
Mendapatkan deskriptor perangkat
Driver klien Windows Driver Frameworks (WDF) dapat memperoleh pendeskripsi perangkat hanya setelah objek perangkat target USB kerangka kerja dibuat.
A Kernel-Mode Driver Framework (KMDF) driver must obtain a WDFUSBDEVICE handle to the USB target device object by calling WdfUsbTargetDeviceCreate. Typically, a client driver calls WdfUsbTargetDeviceCreate in the driver's EvtDevicePrepareHardware callback implementation. After that, the client driver must call the WdfUsbTargetDeviceGetDeviceDescriptor method. After the call completes, the device descriptor is received in the caller-allocated USB_DEVICE_DESCRIPTOR structure.
A User-Mode Driver Framework (UMDF) driver must query the framework device object for an IWDFUsbTargetDevice pointer and then call the IWDFUsbTargetDevice::RetrieveDescriptor method and specify USB_DEVICE_DESCRIPTOR_TYPE as the descriptor type.
Host juga dapat memperoleh pendeskripsi perangkat dengan mengirim URB. Metode ini hanya berlaku untuk driver mode kernel. Namun, driver klien seharusnya tidak perlu mengirim URB untuk jenis permintaan ini kecuali driver didasarkan pada Windows Driver Model (WDM). Such a driver must allocate an URB structure and then call the UsbBuildGetDescriptorRequest macro to specify format the URB for the request. Driver kemudian dapat mengirim permintaan dengan mengirimkan URB ke tumpukan driver USB. Untuk informasi selengkapnya, lihat Cara Mengirimkan URB.
Contoh kode ini menunjukkan panggilan UsbBuildGetDescriptorRequest yang memformat buffer yang ditunjukkan oleh pURB dengan URB yang sesuai:
UsbBuildGetDescriptorRequest(
pURB, // Points to the URB to be formatted
sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST),
USB_DEVICE_DESCRIPTOR_TYPE,
0, // Not used for device descriptors
0, // Not used for device descriptors
pDescriptor, // Points to a USB_DEVICE_DESCRIPTOR structure
NULL,
sizeof(USB_DEVICE_DESCRIPTOR),
NULL
);
Contoh deskriptor perangkat
Contoh ini menunjukkan deskriptor perangkat untuk perangkat webcam USB (lihat Tata Letak Perangkat USB), yang diperoleh dengan menggunakan aplikasi USBView:
Device Descriptor:
bcdUSB: 0x0200
bDeviceClass: 0xEF
bDeviceSubClass: 0x02
bDeviceProtocol: 0x01
bMaxPacketSize0: 0x40 (64)
idVendor: 0x045E (Microsoft Corporation)
idProduct: 0x0728
bcdDevice: 0x0100
iManufacturer: 0x01
0x0409: "Microsoft"
iProduct: 0x02
0x0409: "Microsoft LifeCam VX-5000"
0x0409: "Microsoft LifeCam VX-5000"
iSerialNumber: 0x00
bNumConfigurations: 0x01
Dalam contoh sebelumnya, perangkat dikembangkan sesuai Spesifikasi USB, versi 2.0. Note the bDeviceClass, bDeviceSubClass, and bDeviceProtocol values. Nilai-nilai tersebut menunjukkan bahwa perangkat berisi satu atau beberapa deskriptor asosiasi antarmuka USB yang dapat digunakan untuk mengelompokkan beberapa antarmuka per fungsi. Untuk informasi selengkapnya, lihat Deskriptor Asosiasi Antarmuka USB.
Next, see the value of bMaxPacketSize0. Nilai ini menunjukkan ukuran paket maksimum titik akhir default. Perangkat sampel ini dapat mentransfer hingga 64 byte data melalui titik akhir defaultnya.
Biasanya, untuk mengonfigurasi perangkat, driver klien mendapatkan informasi tentang konfigurasi yang didukung di perangkat setelah mendapatkan pendeskripsi perangkat. To determine the number of configurations that the device supports, inspect the bNumConfigurations member of the returned structure. Perangkat ini mendukung satu konfigurasi. Untuk mendapatkan informasi tentang konfigurasi USB, driver harus mendapatkan Deskriptor Konfigurasi USB.