检测USB端口输入来自哪里

时间:2016-03-09 15:31:34

标签: java usb raspberry-pi2

我有一个项目,其中输入来自多个外围设备(在这种情况下,条形码扫描仪),我需要知道输入来自哪个条形码扫描仪,但我在研究这个时发现的所有信息都是通过USB进行扫描驾驶。我在Raspberry Pi 2上使用Java。

1 个答案:

答案 0 :(得分:0)

我假设您的应用程序将使用来自特定条形码扫描仪的数据执行特定操作,即scanner1连接到收银机1,扫描仪2连接到寄存器2等。此外,我假设您使用一些标识扫描仪硬件,可识别Linux系统作为HID 键盘设备。

在现代Linux操作系统(如Raspbian)上,USB设备在/dev/input/by-id中注册为设备节点。连接到我的Pi的键盘示例是:/dev/input/by-id/usb-0130_0005-event-kbd

Linux HID设备节点允许您直接从它们读取,就像您从文件中读取一样。这意味着您可以执行以下操作,以确保您的Java程序仅从特定条形码扫描程序读取:

DataInputStream in = new DataInputStream(
        new FileInputStream("/dev/input/by-id/usb-0130_0005-event-kbd"));
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while((line = reader.readLine()) != null) {
    // evaluate the EAN code which is now in line
}

假设您的扫描仪像我们的扫描仪在每次成功扫描代码后发送回车/换行符。

我们在其中一个应用程序中使用类似的代码,以确保我们的用户不会意外地扫描其他字段(如名称和说明字段)中的EAN代码。在我们的应用程序中,条形码扫描程序将项目添加到项目列表中,键盘输入专门用于其他用户输入。

main方法中的应用程序启动时,我们使用与此类似的代码,以确保键盘和条形码扫描仪得到区分。

public static void main(String args[]) {
    String keyboardInput = args[0];
    String barcodeInput = args[1];
    // see code above how to read from the particular devices
}

对于应用程序启动,我们使用Linux命令行工具来确定哪些设备节点引用条形码扫描器以及哪些设备节点引用键盘。基本上是lsusb和一组Udev规则的组合,只要USB设备连接到机器就会执行这些规则。但是,这不符合您的问题。