usb接口

基于usb4java实现的java下的usb通信

不羁岁月 提交于 2020-03-08 08:03:21
项目地址: 点击打开 使用java开发的好处就是跨平台,基本上java的开发的程序在linux、mac、MS上都可以运行,对应这java的那句经典名言:一次编写,到处运行。这个项目里面有两种包选择,一个是low-level(libus)一个是high-level(javax-usb),相关的优缺点在官方网站上已经说明了,我这里就不翻译了,不过前者好像基于libusb已经好久不更新了,所以还是选择后者。 配置 :你需要在你包的根目录下新建一个名为: javax.usb.properties 的文件,里面的内容是这样的: javax.usb.services = org.usb4java.javax.Services 查找usb设备,其实通过usb通信流程大体上都是一致,之前我做过android与arduino通过usb通信,然后java通信走了一遍之后发现是一样的。 USB 设备 在 一 棵树上 进行 管理 。 这 树 的 根 是 所有 物理 根 集线器 连接 到 一个 虚拟 的 USB 集线器 。 更多 的 集线器 可以 连接 到 这些 根 集线器 和 任何 集线器 可以 有 大量 的 连接 的 USB 设备 。 通常 , 您 需要 在 使用 它 之前 搜索 特定 设备,下面的 是 一个 例子 如何 扫描 与 一个 特定 的 供应商 和 产品 id 的 第一个 设备 的 设备:

wince下USB设备驱动程序

喜欢而已 提交于 2020-03-08 07:42:10
随着USB设备的不断增加,我们这些开发人员也就多了对USB设备进行驱动程序开发的工作。但是对于很多初学者来说,存在以下三个困难: 一是对WinCE的驱动程序结构了解得太少,没办法得心应手的专注于驱动程序的开发工作; 二是对WinCE自带的USB驱动程序的例子没有弄懂,看到一大堆文件夹结构和源程序思维混乱; 三是几乎没有什么中文的参考资料,不知如何下手。 第三条是很多开发人员都遇到的,我也一样,很多朋友问我有没有什么资料,我也只能说抱歉,因为我也同样有这个问题,一切都靠自己的黑暗中摸索,因此本文不谈第三条。 第一条是可以找到资料的,如《Windows CE .NET系统分析及实验教程》,因此本文也不打算在此花费大量笔墨。 这样,本文的着重点就在第二条上面了,通过本文,我希望能让更多的朋友理解Windows CE下对USB设备的驱动模型及样例程序中的实现过程,以样例代码为基础理顺USB设备驱动程序的开发思路。同样,本文的读者对象预期是入门者和准备着手USB驱动开发的人员,驱动开发高手自然就当一笑吧。同时写本文的目的也是履行我半年前答应很多朋友的诺言,并向我的慵懒致歉。 好了,在看样例程序之前,我们还有些东西需要了解,我们就先来看下图: 在此图中,我们可以非常清晰的看到主机和物理外设之间的结构方式,在主机端,通过USBD模块和HCD模块使用默认的PIPE访问一个通用的逻辑设备

Linux驱动之USB鼠标驱动编写

主宰稳场 提交于 2020-03-08 07:41:55
本篇博客分以下几部分讲解 1、介绍USB四大描述 2、介绍USB鼠标驱动程序功能及框架 3、介绍程序用到的结构体 4、介绍程序用到的函数 5、编写程序 6、测试程序 1、介绍USB四大描述符 USB设备驱动程序里定义了许多与驱动程序密切相关的描述符。这里介绍一下四种比较关键的描述符: 设备描述符 、 配置描述符 、 接口描述符 、 端点描述符 。这几个描述符都位于include\linux\usb\ch9.h中,先看一下每个描述直接的关系,从图中可以看出每一个查到USB主机上的USB设备都有一个设备描述符,设备描述符下面可以接多个配置描述符,配置描述符下面又可以接多个 当USB设备接到USB控制器上后,USB控制器第一次读取到的数据包,总共8字节 /*当USB设备接到USB控制器上后,USB控制器第一次读取到的数据包,总共8字节*/ struct usb_ctrlrequest { __u8 bRequestType; __u8 bRequest; __le16 wValue; __le16 wIndex; __le16 wLength; } __attribute__ ((packed)); 设备描述符 是在设备连接时,主机第一个读取的描述符,包含了主机需要从设备读取的基本信息。设备描述符有14个字段,如下所示。依照功能来分,设备描述符的字段包含了描述符本身、设备

