java获取usb设备的相关信息
我从上上个礼拜开始接触,公司需要,所以开始在网上搜索相关资料,但是都没有找到合适的范例,但万幸终于测试出合适的代码。
import java.io.UnsupportedEncodingException;
import java.util.List;import javax.usb.*;public class UsbTest {//下边两个参数为系统中usb设备的VID和PID 需要自行配置private static short idVendor = ...;private static short idProduct = ...;public static void main(String[] args) {try {UsbPipe sendUsbPipe = new UsbTest().useUsb();String string = "..." ;//传输内容byte[] buff =string.getBytes();sendMassge(sendUsbPipe, buff);} catch (Exception e1) {e1.printStackTrace();}
}public UsbPipe useUsb() throws Exception{UsbInterface iface = linkDevice();if (iface == null) {return null;}UsbEndpoint receivedUsbEndpoint,sendUsbEndpoint;sendUsbEndpoint = (UsbEndpoint)iface.getUsbEndpoints().get(0);if (!sendUsbEndpoint.getUsbEndpointDescriptor().toString().contains("OUT")) {receivedUsbEndpoint = sendUsbEndpoint;sendUsbEndpoint = (UsbEndpoint)iface.getUsbEndpoints().get(1);} else {receivedUsbEndpoint = (UsbEndpoint)iface.getUsbEndpoints().get(1);}//发送:UsbPipe sendUsbPipe = sendUsbEndpoint.getUsbPipe();sendUsbPipe.open();//接收final UsbPipe receivedUsbPipe = receivedUsbEndpoint.getUsbPipe();receivedUsbPipe.open();new Thread(new Runnable() {public void run() {try {receivedMassge(receivedUsbPipe);} catch (Exception e) {e.printStackTrace();}}}).start();return sendUsbPipe;}public UsbInterface linkDevice() throws Exception{UsbDevice device = null;if (device == null) {device = findDevice(UsbHostManager.getUsbServices().getRootUsbHub());}if (device == null) {System.out.println("设备未找到!");return null;}UsbConfiguration configuration = device.getActiveUsbConfiguration();UsbInterface iface = null;if (configuration.getUsbInterfaces().size() > 0) {//各位如果在此处获取不到设备请自行进行debug看map中存储的设备key到底是多少iface = configuration.getUsbInterface((byte) 0);} else {return null;}iface.claim(new UsbInterfacePolicy(){@Overridepublic boolean forceClaim(UsbInterface usbInterface){return true;}});return iface;}public void receivedMassge(UsbPipe usbPipe) throws Exception{StringBuffer all = new StringBuffer();byte[] b = new byte[64];int length;while (true) {length = usbPipe.syncSubmit(b);//阻塞System.out.println("接收长度:" + length);for (int i = 0; i < length; i++) {//此处会打印所有的返回值 注意返回值全部也都是16进制的//比如读取卡号或者身份证号时需要自行转换回10进制//并进行补0操作,比如01转换为10进制会变成1需要补0 变成01//不然得到的10进制返回值会有问题System.out.print(Byte.toUnsignedInt(b[i])+" ");all.append(Byte.toUnsignedInt(b[i])+" ");}}}public static void sendMassge(UsbPipe usbPipe,byte[] buff) throws Exception{//此处为阻塞和非阻塞 非常好理解和多线程一个道理不再解释
// usbPipe.syncSubmit(buff);//阻塞usbPipe.asyncSubmit(buff);//非阻塞}public UsbDevice findDevice(UsbHub hub) throws UnsupportedEncodingException, UsbException {UsbDevice device = null;List list = (List) hub.getAttachedUsbDevices();for (int i = 0;i<list.size();i++){device = (UsbDevice)list.get(i);UsbDeviceDescriptor desc = device.getUsbDeviceDescriptor();if (desc.idVendor() == idVendor && desc.idProduct() == idProduct){System.out.println(i+"___"+desc.idVendor()+"___"+desc.idProduct());System.out.println("设备描述符:"+desc.toString());System.out.println("厂商描述:"+device.getString(desc.iManufacturer())+"产品描述:"+device.getString(desc.iProduct()));return device;}if (device.isUsbHub()){device = findDevice((UsbHub) device);if (device != null) return device;}}return null;}
}
这篇文章的数据接收部分并没有进行测试,原因是没有拿到对应的协议,后续会更新相关信息。
注意事项:
1:创建javax.usb.properties文件,将其置于resource目录下。
文件文件内容:
javax.usb.services = org.usb4java.javax.Services
2:pom文件引用的usb4java文件为:
<dependency><groupId>org.usb4java</groupId><artifactId>usb4java</artifactId><version>1.3.0</version></dependency><!-- For using usb4java with javax-usb --><dependency><groupId>org.usb4java</groupId><artifactId>usb4java-javax</artifactId><version>1.3.0</version></dependency><dependency><groupId>javax.usb</groupId><artifactId>usb-api</artifactId><version>1.0.2</version></dependency><dependency><groupId>javax.usb</groupId><artifactId>usb-api</artifactId><version>1.0.2</version><classifier>sources</classifier></dependency>
3:在使用IO时会有一个usb error,此处我查询大量相关资料显示,还需要安装UsbDk。以此对usb的反问进行重定向。
解释:UsbDk开发套件是由一套软件工具和模块组成,它把USB设备从PNP管理器和设备驱动分离,并提供了一系列API供用户层程序直接独占的访问USB设备,进行USB设备相关操作。
软件下载地址
4.在下载安装完毕后,在javax.usb.properties文件中添加一句,
org.usb4java.javax.useUSBDK = true
java获取usb设备的相关信息相关推荐
- C# 获取USB设备信息
WMI方式 using System; using System.Management; using System.Text.RegularExpressions; using System.Coll ...
- 基于WMI获取USB设备信息(即获取插即用设备信息)System.Management.ManagementObjectSearcher--ManagementObjectCollection
基于WMI获取USB设备信息(即获取插即用设备信息)System.Management.ManagementObjectSearcher--ManagementObjectCollection 获取P ...
- Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小
Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小 1 动态获取手机屏幕的 屏幕密度与对应像素比例 例如在 320 * 480 尺寸为 3.2 英寸的手机 ,对应的像素密度 ...
- libusb获取usb设备的idVendor(vid),idProduct(pid),以及Serial Number
发表于2015/6/23 21:55:11 4594人阅读 最近在做关于usb设备的项目,用到了libusb,发现关于这个的函数库的介绍,讲解很少,下面仅仅是简单展示一些基本的使用方法,以备后用. ...
- 服务器能识别手机型号,iOS获取当前设备型号等信息(全)包含iPhone7和iPhone7P
获取设备信息总结 1.获取设备的信息 2.获取设备的唯一标示符 3.为系统创建一个随机的标示符 4.获取当前屏幕分辨率的信息 5.获取运营商的信息 需要先导入头文件 创建对象 获取运行商的名称 获取当 ...
- 获取access中表的相关信息
就用到两条.net自带的获取数据库信息的语句 OleDbConnection con = new OleDbConnection(connection); // OleDB数据库连接实例 // 获取数 ...
- 通过java获取抖音用户主页信息(2020年9月)
通过java获取抖音用户主页信息(2020年9月) 环境准备 本篇文章基于sts编辑器,jdk1.8,maven3 项目结构如下图 执行结果如下图 html请求工具类 HttpUtils代码如下 pa ...
- java获取MP3文件的id3信息(包括封面图,歌词,艺术家,标题等)
MP3结构简单介绍 有时我们会发现MP3文件在电脑上可以显示出封面图,艺术家,标题,唱片集等等信息,这是因为MP3中有ID3标签信息. MP3文件大体上分为三个部分:ID3V2+音频数据+ID3V1 ...
- 用python获取usb设备端口号,用Python查询连接的USB设备信息的简单方法?
如何在Python中查询连接的USB设备信息? 我想得到UID设备名(例如:SonyEricsson W660),设备路径(例如:dev/ttyACM0) 此外,上述信息中的最佳参数是什么,以便在设备 ...
最新文章
- php 的opcode缓存apc以及其安装
- 十九、Android Activity初探
- 诊断Java中的内存泄露
- 全志 添加TP休眠触摸唤醒 Patch
- 怎样检查计算机的网络配置,如何检查计算机内存和配置?(3种方法教你检查计算机的真实配置)...
- [独库骑行之我们路过沙漠]塔克拉玛干的边缘
- 培训学校计算机助教是干嘛的,【助教】的意思是什么?【助教】是什么意思?...
- 由浅入深了解Thrift(二)——Thrift工作原理
- Linux系统grep查日志用法
- SM3算法的编程实现
- 计算机web前端岗位职责,web前端开发工程师岗位的职责
- popwindow高度_使用Style实现的popwindow弹出和收起的动画效果
- 适用于Android的最佳本地音乐播放器
- 小程序实现城市搜索功能
- SiteGround主机和HostGator哪个好?(权威技术性分析)2022最新对比
- Code Clinic: Clojure 代码诊所:Clojure Lynda课程中文字幕
- sqlserver2005 sql server database services安装失败解决方法
- 微服务架构实践心得小结
- W5500寄存器描述
- ackman函数递归实现python_一个求ackerman函数的非递归算法