It’s pain to get absolute mouse working. Finally i got it work on Primary display. For Second display i tried many different PHYSICAL_MAXIMUM values but none of them worked.
From my previous post i understood, mouhid nomalizes X, Y to range 0->65535 using equation (XYdata * 65535)/PHYSICAL_MAX.
Is it simply not possible for absolute mouse to send data on second display? Has anyone being able to do it?
Appreciate any help.
I’m using following code to nomalize X, Y before sending in report.
iX = (INT) ((iX * 32767) / GetSystemMetrics(SM_CXSCREEN));
iY = (INT) ((iY * 32767) / GetSystemMetrics(SM_CYSCREEN));
0x05, 0x0D, // USAGE_PAGE (Digitizers)
0x09, 0x02, // USAGE (Pen)
0xA1, 0x01, // COLLECTION (Application)
0x85, REPORTID_TABLETPC, // REPORT_ID (REPORTID_TABLETPC)
0x09, 0x02, // USAGE (Pen)
0xA1, 0x00, // COLLECTION (Physical)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0xFF, 0x7F, // PHYSICAL_MAXIMUM (32767)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xFF, 0x7F, // LOGICAL_MAXIMUM (32767)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x05, 0x0D, // USAGE_PAGE (Digitizers)
0x09, 0x42, // USAGE (Tip Switch)
0x09, 0x44, // USAGE (Barrel Switch)
0x09, 0x3C, // USAGE (Invert)
0x09, 0x45, // USAGE (Eraser)
0x09, 0x32, // USAGE (In Range)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x05, // REPORT_COUNT (5)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x75, 0x03, // REPORT_SIZE (3 bits padding)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x75, 0x10, // REPORT_SIZE (16 bits padding)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0xC0, // END_COLLECTION
0xC0 // END_COLLECTION