java如何实现usb口插拔事件的监测,最好有源代码

java如何实现usb口插拔事件的监测,最好有源代码,第1张

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)步时,界面中“Driver version:”后面的版本号是,-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做的窗口,如下图。

当右键点击倒数第二级的节点的时候,又会d出新的窗口,在这个d出窗口里,你可以直接发送一些16进制的代码给 usb 设备。但值得注意的是,这个窗口的代码写得有问题,其对16进制的代码转换为真正要发送的代码时,转换的是错误的代码。这个错误可以自己下载源码,更正即可。错误的类及方法是:

TestApp.java 中的方法:byte[] parseByteArray(String s);更正的代码可以参考如下代码:

Java代码

重新编译后,替换掉这个类,即可。

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

}

接口可以说是为了提供一种规范,方便其他地方使用此规范的一种技术。

在现实生活中可以接口的例子很多,比如USB接口。它定义了USB口的大小,4跟USB线每根线的颜色、作用等。在软件方面定义了供CPU调用的一些方法。比如识别、启动、d出、传送数据等等。采用USB接口的设备很多,有鼠标、键盘、u盘等等。每种设备实现识别、启动、d出、传送数据的方式不一样。

在java中,接口定义了一些方法,但是不用去实现,而由实现了此接口的类去实现接口中定义的方法,比如有一个接口叫做USB,有一个类叫做鼠标,USB接口定义了启动、传送数据等方法。那么鼠标实现了USB接口,就得实现启动、传送数据方法。另外一个类叫做U盘也实现了USB接口、那么它也要实现启动、传送数据。 在鼠标或者U盘连接上电脑后,CPU发现有USB设备连接上电脑了(cpu并不知道是什么设备,只知道是USB设备),这个时候CPU会发出启动命令来启动USB设备,而启动鼠标和启动U盘具体流程是不一样的,这些启动流程都是有鼠标和U盘各自来实现的。

希望对你的理解有帮助


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12083467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存