mt6735 Dual talk项目sim卡插在卡2时,微信听筒无声
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
Dual talk项目SIM卡插在卡2时,微信听筒无声;
[SOLUTION]
root Cause:
第三方 APP 在听筒接听语音时会固定去设 audio_mode 为 incall ,而不会去管下面是 sim1 还是sim2 在位。
而 speechdriver 这边会根据 audio_mode 会固定的去设定 Modem_index ,会固定将 MD1 call 起来。
如果是只插 sim2 ,不插 sim1, 就会存在报 MD 没有 ready 的问题, MD 不会收到 CCCI 消息,会导致没有语音。
解决方法:
需要去判断 MD1 和 MD2 的状态,在根据他们的状态去开启相应的 MD 。
修改的文件和函数为:SpeechDriverFactory.cpp
status_t SpeechDriverFactory::SetActiveModemIndexByAudioMode(int mode)
{
status_t return_status = NO_ERROR;
status_t FLAG_MD1 ;status_t FLAG_MD2 ;
FLAG_MD1=mSpeechDriver1->CheckModemIsReady();
FLAG_MD2=mSpeechDriver2->CheckModemIsReady();
ALOGD("%s() mode(%d) FLAG_MD1(%d) FLAG_MD2(%d) !", __FUNCTION__, mode,FLAG_MD1,FLAG_MD2);
switch (mode) {
case AUDIO_MODE_IN_CALL:
if(FLAG_MD1==1)
return_status = SetActiveModemIndex(MODEM_1);
else if((FLAG_MD1==0)&&(FLAG_MD2==1))
return_status = SetActiveModemIndex(MODEM_2);
break;
case AUDIO_MODE_IN_CALL_2:
return_status = SetActiveModemIndex(MODEM_2);
break;
default:
ALOGE("%s() mode(%d) is neither MODE_IN_CALL nor MODE_IN_CALL_2!", __FUNCTION__, mode);
return_status = INVALID_OPERATION;
break;
}
return return_status;
}
2.在close的时候,之前打电话设计都是incall对应MD1,incall_2对应MD2.
目前第三方APP这边是固定去设mode incall,现在是去打开的MD2,所以在关闭的时候会发生assert的情况,请关闭该
assert,或者修改assert条件。.
SpeechPhoneCallController.cpp
status_t SpeechPhoneCallController::CloseModEMSpeechControlFlow(const audio_mode_t audio_mode)
{
Mutex::Autolock _l(mLock);
ALOGD("+%s(), audio_mode = %d", __FUNCTION__, audio_mode);
const modem_index_t modem_index = mSpeechDriverFactory->GetActiveModemIndex();
ALOGD("+%s(), audio_mode = %d , modem_index = %d ", __FUNCTION__, audio_mode, modem_index);
//ASSERT((modem_index == MODEM_1 && audio_mode == AUDIO_MODE_IN_CALL) ||
// (modem_index == MODEM_2 && audio_mode == AUDIO_MODE_IN_CALL_2));
Dual talk项目SIM卡插在卡2时,微信听筒无声;
[SOLUTION]
root Cause:
第三方 APP 在听筒接听语音时会固定去设 audio_mode 为 incall ,而不会去管下面是 sim1 还是sim2 在位。
而 speechdriver 这边会根据 audio_mode 会固定的去设定 Modem_index ,会固定将 MD1 call 起来。
如果是只插 sim2 ,不插 sim1, 就会存在报 MD 没有 ready 的问题, MD 不会收到 CCCI 消息,会导致没有语音。
解决方法:
需要去判断 MD1 和 MD2 的状态,在根据他们的状态去开启相应的 MD 。
修改的文件和函数为:SpeechDriverFactory.cpp
status_t SpeechDriverFactory::SetActiveModemIndexByAudioMode(int mode)
{
status_t return_status = NO_ERROR;
status_t FLAG_MD1 ;status_t FLAG_MD2 ;
FLAG_MD1=mSpeechDriver1->CheckModemIsReady();
FLAG_MD2=mSpeechDriver2->CheckModemIsReady();
ALOGD("%s() mode(%d) FLAG_MD1(%d) FLAG_MD2(%d) !", __FUNCTION__, mode,FLAG_MD1,FLAG_MD2);
switch (mode) {
case AUDIO_MODE_IN_CALL:
if(FLAG_MD1==1)
return_status = SetActiveModemIndex(MODEM_1);
else if((FLAG_MD1==0)&&(FLAG_MD2==1))
return_status = SetActiveModemIndex(MODEM_2);
break;
case AUDIO_MODE_IN_CALL_2:
return_status = SetActiveModemIndex(MODEM_2);
break;
default:
ALOGE("%s() mode(%d) is neither MODE_IN_CALL nor MODE_IN_CALL_2!", __FUNCTION__, mode);
return_status = INVALID_OPERATION;
break;
}
return return_status;
}
2.在close的时候,之前打电话设计都是incall对应MD1,incall_2对应MD2.
目前第三方APP这边是固定去设mode incall,现在是去打开的MD2,所以在关闭的时候会发生assert的情况,请关闭该
assert,或者修改assert条件。.
SpeechPhoneCallController.cpp
status_t SpeechPhoneCallController::CloseModEMSpeechControlFlow(const audio_mode_t audio_mode)
{
Mutex::Autolock _l(mLock);
ALOGD("+%s(), audio_mode = %d", __FUNCTION__, audio_mode);
const modem_index_t modem_index = mSpeechDriverFactory->GetActiveModemIndex();
ALOGD("+%s(), audio_mode = %d , modem_index = %d ", __FUNCTION__, audio_mode, modem_index);
//ASSERT((modem_index == MODEM_1 && audio_mode == AUDIO_MODE_IN_CALL) ||
// (modem_index == MODEM_2 && audio_mode == AUDIO_MODE_IN_CALL_2));