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

Android pairing pop-up appears twice

I would like to establish bonding between my device and an android phone.

My device is acting as both a central and peripheral.  It functions in peripheral role in relation to the phone.  The mobile app is developed only for Android for now.

Application firmware is developed against SDK 16.

I am using peer_manager.  I call pm_init and pm_sec_params_set with

memset( &sec_param, 0, sizeof( ble_gap_sec_params_t ) );

// Security parameters to be used for all security procedures.
sec_param.bond = 1;
sec_param.mitm = 0;
sec_param.lesc = 1;
sec_param.keypress = 0;
sec_param.io_caps = BLE_GAP_IO_CAPS_NONE;
sec_param.oob = 0;
sec_param.min_key_size = 7;
sec_param.max_key_size = 16;
sec_param.kdist_own.enc = 1;
sec_param.kdist_own.id = 1;
sec_param.kdist_peer.enc = 1;
sec_param.kdist_peer.id = 1;

In the ble event handler for BLE_GAP_EVT_CONNECTED, I call

ble_gap_evt_t const *p_gap_evt = &pEvt->evt.gap_evt;

 pm_conn_secure( p_gap_evt->conn_handle, false );

( I have also tested using pm_handler_secure_on_connection with PM_HANDLER_SEC_DELAY_MS set to 75 and 500 mS )

I am NOTcalling pm_conn_sec_prams_reply at all.

I am calling pm_conn_sec_config_reply with allow_repairing = false

The problem I'm encountering is that the pairing pop-up is appearing twice to the user.  Is there a way to change the connection sequence so this pop-up only occurs 1 time?

Parents
  • Hi

    In our SDK we have the BLE_DB_DISCOVERY_COMPLETE event for indicating that the discovery of a service is complete, so try implementing this event before calling the pairing request for instance.

    Best regards,

    Simon

  • A couple of issues with that.

    1) BLE_DB_DISCOVERY_COMPLETE only indicates the completion of the discovery of a single service.  If multiple services are requested to be discovered, this event will be emitted multiple times.

    2) BLE_DB_DISCOVERY_COMPLETE only relates to discovery from the nRF device, and does not indicate anything about the discovery procedure from the mobile phone.

    3) Regardless, our code in the nrf does not call ble_db_discovery_start until either PM_EVT_CONN_SEC_SUCCEEDED or PM_EVT_CONN_SEC_FAILED is received.  We did this to avoid discovery being disturbed by the connection pairing procedure.   

Reply
  • A couple of issues with that.

    1) BLE_DB_DISCOVERY_COMPLETE only indicates the completion of the discovery of a single service.  If multiple services are requested to be discovered, this event will be emitted multiple times.

    2) BLE_DB_DISCOVERY_COMPLETE only relates to discovery from the nRF device, and does not indicate anything about the discovery procedure from the mobile phone.

    3) Regardless, our code in the nrf does not call ble_db_discovery_start until either PM_EVT_CONN_SEC_SUCCEEDED or PM_EVT_CONN_SEC_FAILED is received.  We did this to avoid discovery being disturbed by the connection pairing procedure.   

Children
No Data
Related