cancel
Showing results for 
Search instead for 
Did you mean: 

The BLE composite HID device failed to enumerate!

hanyang
Associate
 

Hello,

Recently, I have been working with the SensorTile module (STEVAL-STLCS01V1) featuring the STM32L476JG and BlueNRG-MS. I successfully created standalone HID devices for both keyboard and mouse. However, when I attempted to implement a composite HID device, the computer failed to recognize it properly.

I would like to know if BLE supports HID composite devices.

Could you provide some guidance or suggest possible solutions? Thank you!

 

I will paste my hid_report_map below.

 

 

 

 

/* USER CODE BEGIN PV */
#define FEATURE_SUPPORT_MULTIMEDIA_KEYBOARD    1  //composite hid
#define use_mouse   1
#define use_keybord  1

#if FEATURE_SUPPORT_MULTIMEDIA_KEYBOARD
#define HIDS_KB_REPORT_ID                      0x01 //0x01
#define HIDS_MM_KB_REPORT_ID                   0x02
#endif

static uint8_t hid_report_map[] =
{
    
#if use_keybord
	0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x06,                    // USAGE (Keyboard)
    0xa1, 0x01,                    // COLLECTION (Application)
#if FEATURE_SUPPORT_MULTIMEDIA_KEYBOARD      //composite hid
//    0x85, HIDS_KB_REPORT_ID,                    //   REPORT_ID (1)  
#endif
	    0x05, 0x07, // USAGE_PAGE (Keyboard)
        // bitmap of modifiers
        0x75, 0x01,         //   Report Size (1),
        0x95, 0x08,         //   Report Count (8),
        0x19, 0xE0,       //   Usage Minimum (224),
        0x29, 0xE7,       //   Usage Maximum (231),
        0x15, 0x00,       //   Logical Minimum (0),
        0x25, 0x01,       //   Logical Maximum (1),
        0x81, 0x02,       //   Input (Data, Variable, Absolute), ;Modifier byte
 
	
	    // 1 Reserved byte
    0x95, 0x01,  // REPORT_COUNT (1)
    0x75, 0x08, // REPORT_SIZE (8)
    0x81, 0x01, // INPUT (Cnst,Ary,Abs)
	
	    // LEDs for num lock etc
    0x95, 0x05, // REPORT_COUNT (5)
    0x75, 0x01, // REPORT_SIZE (1)
    0x05, 0x08, // USAGE_PAGE (LEDs)

    0x19, 0x01, // USAGE_MINIMUM (Num Lock)
    0x29, 0x05, // USAGE_MAXIMUM (Kana)
    0x91, 0x02, // OUTPUT (Data,Var,Abs)
	
		// Reserved 3 bits
    0x95, 0x01, // REPORT_COUNT (1)
    0x75, 0x03, // REPORT_SIZE (3)
    0x91, 0x03, // OUTPUT (Cnst,Var,Abs)

	    /* Slots for 6 keys that can be pressed down at the same time */
    0x95, 0x06, // REPORT_COUNT (6)
    0x75, 0x08, // REPORT_SIZE (8)
    0x15, 0x00, // LOGICAL_MINIMUM (0)
    0x25, 0x65, // LOGICAL_MAXIMUM (101)
    0x05, 0x07, // USAGE_PAGE (Keyboard)
    0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
    0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
    0x81, 0x00, // INPUT (Data,Ary,Abs)
	
	0xC0, // END_COLLECTION
#endif

#if use_mouse

    0x05, 0x01,   // USAGE_PAGE (Generic Desktop)
    0x09, 0x02,   // USAGE (Mouse)
    0xa1, 0x01,   // COLLECTION (Application)
#if FEATURE_SUPPORT_MULTIMEDIA_KEYBOARD      //composite hid
    0x85, HIDS_MM_KB_REPORT_ID,   //   REPORT_ID (2)
#endif
    0x09, 0x01,   //   USAGE (Pointer) 鼠标指针的控制
    0xa1, 0x00,   //   COLLECTION (Physical)

    0x05, 0x09,   //         Usage Page (Buttons)
    0x19, 0x01,   //         Usage Minimum (1)
    0x29, 0x03,   //         Usage Maximum (3)
    0x15, 0x00,   //         Logical Minimum (0)
    0x25, 0x01,   //         Logical Maximum (1)
    0x95, 0x03,   //         Report Count (3) 
    0x75, 0x01,   //         Report Size (1) 
    0x81, 0x02,   //         Input(Data, Variable, Absolute); 3 button bits
    
	0x95, 0x01,   //         Report Count(1)
    0x75, 0x05,   //         Report Size(5)
    0x81, 0x03,   //         Input(Constant);                 5 bit padding
    
	0x75, 0x08,   //         Report Size (8)
    0x95, 0x03,   //         Report Count (3)
    0x05, 0x01,   //         Usage Page (Generic Desktop)
    0x09, 0x30,   //         Usage (X)
    0x09, 0x31,   //         Usage (Y)
    0x09, 0x38,   //         Usage (Wheel)
    0x15, 0x81,   //         Logical Minimum (-127)
    0x25, 0x7F,   //         Logical Maximum (127)
    0x81, 0x06,   //         Input(Data, Variable, Relative); 3 position bytes (X,Y,Wheel)

    0xc0,         //   END_COLLECTION
      0xc0          // END_COLLECTION

#endif

};

 

 

 

 

 

 

1 REPLY 1
hanyang
Associate

539fcfb9c42c9b899d1372402a8a310.png

This is the packet captured on Wireshark.

I hope it do help.