USB命令

USB命令
USB命令

一、USB命令

在USB规范里,对命令一词提供的单词为“Request”,但这里为了更好的理解主机与设备之间的主从关系,将它定义成“命令”。

所有的USB设备都要求对主机发给自己的控制命令作出响应,USB规范定义了11个标准命令,它们分别是:Clear_Feature、Get_Configuration、Get_Descriptor、Get_Interface、Get_Status、Set_Address、

Set_Configuration、Set_Descriptor、Set_Interface、Set_Feature、Synch_Frame。所有USB设备都必须支持这些命令(个别命令除外,如Set_Descriptor、Synch_Frame)。

不同的命令虽然有不同的数据和使用目的,但所有的USB命令结构是一样的。下表所示为USB命令的结构:

下表列出了USB的11种标准命令

其中bRequest为命令编码值,含意见表3:

二、USB描述符

USB协议为USB设备定义了一套描述设备功能和属性的有固定结构的描述符,包括标准的描述符即设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符,还有百标准描述符,如类描述符。USB设备通过这些描述符向USB主机汇报设备的各种各样属性,主机通过对这些描述符的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序。

USB设备通过描述符反映自己的设备特性。USB描述符是由特定格式排列的一组数据结构组成。

在USB设备枚举过程中,主机端的协义软件需要解析从USB设备读取的所有描述符信息。在USB主向设备发送读取描述符的请求后,USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。

USB描述符包含标准描述符、类描述符和厂商特定描述3种形式。任何一种设备必须USB标准描述符(队字符串描述符可选外)。

在USB1.X中,规定了5种标准描述符:设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)和字符串描述符(String Descriptor)。

每个USB设备只有一个设备描述符,而一个设备中可包含一个或多个配置描述符,即USB设备可以有多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即USB设备可以支持多种功能(接口),接口的特性通过描述符提供。

在USB主机访问USB设备的描述符时,USB设备依照设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符顺序将所有描述符传给主机。一设备至少要包含设备描述符、配置描述符和接口描述符,如果USB设备没有端点描述符,则它仅仅用默认管道与主机进行数据传输。

1、设备描述符

设备描述符给出了USB设备的一般信息,包括对设备及在设备配置中起全程作用的信息,包括制造商标识号ID、产品序列号、所属设备类号、默认端点的最大包长度和配置描述符的个数等。一个USB设备必须有且仅有一个设备描述符。设备描述符是设备连接到总线上时USB主机所读取的第一个描述符,它包含了14个字段,结构如下:

其中bDescriptorType为描述符的类型,其含义可查下表(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义):

设备类代码bDeviceClass可查下表:

下表列出了一个USB鼠标的设备描述符的例子,供大家分析一下:

2、配置描述符

配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的和)、供电方式(自供电/总线供电)、最大耗电量等。主果主机发出USB标准命令Get_Descriptor要求得到设备的某个配置描述符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端点描述符都将提供给USB主机。

下面是一种硬盘的配置描述符示例:

3、接口描述符

配置描述符中包含了一个或多个接口描述符,这里的“接口”并不是指物理存在的接口,在这里把它称之为“功能”更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备至少就有两个“接口”。

如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述符,那么在响应USB 主机的配置描述符命令时,USB设备的端点描述符总是紧跟着相关的接口描述符后面,作为配置描述符的一部分被返回。接口描述符不可直接用Set_Descriptor和Get_Descriptor来存取。

如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接口表现的是一个控制接口的特性,它使用与端点0相关联的默认管道进行数据传输。在这种情况下bNumberEndpoints域应被设置成0。接口描述符在说明端点个数并不把端点0计算在内。

对于bInterfaceClass字段,表示接口所属的类别,USB协议根据功能将不同的接口划分成不的类,其具体含义如下表所示:

4、端点描述符

