2011-01-27 38 views
3

私はlibusb(libusb-1.0)を使って制御メッセージを送信し、そのデバイスから応答を受け取ることにしました。libusbの基本的な例があります

しかし、私は常に(「sudoを」を使用して、それを実行していても)私のコードからエラーの以下の束を受け取る:

USB error: could not set config 0: Device or resource busy 
set configuration: failed 
Check that you have permissions to write to 007/012 and, if you don't, that you set up hotplug (http://linux-hotplug.sourceforge.net/) correctly. 
USB error: could not claim interface 0: Device or resource busy 
claim interface: failed 
USB error: error submitting URB: No such file or directory 
bulk writing: failed 
USB error: error submitting URB: No such file or directory 
bulk reading: failed 
response was: 

コードは次のとおりです。

コードと間違って何
usb_dev_handle* find_device(); 

int 
main (int argc, char *argv[]) 
{ 
    usb_dev_handle* udev; 
    int status; 
    char request[] = "K1"; // 'ping' command used to check communication 
    char response[256]; 

    udev = find_device(); 
    // udev is successfully found here 

    status = usb_set_configuration (udev, 0); 
    printf ("set configuration: %s\n", status ? "failed" : "passed"); 

    status = usb_claim_interface (udev, 0); 
    printf ("claim interface: %s\n", status ? "failed" : "passed"); 

    status = usb_bulk_write (udev, 3, request, sizeof (request), 500); 
    printf ("bulk writing: %s\n", status ? "failed" : "passed"); 

    status = usb_bulk_read (udev, 2, response, sizeof (response), 500); 
    printf ("bulk reading: %s\n", status ? "failed" : "passed"); 

    printf ("response was: %s\n", response); 

    usb_close (udev); 

    return 0; 
} 

?どのように修正することができますか?

OS:Ubuntuの10.10

+0

あなたのデバイスから読み書きすることができましたか?投稿できるコードに大きな変更がありましたか? – RunHolt

答えて

3

は、あなたが(開く必要はありません)デバイスあなたは、その構成を設定し、それを主張する前に?私は、同じOS上でこの問題に直面し、以下の方法で解決することができたしていたとして、この質問に答える

9

ダウンロードして、最新のlibusbソースコード1.0.8をコンパイルします。ベンダーIDと製品を取得するには

static struct libusb_device_handle *devh = NULL; 
uint16_t vendor_id; 
uint16_t product_id; 

:上記の例では、変数の

libusb_init(NULL); 
libusb_open_device_with_vid_pid(NULL, vendor_id, product_id); 
libusb_detach_kernel_driver(devh, 0); 
libusb_claim_interface(devh, 0); 
libusb_close(devh); 
libusb_exit(NULL); 

は説明:次の

は、いくつかのAPIは、私はUSBインターフェイス0を請求するために使用されることを呼び出していますIDの場合、次のコマンドを実行することができます(例:デバイス情報)

$ lsusb
...
バス001デバイス013:ID 0930:6544東芝キングストンデータトラベラー2.0スティック(2GB)
...

太字のコロンで区切られた文字列は、それぞれのベンダおよび製品IDが含まれてい。

/binに/ bashのlibtoolを--silent --tag = CC --mode =リンク:私は私のコードをコンパイルするには、次のコマンドを使用

:どのようにコードをコンパイルするために

G ++ -Wall -Wundef -Wunused -Wshadow -D_DEBUG -I ../のlibusb -g -O2 -o read.cpp ../libusb/libusb-1.0.la -lusbを-1.0読み-lrt

をコピーlibtoolを抽出したlibusb-1.0.8ディレクトリからコンパイル領域にコピーします。

これが役に立ちます。

関連する問題