我有一個節點應用程序,它運行在覆蓋一堆UPnP播放器(Sonos)的樹莓派上,我希望能夠通過物理遙控器進行控制。我有幾個airmouses,有小鍵盤以及我想要使用的音量按鈕。是否有可能讀出node.js中的物理鍵盤筆劃?
我曾試圖獲得關於如何讀出物理按鍵敲擊在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)
}
});
這個輸出是這樣的(空間):
<Buffer a4 3e 5b 51 ab cf 03 00 04 00 04 00 2c 00 07 00>
<Buffer a4 3e 5b 51 c3 cf 03 00 01 00 39 00 01 00 00 00>
<Buffer a4 3e 5b 51 cb cf 03 00 00 00 00 00 00 00 00 00>
<Buffer a4 3e 5b 51 ba 40 06 00 04 00 04 00 2c 00 07 00>
<Buffer a4 3e 5b 51 cd 40 06 00 01 00 39 00 00 00 00 00>
<Buffer a4 3e 5b 51 d2 40 06 00 00 00 00 00 00 00 00 00>
我意識到,前四個字節某種時間戳,接下來的3個字節可能是微/毫秒的東西。另一個奇怪的事情是,並非所有的按鍵都會產生輸出,但隨後的按鍵可能會發送兩倍的數據,並且大多數時候它會開始播放在隨後的按鍵之後停止的數據(或大約20秒左右之後)。我不確定如何解釋這一點。我試圖讀取這個守護進程https://github.com/baskerville/shkd/blob/master的源代碼,但C並不是我最強的語言,我無法確定他是如何處理它的(或者甚至應該處理它)。而這個守護進程甚至沒有爲我工作(編譯它在一個覆盆子pi)。
謝謝你,我已經在這裏找到了常量:http://tomoyo.sourceforge.jp/cgi-bin/lxr /source/include/uapi/linux/input.h和我就你的大小得出了類似的結論。然而,重複的事件是一個謎給我,以及我是否過濾掉不鍵入= 1和值= 0的一切,我通常會得到相應的鍵碼,但卻忽略了很多招。任何想法? – jishi
@jishi:鍵是出現在一個正常的控制檯或等?可能是因爲你的鍵盤只有一塊電池沒電了。 :D – thejh
感謝您的澄清。我想我可以放心地忽略MSC_SCAN條目。關於重複的代碼,看起來它是空中小屋的行爲,我無法複製戴爾有線鍵盤上的行爲。感謝您的反饋意見! – jishi