Можно ли считать физические нажатия клавиш в файле node.js?

У меня есть нодовое приложение, которое работает на Raspberry Pi, которое отслеживает группу UPnP-плееров (Sonos), которыми я бы хотел управлять через физический пульт. У меня есть пара аэромашин, которые имеют маленькие клавиатуры и кнопки регулировки громкости, которые я хотел бы использовать.

Я попытался понять, как считывать физические нажатия клавиш на машине с Linux, и пришел к выводу, что мне нужно читать события с устройства ввода, которое в моем случае будет:

/dev/input/by-id/usb-Dell_Dell_QuietKey_Keyboard-event-kbd

Как найти устройство и тому подобное, не проблема, реальная проблема заключается в том, как интерпретировать данные, которые вы с него читаете.

Я знаю, что вы получите структуру C, например:

struct input_event {
    struct timeval time;
    unsigned short type;
    unsigned short code;
    unsigned int value;
};

Но я'Я не уверен, как бы я прочитал это с узла. Если бы я мог запустить внешнее приложение, которое было бы вызвано предварительно определенными нажатиями клавиш, а затем вызвать HTTP-запрос к моему узлу, это был бы мой второй вариант, скрипт на python или какой-нибудь нативный демон. Я, однако, посмотрел на некоторые демоны горячих клавиш, но ни один из них не сработал.

Если бы, конечно, было бы хорошо, если бы я мог как-то содержать его внутри узла.

РЕДАКТИРОВАТЬ: Итак, я провел некоторое тестирование и сделал простой фрагмент:

var fs = require('fs');

var buffer = new Buffer(16);

fs.open('/dev/input/by-id/usb-HJT_Air_Mouse-event-kbd', 'r', function (err, fd) {
    while (true) {
        fs.readSync(fd, buffer, 0, 16, null);
        console.log(buffer)
    }
});

Это выводит что-то вроде этого (для пространства):







Я понимаю, что первые четыре байта являются своего рода меткой времени, а следующие 3 байта могут быть чем-то вроде микро / миллисекунды.

Еще одна странность состоит в том, что не все нажатия клавиш выдают результат, но последующее нажатие может отправлять вдвое больше данных, и большую часть времени он начинает обрабатывать данные, которые прекращаются после последующих нажатий клавиш (или примерно через 20 секунд или около того). Я'Я не совсем уверен, как это интерпретировать. Я пытался прочитать исходный код этого демонаhttps://github.com/baskerville/shkd/blob/master но С не мой самый сильный язык, и я могуне определить, как он справляется с этим (или даже должен ли он быть обработан). И этот демон недаже не работает для меня (скомпилировал его на малиновом пи).

Ответы на вопрос(2)

Ваш ответ на вопрос