当前位置:   article > 正文

经典蓝牙连接过程_蓝牙配对流程

蓝牙配对流程

ACL是连接基础,sco需要再ACL连接成功后建立连接。基本链接流程如下:

一、创建连接

从用户点击扫描到的蓝牙设备开始,发起连接的设备会发送create_connection给controller。controller会进行page过程。

 而后会底层链接完成,这个完成仅仅是确认两边连接请求的一次交换。

二、Feature交换

 连接完成后,进行两端的物理层功能交换。确定能力一致性。中间也会针对物理层策略进行配置:Master/slave switch; hold mode; sniffer mode ;Remote name、remote version等。

 

三、配对 

最早的配对是采用输入pin码的形式,但是手机上大多是采用simple pair的方法.对于非首次连接的设备,配对的过程,所谓交换安全密钥的过程就不再必要,可以直接跳过。

配对可以分为四个阶段:

1.配对信息交换:确认使用simple pair,pin或是其他方式进行认证

2.链路认证:这一过程在确认认证方式后,用户需要主动健全的操作,如点击接受配对请求、输入pin码等

3.密钥分配:基于随机数,pin码,mac等信息生成LTK。确认共同的密钥

4.绑定:双方保存了对方的密钥信息,类似wifi的保存AP形式

 

 simple pair

 

 这里发送的user confirmation也代表首次链接时,用户点击accpet对话框的一个标志。

 Simple pair以发起认证,link key互换,IO信息交换,用户点击接受连接位置,代表simple pair完成。

代码实现

有些类画的不是那么准确但是整体流程是通的,bonded之后就是各profile连接,而后settings上回显示已连接

四、Profile连接

说明几个主要profile的连接过程。对于手机而言,蓝牙连接成功标志为配对后某个profile连接完成,即便后续几个profile还在连接中。代码如下:CachedBluetoothDevice.java

  1. public boolean isConnected() {
  2. synchronized (mProfileLock) {
  3. for (LocalBluetoothProfile profile : mProfiles) {
  4. int status = getProfileConnectionState(profile);
  5. if (status == BluetoothProfile.STATE_CONNECTED) {
  6. return true;
  7. }
  8. }
  9. return false;
  10. }
  11. }
  • HFP

HFP连接首先进行SDP服务发现过程,分配逻辑信道后开启连接。由于HFP基于Rfcomm实现,所以需要先行建立rfcomm连接.

 Rfcomm连接开启先基于sdp申请的CID在L2CAP进行连接和信息交换。

 由于Rfcomm不止围绕HFP一个profile服务(还有opp等),在rfcomm完成后,还需要进行HFP连接,这其中的部分连接过程如下所示:

 基于音频基础理论,两端是被进行音频传输前,需要统一支持的编码格式,采样率,控制语义等,在HFP中进行了这些信息的交换。

  • A2DP/AVRCP

A2DP作为重要的profile,基于的协议为AVDTP。在SDP发现后,同样进行L2CAP的连接后,才能进行上层profile的连接。

 同样需要进行音频信息的交换,HFP的音频参数不能和A2DP复用并且基于profile的独立规则,需要再进行一次音频信息交换.个人理解,HFP主要保证音频传输稳定性,A2DP则需要提升音频细节,需要采用不同的编码和采样率。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/192139?site
推荐阅读
相关标签
  

闽ICP备14008679号