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超时时间

但愿能都够帮助一些人

相关文章
相关标签/搜索