试图让node.js与HID设备

时间:2018-03-18 15:31:59

标签: node.js hid

我正在开发一个node.js项目,使用node-hid与Magtek eDynamo读卡器进行通信我能够连接并等待数据发送,但是当我尝试发送功能报告时请求代码每次都失败。

我正在使用programming manual here获取发送报告请求所需的信息。我尝试了以下几点没有成功。

var HID = require('node-hid');
var os = require('os');

var device_array = HID.devices('0x0801', '0x0019');
console.log(device_array);

if (device_array.length > 1){
  console.log('More than one magstripe reader is plugged in!');
  process.exit(1);
} else if (device_array.length == 0){
  console.log('No magstripe reader is plugged in!');
  process.exit(1);
}

var device = device_array[0];
var magstripe = new HID.HID(device.path);

magstripe.sendFeatureReport([0x20,0x09,0x00,0x00]); // Report request

对于报告请求,我尝试了以下

0x00(所有报告都在下面运行,在每个文档的win32开头有和没有零位)

0x20,0x09,0x00(没有最后的零位)

0x20,0x09,0x00 0x00(每个文档的数据位为零)

0x09,0x00

0x09,0x00,0x00

任何帮助都会非常感激,因为Magtek的支持不是很有帮助而且我很难过。

我收到错误

Error: could not send feature report to device
at Object.<anonymous> (L:\code\nodejs\node-hid\index.js:45:22)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3

注意:index.js 45:22是这段代码

var resp = magstripe.sendFeatureReport(messageA);

1 个答案:

答案 0 :(得分:0)

您遇到的问题是您正在发送部分数组。 为此,您应该始终将数组初始化为完整的页面大小。

我让它与Dynamag和DanaPro设备一起使用,而我发现的最简单的方法是初始化一个缓冲区(填充为零),然后初始化Array.from(my_buffer)...参见下面的示例。

let bytes = Buffer.alloc(64);
/* set data in the buffer */
bytes[0] = 0x20;
bytes[1] = 0x09;
// now send it
magstripe.sendFeatureReport(Array.from(data));

或者,您可以在数组而不是缓冲区上添加以下内容:

Array.prototype.zeroFill = function (len) {
    for (var i = this.length; i < len; i++) {
        this[i] = 0;
    }
    return this;
};

然后使用您的示例(指定设备页面大小):

magstripe.sendFeatureReport( [0x20,0x09,0x00,0x00].zeroFill(64) );