2010-09-15 89 views
0

我現在有一個USB刷卡連接到嵌入式Linux的機器,從我可以告訴,從我已經研究它作爲一個鍵盤和輸入的所有數據,就好像我是打字。現在我有一個perl腳本,它將所有這些數據保存到一個文件中。唯一的問題是,它只知道當perl腳本在前臺運行時接收數據,否則「鍵盤」輸入到哪裏。Linux的背景刷卡讀卡器

我的問題是如何使該卡刷卡運行腳本每次讀取輸入時間?或者我可以用後臺運行的應用程序捕獲數據。 I.E.在後臺運行的C++程序中,將cin讀取機器的任何輸入?

我從來沒有與一個刷卡讀卡器所以我不是100%,他們是如何工作的肯定搞砸左右。

任何建議,將不勝感激!

回答

1

我有一個想法,但它是非常一般的。

你能不斷地在其他程序監測數據,緩存它,然後通過管道將結果納入當緩衝區達到一定規模或無二的時間沒有活動一段時間你的Perl腳本?如果你管它,你不應該修改你的perl腳本,因爲它仍然在STDIN上。

所以,這將是這樣的:

監測方案 - >收集數據 - >管到你的Perl程序

我希望這個想法是有幫助的。

-Brian J. Stinar-

+0

我有兩個人建議給我的管道。所以這就是我要嘗試的。我將把/ dev/whateverthevice寫入fifo。然後,我將有一個守護進程不斷讀取FIFO輸入文件。希望這可以解決! – 2010-09-16 05:00:23

1

CIN將讀取從附加終端的輸入裝置輸入。在不瞭解你的軟件設計的情況下,我的第一個預感是從Perl腳本讀取數據並不是設計的最佳選擇。正如你所描述的,我可以使用Perl腳本讀取嵌入式Linux設備上的紅外遙控器,但通常我可以直接與我的主應用程序中的硬件或供應商提供的API接口。您的讀卡器是否提供了API?

什麼是讀卡器的設備名稱,當它插入到你的機器(的/ dev/*)?我會打開並閱讀它。

1

我從來沒有在Linux下處理過這個問題。不過這聽起來與我在Windows中看到的非常相似。

根據我的經驗,很多這些類型的設備的操作系統爲鍵盤類設備的自動檢測。因此,來自閱讀器的任何輸入都會被輸入到真實鍵盤使用的相同鍵盤流中。到達任何實際程序運行時,無法分辨讀卡器輸入數據與用戶輸入真正非常快的差異。

因此,你在原來的問題描述的行爲:讀卡器輸入只飛到哪裏,普通鍵盤輸入變 - 在重點項目。

你最好的辦法是進行調查的製造商的網站(或以其他方式與他們聯繫),看看他們提供了一些類型的驅動程序,將允許程序完全分開趕上從鍵盤流,其輸入。

如果製造商不提供這樣的事情,也許某些第三方可以。但不幸的是,我從來沒有調查過,所以我不知道在哪裏告訴你甚至開始尋找。

5

我已經做了幾乎完全這(除了一個USB條形碼閱讀器,顯示爲鍵盤)。

我的系統具有自定義USB熱插拔規則,可根據其供應商和產品ID在插入USB設備時檢測USB設備。此規則創建一個符號鏈接到/dev/input/中相應的event設備。

然後我有一個運行在任何時間的C守護進程。它看着/dev/input/目錄,當它看到符號鏈接出現時,它會打開event設備。然後它使用EVIOCGRAB IOCTL來獲取專用的事件設備(這可以防止數據在其他應用程序中作爲鍵盤輸入出現),並讀取與按鍵相對應的輸入事件。守護進程將按鍵轉換爲字符並將它們存儲在數據庫中。