接上一篇蓝牙btsnoop log,hci 连接流程详解_一叶知秋之味的博客-优快云博客
1.蓝牙建立连接,鉴权认证完成后,L2CAP发起了SDP的连接,建立CID
2.SDP先去发现对方的pnpinfo,获取供应商名称和版本号等信息,SDP 格式对应一组 SDP_SERVICE_SEARCH_ATTR_REQ/ SDP_SERVICE_SEARCH_ATTR_RSP,如果一次不能传输完数据,会继续continuation
3.SDP完 pnpinfo后,L2CAP断开了SDP的CID,SDP可以发起多次,L2CAP继续发起SDP,去获取L2CAP支持哪些特征
4.SDP在持续的continuation完L2CAP 后,得到完整的 Service Record Attributes
5.A2DP两个角色,audio sink ,audio source,手机做audio source,播放设备做sink端,从L2CAP中也可以看到对端支持audio sink,所以手机端继续SDP audio sink,获取版本信息等,对端设备也会过来SDP 手机的audio source,获取source端的信息
6. 手机端SDP完sink后发起AVDTP的建立,AVDTP和AVRCP为A2DP的底层协议,AVDTP 数据流,AVRCP控制流;AVDTP数据流也有自己的控制信息,所以AVDTP会建立两条CID,第一条用来控制信息的交互
7.第一条AVDTP建立完成之后进行开始音频数据流的建立,host发起DISCOVERY,controller返回对方支持的编码stream有几种
8. 继续对每一个stream发起AVDTP_GET_ALL_CAPABILITIES,得到编码详细信息
9.get完所有支持的编码,host端根据优先级选择自己想要的编码进行set 编码AVDTP_SET_CONFIGURATION
10.set编码完成后,此时会去AVDTP OPEN,去打开音频流到挂起状态,start播放,suspend暂停
11.open完成之后L2CAP同步建立第二条AVDTP
12. AVDTP音频流建立完成后,开始建立AVCTP,AVRCP依赖于AVCTP
13.AVCTP建立完成,AVRCP两个角色CT 、TG,一般情况下手机做TG端,对端做CT端,手机host再次发起SDP,去获取CT端profile的详细信息,对端也会来获取手机做TG端的版本信息等
SDP完成后正式开启基于AVCTP进行的AVRCP的数据交互,整个a2dp连接完成,下篇讲下AVRCP控制信息交互流程