再次遇到android  mUsbManager.getDevicelist() 得不到usb 设备的问题。于是深入去探讨android 与usb 外围设备通信的问题。第一篇文章写的有点乱,本质就是需要加入系统的usb操作权限(需要root权限,这种指导国内外的网站上都已经有很多了)。

前面做的项目usb设备是标准的HID设备,使用USBtrace可以看到是setup class支持HIDclass(如下图1),因此在root android加入权限之后可以通过getDeviceList()得到这个设备。

图1

目前在做的项目的usb设备支持的是复合型usb设备协议(包含usb audio,usb mouse,usb hid等功能),使用usb trace 之后发现setup class  是usb(如图2).

图2

  于是怎么折腾都get不到USB设备,于是查找android 源码的实现,最后发现在发现
https://code.google.com/p/android-source-browsing/source/browse/services/java/com/android/server/usb/UsbService.java?repo=platform--frameworks--base&name=android-3.2.4_r1&r=02eb8746de2d60563ec2751a34d20923192e4293&spec=svn.platform--frameworks--base.02eb8746de2d60563ec2751a34d20923192e4293第264行写着“ Slog.w(TAG, "This kernel does not have USB composite class support");”,果然翻看系统文件没有找到该文件夹。还是系统不支持的原因。同时第280行的方法也解释为什么键盘和鼠标没有被枚举出来的原因。

android usb host与usb设备的数据传输分为三种方式:控制传输,块传输和断点传输。

  控制传输的方式是controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)

  块传输的方法是 bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)

  断点传输方法:

UsbRequest request=new UsbRequest();
boolean isQueueOk = request.queue(buffer, 128);
if (isQueueOk && mUsbConnection.requestWait() == request) {
//do something;
}

如果项目中需要的usb设备不是自己开发的,最好先使用usbtrace在pc上先分析下它的协议端点支持的传输方式等(如图3)。

图3

android 与usb 设备通信(二)的更多相关文章

  1. Ubuntu/Windows下利用“HIDAPI”库函数实现与Hid类USB设备通信

    一.背景: 最近在做的一个项目需要使用USB传递数据,对USB理解不是很深,USB的系统驱动编写则更是天方 夜谭,因此将设备配置成HID类设备成为了首选.其最大的好处在于,LINUX/Windows系 ...

  2. android获取USB设备的名称

    1.注释内 .是三星设备可能不支持,需要更换的代码. 2.mUsbManager.是getSystemService(Context.USB_SERVICE)获的. 3. 从stackoverflow ...

  3. Android笔记5-与USB HID 设备通信(一)

    1.了解 支持USB 主机(host)或者从机(accessary )模式最终是取决于设备的硬件,而与平台版本无关.我们可以通过usesfeature这个方法来查询自己的设备是否支持USB主从.   ...

  4. USB设备驱动程序(一)

    USB驱动编程原理: 当我们把USB设备插入USB口时会提示需要安装相对应的驱动,如USB鼠标.USB键盘等,这些电脑自己自身已经自带有相对于的驱动程序, 当电脑检查到该USB设备类型相同就去帮你安装 ...

  5. usb-host与外设通信(二)

    本文是接着上一篇的的usb-host与外设通信(一)接着写的 3.枚举设备 当你的程序运行时,如果应用程序对当前连接的USB设备都感兴趣的,程序可以枚举所以当前的设备.使用getDeviceList( ...

  6. USB设备---URB请求快

    1.urb 结构体USB 请求块(USB request block,urb)是USB 设备驱动中用来描述与USB 设备通信所用的基本载体和核心数据结构,非常类似于网络设备驱动中的sk_buff 结构 ...

  7. USB设备驱动概述

    USB设备驱动 ·  )USB Hub:每个USBHost控制器都会自带一个USB Hub,被称为根(Root)Hub.这个根Hub可以接子(Sub)Hub,每个Hub上挂载USB设备.一般PC有8个 ...

  8. USB设备---URB请求块

    1.urb 结构体 USB 请求块(USB request block,urb)是USB 设备驱动中用来描述与USB 设备通信所用的基本载体和核心数据结构,非常类似于网络设备驱动中的sk_buff 结 ...

  9. C# 上位机的USB设备拔插检测

    我们做USB通信时,通信成功后,往往要检测USB设备的拔插状态,这里就USB拔插进行一下说明. 参考:https://www.imooc.com/article/17438 先说明一下,我这里只是用C ...

随机推荐

  1. Java 简单算法--排序

    1. 冒泡排序 package cn.magicdu.algorithm; public class BubbleSort { public static void main(String[] arg ...

  2. SpringMVC学习记录

    1E)Spring MVC框架 ①Jar包结构: docs+libs+schema. 版本区别:核心包,源码包. SpringMVC文档学习: 学习三步骤: 1)是什么? 开源框架 2)做什么? IO ...

  3. Jquery Ajax Get示例

      $.ajax({ type: "GET", url:"ajax_url.php", cache: false, data:{'action':'ABC',' ...

  4. CStdioFile 写文件

    前言: 介绍如何使用 CStdioFile 类去写文件. 完整工程代码,点我下载(请注意工程里面需要包含的 <locale.h>头文件 ) 示例: /// My Add // 获取当前路径 ...

  5. QT 常用设置

    博文都写在了云笔记里面了,见谅,不想维护两个版本. QT 常用设置

  6. 鸟哥笔记:linux系统日志文件介绍

    简单的说日志文件就是记录系统活动信息的几个文件,例如:何时.何地(来源ip).何人(什么服务名称).做了什么操作.换句话说就是:记录系统在什么时候由哪个进程做了什么样的行为时,发生了什么事件等. 日志 ...

  7. [可拖动DIV]刚开通博客顺便就写了点东西!

    说说我自己的思路 首先需要一个初始div div { border: 1px #333 solid; width: 200px; height: 50px; } <div id="od ...

  8. jQuery入门[1]-构造函数【转载】

    最近看了一些jquery的进阶教程,感觉很不错,与大家分享下! jQuery——构造函数 ◦体积小(v1.2.3 15kb)◦丰富的DOM选择器(CSS1-3 + XPath) ◦跨浏览器(IE6,F ...

  9. MIT 2012分布式课程基础源码解析-事件管理封装

    这部分的内容主要包括Epoll/select的封装,在封装好相应函数后,再使用一个类来管理相应事件,实现的文件为pollmgr.{h, cc}. 事件函数封装 可看到pollmgr.h文件下定一个了一 ...

  10. Javascript代码摘录

    判断浏览器窗口高度 if (document.documentElement.clientHeight <800) { var elm = document.getElementById('Di ...