web-dev-qa-db-ja.com

接続されたUSBデバイスと通信するためにlibusbを最も適切に使用する方法は?

接続されたUSBデバイスと通信するために libusb を最も適切に使用するにはどうすればよいですか?

具体的には、USBデバイスにデータを転送する方法、デバイスから情報を受信する方法、接続されているデバイスの名前を確認する方法(ストレージがある場合)などです。

具体的には、これをMac OS Xマシンで実行するので、Windowsヘッダーファイルだけを使用することはできません。

LibusbとUSBデバイスに関する良い説明があれば、それも役に立ちます。

21
user473973

私はここにlibusb-1.0の使用に関するテキストハウツーを見つけました: http://www.dreamincode.net/forums/topic/148707-introduction-to-using-libusb-10/

11
user2469202

ここ はあなたに役立つかもしれない同様の質問への投稿です。私はたくさんのリンクを含めます。

しかし、多分あなたはむしろそれをここで見たいでしょう。だからその場合、ここに行きます!

Libusbを使用すると、デバイスを列挙し、特定のベンダー/製品ID(V/P Id)に基づいて必要なデバイスを選択できます。これを知らず、オンラインで製品の説明を見つけることができない場合は、簡単に見つけることができます。

オンラインでない場合は、Linuxのlsusbと同様のアプリを使用する必要があります。 (Macにあるとは思いません。)lsusbを実行すると、接続されているデバイスとそのV/P IDが一覧表示されます。デバイスを取り外し、lsusbを実行し、デバイスを再び接続して比較することで簡単に見つけることができます。それは朝飯前だ。 MacのUSBリストアプリは、lsusbと同じようにV/P IDを表示することが期待されます。

次に、このV/P IDを取得したら、libusb(0.1を使用している場合)を使用してすべてのデバイスを列挙し、そのIDに一致するデバイスを見つけます。 (私はたまたまV/P idに基づいて単一のデバイス検索機能を備えたlibusbxの使用をサポートしています-実際、libusbxはずっとずっとずっと簡潔です。)

デバイスを選択したら、機能レポートまたは出力レポートを使用してパケットを送信します。送信するパケットは私が信じている個々のデバイスに依存するため、これは最も複雑な部分です。これは8バイトのデータで、そのうちの1つだけが、USBデバイスに送信する単一の文字です。 (8文字を送信する場合は、charの配列をループして、各文字の機能または出力レポートを送信する必要があります。)

例として、かなり具体的な端末を自由に参照してください example 2つのLEDを制御するために書きました。参考になれば、すばらしいですね。 libusbxとlibusb-0.1の例が含まれています。

これが役に立てば幸いです!

7
eatonphil

Libusb 1.0(新しい推奨バージョン)の公式サイトは https://libusb.info/ です。 APIドキュメントは http://api.libusb.info にあります。 [モジュール]セクションをクリックして、さまざまな機能領域を確認します。ソースは https://github.com/libusb/libusb にあり、 https://github.com/libusb/libusb/tree/master/でいくつかの実用的な例を見ることができます例 。お役に立てば幸いです。

@ user2469202の記事も、基本的な紹介として役立ちます。

3
studgeek

従うことができるプロセスは次のとおりです。

  1. lsusbを使用して、通信するデバイスのVID、PIDを取得します
  2. デバイスを開いて、デバイス記述子を読み取ってみてください
  3. デバイスの名前が必要な場合は、文字列記述子を使用してそれを取得します
  4. カーネルドライバーが添付されているかどうかを確認します。もしそうなら、それを切り離して、いくつかの生データ転送を行います
  5. 応答を受け取った後、ドライバーを再接続します。
2
freeworld