package org.usb4java.javax.examples;import java.util.List;import javax.usb.UsbConfiguration;import javax.usb.UsbDevice;import javax.usb.UsbDeviceDescriptor;import javax.usb.UsbEndpoint;import javax.usb.UsbHostManager;import javax.usb.UsbHub;import javax.usb.UsbInterface;import javax.usb.UsbPipe;public class UsbUtil {public static final String vIdStr = "1A86";public static final String pIdStr = "E010";private static final short VENDOR_ID = (short) Integer.parseInt(vIdStr, 16);private static final short PRODUCT_ID = (short) Integer.parseInt(pIdStr, 16);// private static final short VENDOR_ID = (short)0x8888;// private static final short PRODUCT_ID = (short)0x0006;public static void main(String[] args) {try {UsbPipe sendUsbPipe = new UsbUtil().useUsb();if (sendUsbPipe != null) {// 绿灯亮String sendData = "55AA000400000000000000030D0A";sendMassge(sendUsbPipe, Test.hexTobytes(sendData));}} catch (Exception e) {e.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() {@Overridepublic 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) {iface = (UsbInterface) configuration.getUsbInterfaces().get(0);} else {return null;}iface.claim();return iface;}public void receivedMassge(UsbPipe usbPipe) throws Exception {byte[] b = new byte[64];int length = 0;while (true) {//阻塞length = usbPipe.syncSubmit(b);System.out.println("接收长度:" + length);for (int i = 0; i < length; i++) {// System.out.print(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) {UsbDevice device = null;List list = hub.getAttachedUsbDevices();for (int i = 0; i < list.size(); i++) {device = (UsbDevice) list.get(i);UsbDeviceDescriptor desc = device.getUsbDeviceDescriptor();if (desc.idVendor() == VENDOR_ID && desc.idProduct() == PRODUCT_ID) {return device;}if (device.isUsbHub()) {device = findDevice((UsbHub) device);if (device != null) {return device;}}}return null;}}
pom
<dependencies><dependency><groupId>org.usb4java</groupId><artifactId>usb4java-javax</artifactId><version>1.3.0</version></dependency></dependencies>
