我使用libusb列举了一些USB的设备。 现在,我想获得“设备路径”。 我认为这不叫USB设备的路径,因为我不是成功的谷歌。
如果我连接USB装置与Linux,我得到在消息dmesg
,这里有这样的“设备路径”与USB温度传感器的一些例子(类似于此 ):
直接到USB端口: [68448.099682] generic-usb 0003:0C45:7401.0056: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:12.0-1/input0
=> 12.0- 1
直接到另一个端口: [68560.853108] generic-usb 0003:0C45:7401.0058: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:13.0-1/input0
=> 13.0-1
到所述第一用过的端口上的USB集线器: [68600.245809] generic-usb 0003:0C45:7401.005A: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:12.2-1.4/input0
=> 12.2-1.4
在相同的USB集线器的另一个端口: [68647.925092] generic-usb 0003:0C45:7401.005C: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:12.2-1.3/input0
=> 12.2-1.3
的现在之前使用上的USB集线器的USB集线器: [68740.715518] generic-usb 0003:0C45:7401.005E: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:12.2-1.4.4/input0
=> 12.2-1.4.4
长话短说:内核消息总是包含了物理USB设备的位置(参见之前的粗体字)的唯一路径。 是否有可能得到这个“路径”中的libusb通过用户空间? 我试着用很多东西struct usb_bus
和struct usb_device
,但我始终是失败。
我需要这个来识别这些USB温度计的多,因为他们没有一个唯一的序列号,有时他们只是“重新连接”在运行时,使他们获得不同的USB的ID。 因此,我认为,以确定他们的唯一方法是通过物理位置。
谢谢您的帮助,
顺祝商祺凯文M.
-编辑-
目前我使用下面的代码来搜索我的USB设备:
usb_dev_handle *find_lvr_winusb() {
struct usb_bus *bus;
struct usb_device *dev;
for (bus = usb_busses; bus; bus = bus->next) {
for (dev = bus->devices; dev; dev = dev->next) {
if (dev->descriptor.idVendor == VENDOR_ID &&
dev->descriptor.idProduct == PRODUCT_ID ) {
usb_dev_handle *handle;
if(debug) {
printf("lvr_winusb with Vendor Id: %x and Product Id: %x found.\n", VENDOR_ID, PRODUCT_ID);
printf("INFO: %d\n", dev->bus->location);
printf("INFO: %d %s\n", bus->location, bus->dirname);
}
if (!(handle = usb_open(dev))) {
printf("Could not open USB device\n");
return NULL;
}
return handle;
}
}
}
return NULL;
}
但有了这个代码,我不能得到一个唯一的物理位置ID。 所述bus->location
返回一个整数(BUS->目录名包含相同的,但作为字符串),这不是唯一的。 我知道USB具有层次结构,并在dmesg
我可以看到这个hierarchys路径。
随着libusb的我只能坐公共汽车-ID(?)和一些设备的ID。 但他们不帮我,因为我需要确定两种或两种以上的温度传感器。 当温度传感器复位的连接(每5至60秒)和总线ID不是唯一的设备ID总是变化。 不幸的是,温度传感器没有唯一的序列号。
所以我觉得物理路径是识别设备的唯一途径。
此致凯文M.