端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0(控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输方向、数据包大小和端点号(也可称为端点地址)等。

除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大包长度。主机通过此端点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。

下表是一种鼠标的端点描述符的示例,该端点是一个中断端点:

5、字符串描述符

字符串描述符是一种可选的USB标准描述符,描述了如制商、设备名称或序列号等信息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为0。字符串使用的是Unicode编码。

主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出USB标准命令Get_Descriptor,其中所使用的字符串的索引值为0,设备返回一个字符串描述符,此描述符的结构如下:

该字符串描述符双字节的语言ID的数组,wLANGID[0]~wLANGID[x]指明了设备支持的语言,具体含义可查看USB_LANGIDs.pdf。

主机根据自己需要的语言,再次向设备发出USB标准命令Get_Descriptor,指明所要求得到的字符串的索引值和语言。这次设备所返回的是Unicode编号的字符串描述符,其结构如下:

bString域为设备实际返回的以UNICODE编码的字符串流,我们在编写设备端硬件驱动的时候需要将字符串转换为UNICODE编码,您可以通过一些UNICODE转换工具进行转换。这里推荐由百合电子工作室开发的一款USB描述符生成工具“USB Unicode 字符串描述符生成器”,它专门为编写设备端驱动程序的需要而定制,可以非常方便将您需要的字符串转换成UNICODE格式,进而导入您的C或汇编程序代码中,以下是它的界面:

USB Unicode 字符串描述符生成器-生成C语言格式

USB Unicode 字符串描述符生成器-生成汇编格式

Android adb命令的使用

ADB 详解使用方法 ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机). 它的主要功能有: * 运行设备的shell(命令行) * 管理模拟器或设备的端口映射 * 计算机和设备之间上传/下载文件 * 将本地apk软件安装至模拟器或android设备 ADB是一个客户端-服务器端程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.. 先说安装方法, 电脑上需要安装客户端. 客户端包含在sdk里. 设备上不需要安装, 只需要在手机上打开选项settings-applications-development-USB debugging. 对于Mac和Linux用户, 下载好的sdk解压后, 可以放~或者任意目录. 然后修改~/.bash_profile文件, 设置运行环境指向sdk的tools目录. 具体是打开~/.bash_profile文件(如果没有此文件也可以自行添加), 在里面加入一行: export PATH=${PATH}:<你的sdk目录>/tools 然后就可以使用adb命令了. 嫌安装麻烦的同学其实也可以省去上面安装步骤, 直接输入完整路径来使用命令。 对于windows xp用户, 需要先安装usb驱动android_usb_windows.zip, 然后如果你只打算使用adb而不想下载整个sdk的话, 可以下载这个单独的adb 工具包adb_win.zip 下载后解压, 把里面adb.exe 和AdbWinApi.dll 两个文件放到系统盘的windows/system32 文件夹里就可以了 现在说下ADB常用的几个命令 查看设备 * adb devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 安装软件 * adb install 这个命令将指定的apk文件安装到设备上. 卸载软件 * adb uninstall <软件名> * adb uninstall -k <软件名>

Android platform-tools ADB命令详解

ADB命令详解 1.启动和关闭ADB服务(adb start-server和adb kill-server) 关闭adb服务,可以使用下面的命令。 adb kill-server 在关闭adb服务后,要使用如下的命令启动adb服务。 adb start-server 2.查询当前模拟器/设备的实例(adb devices) 有时需要启动多个模拟器实例,或启动模拟器的同时通过USB数据线连接了真机。在这种情况下就需要使用如下的命令查询当前有多少模拟器或真机在线。 adb devices 执行上面的命令后,会输出如图1所示的信息。 图1 其中第1列的信息(emulator-5554、HT9BYL904399)表示模拟器或真机的标识。emulator-5554表示模拟器,其中5554表示adb服务为该模拟器实例服务的端口号。每启动一个新的模拟器实例,该端口号都不同。HT9BYL904399表示通过USB数据线连接的真机。如果在运行Android程序时有多个模拟器或真机在线,那么会出现一个选择对话框。如果选择在真机运行,ADT会直接将程序安装在手机上。输出信息的第2列都是device,表示当前设备都在线。如果该列的值是offline,表示该实例没有被连接到adb 上,或实例没有响应。

3.安装、卸载和运行程序(adb install、adb uninstall和am) 在Eclipse中运行Android程序必须得有Android源码工程。那如果只有apk文件(Android应用程序的发行包,相当于Windows中的exe文件)该如何安装和运行呢?答案就是adb命令。假设我们要安装一个ebook.apk文件,可以使用如下的命令。 adb install ebook.apk 假设ebook.apk中的package是net.blogjava.mobile.ebook,可以使用如下的命令卸载这个应用程序。 adb uninstall net.blogjava.mobile.ebook 关于package的概念在以后的学习中会逐渐体会到。现在只要知道package是Android 应用程序的唯一标识即可。如果在安装程序之前,该程序已经在模拟器或真机上存在了,需要先使用上面的命令卸载这个应用程序,然后再安装。或使用下面的命令重新安装。 adb install -r ebook.apk 在卸载应用程序时可以加上-k命令行参数保留数据和缓冲目录,只卸载应用程序。命令如下所示。 adb uninstall -k net.blogjava.mobile.ebook 如果机器上有多个模拟器或真机实例,需要使用-s命令行参数指定具体的模拟器或真机。例如,下面的命令分别在模拟器和真机上安装、重新安装和卸载应用程序。 在emulator-5554模拟器上安装ebook.apk adb -s emulator-5554 install ebook.apk 在真机上安装ebook.apk adb -s HT9BYL904399 install ebook.apk 在emulator-5554模拟器上重新安装ebook.apk adb -s emulator-5554 install -r ebook.apk 在真机上重新安装ebook.apk adb -s HT9BYL904399 install -r ebook.apk 在emulator-5554模拟器上卸载ebook.apk(不保留数据和缓冲目录)

