从 node.js 访问 ACS 芯片 reader
Access ACS chip reader from node.js
我正在尝试使用 node-usb 库从 node.js 访问 ACS 芯片 reader (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>
您必须实施 CCID 协议才能与智能卡 reader 通信(这不像将 APDU 发送到 USB 端点那么简单)。
考虑使用 node-pcsclite which provides PC/SC API,这是与智能卡 reader 通信的标准方式——您的代码将适用于已安装驱动程序支持的任何智能卡 reader而且您不必实施 CCID。
请参阅 Ludovic Rousseau's blog 示例。
祝你项目顺利!
编辑>
javascript here.
有一个演示 CCID 实现
我正在尝试使用 node-usb 库从 node.js 访问 ACS 芯片 reader (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>
您必须实施 CCID 协议才能与智能卡 reader 通信(这不像将 APDU 发送到 USB 端点那么简单)。
考虑使用 node-pcsclite which provides PC/SC API,这是与智能卡 reader 通信的标准方式——您的代码将适用于已安装驱动程序支持的任何智能卡 reader而且您不必实施 CCID。
请参阅 Ludovic Rousseau's blog 示例。
祝你项目顺利!
编辑>
javascript here.
有一个演示 CCID 实现