2011-01-30 7 views
2

私は、計量レポートを取り出すために必要なUSB HIDスケールを持っています。 Linuxでこれを行うには、/dev/hidraw#から一度に7バイトを読み込むことができますが、libusb-1.0を使用して同じ情報を取得したいと考えています。私はいくつかの非NULLバイトを得る行うときlibusb-1.0を使用してHIDレポートを受信するにはどうすればよいですか?

はさえ、私はエラーを取得-9:

#define WEIGH_REPORT_SIZE 7 

    /* 
    * Open a handle to the found scale 
    */ 
    libusb_open(dev, &handle); 
#ifdef __linux__ 
    libusb_detach_kernel_driver(handle, 0); 
#endif 
    libusb_claim_interface(handle, 0); 

    /* 
    * Try to transfer data about status 
    * 
    */ 
    unsigned char data[WEIGH_REPORT_SIZE]; 
    unsigned int len = libusb_control_transfer(
     handle, 
     LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | 
      LIBUSB_RECIPIENT_INTERFACE, 
     HID_REPORT_GET, 
     //wValue => hid report, no report ID 
     0x0100, 
     0x00, //windex => interface 0 
     data, 
     WEIGH_REPORT_SIZE, //wLength 
     10000 //timeout => 10 sec 
     ); 
    int i; 
    printf("Got %d bytes from control transfer:\n", len); 
    for(i = 0; i < WEIGH_REPORT_SIZE; i++) { 
     printf("%x\n", data[i]); 
    } 

答えて

1

HID私の知る限りインタラプト転送を使用しています:LIBUSB_ERROR_PIPE

私はそうは次のようにコントロール転送を使用しようとしています。これらを使用するには、コードを書き直す必要があります。そして、あなたの記述子を見てください - 彼らはどのインタフェースを使用するかを教えてくれます。

私はその/ dev/hdiraw​​#libusbをケースで使用するほうがずっと簡単だと言いました。

1

(例えば、0x0300)をwValueために別の値を使用してみてください。 bmRequestType0xA1に等しくなければなりません、bRequest0x01

またbmRequestTypebRequestパラメータを確認してください。

関連する問題