【问题标题】:Access ACS chip reader from node.js从 node.js 访问 ACS 芯片阅读器
【发布时间】:2018-10-10 10:20:52
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

    标签: node.js usb libusb smartcard-reader node-usb


    【解决方案1】:

    您必须实现CCID 协议才能与智能卡读卡器进行通信(这并不像将 APDU 发送到 USB 端点那么简单)。

    考虑使用node-pcsclite,它提供了PC/SC API,这是与智能卡读卡器进行通信的标准方式——您的代码将适用于已安装驱动程序支持的任何智能卡读卡器,而您不必实施 CCID。

    有关示例,请参阅 Ludovic Rousseau's blog

    祝你的项目好运!

    编辑>

    有一个 javascript here 的演示 CCID 实现。

    【讨论】:

    • 感谢您的解释! node-pcsclite 效果很好。我没想到它会变得那么复杂:D
    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2010-10-20
    • 2011-07-16
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    相关资源
    最近更新 更多