Android USB HID設備通訊controlTransfer 接口參數

研究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超時時間

但願能都夠幫助一些人

相關文章
相關標籤/搜索