我正在尝试使用node-usb库从node.js访问ACS芯片读取器(ACR1252)。但是似乎由于没有文档,该库确实是一个使用难题。到目前为止,我已经识别出该设备并连接到接口(仅在Mac,Linux上仍然无法正常工作)。
识别出芯片后,设备将在取出芯片时发出<Buffer 50 03>
和<Buffer 50 02>
。
但是,当发送命令获取芯片的序列号时,转接调用失败,错误为undefined
。
到目前为止,这是我的代码:
import usb, { InEndpoint, OutEndpoint } from 'usb';
usb.on('attach', device => {
device.__open();
device.__claimInterface(0);
device.open();
const ifc = device.interface(0);
ifc.claim();
const outEndpoint: OutEndpoint = <OutEndpoint>ifc.endpoints[0];
const inEndpoint: InEndpoint = <InEndpoint>ifc.endpoints[2];
inEndpoint.startPoll();
inEndpoint.on('data', (buffer: Buffer) => {
console.warn('-- Received data: ', buffer);
if (buffer.toString('hex') === '5003') {
console.warn('Chip recognized!');
outEndpoint.transfer(Buffer.from('FF CA 00 00 00', 'hex'), error => {
console.warn('transfer error', error);
});
}
});
inEndpoint.on('error', error => {
console.warn('error', error);
});
});
输出日志:
-- Received data: <Buffer 50 03>
Chip recognized!
transfer error undefined
-- Received data: <Buffer 50 02>
答案 0 :(得分:1)
您必须实现CCID协议才能与智能卡读取器进行通信(这不像将APDU发送到USB端点那么简单)。
考虑使用提供node-pcsclite API的PC/SC,这是与智能卡读卡器进行通信的标准方式-您的代码将与已安装驱动程序支持的任何智能卡读卡器一起使用,而您无需实现CCID。
有关示例,请参见Ludovic Rousseau's blog。
祝您的项目好运!