关于蓝牙耳机通话,切换声音路径

今天遇到一个问题,不大不小:

1.声音从本机切换到蓝牙耳机
 (1)如果此时静音功能关闭,切换到BT耳机后,静音功能仍关闭,[静音]菜单显示正常,之后开启、关闭操作也正常;
 (2)如果此时静音功能开启,切换到BT耳机后,静音功能被关闭,但是[静音]菜单的显示仍然是开启,即:切换声音路径到BT耳机时,自动关闭了静音功能,但是[静音]菜单的显示没有响应的变化,导致错误。2.声音从蓝牙耳机切换到本机
 现象类似。

一路追踪代码,过程如下:
1. [静音]菜单的操作函数:mmi_ucm_set_mute()

2.切换声音路径的操作:
(1)mmi_ucm_bt_set_audio_path()-->
(2)mmi_bt_switch_voice_path_incall( )-->
(3)(*g_mmi_bt_scr_cntx.stack_cb_tbl.mmi_bt_switch_voice_path_incall) (is_on);   is_on=1表示切换声音到蓝牙耳机。这是个函数指针,在函数
mmi_bt_init_stack_cb()中调用mmi_bt_reg_stack_cb()注册的即:
(4)mmi_bth_switch_voice_path_incall()-->
(4-1)mmi_profiles_bt_connect_req(MMI_PROFILES_BT_HFP_SCO);     切换到蓝牙耳机
   mdi_audio_bt_open_stream()-->
 aud_send_bt_audio_open_req( )-->
 aud_send_msg_to_med( MSG_ID_MEDIA_BT_AUDIO_OPEN_REQ)

 底层aud_bt_main()函数接收到这个消息后,执行:
 aud_bt_audio_open_req_hdlr()-->
 aud_bt_hfp_open_req_hdlr()--> 执行if分支:
 aud_bt_hfp_sco_connect_req( )-->
 aud_bt_hfp_set_audio_path_on( )-->设置音频输出路径
 bt_hfg_send_sco_connect_req(MOD_MED, aud_bt_hfp_ctx.connect_id); 发送消息:MSG_ID_BT_HFG_SCO_CONNECT_REQ

 蓝牙返回MSG_ID_BT_HFG_SCO_CONNECT_CNF,在aud_bt_main()中被捕捉到,进入:
 aud_bt_hfp_sco_connect_cnf_hdlr() -->
 aud_send_bt_audio_open_ind( )-->
  aud_send_msg_from_med(MSG_ID_MEDIA_BT_AUDIO_OPEN_IND),进入函数:
  mdi_audio_bt_open_stream_ind()--即:(5)中所注册的回调函数
 aud_bt_hfp_set_audio_path(KAL_TRUE); 比较关键的函数
  aud_bt_hfp_set_audio_path_on();
              aud_bt_hfp_set_speech_path_on(); 先调用L1SP_MuteMicrophone(KAL_TRUE);开启静音,然后启动一定时器,定时器响应关闭静音!


(4-2) mmi_profiles_bt_disconnect_req(MMI_PROFILES_BT_HFP_SCO); 切换到本机
 mdi_audio_bt_close_stream( )-->
 media_aud_bt_audio_close( )-->
 aud_send_bt_audio_close_req( )-->
 aud_send_msg_to_med(MSG_ID_MEDIA_BT_AUDIO_CLOSE_REQ )

 底层aud_bt_main()函数接收到这个消息后,执行:
 aud_bt_audio_close_req_hdlr()-->
 aud_bt_hfp_close_req_hdlr( )-->
 aud_bt_hfp_set_audio_path( FALSE)--> 比较关键的函数!!!
  aud_bt_hfp_set_audio_path_off();
              aud_bt_hfp_set_speech_path_off();-->L1SP_MuteMicrophone(KAL_FALSE);  关闭静音功能!!!!!
 aud_send_bt_audio_close_cnf()-->
 aud_send_msg_from_med(MSG_ID_MEDIA_BT_AUDIO_CLOSE_CNF),进入函数:
 mdi_audio_bt_close_stream_cnf()--即:(5)中所注册的回调函数


