Skip to main content
Visitor II
March 5, 2021
Question

Change the HID USB mouse to x and y have 16 bits

  • March 5, 2021
  • 2 replies
  • 1517 views

Hello,

I'm trying to change the HID report to x and y have more accuracy (If i', not wrong, windows drivers accept this without any proprietary driver).

My HID mouse report in usbd_hid.c is:

__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
{
		0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
		0x09, 0x02, // Usage (Mouse)
		0xA1, 0x01, // Collection (Application)
		0x09, 0x01, // Usage (Pointer)
		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, 0x03, // Report Count (3)
		0x75, 0x01, // Report Size (1)
		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,0x01,0x80, // Logical Minimum (-32767)
		0x26,0xFF,0x7F, // Logical Maximum (32767)
		0x75, 0x016, // Report Size (8)
		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
		0x09, 0x3C, // Usage (Motion Wakeup)
		0x05, 0xFF, // Usage Page (Reserved 0xFF)
		0x09, 0x01, // Usage (0x01)
		0x15, 0x00, // Logical Minimum (0)
		0x25, 0x01, // Logical Maximum (1)
		0x75, 0x01, // Report Size (1)
		0x95, 0x02, // Report Count (2)
		0xB1, 0x22, // Feature (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
		0x75, 0x06, // Report Size (6)
		0x95, 0x01, // Report Count (1)
		0xB1, 0x01, // Feature (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
		0xC0, // End Collection
 
		// 86 bytes
};

i changed the lines:

  • 22
  • 23
  • 24
  • 25

And I changed in usbd_hid:

  • HID_EPIN_SIZE from 4 to 6
  • HID_MOUSE_REPORT_DESC_SIZE from 74 to 84
#define HID_EPIN_ADDR 0x81U
#define HID_EPIN_SIZE 0x06U
 
#define USB_HID_CONFIG_DESC_SIZ 34U
#define USB_HID_DESC_SIZ 9U
#define HID_MOUSE_REPORT_DESC_SIZE 86U
 
#define HID_DESCRIPTOR_TYPE 0x21U
#define HID_REPORT_DESC 0x22U
 
#ifndef HID_HS_BINTERVAL
#define HID_HS_BINTERVAL 0x07U
#endif /* HID_HS_BINTERVAL */
 
#ifndef HID_FS_BINTERVAL
#define HID_FS_BINTERVAL 0x0AU
#endif /* HID_FS_BINTERVAL */
 
#define HID_REQ_SET_PROTOCOL 0x0BU
#define HID_REQ_GET_PROTOCOL 0x03U
 
#define HID_REQ_SET_IDLE 0x0AU
#define HID_REQ_GET_IDLE 0x02U
 
#define HID_REQ_SET_REPORT 0x09U
#define HID_REQ_GET_REPORT 0x01U

When i try to connect to PC I have the following error:

  • The report descriptor was not byte aligned.

I have to change anything else?

Where am I wrong?

Thanks in advance

    This topic has been closed for replies.

    2 replies

    Super User
    March 5, 2021

    Error in line 24.

    > 0x75, 0x016,

    You want probably report size 16 (decimal), count 2

    -- pa

    SP.6Author
    Visitor II
    March 8, 2021

    Hello,

    Thanks for the answered, you're agree.

    Now with this change i don't have the descriptor problem, but the PC didn't recognize my 'mouse'. This descriptor is compatible with HID? Or with this change i will have to develop a driver for windows?

    Thanks in advance.