java 访问 usb (一)
来源:互联网 发布:夜刀神十香 知乎 编辑:程序博客网 时间:2024/05/24 06:04
java 要访问 usb 设备,通常要自己写c/c++代码,然后再用 java访问这些组件,以达到控制usb设备的目的。但现在有一个开源组件 libusb帮我们做好了访问usb设备的封装(包括windows、linux等平台)。我们用 java 访问 usb 设备时,可以通过访问libusb 组件提供的接口即可。要了解这个组件的 java 部分的 Demo、API等,可以访问这里:http://libusbjava.sourceforge.net/
使用这个组件最重要的意义在于:
- 首先,你不再需要在 win、linux 等平台上写 c/c++ 等 native 组件,甚至,你不需要知道 jni 怎么写;
- 其次,使用这个组件,你可以访问所有的 usb 设备,当然,前提条件是你必须知道 usb设备的相关指令(我当前就用这个组件,直接发usb能接受的命令,去控制我的指纹仪来工作)
- 最后,如果你的 usb 设备没有驱动程序,比如,你的 usb设备是自己研制出来的,还没来得及为各种平台写驱动程序,你可以用这个组件提供驱动程序
- 从:http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/
下载 libusb-win32-bin-1.2.2.0.zip - 从http://sourceforge.net/projects/libusbjava/files/libusbjava-snapshots/20090517/
下载ch.ntb.usb-0.5.9.jar 和 LibusbJava_dll_0.2.4.0.zip - 安装 libusb-win32:
1)、解压libusb-win32-bin-1.2.2.0.zip;
2)、把目录:\bin\x86 下的 libusb0_x86.dll 复制到 windows/system32目录下,并改名为:libusb0.dll;
3)、把目录:\bin\x86 下的 libusb0.sys 复制到 windows/system32/drivers目录下
4)、运行 install-filter-win.exe ,从中选择安装你要访问的 usb 设备
5)、运行 testlibusb-win.exe,有正确的提示信息。如下图:
注意:如果你运行第4)步时,出现无法安装libusb0服务、无法找到文件等错误,或者运行第5)步时,界面中“Driverversion:”后面的版本号是,-1.-1 -1...这些情况,说明你的安装不正常。原因可能是因为你的usb设备是新安装的,且你没有重启计算机。你重启一下计算机,再进行上述步骤,应该就可以了。 - 把 LibusbJava.dll 复制到 windows/system32目录下
- 这时,到达 ch.ntb.usb-0.5.9.jar 所在的目录,运行:
java -jar ch.ntb.usb-0.5.9.jar,这样就会出来一个java swing做的窗口,如下图。
当右键点击倒数第二级的节点的时候,又会弹出新的窗口,在这个弹出窗口里,你可以直接发送一些16进制的代码给 usb设备。但值得注意的是,这个窗口的代码写得有问题,其对16进制的代码转换为真正要发送的代码时,转换的是错误的代码。这个错误可以自己下载源码,更正即可。错误的类及方法是:
TestApp.java 中的方法:byte[] parseByteArray(Strings);更正的代码可以参考如下代码:Java代码0){ int i = 0; for(String hex : hexs){ String s1 =hex.substring(2); bytes[i] = (byte)(Integer.parseInt(s1, 16)); i++;} } return bytes; } " quality="high" allowscriptaccess="always"type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer"> - byte[]
parseByteArray(String s) { -
String[] hexs = s.split(" " ); -
byte[] bytes new= byte[hexs.length]; -
if(hexs.length > 0){ -
int i 0;= -
for(String hex : hexs){ -
String s1 = hex.substring(2); -
bytes[i] = (byte)(Integer.parseInt(s1, 16)); -
i++; -
} -
} -
return bytes; - }
重新编译后,替换掉这个类,即可。 - byte[]
0 0
- java 访问 usb (一)
- java 访问 usb (一)
- Java GUI (图形界面)
- Spring 事务管理(一)
- V4L2 usb 摄像头 测试
- V4L2 usb 摄像头 测试
- Java eclipse: e
- Android usb device
- Android usb device
- JAVA 面试题一 123道
-  
- HDOJ 2044 一只小蜜蜂...
- nand flash读写 (一) (转)
-
- USB枚举过程 USB Enumeration
- java EE 笔记
- Linux USB驱动框架分析(一)
- Linux USB驱动框架分析(一)
- Linux设备驱动调试技术 2
- Linux设备驱动调试技术 2
- Debian软件包安装
- Linux设备驱动调试技术 3
- Linux设备驱动调试技术 3
- java 访问 usb (一)
- java 访问 usb (一)
- linux-2.6.14下USB驱动移植心得
- linux-2.6.14下USB驱动移植心得
- [S3C6410]USB-HOST驱动完成
- [S3C6410]USB-HOST驱动完成
- Linux模块编程系列之二 熟悉特定的…
- Linux模块编程系列之二 熟悉特定的…
- Linux2.6内核驱动移植参考