how peripheral get pc num lock\caps lock state?

Hi,

I am programming with ncs v2.9.0, nrf52833 chips.

I am going to get pc keyboard led state in my custom board throutgh BLE.

This is my report map,but cannot get data from pc in "central_boot_write_cb"

#define OUTPUT_REPORT_MAX_LEN            36
#define INPUT_REP_KEYS_REF_ID            1
#define INPUT_IOS_KEYS_REF_ID            2
#define OUTPUT_REP_KEYS_REF_ID           0 // 1 is useless as well

static void hid_init(void)
{
	int err;
	struct bt_hids_init_param    hids_init_obj = { 0 };
	struct bt_hids_inp_rep       *hids_inp_rep;
	struct bt_hids_outp_feat_rep *hids_outp_rep;
	//struct bt_hids_outp_feat_rep *hids_feature_rep;
	static const uint8_t report_map[] = {

    0x05, 0x01, // Usage Page (Generic Desktop)
    0x09, 0x06, // Usage (Keyboard)
    0xA1, 0x01, // Collection (Application)
    0x85, 0x01, // Report Id (1)
    0x05, 0x07, // Usage Page (Keyboard)
    0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
    0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
    0x15, 0x00, // Logical minimum (0)
    0x25, 0x01, // Logical maximum (1)
    0x75, 0x01, // Report Size (1)
    0x95, 0x08,  // Report Count (8)
    0x81, 0x02, // Input (Data,Value,Absolute,Bit Field)
    0x95, 0x01, // Report Count (1)
    0x75, 0x08, // Report Size (8)
    0x81, 0x01, // Input (Constant,Array,Absolute,Bit Field)
    0x95, 0x05, // Report Count (5)
    0x75, 0x01, // Report Size (1)2

    0x05, 0x08, // Usage Page (LEDs)
    0x19, 0x01, // Usage Minimum
    0x29, 0x05, // Usage Maximum
    0x91, 0x02, // Output (Data,Value,Absolute,Non-volatile,Bit Field)
    0x95, 0x01, // Report Count (1)
    0x75, 0x03, // Report Size (3)
    
	0x91, 0x01, // Output (Constant,Array,Absolute,Non-volatile,Bit Field)
    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 (No event indicated)
    0x29, 0x65, // Usage Maximum (Keyboard Application)
    0x81, 0x00, // Input (Data,Array,Absolute,Bit Field)
    0xC0,       // End Collection (Application)

    0x05, 0x0C, // Usage Page (Consumer)
    0x09, 0x01, // Usage (Consumer Control)
    0xA1, 0x01, // Collection (Application)
    0x85, 0x02, // Report ID (1)
    0x05, 0x0C, // Usage Page (Consumer)
    0x15, 0x00, // Logical Minimum (0)
    0x25, 0x01, // Logical Maximum (1)
    0x75, 0x08, // Report Size (1)
    0x95, 0x01, // Report Count (8)

    0x0A, 0xAE, 0x01, // Usage ( Keyboard Layout) 

    0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred)
    0xC0        // End Collection

	};

	hids_init_obj.rep_map.data = report_map;
	hids_init_obj.rep_map.size = sizeof(report_map);

	hids_init_obj.info.bcd_hid = BASE_USB_HID_SPEC_VERSION;
	hids_init_obj.info.b_country_code = 0x00;
	hids_init_obj.info.flags = (BT_HIDS_REMOTE_WAKE |
				    BT_HIDS_NORMALLY_CONNECTABLE);

	hids_inp_rep = &hids_init_obj.inp_rep_group_init.reports[INPUT_REP_KEYS_IDX];
	hids_inp_rep->size = INPUT_REPORT_KEYS_MAX_LEN;
	hids_inp_rep->id = INPUT_REP_KEYS_REF_ID;
	hids_init_obj.inp_rep_group_init.cnt++;

	hids_inp_rep = &hids_init_obj.inp_rep_group_init.reports[INPUT_REP_IOS_IDX];
	hids_inp_rep->size = INPUT_REPORT_IOS_KEY_LEN;
	hids_inp_rep->id = INPUT_IOS_KEYS_REF_ID;
	hids_init_obj.inp_rep_group_init.cnt++;


	hids_outp_rep = &hids_init_obj.outp_rep_group_init.reports[OUTPUT_REP_KEYS_IDX];
	hids_outp_rep->size = OUTPUT_REPORT_MAX_LEN;
	hids_outp_rep->id = OUTPUT_REP_KEYS_REF_ID;
	hids_init_obj.boot_kb_outp_rep_handler = central_boot_write_cb;
	hids_init_obj.outp_rep_group_init.cnt++;

	hids_init_obj.is_kb = true;

	err = bt_hids_init(&hids_obj, &hids_init_obj);
	__ASSERT(err == 0, "HIDS initialization failed\n");
}

Related