XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX 作 者:ZHS(文化人)
XX 联系方式:文章末尾Chat快问
XX 版权声明:原创文章,欢迎评论和转载~转载时能告诉我一声就最好了
XX 要说的话:作者水平有限,难免有不足之处,恳请指正!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
写在前面:最近看了有关TWS的部分,梳理了tws模式下peerdevice设备之间的音量调节过程,想要发送数据,可以类比封装数据的接口;
1、与设备音量有关的UE事件有这样四个:
EventUsrMasterDeviceTrimVolumeUp //音量的UE事件
EventUsrMasterDeviceTrimVolumeDown
EventUsrSlaveDeviceTrimVolumeUp
EventUsrSlaveDeviceTrimVolumeDown
在main.c中handleUEMessage()的处理,统一调用接口:
VolumeIfAudioRoutedModifyAndUpdateTWSDeviceTrim(dir,tws_device);
a2dpCheckDeviceTrimVol(dir,tws_device);
2、a2dpCheckDeviceTrimVol(dir,tws_device)中;
1)首先第一个参数必须是主机或者从机
2)然后分别check主机和从机
3)是否有a2dp建立连接
4)check当前是否a2dp连接、音频流、是否配置audio的routed
5)判断是主机还是从机?
3、主机,也就是本地设备
VolumeModifyAndUpdateTWSDeviceTrim(dir,tws_device);//主机
VolumeModifyAndUpdateRoutedAudioVolume(); //调节本地音量
4、从机,也就是远端设备
peerSendDeviceTrimVolume(dir,tws_device); //从机组包发送数据
avrcpGetPeerIndex(&avrcp_index); //是否存在peer连接
sinkAvrcpVendorUniquePassthroughRequest(); //发送数据
5、主机端会通过下面的接口接收到tws的数据:
handleAvrcpVendorUniquePassthroughInd(); //主机接收数据
AVRCP_PEER_CMD_UPDATE_TRIM_VOLUME:
peerUpdateTrimVolume();
MessageSend();
EventUsrMasterDeviceTrimVolumeUp//音量的UE事件
EventUsrMasterDeviceTrimVolumeDown
EventUsrSlaveDeviceTrimVolumeUp
EventUsrSlaveDeviceTrimVolumeDown
然后再次1—>2—>3步骤调节本地音量
总结,tws间音量调节的过程应该是主机接收到指令就是直接调节本地;若是从机接收到指令,就发送peer指令给主机,然后主机再调节本地;本质都是通过调节a2dp音源的输入音量trim值来调节最终输出的声音大小。
同理可以封装TWS数据交互接口: