Skip to main content
Visitor 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.

    This topic has been closed for replies.

    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 */
    };
    

     

     

    ok_ppAuthor
    Visitor 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
    Visitor 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.

    ok_ppAuthor
    Visitor II
    March 4, 2025

    Hi, @FBL 

    Thank you.