|
本帖最后由 LYFMCU 于 2019-10-23 17:45 编辑
先上图,在群友的提示下找到了这张图 我先说说个人的理解:1.在初始化的时候通过 sd_ble_opt_set()这个函数 设置BLE选项 形参1是BLE_GAP_OPT_PASSKEY,形参2.就是对应的密码了
2.在建立连接完成以后,等待BLE_GAP_EVT_SEC_PARAMS_REQUEST_这个事件 然后调用 void pairng_request(void)这个函数 这个函数中调用了sd_ble_gap_sec_params_reply函数来对执行 使用GAP安全参数回复。那么问题来了什么情况下才会触发 BLE_GAP_EVT_SEC_PARAMS_REQUEST事件。根据图中可以发现是 SMP_Pairing Request.(但是看例子代码是从机和主机建立以后 通过sd_ble_gap_authenticate这个函数才会触发 SMP_Pairing Request,对于这个和图中介绍的不一样啊)
void pairng_request(void)
{
ble_gap_sec_params_t sec_params;
uint32_t err_code;
memset(&sec_params,0,sizeof(ble_gap_sec_params_t));
sec_params.bond = BOND;
sec_params.io_caps = IO_CAPS;
sec_params.mitm = MITM;
sec_params.max_key_size = MAX_KEY_SIZE;
sec_params.min_key_size = MIN_KEY_SIZE;
err_code = sd_ble_gap_sec_params_reply(m_conn_handle,BLE_GAP_SEC_STATUS_SUCCESS,&sec_params,NULL); //
APP_ERROR_CHECK(err_code);
}
3.在调用了pairng_request这函数以后从机就会发响应给主机也就是图中SMP Pairing Response了。
4. 当主机收到这个响应以后会弹出输入密码的界面。我猜测应该是sd_ble_gap_sec_params_reply这个函数可以设置主机密码配对的时间等参数吧
5. 接下来就进入了蓝牙配对的第二阶段了 生成短期密钥(Short Term Key,简称STK)6.协议栈会生成一个事件 BLE_GAP_CONN_SEC_UPDATE,。
7.BLE_GAP_EVT_AUTH_STATUS,在这个事件中如果监测到配对失败了,就调用函数关闭连接
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|