私はUbuntu12.10で初めてlibusbv1.0.0を使用することを学んでいます。このAPIの使用方法を理解するために使用している小さなテストコードを次に示します。
#include <libusb-1.0/libusb.h>
...
libusb_device **list;
libusb_get_device_list(ctx, &list); // Returns 11 USB devices which is correct.
for (size_t idx = 0; list[idx] != NULL; idx ++)
{
libusb_device *dev = list[idx];
libusb_device_descriptor desc = {0};
int rc = libusb_get_device_descriptor(dev, &desc);
この時点で、rc == 0であり、正常に完了しているはずです。出典:* libusb_get_device_descriptor()*のドキュメント。
しかし、構造desc
は常に空です。どのフィールドも設定されません。上記の最後の2行をこれに変更すると:
libusb_device_descriptor desc = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int rc = libusb_get_device_descriptor(dev, &desc);
...その後、libusb_get_device_descriptor()
戻ったときに、desc
変更されていないことがわかり、このAPIから期待したものが得られていないことを確認しました。
a.out
また、昇格された特権が必要な場合に備えて、rootとして実行しようとしました。でグーグル検索をすることlibusb_get_device_descriptor
は私をどこにも得ていない。
このコードを試すために実行した関連コマンド:
sudo apt-get install libusb-1.0.0-dev
g++ -ggdb test.cpp -lusb-1.0
./a.out
ああ!クレイジーなユーザーエラー!sharthのコードは私がそれを理解するのを助けました。これが私が実際に使用していたコードです-エラーを見つけることができるかどうかを確認してください:
std::cout << "rc == " << libusb_get_device_descriptor(dev, &desc) << std::endl
<< "vendor == " << desc.idVendor << std::endl;
コンパイラがこれを評価する方法だと思いますが、実際にがdesc.idVendor
呼び出される前に自由に評価できます。libusb_get_device_descriptor()
私の悪い。