У меня есть касса с устройством чтения магнитных карт, и если я просто открою текстовый редактор и чередую карточку, я могу получить вывод, подобный этому:
ñ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 serialport вместо node-usb, но serialport, похоже, не принимает устройства в / dev /bus/usb.
Любая помощь будет принята с благодарностью.