Получите доступ к считывателю чипов ACS из node.js
Я пытаюсь получить доступ к считывателю микросхем ACS (ACR1252) из node.js с помощью библиотеки node-usb. Но кажется, что библиотека действительно требует использования из-за отсутствия документации. До сих пор я распознал устройство и подключился к интерфейсам (только на 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>
1 ответ
Вам потребуется реализовать протокол CCID для связи со считывателем смарт-карт (это не так просто, как отправка APDU на конечную точку USB).
Подумайте об использовании node-pcsclite, который предоставляет PC / SC API, который является стандартным способом взаимодействия со считывателями смарт-карт - ваш код будет работать с любым считывателем смарт-карт, поддерживаемым установленными драйверами, и вам не нужно будет реализовывать CCID.
См . Блог Людовика Руссо для примера.
Удачи с вашим проектом!