赞
踩
ACL是连接基础,sco需要再ACL连接成功后建立连接。基本链接流程如下:
从用户点击扫描到的蓝牙设备开始,发起连接的设备会发送create_connection给controller。controller会进行page过程。
而后会底层链接完成,这个完成仅仅是确认两边连接请求的一次交换。
连接完成后,进行两端的物理层功能交换。确定能力一致性。中间也会针对物理层策略进行配置: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形式
这里发送的user confirmation也代表首次链接时,用户点击accpet对话框的一个标志。
Simple pair以发起认证,link key互换,IO信息交换,用户点击接受连接位置,代表simple pair完成。
有些类画的不是那么准确但是整体流程是通的,bonded之后就是各profile连接,而后settings上回显示已连接
说明几个主要profile的连接过程。对于手机而言,蓝牙连接成功标志为配对后某个profile连接完成,即便后续几个profile还在连接中。代码如下:CachedBluetoothDevice.java
- public boolean isConnected() {
- synchronized (mProfileLock) {
- for (LocalBluetoothProfile profile : mProfiles) {
- int status = getProfileConnectionState(profile);
- if (status == BluetoothProfile.STATE_CONNECTED) {
- return true;
- }
- }
-
- return false;
- }
- }
HFP连接首先进行SDP服务发现过程,分配逻辑信道后开启连接。由于HFP基于Rfcomm实现,所以需要先行建立rfcomm连接.
Rfcomm连接开启先基于sdp申请的CID在L2CAP进行连接和信息交换。
由于Rfcomm不止围绕HFP一个profile服务(还有opp等),在rfcomm完成后,还需要进行HFP连接,这其中的部分连接过程如下所示:
基于音频基础理论,两端是被进行音频传输前,需要统一支持的编码格式,采样率,控制语义等,在HFP中进行了这些信息的交换。
A2DP作为重要的profile,基于的协议为AVDTP。在SDP发现后,同样进行L2CAP的连接后,才能进行上层profile的连接。
同样需要进行音频信息的交换,HFP的音频参数不能和A2DP复用并且基于profile的独立规则,需要再进行一次音频信息交换.个人理解,HFP主要保证音频传输稳定性,A2DP则需要提升音频细节,需要采用不同的编码和采样率。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。