如何使用 node-hid 库将来自 device.on() 方法的数据响应转换为字符串

How to convert to string the data response from device.on() method using node-hid library

我必须在 NodeJS 中实现一个 API 连接到 HID 接口扫描仪以读取条形码,我正在使用 NodeJS 调用 node-hid 的库,该库允许连接到接口 USB,代码是:

//import
var HID = require('node-hid');

//connect to my interface
var device = new HID.HID(int,int)

//print all devices
console.log('DEVICE: ', device )

//My device is: 

{
    vendorId: int,
    productId: int,
    path: 'IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/XHC1@14/XHC1@14000000/....',
    serialNumber: '',
    manufacturer: 'Microchip Technology Inc.',
    product: 'Keyboard',
    release: 1,
    interface: 0,
    usagePage: 1,
    usage: 6
  }

到这里,一切都好。

为了从我的设备读取事件和查看数据扫描,我必须实现这个:

device.on('data', function(data) {
 console.log(data.toString())
} )

响应是:

**'

'

,

$

$

'













%**

文档说使用 toString() 就足够了,但结果不是预期的:00 7702111228221

不带.toString返回打印的数据为:

<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 2c 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 24 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 24 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1f 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1e 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1e 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1e 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1f 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1f 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 25 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1f 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1f 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1e 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>

有人对此有经验。谢谢!

缓冲区中的代码是来自典型 USB 键盘的 HID 报告。它们在第 10 章“Keyboard/Keypad 页面 (0x07)”的 Universal Serial Bus HID Usage Tables 文档中进行了描述。每个报告的格式取决于报告描述符,但几乎总是:1 字节修饰符(ctrl、alt 等),1 字节保留,6 字节表示最多同时按下 6 个键。包含全零的报告意味着“当前没有按键被按下”。

在您的示例中,缓冲区指示以下序列:

27 = '0' key pressed
00 = no keys pressed
27 = '0' key pressed
00 = no keys pressed
2c = Space key pressed
00 = no keys pressed
24 = '7' key pressed
00 = no keys pressed
.
.
.

...等等。

您可以使用磁条 npm 包并使用它的 parse_card 方法获取 json 格式的数据。

const parser = require('mag-stripe');
device.on('data', function(data) {
  let result = parser.parse_card(data.toString());
  console.log("data ===> ",result)
})