<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/110404/after-connect-ble-hid-devices-to-ios-virtual-keypad-does-not-shown</link><description>Hi, I try to connect ble devices to my iphone. I can send hid data over bluetooth but virtual keypad is hiding. I cant open it. I tried to send 0x65 data as hid report but it did not work. 
 Heere is my hids_init function. 
 
 And this is the part that</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 25 Apr 2024 14:10:26 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/110404/after-connect-ble-hid-devices-to-ios-virtual-keypad-does-not-shown" /><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480732?ContentTypeID=1</link><pubDate>Thu, 25 Apr 2024 14:10:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b466b6fd-684a-432b-a05f-13538acff7ed</guid><dc:creator>H&amp;#229;kon Alseth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you mapped this line:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt; 0x0A, 0xAE, 0x01,               //     Usage (AL Keyboard Layout)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;To be bit &amp;#39;4&amp;#39;, then 0x10 is correct. If you have not changed this, it is 0x01.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Håkon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480609?ContentTypeID=1</link><pubDate>Thu, 25 Apr 2024 08:28:34 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2093c18b-d87c-4ade-bdb0-cc48c3d68615</guid><dc:creator>Emirhan</dc:creator><description>&lt;p&gt;Thanks for reply, I tried your suggestions. I updated my hids_init functions as you said. I tried to send only 1 byte command. I can send data successfuly to my Iphone but it igonres commands. How should I commands to iphone and which commands make keyboard shown on the phone?&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;pre class="ui-code" data-mode="text"&gt;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[2];
    static ble_hids_outp_rep_init_t    output_report_array[2];
    static ble_hids_feature_rep_init_t feature_report_array[1];
    static uint8_t                     report_map_data[] =
    {
        0x05, 0x01,       // Usage Page (Generic Desktop)
        0x09, 0x06,       // Usage (Keyboard)
        0xA1, 0x01,       // Collection (Application)
        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, 0x06,       // Report Count (6)
        0x75, 0x08,       // Report Size (8)
        0x15, 0x00,       // Logical Minimum (0)
        0x25, 0x65,       // 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)
        0x05, 0x0C,                     // Usage Page (Consumer)
        0x09, 0x01,                     // Usage (Consumer Control)
        0xA1, 0x01,                     // Collection (Application)
        0x85, 0x02,                     //     Report Id (2)
        0x15, 0x00,                     //     Logical minimum (0)
        0x25, 0x01,                     //     Logical maximum (1)
        0x75, 0x01,                     //     Report Size (1)
        0x95, 0x01,                     //     Report Count (1)
        0x0A, 0xAE, 0x01,               //     Usage (AL Keyboard Layout)
        0x81, 0x06,                     //     Input (Data,Value,Relative,Bit Field)
        0xC0 
    };

    memset((void *)input_report_array, 0, sizeof(ble_hids_inp_rep_init_t));
    memset((void *)output_report_array, 0, sizeof(ble_hids_outp_rep_init_t));
    memset((void *)feature_report_array, 0, sizeof(ble_hids_feature_rep_init_t));

    // Initialize HID Service
    p_input_report                      = &amp;amp;input_report_array[INPUT_REPORT_KEYS_INDEX];
    p_input_report-&amp;gt;max_len             = INPUT_REPORT_KEYS_MAX_LEN;
    p_input_report-&amp;gt;rep_ref.report_id   = INPUT_REP_REF_ID;
    p_input_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_INPUT;

    p_input_report-&amp;gt;sec.cccd_wr = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.wr      = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.rd      = SEC_JUST_WORKS;


    p_output_report                      = &amp;amp;output_report_array[OUTPUT_REPORT_INDEX];
    p_output_report-&amp;gt;max_len             = OUTPUT_REPORT_MAX_LEN;
    p_output_report-&amp;gt;rep_ref.report_id   = OUTPUT_REP_REF_ID;
    p_output_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_OUTPUT;

    p_output_report-&amp;gt;sec.wr = SEC_JUST_WORKS;
    p_output_report-&amp;gt;sec.rd = SEC_JUST_WORKS;

    p_input_report                      = &amp;amp;input_report_array[1];
    p_input_report-&amp;gt;max_len             = 1;
    p_input_report-&amp;gt;rep_ref.report_id   = 1;
    p_input_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_INPUT;

    p_input_report-&amp;gt;sec.cccd_wr = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.wr      = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.rd      = SEC_JUST_WORKS;

    p_feature_report                      = &amp;amp;feature_report_array[FEATURE_REPORT_INDEX];
    p_feature_report-&amp;gt;max_len             = FEATURE_REPORT_MAX_LEN;
    p_feature_report-&amp;gt;rep_ref.report_id   = FEATURE_REP_REF_ID;
    p_feature_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_FEATURE;

    p_feature_report-&amp;gt;sec.rd              = SEC_JUST_WORKS;
    p_feature_report-&amp;gt;sec.wr              = SEC_JUST_WORKS;

    hid_info_flags = HID_INFO_FLAG_REMOTE_WAKE_MSK | HID_INFO_FLAG_NORMALLY_CONNECTABLE_MSK;

    memset(&amp;amp;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                  = 2;
    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(&amp;amp;m_hids, &amp;amp;hids_init_obj);
    APP_ERROR_CHECK(err_code);
}&lt;/pre&gt;&lt;pre class="ui-code" data-mode="text"&gt;    uint8_t report = 0;
    report = 0x10;
    ble_hids_inp_rep_send(&amp;amp;m_hids,1,1,&amp;amp;report,g_conn_handle);
    report = 0x00;
    ble_hids_inp_rep_send(&amp;amp;m_hids,1,1,&amp;amp;report,g_conn_handle);&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480441?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 12:09:05 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:60031ee6-a27f-45a2-8b64-47bacecc3f2d</guid><dc:creator>H&amp;#229;kon Alseth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You are setting up the second report_id with 1 byte (actually; 1 bit..), but stating that its length is 8 byte.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;p_input_report-&amp;gt;max_len&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;= 8;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;This will not work.&lt;/p&gt;
