一.AVCTP
架构位置:
可以看到AVCTP的位置,其UL为ACRVP,底层则接L2CAP。
二.介绍
AVCTP上承AVRCP,下接L2CAP。其本身不做具体的数据定义,主要的作用是利用L2CAP提供的面向连接的信令通道,定义了在TG和CT之间的数据传输方式以及数据包的总格式。为UL AVRCP提供传输方式,并且对AVRCP中定义的各种控制指令进行二次封包后,经过L2CAP传输给对方。比较需要注意的点如下:
①其由L2CAP 建立channel,使用signaling channel进行数据传输
②TG和CT双方都需要支持AVCTP
③在两个设备之间,多AVCTP连接是存在的。每一个AVCTP连接都需要建立自己的L2CAP signaling channel 以及独有的PSM值。一个AVCTP对应一个PSM对应一个ACL
三.封包格式
两种封包格式:
一种不需要分割:
很明显,不需要分割的封包大小size小于L2CAP MTU。
需要分割的封包:
可以看到三个包类型,Packet_type不一样。Packet_type为01的为起始包,其中多了一个8字节字段Number of AVCTP Packets,代表本次发送一共有多少个AVCTP包。后面的Packet_type为10,Packet_type为11则分别对应继续包和结束包了。
四.空包分析
举一个AVCTP包例子如下:
这个包为CT 通过AVRCP发送播放命令给TG。
右边框图中,红色为AVCTP封包定义。蓝色和绿色就是AVRCP的数据结构了。红框具体的数据结构定义请自查手册。
可以了解到,AVCTP只是一个搬运工,加点自己的修饰,就通过L2CAP往下层传输。
五.空包连接分析
①通过L2CAP建立signaling channel,确定INT和ACP两边的CID
②AVRCP发送Get Capabilities command获取ACP的能力集
在这一层中,更能体现AVCTP的位置,只是对AVRCP进行一个二次封包动作。
至此,CT与TG之间已经正常连接通讯了
③发送设置音量指令