USBデバイスのOUTまたはINエンドポイントを示すbashコマンド、プログラム、またはlibusb関数(見つけられませんでしたが)はありますか?
たとえば、libusb_interface_descriptor (libusb1.0 ライブラリから) の bNumEndpoints は、USB ドライブに 3 つのエンドポイントがあることを示していますが、それらの idnumber を知るにはどうすればよいでしょうか?
デバイスを要求したら、これを実行します ($ はターミナル エントリ ポイントを表します)。
$ sudo lsusb -v -d 16c0:05df
16c0:05df は、コロンで区切られたベンダー ID と製品 ID です。(これらがわからない場合は、lsusb と入力し、プラグを抜いて lsusb を再実行することで、どのデバイスが自分のものであるかを調べます)
混乱した場合は、lsusb の man ページを使用してください。
http://linux.die.net/man/8/lsusb
次に、説明が表示されたら、bEndpointAddress というラベルの付いた行を見つけます。次の 16 進コードは、その特定のレポートのエンドポイントになります。
最終的にlubusb-1.0で答えを見つけました。In は実際には関数ではなく、構造体フィールドでした:
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 です。