我从上上个礼拜开始接触,公司需要,所以开始在网上搜索相关资料,但是都没有找到合适的范例,但万幸终于测试出合适的代码。

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设备的相关信息相关推荐

  1. C# 获取USB设备信息

    WMI方式 using System; using System.Management; using System.Text.RegularExpressions; using System.Coll ...

  2. 基于WMI获取USB设备信息(即获取插即用设备信息)System.Management.ManagementObjectSearcher--ManagementObjectCollection

    基于WMI获取USB设备信息(即获取插即用设备信息)System.Management.ManagementObjectSearcher--ManagementObjectCollection 获取P ...

  3. Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小

    Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小 1 动态获取手机屏幕的 屏幕密度与对应像素比例 例如在 320 * 480 尺寸为 3.2 英寸的手机 ,对应的像素密度 ...

  4. libusb获取usb设备的idVendor(vid),idProduct(pid),以及Serial Number

    发表于2015/6/23 21:55:11  4594人阅读 最近在做关于usb设备的项目,用到了libusb,发现关于这个的函数库的介绍,讲解很少,下面仅仅是简单展示一些基本的使用方法,以备后用. ...

  5. 服务器能识别手机型号,iOS获取当前设备型号等信息(全)包含iPhone7和iPhone7P

    获取设备信息总结 1.获取设备的信息 2.获取设备的唯一标示符 3.为系统创建一个随机的标示符 4.获取当前屏幕分辨率的信息 5.获取运营商的信息 需要先导入头文件 创建对象 获取运行商的名称 获取当 ...

  6. 获取access中表的相关信息

    就用到两条.net自带的获取数据库信息的语句 OleDbConnection con = new OleDbConnection(connection); // OleDB数据库连接实例 // 获取数 ...

  7. 通过java获取抖音用户主页信息(2020年9月)

    通过java获取抖音用户主页信息(2020年9月) 环境准备 本篇文章基于sts编辑器,jdk1.8,maven3 项目结构如下图 执行结果如下图 html请求工具类 HttpUtils代码如下 pa ...

  8. java获取MP3文件的id3信息(包括封面图,歌词,艺术家,标题等)

    MP3结构简单介绍 有时我们会发现MP3文件在电脑上可以显示出封面图,艺术家,标题,唱片集等等信息,这是因为MP3中有ID3标签信息. MP3文件大体上分为三个部分:ID3V2+音频数据+ID3V1 ...

  9. 用python获取usb设备端口号,用Python查询连接的USB设备信息的简单方法?

    如何在Python中查询连接的USB设备信息? 我想得到UID设备名(例如:SonyEricsson W660),设备路径(例如:dev/ttyACM0) 此外,上述信息中的最佳参数是什么,以便在设备 ...

最新文章

  1. php 的opcode缓存apc以及其安装
  2. 十九、Android Activity初探
  3. 诊断Java中的内存泄露
  4. 全志 添加TP休眠触摸唤醒 Patch
  5. 怎样检查计算机的网络配置,如何检查计算机内存和配置?(3种方法教你检查计算机的真实配置)...
  6. [独库骑行之我们路过沙漠]塔克拉玛干的边缘
  7. 培训学校计算机助教是干嘛的,【助教】的意思是什么?【助教】是什么意思?...
  8. 由浅入深了解Thrift(二)——Thrift工作原理
  9. Linux系统grep查日志用法
  10. SM3算法的编程实现
  11. 计算机web前端岗位职责,web前端开发工程师岗位的职责
  12. popwindow高度_使用Style实现的popwindow弹出和收起的动画效果
  13. 适用于Android的最佳本地音乐播放器
  14. 小程序实现城市搜索功能
  15. SiteGround主机和HostGator哪个好?(权威技术性分析)2022最新对比
  16. Code Clinic: Clojure 代码诊所:Clojure Lynda课程中文字幕
  17. sqlserver2005 sql server database services安装失败解决方法
  18. 微服务架构实践心得小结
  19. W5500寄存器描述
  20. ackman函数递归实现python_一个求ackerman函数的非递归算法

热门文章

  1. LeetCode题目:1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
  2. 修改植物大战僵尸阳关代码
  3. Eplan-中断点(3)
  4. GB 21551.5家用和类似用途电器的抗菌、除菌、净化功能 洗衣机的特殊要求
  5. i5 11400和锐龙r5 5600X哪个强
  6. 【数据分析干货】世界杯4强出炉!冠军将花落谁家?看看历年数据!
  7. 一种崭新的长尾分布下分类问题的通用算法|NeurIPS 2020
  8. Axure绘制页面框架
  9. 2022出圈的ML研究:爆火的Stable Diffusion、通才智能体Gato,LeCun转推
  10. 朗润外盘国际期货:Cosmos 终局