【问题标题】:How to get a USB device path by its idVendor and idProduct?如何通过 idVendor 和 idProduct 获取 USB 设备路径?
【发布时间】:2017-02-21 02:35:05
【问题描述】:

如何根据 idVedor 和 idProduct 获取 USB 设备的路径,如 /dev/ttyACM0 或 /dev/ttyUSB0?后面的函数需要这个路径,而不是它的 idVendor 和 idProduct。

注意:通过 C/C++ 代码,而不是通过命令。

我正在使用 Qt 和 CentOS。

【问题讨论】:

  • 取决于设备。它是什么类型的设备?有些 USB 设备没有设备节点,有些则有多个。
  • 这是一个 Arduino 设备。在我的通勤中,它显示 /dev/ttyACM。

标签: linux usb


【解决方案1】:

您可以使用 USB 抽象库 libusbp 来执行此操作。请参阅port_name example that comes with libusbp。这肯定适用于 USB CDC ACM 设备(例如/dev/ttyACM0),但我不确定它是否适用于使用不同驱动程序的设备。如果您尝试过,请在此处发表评论,说明它是否有效。

【讨论】:

  • 谢谢大卫。我在以下链接中找到了另一个解决方案:stackoverflow.com/questions/14279796/…。该解决方案直接使用 libusb。我会尝试这两个。
  • 1) libusb::libusb_get_port_path(),libusb 1.0.21。结果不是我所期望的。它不是像 /dev/ttyACM0 这样的字符串。相反,它仍然与 libusb_get_port_numbers() 的结果相似。我没有找到更多关于如何使用 libusb_get_port_path() 以及如何解析其参数的示例。从libusbx.sourceforge.net/api-1.0/…,我发现libusb_get_port_path()是libusb_get_port_numbers()的贬值版本。
  • 2) libusbp::find_device_with_vid_pid(), libusbp 1.0.1 由于我使用的是 qmake4.8.6 但 libusbp 需要 c++11,所以我必须在 .pro 文件中添加 QMAKE_CXXFLAGS += -std=c++11。但在那之后,又出现了另一个错误:[main.o] Error 1. I check Qt "Compile Output",它说"cc1plus: error: unrecognized command line option "-std=c++11"。
  • 我使用的是g++ 4.4.7,但至少g++ 4.7支持c++11。看来我得升级我的g++了。
  • 在我的测试程序中,interface_number 必须是 0 或 1 而不是 2,并且复合为真或假都可以。下面是我的测试结果:/dev/ttyACM0.
猜你喜欢
  • 2017-12-18
  • 2022-08-12
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 2023-04-01
  • 2018-04-03
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多