zoukankan      html  css  js  c++  java
  • java 访问 usb

    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 设备是自己研制出来的,还没来得及为各种平台写驱动程序,你可以用这个组件提供驱动程序
      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)、把目录:inx86 下的 libusb0_x86.dll 复制到 windows/system32 目录下,并改名为:libusb0.dll;
        3)、把目录:inx86 下的 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代码  收藏代码
        1. byte[] parseByteArray(String s) { 
        2.     String[] hexs = s.split(" "); 
        3.     byte[] bytes = new byte[hexs.length]; 
        4.     if(hexs.length > 0){ 
        5.         int i = 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; 
        1. byte[] parseByteArray(String s) {  
        2.     String[] hexs = s.split(" ");  
        3.     byte[] bytes = new byte[hexs.length];  
        4.     if(hexs.length > 0){  
        5.         int i = 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. }  
        重新编译后,替换掉这个类,即可。
  • 相关阅读:
    20200209 ZooKeeper 3. Zookeeper内部原理
    20200209 ZooKeeper 2. Zookeeper本地模式安装
    20200209 Zookeeper 1. Zookeeper入门
    20200206 尚硅谷Docker【归档】
    20200206 Docker 8. 本地镜像发布到阿里云
    20200206 Docker 7. Docker常用安装
    20200206 Docker 6. DockerFile解析
    20200206 Docker 5. Docker容器数据卷
    20200206 Docker 4. Docker 镜像
    Combining STDP and Reward-Modulated STDP in Deep Convolutional Spiking Neural Networks for Digit Recognition
  • 原文地址:https://www.cnblogs.com/yu-xia/p/5084695.html
Copyright © 2011-2022 走看看