Возникли проблемы с использованием node-usb для интерпретации данных из устройства чтения магнитных полос - PullRequest
0 голосов
/ 10 января 2020

У меня есть касса с устройством чтения магнитных карт, и если я просто открою текстовый редактор и чередую карточку, я могу получить вывод, подобный этому:

ñ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.

Любая помощь будет принята с благодарностью.

...