向 USB 条码阅读器发送控制命令

问题描述

我们正在我们的一款产品中集成新的条码阅读器 (Newland NLS-FM430),我们需要控制其功能。我们已经用另一个阅读器实现了这个行为,但它是一个 RS232 版本,所以我们能够发送命令并等待它的输入。新版本是 USB 版本,让事情变得不同。

通常,我们希望在应用程序启动时初始化条形码阅读器(例如禁用读取设置代码)并将其关闭。然后我们想在需要输入的那一刻启用它,并在我们读取数据后再次禁用它。 user guide 中记录了所有这些操作的命令。

问题出现在尝试与 USB 设备通信时。当连接到计算机时,它充当普通键盘(人机界面设备,设备管理器中的 HID),我们需要向它发送命令。为此,我们需要打开一个流到设备并写入其中。我们尝试了不同的库和解决方案,打开设备总是失败并显示 ACCESS_DENIED 错误。我怀疑该设备被锁定,因为 Windows 将其用作键盘

我发现 this topic 讨论了一个类似的问题。他们通过删除设备路径中的后缀 /kbd(我们的也有这个后缀)找到了一种解决方法,但删除它对我们不起作用 - 它说它找不到设备。

我正在研究 C# 或 C/C++ 中的解决方案,它可以打开与 USB 设备的连接并写入该设备。非常感谢任何帮助。

解决方法

您介绍的用户指南指出扫描仪仍支持串行端口模式。

第 76 页:USB CDC
第 79 页:IBM SurePOS(手持)
第 79 页:IBM SurePOS(桌面)

您可以停止在键盘输入仿真模式下使用它,而使用串口模式。


这是因为,在用户指南的第 14 页 Chapter 3 System Settings 中也说明用户可以通过串行命令进行编程。

命令编程

FM430 也可以通过主机设备发送的串行命令进行配置。
用户可以设计一个应用程序将这些命令字符串发送到扫描仪以执行设备配置
更多信息请参考基于Newland统一命令集的编程指南。

此外,同样位于用户指南第 13 Chapter 2 EasySet 页的供应商提供的配置工具不支持在键盘输入模拟模式下进行配置。

EasySet 可以通过以下接口之一与设备通信:RS 232、USB COM Port Emulation(需要 UFCOM 驱动程序)、USB CDC(需要 UFCOM 驱动程序)、USB DataPipe(需要 UFCOM 驱动程序)、USB HID POS。>


此外,第 77 页上的 HID POS (POS HID Barcode Scanner) 模式允许作为 HID 的变体进行配置和输入/输出,如 USB.org 规范 HID Point of Sale Usage Tables 1.02 中所述。

但是,该方法将无法通知键盘输入模拟方法读取的条码。并且需要比串口模式下的设置/输入/输出更复杂的编程。