我正在开发一个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);
答案 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) );