Android USB HID设备通信controlTransfer 接口参数
2013-07-25 00:00
567 查看
摘要: 一个关于public int controlTransfer (int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)方法的参数说明
研究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超时时间
希望能都够帮助一些人
研究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超时时间
希望能都够帮助一些人
相关文章推荐
- 关于Android设备USBHID通信控制传输相关接口说明
- Android USB-HID controlTransfer() 参数详解
- android usb Host模式下与usb Hid 设备的通信
- 破解USB HID 设备接口协议
- 基于HID协议的USB人机交互设备的接口设计
- Windows主机端与自定义USB HID设备通信详解
- 两台android设备间通过OTG-USB连接,实现通信(android设备间的通信)
- Windows主机端与自定义USB HID设备通信详解
- Windows主机端与自定义USB HID设备通信详解
- 使用pdiusbd12制作包含HID接口的多接口USB设备
- Android USB Host 与 Hid 设备通信bulkTransfer()返回-1问题的原因
- Windows主机端与自定义USB HID设备通信详解
- Windows主机端与自定义USB HID设备通信详解
- 使用OllyDbg 分析 USB HID 设备接口协议
- 如何在Linux下利用Libusb与HID USB设备通信!
- android:与USB设备通信
- 求助:usb audio hid 设备的配置描述符无效:4个接口,1个AC,2个AS,1个HID。播放是双通道的,录音是单通道的。原本配置描述符里录音也是双通道
- Windows主机端与自定义USB HID设备通信详解
- c#_HidUsb设备通信
- windows主机端与自定义USB HID设备通信详解