0

我正在尝试找到将 USB 设备与 java 一起使用的正确方法。StackOverflow 的大部分帖子都推荐使用 usb4java,它的最新活动似乎是在 2014 年初,所以我不确定它是否仍然处于活动状态。

无论如何,深入研究一下,在页面上,它说“它基于本地 libusb 1.0 库”。然后尝试安装设备驱动程序,我按照推荐使用了 Zadig(https://github.com/libusb/libusb/wiki/Windows#How_to_use_libusb_on_Windows)。

我通过使用“libusb-win32”驱动程序让 usb4java 工作。但是当你访问“libusb-win32”网站时,它会提到“libusb-win32 是 USB 库 libusb-0.1 的一个端口”,并且更多内容在这里http://libusb.org/wiki/APIs#libusb -0.1legacyAPI中提到“开发状态:libusb-0.1 已弃用,不会有进一步的更改或发布”</p>

这一切都非常令人困惑,所以首先我想知道 USB4Java 是使用 libusb 1.0 还是 0.1。而且它是否推荐用于任何新的开发或将要走的路,似乎没有太多支持使用 JAVA 的 USB 设备。

更新:

谢谢干员。很好的解释。我将 usb4java 与 libusb-win32 结合使用的问题是延迟。我的事务每 10 毫秒发生一次,而且我不能丢失数据,这就是为什么我必须开始缓冲并且我有 15 个缓冲区,所以我的最大延迟将是 150 毫秒。在长时间使用 libusb-win32 评估 usb4java 时(几小时),我看到有时我的延迟超过 1s。我确实尝试过 WinUSB,但由于某种原因,我得到了:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006b6051c2, pid=6284, tid=6836
#
# JRE version: Java(TM) SE Runtime Environment (8.0_45-b14) (build 1.8.0_45-b14)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  [libusb-1.0.dll+0x51c2]

既然你提到它可能更可靠,我会试一试,我会尝试修复它。

顺便说一句:当我尝试在下面的代码中提交传输 (LibUsb.submitTransfer(transfer);) 时,会发生访问冲突。

  public static void write(DeviceHandle handle, byte[] data,
        TransferCallback callback)
    {
        ByteBuffer buffer = BufferUtils.allocateByteBuffer(data.length);
        buffer.put(data);
        Transfer transfer = LibUsb.allocTransfer();
        LibUsb.fillBulkTransfer(transfer, handle, OUT_ENDPOINT, buffer,
            callback, null, TIMEOUT);
//        System.out.println("Sending " + data.length + " bytes to device");
        int result = LibUsb.submitTransfer(transfer);
        if (result != LibUsb.SUCCESS)
        {
            throw new LibUsbException("Unable to submit transfer", result);
        }
    }
4

1 回答 1

1

首先是不同的 libusbs 的一两件事。问题是存在相当多的不同实现和驱动程序。libusb 原版被分叉到 libusbx。libusb 原始失败,libusbx 接管了 libusb 作为名称。所以更加混乱。有 3 种不同的 Windows 驱动程序使用 libusb1(按长期顺序):libusb0 (libusb-win32)、libusbK 和 WinUSB。

现在关于usb4java。据我所知,他们使用 libusb1。libusb1 仍然能够通过 libusbK 与 libusb0 驱动程序一起工作,但我建议改用 WinUSB,因为根据我的个人经验,它工作得更好,而且 libusb 的人也自己推荐它。libusb0 支持似乎只是出于某种礼貌。

无论您是否尝试过 WinUSB 或它如何不起作用,您都不会写任何东西,所以我建议您尝试一下或询问有关您使用 WinUSB 的问题的问题。

于 2016-08-10T07:55:05.290 回答