usb iConfiguration作用 请使用代码举例说明
时间: 2024-03-25 19:41:50 浏览: 52
以下是一个使用 libusb 库通过查询 iConfiguration 字段来获取 USB 设备配置信息的例子代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <libusb-1.0/libusb.h>
int main(int argc, char **argv) {
libusb_device **devs;
libusb_device *dev;
libusb_device_descriptor desc;
libusb_config_descriptor *config;
libusb_device_handle *handle = NULL;
int r, i, j;
// 初始化 libusb 库
r = libusb_init(NULL);
if (r < 0) {
fprintf(stderr, "libusb initialization failed: %s\n", libusb_error_name(r));
return 1;
}
// 获取 USB 设备列表
r = libusb_get_device_list(NULL, &devs);
if (r < 0) {
fprintf(stderr, "failed to get USB devices: %s\n", libusb_error_name(r));
return 1;
}
// 遍历 USB 设备列表
for (i = 0; devs[i]; i++) {
dev = devs[i];
// 获取设备描述符
r = libusb_get_device_descriptor(dev, &desc);
if (r < 0) {
fprintf(stderr, "failed to get device descriptor: %s\n", libusb_error_name(r));
goto next;
}
// 打印设备信息
printf("Device %04x:%04x\n", desc.idVendor, desc.idProduct);
printf("Number of configurations: %d\n", desc.bNumConfigurations);
// 遍历设备配置
for (j = 0; j < desc.bNumConfigurations; j++) {
// 获取配置描述符
r = libusb_get_config_descriptor(dev, j, &config);
if (r < 0) {
fprintf(stderr, "failed to get configuration descriptor: %s\n", libusb_error_name(r));
goto next;
}
// 打印配置信息
printf("Configuration %d:\n", config->bConfigurationValue);
printf("Configuration name: %s\n", libusb_get_string_descriptor_ascii(handle, config->iConfiguration));
// 释放配置描述符
libusb_free_config_descriptor(config);
}
next:
printf("\n");
}
// 释放设备列表
libusb_free_device_list(devs, 1);
// 退出 libusb 库
libusb_exit(NULL);
return 0;
}
```
该程序将遍历系统中所有的 USB 设备,打印出设备的 ID 和支持的配置数量,以及每个配置的 ID 和名称。其中,使用了 `desc.bNumConfigurations` 字段获取设备支持的配置数量,使用 `libusb_get_config_descriptor()` 函数获取配置描述符,然后使用 `config->iConfiguration` 字段获取指向配置名称字符串描述符的索引号,最后使用 `libusb_get_string_descriptor_ascii()` 函数获取该字符串描述符的内容。
阅读全文