繁体   English   中英

检测来自哪个USB端口输入

[英]Detecting from which USB port input comes

我有一个项目,其中输入将来自多个外围设备(在本例中为条形码扫描仪),并且我需要知道输入来自哪个条形码扫描仪,但是我在研究时发现的全部内容都与USB驱动器有关。 我在Raspberry Pi 2上使用Java。

我假设您的应用程序将对来自特定条形码扫描仪的数据执行特定操作,即,scanner1连接到收银机1,scanner2连接到收银机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设备连接到计算机,该规则就会执行。 但是,这与您的问题无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM