JavaでUSBデバイスを使用する適切な方法を見つけようとしています。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」Web サイトにアクセスすると、「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デバイスのサポートはあまりないようです.
アップデート:
ありがとうドライマン。素晴らしい説明。libusb-win32 と組み合わせた usb4java に関する私の問題はレイテンシーです。私のトランザクションは 10 ミリ秒ごとに行われ、データを失うわけにはいきません。そのため、バッファリングを開始する必要があり、15 個のバッファーがあるため、最大遅延は 150 ミリ秒になります。 )、時々 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]
より信頼性が高いかもしれないとおっしゃったので、試してみて、修正しようと思います。
ところで: 以下のコード内で転送 (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);
}
}