Java libusb / libusb-win32 封装包
概要
Java libusb 封装包是对libsub和libusb-win32 USB library的Jave封装.
libusb旨在创建一个平台无关性的、面向应用程序级别的、访问USB设备的类库,基于C/C++的实现,方便地通过第三方接口扩展到不同的操作系统上,作为开源的类库,可从http://libusb.sourceforge.net/获取相关的信息,目前包括Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X等。
libusb-win32是 libusb在Windows操作系统上的实现。 该版本的类库允许WIndows环境中的用户无需在内核模式下(需要借助DDK和SDK,并可通过第三方开发工具DriverStudio等生成框架开 发,核心代码在Visual C++ 6.0中开发)编写驱动即可以让应用程序访问USB设备的通用解决方案,可从http://libusb-win32.sourceforge.net/上获取相关的信息。
已知的Java libusb 封装包可以在Linux和Windows上使用, 而由于libusb和Java(这两个方面都在跨平台上具备优势)的支持必然可以推广到任意的操作系统上。
实现
Java libusb 封装包基于Java Native Interface(Java本地接口,即JNI)技术通过调用共享库(Windows下Dynamic Link Library,dll)及Java类文件访问libusb/libusb-win32。类ch.ntb.usb.LibusbJava装载了共享库并提供了访问libusb的本地接口。
在libusb中, 总线结构(包含设备(device),设置(configuration),接口(interface),和端点(endpoints))是以C语言的 struct组织的. 对每个struct实例化一个Java对象(命名为Usb_xxx),同时把相应的信息保存到Java对象中. 这一过程通过调用LibusbJava.usb_get_busses()来完成。此后,总线和附属设备的信息可以从一个树型结构的Java对象中得到。
一个简单的类对象Device即可展示一个USB设备并相当容易地进行读写操作,错误(Errors)和超时(Timeouts)将会抛出异常。
注意当前该类库是BETA版本! 它已经在我们的两个程序中得到了应用:编程与调试接口(Programming and Debugging Interface (Cypress FX2)) 、实验板(Experimental Board (AVR AT90USB1287)) ,这两个应用都使用了批传输(bulk transfers) 和中断传输(Interrupt transfers)并能正常地在测试外设上工作。
演示
UsbView
UsbView 为现有的USB总线提供了一个树型结构视图。它展现了包括字符描述符在内的不同的描述符参数。 UsbView基于Swing实现因而只依赖于Java基本类库(standard java libraries)。
当你右键一个接口描述符(interface descriptor )时,你可以打开另一个应用程序„USB TestApp“ ,它将显示设备描述符的属性值。