usb hid通信 STM32
安卓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网址,有需要的可以自行下载完善,有什么意见可以向作者提,作者邮箱: [email protected]
最终实现效果是 手机通过usb hid向stm32 发送数据 stm32 接收到数据 转发出来,手机就能接到stm32 通过usb hid 发送的数据,最终实现双向传输。具体实现过程大家可以下载代码研究,注释写的非常详细;
项目网址:https://github.com/Years0315/Groud_Station
stm32 单片机usb通信demo我会上传到****;
手机端demo:
http://download.****.net/detail/alone_1314/9840265
stm32 通信demo地址 :http://download.****.net/detail/alone_1314/9823658