如何获得 USB iManufacturer 编号?

use*_*757 1 c usb driver libusb

这是我的 C 代码:

int main()
{
    struct usb_bus *busses, *bus;
    usb_init();
    usb_find_busses();
    usb_find_devices();

    busses = usb_get_busses();

    for (bus = busses; bus; bus = bus->next)
    {
        struct usb_device *dev;

        for (dev = bus->devices; dev; dev = dev->next)
        {
            struct usb_device_descriptor *desc;

            desc = &(dev->descriptor);
            printf("idVendor/idProduct ID: %2.2x : %2.2x\n",desc->idVendor,desc->idProduct);

            if ((desc->idVendor == 0x2232) && (desc->idProduct == 0x6001))
            {
                printf("iManafacturer/iProduct ID: %04x  :%04x \n",desc->iManufacturer,desc->iProduct);
                //return dev;
            }
        }
    }
    system("pause");
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

在我编译代码(编译结果)后,我无法像USBView结果一样获得iManufacturer编号。我不知道如何像USBView显示那样获得iManufacturer(例如NMGAAI00010200144W11111)。

我怎样才能做到这一点?

编译结果 USB查看结果

Lei*_*iaz 5

iManufacturer设备描述符的字段是索引制造商的串描述符。字符串是可选的,索引为 0 表示没有字符串。

如果您想要字符串,您可以使用static int libusb_get_string_descriptor()任何可用语言的 unicode 字符串或使用第一种可用语言int libusb_get_string_descriptor_ascii()为您提供 C“字符串”的便捷方法。你需要libusb_device_handle第一个。

没有任何错误检查的快速丑陋示例:

libusb_open(dev, &dev_handle);
unsigned char manufacturer[200];
libusb_get_string_descriptor_ascii(dev_handle, desc->iManufacturer,
  manufacturer,200);
printf("%s \n", manufacturer);
Run Code Online (Sandbox Code Playgroud)

在0.1中,有类似的方法usb_get_string()usb_get_string_simple()