android蓝牙连接过程分析(四.2)--配对流程

本文详细分析了Android蓝牙连接过程中配对的步骤,包括创建安全管理设备记录、发送连接请求、授权认证以及配对状态的转变。在连接流程中,蓝牙设备的名称获取、专用ACL通道创建、L2CAP通道标记、鉴权前的准备工作和授权阶段被逐一详解。当没有Link Key时,系统将进入配对流程,以获取Link Key进行后续的连接操作。
摘要由CSDN通过智能技术生成

这个函数里,调用了两个函数,btm_process_remote_name:处理获取到的远端设备名称,我们之前介绍过

重点看下btm_sec_rmt_name_request_complete

这个函数首先创建一个tBTM_SEC_DEV_REC结构体p_dev_rec,也就是安全管理设备记录表,将对端蓝牙设备加入到这个record记录中,并且保存获取到的远端设备的名字到p_dev_rec的sec_bd_name这个成员中,同时将p_dev_rec的标志位设置为BTM_SEC_NAME_KNOWN

然后最重要的就是继续去创建连接,也就是和我们连接流程的第三步也就是connection request对应起来了,在这里调用btm_sec_dd_create_conn发送连接请求给到对端蓝牙设备

函数主要为绑定连接进程创建一条专用的acl通道,我们知道,根据之前的连接流程,当对端蓝牙设备接受连接请求后,就要开始授权认证了,所以,这里最后将配对状态改为BTM_PAIR_STATE_WAIT_PIN_REQ,也就是一切顺利,就进行授权认证

当我们发送完connection request命令后,controller会上报一个连接请求完成的事件,表示连接的完成

这个函数中,调用两个函数btm_sec_connected,l2c_link_hci_conn_comp,我们一个个分析

这个函数比较复杂,我们一段段来分析,首先在设备数据库中查找是否存在这个地址的设备的记录,如果没有,则申请一个空间,将这个设备记录,这个动作之前已经做过

创建一个专用的l2cap通道,用于进行绑定连接操作,并且将这个l2cap通道进行标记

然后调用btm_acl_create函数,表示对端蓝牙接收了连接请求,也就是我们蓝牙连接流程的第四步中的接受连接请求的情况,我们深入到这个函数里面

btm_acl_created函数发送请求远端蓝牙设备进行始终同步的请求,以及发送读取远端蓝牙版本信息的请求,回看我们的蓝牙连接流程的第五步,option AFH,在这里就是获取对方蓝牙设备的一些特性

在这里继续发送命令读取对端蓝牙设备的feature,可以看到,这些都是鉴权前的准备工作,和我们说的连接流程相一致

在这里,我们之前已经完成了名字的获取,所以这里省略,然后就是进行授权了,这里也就是我们连接流程的第六步了,进行授权,根据这个蓝牙设备的记录的安全标志位为BTM_SEC_AUTHENTICATION,需要进行授权,调用btm_sec_start_authentication

btm_sec_execute_procedure这个函数表示我们连接流程的第八,九步,表示以后需要做的事情,因为我们现在还在第六步授权阶段,即将要做的是授权

前面我们说过btu_hcif_connection_cmpl_evt中有两个函数,接下来介绍第二个,l2c_link_hci_conn_comp,之前我们不是建立一个l2cap专用通道吗,这里通过对端蓝牙地址获取这个链路控制块句柄,然后设置这条链路状态为已连接

这里主要对这条专用绑定连接链路做一些设置,设置监督链路超时时间,向对端设备发送回显请求,确认链路的连通性,等等

根据我们的连接流程,前面6步我们都完成了,那么这里就进入到了我们的配对流程,之前也介绍过,配对的主要作用就是获取link key,当host发送authentication请求后,controller会向host发送event,请求获取link key

在里面继续调用btm_sec_link_key_request

这个函数判断是否有link key,在连接流程中,我们也说过,

如果第一次连接,没有link key,host会返回Hci_Link_Key_Request_Negative_Reply,需要进行配对,

如果有link key的话,表示以前已经连接过,host会返回Hci_Link_Key_Request_Positive_Reply,也就是会调用btsnd_hcic_link_key_req_reply发送,不需要进行配对操作,直接可以连接成功

这里我们假定是第一次连接,需要进行配对

这里我们就介绍了蓝牙连接流程的前六步,也就是配对前的步骤,基本上和我们的连接流程吻合,接下来就是介绍配对流程了,下期再说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识分享小达人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值