VOS_VOID MN_MSG_CloseSmsCapabilityFeatureInit(VOS_VOID) { VOS_UINT32 ulRet; VOS_UINT32 ulLength; NAS_NVIM_CLOSE_SMS_CAPABILITY_CFG_STRU stCloseSmsCapabilityCfg; ulLength = 0; /* 先获取NV的长度 */ NV_GetLength(en_NV_Item_Close_SMS_Capability_Config, &ulLength); if (ulLength > sizeof(stCloseSmsCapabilityCfg)) { MN_ERR_LOG("MN_MSG_CloseSmsCapabilityFeatureInit():WARNING: en_NV_Item_Close_SMS_Capability_Config length Error"); return; } ulRet = NV_Read(en_NV_Item_Close_SMS_Capability_Config, &stCloseSmsCapabilityCfg, ulLength); f_stMnMsgCloseSmsCapabilityMsg.ucActFlg = stCloseSmsCapabilityCfg.ucActFlg; /* 读取关闭短信定制NV失败,默认不关闭短信功能 */ if (NV_OK != ulRet) { f_stMnMsgCloseSmsCapabilityMsg.ucActFlg = MN_MSG_NVIM_ITEM_INACTIVE; MN_ERR_LOG("MN_MSG_CloseSmsCapabilityFeatureInit: Read en_NV_Item_CLOSE_SMS_Capability_Config Failed"); } return; }
VOS_UINT32 TAF_MMA_SndMmcNetScanMsgReq( TAF_MMA_NET_SCAN_REQ_STRU *pstNetScanReq ) { VOS_UINT32 ulRet; MMA_MMC_NET_SCAN_REQ_STRU *pstMsg = VOS_NULL_PTR; MMA_UE_SUPPORT_FREQ_BAND_STRU stUeBand; /* UE支持的用户设置的频段 */ VOS_UINT32 ulBand; MMA_USER_BAND_SET_UN uUserSetBand; /* 申请消息内存 */ pstMsg = (MMA_MMC_NET_SCAN_REQ_STRU*)PS_ALLOC_MSG_WITH_HEADER_LEN( WUEPS_PID_MMA, sizeof(MMA_MMC_NET_SCAN_REQ_STRU)); if (VOS_NULL_PTR == pstMsg) { /* 内存申请失败 */ MN_ERR_LOG("TAF_MMA_SndNetScanMsgReq():ERROR: Memory Alloc Error for pMsg"); return VOS_ERR; } PS_MEM_SET(pstMsg, 0x00, sizeof(MMA_MMC_NET_SCAN_REQ_STRU)); pstMsg->MsgHeader.ulSenderCpuId = VOS_LOCAL_CPUID; pstMsg->MsgHeader.ulSenderPid = WUEPS_PID_MMA; pstMsg->MsgHeader.ulReceiverCpuId = VOS_LOCAL_CPUID; pstMsg->MsgHeader.ulReceiverPid = WUEPS_PID_MMC; pstMsg->MsgHeader.ulLength = sizeof(MMA_MMC_NET_SCAN_REQ_STRU) - VOS_MSG_HEAD_LENGTH; pstMsg->MsgHeader.ulMsgName = ID_MMA_MMC_NET_SCAN_REQ; /* GU频带设置参数填写 */ /* 将pstNetScanReq->stGuBand 从64位转换为32位 */ MN_MMA_Convert64BitBandTo32Bit(&pstNetScanReq->stBand, &ulBand); MN_MMA_ConvertGUFrequencyBand(&ulBand); uUserSetBand.ulPrefBand = ulBand; MMA_SwitchUserSetBand2UESupportBand(uUserSetBand, &stUeBand); pstMsg->stBand.unGsmBand.ulBand = stUeBand.unGsmBand.ulBand; pstMsg->stBand.unWcdmaBand.ulBand = stUeBand.unWcdmaBand.ulBand; pstMsg->sCellPow = pstNetScanReq->sCellPow; pstMsg->usCellNum = pstNetScanReq->usCellNum; pstMsg->ucRat = pstNetScanReq->ucRat; /*消息发送*/ ulRet = PS_SEND_MSG( WUEPS_PID_MMA, pstMsg); if (VOS_OK != ulRet) { MN_ERR_LOG("TAF_MMA_SndMmcNetScanMsgReq():ERROR: Send Msg Fail."); return VOS_ERR; } return VOS_OK; }
VOS_VOID TAF_MMA_SndMmcEOPlmnSetReq( TAF_MMA_SET_EOPLMN_LIST_STRU *pstEOPlmnSetPara ) { VOS_UINT32 ulRet; MMA_MMC_EOPLMN_SET_REQ_STRU *pstMsg = VOS_NULL_PTR; /* 申请消息内存 */ pstMsg = (MMA_MMC_EOPLMN_SET_REQ_STRU*)PS_ALLOC_MSG( WUEPS_PID_MMA, sizeof(MMA_MMC_EOPLMN_SET_REQ_STRU) - VOS_MSG_HEAD_LENGTH); if (VOS_NULL_PTR == pstMsg) { /* 内存申请失败 */ MN_ERR_LOG("TAF_MMA_SndMmcEOPlmnSetReq():ERROR: Memory Alloc Error for pMsg"); return; } PS_MEM_SET((VOS_INT8*)pstMsg + VOS_MSG_HEAD_LENGTH, 0, sizeof(MMA_MMC_EOPLMN_SET_REQ_STRU) - VOS_MSG_HEAD_LENGTH); pstMsg->MsgHeader.ulSenderCpuId = VOS_LOCAL_CPUID; pstMsg->MsgHeader.ulSenderPid = WUEPS_PID_MMA; pstMsg->MsgHeader.ulReceiverCpuId = VOS_LOCAL_CPUID; pstMsg->MsgHeader.ulReceiverPid = WUEPS_PID_MMC; pstMsg->MsgHeader.ulMsgName = ID_MMA_MMC_EOPLMN_SET_REQ; pstMsg->MsgHeader.ulLength = sizeof(MMA_MMC_EOPLMN_SET_REQ_STRU) - VOS_MSG_HEAD_LENGTH; /* 填充消息内容 */ pstMsg->ucIndex = pstEOPlmnSetPara->ucIndex; pstMsg->ucOPlmnCount = pstEOPlmnSetPara->ucOPlmnCount; PS_MEM_CPY((VOS_INT8*)pstMsg->aucVersion, pstEOPlmnSetPara->aucVersion, TAF_MAX_USER_CFG_OPLMN_VERSION_LEN * sizeof(TAF_UINT8)); PS_MEM_CPY((VOS_INT8*)pstMsg->aucOPlmnWithRat, pstEOPlmnSetPara->aucOPlmnWithRat, TAF_MAX_GROUP_CFG_OPLMN_DATA_LEN * sizeof(TAF_UINT8)); /*消息发送*/ ulRet = PS_SEND_MSG( WUEPS_PID_MMA, pstMsg); if (VOS_OK != ulRet) { MN_ERR_LOG("TAF_MMA_SndMmcEOPlmnSetReq():ERROR: Send Msg Fail."); return; } return; }
VOS_VOID MN_ProcTimerMsg (struct MsgCB * pstMsg) { REL_TIMER_MSG * pstTmrMsg = (REL_TIMER_MSG *)pstMsg; switch (pstTmrMsg->ulName & MN_TIMER_CLASS_MASK) { case MN_TIMER_CLASS_CCA: /* 调用CCA的定时器消息处理函数 */ MN_CALL_ProcTimeoutMsg((REL_TIMER_MSG *)pstMsg); break; case MN_TIMER_CLASS_MSG: /* 调用SMA的定时器消息处理函数 */ MN_MSG_ProcTimeoutMsg((REL_TIMER_MSG *)pstMsg); break; case MN_TIMER_CLASS_SSA: /* 调用SSA的定时器消息处理函数 */ break; case MN_TIMER_CLASS_MMA: /* 调用MMA的定时器消息处理函数 */ break; case MN_TIMER_CLASS_APS: TAF_APS_ProcMsg(pstMsg); break; default: MN_ERR_LOG("MN_ProcTimerMsg: Unknown timer class."); break; } }
VOS_VOID MN_APS_SndSmBearerModifyInd( APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity ) { SMREG_BEARER_MODIFY_IND_STRU *pstSmBearerModifyInd; /* 构造消息并填充消息头 */ pstSmBearerModifyInd = (SMREG_BEARER_MODIFY_IND_STRU *)TAF_APS_AllocMsgToSmAndFillMsgHeader(ID_SMREG_BEARER_MODIFY_IND); if (VOS_NULL_PTR == pstSmBearerModifyInd) { return; } /* 填写消息内容 */ MN_APS_FillSmBearerModifyIndPara(pstSmBearerModifyInd, pstPdpEntity); /* 发送消息 */ if (VOS_OK != PS_SEND_MSG(WUEPS_PID_TAF, pstSmBearerModifyInd)) { MN_ERR_LOG("MN_APS_SndSmBearerModifyInd: Send message failed."); return; } return; }
VOS_UINT32 MN_APS_SndSmBearerDeactivateInd( APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity ) { SMREG_BEARER_DEACTIVATE_IND_STRU *pstSmBearerDeactivateInd; /* 构造消息并填充消息头 */ pstSmBearerDeactivateInd = (SMREG_BEARER_DEACTIVATE_IND_STRU *)TAF_APS_AllocMsgToSmAndFillMsgHeader(ID_SMREG_BEARER_DEACTIVATE_IND); if (VOS_NULL_PTR == pstSmBearerDeactivateInd) { return APS_FAIL; } /* 填写消息内容 */ MN_APS_FillSmBearerDeactivateIndPara(pstSmBearerDeactivateInd, pstPdpEntity); /* 发送消息 */ if (VOS_OK != PS_SEND_MSG(WUEPS_PID_TAF, pstSmBearerDeactivateInd)) { MN_ERR_LOG("MN_APS_SndSmBearerDeactivateInd: Send message failed."); return VOS_ERR; } return VOS_OK; }
VOS_VOID MN_CALL_ProcOmConfigGsmCodec( ID_NAS_OM_INQUIRE_STRU *pstMsg ) { NAS_OM_SET_GSM_CODEC_CONFIG_REQ_STRU *pstCodecConfigReq = VOS_NULL_PTR; NAS_OM_SET_GSM_CODEC_CONFIG_CNF_STRU *pstCodecConfigCnf = VOS_NULL_PTR; VOS_UINT32 ulMsgLen; VOS_UINT32 ulRet; /* 申请消息 */ ulMsgLen = sizeof(NAS_OM_SET_GSM_CODEC_CONFIG_CNF_STRU) - VOS_MSG_HEAD_LENGTH; pstCodecConfigCnf = (NAS_OM_SET_GSM_CODEC_CONFIG_CNF_STRU*)PS_ALLOC_MSG(WUEPS_PID_TAF, ulMsgLen); if (VOS_NULL_PTR == pstCodecConfigCnf) { MN_ERR_LOG("MN_CALL_ProcOmConfigGsmCodec:Error: Memory Alloc fail"); return; } /* 初始化 */ PS_MEM_SET((VOS_UINT8*)pstCodecConfigCnf + VOS_MSG_HEAD_LENGTH, 0x00, ulMsgLen); pstCodecConfigReq = (NAS_OM_SET_GSM_CODEC_CONFIG_REQ_STRU*)pstMsg; /* 填写消息内容 */ pstCodecConfigCnf->ulReceiverPid = MSP_PID_DIAG_APP_AGENT; pstCodecConfigCnf->ulMsgId = ID_NAS_OM_SET_CODEC_TYPE_CONFIRM; pstCodecConfigCnf->usOriginalId = pstMsg->usOriginalId; pstCodecConfigCnf->usTerminalId = pstMsg->usTerminalId; pstCodecConfigCnf->ulTimeStamp = pstMsg->ulTimeStamp; pstCodecConfigCnf->ulSN = pstMsg->ulSN; /* 商用版本防止误配置,当只配置支持部分语音编码模式时直接返回失败 */ if (NAS_OM_GSM_CODEC_FR_EFR_HR_AMR != pstCodecConfigReq->enGsmCodec) { MN_WARN_LOG("MN_CALL_ProcOmConfigGsmCodec:GsmCodec is not NAS_OM_GSM_CODEC_FR_EFR_HR_AMR"); pstCodecConfigCnf->ulRet = VOS_ERR; /* 发送消息 */ PS_SEND_MSG(WUEPS_PID_TAF, pstCodecConfigCnf); return; } ulRet = MN_CALL_ConfigGsmCapaProc(pstCodecConfigReq->enGsmCodec); if ( VOS_OK == ulRet) { pstCodecConfigCnf->ulRet = VOS_OK; } else { pstCodecConfigCnf->ulRet = VOS_ERR; } /* 发送消息 */ PS_SEND_MSG(WUEPS_PID_TAF, pstCodecConfigCnf); return; }
VOS_VOID TAF_MSG_ListLeftMsg(VOS_VOID) { MN_MSG_LIST_EVT_INFO_STRU *pstListEvt; pstListEvt = (MN_MSG_LIST_EVT_INFO_STRU *)PS_MEM_ALLOC(WUEPS_PID_TAF, sizeof(MN_MSG_LIST_EVT_INFO_STRU)); if (VOS_NULL_PTR == pstListEvt) { MN_ERR_LOG("TAF_MSG_ListLeftMsg:ALLOC MEM FAIL"); return; } else { pstListEvt->bSuccess = VOS_TRUE; pstListEvt->bLastListEvt = VOS_TRUE; pstListEvt->bFirstListEvt = VOS_FALSE; PS_MEM_CPY( &(pstListEvt->stReceivedListPara), &g_stList, sizeof(MN_MSG_LIST_PARM_STRU) ); } if (0 == g_ulLeftReportNum) { pstListEvt->ulReportNum = 0; pstListEvt->ulFailCause = MN_ERR_NO_ERROR; MN_MSG_ReportListEvent(g_clientId,g_opId,pstListEvt,MN_MSG_EVT_LIST); } else { /* 调用函数分段上报需列表个数 */ MN_MSG_RptMsg(g_clientId, g_opId, g_ulLeftReportNum, &g_stList, pstListEvt); } PS_MEM_FREE(WUEPS_PID_TAF, pstListEvt); }
VOS_VOID MN_CALL_ProcOmCodecRpt( ID_NAS_OM_INQUIRE_STRU *pstMsg ) { VOS_UINT32 ulMsgLen; VOS_UINT32 ulRet; NAS_OM_CODEC_TYPE_CNF_STRU *pstCodecTypeCnf = VOS_NULL_PTR; MN_CALL_CHANNEL_PARAM_STRU stChannParm; /* 申请内存 */ ulMsgLen = sizeof(NAS_OM_CODEC_TYPE_CNF_STRU) - VOS_MSG_HEAD_LENGTH; pstCodecTypeCnf = (NAS_OM_CODEC_TYPE_CNF_STRU*)PS_ALLOC_MSG(WUEPS_PID_TAF, ulMsgLen); if (VOS_NULL_PTR == pstCodecTypeCnf) { MN_ERR_LOG("MN_CALL_ProcOmCodecRpt:Error: Memory Alloc fail"); return; } /* 初始化 */ PS_MEM_SET((VOS_UINT8*)pstCodecTypeCnf + VOS_MSG_HEAD_LENGTH, 0x00, ulMsgLen); /* 填充消息 */ pstCodecTypeCnf->ulReceiverPid = MSP_PID_DIAG_APP_AGENT; pstCodecTypeCnf->ulMsgId = ID_NAS_OM_CODEC_TYPE_CONFIRM; pstCodecTypeCnf->usOriginalId = pstMsg->usOriginalId; pstCodecTypeCnf->usTerminalId = pstMsg->usTerminalId; pstCodecTypeCnf->ulTimeStamp = pstMsg->ulTimeStamp; pstCodecTypeCnf->ulSN = pstMsg->ulSN; ulRet = MN_CALL_GetTchParm(&stChannParm); if( VOS_OK == ulRet ) { pstCodecTypeCnf->enCurrCodec = MN_CALL_ConvertMnCodecToOmCodec(stChannParm.enCodecType); } else { pstCodecTypeCnf->enCurrCodec = NAS_OM_CODEC_TYPE_BUTT; } pstCodecTypeCnf->enGsmCodecConfig = MN_CALL_ConvertSpeechVers(); /* 发送消息 */ ulRet = PS_SEND_MSG(WUEPS_PID_TAF, pstCodecTypeCnf); if (VOS_OK != ulRet) { MN_WARN_LOG("MN_CALL_ProcOmCodecRpt:Warning Send msg fail."); } return; }
VOS_VOID TAF_MMA_SndMmcImsSrvInfoNotify( VOS_UINT8 ucImsCallFlg ) { VOS_UINT32 ulRet; MMA_MMC_IMS_SRV_INFO_NOTIFY_STRU *pstMsg = VOS_NULL_PTR; /* 申请内存 */ pstMsg = (MMA_MMC_IMS_SRV_INFO_NOTIFY_STRU *)PS_ALLOC_MSG(WUEPS_PID_MMA, sizeof(MMA_MMC_IMS_SRV_INFO_NOTIFY_STRU) - VOS_MSG_HEAD_LENGTH); if ( VOS_NULL_PTR == pstMsg ) { MN_ERR_LOG("TAF_MMA_SndMmcImsSrvInfoNotify:ERROR: Memory Alloc Error for pMsg"); return; } PS_MEM_SET((VOS_INT8*)pstMsg + VOS_MSG_HEAD_LENGTH, 0, sizeof(MMA_MMC_IMS_SRV_INFO_NOTIFY_STRU) - VOS_MSG_HEAD_LENGTH); pstMsg->stMsgHeader.ulReceiverCpuId = VOS_LOCAL_CPUID; pstMsg->stMsgHeader.ulReceiverPid = WUEPS_PID_MMC; pstMsg->stMsgHeader.ulSenderCpuId = VOS_LOCAL_CPUID; pstMsg->stMsgHeader.ulSenderPid = WUEPS_PID_MMA; pstMsg->stMsgHeader.ulLength = sizeof(MMA_MMC_IMS_SRV_INFO_NOTIFY_STRU) - VOS_MSG_HEAD_LENGTH; pstMsg->stMsgHeader.ulMsgName = ID_MMA_MMC_IMS_SRV_INFO_NOTIFY; pstMsg->ucImsCallFlg = ucImsCallFlg; /* 调用VOS发送原语 */ ulRet = PS_SEND_MSG( WUEPS_PID_MMA, pstMsg ); if ( VOS_OK != ulRet ) { MN_ERR_LOG("TAF_MMA_SndMmcImsSrvInfoNotify:ERROR:PS_SEND_MSG FAILURE"); } return; }
VOS_VOID TAF_MMA_SndMmcImsVoiceCapInd( VOS_UINT8 ucImsVoiceAvail ) { VOS_UINT32 ulRet; MMA_MMC_IMS_VOICE_CAP_IND_STRU *pstMsg = VOS_NULL_PTR; /* 申请内存 */ pstMsg = (MMA_MMC_IMS_VOICE_CAP_IND_STRU *)PS_ALLOC_MSG(WUEPS_PID_MMA, sizeof(MMA_MMC_IMS_VOICE_CAP_IND_STRU) - VOS_MSG_HEAD_LENGTH); if ( VOS_NULL_PTR == pstMsg ) { MN_ERR_LOG("TAF_MMA_SndMmcImsVoiceCapInd:ERROR: Memory Alloc Error for pMsg"); return; } PS_MEM_SET((VOS_INT8*)pstMsg + VOS_MSG_HEAD_LENGTH, 0, sizeof(MMA_MMC_IMS_VOICE_CAP_IND_STRU) - VOS_MSG_HEAD_LENGTH); pstMsg->MsgHeader.ulReceiverCpuId = VOS_LOCAL_CPUID; pstMsg->MsgHeader.ulReceiverPid = WUEPS_PID_MMC; pstMsg->MsgHeader.ulSenderCpuId = VOS_LOCAL_CPUID; pstMsg->MsgHeader.ulSenderPid = WUEPS_PID_MMA; pstMsg->MsgHeader.ulLength = sizeof(MMA_MMC_IMS_VOICE_CAP_IND_STRU) - VOS_MSG_HEAD_LENGTH; pstMsg->MsgHeader.ulMsgName = ID_MMA_MMC_IMS_VOICE_CAP_IND; pstMsg->ucAvail = ucImsVoiceAvail; /* 调用VOS发送原语 */ ulRet = PS_SEND_MSG( WUEPS_PID_MMA, pstMsg ); if ( VOS_OK != ulRet ) { MN_ERR_LOG("TAF_MMA_SndMmcAttachReq:ERROR:PS_SEND_MSG FAILURE"); } return; }
VOS_VOID MN_CALL_ProcOmCodecRpt( ID_NAS_OM_INQUIRE_STRU *pstMsg ) { VOS_UINT32 ulRet; ID_NAS_OM_CNF_STRU *pstNasOmCnf; NAS_OM_CODEC_TYPE_STRU stCodecType; MN_CALL_CHANNEL_PARAM_STRU stChannParm; PS_MEM_SET(&stCodecType, 0x00, sizeof(stCodecType)); pstNasOmCnf = (ID_NAS_OM_CNF_STRU *)PS_ALLOC_MSG_WITH_HEADER_LEN(WUEPS_PID_TAF, (sizeof(ID_NAS_OM_CNF_STRU) + sizeof(NAS_OM_CODEC_TYPE_STRU)) - NAS_OM_DATA_PTR_LEN); /* 申请内存 */ if (VOS_NULL_PTR == pstNasOmCnf) { MN_ERR_LOG("MN_CALL_ProcOmCodecRpt:Error: Memory Alloc fail"); return; } ulRet = MN_CALL_GetTchParm(&stChannParm); if( VOS_OK == ulRet ) { stCodecType.enCurrCodec = MN_CALL_ConvertMnCodecToOmCodec(stChannParm.enCodecType); } else { stCodecType.enCurrCodec = NAS_OM_CODEC_TYPE_BUTT; } stCodecType.enGsmCodecConfig = MN_CALL_ConvertSpeechVers(); PS_MEM_SET(pstNasOmCnf, 0, sizeof(ID_NAS_OM_CNF_STRU)); MN_Com_FillNasOmTransMsgHeader(pstNasOmCnf, ID_NAS_OM_CODEC_TYPE_CONFIRM,pstMsg->usToolsId); PS_MEM_CPY(pstNasOmCnf->aucData, &stCodecType,sizeof(stCodecType)); pstNasOmCnf->usLength = NAS_OM_DATA_OFFSET + sizeof(NAS_OM_CODEC_TYPE_STRU); ulRet = PS_SEND_MSG(WUEPS_PID_TAF, pstNasOmCnf); /* 原语发送 */ if (VOS_OK != ulRet) { MN_WARN_LOG("MN_CALL_ProcOmCodecRpt:Warning Send msg fail."); } }
VOS_VOID MN_MSG_MtSpecificFeatureInit(VOS_VOID) { VOS_UINT32 ulRet; ulRet = NV_Read(en_NV_Item_DISCARD_DELIVER_MSG_FEATURE, &f_stMnMsgDiscardDeliverMsg, sizeof(f_stMnMsgDiscardDeliverMsg)); if (NV_OK != ulRet) { MN_ERR_LOG("MN_MSG_MtSpecificFeatureInit: Read en_NV_Item_Sms_MeStorageEnable Failed"); f_stMnMsgDiscardDeliverMsg.ucActFlg = MN_MSG_NVIM_ITEM_INACTIVE; } ulRet = NV_Read(en_NV_Item_REPLACE_DELIVER_MSG_FEATURE, &f_stMnMsgReplaceDeliverMsg, sizeof(f_stMnMsgReplaceDeliverMsg)); if (NV_OK != ulRet) { MN_ERR_LOG("MN_MSG_MtSpecificFeatureInit: Read en_NV_Item_SMS_REPLACEMENT_FEATURE Failed"); f_stMnMsgReplaceDeliverMsg.ucActFlg = MN_MSG_NVIM_ITEM_ACTIVE; } return; }
VOS_UINT32 TAF_MMA_SndMmcAbortNetScanMsgReq(VOS_VOID) { VOS_UINT32 ulRet; MMA_MMC_ABORT_NET_SCAN_REQ_STRU *pstMsg = VOS_NULL_PTR; /* 申请消息内存 */ pstMsg = (MMA_MMC_ABORT_NET_SCAN_REQ_STRU *)PS_ALLOC_MSG_WITH_HEADER_LEN( WUEPS_PID_MMA, sizeof(MMA_MMC_ABORT_NET_SCAN_REQ_STRU)); if (VOS_NULL_PTR == pstMsg) { /* 内存申请失败 */ MN_ERR_LOG("TAF_MMA_SndMmcAbortNetScanMsgReq():ERROR: Memory Alloc Error for pMsg"); return VOS_ERR; } PS_MEM_SET(pstMsg, 0x00, sizeof(MMA_MMC_ABORT_NET_SCAN_REQ_STRU)); pstMsg->MsgHeader.ulSenderCpuId = VOS_LOCAL_CPUID; pstMsg->MsgHeader.ulSenderPid = WUEPS_PID_MMA; pstMsg->MsgHeader.ulReceiverCpuId = VOS_LOCAL_CPUID; pstMsg->MsgHeader.ulReceiverPid = WUEPS_PID_MMC; pstMsg->MsgHeader.ulLength = sizeof(MMA_MMC_ABORT_NET_SCAN_REQ_STRU) - VOS_MSG_HEAD_LENGTH; pstMsg->MsgHeader.ulMsgName = ID_MMA_MMC_ABORT_NET_SCAN_REQ; /*消息发送*/ ulRet = PS_SEND_MSG( WUEPS_PID_MMA, pstMsg); if (VOS_OK != ulRet) { MN_ERR_LOG("TAF_MMA_SndMmcAbortNetScanMsgReq():ERROR: Send Msg Fail."); return VOS_ERR; } return VOS_OK; }
VOS_VOID MN_CALL_ProcOmConfigGsmCodec( ID_NAS_OM_INQUIRE_STRU *pstMsg ) { NAS_OM_GSM_CODEC_CONFIG_ENUM_U8 enGsmCodecConfig; VOS_UINT32 ulRet; ID_NAS_OM_CNF_STRU *pstNasOmCnf; NAS_OM_SET_GSM_CODEC_CONFIG_CNF_STRU stCodecConfigCnf; enGsmCodecConfig = pstMsg->aucData[0]; ulRet = MN_CALL_ConfigGsmCapaProc(enGsmCodecConfig); if ( VOS_OK == ulRet) { stCodecConfigCnf.ulRet = VOS_OK; } else { stCodecConfigCnf.ulRet = VOS_ERR; } pstNasOmCnf = (ID_NAS_OM_CNF_STRU *)PS_ALLOC_MSG_WITH_HEADER_LEN(WUEPS_PID_TAF, (sizeof(ID_NAS_OM_CNF_STRU)+ sizeof(NAS_OM_SET_GSM_CODEC_CONFIG_CNF_STRU)) - NAS_OM_DATA_PTR_LEN); /* 申请内存 */ if (VOS_NULL_PTR == pstNasOmCnf) { MN_ERR_LOG("MN_CALL_ProcOmConfigGsmCodec:Error: Memory Alloc fail"); return; } PS_MEM_SET(pstNasOmCnf, 0, sizeof(ID_NAS_OM_CNF_STRU)); MN_Com_FillNasOmTransMsgHeader(pstNasOmCnf, ID_NAS_OM_SET_CODEC_TYPE_CONFIRM,pstMsg->usToolsId); PS_MEM_CPY(pstNasOmCnf->aucData, &stCodecConfigCnf,sizeof(stCodecConfigCnf)); pstNasOmCnf->usLength = NAS_OM_DATA_OFFSET + sizeof(NAS_OM_SET_GSM_CODEC_CONFIG_CNF_STRU); ulRet = PS_SEND_MSG(WUEPS_PID_TAF, pstNasOmCnf); /* 原语发送 */ if (VOS_OK != ulRet) { MN_WARN_LOG("MN_CALL_ProcOmConfigGsmCodec:WARNING: Send msg fail."); } }
VOS_UINT32 MN_MSG_IsProtocolSendDomain(VOS_VOID) { VOS_UINT32 ulRet; TAF_NVIM_SMS_SERVICE_PARA_STRU stSmsSrvParam; ulRet = NV_Read(en_NV_Item_SMS_SERVICE_Para, &stSmsSrvParam, MN_MSG_SRV_PARAM_LEN); if (NV_OK != ulRet) { MN_ERR_LOG("MN_MSG_IsProtocolSendDomain: Read Service Parm From Nvim Failed"); return VOS_FALSE; } if (MN_MSG_MO_DOMAIN_CUSTOMIZE_PROTOCOL == (stSmsSrvParam.aucSmsServicePara)[MN_MSG_SRV_MO_DOMAIN_PROTOCOL_OFFSET]) { return VOS_TRUE; } else { return VOS_FALSE; } }
VOS_VOID MN_DispatchAppMsg (struct MsgCB * pstMsg) { MN_APP_REQ_MSG_STRU * pstAppMsg = (MN_APP_REQ_MSG_STRU *)pstMsg; switch (pstAppMsg->usMsgName & MN_APP_MSG_CLASS_MASK) { case MN_APP_MSG_CLASS_CALL: /* 来自CCA API的消息,交给CCA处理 */ MN_CALL_ProcAppReqMsg(pstAppMsg); break; case MN_APP_MSG_CLASS_MSG: /* 来自SMA API的消息,交给SMA处理 */ MN_MSG_ProcAppReqMsg(pstAppMsg); break; case MN_APP_MSG_CLASS_SSA: /* 来自SSA API的消息,交给SSA处理 */ MN_SndAppMsgToSs(pstMsg); break; case MN_APP_MSG_CLASS_MMA: /* 来自MMA API的消息,交给MMA处理 */ break; /* 移到MN_DispatchTafMsg中处理 */ case MN_APP_MSG_CLASS_QRY: /* AT与MN模块间查询操作相关消息 */ break; default: MN_ERR_LOG("MN_DispatchAppMsg: Unknown message type."); break; } }
VOS_UINT32 MN_MSG_DecodeCbmPage( const MN_MSG_CBRAW_TS_DATA_STRU *pstCbRawInfo, MN_MSG_CBPAGE_STRU *pstCbmPageInfo ) { VOS_UINT32 ulRet; MN_MSG_CBGSMPAGE_STRU *pstGsmPage; VOS_UINT32 ulDataLen; /*判断输入参数的合法性*/ if ((VOS_NULL_PTR == pstCbRawInfo) || (VOS_NULL_PTR == pstCbmPageInfo)) { MN_ERR_LOG("MN_MSG_DecodeCbmPage: Parameter of the function is null."); return MN_ERR_NULLPTR; } pstGsmPage = (MN_MSG_CBGSMPAGE_STRU *)pstCbRawInfo->aucData; /* 解析DCS */ /* Modified by f62575 for V9R1 STK升级, 2013-6-26, begin */ ulRet = MN_MSG_DecodeCbsDcs(pstGsmPage->ucDCS, pstGsmPage->aucContent, TAF_CBA_MAX_CBDATA_LEN, &(pstCbmPageInfo->stDcs)); /* Modified by f62575 for V9R1 STK升级, 2013-6-26, end */ if (MN_ERR_NO_ERROR != ulRet) { MN_WARN_LOG1("MN_MSG_DecodeCbmPage:DCS Invalid:ulRet",(VOS_INT32)ulRet); } /* 解析SN */ ulRet = MSG_CbDecodeSn(pstGsmPage, &(pstCbmPageInfo->stSn)); if (MN_ERR_NO_ERROR != ulRet) { MN_WARN_LOG1("MN_MSG_DecodeCbmPage:SN Invalid:ulRet",(VOS_INT32)ulRet); } /* 解析MID */ pstCbmPageInfo->usMid = pstGsmPage->ucMIdHigh; pstCbmPageInfo->usMid = (VOS_UINT16)(pstCbmPageInfo->usMid << 8) | pstGsmPage->ucMIdLow; /* page info */ pstCbmPageInfo->ucPageIndex = pstGsmPage->Pagebit4; pstCbmPageInfo->ucPageNum = pstGsmPage->Pagesbit4; /* This parameter is coded as two 4-bit fields. The first field (bits 0-3) indicates the binary value of the total number of pages in the CBS message and the second field (bits 4-7) indicates binary the page number within that sequence. The coding starts at 0001, with 0000 reserved. If a mobile receives the code 0000 in either the first field or the second field then it shall treat the CBS message exactly the same as a CBS message with page parameter 0001 0001 (i.e. a single page message). */ if ( ( 0 == pstCbmPageInfo->ucPageIndex ) || ( 0 == pstCbmPageInfo->ucPageNum )) { pstCbmPageInfo->ucPageIndex = 1; pstCbmPageInfo->ucPageNum = 1; } ulDataLen = pstCbRawInfo->ulLen - MSG_CBPAGE_HEADER_LEN; /* 如果是 7bit编码需要将其转化为8bit */ if (MN_MSG_MSG_CODING_7_BIT == pstCbmPageInfo->stDcs.enMsgCoding ) { pstCbmPageInfo->stContent.ulLen = (ulDataLen * 8)/7; if ( pstCbmPageInfo->stContent.ulLen > TAF_CBA_MAX_RAW_CBDATA_LEN ) { pstCbmPageInfo->stContent.ulLen = TAF_CBA_MAX_RAW_CBDATA_LEN; } /* Modified by f62575 for V9R1 STK升级, 2013-6-26, begin */ ulRet = TAF_STD_UnPack7Bit(pstGsmPage->aucContent, pstCbmPageInfo->stContent.ulLen, 0, pstCbmPageInfo->stContent.aucContent); if (VOS_OK != ulRet) { MN_WARN_LOG("MN_MSG_DecodeCbmPage:TAF_STD_UnPack7Bit fail"); } /* Modified by f62575 for V9R1 STK升级, 2013-6-26, end */ } else { pstCbmPageInfo->stContent.ulLen = ulDataLen; PS_MEM_CPY(pstCbmPageInfo->stContent.aucContent, pstGsmPage->aucContent, pstCbmPageInfo->stContent.ulLen); } return MN_ERR_NO_ERROR; }
VOS_VOID TAF_MTA_ProcMsg (struct MsgCB *pstMsg) { /* 消息为空,直接返回 */ if (VOS_NULL_PTR == pstMsg) { MN_ERR_LOG("TAF_MTA_ProcMsg: PstMsg is NULL!"); return; } /* 根据发送方PID来分发消息 */ switch (pstMsg->ulSenderPid) { case WUEPS_PID_AT: TAF_MTA_RcvAtMsg(pstMsg); break; case WUEPS_PID_WCOM: TAF_MTA_RcvWcomMsg(pstMsg); break; case UEPS_PID_GAS: TAF_MTA_RcvGasMsg(pstMsg); break; case DSP_PID_GPHY: TAF_MTA_RcvGphyMsg(pstMsg); break; case DSP_PID_WPHY: TAF_MTA_RcvWphyMsg(pstMsg); break; case WUEPS_PID_TC: TAF_MTA_RcvTcMsg(pstMsg); break; case VOS_PID_TIMER: TAF_MTA_RcvTimerMsg(pstMsg); break; case WUEPS_PID_WRR: TAF_MTA_RcvWrrMsg(pstMsg); break; case DSP_PID_APM: TAF_MTA_RcvApmMsg(pstMsg); break; case WUEPS_PID_MMA: TAF_MTA_RcvNasMsg(pstMsg); break; case ACPU_PID_TAFAGENT: TAF_MTA_RcvTafAgentMsg(pstMsg); break; #if (FEATURE_ON == FEATURE_PTM) case MSP_PID_DIAG_APP_AGENT: TAF_MTA_RcvAcpuOmMsg(pstMsg); break; #endif #if (FEATURE_ON == FEATURE_MULTI_MODEM) case UEPS_PID_MTC: TAF_MTA_RcvMtcMsg(pstMsg); break; #endif #if (FEATURE_ON == FEATURE_LTE) case PS_PID_ERRC: TAF_MTA_RcvLrrcMsg(pstMsg); break; #endif case DSP_PID_STARTUP: TAF_MTA_RcvDspStartMsg(pstMsg); break; #if (FEATURE_ON == FEATURE_UE_MODE_TDS) case TPS_PID_RRC: TAF_MTA_RcvTdsMsg(pstMsg); break; #endif #if 0 case TLPHY_PID_RTTAGENT: TAF_MTA_RcvTLphyAgentMsg(pstMsg); break; #endif case TLPHY_PID_RTTAGENT: TAF_MTA_RcvRttAgentMsg(pstMsg); break; #if (FEATURE_ON == FEATURE_LTE) case PS_PID_MM: TAF_MTA_RcvNasMsg(pstMsg); break; #endif #if (FEATURE_ON == FEATURE_TDS_WCDMA_DYNAMIC_LOAD) case CCPU_PID_CBT: TAF_MTA_RcvCcbtMsg(pstMsg); break; #endif case WUEPS_PID_MMC: TAF_MTA_RcvNasMsg(pstMsg); break; #if (FEATURE_ON == FEATURE_UE_MODE_CDMA) case CPROC_PID_1X_CTAS: TAF_MTA_RcvCtasMsg(pstMsg); break; #endif #if (FEATURE_ON == FEATURE_UE_MODE_CDMA) case WUEPS_PID_USIM: TAF_MTA_RcvUsimmMsg(pstMsg); break; #endif case DSP_PID_RCM: TAF_MTA_RcvRcmMsg(pstMsg); break; default: MTA_ERROR_LOG("TAF_MTA_ProcMsg: No opposite MsgPro Function!"); break; } return; }
VOS_UINT32 TAF_MMA_SndMmcSysCfgReq( TAF_MMA_SYS_CFG_PARA_STRU *pSysCfgReq, MMA_SYS_CFG_SET_FLG usSetFlg ) { VOS_UINT32 ulRet; MMA_MMC_SYS_CFG_SET_REQ_STRU *pMsg = VOS_NULL_PTR; MMA_USER_BAND_SET_UN uUserSetBand; MMA_UE_SUPPORT_FREQ_BAND_STRU stUeBand; /* UE支持的用户设置的频段 */ VOS_UINT32 ulBand; VOS_UINT32 i; /* 申请消息内存 */ pMsg = (MMA_MMC_SYS_CFG_SET_REQ_STRU*)PS_ALLOC_MSG_WITH_HEADER_LEN( WUEPS_PID_MMA, sizeof(MMA_MMC_SYS_CFG_SET_REQ_STRU)); if (VOS_NULL_PTR == pMsg) { /* 内存申请失败 */ MN_ERR_LOG("TAF_MMA_SndMmcSysCfgReq():ERROR: Memory Alloc Error for pMsg"); return VOS_ERR; } pMsg->MsgHeader.ulSenderCpuId = VOS_LOCAL_CPUID; pMsg->MsgHeader.ulSenderPid = WUEPS_PID_MMA; pMsg->MsgHeader.ulReceiverCpuId = VOS_LOCAL_CPUID; pMsg->MsgHeader.ulReceiverPid = WUEPS_PID_MMC; pMsg->MsgHeader.ulMsgName = ID_MMA_MMC_SYS_CFG_SET_REQ; pMsg->ucOnlyRoamParaChanged = VOS_FALSE; /*漫游参数填写*/ pMsg->enRoamCapability = pSysCfgReq->ucRoam; /*接入模式pMsg->stRatPrioList参数填写*/ #if (FEATURE_ON == FEATURE_LTE) if (pSysCfgReq->stRatOrder.ucRatOrderNum > TAF_PH_MAX_GUL_RAT_NUM) { pSysCfgReq->stRatOrder.ucRatOrderNum = TAF_PH_MAX_GUL_RAT_NUM; } #else if (pSysCfgReq->stRatOrder.ucRatOrderNum > TAF_PH_MAX_GU_RAT_NUM) { pSysCfgReq->stRatOrder.ucRatOrderNum = TAF_PH_MAX_GU_RAT_NUM; } #endif /* 如果UE不支持GSM,当设置包含G模去掉G模 */ if (MMA_TRUE == MMA_IsGsmForbidden()) { pMsg->stRatPrioList.ucRatNum = 0; for ( i = 0 ; i < pSysCfgReq->stRatOrder.ucRatOrderNum; i++ ) { if ( TAF_PH_RAT_GSM == pSysCfgReq->stRatOrder.aenRatOrder[i]) { continue; } pMsg->stRatPrioList.aucRatPrio[pMsg->stRatPrioList.ucRatNum] = pSysCfgReq->stRatOrder.aenRatOrder[i]; pMsg->stRatPrioList.ucRatNum++; } } else { PS_MEM_CPY(&(pMsg->stRatPrioList), &(pSysCfgReq->stRatOrder), sizeof(MMA_MMC_PLMN_RAT_PRIO_STRU)); } /* GU频带设置参数填写*/ /*将pSysCfgReq->stGuBand 从64位转换为32位*/ MN_MMA_Convert64BitBandTo32Bit(&pSysCfgReq->stGuBand, &ulBand); MN_MMA_ConvertGUFrequencyBand(&ulBand); uUserSetBand.ulPrefBand = ulBand; MMA_SwitchUserSetBand2UESupportBand(uUserSetBand, &stUeBand); pMsg->stBand.unGsmBand.ulBand = stUeBand.unGsmBand.ulBand; pMsg->stBand.unWcdmaBand.ulBand = stUeBand.unWcdmaBand.ulBand; /* L频段设置参数填写 */ pMsg->stBand.stLteBand.aulLteBand[0] = pSysCfgReq->stLBand.ulBandLow; pMsg->stBand.stLteBand.aulLteBand[1] = pSysCfgReq->stLBand.ulBandHigh; if ((MMA_SYS_CFG_MODE_SET != (usSetFlg & MMA_SYS_CFG_MODE_SET)) && (MMA_SYS_CFG_BAND_SET != (usSetFlg & MMA_SYS_CFG_BAND_SET)) && (MMA_SYS_CFG_ROAM_SET == (usSetFlg & MMA_SYS_CFG_ROAM_SET))) { pMsg->ucOnlyRoamParaChanged = VOS_TRUE; } /*消息发送*/ ulRet = PS_SEND_MSG( WUEPS_PID_MMA, pMsg); if (VOS_OK != ulRet) { MN_ERR_LOG("TAF_MMA_SndMmcSysCfgReq():ERROR: Send Msg Fail."); return VOS_ERR; } return VOS_OK; }
VOS_VOID TAF_MMA_ReadNvimUeSupporttedLteBand(VOS_VOID) { TAF_USER_SET_PREF_BAND64 *pstUeSupportLteBand = VOS_NULL_PTR; VOS_UINT32 ulRslt; LRRC_NV_UE_EUTRA_CAP_STRU *pstUECapability = VOS_NULL_PTR; RRC_UE_CAP_RF_PARA_STRU *pstRfPara = VOS_NULL_PTR; VOS_UINT32 i; VOS_UINT8 ucBandNo; pstUeSupportLteBand = MN_MMA_GetUeSupportLteBandAddr(); PS_MEM_SET(pstUeSupportLteBand, 0X0, sizeof(TAF_USER_SET_PREF_BAND64)); pstUECapability =(LRRC_NV_UE_EUTRA_CAP_STRU*)PS_MEM_ALLOC(WUEPS_PID_MMA, sizeof(LRRC_NV_UE_EUTRA_CAP_STRU)); if(VOS_NULL_PTR == pstUECapability) { MN_ERR_LOG("TAF_MMA_ReadNvimUeSupporttedLteBand():PS_MEM_ALLOC failed!"); return ; } PS_MEM_SET(pstUECapability, 0x00, sizeof(LRRC_NV_UE_EUTRA_CAP_STRU)); /* LTE NV项长度 */ ulRslt = NVM_Read(EN_NV_ID_UE_CAPABILITY, pstUECapability, sizeof(LRRC_NV_UE_EUTRA_CAP_STRU)); if ( (NV_OK != ulRslt) || (NVIM_EUTRA_MAX_SUPPORT_BANDS_NUM < pstUECapability->stRfPara.usCnt) ) { /* 读NV失败,打印未成功初始化值,默认赋值为支持所有频段 */ MN_ERR_LOG("TAF_MMA_ReadNvimUeSupporttedLteBand():read en_NV_Item_EUTRA_CAPA_COMM_INFO error"); pstUeSupportLteBand->ulBandHigh = MN_MMA_LTE_HIGH_BAND_ALL; pstUeSupportLteBand->ulBandLow = MN_MMA_LTE_LOW_BAND_ALL; PS_MEM_FREE(WUEPS_PID_MMA, pstUECapability); return; } /* 获取NV中的频段信息: ulBandLow的最低bit对应band1,最高bit对应band32 ulBandHigh的最低bit对应band33,最高bit对应band64 */ pstRfPara = &(pstUECapability->stRfPara); for ( i = 0; i < pstRfPara->usCnt; i++ ) { ucBandNo = (pstRfPara->astSuppEutraBandList[i]).ucEutraBand; /* NV中的频段信息指示为低32,即对应band1到band32*/ if ( ucBandNo <= (NVIM_EUTRA_MAX_SUPPORT_BANDS_NUM / 2) ) { /*lint -e701*/ pstUeSupportLteBand->ulBandLow |= (VOS_UINT32)( 0x00000001 << (ucBandNo - 1) ); /*lint +e701*/ } /* NV中的频段信息指示为高32,即对应band33到band64 */ else if ( ucBandNo <= NVIM_EUTRA_MAX_SUPPORT_BANDS_NUM ) { /*lint -e961 -e701*/ pstUeSupportLteBand->ulBandHigh |= (VOS_UINT32)( 0x00000001 << (ucBandNo - 32 - 1) ); /*lint +e961 +e701*/ } else { /* band号异常 */ MN_ERR_LOG("TAF_MMA_ReadNvimUeSupporttedLteBand():LTE BAND NO IS BIG THAN 64, error"); } } PS_MEM_FREE(WUEPS_PID_MMA, pstUECapability); return; }