文章目录
前言
正在开发的项目中多有涉及到Android通过OTG-HID与设备终端通讯的需求,所以写下本篇博客做个笔记。
如何进行USB接口的HID进行开发?网站上很多文章并不完善,这方便的也介绍的不多,我看了很多资料,借助网上的一些代码,整理了以下信息,希望能给大家提供便捷。
一、HID是什么?
USB HID类是USB设备的一个标准设备类,包括的设备非常多。HID类设备定义它属于人机交互操作的设备,用于控制计算机操作的一些方面,如USB鼠标、USB键盘、USB游戏操纵杆等。但HID设备类不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。
二、HID设备的连接过程
1.配置Manifest
在Manifest中加入以下代码
<uses-feature android:name="android.hardware.usb.host"/>
<uses-permission android:name="android.hardware.usb.host" />
uses-feature是用来声明一个app在运行时所依赖的外部的硬件或软件特征(feature),此处是声明Android设备必须能作为Host。uses-permission声明Host权限。
2.HID设备的枚举与连接
1.设备枚举
HID设备一般通过Pid和Vid来枚举。Pid和Vid由硬件厂商提供,也可以插在PC端通过PC端的设备管理器查看。
mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
HashMap<String,UsbDevice> usbDevices = mUsbManager.getDeviceList();
Log.e(TAG,"usbDevices" + usbDevices.size()) ;
for (UsbDevice usbDevice : usbDevices.values()) {
if( (usbDevice.getProductId() == mPid && usbDevice.getVendorId() == mVid)
){
mUsbDevice = usbDevice;
hadEnum = true;
Log.d(TAG, "find Device");
break;
}
}
UsbManager是在android.hardware.usb包下的USB设备管理类,通过这个类的getDeviceList()方法来枚举连接在android设备上USB设备。然后我们通过UsbDevice的getProductId()和getVendorId()方法获取设备的Pid和Vid来找到我们的设备。
2.查找接口
private void findInterface() {
if(mUsbDevice != null) {
Log.d(TAG,"interfaceCounts = " + mUsbDevice.getInterfaceCount());
for(int i = 0; i < mUsbDevice.getInterfaceCount() ; i++) {
final UsbInterface intf = mUsbDevice.getInterface(i);
Log.e(TAG,