【问题标题】:How do I receive HID reports using libusb-1.0?如何使用 libusb-1.0 接收 HID 报告?
【发布时间】:2011-01-30 18:33:26
【问题描述】:

我有一个 USB HID 秤,需要从中获取称重报告。我可以通过从/dev/hidraw# 一次读取 7 个字节在 Linux 上执行此操作,但我想使用 libusb-1.0 获得相同的信息。

即使我确实得到了一些非空字节,我也会得到错误 -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]);
    }

【问题讨论】:

    标签: c usb hid libusb libusb-1.0


    【解决方案1】:

    使用 libusb-win 从 USB HID 读卡器读取的示例 -

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

    【讨论】:

    • 谢谢!这似乎做到了。
    【解决方案2】:

    HID 使用中断传输 AFAIK。您需要重写代码才能使用这些。并查看 thouse 描述符 - 它们会告诉您使用哪个接口。

    也就是说,我认为在 this 的情况下使用 /dev/hdiraw​​# 然后 libusb 更容易。

    【讨论】:

      【解决方案3】:

      尝试为wValue 使用另一个值(例如0x0300)。

      还要检查bmRequestTypebRequest 参数:bmRequestType 必须等于0xA1bRequest0x01

      【讨论】:

        猜你喜欢
        • 2021-04-26
        • 2015-08-28
        • 2021-03-30
        • 2011-11-10
        • 1970-01-01
        • 2016-07-14
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多