2015-04-23 30 views
0

我在Qt中編寫了一個測試來獲取鍵盤的USB使用代碼,基本上是「掃描代碼」,但更粗糙一點。獲取鍵盤使用代碼,如何從讀取發送觸發()

我使用的修改版本showkey.c我轉換爲C++,分類和所有。作爲參考它的心臟是

n = read(fd, &buf, sizeof(buf)); 
if (n == -1) { cout << "ERROR READING USAGE CODE"; clean_up(fd); return n; } 
clean_up(fd); 
close(fd); 
return buf[0]; 

此時閱讀()監聽到USB端口,發回所有使用代碼和所有的好。它在buf [0]中返回一個64位整數,並且包含整個使用代碼列表,但是我將它解碼並且放入一個向量中(好或者不好,這是可行的) 這個散亂的帖子的問題和整個問題是,圖形用戶界面卡在等待按鍵時卡住。所以需要一個觸發器INSIDE read()?如果我正在閱讀一個文本文件,可以在每行之後觸發。

有關其他參考 GUI是整個鍵盤形狀的小按鈕,並且操作員按順序按下每個按鍵,並且按鈕顏色隨着它們變化而變爲綠色。所以GUI並沒有完全凍結,只是不能點擊中止測試或其他東西,直到當前測試通過失敗。

這可能不像我希望的那樣清楚,但可以閱讀擴展某種方式?

測試站正在使用Raspberry機器,Qt C++代碼和Rasbian Linux。有10個樹莓,最終會是機器人。

+0

你可以移動端口偵聽新線程嗎?這將保持GUI線程免費,並且Qt中的線程交互相當容易。 –

+0

我不完全確定的問題是什麼,但也許你需要打開文件描述符非阻塞:'FD = =開放(KEYBOARD_DEV,O_RDONLY | O_NONBLOCK);',其中'KEYBOARD_DEV'是對的FD鍵盤(在我的情況''/ dev/input/event3「')。或者也可以產生一個讀取鍵盤輸入的線程。 – Banan

+0

哦,我應該提到,我已經嘗試了線程化,但read()似乎仍然採取所有控制,直到按下一個鍵。並感謝您的意見。我試過O_RDONLY | O_NONBLOCK,但只能使用O_RDWR或失敗。 –

回答

0

謝謝大家的意見。我對線程和觸發器有一些基本的誤解。解決這個問題