There is a possibility that it might be a device that is not fully compatible with HID, but I really don't believe that because, in my case, I tested more than six different manufacturers (all simple three-button mice), and only one of them worked. Unless the vast majority of manufacturers have decided to stop using HID, which seems unlikely. I reported three of them so we can better understand them. In my opinion, the issue lies in how the ESP is receiving (or indicating how it should receive) the data—always with 4 BYTES.
ESP32: Scroll does not work (Information is in the last Byte and is not received)
Windows: Everything works normally.
ESP32: Everything works normally.
Windows: Everything works normally.
ESP32: Scroll does not work (Information is in the last Byte and is not received)
Code: Select all
HID Report.
Mouse 1
0x1c, 0x00, 0x10, 0xd0, 0x54, 0x43, 0x8e, 0xd9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x01, 0x01, 0x00, 0x2c, 0x00, 0x80, 0x02, 0x40, 0x00, 0x00, 0x00, 0x03, 0x05, 0x01, 0x09, 0x02,
0xa1, 0x01, 0x09, 0x01, 0xa1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x03, 0x15, 0x00, 0x25, 0x01,
0x95, 0x03, 0x75, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x05, 0x81, 0x01, 0x05, 0x01, 0x09, 0x30,
0x09, 0x31, 0x16, 0x00, 0xf8, 0x26, 0xff, 0x07, 0x75, 0x0c, 0x95, 0x02, 0x81, 0x06, 0x09, 0x38,
0x15, 0x81, 0x25, 0x7f, 0x75, 0x08, 0x95, 0x01, 0x81, 0x06, 0xc0, 0xc0
0x1C, // Unknown (bTag: 0x01, bType: 0x03)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x10, // Unknown (bTag: 0x01, bType: 0x00)
0xD0, // Unknown (bTag: 0x0D, bType: 0x00)
0x54, // Unit Exponent
0x43, 0x8E, 0xD9, 0xFF, 0xFF, // Unknown (bTag: 0x04, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x08, // Usage
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x01, 0x01, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x2C, // Unknown (bTag: 0x02, bType: 0x03)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x80, // Input
0x02, 0x40, 0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x03, 0x05, 0x01, 0x09, 0x02, // Unknown (bTag: 0x00, bType: 0x00)
0xA1, 0x01, // Collection (Application)
0x09, 0x01, // Usage (0x01)
0xA1, 0x00, // Collection (Physical)
0x05, 0x09, // Usage Page (Button)
0x19, 0x01, // Usage Minimum (0x01)
0x29, 0x03, // Usage Maximum (0x03)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x95, 0x03, // Report Count (3)
0x75, 0x01, // Report Size (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x01, // Report Count (1)
0x75, 0x05, // Report Size (5)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x16, 0x00, 0xF8, // Logical Minimum (-2048)
0x26, 0xFF, 0x07, // Logical Maximum (2047)
0x75, 0x0C, // Report Size (12)
0x95, 0x02, // Report Count (2)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x38, // Usage (Wheel)
0x15, 0x81, // Logical Minimum (-127)
0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8)
0x95, 0x01, // Report Count (1)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xC0, // End Collection
Mouse 2
0x1c, 0x00, 0x20, 0xd9, 0xed, 0x3c, 0x8e, 0xd9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x01, 0x01, 0x00, 0x2d, 0x00, 0x80, 0x02, 0x34, 0x00, 0x00, 0x00, 0x03, 0x05, 0x01, 0x09, 0x02,
0xa1, 0x01, 0x09, 0x01, 0xa1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x05, 0x15, 0x00, 0x25, 0x01,
0x95, 0x05, 0x75, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x03, 0x81, 0x01, 0x05, 0x01, 0x09, 0x30,
0x09, 0x31, 0x09, 0x38, 0x15, 0x81, 0x25, 0x7f, 0x75, 0x08, 0x95, 0x03, 0x81, 0x06, 0xc0, 0xc0
0x1C, // Unknown (bTag: 0x01, bType: 0x03)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x20, // Unknown (bTag: 0x02, bType: 0x00)
0xD9, 0xED, // Unknown (bTag: 0x0D, bType: 0x02)
0x3C, // Unknown (bTag: 0x03, bType: 0x03)
0x8E, 0xD9, 0xFF, // Unknown (bTag: 0x08, bType: 0x03)
0xFF, 0x00, 0x00, 0x00, 0x00, // Unknown (bTag: 0x0F, bType: 0x03)
0x08, // Usage
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x01, 0x01, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x2D, 0x00, // Unknown (bTag: 0x02, bType: 0x03)
0x80, // Input
0x02, 0x34, 0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x03, 0x05, 0x01, 0x09, 0x02, // Unknown (bTag: 0x00, bType: 0x00)
0xA1, 0x01, // Collection (Application)
0x09, 0x01, // Usage (0x01)
0xA1, 0x00, // Collection (Physical)
0x05, 0x09, // Usage Page (Button)
0x19, 0x01, // Usage Minimum (0x01)
0x29, 0x05, // Usage Maximum (0x05)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x95, 0x05, // Report Count (5)
0x75, 0x01, // Report Size (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x01, // Report Count (1)
0x75, 0x03, // Report Size (3)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x09, 0x38, // Usage (Wheel)
0x15, 0x81, // Logical Minimum (-127)
0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8)
0x95, 0x03, // Report Count (3)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xC0, // End Collection
Mouse 3
0x1c, 0x00, 0x60, 0x6a, 0xda, 0x43, 0x8e, 0xd9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x01, 0x01, 0x00, 0x2f, 0x00, 0x80, 0x02, 0x42, 0x00, 0x00, 0x00, 0x03, 0x05, 0x01, 0x09, 0x02,
0xa1, 0x01, 0x85, 0x01, 0x09, 0x01, 0xa1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x03, 0x15, 0x00,
0x25, 0x01, 0x95, 0x03, 0x75, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x05, 0x81, 0x01, 0x05, 0x01,
0x09, 0x30, 0x09, 0x31, 0x16, 0x00, 0xf8, 0x26, 0xff, 0x07, 0x75, 0x0c, 0x95, 0x02, 0x81, 0x06,
0x09, 0x38, 0x15, 0x81, 0x25, 0x7f, 0x75, 0x08, 0x95, 0x01, 0x81, 0x06, 0xc0, 0xc0
0x1C, // Unknown (bTag: 0x01, bType: 0x03)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x60, // Unknown (bTag: 0x06, bType: 0x00)
0x6A, 0xDA, 0x43, // Unknown (bTag: 0x06, bType: 0x02)
0x8E, 0xD9, 0xFF, // Unknown (bTag: 0x08, bType: 0x03)
0xFF, 0x00, 0x00, 0x00, 0x00, // Unknown (bTag: 0x0F, bType: 0x03)
0x08, // Usage
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x01, 0x01, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x2F, 0x00, 0x80, 0x02, 0x42, // Unknown (bTag: 0x02, bType: 0x03)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x00, // Unknown (bTag: 0x00, bType: 0x00)
0x03, 0x05, 0x01, 0x09, 0x02, // Unknown (bTag: 0x00, bType: 0x00)
0xA1, 0x01, // Collection (Application)
0x85, 0x01, // Report ID (1)
0x09, 0x01, // Usage (0x01)
0xA1, 0x00, // Collection (Physical)
0x05, 0x09, // Usage Page (Button)
0x19, 0x01, // Usage Minimum (0x01)
0x29, 0x03, // Usage Maximum (0x03)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x95, 0x03, // Report Count (3)
0x75, 0x01, // Report Size (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x01, // Report Count (1)
0x75, 0x05, // Report Size (5)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x16, 0x00, 0xF8, // Logical Minimum (-2048)
0x26, 0xFF, 0x07, // Logical Maximum (2047)
0x75, 0x0C, // Report Size (12)
0x95, 0x02, // Report Count (2)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x38, // Usage (Wheel)
0x15, 0x81, // Logical Minimum (-127)
0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8)
0x95, 0x01, // Report Count (1)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xC0, // End Collection