static void pair_sec_params_init(void)
{
memset(&sec_params,0,sizeof(ble_gap_sec_params_t));
sec_params.bond = SEC_PARAM_BOND;
sec_params.mitm = SEC_PARAM_MITM;
sec_params.lesc = SEC_PARAM_LESC;
sec_params.io_caps = SEC_PARAM_IO_CAPABILITIES;
sec_params.oob = SEC_PARAM_OOB;
sec_params.max_key_size = SEC_PARAM_MAX_KEY_SIZE;
sec_params.min_key_size = SEC_PARAM_MIN_KEY_SIZE;
}
-->
static void set_password(void)
{
ret_code_t err_code;
memcpy(passkey,STATIC_PASSKEY,6);
m_static_pin_option.gap_opt.passkey.p_passkey = passkey;
err_code = sd_ble_opt_set(BLE_GAP_OPT_PASSKEY, &m_static_pin_option);
APP_ERROR_CHECK(err_code);
}
参考中控瑞迪优项目
事件流程:
手机与从设备:
BLE_GAP_EVT_CONNECTED:sd_ble_gap_authenticate(m_conn_handle,&sec_params); --> BLE_GATTC_EVT_EXCHANGE_MTU_RSP:自带库处理 --> BLE_GAP_EVT_CONN_PARAM_UPDATE:自带库处理 --> BLE_GAP_OPT_SCAN_REQ_REPORT:? --> BLE_GAP_OPT_COMPAT_MODE_1:? --> BLE_GAP_EVT_CONN_PARAM_UPDATE:自带库处理 --> BLE_GAP_EVT_SEC_PARAMS_REQUEST:sd_ble_gap_sec_params_reply(m_conn_handle,BLE_GAP_SEC_STATUS_SUCCESS,&sec_params,NULL); --> BLE_GAP_EVT_PASSKEY_DISPLAY:? --> BLE_GAP_EVT_CONN_PARAM_UPDATE:自带库处理 --> BLE_GAP_EVT_CONN_SEC_UPDATE:自带库处理 --> BLE_GAP_EVT_AUTH_STATUS: if(p_ble_evt->evt.gap_evt.params.auth_status.auth_status == BLE_GAP_SEC_STATUS_SUCCESS)
{ }
else
{} --> BLE_GAP_EVT_CONN_PARAM_UPDATE:自带库处理
主设备与从设备:
主设备蓝牙事件
BLE_GAP_EVT_ADV_REPORT:Advertising report. --> BLE_GAP_EVT_CONNECTED:Connection established. --> BLE_GAP_EVT_SEC_REQUEST:sd_ble_gap_authenticate(p_ble_evt->evt.gap_evt.conn_handle, &sec_params); --> BLE_GATTC_EVT_EXCHANGE_MTU_RSP:自带库处理 --> BLE_GAP_EVT_SEC_PARAMS_REQUEST:sd_ble_gap_sec_params_reply(p_ble_evt->evt.gap_evt.conn_handle, BLE_GAP_SEC_STATUS_SUCCESS, NULL, NULL); --> BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP:自带库处理 --> BLE_GATTC_EVT_CHAR_DISC_RSP:自带库处理 --> BLE_GATTC_EVT_CHAR_DISC_RSP:自带库处理 --> BLE_GAP_EVT_CONN_SEC_UPDATE:自带库处理 --> BLE_GAP_EVT_AUTH_STATUS:? --> BLE_GATTC_EVT_DESC_DISC_RSP:自带库处理 --> BLE_GATTC_EVT_WRITE_RSP:?
从设备蓝牙事件
BLE_GAP_EVT_CONNECTED:sd_ble_gap_authenticate(m_conn_handle,&sec_params); --> BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST:自带库处理 --> BLE_GATTC_EVT_EXCHANGE_MTU_RSP:自带库处理 --> BLE_GAP_EVT_SEC_PARAMS_REQUEST:sd_ble_gap_sec_params_reply(m_conn_handle,BLE_GAP_SEC_STATUS_SUCCESS,&sec_params,NULL); --> BLE_GAP_EVT_CONN_SEC_UPDATE:自带库处理 --> BLE_GAP_EVT_AUTH_STATUS:
if(p_ble_evt->evt.gap_evt.params.auth_status.auth_status == BLE_GAP_SEC_STATUS_SUCCESS)
{
}
else
{
}
--> BLE_GATTS_EVT_WRITE:自带库处理
https://www.nordicsemi.com/DocLib/Content/SoftDevice_API_Doc/S132/v5-0-0/group_ble_gap_central_legacy_msc
https://www.nordicsemi.com/DocLib/Content/SoftDevice_API_Doc/S132/v5-0-0/group_ble_gap_periph_legacy_msc