安卓与单片机进行usb hid通信

来源:互联网 发布:c语言保留三位小数 编辑:程序博客网 时间:2024/05/16 08:36

安卓USB_HID通信文档

因为一直在研究stm32,需要用到usb hid通信,就研究了安卓与stm32进行usb hid通信,目前已经能进行正常通信,我这里只跟大家说一下通信时需要注意的问题。
usb hid通信 单次最多发送64字节,这64字节中:第一个字节代表了数据长度,所以 这就相当于单次最多发送63字节,这里要注意的是编写发送程序时,第一字节要写数据包长度。
下面主要讲解一下流程,进行通信前,要检查手机是否支持usb hid,即手机是否支持OTG,只有手机支持otg,手机才可以通过usb hid和外部进行通信。

这个方法可以查询手机是否支持otg,
下面讲解一下 手机进行usb hid通信 需要用到的类和方法:

Ⅰ:UsbManager 负责管理usb设备的类,获取实例:UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);  

方法:

①:getDeviceList();获取设备列表,返回HashMap;一般来说设备只有一个,因为手机就一个usb口;

②:hasPermission(UsbDevice device);判断app是否有接入usb的权限,一般都要在工程的manifest.xml添加usb通信权限,给予权限则函数返回True,否则返回False。(PS权限一定要注意添加

<uses-featureandroid:name="android.hardware.usb.host"/>);

③: openDevice(UsbDevice device);打开usb设备,后续进行数据发送和接收。

④:requestPermission(UsbDevice device, PendingIntent pi);请求临时接入权限。

Ⅱ:UsbDevice 这个就代表一个usb设备,这个包含设备的接口,节点 VID PID等描述性信息。

方法:

①      :getDeviceClass();返回usb设备的类别,整形;

②      :getDeviceId();返回ID 整形;

③      :getDeviceName();返回设备名称 字符串;

④      :getDeviceProtocol();返回协议类别 整形;

⑤      :getDeviceSubclass();返回设备子类别  整形

⑥      :getVendorId();返回生产商ID 整形;

⑦      :getProductId();返回产品ID整形;

⑧      getInterfaceCount();返回接口数量;

⑨      getInterface(int index);得到一个接口,通信时要用到;

Ⅲ:UsbInterface代表设备的一个接口,本身是一个类,提供通信方法。

方法:

① getId();获取接口ID

② getInterfaceClass()获取接口类别;

③ getInterfaceSubclass();获取接口子类;

④ getInterfaceProtocol();获取接口子类;

⑤ getEndpointCount();获取接口节点数量;

⑥ getEndpoint(int index);获取指定接口的节点,返回节点;

Ⅳ:UsbEndpoint 代表一个接口某个节点的类,usb_HID主要就是通过节点进行通信的。

方法:

①      :getAddress();获取节点的地址;

②      :getAttributes();获取节点属性,

③      getDirection();获取节点数据传输方向;

Ⅴ:UsbDeviceConnection usb连接类,用这个连接和usb设备惊醒数据发送和接收;

方法:

① bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length,int timeout);通过给定的endpoint节点进行大量数据传输,传输方向取决于节点的方向,一般自己获取输入输出的方向,buffer是发送或接收的数组,length是接收长度,失败会返回负数。

② controlTransfer(int requestType, int request, int value, intindex, byte[] buffer, int length, int timeout);通过0节点向设备传输数据,一般不用这个。

程序的实现和注释,都已经在项目中完善,此处不再添加叙述,完整的注释都在程序里面,有需要的可以从github下载项目自行研究。开源造福人类;

放上项目 github网址,有需要的可以自行下载完善,有什么意见可以向作者提,作者邮箱: 791276337@qq.com

最终实现效果是 手机通过usb hid向stm32 发送数据  stm32 接收到数据 转发出来,手机就能接到stm32 通过usb hid 发送的数据,最终实现双向传输。具体实现过程大家可以下载代码研究,注释写的非常详细;



项目网址:https://github.com/Years0315/Groud_Station

stm32 单片机usb通信demo我会上传到csdn; 

手机端demo:

http://download.csdn.net/detail/alone_1314/9840265


stm32 通信demo地址 :http://download.csdn.net/detail/alone_1314/9823658


Android Studio交流群 :  372164840


1 0