Hi,
im use the example of nRF5_SDK_16.0.0_98a08e2\examples\ble_peripheral\ble_app_hids_keyboard
and i change the code of static void hids_init(void) like this:
#define BUFF_LEN 28
static void hids_init(void)
{
ret_code_t err_code;
ble_hids_init_t hids_init_obj;
ble_hids_inp_rep_init_t * p_input_report;
ble_hids_outp_rep_init_t * p_output_report;
ble_hids_feature_rep_init_t * p_feature_report;
uint8_t hid_info_flags;
static ble_hids_inp_rep_init_t input_report_array[3];
static ble_hids_outp_rep_init_t output_report_array[1];
static ble_hids_feature_rep_init_t feature_report_array[1];
static uint8_t report_map_data[] =
{
#if 1
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */\
0x09, 0x06, /* USAGE (Keyboard) */\
0xa1, 0x01, /* COLLECTION (Application) */\
0x85, 0x01,
0x05, 0x07, /* USAGE_PAGE (Keyboard) */\
0x19, 0xe0, /* USAGE_MINIMUM (Keyboard LeftControl) */\
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,Var,Abs) */\
0x95, 0x01, /* REPORT_COUNT (1) */\
0x75, 0x08, /* REPORT_SIZE (8) */\
0x81, 0x03, /* INPUT (Cnst,Var,Abs) */\
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) */\
0x95, 0x01, /* REPORT_COUNT (1) */\
0x75, 0x03, /* REPORT_SIZE (3) */\
0x91, 0x03, /* OUTPUT (Cnst,Var,Abs) */\
\
0x95, BUFF_LEN*8, /* REPORT_COUNT (BUFF_LEN*8) */\
0x75, 0x01, /* REPORT_SIZE (1) */\
\
0x15, 0x00, /* LOGICAL_MINIMUM (0) */\
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */\
\
0x05, 0x07, /* USAGE_PAGE (Keyboard) */\
\
0x19, 0x00, /* USAGE_MINIMUM (Reserved (no event indicated))*/\
0x29, 0x00+BUFF_LEN*8-1, /* USAGE_MAXIMUM (Keyboard Application) */\
\
0x81, 0x02, /* INPUT (Data,Ary,Abs) */\
0xc0,
#else
0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
0x85, 0x01, // report id (1)
0x05, 0x07, // Usage Page (Key Codes)
0x19, 0xe0, // Usage Minimum (224)
0x29, 0xe7, // Usage Maximum (231)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x81, 0x02, // Input (Data, Variable, Absolute)
0x95, 0x01, // Report Count (1)
0x75, 0x08, // Report Size (8)
0x81, 0x01, // Input (Constant) reserved byte(1)
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, 14, // Report Count (6)
0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0)
0x25, 0xdf, // Logical Maximum (101)
0x05, 0x07, // Usage Page (Key codes)
0x19, 0x00, // Usage Minimum (0)
0x29, 0x65, // Usage Maximum (101)
0x81, 0x00, // Input (Data, Array) Key array(6 bytes)
0x09, 0x05, // Usage (Vendor Defined)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0x00, // Logical Maximum (255)
0x75, 0x08, // Report Size (8 bit)
0x95, 0x02, // Report Count (2)
0xB1, 0x02, // Feature (Data, Variable, Absolute)
0xC0, // End Collection (Application)
#endif
0x05, 0x0C, /* USAGE_PAGE (CONSUMER CTL) */
0x09, 0x01, /* USAGE (CONSUMER CTL) */
0xa1, 0x01, /* COLLECTION (Application) */
0X85, 0x02, /* REPORT ID(2) */
0x19, 0x01, /* USAGE_MINIMUM (CONSUMER CTL) */
0x2A, 0xFF,0x02, /* USAGE_MAXIMUM () */
0x15, 0x00, /* LOGICAL_MINIMUM (1) */
0x26, 0x9C,0x02, /* LOGICAL_MAXIMUM (668) */
0x75, 0x10, /* REPORT_SIZE (16) */
0x95, 0x02, /* REPORT_COUNT (2) */
0x81, 0x00, /* INPUT (Data,Var,Abs) */
0xc0, /* END_COLLECTION */
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
0x09, 0x80, /* USAGE (SYSTEM CTL) */
0xa1, 0x01, /* COLLECTION (Application) */
0X85, 0x03, /* REPORT ID(2) */
0x19, 0x81, /* USAGE_MINIMUM (system power down) */
0x29, 0xb8, /* USAGE_MAXIMUM (system weekup) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
0x75, 0x1, /* REPORT_SIZE (1) */
0x95, 0x38, /* REPORT_COUNT (56) */
0x81, 0x02, /* INPUT () */
0xc0 /* END_COLLECTION */
};
memset((void *)input_report_array, 0, 3*sizeof(ble_hids_inp_rep_init_t));
memset((void *)output_report_array, 0, 1*sizeof(ble_hids_outp_rep_init_t));
memset((void *)feature_report_array, 0, 1*sizeof(ble_hids_feature_rep_init_t));
// Initialize HID Service
p_input_report = &input_report_array[INPUT_REPORT_KEYS_INDEX];
p_input_report->max_len = INPUT_REPORT_KEYS_MAX_LEN;
p_input_report->rep_ref.report_id = 1;//INPUT_REP_REF_ID;
p_input_report->rep_ref.report_type = BLE_HIDS_REP_TYPE_INPUT;
p_input_report->sec.cccd_wr = SEC_JUST_WORKS;
p_input_report->sec.wr = SEC_JUST_WORKS;
p_input_report->sec.rd = SEC_JUST_WORKS;
p_input_report = &input_report_array[1];
p_input_report->max_len = 4;
p_input_report->rep_ref.report_id = 2;
p_input_report->rep_ref.report_type = BLE_HIDS_REP_TYPE_INPUT;
p_input_report->sec.cccd_wr = SEC_JUST_WORKS;
p_input_report->sec.wr = SEC_JUST_WORKS;
p_input_report->sec.rd = SEC_JUST_WORKS;
p_input_report = &input_report_array[2];
p_input_report->max_len = 7;
p_input_report->rep_ref.report_id = 3;
p_input_report->rep_ref.report_type = BLE_HIDS_REP_TYPE_INPUT;
p_input_report->sec.cccd_wr = SEC_JUST_WORKS;
p_input_report->sec.wr = SEC_JUST_WORKS;
p_input_report->sec.rd = SEC_JUST_WORKS;
p_output_report = &output_report_array[OUTPUT_REPORT_INDEX];
p_output_report->max_len = OUTPUT_REPORT_MAX_LEN;
p_output_report->rep_ref.report_id = OUTPUT_REP_REF_ID;
p_output_report->rep_ref.report_type = BLE_HIDS_REP_TYPE_OUTPUT;
p_output_report->sec.wr = SEC_JUST_WORKS;
p_output_report->sec.rd = SEC_JUST_WORKS;
p_feature_report = &feature_report_array[FEATURE_REPORT_INDEX];
p_feature_report->max_len = FEATURE_REPORT_MAX_LEN;
p_feature_report->rep_ref.report_id = FEATURE_REP_REF_ID;
p_feature_report->rep_ref.report_type = BLE_HIDS_REP_TYPE_FEATURE;
p_feature_report->sec.rd = SEC_JUST_WORKS;
p_feature_report->sec.wr = SEC_JUST_WORKS;
hid_info_flags = HID_INFO_FLAG_REMOTE_WAKE_MSK | HID_INFO_FLAG_NORMALLY_CONNECTABLE_MSK;
memset(&hids_init_obj, 0, sizeof(hids_init_obj));
hids_init_obj.evt_handler = on_hids_evt;
hids_init_obj.error_handler = service_error_handler;
hids_init_obj.is_kb = true;
hids_init_obj.is_mouse = false;
hids_init_obj.inp_rep_count = 3;
hids_init_obj.p_inp_rep_array = input_report_array;
hids_init_obj.outp_rep_count = 1;
hids_init_obj.p_outp_rep_array = output_report_array;
hids_init_obj.feature_rep_count = 1;
hids_init_obj.p_feature_rep_array = feature_report_array;
hids_init_obj.rep_map.data_len = sizeof(report_map_data);
hids_init_obj.rep_map.p_data = report_map_data;
hids_init_obj.hid_information.bcd_hid = BASE_USB_HID_SPEC_VERSION;
hids_init_obj.hid_information.b_country_code = 0;
hids_init_obj.hid_information.flags = hid_info_flags;
hids_init_obj.included_services_count = 0;
hids_init_obj.p_included_services_array = NULL;
hids_init_obj.rep_map.rd_sec = SEC_JUST_WORKS;
hids_init_obj.hid_information.rd_sec = SEC_JUST_WORKS;
hids_init_obj.boot_kb_inp_rep_sec.cccd_wr = SEC_JUST_WORKS;
hids_init_obj.boot_kb_inp_rep_sec.rd = SEC_JUST_WORKS;
hids_init_obj.boot_kb_outp_rep_sec.rd = SEC_JUST_WORKS;
hids_init_obj.boot_kb_outp_rep_sec.wr = SEC_JUST_WORKS;
hids_init_obj.protocol_mode_rd_sec = SEC_JUST_WORKS;
hids_init_obj.protocol_mode_wr_sec = SEC_JUST_WORKS;
hids_init_obj.ctrl_point_wr_sec = SEC_JUST_WORKS;
err_code = ble_hids_init(&m_hids, &hids_init_obj);
APP_ERROR_CHECK(err_code);
}
and i test in my Android phone ,my phone can receive the key code ,from 0x00 to 0xe0. it can achieve the funcation of send all key's status at once.but in the windowns it cant do it.the windowns will receive nothing. but i test a keyboard made by nrf52810,and it can do that.
1.so i want to know how to send all keys status at once.
and the hid info of other businesses' s 52810 keyboardlike this:

and my keyboard's hid info like this:

obviously,there is only one HID Keyboard Device in my keyboard ,and the other businesses's keyboard is 3,
2.so i want to konw how to add the HID Keyboard Device ?