Skip to main content
Associate II
February 20, 2025
Question

How to change relative to absolute USB mouse for STM32?

  • February 20, 2025
  • 4 replies
  • 1034 views

Hello,
I am making a project for myself on the STM32F405 control board KVM.
This board receives data to the HOST from the mouse (this part works). Next, the MCU generates absolute coordinates. These coordinates (absolute) must be transmitted via USB to the KVM. 
But they are not transmitted. 
I changed HID descriptor to pass absolute mouse coordinates, but the data is not passed (for relative - the data is passed).

Please tell me what else needs to be changed in the USB device configuration (PID?) to transmit absolute coordinates (I couldn’t find a solution on the Internet)?
I would be grateful for any answer.

4 replies

Technical Moderator
February 20, 2025

Hi @ok_pp 

Check your HID mouse report descriptor 

 

 

__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, 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) */
 0x95, 0x01, /* Report Count (1) */
 0x75, 0x05, /* Report Size (5) */
 0x81, 0x01, /* Input (Const,Array,Abs) */
 0x05, 0x01, /* Usage Page (Generic Desktop Ctrls) */
 0x09, 0x30, /* Usage (X) */
 0x09, 0x31, /* Usage (Y) */
 0x09, 0x38, /* Usage (Wheel) */
#ifdef ABSOLUTE_MOUSE_MODE
 0x15, 0x01, // LOGICAL_MINIMUM (1) <<<< This allows us to talk to any display resolution
 0x25, 0x64, // LOGICAL_MAXIMUM (100) 
 0x75, 0x08, // REPORT_SIZE (8)
 0x95, 0x03, // REPORT_COUNT (3)
 0x81, 0x02, // INPUT (Data,Var,Abs) This should allow to move to absolute positions
#else
 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) */
#endif
 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,NoWrp) */
 0x75, 0x06, /* Report Size (6) */
 0x95, 0x01, /* Report Count (1) */
 0xB1, 0x01, /* Feature (Const,Array,Abs,NoWrp) */
 0xC0 /* End Collection */
};

 

 

To give better visibility on the answered topics, please click on "Best answer" on the reply which solved your issue or answered your question.Best regards,FBL
ok_ppAuthor
Associate II
February 21, 2025

Hi, @FBL 

Thank you very much for your quick and helpful reply. Your report descriptor is working.

But I want to be able to access the entire screen area.
I tried to increase the coordinate resolution, and the data stopped being transmitted.
............
#ifdef ABSOLUTE_MOUSE_MODE
#define HID_MOUSE_REPORT_DESC_SIZE 76U
#else
............

#ifdef ABSOLUTE_MOUSE_MODE
// 0x15, 0x01, // LOGICAL_MINIMUM (1) <<<< This allows us to talk to any display resolution
0x16, 0x00, 0x80, // LOGICAL_MINIMUM (-32768)

//0x25, 0x64, // LOGICAL_MAXIMUM (100)
0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767)

// 0x75, 0x08, // REPORT_SIZE (8)
0x75, 0x10, // REPORT_SIZE (16)

0x95, 0x03, // REPORT_COUNT (3)
0x81, 0x02, // INPUT (Data,Var,Abs) This should allow to move to absolute positions //50
#else
............
Is it possible to achieve the desired result?

ok_ppAuthor
Associate II
February 24, 2025

There is no chance of this being realized?

Technical Moderator
March 3, 2025

Hi @ok_pp 

I suggest starting a new thread about this. I don't have direct answer, maybe I need to ask our experts.

To give better visibility on the answered topics, please click on "Best answer" on the reply which solved your issue or answered your question.Best regards,FBL
ok_ppAuthor
Associate II
March 4, 2025

Hi, @FBL 

Thank you.