この質問のフォローアップのようなもので、次のことができました。
使用しているデバイスを見つけて、カーネルから切断し、(単一の) インターフェイスを要求します。. . それは私が得ることができる限りです。
デバイス (独自の設計ではなく、カスタム ワイヤレス トランシーバー) に書き込もうとすると、次のようになります (エンドポイント 0x00 で LibUsb.bulkTransfer を使用する場合):
LibUsb.bulkTransfer(handle, (byte)0x00, bb, transfered, 5000);
入力/出力エラー、および (エンドポイント 0x81 で LibUsb.bulkTransfer を使用する場合):
LibUsb.bulkTransfer(handle, (byte)0x81, bb, transfered, 5000);
タイムアウト エラー。
私は自分がここで何をしているのかまったくわからないと確信しています (これは私の立場を助けません)。私がやったのは.Netとの相互運用性です)。
私は lsusb コマンドを見て、それを実行して... たくさんのものを手に入れました。そのうちのいくつかは認識できますが、ほとんどの場合、私はちょっと迷っていて、誰かが私の手を握ってくれることを望んでいました。私が何をする必要があるかを理解するのに役立つかもしれない、一種の... USB for Dummies ガイドを教えてください。
最終結果は (理想的には)、エンドユーザーに代わって何の操作もせずにデバイスとのクロスプラットフォーム通信を可能にする Java パッケージになります (クロスプラットフォームとは、Windows、Linux、および Mac を意味します。これが理由です)。私は java4usb Java ライブラリを使用しています)。
私が今いるところは、lsusb コマンドからの出力を使用して、トランシーバーから通信相手の外部デバイスにコマンドを送信できることを望んでいます。(基本的には、LED に接続されたデバイスにコマンドを送信して、LED をオン/オフしたり、点滅させたりすることができます。また、そのデバイスからコマンドを受信してそれに応じて応答することもできますが、赤ちゃんのステップです)。
ここで見つけることができる lsusb の出力(非常に冗長であり、必要以上に質問をあふれさせたくありませんでした)。どんな助けや指示も非常に高く評価されます。
編集: もう少し調査すると、(lsusb 出力から) 0x81 エンドポイントが割り込みタイプであることがわかります。2 と 2 をまとめると、バルク転送でもコントロール転送でもなく、割り込み転送が必要であるという結論に至りました。
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval
LibUsb.interruptTransfer(handle, (byte)0x81, bb, transfered, 1000);
残念ながら、まだタイムアウト エラーが発生します。
編集:さらに情報が必要です:
usb4java.LibUsb controlTransfer メソッドを使用する必要がある同期制御 (必要な作業の半分には問題ありません) が提案されていますが、これは問題ありませんが、入力する必要のあるパラメーターがいくつかあり、わかりませんそれらが満たされる必要があるのは何ですか:
public static int controlTransfer(DeviceHandle handle, //I know this.
byte bmRequestType, //<--- What goes here?
byte bRequest, //<--- What goes here?
short wValue, //<--- What goes here?
short wIndex, //<--- What goes here?
ByteBuffer data, //<--- What goes here?
long timeout) //<--- What goes here?
これらのフィールドに入力する必要があるものへの回答へのすべての指示は、大きな助けとなり、非常に高く評価されます。