gpt4 book ai didi

java - 检测来自哪个USB端口输入

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:19 25 4
gpt4 key购买 nike

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

最佳答案

我假设您的应用程序将使用来自特定条形码扫描仪的数据执行特定操作,即扫描仪1连接到收银机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 设备连接到计算机时就会执行这些规则。但是,这脱离了您问题的上下文。

关于java - 检测来自哪个USB端口输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35895875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com