Android adb(调试桥)的应用及操作命令 有米分享

Android adb(调试桥)的应用及操作命令 试阅: ……Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到日志信息,你需要通过-b 选项来启动logcat 。如果要使用循环缓冲区,你需要查看剩余的循环缓冲期: ?radio —查看缓冲区的相关的信息. ?events —查看和事件相关的的缓冲区. ?main —查看主要的日志缓冲区 -b 选项使用方法: [adb] logcat [-b ] 下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息: adb logcat -b radio 查看stdout 和stderr 在默认状态下,Android系统有stdout 和 stderr (System.out 和System.err )输出到/dev/null ,在运行Dalvik VM的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用stdout 和stderr 和优先级 I.来记录日志信息 通过这种方法指定输出的路径,停止运行的模拟器/设备,然后通过用 setprop 命令远程输入日志 $ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell start 系统直到你关闭模拟器/设备前设置会一直保留,可以通过添加 /data/local.prop 可以使用模拟器/设备上的默认设置 Logcat命令列表 Option Description -b 加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers. -c 清楚屏幕上的日志.

USB HID报告描述符详解

USB 之人性化接口装置的报告描述元(1) 作者: 林锡宽 e-mail: sklin@https://www.360docs.net/doc/6e13759746.html,.tw (原文刊于e 科技杂志vol. 30,2003 年6 月号) 关于USB 的标准描述元已经在 e 科技杂志的第24 和25 期中作了完整的介绍。有些读者来函希望能早日刊出报告描述元的介绍。人性化接口装置HID 的类别 特定描述元有三种,其中HID 描述元因为需要连接在接口描述元(标准描述元 之一)之后,所以也已经在前文介绍了。其他二个HID 类别特定描述元为报告 描述元和实体描述元。实体描述元几乎很少使用到,所以不拟介绍,虽然它不会 很复杂。本文仅专注介绍报告描述元。相对来说,报告描述元最复杂,也不容易 理解,可是却最重要,因为HID 装置与主机间的经常性数据传输都由报告描述 元来规范。因为报告描述元的复杂和难理解,使得此文的编撰花了不少时间,因 此无法在上次刊完USB 标准描述元后,接着刊出。 由于内容篇幅颇长,所以仅能分为三篇陆续刊出。本期的第一篇中仅介绍到区域 性项目,下期的第二篇再继续介绍全局性项目和主项目。这三类项目构成一个报 告描述元。最后仍需要以一个实际的范例来解说使用方法,所以第三篇文章将提 供一个实际的范例:整合鼠标的键盘装置。此外,也会将该范例的韧体程序代码提 供给有兴趣的读者。这个韧体程序代码不只是该范例的报告描述元,也含括了它的 标准描述元。 概述 报告(report)在这里意指数据传输(data transfer),而报告描述元则是对这些传输的 数据作用途(usage)的说明。 USB 通讯协议的规范是以1 毫秒产生一个USB 讯框(frame),USB 装置可以在每 一个讯框中传送和接收一个交易(transaction)。交易是由数个封包(packet)组成, 而传输是由一或数个交易来完成传递一串有意义的数据。在这里,传输和报告的 意义大同小异。传输方式有四种,初学者只要了解控制型传输(control transfer) 和中断型传输(interrupt transfer)即可。控制型传输是当需要时才执行传输要求, 是最一般的传输,组态、命令和状态的通讯都可以使用,主要用于讯息型数据(message-type data)。中断型传输目的在做重复的数据更新(recurring data)传输, 精确一点而言,即是在每个有限的周期内(bounded period)作至少一次的小量数据 传送或接收﹔所以适用于流动型数据(stream-type data),注意这里所谓的周期时

Android Monkey使用说明——手册

自动化测试工具Monkey 1、什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。 2、Monkey的特征 A、测试的对象仅为应用程序包,有一定的局限性。 B、Monky测试使用的事件流数据流是随机的,不能进行自定义。 C、可对MonkeyTest的对象,事件数量,类型,频率等进行设置。 3、Monkey的基本用法 $ adb shell monkey –p(包)https://www.360docs.net/doc/6e13759746.html, –v(频率)500 4、Monkey测试的停止条件 Monkey Test执行过程中在下列三种情况下会自动停止: A、如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。 B、如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。

