0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在connected idle状态下向手机同步音量

蓝牙 来源:蓝牙 2023-10-20 12:22 次阅读

内容简介

在QCC517x/QCC518x新的ADK下,headset工程如果有音量加减事件,只有当前有A2DP播放音乐或者HFP通话状态下才会给手机发送事件,否则程序会忽略音量加减事件。本文介绍如何在connected idle状态下向手机同步音量。

测试工具

MDE:MDE_WIN_2.8.0.37_x64

Toolkit:ADK Toolkit 1.2.16.21_x64

QACT:NULL

Bluesuite:NULL

Hardware:Qualcomm QCC3084

Software:adk-src-1-0_qtil_standard_oem_qcc518x-qcc308x,ADK-23.1-CS1-r00593.1 headset

Here we go

分析

假设音量加减是通过ui_input_volume_down和ui_input_volume_up两个事件触发的,经过查阅代码发现,在volumeService_HandleUiInput中会对这两个事件进行处理:

3d88dcc4-6ea3-11ee-939d-92fbcf53809c.png

由上图代码可得知,在处理ui_input_volume_down和ui_input_volume_up之前,会先通过GenericSource_IsValid(source)函数去判断当前活跃的source是否有效,如果有效才会进行下一步的操作,如果无效就直接忽略了。

解决方法

所以要在手机有连接且没有音乐播放的情况下,如果要同步A2DP的音量,则需要在handle_ui_input为FALSE的情况下,对audio_source_a2dp_1和audio_source_a2dp_2进行音量加减操作即可。

所以在volumeService_HandleUiInput函数的末尾添加以下内容即可:

3d9d79c2-6ea3-11ee-939d-92fbcf53809c.png

else