&lt;p&gt;Note that USB is byte aligned; you may have to either declare the remainder of the bits as constants, or just fill the rest with other consumer controls. You can see this thread for more info:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="https://devzone.nordicsemi.com/f/nordic-q-a/55363/nrf52840-usb-hid-consumer-control"&gt;NRF52840 USB HID Consumer Control&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
[quote user="Emirhan"]uint8_t report[8] = {0};&lt;br /&gt; report[2] = 0x29;&lt;br /&gt; ble_hids_inp_rep_send(&amp;amp;m_hids,1,8,report,g_conn_handle);&lt;br /&gt; report[2] = 0x00;&lt;br /&gt; ble_hids_inp_rep_send(&amp;amp;m_hids,1,8,report,g_conn_handle);[/quote]
&lt;p&gt;It is bitfield, bit_0 = 1 equals 0x01.&lt;/p&gt;
&lt;p&gt;Again; you shouldn&amp;#39;t send 8 bytes, as it does not match your descriptor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Håkon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480416?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 10:57:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e51b3681-2ebb-4181-9fe8-8439ad1cd400</guid><dc:creator>Emirhan</dc:creator><description>&lt;p&gt;uint8_t report[8] = {0};&lt;br /&gt; report[2] = 0x29;&lt;br /&gt; ble_hids_inp_rep_send(&amp;amp;m_hids,1,8,report,g_conn_handle);&lt;br /&gt; report[2] = 0x00;&lt;br /&gt; ble_hids_inp_rep_send(&amp;amp;m_hids,1,8,report,g_conn_handle);&lt;br /&gt;&lt;br /&gt;there is I try to sen report to show virtual keyboard on IOS.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480411?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 10:40:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a0020f7b-7f21-44b2-a342-58efcba4fdee</guid><dc:creator>Emirhan</dc:creator><description>&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;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[2];
    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[] =
    {
        0x05, 0x01,       // Usage Page (Generic Desktop)
        0x09, 0x06,       // Usage (Keyboard)
        0xA1, 0x01,       // Collection (Application)
        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, 0x06,       // Report Count (6)
        0x75, 0x08,       // Report Size (8)
        0x15, 0x00,       // Logical Minimum (0)
        0x25, 0x65,       // 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)
        0x05, 0x0C,                     // Usage Page (Consumer)
        0x09, 0x01,                     // Usage (Consumer Control)
        0xA1, 0x01,                     // Collection (Application)
        0x85, 0x02,                     //     Report Id (2)
        0x15, 0x00,                     //     Logical minimum (0)
        0x25, 0x01,                     //     Logical maximum (1)
        0x75, 0x01,                     //     Report Size (1)
        0x95, 0x01,                     //     Report Count (1)
        0x0A, 0xAE, 0x01,               //     Usage (AL Keyboard Layout)
        0x81, 0x06,                     //     Input (Data,Value,Relative,Bit Field)
        0xC0 
    };

    memset((void *)input_report_array, 0, sizeof(ble_hids_inp_rep_init_t));
    memset((void *)output_report_array, 0, sizeof(ble_hids_outp_rep_init_t));
    memset((void *)feature_report_array, 0, sizeof(ble_hids_feature_rep_init_t));

    // Initialize HID Service
    p_input_report                      = &amp;amp;input_report_array[INPUT_REPORT_KEYS_INDEX];
    p_input_report-&amp;gt;max_len             = INPUT_REPORT_KEYS_MAX_LEN;
    p_input_report-&amp;gt;rep_ref.report_id   = INPUT_REP_REF_ID;
    p_input_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_INPUT;

    p_input_report-&amp;gt;sec.cccd_wr = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.wr      = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.rd      = SEC_JUST_WORKS;

    p_input_report                      = &amp;amp;input_report_array[1];
    p_input_report-&amp;gt;max_len             = 8;
    p_input_report-&amp;gt;rep_ref.report_id   = 1;
    p_input_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_INPUT;

    p_input_report-&amp;gt;sec.cccd_wr = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.wr      = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.rd      = SEC_JUST_WORKS;

    p_output_report                      = &amp;amp;output_report_array[OUTPUT_REPORT_INDEX];
    p_output_report-&amp;gt;max_len             = OUTPUT_REPORT_MAX_LEN;
    p_output_report-&amp;gt;rep_ref.report_id   = OUTPUT_REP_REF_ID;
    p_output_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_OUTPUT;

    p_output_report-&amp;gt;sec.wr = SEC_JUST_WORKS;
    p_output_report-&amp;gt;sec.rd = SEC_JUST_WORKS;

    p_feature_report                      = &amp;amp;feature_report_array[FEATURE_REPORT_INDEX];
    p_feature_report-&amp;gt;max_len             = FEATURE_REPORT_MAX_LEN;
    p_feature_report-&amp;gt;rep_ref.report_id   = FEATURE_REP_REF_ID;
    p_feature_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_FEATURE;

    p_feature_report-&amp;gt;sec.rd              = SEC_JUST_WORKS;
    p_feature_report-&amp;gt;sec.wr              = SEC_JUST_WORKS;

    hid_info_flags = HID_INFO_FLAG_REMOTE_WAKE_MSK | HID_INFO_FLAG_NORMALLY_CONNECTABLE_MSK;

    memset(&amp;amp;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                  = 2;
    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(&amp;amp;m_hids, &amp;amp;hids_init_obj);
    APP_ERROR_CHECK(err_code);
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;This is the newest hid init function.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480409?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 10:36:40 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b55307be-6697-4ff0-81b1-99a48ac1c28d</guid><dc:creator>H&amp;#229;kon Alseth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
[quote user="Emirhan"]As I said, I applied all of your 3 suggestions. [/quote]
&lt;p&gt;Then please share the updated hid_init. The one that you posted 2 hours ago still has&amp;nbsp;these issues:&lt;/p&gt;
[quote user="hkn"]&lt;p&gt;1. Adjust .inp_rep_count to match the amount of input reports&lt;/p&gt;
&lt;p&gt;2. The size of the max_len for input_report_array[1] is wrong. It is 1 byte.&lt;/p&gt;
&lt;p&gt;3. When triggering the &amp;quot;report_id 2&amp;quot;, you should reference the index &amp;#39;1&amp;#39; when calling&amp;nbsp;ble_hids_inp_rep_send(&amp;amp;m_hids, 1, ....)&lt;/p&gt;[/quote]
&lt;p&gt;&lt;/p&gt;
[quote user="Emirhan"]Which hid command I have to send iphone and which report index I have to send with?[/quote]
&lt;p&gt;You&amp;#39;ve setup the second report as bitfields, with one defined command. You should then send bit 0 as &amp;#39;1&amp;#39;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Håkon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480387?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 09:18:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3243c1a6-52d8-4192-a992-56cb317c954d</guid><dc:creator>Emirhan</dc:creator><description>&lt;p&gt;As I said, I applied all of your 3 suggestions. They are fixed the sending report problem. But I am struggling with sending useful command. Which hid command I have to send iphone and which report index I have to send with?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480382?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 09:11:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e31dfa9e-0350-48d6-8838-f60386c7664c</guid><dc:creator>H&amp;#229;kon Alseth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. Adjust .inp_rep_count to match the amount of input reports&lt;/p&gt;
&lt;p&gt;2. The size of the max_len for input_report_array[1] is wrong. It is 1 byte.&lt;/p&gt;
&lt;p&gt;3. When triggering the &amp;quot;report_id 2&amp;quot;, you should reference the index &amp;#39;1&amp;#39; when calling&amp;nbsp;ble_hids_inp_rep_send(&amp;amp;m_hids, 1, ....)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Håkon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480380?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 09:01:28 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b4dbf634-e77b-4487-9500-6dcbde14587e</guid><dc:creator>Emirhan</dc:creator><description>&lt;p&gt;Here is my hid init function.&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;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[2];
    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[] =
    {
        0x05, 0x01,       // Usage Page (Generic Desktop)
        0x09, 0x06,       // Usage (Keyboard)
        0xA1, 0x01,       // Collection (Application)
        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, 0x06,       // Report Count (6)
        0x75, 0x08,       // Report Size (8)
        0x15, 0x00,       // Logical Minimum (0)
        0x25, 0x65,       // 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)
        0x05, 0x0C,                     // Usage Page (Consumer)
        0x09, 0x01,                     // Usage (Consumer Control)
        0xA1, 0x01,                     // Collection (Application)
        0x85, 0x02,                     //     Report Id (2)
        0x15, 0x00,                     //     Logical minimum (0)
        0x25, 0x01,                     //     Logical maximum (1)
        0x75, 0x01,                     //     Report Size (1)
        0x95, 0x01,                     //     Report Count (1)
        0x0A, 0xAE, 0x01,               //     Usage (AL Keyboard Layout)
        0x81, 0x06,                     //     Input (Data,Value,Relative,Bit Field)
        0xC0 
    };

    memset((void *)input_report_array, 0, sizeof(ble_hids_inp_rep_init_t));
    memset((void *)output_report_array, 0, sizeof(ble_hids_outp_rep_init_t));
    memset((void *)feature_report_array, 0, sizeof(ble_hids_feature_rep_init_t));

    // Initialize HID Service
    p_input_report                      = &amp;amp;input_report_array[INPUT_REPORT_KEYS_INDEX];
    p_input_report-&amp;gt;max_len             = INPUT_REPORT_KEYS_MAX_LEN;
    p_input_report-&amp;gt;rep_ref.report_id   = INPUT_REP_REF_ID;
    p_input_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_INPUT;

    p_input_report-&amp;gt;sec.cccd_wr = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.wr      = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.rd      = SEC_JUST_WORKS;

    p_input_report                      = &amp;amp;input_report_array[1];
    p_input_report-&amp;gt;max_len             = 8;
    p_input_report-&amp;gt;rep_ref.report_id   = 1;
    p_input_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_INPUT;

    p_input_report-&amp;gt;sec.cccd_wr = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.wr      = SEC_JUST_WORKS;
    p_input_report-&amp;gt;sec.rd      = SEC_JUST_WORKS;

    p_output_report                      = &amp;amp;output_report_array[OUTPUT_REPORT_INDEX];
    p_output_report-&amp;gt;max_len             = OUTPUT_REPORT_MAX_LEN;
    p_output_report-&amp;gt;rep_ref.report_id   = OUTPUT_REP_REF_ID;
    p_output_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_OUTPUT;

    p_output_report-&amp;gt;sec.wr = SEC_JUST_WORKS;
    p_output_report-&amp;gt;sec.rd = SEC_JUST_WORKS;

    p_feature_report                      = &amp;amp;feature_report_array[FEATURE_REPORT_INDEX];
    p_feature_report-&amp;gt;max_len             = FEATURE_REPORT_MAX_LEN;
    p_feature_report-&amp;gt;rep_ref.report_id   = FEATURE_REP_REF_ID;
    p_feature_report-&amp;gt;rep_ref.report_type = BLE_HIDS_REP_TYPE_FEATURE;

    p_feature_report-&amp;gt;sec.rd              = SEC_JUST_WORKS;
    p_feature_report-&amp;gt;sec.wr              = SEC_JUST_WORKS;

    hid_info_flags = HID_INFO_FLAG_REMOTE_WAKE_MSK | HID_INFO_FLAG_NORMALLY_CONNECTABLE_MSK;

    memset(&amp;amp;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                  = 1;
    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(&amp;amp;m_hids, &amp;amp;hids_init_obj);
    APP_ERROR_CHECK(err_code);
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480379?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 09:00:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:de4f4ffc-2110-45cf-81e3-deb90e7bf636</guid><dc:creator>Emirhan</dc:creator><description>&lt;p&gt;I got same report map when I implemented the link you send. Still iphone virtual keyboard does not show up. I checked out&amp;nbsp;&lt;span&gt;ble_app_hids_mouse. I fixed my input array bug according to this project but it didnt fix my keyboard problem. How must I configure my report map or Do Imust send extra report?&lt;br /&gt;&lt;br /&gt;How can I toggle keyboard or make keyboard shown?&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480355?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 08:07:01 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9e850fa8-3f77-49a1-a975-55969c1adfb1</guid><dc:creator>H&amp;#229;kon Alseth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;According to this thread on stack overflow, you need to send a different command on ios:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/61183450/toggle-virtual-keyboard-with-bluetooth-hid"&gt;https://stackoverflow.com/questions/61183450/toggle-virtual-keyboard-with-bluetooth-hid&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You should send on the consumer control report, meaning that you will need to adjust your&amp;nbsp;input_report_array[] to also include that report. Please see the ble_app_hids_mouse sample on how to do this.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Håkon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480330?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 06:32:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6883513c-5274-4285-b6c0-b13dcdfa9374</guid><dc:creator>Emirhan</dc:creator><description>&lt;p&gt;Thanks for your reply. I fixed my input buffer size. Report array is [0, 0, 0x65, 0 ,0 ,0 ,0 ,0]. I tried to send only 0x65 as hid data. How should I send command for show up IOS keyboard?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: AFTER CONNECT BLE HID DEVICES TO IOS VIRTUAL KEYPAD DOES NOT SHOWN</title><link>https://devzone.nordicsemi.com/thread/480010?ContentTypeID=1</link><pubDate>Mon, 22 Apr 2024 13:23:58 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:511cbba8-ae11-4d1e-86c5-2e99ada1464a</guid><dc:creator>H&amp;#229;kon Alseth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Your input_report_array[] size is not matching the amount of report_ids you&amp;#39;re using.&lt;/p&gt;
&lt;p&gt;See the ble_app_hids_mouse/main.c::hids_init() on how to setup more input_reports.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
[quote user=""]I tried to send 0x65 data as hid report but it did not work.[/quote]
&lt;p&gt;How does the &amp;quot;report&amp;quot; array look?&lt;/p&gt;
&lt;p&gt;Is it this command you&amp;#39;re trying to send? (taken from page 56 in this doc:&amp;nbsp;&lt;a href="https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf"&gt;https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1713792213436v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Håkon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>