Hi Guys,
I have implemented passkey legacy security pairing ( no bonding ) on my device, and i want to pair with my Android phone.
I have no keyboard/ display on my device, so i have used the sd_ble_opt_set() function to set a static passkey.
I use the peer manager to handle it.
Its configuration is :
static uint8_t key_passkey_auth[] = "012345"; static uint16_t key_passkey_auth_length = 6; static ble_opt_t passkey_opt; static void peer_manager_init(void) { ble_gap_sec_params_t sec_param; ret_code_t err_code; err_code = pm_init(); APP_ERROR_CHECK(err_code); //delete the previous peers pm_peers_delete(); memset(&sec_param, 0, sizeof(ble_gap_sec_params_t)); // Security parameters to be used for all security procedures. sec_param.bond = 0; sec_param.mitm = 1; sec_param.lesc = 0; sec_param.keypress = 0; sec_param.io_caps = BLE_GAP_IO_CAPS_DISPLAY_ONLY; sec_param.oob = 0; sec_param.min_key_size = 7; sec_param.max_key_size = 16; sec_param.kdist_own.enc = 0; //no long term key sec_param.kdist_own.id = 0; // no resolvable address irk sec_param.kdist_peer.enc = 0; //no long term key sec_param.kdist_peer.id = 0; // no resolvable address irk err_code = pm_sec_params_set(&sec_param); APP_ERROR_CHECK(err_code); err_code = pm_register(pm_evt_handler); APP_ERROR_CHECK(err_code); memset( &passkey_opt, 0, sizeof( passkey_opt ) ); passkey_opt.gap_opt.passkey.p_passkey = key_passkey_auth; err_code = sd_ble_opt_set( BLE_GAP_OPT_PASSKEY, &passkey_opt ); APP_ERROR_CHECK(err_code); }
When I try to connect with my Android Phone, with NRF Connect, a popup appears and ask me if i want to pair with my device.
So i said yes, it appears a second time, i said yes too, and after it shows me that my device is bonded.
But I have no entered my passkey, and when i try to read a secured characteristic, i have nothing.
I have read a lot of thread about this subject, but i haven't found the solution to my problem.