如何在断开连接时跟踪USB设备?

时间:2013-05-04 13:56:59

标签: macos usb iokit

我有一堆USB串口设备(准确地说:http://plugable.com/products/PL2303-DB9),如果可能的话,我想在拔出/重新插入事件中“跟踪”它们(即使replug事件是指另一个USB端口。)

驱动程序似乎从其USB位置创建了BSD dialin / callout / tty设备名称,但这会根据您插入的USB端口而改变。

查看插入两个独立USB端口的两个相同设备之间的IOKit属性字典,唯一的区别在于sessionIDUSB AddresslocationIDportNum或似乎来自locationID的值。 sessionID似乎每个会话都会发生变化(即每次拔出/重新插拔后都会有所不同)。

由于这些设备都为0返回iSerialNumber,我想我基本上已经搞砸了,但我想我会把它扔到这里,看看是否有人有任何想法。是否有一些通用设施可以将一些“令牌”写入我可以读回的USB设备?我在USB标准的快速浏览/谷歌搜索中没有看到任何内容,但是这样的设施肯定会有所帮助......

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

不幸的是,没有好的方法可以做到这一点(如果你想出一个,请在这里发布,因为我多年来一直试图提出一个)。

正如您所推测的那样,问题在于设备本身没有唯一的ID。如果设备具有唯一的序列号(在IOKit属性字典中公开),您可以处理它,如果您可以访问的设备上有一点用户可寻址的闪存,那么您可以写入它,但是就我能够神圣而言,没有任何东西。

到目前为止,我唯一能做的就是跟踪位置,并告诉人们如果想要识别设备,可以将设备连接到相同的端口。但是,在我的情况下,我确实有一组可预测的设备,它们自己处理序列号,所以我可以通过直接查询串行线另一端的设备来做一些。

答案 1 :(得分:0)

USB串行驱动程序框架没有强制(或至少强烈建议)所有驱动程序都使用设备“位置ID”创建/dev文件,这很糟糕。

通过设备所连接的物理端口来标识设备似乎是逻辑上的通用值。它始终提供,始终唯一,始终特定于物理端口,在重新启动后不会更改,如果再次将其重新连接到同一物理端口也不会在移除和重新插入之间更改,并且不依赖于可选具有这样的序列号。

同时,对于那些没有序列号的设备(例如Prolific PL2303),每次删除设备时,当前驱动程序(1.6.1,又名1.6.0,在10.13.6上)都会组成一些随机的/dev/cu.usbserialN名称并重新连接(即使连接到同一端口),并且通常在重新启动后也会更改。

例如,以下是我的三个USB串行设备插入外部集线器的情况:

    USB2.0 Hub:

      Product ID: 0x0610
      Vendor ID: 0x05e3  (Genesys Logic, Inc.)
      Version: 92.12
      Speed: Up to 480 Mb/sec
      Manufacturer: GenesysLogic
      Location ID: 0x26400000 / 3
      Current Available (mA): 500
      Current Required (mA): 100
      Extra Operating Current (mA): 0

        USB-Serial Controller:

          Product ID: 0x2303
          Vendor ID: 0x067b  (Prolific Technology, Inc.)
          Version: 3.00
          Speed: Up to 12 Mb/sec
          Manufacturer: Prolific Technology Inc.
          Location ID: 0x26430000 / 8
          Current Available (mA): 500
          Current Required (mA): 100
          Extra Operating Current (mA): 0

        USB-Serial Controller:

          Product ID: 0x2303
          Vendor ID: 0x067b  (Prolific Technology, Inc.)
          Version: 3.00
          Speed: Up to 12 Mb/sec
          Manufacturer: Prolific Technology Inc.
          Location ID: 0x26420000 / 7
          Current Available (mA): 500
          Current Required (mA): 100
          Extra Operating Current (mA): 0

        FT232R USB UART:

          Product ID: 0x6001
          Vendor ID: 0x0403  (Future Technology Devices International Limited)
          Version: 6.00
          Serial Number: A603YGV3
          Speed: Up to 12 Mb/sec
          Manufacturer: FTDI
          Location ID: 0x26410000 / 6
          Current Available (mA): 500
          Current Required (mA): 90
          Extra Operating Current (mA): 0