博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 访问 usb (一)
阅读量:4051 次
发布时间:2019-05-25

本文共 2026 字,大约阅读时间需要 6 分钟。

java 要访问 usb 设备,通常要自己写c/c++代码,然后再用 java 访问这些组件,以达到控制usb设备的目的。但现在有一个开源组件 libusb 帮我们做好了访问usb设备的封装(包括windows、linux等平台)。我们用 java 访问 usb 设备时,可以通过访问 libusb 组件提供的接口即可。要了解这个组件的 java 部分的 Demo、API等,可以访问这里:

使用这个组件最重要的意义在于:

  • 首先,你不再需要在 win、linux 等平台上写 c/c++ 等 native 组件,甚至,你不需要知道 jni 怎么写;
  • 其次,使用这个组件,你可以访问所有的 usb 设备,当然,前提条件是你必须知道 usb 设备的相关指令(我当前就用这个组件,直接发usb能接受的命令,去控制我的指纹仪来工作)
  • 最后,如果你的 usb 设备没有驱动程序,比如,你的 usb 设备是自己研制出来的,还没来得及为各种平台写驱动程序,你可以用这个组件提供驱动程序

 

  1. 从:http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/ 下载 libusb-win32-bin-1.2.2.0.zip
  2. 从 http://sourceforge.net/projects/libusbjava/files/libusbjava-snapshots/20090517/ 下载 ch.ntb.usb-0.5.9.jar 和 LibusbJava_dll_0.2.4.0.zip
  3. 安装 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)步时,界面中“Driver version:”后面的版本号是,-1.-1 -1 ...这些情况,说明你的安装不正常。原因可能是因为你的usb设备是新安装的,且你没有重启计算机。你重启一下计算机,再进行上述步骤,应该就可以了。
  4. 把 LibusbJava.dll 复制到 windows/system32 目录下
  5. 这时,到达 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(String s);更正的代码可以参考如下代码:
    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"> 
    1. byte[] parseByteArray(String s)  
    2.     String[] hexs s.split(");  
    3.     byte[] bytes new byte[hexs.length];  
    4.     if(hexs.length 0){  
    5.         int 0 
    6.         for(String hex hexs){  
    7.             String s1 hex.substring(2);  
    8.             bytes[i] (byte)(Integer.parseInt(s1, 16));  
    9.             i++;  
    10.          
    11.      
    12.     return bytes;  
    13.  
     重新编译后,替换掉这个类,即可。

转载地址:http://qosci.baihongyu.com/

你可能感兴趣的文章
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>
”舍得“大法:把自己的优点当缺点倒出去
查看>>
[今日关注]鼓吹“互联网泡沫,到底为了什么”
查看>>