主要介紹下藍牙協議棧(bluetooth stack)傳統藍牙音頻協議之 音視頻分布傳輸協議的命令封包介紹,包括下圖所示:

一. 聲明
本專欄文章我們會以連載的方式持續更新,本專欄計劃更新內容如下:

第一篇:藍牙綜合介紹 ,主要介紹藍牙的一些概念,產生背景,發展軌跡,市面藍牙介紹,以及藍牙開發板介紹。
第二篇:Transport層介紹,主要介紹藍牙協議棧跟藍牙芯片之前的硬件傳輸協議,比如基于UART的H4,H5,BCSP,基于USB的H2等
第三篇:傳統藍牙controller介紹,主要介紹傳統藍牙芯片的介紹,包括射頻層(RF),基帶層(baseband),鏈路管理層(LMP)等
第四篇:傳統藍牙host介紹,主要介紹傳統藍牙的協議棧,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的協議吧。
第五篇:低功耗藍牙controller介紹,主要介紹低功耗藍牙芯片,包括物理層(PHY),鏈路層(LL)
第六篇:低功耗藍牙host介紹,低功耗藍牙協議棧的介紹,包括HCI,L2CAP,ATT,GATT,SM等
第七篇:藍牙芯片介紹,主要介紹一些藍牙芯片的初始化流程,基于HCI vendor command的擴展
第八篇:附錄,主要介紹以上常用名詞的介紹以及一些特殊流程的介紹等。
另外,開發板如下所示,對于想學習藍牙協議棧的最好人手一套。以便更好的學習藍牙協議棧,相信我,學完這一套視頻你將擁有修改任何協議棧的能力(比如Linux下的bluez,Android下的bluedroid)。

-------------------------------------------------------------------------------------------------------------------------
CSDN學院鏈接(進入選擇你想要學習的課程):
藍牙交流扣扣群:970324688
Github代碼:
入手開發板:
藍牙學習目錄:
--------------------------------------------------------------------------------------------------------------------------
每個AVDTP端都會注冊一個或者多個SEP,通過SEID來標示,這個命令就是獲取對端的SEP信息,包括SEID(SEP的ID),In Use(是否被使用),Media Type(Audio,Media,MultiMedia),TSEP(角色是Sink還是Source),流程如下:

AVDTP_DISCOVER_CMD這個命令是獲取到remote端所有的SEP的信息,格式如下:

AVDTP_DISCOVER_RSP是對AVDTP_DISCOVER_CMD的回應。Payload中帶有所有SEP的信息

SEID:SEP的ID,可用值是0x1~0x3e

In Use:表示這個SEP是否被使用

Media Type:用于表示type,0為audio,1為video
TESP:用于表示是SRC還是SNK


這個命令以及被舍棄,之所以保留繼續寫是為了舊設備的兼容性。
此命令是通過SEID來獲取對方的Capabilities,其中Capabilities在前面已經介紹,我們來看下程序流程



AVDTP_GET_CAPABILITIES_RSPP是對AVDTP_GET_CAPABILITIES的回應,其中Service Capabilities已經上一篇介紹。

此命令是用于取代Get Capabilities,同樣是通過SEID來獲取對方的Capabilities,其中Capabilities在前面已經介紹,我們來看下程序流程:



其中Service Capabilities在以上章節已經說明。

在獲取Capabilities后,此部分就是選擇特定的功能參數,程序流程如下:


其中Service Capabilities已經上一篇介紹。


此命令用于根據SEID來獲取配置,程序流程如下:




此命令用于重新配對設置,程序流程如下:




此命令用于打開某一個SEID,程序流程如下:




此命令用于開啟一個SEID的media傳輸,程序流程如下:




此命令用于關閉一個media傳輸,程序流程如下:




此命令用于暫停一個media的傳輸,程序流程如下:




此命令用于終止程序,在任何狀態都可以下,程序指令流程如下:



程序流程如下:





程序流程如下:




?