This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Sending BLE HID command to open the context menu, descriptor configuration

Hello to all!
I am trying to implement a device that can send keys from the code table 0x07 and a context menu key to the device.
Here is my descriptor:

{
	0x05, 0x01,       // Usage Page (Generic Desktop)
	0x09, 0x06,       // Usage (Keyboard)
	0xA1, 0x01,       // Collection (Application)
		0x95, 0x05,       // Report Count (5)
		0x75, 0x01,       // Report Size (1)
		0x05, 0x08,       // Usage Page (Page# for LEDs)
		0x19, 0x01,       // Usage Minimum (1)
		0x29, 0x05,       // Usage Maximum (5)
		0x91, 0x02,       // Output (Data, Variable, Absolute), Led report
		0x95, 0x01,       // Report Count (1)
		0x75, 0x03,       // Report Size (3)
		0x91, 0x01,       // Output (Data, Variable, Absolute), Led report padding

		0x95, 0x06,       // Report Count (6)
		0x75, 0x08,       // Report Size (8)
		0x15, 0x00,       // Logical Minimum (0)
		0x25, 0xFF,       // Logical Maximum (255)
		0x05, 0x07,       // Usage Page (Key codes)
		0x19, 0x00,       // Usage Minimum (0)
		0x29, 0xFF,       // Usage Maximum (255)
		0x81, 0x00,       // Input (Data, Array) Key array(6 bytes)
	0xC0,              // End Collection (Application)

	0x05, 0x01,         // Usage Page (Desktop),
	0x09, 0x80,         // Usage (Sys Control),
	0xA1, 0x01,         // Collection (Application),
		0x85, 0x01,         // Report ID (1),
		0x19, 0x81,         // Usage Minimum (Sys Power Down),
		0x29, 0x88,         // Usage Maximum (System Menu Exit),
		0x15, 0x00,         // Logical Minimum (0),
		0x25, 0x01,         // Logical Maximum (1),
		0x95, 0x08,         // Report Count (8),
		0x75, 0x01,         // Report Size (1),
		0x81, 0x02,         // Input (Variable),
	0xC0,               // End Collection,
};

The first part of the descriptor consists of 7 bytes,
1st byte for the opposite answer for LEDs, the remaining 6 bytes is a set of keys from the code table 0x07

The second part is 1 byte for sending system commands, in general I need only 1 bit is the context menu. But I decided not to limit myself to this.

Now about sending:
I am using a function from nordic

err_code = ble_hids_inp_rep_send(p_hids,
                                 INPUT_REPORT_KEYS_INDEX,
                                 INPUT_REPORT_KEYS_MAX_LEN,
                                 data,
                                 m_conn_handle);

INPUT_REPORT_KEYS_MAX_LEN = 7
INPUT_REPORT_KEYS_INDEX = 0

I want to send only the context menu key, for this, I pass [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, (1 << 3)] to the data, where (1 << 3) bits the context menu command.
But unfortunately, this does not work. Most likely the error in the descriptor, but I do not have enough experience to understand what the error is. Also, I don’t know how to debug this on the phone side except for Key event viewer

Thanks!

Related