Hello,
I have made a PCB has 4 buttons and touchpad, now I want to drive all of them.
1. one button for left button of mouse.
2. one button for right button of mouse.
3. one button for copy compose key(CTRL + C) of keyboard.
4. the last button for paste compose key (CTRL + V) of keyboard.
5. touchpad
So I make a report descriptor to mix all of them, this report descriptor is total 615 bytes. I show it in the end.
However, it couldn't run. I tracked that it returned an error code [12] after executing ble_hids_init();
So is it the report descriptor is too bit to cause the above problems? And what should I do to solve this problems?
Thanks!
#define APP_USBD_HID_DEVICE_REPORT_DSC() { \
/** TOUCH PAD input TLC +8 */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizers) */ \
0x09, 0x05, /** USAGE (Touch Pad) */ \
0xa1, 0x01, /** COLLECTION (Application) */ \
0x85, REPORT_ID_PTP, /** REPORT_ID (Touch pad) */ \
\
/** 1st finger 73 */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizers) */ \
0x09, 0x22, /** USAGE (Finger) */ \
0xa1, 0x02, /** COLLECTION (Logical) */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x25, 0x01, /** LOGICAL_MAXIMUM (1) */ \
0x09, 0x47, /** USAGE (Confidence) */ \
0x09, 0x42, /** USAGE (Tip switch) */ \
0x95, 0x02, /** REPORT_COUNT (2) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x75, 0x02, /** REPORT_SIZE (3) */ \
0x25, 0x02, /** LOGICAL_MAXIMUM (2) */ \
0x09, 0x51, /** USAGE (Contact Identifier) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x95, 0x04, /** REPORT_COUNT (3) */ \
0x81, 0x03, /** INPUT (Cnst,Var,Abs) */ \
0x05, 0x01, /** USAGE_PAGE (Generic Desk.. */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0x13, 0x0f, /** LOGICAL_MAXIMUM (4095) //3859 */ \
0x75, 0x10, /** REPORT_SIZE (16) */ \
0x55, 0x0e, /** UNIT_EXPONENT (-2) */ \
0x65, 0x13, /** UNIT(Inch,EngLinear) */ \
0x09, 0x30, /** USAGE (X) */ \
0x35, 0x00, /** PHYSICAL_MINIMUM (0) */ \
0x46, 0xad, 0x01, /** PHYSICAL_MAXIMUM (429,4.29inch) 800=0x0320 */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x46, 0xD8, 0x00, /** PHYSICAL_MAXIMUM (216,2.16inch) 0x0226 */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0xe3, 0x07, /** LOGICAL_MAXIMUM (2019) */ \
0x09, 0x31, /** USAGE (Y) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0xc0, /** END_COLLECTION */ \
\
/** 2nd 73 */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizers) */ \
0x09, 0x22, /** USAGE (Finger) */ \
0xa1, 0x02, /** COLLECTION (Logical) */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x25, 0x01, /** LOGICAL_MAXIMUM (1) */ \
0x09, 0x47, /** USAGE (Confidence) */ \
0x09, 0x42, /** USAGE (Tip switch) */ \
0x95, 0x02, /** REPORT_COUNT (2) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x75, 0x02, /** REPORT_SIZE (3) */ \
0x25, 0x02, /** LOGICAL_MAXIMUM (2) */ \
0x09, 0x51, /** USAGE (Contact Identifier) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x95, 0x04, /** REPORT_COUNT (3) */ \
0x81, 0x03, /** INPUT (Cnst,Var,Abs) */ \
0x05, 0x01, /** USAGE_PAGE (Generic Desk.. */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0x13, 0x0f, /** LOGICAL_MAXIMUM (4095) */ \
0x75, 0x10, /** REPORT_SIZE (16) */ \
0x55, 0x0e, /** UNIT_EXPONENT (-2) */ \
0x65, 0x13, /** UNIT(Inch,EngLinear) */ \
0x09, 0x30, /** USAGE (X) */ \
0x35, 0x00, /** PHYSICAL_MINIMUM (0) */ \
0x46, 0xad, 0x01, /** PHYSICAL_MAXIMUM (429,4.29inch) 800=0x0320 */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x46, 0xD8, 0x00, /** PHYSICAL_MAXIMUM (216,2.16inch) 0x0226 */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0xa0, 0x07, /** LOGICAL_MAXIMUM (1952) */ \
0x09, 0x31, /** USAGE (Y) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0xc0, /** END_COLLECTION */ \
\
/** 3 73 */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizers) */ \
0x09, 0x22, /** USAGE (Finger) */ \
0xa1, 0x02, /** COLLECTION (Logical) */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x25, 0x01, /** LOGICAL_MAXIMUM (1) */ \
0x09, 0x47, /** USAGE (Confidence) */ \
0x09, 0x42, /** USAGE (Tip switch) */ \
0x95, 0x02, /** REPORT_COUNT (2) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x75, 0x02, /** REPORT_SIZE (3) */ \
0x25, 0x02, /** LOGICAL_MAXIMUM (2) */ \
0x09, 0x51, /** USAGE (Contact Identifier) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x95, 0x04, /** REPORT_COUNT (3) */ \
0x81, 0x03, /** INPUT (Cnst,Var,Abs) */ \
0x05, 0x01, /** USAGE_PAGE (Generic Desk.. */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0x13, 0x0f, /** LOGICAL_MAXIMUM (4095) */ \
0x75, 0x10, /** REPORT_SIZE (16) */ \
0x55, 0x0e, /** UNIT_EXPONENT (-2) */ \
0x65, 0x13, /** UNIT(Inch,EngLinear) */ \
0x09, 0x30, /** USAGE (X) */ \
0x35, 0x00, /** PHYSICAL_MINIMUM (0) */ \
0x46, 0xad, 0x01, /** PHYSICAL_MAXIMUM (429,4.29inch) 800=0x0320 */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x46, 0xD8, 0x00, /** PHYSICAL_MAXIMUM (216,2.16inch) 0x0226 */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0xa0, 0x07, /** LOGICAL_MAXIMUM (1952) */ \
0x09, 0x31, /** USAGE (Y) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0xc0, /** END_COLLECTION */ \
\
/** 4 73 */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizers) */ \
0x09, 0x22, /** USAGE (Finger) */ \
0xa1, 0x02, /** COLLECTION (Logical) */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x25, 0x01, /** LOGICAL_MAXIMUM (1) */ \
0x09, 0x47, /** USAGE (Confidence) */ \
0x09, 0x42, /** USAGE (Tip switch) */ \
0x95, 0x02, /** REPORT_COUNT (2) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x75, 0x02, /** REPORT_SIZE (3) */ \
0x25, 0x02, /** LOGICAL_MAXIMUM (2) */ \
0x09, 0x51, /** USAGE (Contact Identifier) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x95, 0x04, /** REPORT_COUNT (3) */ \
0x81, 0x03, /** INPUT (Cnst,Var,Abs) */ \
0x05, 0x01, /** USAGE_PAGE (Generic Desk.. */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0x13, 0x0f, /** LOGICAL_MAXIMUM (4095) */ \
0x75, 0x10, /** REPORT_SIZE (16) */ \
0x55, 0x0e, /** UNIT_EXPONENT (-2) */ \
0x65, 0x13, /** UNIT(Inch,EngLinear) */ \
0x09, 0x30, /** USAGE (X) */ \
0x35, 0x00, /** PHYSICAL_MINIMUM (0) */ \
0x46, 0xad, 0x01, /** PHYSICAL_MAXIMUM (429,4.29inch) 800=0x0320 */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x46, 0xD8, 0x00, /** PHYSICAL_MAXIMUM (216,2.16inch) 0x0226 */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0xa0, 0x07, /** LOGICAL_MAXIMUM (1952) */ \
0x09, 0x31, /** USAGE (Y) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0xc0, /** END_COLLECTION */ \
\
/** 5 73 */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizers) */ \
0x09, 0x22, /** USAGE (Finger) */ \
0xa1, 0x02, /** COLLECTION (Logical) */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x25, 0x01, /** LOGICAL_MAXIMUM (1) */ \
0x09, 0x47, /** USAGE (Confidence) */ \
0x09, 0x42, /** USAGE (Tip switch) */ \
0x95, 0x02, /** REPORT_COUNT (2) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x75, 0x02, /** REPORT_SIZE (3) */ \
0x25, 0x02, /** LOGICAL_MAXIMUM (2) */ \
0x09, 0x51, /** USAGE (Contact Identifier) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x95, 0x04, /** REPORT_COUNT (3) */ \
0x81, 0x03, /** INPUT (Cnst,Var,Abs) */ \
0x05, 0x01, /** USAGE_PAGE (Generic Desk.. */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0x13, 0x0f, /** LOGICAL_MAXIMUM (4095) */ \
0x75, 0x10, /** REPORT_SIZE (16) */ \
0x55, 0x0e, /** UNIT_EXPONENT (-2) */ \
0x65, 0x13, /** UNIT(Inch,EngLinear) */ \
0x09, 0x30, /** USAGE (X) */ \
0x35, 0x00, /** PHYSICAL_MINIMUM (0) */ \
0x46, 0xad, 0x01, /** PHYSICAL_MAXIMUM (429,4.29inch) 800=0x0320 */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x46, 0xD8, 0x00, /** PHYSICAL_MAXIMUM (216,2.16inch) 0x0226 */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0xa0, 0x07, /** LOGICAL_MAXIMUM (1952) */ \
0x09, 0x31, /** USAGE (Y) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0xc0, /** END_COLLECTION */ \
\
/** scan time& buttons. end input. +57 */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizers) */ \
0x55, 0x0C, /** UNIT_EXPONENT (-4) */ \
0x66, 0x01, 0x10, /** UNIT (Seconds) */ \
0x47, 0xff, 0xff, 0x00, 0x00, /** PHYSICAL_MAXIMUM (65535) */ \
0x27, 0xff, 0xff, 0x00, 0x00, /** LOGICAL_MAXIMUM (65535) */ \
0x75, 0x10, /** REPORT_SIZE (16) */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizers) */ \
0x09, 0x56, /** USAGE (Scan Time) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x09, 0x54, /** USAGE (Contact count) */ \
0x25, 0x7f, /** LOGICAL_MAXIMUM (127) */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0x75, 0x08, /** REPORT_SIZE (8) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x05, 0x09, /** USAGE_PAGE (Button) */ \
0x09, 0x01, /** USAGE_(Button 1) */ \
0x09, 0x02, /** USAGE_(Button 2) */ \
0x09, 0x03, /** USAGE_(Button 3) */ \
0x25, 0x01, /** LOGICAL_MAXIMUM (1) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x95, 0x03, /** REPORT_COUNT (3) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x95, 0x05, /** REPORT_COUNT (5) */ \
0x81, 0x03, /** INPUT (Cnst,Var,Abs) */ \
\
/** PTPHQA. Feature reprot. +36 */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizer) */ \
0x85, REPORT_ID_CONTACT_NUM, /** REPORT_ID (Feature) */ \
0x09, 0x55, /** USAGE (Contact Count Maximum) */ \
0x09, 0x59, /** USAGE (Pad TYpe) */ \
0x75, 0x04, /** REPORT_SIZE (4) */ \
0x95, 0x02, /** REPORT_COUNT (2) */ \
0x25, 0x0f, /** LOGICAL_MAXIMUM (15) */ \
0xb1, 0x02, /** FEATURE (Data,Var,Abs) */ \
0x06, 0x00, 0xff, /** USAGE_PAGE (Vendor Defined) */ \
0x85, REPORT_ID_PTPHQA, /** REPORT_ID (PTPHQA) */ \
0x09, 0xC5, /** USAGE (Vendor Usage 0xC5) */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x26, 0xff, 0x00, /** LOGICAL_MAXIMUM (0xff) */ \
0x75, 0x08, /** REPORT_SIZE (8) */ \
0x96, 0x00, 0x01, /** REPORT_COUNT (0x100 (256)) */ \
0xb1, 0x02, /** FEATURE (Data,Var,Abs) */ \
0xc0, /** END_COLLECTION */ \
\
/** CONFIG TLC +49 */ \
0x05, 0x0d, /** USAGE_PAGE (Digitizer) */ \
0x09, 0x0E, /** USAGE (Configuration) */ \
0xa1, 0x01, /** COLLECTION (Application) */ \
0x85, REPORT_ID_CONFIG, /** REPORT_ID (Feature) from host to device. 3:touchpad. 0:mouse. */ \
0x09, 0x22, /** USAGE (Finger) */ \
0xa1, 0x02, /** COLLECTION (logical) */ \
0x09, 0x52, /** USAGE (Input Mode) */ \
0x15, 0x00, /** LOGICAL_MINIMUM (0) */ \
0x25, 0x0a, /** LOGICAL_MAXIMUM (10) */ \
0x75, 0x08, /** REPORT_SIZE (8) */ \
0x95, 0x01, /** REPORT_COUNT (1) */ \
0xb1, 0x02, /** FEATURE (Data,Var,Abs */ \
0xc0, /** END_COLLECTION */ \
0x09, 0x22, /** USAGE (Finger) */ \
0xa1, 0x00, /** COLLECTION (physical) */ \
0x85, REPORT_ID_SWITCH, /** REPORT_ID (Feature) */ \
0x09, 0x57, /** USAGE(Surface switch) */ \
0x09, 0x58, /** USAGE(Button switch) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x95, 0x02, /** REPORT_COUNT (2) */ \
0x25, 0x01, /** LOGICAL_MAXIMUM (1) */ \
0xb1, 0x02, /** FEATURE (Data,Var,Abs) */ \
0x95, 0x06, /** REPORT_COUNT (6) */ \
0xb1, 0x03, /** FEATURE (Cnst,Var,Abs) */ \
0xc0, /** END_COLLECTION */ \
0xc0, /** END_COLLECTION */ \
\
/** MOUSE TLC-------------48. */ \
0x05, 0x01, /** USAGE_PAGE (Generic Desktop) */ \
0x09, 0x02, /** USAGE (Mouse) */ \
0xa1, 0x01, /** COLLECTION (Application) */ \
0x85, REPORT_ID_MOUSE, /** REPORT_ID (Mouse) */ \
0x09, 0x01, /** USAGE (Pointer) */ \
0xa1, 0x00, /** COLLECTION (Physical) */ \
0x05, 0x09, /** USAGE_PAGE (Button) */ \
0x19, 0x01, /** USAGE_MINIMUM (Button 1) */ \
0x29, 0x05, /** USAGE_MAXIMUM (Button 2) */ \
0x25, 0x01, /** LOGICAL_MAXIMUM (1) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x95, 0x05, /** REPORT_COUNT (5) */ \
0x81, 0x02, /** INPUT (Data,Var,Abs) */ \
0x75, 0x01, /** REPORT_SIZE (1) */ \
0x95, 0x03, /** REPORT_COUNT (3) */ \
0x81, 0x03, /** INPUT (Data,Var,Abs) */ \
0x05, 0x01, /** USAGE_PAGE (Generic Desktop) */ \
0x09, 0x30, /** USAGE (X) */ \
0x09, 0x31, /** USAGE (Y) */ \
0x75, 0x10, /** REPORT_SIZE (16) */ \
0x95, 0x02, /** REPORT_COUNT (2) */ \
0x25, 0x0a, /** LOGICAL_MAXIMUM (10) */ \
0x81, 0x06, /** INPUT (Data,Var,Rel) */ \
0xc0, /** END_COLLECTION */ \
0xc0, /** END_COLLECTION */ \
\
/** ---------FOR KEYBOARD----52 */ \
/* USAGE_PAGE */ 0x05u, 0x01u, \
/* USAGE */ 0x09u, 0x06u, \
/* COLLECTION */ 0xA1u, 0x01u, \
/* REPORT_ID */ 0x85u, REPORT_ID_KEYBOARD, \
/* USAGE_PAGE */ 0x05u, 0x07u, \
/* USAGE_MINIMUM */ 0x19u, 0xE0u, \
/* USAGE_MAXIMUM */ 0x29u, 0xE7u, \
/* LOGICAL_MINIMUM */ 0x15u, 0x00u, \
/* LOGICAL_MAXIMUM */ 0x25u, 0x01u, \
/* REPORT_SIZE */ 0x75u, 0x01u, \
/* REPORT_COUNT */ 0x95u, 0x08u, \
/* INPUT */ 0x81u, 0x02u, \
/* USAGE_PAGE */ 0x06u, 0x00u, 0xFFu, \
/* USAGE */ 0x09u, 0x02u, \
/* REPORT_SIZE */ 0x75u, 0x08u, \
/* REPORT_COUNT */ 0x95u, 0x01u, \
/* INPUT */ 0x81u, 0x02u, \
/* USAGE_PAGE */ 0x05u, 0x07u, \
/* USAGE_MINIMUM */ 0x19u, 0x00u, \
/* USAGE_MAXIMUM */ 0x29u, 0x7Fu, \
/* LOGICAL_MINIMUM */ 0x15u, 0x00u, \
/* LOGICAL_MAXIMUM */ 0x25u, 0x7Fu, \
/* REPORT_SIZE */ 0x75u, 0x08u, \
/* REPORT_COUNT */ 0x95u, 0x05u, \
/* INPUT */ 0x81u, 0x00u, \
/* END_COLLECTION */ 0xC0u \
}