C、如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。 使用Monkey流程 总的来说使用monkey进行测试是比较简单的,只是需要做一些比较复杂的准备工作。下面详解测试步骤(很简单的哦),所讲内容是建立在已经配置好ADB环境 的基础上(如果这部分不清楚请先google一下先配置好环境,这里不做描述)。 1、ADB连接Android测试设备。 2、确定你要测试的应用的PackageName。 3、使用Monkey发一条测试命令。 步骤详解 步骤确实很简单吧。不敢保证读者都明白如何去完成上面的步骤,这里讲讲每步如 何做。 1、ADB连接Android测试设备。 如果你用的是模拟器,那么启动后通常是已经连在ADB上了。对于真机来说两种 方式都可以: 方式一:使用USB把Android设备接到PC上,然后装上驱动(不好找驱动的话 就用豌豆荚吧)。 方式二:首先得确保你的Android已经成功root了,那么可以使用wifi无线连接。①下载一个wifi adb应用装在你的android设备上;②在android上打开wifi adb; ③在pc上的命令行中输入wifi adb中显示的那部分内容: adb connect 192.168.x.x,命令行中显示connected 192.168.x.x那么说明连接好了。 我比较喜欢方式二,这样可以不用去下载驱动(主要是驱动很多都不稳定),而且 不伤害电池。长时间插在USB上对电池始终是不好的。只不过这种方式设备一旦休眠那么就可能需要重连。

USB的描述符详解总结

USB的描述符与命令请求详解 一、描述符 1.什么是描述符 所谓描述符,就是用于描述设备特性的具有特定格式排列的一种数据组织结构。 2.描述符的作用 描述符的作用在于设备向主机汇报自己的信息、特征,主机根据这些信息从而加载相应的驱动程序。 3.描述符的分类 描述符分为三大类:标准描述符、设备类描述符、厂商描述符。 除字符串描述符可选外,任何设备都必须包含剩下的几种标准描述符。 在USB1.0中规定了5种标准的描述符: 设备描述符 配置描述符 接口描述符 端点描述符 字符串描述符 规定的设备类描述符有:集线器类描述符、人机接口类描述符。 下表是三种描述符的类型值: 4.使用的几种类 设备类DeviceClass 下表是设备类值的含义。

接口类InterfaceClass 下表是接口类值的含义。 类的交叉与独享 在描述符中,只有设备描述符和接口描述符中会有类别之分,即只有设备和接口会分 类使用,不过有些类别的使用只需经过设备或接口的区分就可彻底清楚明白,这说明在设备类别和接口类别的定义上会有共同的类别名称。而有些类别则是设备或接口独享的,下表是与使用设备相关的类别划分交叉或共享情况:

(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义) 【说明:】在设备或接口分类上均可彻底分清使用的(Usage = Both),即在任一处描述符中定义即可的分清楚使用的类(Usage = Both)的基本类有: 02h ------------- 通信及CDC控制类; DCh ------------ 诊断设备类; EFh ------------- 混杂设备类; FFh ------------- 厂商定义的设备类。 5.标准描述符 设备描述符

ADB 常用命令说明

部分(一)adb操作命令简介 疑问一:adb是什么? 疑问二:adb有什么用? 疑问三:作为最关键的问题,adb工具如何用? 答疑一:adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Sock et TCP 5554等端口的方式让IDE和Qem u通讯,默认情况下adb会daem on相关的网络端口,所以当我们运行Eclipse时adb 进程就会自动运行。 答疑二:借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。 答疑三:这也是今天这篇教程的关键所在,下面我会为大家介绍一下adb工具如何操作,并介绍几个常用命令以备大家参考! 【软件需要】 1.Android SDK 2.Android相关手机驱动 【软件安装】 步骤1:安装USB驱动 这个相关步骤其实笔者已经在Android前系列教程中介绍,故今天简要叙述一下过程。进入设置-应用程序-开发-USB调试,将第一个选项打钩选中。然后通过USB线连接电脑,提示安装驱动。如果是32位的系统选择x86文件夹安装驱动,如果是64位系统选择am d64文件夹。 步骤2:软件准备 将提供的软件工具包中的TMG文件夹,放到C盘根目录下。之所以放于此不是指定位置,只是为了后续在MS-DOS中进入文件夹带来方便。文件夹路径:C:\TMG\

adb基本的命令讲解教程【安卓通用】

一、【问与答】 疑问:adb是什么? 回答:adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS 来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket T CP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。 疑问:adb有什么用? 回答:借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。 疑问:作为最关键的问题,adb工具如何用? 回答:这也是今天这篇教程的关键所在,下面我会为大家介绍一下adb工具如何操作,并介绍几个常用命令以备大家参考! 二、【准备工作】 步骤1:安装USB驱动 下载并安装H TC完整驱动程序( HTCDriver3.0.0.018.exe(13.48 MB, 下载次数: 75) ) 手机进入设置-应用程序-开发-USB调试,将第一个选项打钩选中。然后通过USB线连接电脑,提示安装驱动。 步骤2:软件准备 1、把ADB工具adb.rar(375.41 KB, 下载次数: 161) 解压放到你的电脑系统盘的根目录下 2、运行中,输入cmd进入命令提示符。以下命令均在命令提示符下进行。开始(点开始在输入框里输入CMD) 3、输入cd c:\adb回车,进入ADB所在目录

