读取 ESP32-S3 上的鼠标滚轮 USB Host HID

问题描述 投票:0回答:1

我正在测试USB HID主机示例,到目前为止,我已经能够正确读取鼠标数据。但是,我想知道是否有人可以帮助我找到一种获取鼠标滚轮数据的方法。

我感谢您提供的任何指导或建议。谢谢!

致以诚挚的问候。

读取 ESP32 上的鼠标滚轮

usb mouse esp32 hid
1个回答
0
投票

就我而言,我更改了这一行:

ESP_ERROR_CHECK(hid_class_request_set_protocol(hid_device_handle, HID_REPORT_PROTOCOL_BOOT));

对此:

ESP_ERROR_CHECK(hid_class_request_set_protocol(hid_device_handle, HID_REPORT_PROTOCOL_REPORT));

然后我在不使用

hid_mouse_input_report_boot_t
结构的情况下解析了鼠标数据:

typedef struct {
    int8_t button;
    int8_t _unknown;
    int16_t x_displacement;
    int16_t y_displacement;
    int8_t wheel;
} mouse_data;

static void hid_host_mouse_report_callback(const uint8_t *const data, const int length)
{
    if (length != 7) {
        return;
    }

    hid_print_new_device_report_header(HID_PROTOCOL_MOUSE);

    mouse_data *mdata = (mouse_data *) data;

    printf("X: %04d Y: %04d W: %04d |%c|%c|%c|%c --",
           mdata->x_displacement, mdata->y_displacement, mdata->wheel,
           (mdata->button == 0x1 || mdata->button == 0x3 ? 'o' : ' '),
           (mdata->button == 0x4 ? 'o' : ' '),
           (mdata->button == 0x2 || mdata->button == 0x3 ? 'o' : ' '),
           (mdata->button == 0x10 ? 'B' : mdata->button == 0x8 ? 'F' : ' '));

    printf("Raw Value(%d): ", length);
    for (int i = 0; i < length; i++) {
        printf("0x%X ", (unsigned int)data[i]);
    }
    printf("\r");

    fflush(stdout);
}

您可能需要使用wireshark来找到适合您的鼠标的

mouse_data
结构。

© www.soinside.com 2019 - 2024. All rights reserved.