{

if(ui_input ==ui_input_volume_up || ui_input == ui_input_volume_down)

{

bdaddr* bd_addr = NULL;

unsigned num_addresses= 0;

unsigned charnum_a2dp_connected = 0;

if(BtDevice_GetAllHandsetBdAddr(&bd_addr, &num_addresses))

{

bool isConnected =FALSE;

for(unsigned chari=0; i

{

isConnected =FALSE;

avInstanceTaskData *theInst =appAvInstanceFindFromBdAddr(&bd_addr[i]);

isConnected =theInst && appA2dpIsConnected(theInst);

if(isConnected== TRUE)

{

num_a2dp_connected++;

}

}

free(bd_addr);

bd_addr = NULL;

}

if(num_a2dp_connected>= 1)

{

source.type =source_type_audio;

source.u.audio =audio_source_a2dp_1;

step_size =VolumeService_GetUiStepSize(AudioSources_GetVolume(source.u.audio).config);

if(ui_input ==ui_input_volume_down)

{

step_size =-step_size;

}

VolumeService_ChangeAudioSourceVolume(source.u.audio, step_size);

}

if(num_a2dp_connected>= 2)

{

source.type =source_type_audio;

source.u.audio =audio_source_a2dp_2;

step_size =VolumeService_GetUiStepSize(AudioSources_GetVolume(source.u.audio).config);

if(ui_input ==ui_input_volume_down)

{

step_size =-step_size;

}

VolumeService_ChangeAudioSourceVolume(source.u.audio, step_size);

}

}

}

增加以上代码后同时连接两个手机测试,发现在当前没有audio输出的情况下,如果操作headset的音量加减按键,就会同时向两个手机发送音量加减指令了,如果当前有音乐播放,则继续按照原始程序进行操作。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 手机
    +关注

    关注

    34

    文章

    6684

    浏览量

    154978
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310
  • 测试工具
    +关注

    关注

    0

    文章

    42

    浏览量

    11849
  • ADK
    ADK
    +关注

    关注

    0

    文章

    7

    浏览量

    4924

原文标题:如何让QCC308x的headset工程实现在没有音乐播放情况下可以向手机上报音量加减的功能

文章出处:【微信号:TalkBT,微信公众号:蓝牙】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    电机在RUN状态下,堵转停住了的原因?

    电机在RUN状态下,堵转停住了,但是WB显示的状态IDLE;想请教一,一般来说电机堵转WB是不是应该报过流的错误?直接进入IDLE是不是
    发表于 04-15 06:49

    stm8L如何在ROP激活状态下,进行BootLoader的升级?

    求助:在stm8L如何在ROP激活状态下,进行BootLoader的升级。调试发现在ROP激活状态下,即使BOOTCLK_enable打开也无法进入boot模式,而是直接跳转进入USER CODE,不知道有什么办法可以在不解除读
    发表于 04-17 07:16

    关于CC1101的WOR问题,请问SLLEP状态下想切换进入WOR,是要先进入IDLE,然后延时发送sworrs以及swor指令吗?

    )时间后,开始进行event1,标定,发送;还是说直接就开始event1,标定,发送,然后再进入SLEEP?2、SLLEP状态下想切换进入WOR,是要先进入IDLE,然后延时发送sworrs以及swor指令吗?3、利用sidle推出wor后,wor的内部时钟是否还在计时
    发表于 06-06 06:37

    何在空闲状态下启动状态同步从FIFO线程寻址?

    我们有一个同步奴隶FIFO设置和运行在40兆赫,与主动线程选择的A0和A1引脚。似乎当在复位状态下启动状态机时,即使地址引脚表示,例如线程2,写入总是会转到线程0。但是,一旦PKONCE第一次声明
    发表于 04-03 14:09

    让电源在所有负载状态下都为连续

    滤波电容器。一种更简单的方法是让电源在所有负载状态下都为连续。图1是一个简单的同步降压转换器,用于演示输出电感中连续和非连续电流的负载瞬态响应。在低至空载的负载状态下,输出电感电流都一直保持连续,因为
    发表于 05-13 14:11

    何在远程状态下连续进行测量

    切换回本地状态时,电压读数不断变化(意味着连续进行测量),并且统计计数保持递增(直到达到极限)。我可以使用INIT命令在远程状态下进行一次测量,但不能像在本地状态那样连续进行测量。如何启用连续测量并获得
    发表于 05-14 11:26

    请问早期通电状态下io引脚的状态是什么?

    喜我在我的项目中使用xc7z020-clg484。早期上电状态下IO引脚的状态是什么?我期待所有IO引脚都处于高阻态,直到我在程序中用逻辑低电平或逻辑高电平初始化它?谢谢&问候卡萨拉加内什
    发表于 08-27 08:31

    资料下载:双馈异步发电机在超同步状态下的励磁

    同步状态下,相当于定子产生磁场,转子切割磁场产生产生电流通过转子绕组传电网。
    发表于 07-06 07:26

    ARM状态下的通用寄存器有哪些

    ARM状态下的通用寄存器有哪些?ARM状态下的程序计数器有哪些呢?
    发表于 10-21 06:47

    CH582M在连接状态下,如何快速断开连接进入广播状态

    582M 蓝牙键盘项目,蓝牙处于连接状态下,我想快速断开当前连接,并改地址进入广播状态,但蓝牙总进入Connected Advertising..,要等好久才会Advertising..。。在不擦除绑定信息的情况,有什么办法可以
    发表于 08-01 07:34

    如何实现电路工作状态下的要求?

    初始状态:k1断开灯泡1亮k2断开灯泡2灭工作状态:k1闭合灯泡1要求要亮(这个要怎么实现)?k2闭合灯泡2亮请问这个对于新手的我该如何实现电路工作状态下的要求?感谢你们的回答
    发表于 12-02 17:58

    请问如何在运行调试状态下观察FreeRTOS的运行参数?

    STM32F103RE+FreeRTOS+MDK5+STlink21,如何在调试运行状态下观察:堆栈使用、任务资源使用等参数? 2,已经在FreeRTOSConfig.h中打开以下
    发表于 09-28 06:01

    三星可折叠手机在折叠状态下会变得像一个4英寸屏的手机

    爆料称,三星可折叠手机的屏幕分别为4.6英寸、7.3英寸:主屏展开尺寸为7.3英寸,折叠状态下则会变得像一个4英寸屏的手机。这样的设计也带来了手机整体厚度和价格的增加。
    发表于 11-06 10:04 638次阅读

    华为手机解锁状态下抬手直接就能付款

    据数码博主@长安数码君爆料,华为智感支付功能目前已支持微信支付,手机解锁状态下抬手直接就能付款。
    的头像 发表于 01-15 13:51 4346次阅读

    NB-IoT终端在不同工作状态下的简要分析

    1.NB-IoT在发送数据时处于激活状态,超过非活动计数器配置的超时时间后,将进入Idle空闲状态; 2.eDRX机制是在一个完整的Idle过程中引入的,包括几个eDRX周期。eDRX
    发表于 07-02 15:08 782次阅读