2017-05-05 603 views
0

我有一個QR /條碼掃描器連接到我的Linux系統,它作爲/ dev/hidraw1設備來。 如果我做ls -la /dev/hidraw*我得到讀取從/ dev/hidraw1設備連接到linux系統

crw------- 1 root root 248, 0 May 5 10:18 /dev/hidraw0 
crw------- 1 root root 248, 1 May 5 11:05 /dev/hidraw1 

每當我嘗試使用cat /dev/hidraw1命令我與編碼數據一起獲得了大量的垃圾數據的這種設備來讀取也不會在一個格式化的方式出現。這裏是一個QR碼的輸出

68<,? 
      .4xml ve7'rsion4="1 

..0"4 encod-%in4876g= 
            "UTF-8"?><PrintLetterB, 
                     .arcod4e&D!'ata"&% ' uid=$"12345,.678",name= 
                                     "Rohit 4Ka, 
poo.44r,."4 gend&& er=4"M,."4 yob=8"319,93" co 
                   ="S 

                    ,/O: 
                     Mukesh 4, 

爲什麼它沒有連續可讀的字符串,改變波特率也沒有任何區別。 Here is the screenshot attached

回答

0

你的是HID設備,而不是RS-232設備。它使用的協議是二進制的。您每次從設備上獲得的read()都是HID報告,而不是文本行。

報告的格式因設備而異。 HID規範要求設備發佈描述報告格式的HID報告描述符。這是...複雜的,但如果你只想使用這個特定的設備,你可以看看閱讀報告,並試圖推斷它的意思。

根據我的經驗,條碼掃描儀通常包含一個小標題,然後是有效載荷數據。標題通常包含條形碼類型和數據長度的字段。由於報告大小是固定的,但條形碼長度很長,因此長條形碼會分成多個報告,因此也有標誌可以表示是第一個,連續還是最後一個塊。

如果你想發佈設備的轉儲,進一步分析,請不要使用cat。使用hexdump -Cod -tx1或類似的東西顯示正確的二進制數據。

+0

我不需要二進制數據。我想要一個可讀的字符串。我面臨的問題是每當我拔下設備,我得到的結果是正確可讀的字符串,但是當我連續掃描時,我得到它在上面顯示的格式。 – user7345878

+0

@ user7345878:我真的懷疑當你_unplug_設備時,你會得到任何東西...... – rodrigo

+0

@ user7345878:啊,那是因爲你的掃描器是在模擬「模擬鍵盤」模式下配置的。閱讀'hidraw'你正在獲得標準鍵盤 HID報告,就好像鍵盤輸入一樣。內核將它視爲一個鍵盤,並將鍵入的文本發送到控制檯,但控制檯忙於使用「cat」,因此當數據回顯到屏幕並與二進制數據混雜在一起時,它也被緩衝在標準輸入。然後,當'cat'最終被殺死時,所有的stdin緩衝區都會以純文本的形式被轉儲。 – rodrigo

0

大多數掃描儀可以配置爲HID設備或USB CDC設備。查看掃描儀的手冊,例如「USB Interface Configuration」,看它是否可以設置爲USB CDC(或USB Com Port Emulation)。如果可以,它將作爲/ dev/ttyACM *附加在linux上,並將數據作爲串行流提供,這樣更易​​於閱讀。

相關問題