蓝牙AVRCP协议解析
在這里討論藍牙的AVRCP協議,要理解AVRCP,需要先了解AVCTP;
?
我們分兩個部分來進行;
1、AVCTP協議;
2、AVRCP協議;
?
下面先來看AVRCp協議:
?
一、概述
1、定義
AVCTP(Audio/Video Control Transport Protocol Specification)音頻/視頻控制傳輸協議是一個框架協議,描述藍牙設備間Audio/Video的控制信號交換的傳輸機制,具體的控制信息(編碼和格式)由其指定的協議(如AVRCP)實現,AVCTP本身只指定控制command和response的總體的格式,AVCTP是建立在L2CAP上的;
?
2、角色
AVCTP分為兩個角色,CT(The Controller)是命令的發起方,命令接收方是TG(The target),如下圖:
AVCTP通信要求已經建立了ACL鏈接,AVCTP交互是在面向連接的通道中的雙向通信,
?
?
?
3、通信過程
首先會有CT發起通信,發送命令道TG端;
一個完整的AVCTP消息包含一個指定TG地址的命令,然后由TG端回復消息,AVCTP不會控制命令或響應的順序或定義CT/TG的行為,大體流程可參照下圖:
因為AVCTP是建立在不可靠的ACL上,所以存在命令收不到應答的情況,命令的重發不是必須的,這個由應用層開發者決定;
?
4、通信模式
在AVCTP中,bit和byte傳輸時采用大端模式,即高字節在左側;
?
二、AVCTP消息包格式
1、概述
AVCTP命令或應答在傳輸時是包含在一個或多個AVCTP packets中,這些包中包含AVCTP header和多個消息體部分,但是在AVCTP中并未定義length域,它是依靠L2CAP層去限制發送的包數,所以AVCTP也需要遵循L2CAP協議長度的相關定義;
?
2、消息格式
大部分的AVCTP命令以負載的方式通過單一L2CAP包傳輸,但也有少數大信息AVCTP包需要被拆分,通過多個L2CAP包傳遞出去,下面我們分別來看這兩種包格式
?
a、不拆分的包格式,見下圖:
?
?
格式中bit含義spec中都有說明,我們再詳細看下;
TL占用了4bit,它是通信中標識唯一的tag,由應用層給出其值;
PT是包類型,PT=0時表示開始包,PT=10表示中間包,PT=11表示結束包,在非拆分包中,PT=0;
IPID只有在響應為無效包時才會置位1,其他情況都為0;
?
?
?
上圖顯示了幾個信息:
(1) AVCTP header為3字節;
(2)不拆分的AVCTP包不能大于L2CAP的MTU大小;
?
?
b、拆分包格式,如下圖:
?
可以看到拆分包格式start packet多了一個字節,Number of AVCTP Packets,continue packet 和end packet去掉了IPID和PID字段,AVCTP通過L2CAP層保證包的每個包的完整性及傳遞順序,但無法保證所有包的完整性;由于信道的不穩定性,可能會產生AVCTP丟包,我們看下拆包AVCTP在L2CAP的拆包方式,如下圖:
?
?
3、AVCTP Message Information Part的說明
這部分可以包含不定長度的命令或應答幀;
其具體格式需要參照具體的profile,如AVRCP,AVDTP等;
?
三、總結
好了,分析到這里相信大家對AVCTP有了比較不錯的認識,其實AVCTP就是定義了一個通信框架,它定義好了packet heaeder,定義好了與L2CAP層的傳輸機制,剩下的數據域(AVCTP Message Information Part)就需要參考其他profile來填充;
AVCTP提供了一組Upper Interface,作為一組測試接口,也可作為其他應用協議的接口,這里就不去看了,感興趣的可以自己翻一下spec;
下一篇我們將一起來看下AVRCP協議,希望大家多多支持;
總結
以上是生活随笔為你收集整理的蓝牙AVRCP协议解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 同步锁死锁,Androi
- 下一篇: 工具分享 --- 分享一个在线制作ic