从node.js中的VID和PID获取USB设备的/ dev路径

时间:2017-07-20 15:09:04

标签: node.js usb

我正在编写一个node.js JavaScript应用程序,可以在Mac(macOS服务器)上运行,它将与插入的USB设备进行通信。我需要用来与设备交互的库需要一个路径形式/dev/pathToDevice - 例如lib.connect('/dev/pathToDevice'); - 而我在代码中识别USB设备的唯一方法是在插入时通过NPM的usb检测库获得的vendorId(VID)和productId(PID)。

我如何在JavaScript中从插入的USB设备的VID和PID中识别或导出设备的路径,以便将其传递给库?

2 个答案:

答案 0 :(得分:0)

您可以编写一个使用libusbp中的libusbp_generic_interface_get_os_filename函数的小型C ++程序。然后,您将从node.js调用C程序。如果您需要编写C ++程序的帮助,请告诉我。我可能会从libusbp的源代码树的port_name示例开始。

或者,您可以按原样使用lsusb中的libusbp示例。它为每个设备返回类似/sys/devices/pci0000:00/0000:00:06.0/usb1/1-1的路径。这是一个包含一堆特殊文件的目录;其中一个是busnum,其中一个是devnum,这是构建像/dev/bus/usb/DEVNUM/BUSNUM这样的路径所需的两个数字。

如果可行,您可能更喜欢从node.js为libusbp编写绑定,而不是使用C可执行文件。

答案 1 :(得分:0)

尝试drivelist,它为您提供了安装路径及其跨平台,您可以轻松地将其与USB检测结合起来。

var drivelist = require("drivelist")
drivelist.list((error, devices)=> { console.log(devices) })

//Output

[ { 
    //stuff...

    device: '/dev/disk0',
    raw: '/dev/rdisk0',
    mountpoints: [
          {"path":"/","label":"Macintosh HD"},
          {"path":"/private/var/vm","label":"VM"}
    ],
    isRemovable: false,

    //stuff....
]