cancel
Showing results for 
Search instead for 
Did you mean: 

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

SP.6
Associate II

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

2 REPLIES 2
Pavel A.
Evangelist III

Error in line 24.

> 0x75, 0x016,

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

-- pa

SP.6
Associate II

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.