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 \ }