2013-05-07 35 views
6

usbデバイスのOUTまたはINエンドポイントを教えてくれるbashコマンド、プログラムまたはlibusb関数がありますか(私は見つけませんでしたが)?usbデバイスのエンドポイントを知っている

たとえば、libusb_interface_descriptor(libusb1.0ライブラリ)のbNumEndpointsは私のUSBドライブに3つのエンドポイントがあることを示していますが、どのようにIDNumberがわかるでしょうか?

答えて

4

私は最終的に答えをlubusb-1.0で見つけました。

uint8_t libusb_endpoint_descriptor :: bEndpointAddress

この記述子によって記述されるエンドポイントのアドレス:では機能が、構造体のフィールドは、実際にはありませんでした。

ビット0:3はエンドポイント番号です。ビット4:6は予約されています。ビット7 は方向を示します。libusb_endpoint_directionを参照してください。 USBドライブのための各インタフェースに対して

、私は可能なエンドポイントを表示するには、これらの行を書かなければならなかった:

cout<<"Number of endpoints: "<<(int)interdesc->bNumEndpoints<<endl; 
for(int k=0; k<(int)interdesc->bNumEndpoints; k++) { 
     epdesc = &interdesc->endpoint[k]; 
     cout<<"Descriptor Type: "<<(int)epdesc->bDescriptorType<<endl; 
    cout<<"EP Address: "<<(int)epdesc->bEndpointAddress<<endl; 
} 

epdescがlibusb_endpoint_descriptorで、interdescがlibusb_interface_descriptorです。 ($は端末エントリ・ポイントを表して)あなたは、デバイスを主張した後

8

、これを実行します。

16c0
$ sudo lsusb -v -d 16c0:05df 

:05dfは、コロンで区切られたベンダーと製品IDです。 (あなたがこれらのタイプのlsusbがを知っているし、lsusbがを抜いて再実行することにより、あなた次第ですどのデバイス把握していない場合)

あなたが混乱し、使用を取得する場合lsusbがのmanページ:

http://linux.die.net/man/8/lsusb

はその後説明が表示されたら、bEndpointAddressというラベルの付いた行を探し、続く16進コードがその特定のレポートのエンドポイントになります。

関連する問題