VOS_VOID MN_CALL_CsMtCallFailRecord( NAS_ERR_LOG_CS_MT_CALL_CAUSE_ENUM_U32 enCause ) { NAS_ERR_LOG_CS_MT_CALL_FAIL_EVENT_STRU stCsMtCallFailEvt; VOS_UINT32 ulLength; VOS_UINT16 usLevel; VOS_UINT32 ulIsLogRecord; VOS_UINT32 ulResult; /* 查询对应Alarm Id是否需要记录异常信息 */ usLevel = NAS_GetErrLogAlmLevel(NAS_ERR_LOG_ALM_CS_MT_CALL_FAIL); ulIsLogRecord = TAF_SDC_IsErrLogNeedRecord(usLevel); /* 模块异常不需要记录或异常原因值不需要记录时,不保存异常信息 */ if (VOS_FALSE == ulIsLogRecord) { return; } ulLength = sizeof(NAS_ERR_LOG_CS_MT_CALL_FAIL_EVENT_STRU); /* 填充CS PAGING失败异常信息 */ PS_MEM_SET(&stCsMtCallFailEvt, 0x00, ulLength); NAS_COMM_BULID_ERRLOG_HEADER_INFO(&stCsMtCallFailEvt.stHeader, VOS_GetModemIDFromPid(WUEPS_PID_TAF), NAS_ERR_LOG_ALM_CS_MT_CALL_FAIL, usLevel, VOS_GetSlice(), (ulLength - sizeof(OM_ERR_LOG_HEADER_STRU))); /* 获取当前位置信息 */ NAS_MNTN_OutputPositionInfo(&stCsMtCallFailEvt.stPositionInfo); /* 填写错误原因值 */ stCsMtCallFailEvt.enCause = enCause; /* 将CS MT CALL失败信息发送给ACPU OM模块 */ TAF_SndAcpuOmFaultErrLogInd(&stCsMtCallFailEvt, ulLength); /* 将异常信息写入Buffer中 实际写入的字符数与需要写入的不等则打印异常 */ ulResult = TAF_SDC_PutErrLogRingBuf((VOS_CHAR *)&stCsMtCallFailEvt, ulLength); if (ulResult != ulLength) { NAS_ERROR_LOG(WUEPS_PID_TAF, "MN_CALL_SndAcpuOmCsMtCallFailInd(): Push buffer error."); } /* 可维可测勾包 */ NAS_COM_MntnPutRingbuf(NAS_ERR_LOG_ALM_CS_MT_CALL_FAIL, WUEPS_PID_TAF, (VOS_UINT8 *)&stCsMtCallFailEvt, sizeof(stCsMtCallFailEvt)); return; }
VOS_VOID MN_CALL_CsCallErrRecord( MN_CALL_ID_T ucCallId, TAF_CS_CAUSE_ENUM_UINT32 enCause ) { NAS_ERR_LOG_CS_CALL_FAIL_EVENT_STRU stCsCallFailEvent; MN_CALL_INFO_STRU stCallInfo; VOS_UINT32 ulIsLogRecord; VOS_UINT32 ulLength; VOS_UINT32 ulResult; VOS_UINT16 usLevel; NAS_ERR_LOG_IMS_CALL_FAIL_INFO_STRU stImsCallFailInfo; /* 查询对应Alarm Id是否需要记录异常信息 */ usLevel = NAS_GetErrLogAlmLevel(NAS_ERR_LOG_ALM_CS_CALL_FAIL); ulIsLogRecord = TAF_SDC_IsErrLogNeedRecord(usLevel); PS_MEM_SET(&stImsCallFailInfo, 0, sizeof(NAS_ERR_LOG_IMS_CALL_FAIL_INFO_STRU)); /* IMS呼叫失败,到CS下重拨,callid一定是1 */ if (1 == ucCallId) { stImsCallFailInfo.ucImsCallFailFlag = TAF_SDC_GetErrLogImsCallFailFlag(); stImsCallFailInfo.ulImsCallFailCause = TAF_SDC_GetErrLogImsCallFailCause(); TAF_SDC_InitErrLogImsCallFailInfo(); } /* 不需要记录或没有异常时,不保存异常信息 */ if ((VOS_FALSE == ulIsLogRecord) || (TAF_CS_CAUSE_SUCCESS == enCause) || (TAF_CS_CAUSE_CC_NW_NORMAL_CALL_CLEARING == enCause)) { return; } ulLength = sizeof(NAS_ERR_LOG_CS_CALL_FAIL_EVENT_STRU); /* 填充Cs呼叫失败异常信息 */ PS_MEM_SET(&stCsCallFailEvent, 0x00, ulLength); PS_MEM_SET(&stCallInfo, 0x00, sizeof(stCallInfo)); NAS_COMM_BULID_ERRLOG_HEADER_INFO(&stCsCallFailEvent.stHeader, VOS_GetModemIDFromPid(WUEPS_PID_TAF), NAS_ERR_LOG_ALM_CS_CALL_FAIL, usLevel, VOS_GetSlice(), (ulLength - sizeof(OM_ERR_LOG_HEADER_STRU))); stCsCallFailEvent.ulCcCause = enCause; if (0 == ucCallId) { /* ucCallId为0说明为本地异常,无法在全局变量中获取信息 */ stCsCallFailEvent.ucCallId = ucCallId; stCsCallFailEvent.enCallState = NAS_ERR_LOG_CALL_S_IDLE; stCsCallFailEvent.stDiscDir.ucIsUser = VOS_TRUE; } else { MN_CALL_GetCallInfoByCallId(ucCallId, &stCallInfo); stCsCallFailEvent.ucCallId = stCallInfo.callId; stCsCallFailEvent.enCallState = stCallInfo.enCallState; PS_MEM_CPY(&stCsCallFailEvent.stDiscDir, &stCallInfo.stDiscDir, sizeof(NAS_ERR_LOG_MN_CALL_DISC_DIR_STRU) ); } stCsCallFailEvent.enRat = TAF_SDC_GetSysMode(); /* 获取当前位置信息 */ NAS_MNTN_OutputPositionInfo(&stCsCallFailEvent.stPositionInfo); /* 获取当前Usim信息 */ NAS_MMA_OutputUsimInfo(&stCsCallFailEvent.stUsimInfo); stCsCallFailEvent.usCellDlFreq = TAF_SDC_GetAppCellDlFreq(); stCsCallFailEvent.usCellUlFreq = TAF_SDC_GetAppCellUlFreq(); PS_MEM_CPY(&stCsCallFailEvent.stImsCallFailInfo, &stImsCallFailInfo, sizeof(NAS_ERR_LOG_IMS_CALL_FAIL_INFO_STRU)); /* 如果当前为被叫,且不是active状态,则主动上报给上层该次异常 */ if ((MN_CALL_S_INCOMING == stCallInfo.enCallState) || (MN_CALL_S_WAITING == stCallInfo.enCallState) || (MN_CALL_S_WAITING_ACCEPT == stCallInfo.enCallState)) { TAF_SndAcpuOmFaultErrLogInd(&stCsCallFailEvent, ulLength, NAS_ERR_LOG_ALM_CS_CALL_FAIL); } /* 将异常信息写入Buffer中 实际写入的字符数与需要写入的不等则打印异常 */ ulResult = TAF_SDC_PutErrLogRingBuf((VOS_CHAR *)&stCsCallFailEvent, ulLength); if (ulResult != ulLength) { NAS_ERROR_LOG(WUEPS_PID_TAF, "MN_CALL_CsCallErrRecord(): Push buffer error."); } NAS_COM_MntnPutRingbuf(NAS_ERR_LOG_ALM_CS_CALL_FAIL, WUEPS_PID_TAF, (VOS_UINT8 *)&stCsCallFailEvent, sizeof(stCsCallFailEvent)); return; }