lvben5d 发表于 2022-8-9 10:42

如果有两个相同代码的usb设备连上电脑,主机如何区分?

本帖最后由 lvben5d 于 2022-8-22 13:41 编辑

相同设备的VID PID一般都只能烧录一份,因为上位机去比对不同pid 会很麻烦~好想我的产品 序列号 没有调试出来,上位机不知道哪里去获取libusb 是 libusb_open_device_with_vid_pid(ctx, USB_VENDOR_ID, product_id);   VID咱一般不可能去改,那会变动的 就应该是 pid了。

          这个是WINDOSW抓捕 USB热插入的获得usb 设备的dbcc_name字符串 前面主要部分~
我用的libusb 如果pid相同,只能开第1个设备。
查注册表速度慢,5楼通过libusb_get_device_list(nullptr, &list); 的方式 获取设备描述符 更快方便。WIN10已经验证OK。
WINDOWS不能通过libusb注册热插拔事件是个比较头痛的事情,插入新的设备,重新扫描list, 你要判断相同vid pid的 device_address是否已经存在,如果已经存在,说明那是个已经插入的同类usb设备。 热拔的时候,libusb 接收事件首先提供LIBUSB_TRANSFER_STALL,然后才进入::nativeEvent(......)

knk 发表于 2022-8-13 12:19

可以让每个USB设备都用不同的SN,根据SN再去识别。

lvben5d 发表于 2022-8-13 12:53

knk 发表于 2022-8-13 12:19
可以让每个USB设备都用不同的SN,根据SN再去识别。

我目前是根据PID区分~ 可以实现了。 如果用SN区分,是不是 VID PID都一样先 再通过设备描述符去访问

lvben5d 发表于 2022-8-14 13:33

本帖最后由 lvben5d 于 2022-8-17 10:10 编辑

我发现了一个问题,WINDOWS注册表里 USB设备文件夹 是 VIDPID以及版本 VVVVPPPPRRRR这个是一样的,而且libusbOPEN usb函数 只是输入VID PID,如果第2个设备跟第一个相同,libusb只能开第一个(官网明确说了) 看来,如果使用我这个上位机方式,我就改PID了。

humaoxiao3 发表于 2022-8-17 13:57

不需要修改 多个相同pid vid设备插到电脑上应该通过这两个接口区别
libusb_get_bus_number
libusb_get_device_address
也就是说他们的bus_number和device_address是不同的,可以区分出来
然后使用libusb_open接口打开设备
而不是libusb_open_device_with_vid_pid
后面这个函数只能打开第一个符合pid vid条件的设备

humaoxiao3 发表于 2022-8-17 13:58

也不需要操作什么注册表,libusb库内部作者早就把这些问题考虑到了,所有的设备操作都可以在libusb库内部解决

lvben5d 发表于 2022-8-19 07:53

本帖最后由 lvben5d 于 2022-8-23 16:48 编辑

设备热插入 和 拔出, windows下,Libusb热插拔函数就不能正常使用,官网1.0.9后号称支持热插拔事件,我只能推测是linux下支持了(windows下 我试过注册函数返回不了 0==SUCCESS) 最后用了网上大家推荐windows的消息函数 nativeEvent(虽然它会监听到所有USB设备热插拔)。 要是windows 下有其他libusb库函数应用(热插拔)的方式,楼上可以说说。 目前 我只能靠windows的消息函数 nativeEvent来做windows下热插拔监控了。 拔的时候,还可以监听出接收 STALL 事件,但是插入的时候 就。。。因为没插入就没usb句柄啊,无法进行库函数调用。
页: [1]
查看完整版本: 如果有两个相同代码的usb设备连上电脑,主机如何区分?