Android USB Host与HID通讯(二)
2019独角兽企业重金招聘Python工程师标准>>>
原文出处:http://han21912.lofter.com/post/c3919_51401d
接上一篇:Android USB Host与HID通讯 (一)
从上篇已经可以枚举到HID设备,接下来看看寻找设备的接口和通信端点,即上篇中的findIntfAndEpt()方法;
// find interface and assign end point
private void findIntfAndEpt() {
if (mUsbDevice == null) {
return;
}// find the device interface
for (int i = 0; i < mUsbDevice.getInterfaceCount();) {
// 获取设备接口,一般都是一个接口,你可以打印getInterfaceCount()方法查看接
// 口的个数,在这个接口上有两个端点,OUT 和 IN
UsbInterface intf = mUsbDevice.getInterface(i);
Log.d(TAG, i + " " + intf);
if (intf.getInterfaceClass() == 8 && intf.getInterfaceSubclass() == 6 && //
intf.getInterfaceProtocol() == 80) { //HID设备的相关信息
mInterface = intf;
}
break;
}if (mInterface != null) {
UsbDeviceConnection connection = null;
// 判断是否有权限
if(mUsbManager.hasPermission(mUsbDevice)) {
// 打开设备,获取 UsbDeviceConnection 对象,连接设备,用于后面的通讯
connection = mUsbManager.openDevice(mUsbDevice);
if (connection == null) {
return;
}
if (connection.claimInterface(mInterface, true)) {
mDeviceConnection = connection;
} else {
connection.close();
}
} else {
Toast.makeText(context, "没有权限", Toast.LENGTH_SHORT).show();
}
}
}
上面主要用到UsbDevice.getInterface()方法和UsbManager.openDevice()方法,在连接上设备后,用UsbDeviceConnection 与 UsbInterface 进行端点设置和通讯,如下:
private void getEndpoint(UsbDeviceConnection connection, UsbInterface intf) {
if (intf.getEndpoint(1) != null) {
epOut = intf.getEndpoint(1);
}
if (intf.getEndpoint(0) != null) {
epIn = intf.getEndpoint(0);
}
}
在此我们获得了通讯的OUT和IN端点,也就是我们常说的输入输出,查看api可知一般1为OUT端点,0为IN端点,接下来的任务就是通讯了,而最终需要的就是connection,OUT/IN 端点,在加上你要发送的指令,打成命令包进行发送,若命令发送成功会返回相应的数据信息,当然不同的设备发送/接收命令模式不同,同一设备不同的命令也需具体处理,这就需要根据自己手上的设备而定,好好研究研究自己的HID,掌握它的命令发送/接收方式,我的设备发送/接收模式为:发送命令out(发送预发送命令+发送命令+接收发送成功信息);接收数据in(发送预接收命令+接收数据+接收数据成功信息)。
所以到这,主要的工作就是设备的通讯模式和bulkTransfer()方法的参数配置,如下是我的设备进行通讯的一个发送包,从下面可以看出,仅仅发送一个命令到HID设备,其实际进行了三次命令的发送接收,两OUT一IN,总共调用了三次bulkTransfer()方法;
// 发送包操作,发送OUT + 发送COM + 接收IN
private void sendPackage(byte[] command) {
int ret = -100;
int len = command.length;// 组织准备命令
byte[] sendOut = Commands.OUT_S;
sendOut[8] = (byte) (len & 0xff);
sendOut[9] = (byte) ((len >> 8) & 0xff);
sendOut[10] = (byte) ((len >> 16) & 0xff);
sendOut[11] = (byte) ((len >> 24) & 0xff);// 1,发送准备命令
ret = mDeviceConnection.bulkTransfer(epOut, sendOut, 31, 10000);
if(ret != 31) {
return;
}// 2,发送COM
ret = mDeviceConnection.bulkTransfer(epOut, command, len, 10000);
if(ret != len) {
return;
}// 3,接收发送成功信息
ret = mDeviceConnection.bulkTransfer(epIn, Commands.IN, 13, 10000);
if(ret != 13) {
return;
}
}
可以看出调用一次bulkTransfer()方法,若通讯成功,返回的应该是发送命令或返回信息的数据长度,一开始我的bulkTransfer()方法总是返回-1,一直处于通讯失败,这时我们应该做的事情,第一,好好的组织bulkTransfer()方法中的参数,endpoint为OUT还是IN,buffer,也就是我们要发送的命令,对此不太理解的可以反复查阅:
① google开发指南,穿一手的鞋:
http://developer.android.com/reference/android/hardware/usb/UsbDeviceConnection.html
② 我之前发的一篇关于HID通讯方法的文章: Android USB Host 与 HID 之通讯方法 ;
第二,重点还是你自己的HID设备,如何通讯,通讯方式等等。
转载于:https://my.oschina.net/han21912/blog/133707
Android USB Host与HID通讯(二)相关推荐
- Android USB Host与HID通讯
Android USB Host与HID通讯 (一) Android USB Host与HID通讯 (二) Android USB Host与HID通讯Demo android usb host 读写 ...
- android usb host hid,Android USB Host与HID通讯
前端时间捣鼓一个HID的硬件, 需要和android通信, 网上搜索了一圈,收获不小. 其中代码之处有些地方需要注意的, 特此注明一下: /*** USB HOST 连接 HID *@authorIV ...
- android USB摄像头做条形码及二维码扫描(1)
摘要: 1.前言 2.底层配置 3.JNI实现 4.总结 5.BUG及优化记录 android USB摄像头做条形码及二维码扫描(2) 1. 前言 公司做的产品基于android开发板搭建的控制系统, ...
- 翻译Android USB HOST API
翻译Android USB HOST API 源码地址:http://developer.android.com/guide/topics/connectivity/usb/host.html 译者注 ...
- Android usb host
当你的Android主机是处于USB主模式下,它充当USB主机,开启设备并列举出所有已连接的USB设备.这种模式在Android 3.1及以上的版本支持. API预览 在开始开发USB Host之前, ...
- android USB host编程
测试手机:华为p8 测试系统:android ------------------------------------------- android的native层usbhost供java层andro ...
- Android USB Host开发之manager.getDeviceList()获取不到设备列表【转载】
原文:https://www.2cto.com/kf/201305/211304.html 同样遇到这样的问题,我的Android设备是原道N12C,官方的4.0.3系统,遇到这个问题,后来找了半天找 ...
- Android USB Host开发之manager.getDeviceList()获取不到设备列表
同样遇到这样的问题,我的Android设备是原道N12C,官方的4.0.3系统,遇到这个问题,后来找了半天找到的,现在汇总一下吧: 1.创建 android.hardware.usb.host.xml ...
- android otg读写文件,Android USB Host在USB设备OTG中读/写文件
我正在编写Android设备是主机的应用程序.用户将USB驱动器连接到Android设备,我的应用程序将在USB驱动器中写入一些文本文件.文本文件的路径就像USB_DRIVE/Data/APP_NAM ...
最新文章
- pycharm设置回退功能
- 美团爱问Kafka?太真实了!
- SQL大圣之路笔记——SQL 创建索引 index
- redis3---使用
- 深入理解 ValueTask
- hadoop-集群管理(3)——不常用参数
- 华为魔术手机拆机图解_华为荣耀20进水不开机
- js模块化与面向对象编程思考与实践
- NSMutableString基本概念
- python 字符串交集_集合 (Set) | 一山不容二虎的 Python 数据类型
- 《Head First设计模式》第二版中译本内文彩页欣赏
- 【macOS】Macbook修改键盘映射
- 声网Agora 孙雨润:下一代实时传输体系结构的升级与应用
- 数学建模--神经网络在线绘图工具,流程图绘图工具,OCR图片公式识别
- 无人机油动发动机调试
- Linux系统接口ioc,Linux下SCSI API研究及应用
- 从飞猪智能酒店到优酷视频,探索阿里智能研发协同流程
- 五大领域总目标指南_幼儿园五大领域活动总目标
- linux制作U盘win10启动盘
- 802.11 帧(MAC架构)
热门文章
- 实现点击按钮后,倒计时60秒才能再次点击
- 形容人的内核是什么意思_成语雪泥鸿爪是形容什么的?雪泥鸿爪什么意思?蚂蚁庄园2020年12月10日答案...
- Linux stmac网卡代码分析----probe
- java代码块的定义_Java几种代码块的定义与常见问题
- java BigDecimal去掉小数点后的零
- 学习笔记~~~~~python基础
- 友善之臂编linux内核,友善之臂NanoPC-T3 Plus,s5p6818编译Linux内核流程
- 100个高低压配电知识!网络弱电必备知识~
- APP技巧:电脑登录微信,要删除这5个文件!否则别人能查看聊天记录
- 数据结构基础:图结构的学习笔记