概述
安卓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
===============================================================================================
这种是没有权限可以访问dev/hidraw 节点进行通讯
应用 usbhostservice 中就是调用bulkTransfer 进行数据通讯的。
最后
以上就是美丽小蘑菇为你收集整理的安卓与单片机进行usb hid通信安卓USB_HID通信文档的全部内容,希望文章能够帮你解决安卓与单片机进行usb hid通信安卓USB_HID通信文档所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复