Проблемы с использованием node-usb для интерпретации данных считывающего устройства магнитной полосы
У меня есть касса со считывателем магнитной полосы, и если я просто открою текстовый редактор и разложу карту, я могу получить такой результат:
ñ30283000000306_
Теперь я успешно использовал пакет npm node-usb для подключения к считывателю, и я использую этот код для получения данных от него (с помощью машинописного текста):
async findMagReader() {
const devices = usb.getDeviceList().filter((d: usb.Device) => {
return d.deviceDescriptor.idProduct === 9;
});
if (devices[0]) {
this.listenToReader(devices[0]);
}
}
listenToReader(d: usb.Device) {
d.open();
const iFace: usb.Interface = d.interface(0);
if (iFace.isKernelDriverActive()) {
iFace.detachKernelDriver();
}
iFace.claim();
const endPoint: any = iFace.endpoints[0];
endPoint.startPoll();
endPoint.on('data', (data: any) => {
console.log(data);
});
}
Это последовательно считывается с карты как последовательность буферов, например:
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 33 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 20 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 1f 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 25 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 20 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 20 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 27 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 23 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 02 00 38 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 28 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
<Buffer 00 00 00 00 00 00 00 00>
И если я изменю console.log(data)
к console.log(data.toString())
Получаю следующее:
3
'
%
'
'
'
'
'
'
'
#
8
(
Итак, мой вопрос: как сделать так, чтобы приведенное выше значение напоминало значение, которое я получаю, если сканирую карточку в простом текстовом редакторе? Я пробовал все виды кодировок, но безуспешно.
Я также рассматривал возможность использования последовательного порта npm, а не node-usb, но, похоже, последовательный порт не принимает устройства в / dev / bus /usb.
Любая помощь будет принята с благодарностью.