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

pc-ble-driver - sd_ble_gap_sec_params_reply fails

Hi all,

I am trying to develop a simple windows application using pc-ble-driver writing my own C# bindings on a nrf52840 dongle with nrf-ble-driver-sd_api_v6-mt-4_1_4.dll as a soft device and connectivity firmware connectivity_4.1.4_usb_with_s140_6.1.1_dfu_pkg.zip. I have hit a road block while implementing bonding. Currently I am expected to do legacy pairing (IT just works). The first step in bonding works as expected and I receive BLE_GAP_EVT_SEC_PARAMS_REQUEST event. 


#define SEC_PARAM_MIN_KEY_SIZE 7
#define SEC_PARAM_MAX_KEY_SIZE 16 
int nrfDemo::ManagedNordicBLEChannel::AuthenticateConnection(uint16_t connectionHandle)
{ 
ble_gap_sec_params_t sec_param;
memset(&sec_param, 0, sizeof(sec_param)); 
/*Set the Security parameters*/
sec_param.bond = 1; 
sec_param.mitm = 0; 
sec_param.lesc = 0;
sec_param.keypress = 0;
sec_param.io_caps = 0;
sec_param.oob = 0;
sec_param.min_key_size = SEC_PARAM_MIN_KEY_SIZE;
sec_param.max_key_size = SEC_PARAM_MAX_KEY_SIZE;
sec_param.kdist_own.enc = 1; 
sec_param.kdist_own.id = 1;
sec_param.kdist_peer.enc = 1; 
sec_param.kdist_peer.id = 1;
auto err_code = sd_ble_gap_authenticate(m_adapter, connectionHandle, &sec_param); 
return err_code;
}

Upon receiving BLE_GAP_EVT_SEC_PARAMS event I am trying to do a reply like below:

static ble_gap_sec_keys_t ble_gap_sec_keys;
static ble_gap_sec_keyset_t ble_gap_sec_keyset;

void nrfDemo::ManagedNordicBLEChannel::on_sd_ble_gap_sec_params_reply(ble_gap_evt_t* evt)
{
	memset(&ble_gap_sec_keyset, 0, sizeof(ble_gap_sec_keyset));
	memset(&ble_gap_sec_keys, 0, sizeof(ble_gap_sec_keys));

	ble_gap_sec_keyset.keys_peer.p_pk = NULL;
	ble_gap_sec_keyset.keys_peer.p_enc_key = NULL;
	ble_gap_sec_keyset.keys_peer.p_id_key = NULL;
	ble_gap_sec_keyset.keys_peer.p_sign_key = NULL;
	ble_gap_sec_keyset.keys_peer = ble_gap_sec_keys;

	auto err_code = sd_ble_gap_sec_params_reply(m_adapter, evt->conn_handle, BLE_GAP_SEC_STATUS_SUCCESS, nullptr, &ble_gap_sec_keyset);

	printf("on_sd_ble_gap_sec_params_reply status: %d \n", err_code);
}

sd_ble_gap_sec_params_reply returns an error with code 0x10. Any suggestions?

Related