主要介紹下藍牙協(xié)議棧(bluetooth stack)傳統(tǒng)藍牙音頻協(xié)議之高質(zhì)量音頻分布協(xié)議(A2DP) 連接播放音樂斷開流程(被連接)介紹
?
本專欄文章我們會以連載的方式持續(xù)更新,本專欄計劃更新內(nèi)容如下:

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

-------------------------------------------------------------------------------------------------------------------------
CSDN學(xué)院鏈接(進入選擇你想要學(xué)習(xí)的課程):
藍牙交流扣扣群:970324688
Github代碼:
入手開發(fā)板:
藍牙學(xué)習(xí)目錄:
--------------------------------------------------------------------------------------------------------------------------
此部分就不再整理從HCI到L2CAP到AVDTP連接的過程,直接貼出來AVDTP以及A2DP的交互

步驟1)手機發(fā)起AVDTP discover命令來問詢開發(fā)板支持的SEID,開發(fā)板回復(fù)
步驟2)手機根據(jù)SEID來獲取SEP的可配置信息,開發(fā)板回復(fù)
步驟3)手機來設(shè)置播放的一些參數(shù)(采樣率,通道數(shù),位寬等),開發(fā)板回復(fù)
步驟4)手機開打開SEP,開發(fā)板回復(fù)
步驟5)手機發(fā)送Start指令準備播放音樂,開發(fā)板回復(fù)
步驟6)手機發(fā)送音樂
步驟7)手機暫停播放,開發(fā)板回復(fù)
步驟8)手機關(guān)閉SEP,開發(fā)板回復(fù)
我們來一一解釋下步驟:

①?手機發(fā)送AVDTP discover命令問詢開發(fā)板支持的SEID

② 目前開發(fā)板我只寫了SBC編解碼,所以只有一個SEP,開發(fā)板回復(fù)給手機

由于我寫的協(xié)議棧目前只是注冊一個SEID,所以這里的回復(fù)是只回復(fù)了一個

① 手機發(fā)送Get All Capabilities來獲取開發(fā)板支持的配置

② 開發(fā)板回復(fù)支持的配置

注意此部分是A2DP注冊的,也就是說開發(fā)板告知手機我都可以支持哪些配置,其中的配置就是A2DP media information element,格式如下:

那我們填寫的配置參數(shù)是:
static const uint8_t sbc_snk_codec_caps[] =
{
AVDTP_AUDIO<<4,
AVDTP_CODEC_SBC,
A2DP_SBC_48000|A2DP_SBC_44100|A2DP_SBC_32000|A2DP_SBC_16000|\
A2DP_SBC_JOINT_STEREO|A2DP_SBC_STEREO|A2DP_SBC_DUAL_CHANNEL|A2DP_SBC_MONO,
A2DP_SBC_BLOCK_LENGTH_16|A2DP_SBC_BLOCK_LENGTH_12|A2DP_SBC_BLOCK_LENGTH_8|A2DP_SBC_BLOCK_LENGTH_4|\
A2DP_SBC_SUBBANDS_8|A2DP_SBC_SUBBANDS_4|A2DP_SBC_ALLOCATION_METHOD_LOUDNESS|A2DP_SBC_ALLOCATION_METHOD_SNR,
SBC_SNK_MIN_BITPOOL,
SBC_SNK_MAX_BITPOOL,
};

① 手機根據(jù)我們支持的配置參數(shù)選擇一種配置

可以看到手機選擇SBC codec,雙聲道立體音,44.1kHz的采樣率等
② 開發(fā)板回復(fù)手機


① 手機打開SEP

② 開發(fā)板回復(fù)


① 手機發(fā)送start指令

此命令是手機從播放器點擊播放按鈕,發(fā)過來的指令,此命令收到后,后續(xù)手機就會持續(xù)不斷的網(wǎng)開發(fā)板發(fā)送音樂數(shù)據(jù)
② 開發(fā)板回復(fù)


此部分音樂流程我們在A2DP的時候已經(jīng)介紹

①?手機發(fā)送暫停指令

② 開發(fā)板接受


① 手機關(guān)閉SEP

此命令一般在A2DP斷開之前會發(fā)送
②?開發(fā)板接受
