藍芽電話協定HFP(Hands-Free Profile) SCO建立/釋放/在通話中Audio transfer

2020-10-16 22:00:43

零. 概述

由於HFP feature小節太多,所以我們計劃本章把相近的feature合併,本文章主要講下電話擴音協定HFP(Hands-Free Profile)Audio Connection handing以及Audio Connection transfer during an outgoing call,就是一下HFP feature中的NO.3跟NO.7。

其中Audio Connection handing包括:

1)Audio Connection set up(建立SCO連線)

2)Audio Connection release(斷開SCO連線)

3)Codec Connection set up(Codec建立)。

其中Audio Connection transfer during an outgoing call包括:

1)Audio Connection transfer towards the HF(建立SCO連線)

2)Audio Connection transfer towards the AG(斷開SCO連線)。

另外,這兩個feature我也錄製了btsnoop,在資料中的...\STM32_UBUNTU_BLUETOOTH\2-藍芽資料\藍芽協定分析hfp_audio_transfer.log,還生成了流程圖等。

一. 宣告

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

第一篇:藍芽綜合介紹 ,主要介紹藍芽的一些概念,產生背景,發展軌跡,市面藍芽介紹,以及藍芽開發板介紹。

第二篇: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學院連結(進入選擇你想要學習的課程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

藍芽交流扣扣群:970324688

Github程式碼:https://github.com/sj15712795029/bluetooth_stack

入手開發板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

藍芽學習目錄https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

--------------------------------------------------------------------------------------------------------------------------

二. Audio Connection handing介紹

Audio connection handing分為3個部分介紹,audio connection大家要通過看HCI protocol中的SCO才能知道,我來給大家用最簡短的概括,說白了就是一個資料通道,主要傳輸電話音訊資料。

2.1 Audio Connection set up

Aududio connection HF & AG都可以建立.

1) 從AG建立audio connection如圖所示

Btsnoop流程如下:

2) 從HF建立audio connetion的過程如下:

AT+BCC (Bluetooth Codec Connection)

這個AT command主要是觸發AG來建立codec connection

流程如下:

2.2 Audio Connection release

HF和AG都可以主動斷開SCO,主動斷開通過HCI command ,remote斷開會收到HCI disconnect的event

2.3 Codec Connection set up

Codec connection的建立也很簡單,在SLC建立得而時候如果傳送過AT+BAC,那麼AG會傳送+BCS選擇codec id,HF回覆AT+BCS回覆相同得而codec id,然後AG回覆OK

三. Audio Connection transfer during an outgoing call介紹

3.1 Audio Connection transfer towards the HF

3.2 Audio Connection transfer towards the AG

此部分比較簡單,transfer towards to the HF就是建立SCO,transfer towards to the AG就是斷開SCO,不再重複