通过Node.js与ACR1252U NFC读卡器通话
我正尝试使用ACR1252U NFC读卡器( http://www.acs.com.hk/en/products/342/acr1252u-usb-nfc-reader-iii-nfc-forum-certified-reader/ )进行通讯Node.js和https://github.com/nonolith/node-usb NPM模块。
我已经创build了一个简单的脚本来获取阅读器的USB设备,并听取事件。
当NFC卡与阅读器接触时,我收到一个缓冲区:
<Buffer 50 03>
当NFC卡被取走时,我收到一个缓冲区:
<Buffer 50 02>
这表明我至less能够与读者工作的基本沟通。
我现在的问题是我试图获取有关NFC卡的信息,当它与读者联系。 我试图发送数据给读者,但不能得到一致的响应(有时我得到一个缓冲区响应,有时我不,一遍又一遍地运行相同的命令)。
我决定简化我发送的命令,打开和closures读卡器的内部蜂鸣器,所以我查看了API文档( http://www.acs.com.hk/download-manual/6402/API-ACR1252U-A1 -1.07.pdf )说,要激活你发送的蜂鸣器:
E0h 00h 00h 28h 01h + 1 byte to determine duration of buzzer activation
考虑到这一点,我创build了一个缓冲区:
var buf = new Buffer(6); buf.write('e00000280108', 'hex');
然后使用USB模块的输出端点发送数据:
outEndpoint.transfer(buf, function (err) { console.log('out transfer', err); });
控制台logging“out transfer”,没有错误,但没有收到“in”端点的内容。
如果我创build一个64字节的缓冲区:
var buf = new Buffer(64); buf.write('e00000280108', 'hex'); outEndpoint.transfer(buf, function (err) { console.log('out transfer', err); });
我收到“in”端点的响应:
<Buffer e0 00 00 00 00 01 00 42 ff 00>
这似乎不符合手册所期望的,也没有激活蜂鸣器。
我很直接地与这样的USB设备进行通信,而且我最近的这种types的体验是在当天发送AT命令给调制解调器:)
任何人都可以阐明我在做什么错? 我认为发送64字节而不是6与USB标准需要设置长度或类似的东西有关?!? 有其他人有与Node.js NFC读取器(非HID)沟通的经验吗? 最终,我想要做的就是将一些数据写入NFC标签,并在标签出现后再读回来。
我认为这将是一个非常简单的过程,但我很难过! 也许我应该以不同的方式编码数据? 也许我没有正确地终止数据? 我只是不知道!
我试图增加缓冲区大小1,并通过添加\ 0终止符到缓冲区:
buf.write('\0', 6, 'utf-8');
但这根本没有任何区别。
谢谢!
API规范中描述的命令是通过PC / SC与读取器交换的(伪)APDU命令。 当您通过USB直接访问阅读器而没有PS / SC抽象层(请参阅http://www.pcscworkgroup.com/specifications/overview.php )时,您必须自己实现该抽象。 因此,您必须自己实现USB CCID(芯片卡接口设备)类接口。 实际上,这意味着你必须在CCID协议中封装APDU命令。 你可以在这里find规范: http : //www.usb.org/developers/docs/devclass_docs/