USB経由で接続されたデバイスの入力を取得できるJava APIを見つけるのに苦労しています。jUsb を見つけましたが、非推奨で古いようです。
私が欲しいのは:
- プラットフォームに依存しない API (Unix、Windows、Mac で動作)
- 任意のデバイスからの入力を取得できる API (実際には、ジョイスティックを USB ポートに接続したい)
USB センサーにも同じ問題がありました。100% Java ソリューションはありません。別の言語で記述された (ネイティブ API にアクセスできる) OS 固有のコードが常に必要になります。
私たちが見つけた最も移植性の高いソリューションは、localhost TCP ソケットを介して USB データをカプセル化する一種のゲートウェイを実装することです。ネイティブ API を呼び出して USB デバイスと対話するゲートウェイの 3 つの実装 (OSX、UNIX、および Windows) があります。Java コードは、TCP ゲートウェイ経由で USB トラフィックを送受信します。いくつかのベンチマークを実行した結果、純粋な C++ コードと Java 実装の全体的な差は 10 ミリ秒未満 (45 ミリ秒の大規模なトランザクションの場合) であることが測定されましたが、チャネルが開いている場合、レイテンシは無視できます (影響はありません)。
私たちのソリューションを説明する投稿をここに書きました。
以前はlibusbを使用していました。 単純ではありませんが、十分に根付いていれば、いくつかのオペレーティング システムと Java バインディング用のドライバーを入手できます。
まず、デバイスを検出できるデバイス ドライバーをインストールする必要があります。
デバイス マネージャー -> ポート (COM & LPT) で、デバイスが接続されているポートを確認できます。例: COM1/COM2/COM3
これらのポートからデータを読み取るためのリスナー イベントを追加するようにコーディングできます。COM ポートを操作するために使用できるライブラリが多数あります。このリンクは役に立ちます。
comm.jar を使用して、ハンドヘルド スキャナー デバイスからの入力を読み取ります。