在C++中查找USB设备的信息

在C++中查找USB设备的信息

我需要使用我的 C++ 程序列出现有的 USB 集线器以及集线器中连接的设备。

我可以使用命令从终端打印 USB 集线器和连接在集线器中的设备

lsusb
lsusb -v 

我想在我的 C++ 程序中使用该功能。

我如何以编程方式执行此操作。是否有任何 C++ 类可在我的 Qt 应用程序中使用。

答案1

这是最简单的模拟lsusb

#include <stdio.h>
#include <usb.h>
main(){
    struct usb_bus *bus;
    struct usb_device *dev;
    usb_init();
    usb_find_busses();
    usb_find_devices();
    for (bus = usb_busses; bus; bus = bus->next)
        for (dev = bus->devices; dev; dev = dev->next){
            printf("Trying device %s/%s\n", bus->dirname, dev->filename);
            printf("\tID_VENDOR = 0x%04x\n", dev->descriptor.idVendor);
            printf("\tID_PRODUCT = 0x%04x\n", dev->descriptor.idProduct);
        }
}

编译用-lusb

答案2

这是 Fedora,对于基于 Debian 的发行版,您应该能够执行类似的操作:

  • 获取包含该程序的软件包:“rpm -qif /usr/bin/lsusb”告诉您它来自 usbutils 软件包,主页是http://www.linux-usb.org
  • 查看那里发布的源代码(大概是 C 语言,应该很容易从那里提取您需要的内容)

或者:

  • 找出内核在哪里/如何发布有关 USB 设置的信息,即 /sys/bus/usb/devices 显示整个设置
  • 了解该信息的组织方式(这是为了便于解析而设置的,因此处理起来应该不会太难)

绝望的解决办法:

  • 只需运行 lsusb(8) 程序本身并从其输出中获取所需的数据

顺便说一句,请考虑使用 Python 而不是 C++ 来编写 GUI 应用程序。 GUI 很少对性能足够关键,并且程序员时间的节省足以抵消任何效率损失(而且用户可能不会注意到它们)。

相关内容