一.连接
AVRCP的连接由底层AVCTP管理。如果需要了解AVRCP的底层实际连接流程,可以查阅AVCTP即可。这里只讲解AVRCP 连接,释放,发送command等调用逻辑,不讲具体的底层连接流程。
可以看到CT与TG之间可以建立两条channel。一个用于控制,一个用于browsing。用于control 的channel是必选项,且必须第一时间建立,用于browsing的channel是可选项。不过profile中建议如果有使用到browsing channel,则最好也同时建立。CT/TG双方都可以主动建立连接。
二.释放
释放流程需要注意的就是如果有browsing channel则先释放browsing channel再释放control channel。
三.发送命令
CT先发command给TG之后,TG会回发interim response。当有事件发生时,TG会主动通知CT对应的事件变化值
四.命令类型
一共就三种command类型。AV/C commands/Browsing commands/Cover Art commands。
AV/C commands在TWS和手机连接场景使用得最多。这里要注意的是AVRCP specific AV/C commands,其使用AV/C Vendor Dependent Opcode以及Vendor Unique PASSTHROUGH operation id。需要注意与PASSTHROUGH commands, UNIT and SUBUNIT INFO commands区分开。
Browsing commands使用AVCTP browsing channel,其独立于AV/C层。
Cover Art commands较多定义于BIP profile中。
五.AV/C command
如下为一些AV/C command 类型,这几个一般在AVRCP中使用。
UNIT INFO/SUBUNIT INFO command主要是用于获取TG中的一些参数信息,比如vendor ID等。
VENDOR DEPENDENT command主要是为了扩展使用,一些供应商可以定义自己的command以及responses.
PASS THROUGH command是必选项,在CT以及TG中都需要配置该command。且AVRCP中最常用的就是PASS THROUGH command。
六.TG提供的通知(notify)能力
①一般的也就是音乐播放的一些功能,类如播放/暂停/停止,上一曲/下一曲,播放进度条变化,音量变化。比较特殊的有,TG外设的拔插事件,UDIs变化,播放目录变化等。
②每次事件变化,TG上报给CT之后,CT需要重新注册通知。也就是一次注册通知只对应一次上报。
③通知的交互流程如第三节图书所示,notify->interim->change
七.连接空包分析
①建立AVCTP control channel
②获取TG端上报event能力集,可以看到TG支持列表
③注册PlayBack事件,注册音量变化事件
八.事件通知流程
一.播放暂停举例
红色框为CT向TG注册PlayBack事件通知,TG收到之后都回复了interim命令
绿色框为CT向TG发送播放/暂停对应的passthrough command事件
蓝色框为TG端向CT上报PlayBack事件改变通知
可以看到,每次事件变化后CT都会重新注册需要通知的事件。且此空包是从CT端发送passthrough command事件控制TG端,TG端后才上报PlayBack事件通知。可以看到灰色框中时间戳,AV/C change事件都是滞后于Notify/Interim事件才发送的。
如果是有手机端(TG)控制发送播放/暂停,则就是少了CT端发送passthrough command。
二.音量变化举例
红色框为手机端(CT)向TG注册音量变化事件
蓝色框为TG端,音量变化时,主动向手机端(CT)发送音量变化值
这是从TG端看音量变化时,事件的发送流程
从CT端则比较简单粗暴,直接发送control command即可