USB主机和USB设备

做~自己de王妃 提交于 2020-03-07 11:07:39
USB主机在USB系统中处于中心地位,并且对USB及其连接的设备有着特殊的责任,主机控制着所有对USB的访问,一个外设只有主机允许才有权力访问总线,主机同时也监测着USB的结构。USB主机包括三层:设备驱动程序、USB系统软件、USB主控制器(主机的总线接口) 。另外,还有两个软件接口:USB驱动接口,主机控制驱动(HCD)接口。 USB设备包括Hub和功能设备,一个USB设备可以分为三个层:最底层是总线接口用来发送与接收包,中间层处理总线接口与不同的端点之间的数据流通,一个端点是数据最终的使用者或提供者,它可以看作数据的源或接收端,最上层就是USB设备所提供的功能比如鼠标或键盘等。Hub(集线器)在USB结构中是一个关键,它提供了附加的USB节点,这些节点被称为端口,Hub可以检测出每一个下行端口的状态并且可以给下端的设备提供电源。 来源: https://www.cnblogs.com/markmin214/archive/2013/04/03/2998759.html

Linux设备驱动程序学习——USB 驱动程序(三)

走远了吗. 提交于 2020-03-07 04:43:01
(本部分的一些示例源码来自 drivers/usb/usb-skeleton.c ,它是Linux内核为我们提供的最基础的USB驱动程序,USB骨架程序) 驱动程序把驱动对象注册到 USB 子系统中,之后使用供应商(idVendor)和设备(idProduct)标识来判断对应的硬件是否已经安装. 驱动的设备支持列表 struct usb_device_id 结构提供了这个驱动支持的不同类型 USB 设备的列表. USB 核心通过此列表用来决定设备对应的驱动,热插拔脚本也通过此列表来决定当特定设备被插入系统时,应该自动加载的驱动. struct usb_device_id { /* 确定设备信息去和结构体中哪几个字段匹配来判断驱动的适用性 */ __u16 match_flags ; /* Used for product specific matches; range is inclusive */ __u16 idVendor ; //USB设备的制造商ID,须向 www.usb.org 申请 __u16 idProduct ; //USB设备的产品ID,有制造商自定 __u16 bcdDevice_lo ; /* USB设备的产品版本号最低值*/ __u16 bcdDevice_hi ; /* 和最高值,以BCD码来表示。*/ /* 分别定义设备的类,子类和协议,他们由 USB

Linux USB 鼠标驱动程序解析

大憨熊 提交于 2020-03-07 04:41:21
USB 总线引出两个重要的链表!   一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表。设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)。   USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)的区别是什么?   USB 设备驱动程序包含 USB 设备的一些通用特性,将与所有 USB 设备相匹配。在 USB core 定义了:struct usb_device_driver usb_generic_driver。usb_generic_driver 是 USB 子系统中唯一的一个设备驱动程序对象。而 USB 驱动程序则是与接口相匹配,接口是一个完成特定功能的端点的集合。   设备是如何添加到设备链表上去的?   在设备插入 USB 控制器之后,USB core 即会将设备在系统中注册,添加到 USB 设备链表上去。   USB 设备驱动程序(usb device driver)是如何添加到驱动链表上去的?   在系统启动注册 USB core 时,USB 设备驱动程序即将被注册,也就添加到驱动链表上去了。   接口是如何添加到设备链表上去的?   在 USB

乾坤合一~Linux设备驱动之USB主机和设备驱动

