客户问如何禁止来电时耳机端播放的手机铃声,只播放耳机端默认铃声?
1、答案适用范围
a、以下解释支持芯片CSR8670/5、QCC300X、QCC302X、QCC512X
b、支持ADK4.x、ADK6.2+、ADK1.0 Sink Project
2、什么是in-band铃声
简单说就是同苹果铃声一样的,来电时手机端设置铃声将会发送到耳机端播放。Android8版本以后也已经支持。较新版本的手机都支持该功能。
3、耳机端如何识别确认是否支持该功能
默认配置耳机端是支持该功能的。在HFP init时ag_supported_features直接赋值AG_IN_BAND_RING
4、关闭功能实现代码
代码只是强制关闭了该功能。可在此基础上按照各自需求调整效果.依此为基础同理可以去推导如何强制去开启inband ring.
--- sink_audio_routing.c 2017-11-08 12:40:04.000000000 +0800
+++ sink_audio_routing.c 2019-07-15 14:39:28.000000000 +0800
@@ -1836,13 +1836,13 @@
AUD_DEBUG(("AUD: route - sec > pri = [%d] [%d] :\n" , primary_priority, secondary_priority)) ;
priority_sink = sco_sink_secondary;
}
}
}
/* primary AG call + sco only? or pri sco and voice dial is active? */
- else if( sco_sink_primary &&
+ else if( sco_sink_primary && (call_state_primary != hfp_call_state_incoming) &&
((call_state_primary > hfp_call_state_idle)||(sinkHfpDataGetVoiceRecognitionIsActive())))
{
AUD_DEBUG(("AUD: AG1 sco\n"));
/* AG1 (primary) call with sco only */
priority_sink = sco_sink_primary;
}
@@ -2363,12 +2363,15 @@
RETURNS
true if sco routed, false if no sco routable
*/
bool audioRouteScoOutsideOfCallIfAvailable(void)
{
+ Sink sco_sink_to_route = audioGetActiveScoSink();
+ if(sco_sink_to_route)
+ {
if(!sinkAudioIsVoiceRouted() && !sinkAudioIsAudioRouted())
{
Sink sink_to_route = sinkCallManagerGetHfpSink(hfp_primary_link);
if(!sink_to_route)
{
sink_to_route = sinkCallManagerGetHfpSink(hfp_secondary_link);
@@ -2377,11 +2380,13 @@
sinkCallManagerGetHfpCallState(hfp_primary_link),
sinkCallManagerGetHfpCallState(hfp_secondary_link),
(void *) sinkCallManagerGetHfpSink(hfp_primary_link),
(void *) sinkCallManagerGetHfpSink(hfp_secondary_link))) ;
return audioRouteScoSink(sink_to_route);
+ }
}
return FALSE;
}
static hfp_link_priority getHfpLinkIndexFromA2dpPriority(a2dp_link_priority priority)
{
--- sink_callmanager.c 2017-11-08 12:40:06.000000000 +0800
+++ sink_callmanager.c 2019-07-15 15:05:52.000000000 +0800
@@ -56,13 +57,13 @@
{
/* Determine which AG has the outband ring (if applicable) and play
appropriate tone. */
#ifdef ENABLE_SPEECH_RECOGNITION
if((!pInd->in_band)&&(!speechRecognitionIsEnabled()))
#else
- if(!pInd->in_band)
+ if(!pInd->in_band || TRUE)
#endif
{
/* determine whether this is AG1 or AG2 and play appropriate tone */
if(pInd->priority == hfp_primary_link)
{
CM_DEBUG(("CM: OutBandRing - AG1 play ring 1\n")) ;
评论