close

USB Device 資料讀取方式的研究

 

隨著越來越多的設備通過USB介面與主機連接,我們需要讀取USB設備的資料。現就幾種不同讀取USB Device Data的方法進行探討。非常歡迎網友補充。

 

方法一:讀取/dev/input/eventX

此方法只對HID設備有效。只要USB設備注明是HID Input設備,則它的資料就會被解析為輸入裝置並填入/dev/input/eventX.

 

對此設備的操作和資料讀取。見:

http://blog.sina.com.cn/s/blog_602f87700101dno6.html

 

要系統自動創建/dev/input/eventX. 則需要在Kernel配置中作如下動作:

Device Drivers  ---> Input device support  --->  -*- Generic input layer (needed for keyboard, mouse, ...)

Device Drivers  ---> Input device support  --->  <<font color="#ed1c24">*>   Event interface

 

優點:ioctl眾多,可以得到輸入裝置非常多的資訊。且資料結構明顯。讀取資料方便。

缺點:資料只包括HID Input 資料,其它非Input Event資料如Raw Data。則無法從這裡得到。

 

 

方法二:讀取/dev/hidrawX 設備

/dev/hidrawX設備解釋:

當支援不是標準的User interface DeviceHID Device時。/dev/hidrwa與稍候會提到的/dev/hiddev的區別是:這個Device不處理hid Event. not parsing, no lookups.

要避免使用用戶層庫  libhid/libusb. (SamKernel中這個說明也不太明白,因為發現hidrawlibusb可以同時使用的)

 

要支持/dev/hidraw. 則需要Kernel作如下配置:

Device Drivers  ---> [*] HID Devices  --->  [*]     /dev/hidraw raw HID device support

 

讀取過程:

首先看其資料結構:

#hexdump /dev/hidraw2

 

0000000 fe04 0054 0000 0000 0001 0000 0000 0000

0000010 0000 0000 0000 ff00 00ff 0000 2300 005a

0000020 fe04 0054 0000 0000 0001 0000 0000 0000

0000030 0000 0000 0000 ff00 00ff 0000 2300 005a

0000040 fe04 0054 0000 0000 0001 0000 0000 0000

0000050 0000 0000 0000 ff00 00ff 0000 2300 005a

 

Sam這個設備為例:可以發現每32個位元組,資料有個重複。所以推測USB設備每個資料包32位元組。

 

所以可以使用open,read 等方式得到USB Device Raw Data.

 

http://blog.sina.com.cn/s/blog_602f87700101f3uo.html

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 立你斯 的頭像
    立你斯

    立你斯學習記錄

    立你斯 發表在 痞客邦 留言(0) 人氣()