萝らか妹 提交于 2020-03-07 04:39:51
如果不能陪你到最后 是否后悔当初我们牵手 如果当初没能遇见你 现在的我 在哪里逗留 所有的爱都是冒险 那就心甘情愿 等待我们一生中 所有悬念 我一往情深的恋人 她是我的爱人 她给我的爱就像是 带着露水的清晨 我多想给她我的真 我心疼的爱人 我愿为她守候寂寞 就像这夜晚 深沉   这一章从主机侧角度看到的USB 主机控制器驱动和设备驱动从主机侧的角度而言,需要编写的USB 驱动程序包括主机控制器驱动和设备驱动两类,USB 主机控制器驱动程序控制插入其中的USB 设备,而USB 设备驱动程序控制该设备如何作为从设备与主机通信。 1. Linux USB驱动层次 1.1 主机侧与设备侧USB 驱动   USB 采用树形拓扑结构,每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设备不能主动向主机发送任何消息。 1.2 设备、配置、 接 口、 端 点   在USB 设备的逻辑组织中,包含设备、配置、接口和端点4 个层次,每个USB 设备都提供了不同级别的配置信息,可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合,配置由多个接口组成,接口由多个端点组成,代表一个基本的功能,是USB 设备驱动程序控制的对象,如下图是USB 设备、配置、接口和端点之间的关系。   设备描述符:关于设备的通用信息,如供应商ID 、产品ID 和修订ID,支持的设备类

Linux设备驱动之USB

你离开我真会死。 提交于 2020-03-07 04:37:14
Linux驱动框架分析(一) 事实上,Linux的设备驱动都遵循一个惯例——表征驱动程序(用driver更贴切一些,应该称为驱动器比较好吧)的结构体,结构体里面应该包含了驱动程序所需要的所有资源。用术语来说,就是这个驱动器对象所拥有的属性及成员。由于Linux的内核用c来编写,所以我们也按照这种结构化的思想来分析代码,但我还是希望从OO的角度来阐述这些细节。这个结构体的名字有驱动开发人员决定,比如说,鼠标可能有一个叫做mouse_dev的struct,键盘可能由一个keyboard_dev的struct(dev for device,我们做的只是设备驱动)。而这次我们来分析一下Linux内核源码中的一个usb-skeleton(就是usb驱动的骨架咯),自然,他定义的设备结构体就叫做usb-skel: struct usb_skel { struct usb_device * udev; /* the usb device for this device */ struct usb_interface * interface; /* the interface for this device */ struct semaphore limit_sem; /* limiting the number of writes in progress */ unsigned char *

12、USB设备驱动程序

痞子三分冷 提交于 2020-03-07 03:51:41
linux-3.4.2\driver\hid\usbhid\usbmouse.c 内核只带USB驱动程序 (hub和usb是两个不同的设备,hub在内核上电的过程中在usb_hub_init函数中调用usb_register来注册,usb驱动才是我们自己写的驱动,也是用usb_register来注册,内核只带驱动程序是通过宏module_usb_driver来注册的,作用和usb_register一样) 现象:把USB设备接到PC 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有"驱动程序",为何能知道是"android phone" 答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone" 提示你安装的是"设备驱动程序" USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序 问2. USB设备种类非常多,为什么一接入电脑,就能识别出来? 答2. PC和USB设备都得遵守一些规范。 比如:USB设备接入电脑后,PC机会发出"你是什么"? USB设备就必须回答"我是xxx", 并且回答的语言必须是中文 USB总线驱动程序会发出某些命令想获取设备信息(描述符), USB设备必须返回"描述符"给PC 问3.

linux内核之USB驱动分析

落花浮王杯 提交于 2020-03-07 03:50:59
第一部分 USB驱动程序框架   app:   -------------------------------------------   USB设备驱动程序    // 知道数据含义   内核 --------------------------------------   USB总线驱动程序   // 1. 识别, 2. 找到匹配的设备驱动, 3. 提供USB读写函数 (它不知道数据含义)   -------------------------------------------   USB主机控制器   UHCI OHCI EHCI   硬件 -----------   USB设备   UHCI: intel, 低速(1.5Mbps)/全速(12Mbps)     OHCI: microsoft 低速/全速   EHCI: 高速(480Mbps) 第二部分 USB设备基础概念   在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的。一个USB设备由3个功能模块组成:USB总线接口、USB逻辑设备和功能单元:   a -- 这里的USB总线接口指的是USB设备中的串行接口引擎(SIE);   b -- USB逻辑设备被USB系统软件看作是一个端点的集合;   c --