USB4Java是libusb 1.0或0.1的包装吗?是否推荐用于新的Java开发?

时间:2016-08-09 16:27:13

标签: java libusb libusb-1.0 usb4java libusb-win32

我正在尝试找到使用java设备的正确方法。 StackOverflow的大多数帖子都建议使用usb4java,最新活动似乎是在2014年初,所以我不确定它是否仍然有效。

无论如何,在页面上挖掘一点,它说“它基于原生的libusb 1.0库”。然后尝试安装设备驱动程序,我按照建议(https://github.com/libusb/libusb/wiki/Windows#How_to_use_libusb_on_Windows)使用了Zadig。

我使用“libusb-win32”驱动程序让usb4java工作。但是当你去“libusb-win32”网站时,它提到“libusb-win32是USB库libusb-0.1的一个端口”,在这里http://libusb.org/wiki/APIs#libusb-0.1legacyAPI更多地提到“开发状态:libusb” -0.1已弃用,不再进行任何更改或发布“

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

更新

谢谢干手。很棒的解释。 usb4java与libusb-win32相结合的问题是延迟。我的交易发生在每10毫秒,我无法承受丢失的数据,这就是为什么我必须开始缓冲并且我有15个缓冲区,因此我的最大延迟将是150毫秒。同时用libusb-win32长期评估usb4java (小时),我看到我不时有超过1秒的延迟。我确实尝试过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]

既然你提到它可能更可靠,我会尝试一下,我会尝试解决它。​​

BTW:当我尝试在下面的代码中提交转移(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);
        }
    }

1 个答案:

答案 0 :(得分:1)

首先要对不同的libusbs做一两件事。事情是存在不同的实现和驱动程序的公平份额。 libusb原文分叉到libusbx。 libusb原来失败了,libusbx接管了libusb作为名称。所以更加困惑。使用libusb1(按时间顺序)的Windows有3种不同的驱动程序:libusb0(libusb-win32),libusbK和WinUSB。

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

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