adb工具操作命令详解

ADB工具操作命令详解 adb(Android Debug Bridge)是Android提供的一个通用的调试工具,说白了就是debug工具。借助这个工具,我们可以管理设备或手机模拟器的状态。 个人常用功能 1、在设备上运行shell命令 2、安装卸载程序 3、推送文件到设备中 4、从设备中推送文件到PC端 5、快速重启 工具需求 各机型不同不做详细介绍,请在自己机型区寻找方法 1、设备驱动(必须) 2、设备Rooted(非必须) 该工具已在开发环境中的platform-tools存在,这里就不提供了

常用操作命令 1. 查看设备 adb devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 2.安装软件 adb install adb install :这个命令将指定的apk文件安装到设备上 adb install -r :如果加-r参数会覆盖原来安装的软件并保留数据 注意:apk文件名不要使用中文且不要有空格号 adb常见安装错误提示说明

3. 卸载软件 adb uninstall adb uninstall <包名> adb uninstall -k <包名>如果加-k 参数,卸载软件但是保留配置和缓存文件. 4. 进入设备或模拟器的shell adb shell 通过上面的命令,就可以进入设备或模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux的命令,另外如果只想执行一条shell命令,可以采用以下的方式: adb shell [command] 如:adb shell ls列出当前目录下的内容。 5. 从电脑上发送文件到设备 adb push <本地路径> <远程路径> 用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机) 6. 从设备上下载文件到电脑 adb pull <远程路径> <本地路径>

Linux中USB描述符详解-wxc-2018-03-31

USB描述符的作用 USB 设备第一次连接到主机时, 要接收主机枚举( Enumera tion) 和配置(Configuration) , 目的是让主机知道设备功能、是哪一类的USB 设备、占用多少资源、使用了哪些传输方式以及传输的数据量等等。只有主机完全确认了这些信息后, 设备才能真正开始工作。这些信息是通过存储在设备中的USB 描述符来体现的。因此, 这种USB 描述符也可以看作是USB 设备的身份证明。 描述符(Descriptor )是一个完整的数据结构, 存储在USB 设备中, 用于描述一个USB 设备的所有属性。USB主机通过一系列命令要求设备发送这些信息。 USB描述符的种类 描述符分为三大类:标准描述符、设备类描述符、厂商描述符。 三种描述符的类型值bDescriptorType: 设备的类别bDeviceClass