(5)在函数mdi_audio_init_event_hdlrs()中注册了:
    SetProtocolEventHandler(mdi_audio_bt_close_stream_cnf, MSG_ID_MEDIA_BT_AUDIO_CLOSE_CNF);
    SetProtocolEventHandler(mdi_audio_bt_close_stream_ind, MSG_ID_MEDIA_BT_AUDIO_CLOSE_IND);
    SetProtocolEventHandler(mdi_audio_bt_open_stream_cnf, MSG_ID_MEDIA_BT_AUDIO_OPEN_CNF);
    SetProtocolEventHandler(mdi_audio_bt_open_stream_ind, MSG_ID_MEDIA_BT_AUDIO_OPEN_IND);
    以上4个响应函数都调用mdi_audio_bt_cntx.close_hdlr[profile]注册的函数。而这个函数的注册是在:InitProfileApp()-->
 mdi_audio_bt_init(BT_HFP, mmi_profiles_bt_open_stream_callback, mmi_profiles_bt_close_stream_callback);来完成的。
    即:mmi_profiles_bt_open_stream_callback( ),mmi_profiles_bt_close_stream_callback( )这2个函数是切换声音路径最后调用的函数。

(6-1) mmi_profiles_bt_open_stream_callback()--> 切换到BT耳机
 mmi_profiles_bt_connect_callback(MMI_PROFILES_BT_HFP_SCO, MMI_PROFILES_BT_RSP, res);-->
 mmi_bth_sco_connect_ind_hdler( )
  (*g_mmi_bth_cntx.scr_cb_tbl.mmi_bt_scr_cb_sco_ind)( ) 函数指针,即:mmi_bt_sco_ind(res)。res=1表示切换到BT耳机。
   如果当前开启免提,则把免提关闭;显示提示信息:声音转至免持装置。   
 然后启动定时器mmi_profiles_bt_sco_timeout(),定期检查蓝牙耳机是否断开,是的话执行mmi_profiles_bt_disconnect_sco()。

 (6-2)mmi_profiles_bt_close_stream_callback()--> 切换到本机
 mmi_profiles_bt_disconnect_callback(MMI_PROFILES_BT_HFP_SCO, MMI_PROFILES_BT_RSP, MMI_PROFILES_BT_OK);-->
 mmi_bth_sco_disconnect_ind_hdler()
  (*g_mmi_bth_cntx.scr_cb_tbl.mmi_bt_scr_cb_sco_ind)( ) 函数指针,即:mmi_bt_sco_ind(res)
   提示信息:声音转回手机端

   即:切换声音完成之后,都会进入函数mmi_bt_sco_ind()中,显示提示信息。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,我们可以得出以下结论: 根据引用\[1\],Android 11对蓝牙部分进行了改动,现在只要蓝牙打开了,状态栏右上角就会显示蓝牙图标。这意味着只要你的蓝牙设备已经连接成功,你就可以在状态栏上看到蓝牙图标。 引用\[2\]提到了一些关于蓝牙的技术细节,但与ap6256的蓝牙耳机通话没有直接关系。 引用\[3\]提到了关于蓝牙HFP(Hands-Free Profile)功能的更新,但没有提到ap6256的蓝牙耳机通话。 综上所述,根据提供的信息,我们无法确定ap6256的蓝牙耳机通话的具体情况。如果你有更多的信息或问题,请提供更多的上下文,以便我们能够更好地回答你的问题。 #### 引用[.reference_title] - *1* [[RK3568 Android11] 开发之蓝牙(AP6275S)](https://blog.csdn.net/soar999999/article/details/118652798)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [AP6356S蓝牙噪音解决方法](https://blog.csdn.net/ShiLianXin/article/details/101062291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IOT物联网小镇

赏点银子去植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值