11

USBデバイスのOUTまたはINエンドポイントを示すbashコマンド、プログラム、またはlibusb関数(見つけられませんでしたが)はありますか?

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

4

2 に答える 2

14

デバイスを要求したら、これを実行します ($ はターミナル エントリ ポイントを表します)。

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

16c0:05df は、コロンで区切られたベンダー ID と製品 ID です。(これらがわからない場合は、lsusb と入力し、プラグを抜いて lsusb を再実行することで、どのデバイスが自分のものであるかを調べます)

混乱した場合は、lsusb の man ページを使用してください。

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

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

于 2013-07-16T15:45:22.757 に答える
8

最終的に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 です。

于 2013-05-08T10:17:25.417 に答える