VOS_VOID TAF_MMA_SndImsaCampInfoChangeInd(VOS_VOID) { MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU *pstSndMsg = VOS_NULL_PTR; VOS_UINT32 ulRet; /* 申请内存 */ pstSndMsg = (MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU *)PS_ALLOC_MSG(WUEPS_PID_MMA, sizeof(MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH); if ( VOS_NULL_PTR == pstSndMsg ) { TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SndImsaCampInfoChangeInd: Memory allocation is failure"); return; } PS_MEM_SET(pstSndMsg, 0, sizeof(MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU)); /* fill in header information */ pstSndMsg->ulSenderCpuId = VOS_LOCAL_CPUID; pstSndMsg->ulSenderPid = WUEPS_PID_MMA; pstSndMsg->ulReceiverCpuId = VOS_LOCAL_CPUID; pstSndMsg->ulReceiverPid = PS_PID_IMSA; pstSndMsg->ulLength = sizeof(MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH; /* fill in message name */ pstSndMsg->ulMsgId = ID_MMA_IMSA_CAMP_INFO_CHANGE_IND; /* fill in Roaming flag */ pstSndMsg->ucRoamingFlg = TAF_SDC_GetRoamFlag(); /* set PLMN identity */ pstSndMsg->stPlmnId.ulMcc = TAF_SDC_GetCurrCampPlmnId()->ulMcc; pstSndMsg->stPlmnId.ulMnc = TAF_SDC_GetCurrCampPlmnId()->ulMnc; /* set cell identity */ pstSndMsg->ulCellId = TAF_SDC_GetCurrCampCellId(); if (TAF_SDC_SYS_MODE_LTE == TAF_SDC_GetSysMode()) { if (TAF_SDC_LMM_ACCESS_TYPE_EUTRAN_TDD == TAF_SDC_GetCurrLmmAccessType()) { pstSndMsg->enAccessType = MMA_IMSA_ACCESS_TYPE_EUTRAN_TDD; } else { pstSndMsg->enAccessType = MMA_IMSA_ACCESS_TYPE_EUTRAN_FDD; } /* Get TAC */ /* IMSA要求usTac的高8bit是系统消息中的Tac,低8bit是系统消息中的TacCnt */ pstSndMsg->usTac = TAF_SDC_GetCurrCampLac(); } else { if (TAF_SDC_SYS_MODE_WCDMA == TAF_SDC_GetSysMode()) { if (NAS_UTRANCTRL_UTRAN_MODE_FDD == NAS_UTRANCTRL_GetCurrUtranMode()) { pstSndMsg->enAccessType = MMA_IMSA_ACCESS_TYPE_UTRAN_FDD; } else { pstSndMsg->enAccessType = MMA_IMSA_ACCESS_TYPE_UTRAN_TDD; } } else { pstSndMsg->enAccessType = MMA_IMSA_ACCESS_TYPE_GERAN; } /* Get LAC */ pstSndMsg->usLac = TAF_SDC_GetCurrCampLac(); } /* send message */ ulRet = PS_SEND_MSG(WUEPS_PID_MMA, pstSndMsg); if (VOS_OK != ulRet) { TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SndImsaCampInfoChangeInd: Send message is failure"); } }
VOS_VOID TAF_MMA_SndImsaSrvInfoNotify( MMA_MMC_SERVICE_STATUS_ENUM_UINT32 enPsServiceStatus ) { MMA_IMSA_SERVICE_CHANGE_IND_STRU *pstSndMsg = VOS_NULL_PTR; TAF_SDC_NETWORK_CAP_INFO_STRU *pstNwCapInfo = VOS_NULL_PTR; VOS_UINT32 ulRet; /* 申请内存 */ pstSndMsg = (MMA_IMSA_SERVICE_CHANGE_IND_STRU *)PS_ALLOC_MSG(WUEPS_PID_MMA, sizeof(MMA_IMSA_SERVICE_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH); if ( VOS_NULL_PTR == pstSndMsg ) { TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SndImsaSrvInfoNotify: Memory allocation is failure"); return; } PS_MEM_SET(((VOS_UINT8*)pstSndMsg) + VOS_MSG_HEAD_LENGTH, 0, sizeof(MMA_IMSA_SERVICE_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH); /* fill in header information */ pstSndMsg->ulSenderCpuId = VOS_LOCAL_CPUID; pstSndMsg->ulSenderPid = WUEPS_PID_MMA; pstSndMsg->ulReceiverCpuId = VOS_LOCAL_CPUID; pstSndMsg->ulReceiverPid = PS_PID_IMSA; pstSndMsg->ulLength = sizeof(MMA_IMSA_SERVICE_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH; /* fill in message name */ pstSndMsg->ulMsgId = ID_MMA_IMSA_SERVICE_CHANGE_IND; /* set PS service status */ pstSndMsg->enPsServiceStatus = TAF_MMA_ConvertMmaPsServiceStatusToImsaFormat(enPsServiceStatus); /* set PS sim valid */ pstSndMsg->ucPsSimValid = VOS_TRUE; if (MMA_MMC_SERVICE_STATUS_NO_IMSI == enPsServiceStatus) { pstSndMsg->ucPsSimValid = VOS_FALSE; } if (TAF_SDC_SYS_MODE_LTE == TAF_SDC_GetSysMode()) { /* by the way, here get lte network capability information */ pstNwCapInfo = TAF_SDC_GetLteNwCapInfo(); } else { /* by the way, here get GU network capability information */ pstNwCapInfo = TAF_SDC_GetGuNwCapInfo(); } /* fill RAT */ pstSndMsg->enRat = (MMA_IMSA_RAT_TYPE_ENUM_UINT8)TAF_SDC_GetSysMode(); /* fill in network capability infomation */ pstSndMsg->enEmsInd = (MMA_IMSA_EMS_INDICATOR_ENUM_UINT8)pstNwCapInfo->enNwEmcBsCap; pstSndMsg->enImsVoPsInd = (MMA_IMSA_IMS_VOPS_INDICATOR_ENUM_UINT8)pstNwCapInfo->enNwImsVoCap; /* send message */ ulRet = PS_SEND_MSG(WUEPS_PID_MMA, pstSndMsg); if ( VOS_OK != ulRet ) { TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SndImsaSrvInfoNotify: Send message is failure"); } }
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; /* 查询对应Alarm Id是否需要记录异常信息 */ usLevel = NAS_GetErrLogAlmLevel(NAS_ERR_LOG_ALM_CS_CALL_FAIL); ulIsLogRecord = TAF_SDC_IsErrLogNeedRecord(usLevel); /* 不需要记录或没有异常时,不保存异常信息 */ 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) ); } /* 获取当前位置信息 */ NAS_MNTN_OutputPositionInfo(&stCsCallFailEvent.stPositionInfo); /* 获取当前Usim信息 */ NAS_MMA_OutputUsimInfo(&stCsCallFailEvent.stUsimInfo); stCsCallFailEvent.enRat = TAF_SDC_GetSysMode(); /* 将异常信息写入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; }