• 正文
  • 相关推荐
申请入驻 产业图谱

手把手教你:打印第一次配对和重连共同的LOG信息

07/16 09:36
236
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、前言

上一篇文章中讲解了,如何打印配对第二阶段加密完成的log信息,本篇将结合代码讲解如何打印配对第三阶段和第二阶段的LOG信息,这里所说的第三阶段是指密钥分发完成阶段,第二阶段是指主机回复从机开始加密指令之后,详细的介绍请看文章中的描述。

二、阅读说明

1、泰凌微芯片学习者,前期使用过该芯片。

2、能够知道怎么进行创建工程,下载代码。

3、有一块开发板,板上的芯片可以是8251,8253或者8258。

三、正文

1、使用的SDK使用的sdk和demo为该篇文章描述的“手把手教你:打印配对第二阶段过程中的LOG信息”;

2、增加配对加密过程完成事件标志

    blc_gap_setEventMask( GAP_EVT_MASK_SMP_PAIRING_BEGIN            |                            GAP_EVT_MASK_SMP_PAIRING_SUCCESS          |                            GAP_EVT_MASK_SMP_PAIRING_FAIL             |                            GAP_EVT_MASK_SMP_CONN_ENCRYPTION_DONE     |                            GAP_EVT_MASK_SMP_SECURITY_PROCESS_DONE    |                            GAP_EVT_MASK_ATT_EXCHANGE_MTU);

如上图所示在app.c中的user_init_normal函数中增加GAP_EVT_MASK_SMP_SECURITY_PROCESS_DONE标志。增加了该事件标志之后,如果当前是第一次进行配对,那么该事件的回调函数会在第三阶段密钥分发完成之后触发。

如果当前属于重连,则会在第二阶段GAP_EVT_MASK_SMP_CONN_ENCRYPTION_DONE的回调触发后进行触发。

关于GAP_EVT_MASK_SMP_CONN_ENCRYPTION_DONE的回调触发时机请看这篇文章《手把手教你:打印配对第二阶段过程中的LOG信息》;

3、回调函数触发时机介绍

3.1、第一次配对回调函数触发时机

如上箭头所示,第一次配对回调函数触发时机是在密钥分发完成之后触发

3.2、重连时回调函数触发时机

如上图所示,重连时回调函数触发时机是在主机回复了LL_START_ENC_RSP之后。

4、配对加密过程完成回调函数

case GAP_EVT_SMP_SECURITY_PROCESS_DONE:{    gap_smp_securityProcessDoneEvt_t *pEvt = (gap_smp_securityProcessDoneEvt_t *)para;    tlkapi_send_string_data(APP_SMP_LOG_EN, "[APP][SMP] encryption process done:", pEvt, sizeof(gap_smp_securityProcessDoneEvt_t));}break;

如上图所示,配对加密过程完成回调函数在app.c中的app_host_event_callback函数中,我在里面增加一个打印的函数:

tlkapi_send_string_data(APP_SMP_LOG_EN, "[APP][SMP] encryption process done:", pEvt, sizeof(gap_smp_securityProcessDoneEvt_t));

该打印的内容主要为连接句柄,和重连的标志。如果说当前是第一次配对,那么该值为0,如果为重连,则该值为1。详细解释如下:

5、配对打印信息

[APP][EVT] connect, intA & advA:: 0d bf e4 12 82 77 f1 9f 18 38 c1 a4[APP][EVT] DLE exchange: 1b 00 1b 00
/****************** 第一次配对 *************************/[APP][SMP] paring begin:: 40 00 00 00[APP][SMP] conn encryption done:: 40 00 00[APP][SMP] paring success:: 40 00 01 01[APP][SMP] encryption process done:: 40 00 00  // 回调信息/****************** end *******************************/
[APP][EVT] disconnect, reason 0x13  // 断开连接
[APP][EVT] connect, intA & advA:: fd 7d 16 c8 43 54 f1 9f 18 38 c1 a4[APP][EVT] DLE exchange: 1b 00 1b 00

/****************** 重连 ******************************/[APP][SMP] conn encryption done:: 40 00 01[APP][SMP] encryption process done:: 40 00 01  // 回调信息/****************** end *******************************/

如上图所示,在第一次配对和重连的时候都会打印encryption process done信息,唯一不同的是后面的重连参数,一个为0,一个为1。

四、结尾

本篇结合代码讲解了第一次配对和重连都会用到的回调函数,该回调函数的作用可以用来判断加密是否完成,这样一来我们就不用分第一次配对和第二次配对了,如果当前的加密是成功的,我们统统可以看这个回调就可以了,下一篇讲解配对失败的回调函数。

我写了一个合集,不依赖 Nordic、泰凌、瑞萨等厂商商用 BLE 协议栈,从无线底层链路层入手,从零手写 BLE 广播扫描逻辑,拆解蓝牙广播包、信道切换、射频调度、广播数据解析完整流程,适合想吃透 BLE 底层、自主开发蓝牙工具、规避商用协议栈授权限制的嵌入式开发者。

相关推荐