2

我正在尝试通过 USB 连接的 RFID 阅读器读取字符串。阅读器在我的应用程序中被正确识别。但我不知道如何将传输的字符读入字符串。

如果我不分离设备,则字符串会像键盘一样打印(正如您对 HID 所期望的那样)。我想要的是仅在我的 Java 应用程序中捕获该字符串。这就是我分离USB设备的原因。

例如,我的应用程序将 '"''#$&' 打印到控制台(参见下面的代码)或类似的东西

[0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0]

但我想读的是05006790。

我认为我的尝试有一个愚蠢的错误。我希望有人可以帮助我弄清楚如何正确地将字节读入字符串。

非常感谢。

代码如下

Context context = new Context();
    int result = LibUsb.init(context);

    DeviceList list = new DeviceList();
    result = LibUsb.getDeviceList(context, list);

    for (Device device: list)
    {
        int address = LibUsb.getDeviceAddress(device);
        int busNumber = LibUsb.getBusNumber(device);

        DeviceDescriptor descriptor = new DeviceDescriptor();
        DeviceHandle handle = new DeviceHandle();

        int resultOpen = LibUsb.open(device, handle);
        // if (resultOpen < 0) // handle = null;

        int resultDescriptor = LibUsb.getDeviceDescriptor(device, descriptor);
        // if (resultDescriptor< 0) // handle = null;

        if(descriptor.idVendor() == 0x8ff && descriptor.idProduct() == 0x0009)
        {
            System.out.println("found");
            LibUsb.detachKernelDriver(handle, 0);
        }
    }

    UsbServices services = UsbHostManager.getUsbServices();
    UsbDevice deviceHigh = findDevice(services.getRootUsbHub(), (short) 0x8ff, (short) 0x0009);


    if(deviceHigh != null)
    {
        System.out.println("found high");

        UsbConfiguration configuration = deviceHigh.getActiveUsbConfiguration();
        UsbInterface iface = configuration.getUsbInterface((byte) 0x00);

        iface.claim();

        UsbEndpoint endpoint = iface.getUsbEndpoint((byte) 0x81);
        UsbPipe pipe = endpoint.getUsbPipe();

        pipe.open();

        byte[] buffer = new byte[128];
        int rx = 0;
        rx = pipe.syncSubmit(buffer);

        System.out.printf("%d bytes received\n", rx);
        System.out.println(Arrays.toString(buffer));

        iface.release();
    }
4

0 回答 0