mt2503 BT Dialer连接IPhone的来电铃声问题
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
1. BT Dialer 连接iPhone手机,IPhone来电,BT Dialer端的来电铃声由听筒发出,播放的铃声是IPhone的手机铃声。
2. BT Dialer 连接一般android手机,Android来电,BT Dialer端的来电铃声从扬声器发出,播放的是本地默认的铃声。
[SOLUTION]
1. 在HFP的spec中,对于铃声的处理,分为两种情况。
1) 支持inband ringtone的设备(IPhone),会通过SCO LINK将铃声送到HF端(BT Dialer)。
2) 不支持inband ringtone的设备(Android),不会将声音送到HF端(BT Dialer),只是通知HF端,由HF播放本地铃声。
2. 若要将IPhone的声音切换到扬声器,可以参考下面改法:
1). UcmProtBT.h
在MMI_ucm_bt_cntx_struct中添加两项
....
U8 device_back;
MMI_BOOL set_device;
....
2). UcmUiBT.c
mmi_ucm_entry_incoming_call_bt
{
// ....
// 添加下面的部分
g_ucm_p_bt->device_back = AFE_GetOutputDevice(2);
if (g_ucm_p_bt->device_back != 0x2C)
{
g_ucm_p_bt->set_device = MMI_TRUE;
AFE_SetOutputDevice(2, 0x2C);
}
// 添加上面的部分
guiBuffer = mmi_frm_scrn_get_gui_buf(scr_info->group_id, SCR_ID_UCM_BT_INCOMING);
// ....
}
mmi_ucm_exit_incoming_call_bt
{
// ...
// 添加下面code
if (g_ucm_p_bt->set_device)
{
g_ucm_p_bt->set_device = MMI_FALSE;
AFE_SetOutputDevice(2, g_ucm_p_bt->device_back);
}
}
3. 若要让连接IPhone时也播放本地铃声,可以参考下面改法:
// 断开SCO LINK则会在本地端播放铃声.
请尝试在BTDialerSrv.c文件 srv_bt_dialer_ring_ind_hdlr函数中修改:
MMI_BOOL srv_bt_dialer_ring_ind_hdlr(void *msg)
{
srv_bt_dialer_notify_event_struct notify;
SRV_BT_DIALER_LOG(SRV_BT_DIALER_RING_ALERT);
notify.event_id = SRV_BT_DIALER_EVT_ID_AT_IN_BAND_RING_TONE;
if (srv_btsco_is_sco_open()) // 添加此处
{
srv_btsco_close_stream_req();// 添加此处
}
if(g_bt_dialer_cntx->cb_ptr)
g_bt_dialer_cntx->cb_ptr(g_bt_dialer_cntx->srv_hd,notify); //at caller's end
else
SRV_BT_DIALER_LOG(SRV_BT_DIALER_CB_PTR_ERR);
return MMI_TRUE;
}
4. 若想在连接Android,也播放Android端的铃声,没有办法做到,这是由Smart Phone端是否发生SCO LINK决定的。
1. BT Dialer 连接iPhone手机,IPhone来电,BT Dialer端的来电铃声由听筒发出,播放的铃声是IPhone的手机铃声。
2. BT Dialer 连接一般android手机,Android来电,BT Dialer端的来电铃声从扬声器发出,播放的是本地默认的铃声。
[SOLUTION]
1. 在HFP的spec中,对于铃声的处理,分为两种情况。
1) 支持inband ringtone的设备(IPhone),会通过SCO LINK将铃声送到HF端(BT Dialer)。
2) 不支持inband ringtone的设备(Android),不会将声音送到HF端(BT Dialer),只是通知HF端,由HF播放本地铃声。
2. 若要将IPhone的声音切换到扬声器,可以参考下面改法:
1). UcmProtBT.h
在MMI_ucm_bt_cntx_struct中添加两项
....
U8 device_back;
MMI_BOOL set_device;
....
2). UcmUiBT.c
mmi_ucm_entry_incoming_call_bt
{
// ....
// 添加下面的部分
g_ucm_p_bt->device_back = AFE_GetOutputDevice(2);
if (g_ucm_p_bt->device_back != 0x2C)
{
g_ucm_p_bt->set_device = MMI_TRUE;
AFE_SetOutputDevice(2, 0x2C);
}
// 添加上面的部分
guiBuffer = mmi_frm_scrn_get_gui_buf(scr_info->group_id, SCR_ID_UCM_BT_INCOMING);
// ....
}
mmi_ucm_exit_incoming_call_bt
{
// ...
// 添加下面code
if (g_ucm_p_bt->set_device)
{
g_ucm_p_bt->set_device = MMI_FALSE;
AFE_SetOutputDevice(2, g_ucm_p_bt->device_back);
}
}
3. 若要让连接IPhone时也播放本地铃声,可以参考下面改法:
// 断开SCO LINK则会在本地端播放铃声.
请尝试在BTDialerSrv.c文件 srv_bt_dialer_ring_ind_hdlr函数中修改:
MMI_BOOL srv_bt_dialer_ring_ind_hdlr(void *msg)
{
srv_bt_dialer_notify_event_struct notify;
SRV_BT_DIALER_LOG(SRV_BT_DIALER_RING_ALERT);
notify.event_id = SRV_BT_DIALER_EVT_ID_AT_IN_BAND_RING_TONE;
if (srv_btsco_is_sco_open()) // 添加此处
{
srv_btsco_close_stream_req();// 添加此处
}
if(g_bt_dialer_cntx->cb_ptr)
g_bt_dialer_cntx->cb_ptr(g_bt_dialer_cntx->srv_hd,notify); //at caller's end
else
SRV_BT_DIALER_LOG(SRV_BT_DIALER_CB_PTR_ERR);
return MMI_TRUE;
}
4. 若想在连接Android,也播放Android端的铃声,没有办法做到,这是由Smart Phone端是否发生SCO LINK决定的。