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

|-----------------------|
| __u8    bRequestType -|
| __u8    bRequest     -|
| __le16 -wValue       -|
| __le16 -wIndex       -|
| __le16 -wLength      -|
|-----------------------|
 

 

bRequestType
    D7     数据的传输方向:0表示从主机到设备; 1表示从设备到主机;
    D6~5   命令的类型:   0表示标准命令;    1表示类命令;      2表示厂商提供的命令; 3保留;
    D4~0   接收对象;     0表示设备;       1表示接口;       2表示端点;         3表示其他;
bRequest
    命令的序号(其实就是命令);所有的命令都是以不同编码值的方式传递给设备的,bRequest就表示USB命令的编码值

    我对这个参数的理解也就是请求号
wValue

    这个字段对于不同的命令有不同的含义,下面有介绍

 wIndex

    传递索引或者诸如接口或者端点号的偏移量,这个参数要查找你要通信的HID设备,我这里的HID的接口的索引是0。   我对此参数也不很理解,从别人那看来的。我的应用中使用的默认值0,通信无问题。

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        iManufacturer

 

到这里相信都能把这几个参数与controltransfer方法的参数对应起来了

requestType = bRequestType

request= bRequest

value=wValue

index = wIndex

buffer 发送的数据

length发送数据长度 

timeout超时时间

希望能都够帮助一些人

 

 

转载于:https://my.oschina.net/u/579890/blog/147074

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值