4

計量レポートを取得するために必要なUSBHIDスケールがあります。Linuxでは、から一度に7バイトを読み取ることでこれを行うことができますが、/dev/hidraw#libusb-1.0を使用して同じ情報を取得したいと思います。

null以外のバイトを取得した場合でも、エラー-9が発生します。LIBUSB_ERROR_PIPE

私は次のような制御転送を使用しようとしています:

#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]);
    }
4

3 に答える 3

3

HIDは割り込み転送AFAIKを使用します。これらを使用するには、コードを書き直す必要があります。そして、thouse記述子を見てください-それらはどのインターフェースを使用するかを教えてくれます。

そうは言っても、この場合は/ dev / hdiraw​​#を使用してからlibusbを使用する方がはるかに簡単だと思います。

于 2011-02-04T15:58:39.007 に答える
3

libusb-winを使用してUSBHIDカードリーダーから読み取る例-

http://rowsandcolumns.blogspot.com/2011/02/read-from-magtek-card-swipe-reader-in.html

于 2011-02-05T17:13:45.433 に答える
1

wValue0x0300たとえば)に別の値を使用してみてください。

また、チェックbmRequestTypebRequestパラメータ:は、、—bmRequestTypeと等しくなければなりません。0xA1bRequest0x01

于 2012-02-10T05:44:10.930 に答える