抓mtk log:
1、*#*#82533284#*#* 进入抓log UI
2、*#*#825364#*#* 进入工程模式
3、进入”Log and Debuging”栏 –> Telephony Log Setting –>ENABLE(然后重启生效,这样log会抓的全面,不会影藏信息,log等级会由I变成D)
A call B:
A put B on hold:
A call Conference Server:
A refer B:
流程图:
10010就是上图中的B;13267945631的号就是上图的C;18507524845就是上图的A。
注意:refer邀请成员与refer挂断成员的refer主要通过后面BYE区分,有BYE就是邀请,没有就是挂断成员。
关键AT指令:
//获取2G/3G/4G cell(包括服务和邻居 cell)信息,属性命令.//AT+ECELL=<mode>//mode:0 disable,1 enable//+ECELL:<num_of_cell>[,<Act>,<cid>,<lac_or_tac>,<mcc>,<mnc>,<sig2_in_dbm>,<ta>,<ext1>,<ext2>][,]//Act:0 GSM,2 UMTS ,7 LTE//cid:Cell Identity//mcc:mobile country code//mnc:mobile network code//lac_or_tac:GSM/UMTS ,location area code;LTE,tracking area code+ECELL: 1,7,"065F4402","25C7",460,1,448,54,29,-348,-22,0,,,,1650 //用来使能VDM ADS支持报告URC +EVADSREP<domain>,该指令被VDM执行//+EVADSREP=<mode>//+EVADSREP:<domain>//0 disable,1 enable//domain :0 cs domain,1 volte (IMS call over volte)AT+EVADSREP=1
//用来设置VDM access domain 选择模式,该指令被VDM执行//0 自动模式(both IMS and cs domian),1 cs domain only.AT+EVADSMOD=0,0//VDM用来FDN检查和批准紧急号码,该指令被VDM执行//+EAPPROVE=<dial number>//+EAPPROVE: <is_allowed><is_emgerency><err>AT+EAPPROVE="10010"+EAPPROVE: 1,0,0//+ECPI 属性命令,使能/禁止call处理信息//+ECPI:<call_id>,<msg_type>,<is_ibt>,<is_tch>,<dir>,<call_mode>,<number>,<type>,"<pau>"[,<disc_cause>]//+ECPI=<mode>//+ECPI? 可能响应+ECPI:<mode>//+ECPI=? 可能响应+ECPI:(0~4294967295)//mode: bit1=1 CSMCC_SETUP_MSG(MT_CALL) bit2=1 CSMCC_DISCONNECT_MSG bit3=1 CSMCC_ALERT_MSG bit4=1 CSMCC_CALL_PROCESS_MSG bit5=1 CSMCC_SYNC_MSG bit6=1 CSMCC_PROCESS_MSG bit7=1 CSMCC_CALL_CONNECTED_MSG bit8=1 CSMCC_ALL_CALLS_DISC_MSG bit9=1 CSMCC_CALL_ID_ASSIGN_MSG bit10=1 CSMCC_STATE_CHANGE_HELD bit11=1 CSMCC_STATE_CHANGE_ACTIVE bit12=1 CSMCC_STATE_CHANGE_DISCONNECTED bit13=1 CSMCC_STATE_CHANGE_MO_DISCONNECTED//msg_type:CSMCC_ALL_CALLS_DISC_MSG 0 CLCC_MT_CALL 1 CSMCC_DISCONNECT_MSG 2 CSMCC_ALERT_MSG 3 CLCC_CALL_PROCESS_MSG 4 CSMCC_SYNC_MSG 5 CSMCC_PROCESS_MSG 6 CSMCC_CALL_CONNECTED_MSG 129 CSMCC_ALL_CALLS_DISC_MSG 130 CSMCC_CALL_ID_ASSIGN_MSG 131 CSMCC_STATE_CHANGE_HELD 132 CSMCC_STATE_CHANGE_ACTIVE 133 CSMCC_STATE_CHANGE_DISCONNECTED 134 CSMCC_STATE_CHANGE_MO_DISCONNECTED 135 CSMCC_STATE_HELD_BY_REMOTE 136 CSMCC_STATE_ACTIVE_BY_REMOTE//dir : 0 CLCC_MO ,1 CLCC_MT//call_mode: 0 CLCC_VOICE_CALL 1 CLCC_DATA_CALL 3 CLCC_VFD_VOICE 4 CLCC_AVD_VOICE 5 CLCC_AVF_VOICE 6 CLCC_AFD_DATA 7 CLCC_AVD_DATA 20 IMS_VOICE_CALL 21 IMS_VIDEO_CALL 22 IMS_VOICE_CONFERENCE//type: 145 国际呼叫,129 国内呼叫+ECPI: 1,130,0,0,0,0,"10010",129,"" // MO voice call 10010//该URC被用来告知AP,UA从NW接收的响应码//+ESIPCPI:<call_id>,<dir>,<sip_msg_type>,<method>,<response_code>,"<reason_text>"//call_id:0~255整数//dir:0 send,1 receive//sip_msg_type:0 request,1 response//method: 1 INVITE 2 REFER 3 UPDATE 4 CANCEL 5 MESSAGE 6 ACK 7 BYE 8 OPTIONS 9 SUBSCRIBE 10 NOTITY 11 PUBLISH 12 INFO 13 PRACK//response_code:method为0时,100~600,request时为0.+ESIPCPI: 1,0,0,1,0,"" //+EIMSCI=<ims_call_status>,<is_emergency>,<ims_access_rat>ims_call_status: 0 IMS stop or SRVCC to CS call 1 IMS call ongoingis_emergency: 0 no 1 yes ims_access_rat: 0 LTE 1 WIFI 2 eHRPDAT+EIMSCI=1,0,0// start , end 智能缓解阻塞,该指令不被用在UTRAN、GERAN 的UE//+CSCM=<application>,<start-end_indication>application: 0 MMTEL voice 1 MMTEL video 2 SMS over IPstart-end_indication: 1 start 指示 2 end 指示AT+CSCM= 0,1//IMS call 信息,该指令被用来告知协议栈IMS call信息//+EIMSCI=<ims_call_status>,<is_emergency>,<ims_access_rat>ims_call_status: 0 IMS stop or SRVCC to CS call 1 IMS call ongoingis_emergency: 0 no 1 yes ims_access_rat: 0 LTE 1 WIFI 2 eHRPDAT+EIMSCI=1,0,0//IMS 会议控制,该指令被IMC处理,用在PS(IMS)call domain 的call的 hold\resume。在cs call,用AT+CHLD指令。//+ECCTRL=<call_id>,<call_state>//call_state:131 hold,132 activeAT+ECCTRL=1,131+ECCTRL:0,131//Call相关的SS(补充业务)//+CHLD=[<n>]//+CHLD=? 可能响应[+CHLD:<n>]//n: 0 释放所有的hold calls,或对于waiting call设置用户决定用户忙(UDUB) 1 释放所有的active calls并接受其他waiting or held call. 1x 释放特定的active call 2 放所有的active call在 hold并接受其他的waiting or held call. 2x 除了特定call x,放其余所有active call在hold 3 add a held call 到会议电话中 4 连接2个calls并断开这两个calls subscriber. 5 主动完成对占线用户的呼叫请求(CCBS)AT+CHLD=3//该URC由IMC发送,被用来告知AP call改变源于哪里//+EIMSCMODE:<call_id>,<call_mode>,<camera_direction>,<audio_direction>,"<p_assert_url>",<audio_codec>//call_mode: 20 IMS_VOICE_CALL 21 IMS_VIDEO_CALL 22 IMS_VOICE_CONFERENCE 23 IMS_VIDEO_CONFERENCE 24 IMS_VOICE_CONFERENCE_PARTICIPANT 25 IMS_VIDEO_CONFERENCE_PARTICIPANT//camera_direction\audio_direction: 0 inactive 1 sendonly 2 recvonly 3 sendrecv//audio_codec: 1 AMR 2 AMR-WB 3 H264 16 H265 17 EVS+EIMSCMODE: 3,22,0,3,"",2//+CEER 错误报告+CEER:<cause>,<report>+CEER: 16,CM_NORMAL_CALL_CLR//(1)For network attachment:+CGEV:NW DETACH,网络已强制PS分离,这意味着所有活动上下文已停用,这些没有单独报告。+CGEV:ME DETACH,移动终端已强制PS分离,这意味着所有活动上下文已停用,这些没有单独报告。//(2)For PDP context activation+CGEV:NW PDN ACT <cid>,其中<cid>参考+CGDCONT,这事件不被用于EPS,PDP context是在GSM/UMTS.+CGEV:ME PDN ACT <cid>[,<reason>],PDN 连接在LTE,PDP context是在GSM/UMTS.reason:网络为指定的PDP类型为IPV4或IPV6。 0 IPV4 only allowed 1 IPV6 only allowed 2 single address bearers only allowed. 3 single address bearers only allowed and MT initated 第二地址类型承载器的模拟上下文未成功。.+CGEV:ME ACT <p_cid>,<cid>,<event_type> +CGEV:NW ACT <p_cid>,<cid>,<event_type> event_type: 0 information event_type 1 information request:acknowledgement required,acknowledgement 能够被接受或拒绝,see +CGANS.+CGEV:ME PDN DEACT <cid>+CGEV:NW PDN DEACT <cid>+CGEV:NW DEACT <p_cid>,<cid>,<event_type>+CGEV:ME DEACT <p_cid>,<cid>,<event_type>//(3)For PDP context modification,+CGEV:NW MODIFY <cid>,<change_reason>,<event_type>+CGEV:ME MODIFY <cid>,<change_reason>,<event_type>change_reason: 1 TFT only changed 2 Qos only changed 3 both TTF and Qos changed //(4)For other PDP context handling+CGEV:REJECT<PDP_type>,<PDP_addr>,参数see+CGDCONT,当MT无法报告上下文激活时,发生了一个网络请求向TE发出+CRING URC并被自动拒绝。+CGEV:NW REJECT<PDP_type>,<PDP_addr>[,<cid>]+CGEV: NW MODIFY 10, 0, 0//该URC由IMC发送,被用来告知IMS会议电话的subscription状态,URC(unsolicited result code)//+ESUBCTRL:<call_id>,<event>,<result>,<cause>//event:0 unknown, 1 conference//result:0 成功,1 失败//cause:参考+ECONF URC+ESUBCTRL: 3,1,0,0//IMS会议操作,该命令被IMC执行//add or remove 会议成员//+ECONF=<conf_call_id><operation><num>[,<joined_call_id>]//operation:0 add,1 removeAT+ECONF=3,1,"13267945631"//该URC由IMC发送,被用来响应IMS会议电话控制指令AT+ECONF//+ECONF:<conf_call_id>,<operation>,<num>,<result>,<cause>[,<joined_call_id>]//operation:0 add ,1 remove//result:0 success ,1 failure//cause: NORMAL=0, ABNORMAL, NONNUMBER, UNREGISTERED, DISCONNECT, BECANCEL, BEREJECT, BEREJECT_380, BEREJECT_380_EMERGENCY_TO_CS, BEREJECT_380_EMERGENCY_TO_REREG, BEREJECT_480, BEREJECT_503, TX_TIMEOUT, NO_PRIVACY, PRECONDFAIL, SECONDCALL, NOMEDIACONTENT, INVALIDMSG, INVALIDCMD, INVALIDIDX, SRVCC, FACILITY_REJECTED, DEDICATED_BEARER_TIMEOUT, UA_MAX, UNAVAILABLE_OF_CALLS, IMS_CC_CAUSE_MAX+ECONF: 3,0,"",0,0,2
常见log分析:
1、在mobilelog(主要是main_log、radio_log、sys_log)中查找“AT+CHLD”,有:
- :: I AT : [] AT> AT+CHLD= (RIL_CMD_RT_7 tid:) //add a held call 到会议电话中- :: I AT : [] AT> AT+CHLD= (RIL_CMD_RT_7 tid:) //释放特定的active call
2、在mobilelog(主要是main_log、radio_log、sys_log)中查找“ImsConference”,有:
main_log: Line : - :: I MtkImsCall: callSessionConferenceStateUpdated :: state=[ImsConferenceState < ***:user-entity=tel:+, status=connected, user=***, display-text=+, endpoint=***, ***: user-entity=tel:, status=connected, user=***, display-text=, endpoint=***, ***: user-entity=tel:+, onHold:N mute:N mCallProfile:{ serviceType=, callType=, restrictCause=, mediaProfile={ audioQuality=, audioDirection=, videoQuality=, videoDirection=, rttMode=, hasRttAudioSpeech=, emergencyUrns=[], emergencyCallRouting=, emergencyCallTesting= state:ESTABLISHED callId:] transientSession:null]//////可以看到一个成员断开连接(+8613267945631) Line : - :: I MtkImsCall: callSessionConferenceStateUpdated :: state=[ImsConferenceState < ***: user-entity=tel:+, status=connected, user=***, display-text=+, endpoint=***, ***: user-entity=tel:, status=connected, user=***, display-text=, endpoint=***, ***: user-entity=tel:+, onHold:N mute:N mCallProfile:{ serviceType=, callType=, restrictCause=, mediaProfile={ audioQuality=, audioDirection=, videoQuality=, videoDirection=, rttMode=, hasRttAudioSpeech=, emergencyUrns=[], emergencyCallRouting=, emergencyCallTesting= state:ESTABLISHED callId:] transientSession:null]
sys_log:I Telephony: ImsConference: handleConferenceParticipantsUpdate: size=3I Telephony: ImsConference: handleConferenceParticipantsUpdate: size=2 //成员只有2个(包括host)I Telephony: ImsConference: startEmulatingSinglePartyCall: conference has a single participant; downgrade to single party call.
radio_log:D RfxRoot : processMessage() msg = [type=REQUEST, source=GSM, dest=GSM,...D RtcImsConference: firstMerge, callId_1: +86*****945631, callId_2: +86*****945631, num_1: +86*****945631, num_2: +86*****945631D RtcCC : [0] generateImsConference() slot: 0D RfxRoot : processMessage() msg = [type=RESPONSE, source=GSM, dest=GSM,...D RtcImsConference: modifyParticipantCompleteD RtcImsConference: modifyParticipantComplete: mLocalParticipants:752*****752D RtcImsConference: modifyParticipantComplete: mLocalParticipants:+86*****945631D RfxRoot : processMessage() msg = [type=URC, source=GSM, dest=GSM,...D RtcImsConference: handleVolteConfCallMessageD RtcImsConference: startElement Conference uri: xmlns //---会议信息描述D RtcImsConference: :startElement mCEPState: 1D RtcImsConference: :startElement version: 0D RtcImsConference: startElement MaxUserCount: 0D RtcImsConference: startElement MaxUserCount: 6D RtcImsConference: startElement user - entity: tel*****8507524845D RtcImsConference: startElement display-text: **D RtcImsConference: startElement display-text: +86*****524845D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 1D RtcImsConference: startElement user - entity: tel***010D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 2D RtcImsConference: startElement user - entity: tel*****3267945631D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 3 //和上面描述类似D RtcImsConference: cepState: 1D RtcImsConference: setupHostD RtcImsConference: getUserNameFromSipTelUriString uriString: **D RtcImsConference: setupHost: mHostAddr: **D RtcImsConference: fullUpdateParticipantsD RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****8507524845 //HostD RtcImsConference: getUserNameFromSipTelUriString uriString: tel***010D RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****3267945631D RtcImsConference: isPartialCEP: 0D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: notifyConfStateUpdate()D RtcImsConference: isEmptyConferenceD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isEmptyConference, userCount: 2 (会议成员,不包括host)D RtcImsConference: isEmptyConference, set mHaveUpdatedConferenceWithMember = trueD RILC : imsConferenceInfoIndicationD RtcImsConference: updateConferenceStateWithLocalCacheD RILC : controlImsConferenceCallMember: serial 587, controlType 0D RfxRoot : processMessage() msg = [type=REQUEST, source=GSM, dest=GSM, p...D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****945631D RfxRoot : processMessage() msg = [type=RESPONSE, source=GSM, dest=GSM,..D RtcImsConference: modifyParticipantCompleteD RtcImsConference: modifyParticipantComplete: mLocalParticipants:752*****752D RtcImsConference: modifyParticipantComplete: mLocalParticipants:+86*****945631D RfxRoot : processMessage() msg = [type=URC, source=GSM, dest=GSM,..D RtcImsConference: startElement Conference uri: xmlnsD RtcImsConference: :startElement mCEPState: 1D RtcImsConference: :startElement version: 1D RtcImsConference: startElement MaxUserCount: 0D RtcImsConference: startElement MaxUserCount: 6D RtcImsConference: startElement user - entity: tel*****8507524845D RtcImsConference: startElement display-text: **D RtcImsConference: startElement display-text: +86*****524845D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 1D RtcImsConference: startElement user - entity: tel***010D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 2D RtcImsConference: startElement user - entity: tel*****3267945631D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: disconnectedD RtcImsConference: endElement end user mUsers.size: 3D RtcImsConference: cepState: 1D RtcImsConference: setupHostD RtcImsConference: getUserNameFromSipTelUriString uriString: **D RtcImsConference: setupHost: mHostAddr: **D RtcImsConference: fullUpdateParticipantsD RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****8507524845D RtcImsConference: getUserNameFromSipTelUriString uriString: tel***010D RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****3267945631D RtcImsConference: isPartialCEP: 0D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: updateLocalCache: remove +86*****945631D RtcImsConference: notifyConfStateUpdate()D RtcImsConference: isEmptyConferenceD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isEmptyConference, userCount: 1D RILC : imsConferenceInfoIndicationD RtcImsConference: updateConferenceStateWithLocalCacheD RtcImsConference: closeConference()D RfxRoot : processMessage() msg = [type=URC, source=GSM, dest=GSM...D RtcImsConference: handleVolteConfCallMessage
3、在mobilelog(主要是main_log、radio_log、sys_log)中查找“Telecom : | Telephony:”,有:
D Telecom : Logging: START_SESSIONI Telecom : Event: RecordEntry ...: REQUEST_DISCONNECT,I Telecom : Call: Send disconnect to connection service for call: [Capabilities: CAPABILITY_HOLD CAPABILITY_SUPPORT_HOLD CAPABILITY_MUTE], [Properties: PROPERTY_HIGH_DEF_AUDIO PROPERTY_IMS]]D Telecom : ConnectionServiceWrapper: Telecom -> ConnectionService TelephonyConnectionService]: disconnect D Telecom : Logging: END_SESSIOND Telecom : Adapter: disconnect call DisconnectCause [ Code: (LOCAL) Label: () Description: () Reason: (LOCAL) I Telecom : CallsManager: setCallState ACTIVE -> DISCONNECTED, call:...I Telecom : InCallController: Sending updateCallD Telecom : ConnectionServiceFocusManager: handleCallStateChanged I Telecom : PhoneStateBroadcaster: Broadcasted state change: 0I Telecom : IncomingCallNotifier: updateIncomingCallI Telecom : InCallController: onCallAdded:I Telecom : CallsManager: Creating a new outgoing call with handle: tel:***10
4.修改log等级(V>D>I)
adb shell setprop log.tag.Telecom Vadb shell setprop log.tag.Telephony Vadb shell setprop log.tag.TelecomFramework V adb shell setprop persist.log.tag.RtcCC Vadb shell setprop persist.log.tag.RtcImsConference V
常见问题FAQ:
Q1: UE在建立conference call失败。Log中看UE 去refer其他成员时,无响应。
A1: 可以查看REFER中的Call-ID和之前的INVITE的是否一样。如果不一样,可以和网络侧确认他们需要的是in-dialog还是out-dialog的REFER请求。并修改工模中的refer_dialog_to_server值。0表示out-dialog,1表示in-dialog。
Q2: UE显示的成员号码不对
A2: 常见的是网络给的不对。可以在会议建立成功后,网络给的成员信息NOTIFY中的XML查看,网络给的号码是否正确?