接口类别bInterfaceClass Linux中各种描述符的定义 在include/linux/usb/Ch9.h中定义 USB设备描述符: struct usb_device_descripto r { __u8 bLength; //此描述符的字节数 __u8 bDescriptorType; //描述符的类型(此处应为0x01,即设备描述符) __le16 bcdUSB; // USB版本号(BCD 码)

__u8 bDeviceClass; //设备的类别---可查看上表格 __u8 bDeviceSubClass; //设备子类码:这些码值的具体含义根据bDeviceClass 域来看。 __u8 bDeviceProtocol; /*协议码 这些码的值视bDeviceClass 和bDeviceSubClass 的值而定。如果设备支持设备类相关的 协议,此码标志了设备类的值。如果此域的值为零,则此设备不支持设备类相关的协议,然 而,可能它的接口支持设备类相关的协议。如果此域的值为FFH,此设备使用厂商定义的议。*/ __u8 bMaxPacketSize0; //端点0的最大包大小(仅8,16,32,64为合法值) __le16 idVendor; //厂商标志(由USB-IF组织赋值) __le16 idProduct; //产品标志(由厂商赋值) __le16 bcdDevice; //设备版本号(BCD 码) __u8 iManufacturer; //描述厂商信息的字符串描述符的索引值。 __u8 iProduct; //描述产品信息的字串描述符的索引值。 __u8 iSerialNumber; //描述设备序列号信息的字串描述符的索引值。 __u8 bNumConfigurations; //可能的配置描述符数目 } USB配置描述符 配置描述符中包含了配置描述符本身的长度、所有配置信息的总长度、供电方式及远 程唤醒、供电量。 如果主机发出标准命令Get_Descriptor要求获得设备的某个配置描述符时,该配置应用的所有信息都将发给主机,它包括:该标准配置符本身、该配置所包含的所有接口、端点描述符及设备类描述符和厂商描述符。 struct usb_config_descriptor { __u8 bLength; //此描述符的字节数 __u8 bDescriptorType; //配置描述表类型(此处为0x02) __le16 wTotalLength; //此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述符),即:将要返回的配置信息总长度。 __u8 bNumInterfaces; //此配置所支持的接口个数 __u8 bConfigurationValue;//在SetConfiguration()请求中用作参数来选定此配置。 __u8 iConfiguration;//描述此配置的字串描述符的索引 __u8 bmAttributes; /* 配置特性:

疯狂Android讲义(第2版)

疯狂Android讲义(第2版) 《疯狂Android讲义(第2版)》 基本信息 作者:李刚[作译者介绍] 出版社:电子工业出版社 ISBN:9787121194856 上架时间:2013-3-5 出版日期:2013 年3月 开本:16开 页码:796 版次:1-1 所属分类:计算机> 软件与程序设计> 移动开发> Android 内容简介 计算机书籍 移动互联网已经成为当今世界发展最快、市场潜力最大、前景最诱人的业务,而android 则是移动互联网上市场占有率最高的平台(已远超ios,最新统计数据:android占53.7%,ios占35%);与此同时,android应用选择了java作为其开发语言,这对于java来说也是一次极好的机会。本书是《疯狂android讲义》的第2版。本书基于最新的android 4.2,android sdk、adt都基于android 4.2,书中每个案例、每个截图都全面升级到android 4.2。本书全面地介绍了android应用开发的相关知识,全书内容覆盖了android用户界面编程、android四大组件、android资源访问、图形/图像处理、事件处理机制、android输入/输出处理、音频/视频多媒体应用开发、opengl与3d应用开发、网络通信编程、android平台的web service、传感器应用开发、gps应用开发、google map服务等。 《疯狂android讲义(第2版)》并不局限于介绍android编程的各种理论知识,而是从“项目驱动”的角度来讲授理论。全书一共包括近百个实例,这些示范性的实例既可帮读者更好地理解各知识点在实际开发中的应用,也可供读者在实际开发时作为参考、拿来就用。本书最后还提供了两个实用的案例:疯狂连连看和电子拍卖系统android客户端,具有极高的参考价值。本书提供了配套的答疑网站,如果读者在阅读本书时遇到技术问题,可以登录疯狂java联盟(https://www.360docs.net/doc/6e13759746.html,)发帖,笔者将会及时予以解答。 《疯狂android讲义(第2版)》适合有一定java编程基础的读者。如果读者已熟练掌握java编程语法并具有一定图形界面编程经验,阅读本书将十分合适。否则,阅读本书之前建

USB_HID报告及报告描述符_入门简介

USB HID报告及报告描述符简介 USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。输入报告是USB 设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。报告是一个数据包,里面包含的是所要传送的数据。输入报告是通过中断输入端点输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。 而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。通过它,USB HOST可以分析出报告里面的数据所表示的意思。它通过控制输入端点0返回,主机使用获取报告描述符命令来获取报告描述符,注意这个请求是发送到接口的,而不是到设备。一个报告描述符可以描述多个报告,不同的报告通过报告ID来识别,报告ID在报告最前面,即第一个字节。当报告描述符中没有规定报告ID时,报告中就没有ID字段,开始就是数据。更详细的说明请参看USB HID协议。USB报告描述符可以通过使用HID Descriptor tool 来生成,这个工具可以网上下载。 下面通过由HID Descriptor tool生成的USB鼠标和USB键盘来说明一下报告描述符和报告。 code char KeyBoardReportDescriptor[63] = { //表示用途页为通用桌面设备 0x05, 0x01, // USAGE_PAGE (Generic Desktop) //表示用途为键盘 0x09, 0x06, // USAGE (Keyboard) //表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION 0xa1, 0x01, // COLLECTION (Application) //表示用途页为按键 0x05, 0x07, // USAGE_PAGE (Keyboard) //用途最小值,这里为左ctrl键 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) //用途最大值,这里为右GUI键,即window键 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) //逻辑最小值为0 0x15, 0x00, // LOGICAL_MINIMUM (0) //逻辑最大值为1 0x25, 0x01, // LOGICAL_MAXIMUM (1) //报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为1 0x75, 0x01, // REPORT_SIZE (1) //报告的个数为8,即总共有8个bits 0x95, 0x08, // REPORT_COUNT (8) //输入用,变量,值,绝对值。像键盘这类一般报告绝对值, //而鼠标移动这样的则报告相对值,表示鼠标移动多少 0x81, 0x02, // INPUT (Data,Var,Abs) //上面这这几项描述了一个输入用的字段,总共为8个bits,每个bit表示一个按键

Mainmenu控件的使用方法详解

Mainmenu控件位于Standard选项卡上,用来设计菜单程序。 它常用的属性只有三个: Images:用来设置菜单中用到的图片,类型为TCustomImageList。如果窗全中添 加了ImageList控件,会自动出现在选项列表中 AutoMerge属性:它可以用来决定在非多文档(MDI)程序运行时,次级窗体的主 菜单是否可以自动融合到主窗体的主菜单中,如果希望自动融合的话,设计时一 定要把次级窗体的主菜单的AutoMerge设为TRUE,而主窗体的主菜单的该属性却要一定设为FALSE; Items属性: 用来代表菜单中的各个菜单项,它的类型为TMenuItem,该属性为缺省属性,定义如下: property items:Tmenuitem;default; 正因为是缺省属性,所以以下操作: firstitem:=menu1.items.items[0]; 可以用: firstitem:=menu1.items[0]; 这样的简写来代替。 (1)Menuitemr 的主要属性 ACTION属性:用来设置与菜单命令相对应的要执行的动作,它列出了可以执行的动作。 Bitmap属性: 该属性用来设置菜单命令中使用的位图。 Caption属性: 该属性用于存放菜单项的标题,与其它组件一样,在标题中“&”后面的字符可以 作为菜单项的快捷键 Checked属性: 该属性用来决定是否该菜单具有检查框的特征,如果设为TRUE,当选中该菜单项时,在它的左边会出现一个打勾,再一次选择时打勾消失。 Enabled属性: 该属性用来决定是否可用。 Imageindex属性: 用来确定在该菜单的左边出现什么样的图片。 (2)Menuitemr 的主要方法 ADD,Insert,Delete,Clear方法 这几个方法是用来对菜单项的增减进行操作。它们的定义如下: procedure add(item:Tmenuitem);overload;

usb接口描述符

一、背景知识 1、USB Mass Storage类规范概述 USB 组织在universal Serial Bus Mass Storage Class Spaceification 1.1版本中定义了海量存储设备类(Mass Storage Class)的规范,这个类规范包括四个 独立的子类规范,即: 1. USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport https://www.360docs.net/doc/6e13759746.html,B Mass Storage Class Bulk-Only Transport https://www.360docs.net/doc/6e13759746.html,B Mass Storage Class ATA Command Block https://www.360docs.net/doc/6e13759746.html,B Mass Storage Class UFI Command Specification 前两个子规范定义了数据/命令/状态在USB 上的传输方法。Bulk- Only 传输规范仅仅使用Bulk 端点传送数据/命令/状态,CBI 传输规范则使用Control/Bulk/Interrupt 三种类型的端点进行数据/命令/状态传送。后两个子规范则定义了存储介质的操作命令。ATA 命令规范用于硬盘,UFI 命令规范是针对USB 移动存储。 Microsoft Windows 中提供对Mass Storage 协议的支持,因此USB 移动设备只需要遵循Mass Storage 协议来组织数据和处理命令,即可实现与PC 机交换数据。而Flash 的存储单元组织形式采用FAT16 文件系统,这样,就可以直接在Windows 的浏览器中通过可移动磁盘来交换数据了,Windows 负责对FAT16 文件系统的管理,USB 设备不需要干预FAT16 文件系统操作的具体细节。 USB(Host)唯一通过描述符了解设备的有关信息,根据这些信息,建立起通信,在这些描述符中,规定了设备所使用的协议、端点情况等。因此,正确地提供描述符,是USB 设备正常工作的先决条件。 Linux-2.6.26内核中在利用USB gadget驱动实现模拟U盘时主要涉及到file_storage.c、s3c2410_udc.c等驱动文件(这些文件的具体结构,将在下一篇文章中描述)。此时我们想先从这些代码中找到USB描述描述符,从中确定使用的存储类规范,从而确定协议。确定通讯协议是我们调试的基础。 存储类规范是由接口描述符决定的。接口描述符各项的定义义如下:

Android测试命令行工具Monkey使用教程

Monkey是什么 Monkey是可以运行在模拟器里或实际设备中的程序。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。 Monkey简介 Monkey是一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类: ·基本配置选项,如设置尝试的事件数量。 ·运行约束选项,如设置只对单独的一个包进行测试。 ·事件类型和频率。 ·调试选项。 在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey 还对测试中的系统进行监测,对下列三种情况进行特殊处理: ·如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。 ·如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。 ·如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。 按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。 Monkey的基本用法 可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下:$ adb shell monkey [options] 如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:$ adb shell monkey -p https://www.360docs.net/doc/6e13759746.html, -v 500 命令选项参考

USB描述符完全解析

USB设备描述符完全解析 //======================================================= ===================== // 文件名: USBDESC.C // 用途: USB描述符 // 作者: shenfei5 // 时间: 2007.2.3 // 版本: V1.10 //======================================================= ===================== #include #include "usb.h" // USB模块 #include "hid.h" // HID设备 #include "usbcfg.h" // 配置USB #include "usbdesc.h" // USB描述符 // // HID报文描述符 // const U8 HID_ReportDescriptor[] = { HID_UsagePageVendor(0x00), // 报告页版本: 0X06 0X00 0XFF HID_Usage(0x01), // 用途页: 0X05 0X01 // 如果是MOUSE,KEY,在这里应该有用法索引 HID_Collection(HID_Application), // 用法集合开始: 0XA1 0X01 HID_UsagePage(HID_USAGE_PAGE_BUTTON), // BUTTON用法页 HID_UsageMin(1), // 用法最小值 HID_UsageMax(3), // 用法最小值 HID_LogicalMin(0), // 逻辑最小值 HID_LogicalMax(1), // 逻辑最大值 HID_ReportCount(3), // 报告计数(3) HID_ReportSize(1), // 报告页大小(1) HID_Input(HID_Data | HID_Variable | HID_Absolute), // 输入(2) HID_ReportCount(1), // 报告计数值 HID_ReportSize(5), // 报告大小 HID_Input(HID_Constant), // 输入1 HID_UsagePage(HID_USAGE_PAGE_LED), // LED用法页 HID_Usage(HID_USAGE_LED_GENERIC_INDICATOR), // 用法页 HID_LogicalMin(0), // 用法最小值

adb 命令详解及adb安装说明

adb 命令详解及adb安装说明 ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机). 它的主要功能有: * 运行设备的shell(命令行) * 管理模拟器或设备的端口映射 * 计算机和设备之间上传/下载文件 * 将本地apk软件安装至模拟器或android设备 ADB是一个客户端-服务器端程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.. 先说安装方法, 电脑上需要安装客户端. 客户端包含在sdk里. 设备上不需要安装, 只需要在手机上打开选项settings-applications-development-USB debugging. 对于Mac和Linux用户, 下载好的sdk解压后, 可以放~或者任意目录. 然后修改~/.bash_profile文件, 设置运行环境指向sdk的tools目录. 具体是打开~/.bash_profile文件(如果没有此文件也可以自行添加), 在里面加入一行: export PATH=${PATH}:<你的sdk目录>/tools 然后就可以使用adb命令了. 嫌安装麻烦的同学其实也可以省去上面安装步骤, 直接输入完整路径来使用命令。 对于windows xp用户, 需要先安装usb驱动 android_usb_windows.zip, 然后如果你只打算使用adb而不想下载整个sdk的话, 可以下载这个单独的adb工具包 adb_win.zip 下载后解压, 把里面 adb.exe 和 AdbWinApi.dll 两个文件放到系统盘的 windows/system32 文件夹里就可以了 现在说下ADB常用的几个命令 查看设备 * adb devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 安装软件

USB_HID协议中文版——USB接口HID设备

第8章USB接口HID设备 HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。在USB设备中,HID设备的成本较低。另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。 Wndows操作系统最先支持的HID设备。在windows 98以及后来的版本中内置有HID 设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。 在设计一个USB接口的计算机外部设备时,如果HID类型的设备可以满足需要,可以将其设计为HID类型设备,这样可以省去比较复杂的USB驱动程序的编写,直接利用Windows操作系统对标准的HID类型USB设备的支持。 8.1 HID设备简介 8.1.1 HID设备的特点 ?交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持HlD报表的格式。主机通过控制和中断传输中的传送和请求报表来传送和接收数据。报表的格式非常灵活。 ?每一笔事务可以携带小量或中量的数据。低速设备每一笔事务最大是8B,全速设备每一笔事务最大是64B,高速设备每一笔事务最大是1024B。一个报表可以使用多笔事务。 ?设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。所以主机会定时轮询设备,以取得最新的数据。 ?HID设备的最大传输速度有限制。主机可以保证低速的中断端点每10ms内最多1笔事务,每一秒最多是800B。保证全速端点每lms一笔事务,每一秒最多是64000B。保证高速端点每125 us三笔事务,每一秒最多是24.576MB。 ?HID设备没有保证的传输速率。如果设备是设置在10ms的时距,事务之间的时间可能等于或小于10ms。除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。这是最快的轮询速率,所以端点可以保证有正确的带宽可供使用。 HID设备除了传送数据给主机外,它也会从主机接收数据。只要能够符合HlD类别规范的设备都可以是HID设备。 设备除了HlD接口之外,它可能同时还包含有其他的USB接口。例如影像显示设备可能使用HID接口来做亮度、对比度的软件控制,而使用传统的影像接口来传送要显示的数据。USB扩音器可以使用实时传输来播放语音,同时使用HID接口来控制音量、低音等。 HID类别设备的规范文件主要是以下两份: ?Device Class Definition for Human interface Devices ?HID Usage Tables 其中前者是HID的基本规范文件,后者可以是前者的附件,为开发人员提供实际的控制类型的描述。文件是用来定义让主机了解以及使用HID数据的数值。这两份文件是由USB Device Working Group制定的,可以在网址https://www.360docs.net/doc/6e13759746.html,/developers/hidpage/ #Class _Definition下载。

相关文档
最新文档