nrf51822笔记之密码配对过程梳理

配对的触发有以下几种情况:
1:主机直接发起。
2:从机发起安全请求,如果之前绑定过,那么主机会直接用用保存的LTK加密链路,如果没有那么主机会发起配对请求。
3:BLE中的有一个安全模式的概念。当某个属性被设置为需要认证的加密链路访问时,那么当在主机访问从机的属性服务器时,如果链路是不安全的就会返回错误,然后主机会发起配对请求从而实现安全要求。

第三种方式:
被动等待主机触发的方式,首先要将从机属性设置需要安全的链路才能访问,那么手机在访问时就会触发安全参数请求,从机回复安全参数(以及静态密码)
1.加密主机访问链路:
    BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM();
或者
    BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM();

2.主机失败会触发安全参数请求:BLE_GAP_EVT_SEC_PARAMS_REQUEST

3.从机响应回复请求:   err_code = sd_ble_gap_sec_params_reply( );



第二种方式:
1、手机连接上后立刻调用安全请求api:  sd_ble_gap_authenticate

        @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), otherwise in the peripheral role, an SMP Security Request will be sent.
                         err_code=sd_ble_gap_authenticate();

2、这样手机收到后就会发送配对请求    :BLE_GAP_EVT_SEC_PARAMS_REQUEST

3、回复手机的配对请求,设置不绑定。(这样手机每次收到设备的安全请求就会发配对请求过来从而启动配对)
              err_code = sd_ble_gap_sec_params_reply( );
4、之配对过程会自动进行。我们只需要根据收到的BLE_GAP_EVT_AUTH_STATUS事件,判断其状态是否是成功,来决定配对是不是成功了,从而决定断不断开链接。
         caseBLE_GAP_EVT_AUTH_STATUS:
            if(p_ble_evt->evt.gap_evt.params.auth_status.auth_status == BLE_GAP_SEC_STATUS_SUCCESS)
               {
                    printf("pair success\r\n");
               }
            else
               {
                    sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
               }

nrf51822笔记之密码配对过程梳理_第1张图片

你可能感兴趣的:(nrf51822蓝牙开发)