研究android HOST HID通訊很久了,也有些成果。總也沒時間怎麼總結過,今天就關於android作爲主設備與HID設備的通訊稍做總結,其實到目前爲止已經有不少博客總結過關於使用Android開發板或者平板作作設備與HID通訊的過程,這裏我就不作贅述,我這主要想講解的就是關於controlTransfer (int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)的參數問題。經過對linux 驅動關於USB通訊的研究,我這找到關於不少人對於前面的4參數的清晰的解析。其實此方法對應了Linux的一個函數就是:usb_control_msg(),你們能夠查下看下有以下一個結構體,其中的參數對應相信你看到後就不會陌生了,usb_ctrlrequest html
|-----------------------|
| __u8 bRequestType -|
| __u8 bRequest -|
| __le16 -wValue -|
| __le16 -wIndex -|
| __le16 -wLength -|
|-----------------------|
linux
bRequestType
D7 數據的傳輸方向:0表示從主機到設備; 1表示從設備到主機;
D6~5 命令的類型: 0表示標準命令; 1表示類命令; 2表示廠商提供的命令; 3保留;
D4~0 接收對象; 0表示設備; 1表示接口; 2表示端點; 3表示其餘;
bRequest
命令的序號(其實就是命令);全部的命令都是以不一樣編碼值的方式傳遞給設備的,bRequest就表示USB命令的編碼值android
我對這個參數的理解也就是請求號
wValue 函數
這個字段對於不一樣的命令有不一樣的含義,下面有介紹編碼
wIndex spa
傳遞索引或者諸如接口或者端點號的偏移量,這個參數要查找你要通訊的HID設備,我這裏的HID的接口的索引是0。 我對此參數也不很理解,從別人那看來的。個人應用中使用的默認值0,通訊無問題。htm
wLength
數據的長度,爲0或者buffer的長度對象
USB標準命令
---------------------------------------------------------------
命令 bReuestType bRequest wValue wIndex wLength 數據
Get_Descriptor 1000 0000b -GET_DESCRIPTOR 描述符類型 -0或語言ID --描述符長度 --描述符
-描述符的索引號
wValue 高8位表示描述符類型; 低8位表示描述符索引號
GET_DESCRIPTOR = 6
GetHubdescriptor = 0XA0
Get_Descriptor = 0X80
---------------------------------------------------------------
bRequestType bRequest wValue wIndex wLength
80 6 100 0 12
80 6 200 0 9
80 6 300 0 FF
80 6 301 409 FF
80 6 302 409 FF
80 6 303 409 FF
100 表示獲取設備描述符usb_device_descriptor
200 表示獲取配置描述符usb_config_descriptor
300 表示獲取字符描述符
301 iSerialNumber
302 iProduct
303 iManufacturerblog
到這裏相信都能把這幾個參數與controltransfer方法的參數對應起來了索引
requestType = bRequestType
request= bRequest
value=wValue
index = wIndex
buffer 發送的數據
length發送數據長度
timeout超時時間
但願能都夠幫助一些人