Hi Dan,
First of all, thanks for your response. It’s really hard to get someone to exchange ideas regarding this topic.
I can’t publish a diff because my descriptor cannot be sniffed by USBlyzer, as it seems it doesnt capture miniport drivers. I’ll post the two below, but with different read formats.
Semantical they are the same, or at least I can’t find any difference.
3M (without the pointer descriptor, 1 touch ony, as it was not necessary to past the whole 10 parallel contact points, and without vendor defined features):
Usage Page (Digitizer) 05 0D
Usage (Undefined) 09 0E
Collection (Application) A1 01
Report ID (17) 85 11
Usage (Undefined) 09 23
Collection (Logical) A1 02
Usage 09 52
Usage 09 53
Logical Minimum (0) 15 00
Logical Maximum (10) 25 0A
Report Size (8) 75 08
Report Count (2) 95 02
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) B1 02
End Collection C0
End Collection C0
Usage (Touch Screen) 09 04
Collection (Application) A1 01
Report ID (16) 85 10
Usage (Finger) 09 22
Collection (Logical) A1 02
Usage (Tip Switch) 09 42
Logical Minimum (0) 15 00
Logical Maximum (1) 25 01
Report Size (1) 75 01
Report Count (1) 95 01
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Usage (In Range) 09 32
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Usage 09 47
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Report Count (5) 95 05
Input (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 03
Report Size (8) 75 08
Usage 09 51
Report Count (1) 95 01
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Usage Page (Generic Desktop) 05 01
Logical Maximum (32767) 26 FF 7F
Report Size (16) 75 10
Unit Exponent (-2) 55 0E
Unit (Eng Lin: in^3) 65 33
Usage (X) 09 30
Physical Minimum (0) 35 00
Physical Maximum (1594) 46 3A 06
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Usage (Y) 09 31
Physical Maximum (1000) 46 E8 03
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
End Collection C0
Usage Page (Digitizer) 05 0D
Usage 09 54
Report Count (1) 95 01
Report Size (8) 75 08
Logical Minimum (0) 15 00
Logical Maximum (10) 25 0A
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Report ID (18) 85 12
Usage 09 55
Report Count (1) 95 01
Report Size (8) 75 08
Logical Minimum (0) 15 00
Logical Maximum (10) 25 0A
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) B1 02
End Collection C0
My own descriptor in the same conditions as the above (without point, 1 touch only)
0x05, 0x0d, // USAGE_PAGE (Digitizers)
0x09, 0x0E, // USAGE (Configuration)
0xa1, 0x01, // COLLECTION (Application)
0x85, REPORTID_FEATURE, // REPORT_ID (Feature)
0x09, 0x23, // USAGE (Device Settings)
0xa1, 0x02, // COLLECTION (logical)
0x09, 0x52, // USAGE (Device Mode)
0x09, 0x53, // USAGE (Device Index)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x0a, // LOGICAL_MAXIMUM (10)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // REPORT_COUNT (2)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
0x09, 0x04, // USAGE (Touch Screen)
0xa1, 0x01, // COLLECTION (Application)
0x85, REPORTID_TOUCH, // REPORT_ID (Touch)
0x09, 0x22, // USAGE (Finger)
0x05, 0x0d, /* USAGE_PAGE (Digitizers) */ \
0xa1, 0x02, /* COLLECTION (Logical) */ \
0x09, 0x42, /* USAGE (Tip Switch) */ \
0x15, 0x00, /* LOGICAL_MINIMUM (0) */ \
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ \
0x75, 0x01, /* REPORT_SIZE (1) */ \
0x95, 0x01, /* REPORT_COUNT (1) */ \
0x81, 0x02, /* INPUT (Data,Var,Abs) */ \
0x09, 0x32, /* USAGE (In Range) */ \
0x81, 0x02, /* INPUT (Data,Var,Abs) */ \
0x09, 0x47, /* USAGE (Confidence) */ \
0x81, 0x02, /* INPUT (Data,Var,Abs) */ \
0x95, 0x05, /* REPORT_COUNT (5) */ \
0x81, 0x03, /* INPUT (Cnst,Ary,Abs) */ \
0x09, 0x51, /* USAGE (Contact Identifier) */ \
0x75, 0x08, /* REPORT_SIZE (8) */ \
0x95, 0x01, /* REPORT_COUNT (1) */ \
0x81, 0x02, /* INPUT (Data,Var,Abs) */ \
0xa1, 0x00, /* COLLECTION (Physical) */ \
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ \
0x15, 0x00, /* LOGICAL_MINIMUM (0) */ \
0x26, 0x9c, 0x18, /* LOGICAL_MAXIMUM (6300) */ \
0x75, 0x10, /* REPORT_SIZE (16) */ \
0x55, 0x0e, /* UNIT EXPONENT (-2) */ \
0x65, 0x33, /* UNIT (Eng. Lin: in^3) */ \
0x35, 0x00, /* PHYSICAL MINIMUM (0) */ \
0x46, 0xe8, 0x03, /* PHYSICAL MAXIMUM (1594) */ \
0x09, 0x30, /* USAGE (X) */ \
0x81, 0x02, /* INPUT (Data,Var,Abs) */ \
0x09, 0x31, /* USAGE (Y) */ \
0x35, 0x00, /* PHYSICAL MINIMUM (0) */ \
0x46, 0x3a, 0x06, /* PHYSICAL MAXIMUM (1000) */ \
0x81, 0x02, /* INPUT (Data,Var,Abs) */ \
0x45, 0x00, /* PHYSICAL MAXIMUM (reset) */ \
0xc0, /* END_COLLECTION */ \
0xc0, /* END_COLLECTION */ \
0x05, 0x0d, // USAGE_PAGE (Digitizers)
0x09, 0x54, // USAGE (Actual count)
0x25, 0x00, // LOGICAL_MAXIMUM (0)
0x25, 0x0c, // LOGICAL_MAXIMUM (12)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x85, REPORTID_MAX_COUNT, // REPORT_ID (Feature)
0x09, 0x55, // USAGE(Maximum Count)
0x25, 0x00, // LOGICAL_MAXIMUM (0)
0x25, 0x0c, // LOGICAL_MAXIMUM (12)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0xc0, // END_COLLECTION