/*lint -e961*/ VOS_VOID NAS_ETC_RabmMsgDistr( VOS_VOID *pRcvMsg ) { PS_MSG_HEADER_STRU *pRabmMsg = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ETC_INFO_LOG("NAS_ETC_RabmMsgDistr is entered."); pRabmMsg = (PS_MSG_HEADER_STRU*)pRcvMsg; /*根据消息名,调用相应的消息处理函数*/ switch (pRabmMsg->ulMsgName) { /*如果收到的是ID_ETC_ERABM_REL_IND消息*/ case ID_ETC_ERABM_REL_IND: break; /*如果收到的是ID_ETC_ERABM_SUSPEND_IND消息*/ case ID_ETC_ERABM_SUSPEND_IND: NAS_ETC_RcvTcRabmSuspendInd( (ETC_ERABM_SUSPEND_IND_STRU *) pRcvMsg ); break; /*如果收到的是ID_ETC_ERABM_RESUME_IND消息*/ case ID_ETC_ERABM_RESUME_IND: NAS_ETC_RcvTcRabmResumeInd( (ETC_ERABM_RESUME_IND_STRU *) pRcvMsg ); break; default: break; } }
/*lint -e961*/ VOS_VOID NAS_ETC_PdcpUlMsgDistr ( VOS_VOID *pRcvMsg ) { PS_MSG_HEADER_STRU *pPdcpUlMsg = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ETC_INFO_LOG("NAS_ETC_PdcpUlMsgDistr is entered."); /* 在ETC收到EMM消息处,已经做了判断,如果当前L是挂起状态,正常情况下不会收到除去 ID_LTC_LPDCP_DEACTIVATE_TEST_MODE_CNF以外的几条消息;L模挂起,环回状态激活,收到关机消息时, 会给PDCP发送ID_LTC_LPDCP_DEACTIVATE_TEST_MODE_CNF,用于通知PDCP去激活环回状态*/ #if 0 if (NAS_ETC_L_MODE_STATUS_NORMAL != NAS_ETC_GetLModeStatus()) { NAS_ETC_WARN_LOG("NAS_ETC_PdcpUlMsgDistr:Tc is already suspended!"); return ; } #endif pPdcpUlMsg = (PS_MSG_HEADER_STRU*)pRcvMsg; /*根据消息名,调用相应的消息处理函数*/ switch (pPdcpUlMsg->ulMsgName) { /*如果收到的是ID_TC_PDCP_ACTIVATE_TEST_MODE_CNF消息*/ case ID_LTC_LPDCP_ACTIVATE_TEST_MODE_CNF: NAS_ETC_RcvTcPdcpUlActTestModeCnf( (LTC_LPDCP_ACTIVATE_TEST_MODE_CNF_STRU *) pRcvMsg ); break; /*如果收到的是ID_TC_PDCP_START_TEST_LOOP_CNF消息*/ case ID_LTC_LPDCP_START_TEST_LOOP_CNF: NAS_ETC_RcvTcPdcpUlStartTestLoopCnf( (LTC_LPDCP_START_TEST_LOOP_CNF_STRU *) pRcvMsg ); break; /*如果收到的是ID_TC_PDCP_STOP_TEST_LOOP_CNF消息*/ case ID_LTC_LPDCP_STOP_TEST_LOOP_CNF: NAS_ETC_RcvTcPdcpUlStopTestLoopCnf( (LTC_LPDCP_STOP_TEST_LOOP_CNF_STRU *) pRcvMsg ); break; /*如果收到的是ID_TC_PDCP_DEACTIVATE_TEST_MODE_CNF消息*/ case ID_LTC_LPDCP_DEACTIVATE_TEST_MODE_CNF: NAS_ETC_RcvTcPdcpUlDeactTestModeCnf( (LTC_LPDCP_DEACTIVATE_TEST_MODE_CNF_STRU *) pRcvMsg ); break; default: NAS_ETC_WARN_LOG("NAS_ETC_PdcpUlMsgDistr:WARNING:PDCP->TC Message name non-existent!"); break; } }
/***************************************************************************** Function Name : NAS_ETC_DecodeNwActTestModeMsg Description : 译码ACTIVATE TEST MODE空口消息 Input : None Output : None Return : NAS_ETC_CAUSE_ENUM_UINT8 History : 1.lihong00150010 2009-10-15 Draft Enact *****************************************************************************/ NAS_ETC_CAUSE_ENUM_UINT8 NAS_ETC_DecodeNwActTestModeMsg ( const VOS_UINT8 *pucMsg, VOS_UINT32 *pulTcMsgLen, NAS_ETC_NW_MSG_STRU *pstMsgIE ) { VOS_UINT32 ulSum = NAS_ETC_NULL; VOS_UINT32 ulUnDecodeMsgLen = *pulTcMsgLen; NAS_ETC_NW_MSG_STRU *pstTmpMsgIE = pstMsgIE; /*打印进入该函数*/ NAS_ETC_INFO_LOG("NAS_ETC_DecodeNwActTestModeMsg is entered."); /* 判断剩余未译码长度是否合法 */ if (ulUnDecodeMsgLen != (NAS_ETC_MIN_ACT_TEST_MODE_MSG_LEN - NAS_ETC_SUM_LEN_OF_PD_MSGTYPE)) { NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwActTestModeMsg:WARN: Input parameter error!"); return NAS_ETC_CAUSE_ERROR; } /* 保存环回模式 */ pstTmpMsgIE->bitOpLBMode = NAS_ETC_OP_TRUE; pstTmpMsgIE->enLoopBackMode = pucMsg[ulSum++]; /*保存此函数译出的消息长度*/ *pulTcMsgLen = ulSum ; if ((pstTmpMsgIE->enLoopBackMode != LLOOP_BACK_MODE_A) && (pstTmpMsgIE->enLoopBackMode != LLOOP_BACK_MODE_B)) { NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwActTestModeMsg:WARN: Legal Loop Back Mode Type!"); return NAS_ETC_CAUSE_ERROR; } /*返回SM_SUCCESS*/ return NAS_ETC_CAUSE_SUCCESS; }
/***************************************************************************** Function Name : NAS_ETC_DecodeNwMsg() Description : TC模块解析空口消息函数 Input : VOS_UINT8 *pucMsg, VOS_UINT32 *ulMsgLen, NAS_ETC_NW_MSG_STRU *pstMsgIE Output : VOS_VOID Return Value : VOS_VOID History : 1.lihong00150010 2009-10-14 Draft Enact *****************************************************************************/ NAS_ETC_CAUSE_ENUM_UINT8 NAS_ETC_DecodeNwMsg ( VOS_UINT8 *pucMsg, VOS_UINT32 *pulMsgLen, NAS_ETC_NW_MSG_STRU *pstMsgIE ) { VOS_UINT32 ulSum = NAS_ETC_NULL; NAS_ETC_CAUSE_ENUM_UINT8 enTcCause = NAS_ETC_CAUSE_SUCCESS; VOS_UINT32 ulMsgLen = *pulMsgLen; VOS_UINT32 ulMsgLenTmp = NAS_ETC_NULL; VOS_UINT8 *pucTmpMsg = pucMsg; NAS_ETC_NW_MSG_STRU *pstTmpMsgIE = pstMsgIE; /*打印进入该函数*/ NAS_ETC_INFO_LOG("NAS_ETC_DecodeNwMsg is entered."); /*入口参数检查(pucMsg)*/ if ((VOS_NULL_PTR == pucTmpMsg) || (ulMsgLen < NAS_ETC_MSG_MIN_LEN)) { NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwMsg:WARNING:TC MSG is null!"); return NAS_ETC_CAUSE_ERROR; } /*判断Protocol discriminator*/ if (NAS_ETC_MSG_PD != (pucTmpMsg[ulSum] & NAS_ETC_MSG_LOW_BIT)) { NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwMsg:WARNING:Protocol discriminator wrong!"); return NAS_ETC_CAUSE_ERROR; } /*跳过Protocol discriminator和Skip indicator*/ ulSum++; /*记录Message type*/ pstMsgIE->enTcCnMsgType = pucTmpMsg[ulSum++]; /* 记录已译码的消息长度 */ *pulMsgLen = ulSum; /* 计算剩余未译码的消息长度 */ ulMsgLenTmp = ulMsgLen - NAS_ETC_SUM_LEN_OF_PD_MSGTYPE; /* 根据不同的消息进行相应的译码 */ switch (pstMsgIE->enTcCnMsgType) { case NAS_ETC_CNMSG_TYPE_ACT_TEST_MODE: enTcCause = NAS_ETC_DecodeNwActTestModeMsg( pucMsg + ulSum, &ulMsgLenTmp, pstTmpMsgIE); /* 记录已译码的消息长度 */ *pulMsgLen = *pulMsgLen + ulMsgLenTmp; NAS_ETC_SndAirMsgReportInd( pucMsg,*pulMsgLen, NAS_ETC_AIR_MSG_DIR_ENUM_DOWN, TC_ACT_TEST_MODE); break; case NAS_ETC_CNMSG_TYPE_CLOSE_UE_TEST_LOOP: enTcCause = NAS_ETC_DecodeNwCloseUeTestLoopMsg( pucMsg + ulSum, &ulMsgLenTmp, pstTmpMsgIE); /* 记录已译码的消息长度 */ *pulMsgLen = *pulMsgLen + ulMsgLenTmp; NAS_ETC_SndAirMsgReportInd( pucMsg,*pulMsgLen, NAS_ETC_AIR_MSG_DIR_ENUM_DOWN, TC_CLOSE_UE_TEST_LOOP); break; case NAS_ETC_CNMSG_TYPE_OPEN_UE_TEST_LOOP: NAS_ETC_SndAirMsgReportInd( pucMsg,*pulMsgLen, NAS_ETC_AIR_MSG_DIR_ENUM_DOWN, TC_OPEN_UE_TEST_LOOP); break; case NAS_ETC_CNMSG_TYPE_DEACT_TEST_MODE: NAS_ETC_SndAirMsgReportInd( pucMsg,*pulMsgLen, NAS_ETC_AIR_MSG_DIR_ENUM_DOWN, TC_DEACT_TEST_MODE); break; default: NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwMsg:WARNING:TC MSG Type not assigned "); return NAS_ETC_CAUSE_ERROR; } /* 判断已译码的消息长度与输入的消息总长度是否一致 */ if (*pulMsgLen != ulMsgLen) { NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwMsg:WARNING:Decoded Msg Len is not equal to input Msg Len "); } return enTcCause; }
/***************************************************************************** Function Name : NAS_ETC_DecodeNwCloseUeTestLoopMsg Description : 译码CLOSE UE TEST LOOP空口消息 Input : None Output : None Return : NAS_ETC_CAUSE_ENUM_UINT8 History : 1.lihong00150010 2009-10-15 Draft Enact *****************************************************************************/ NAS_ETC_CAUSE_ENUM_UINT8 NAS_ETC_DecodeNwCloseUeTestLoopMsg ( const VOS_UINT8 *pucMsg, VOS_UINT32 *pulTcMsgLen, NAS_ETC_NW_MSG_STRU *pstMsgIE ) { VOS_UINT32 ulSum = NAS_ETC_NULL; NAS_ETC_CAUSE_ENUM_UINT8 enTcCause = NAS_ETC_CAUSE_SUCCESS; VOS_UINT32 ulUnDecodeMsgLen = *pulTcMsgLen; VOS_UINT32 ulMsgLenTmp = NAS_ETC_NULL; NAS_ETC_NW_MSG_STRU *pstTmpMsgIE = pstMsgIE; /*打印进入该函数*/ NAS_ETC_INFO_LOG("NAS_ETC_DecodeNwCloseUeTestLoopMsg is entered."); /* 判断剩余未译码长度是否合法 */ if (ulUnDecodeMsgLen < (NAS_ETC_MIN_CLOSE_UE_TEST_LOOP_MSG_LEN - NAS_ETC_SUM_LEN_OF_PD_MSGTYPE)) { NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwCloseUeTestLoopMsg:WARN: Input parameter error!"); return NAS_ETC_CAUSE_ERROR; } /* 保存环回模式 */ pstTmpMsgIE->bitOpLBMode = NAS_ETC_OP_TRUE; pstTmpMsgIE->enLoopBackMode = pucMsg[ulSum++]; /* 剩余未译码长度减1 */ ulUnDecodeMsgLen--; /* 保存环回模式具体信息 */ if (pstTmpMsgIE->enLoopBackMode == LLOOP_BACK_MODE_A) { ulMsgLenTmp = ulUnDecodeMsgLen; /* 译码模式A */ enTcCause = NAS_ETC_DecodeNwCloseUeTestLoopModeA( &pucMsg[ulSum], &ulMsgLenTmp, pstTmpMsgIE); if (NAS_ETC_CAUSE_SUCCESS != enTcCause) { return enTcCause; } ulSum += ulMsgLenTmp; } else if (pstTmpMsgIE->enLoopBackMode == LLOOP_BACK_MODE_B) { pstTmpMsgIE->bitOpLBModeB = NAS_ETC_OP_TRUE; /* 保存PDU delay 信息 */ pstTmpMsgIE->stLBModeB.ulDelayTime = pucMsg[ulSum++]; } else { NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwCloseUeTestLoopMsg:WARN: Legal Loop Back Mode Type!"); return NAS_ETC_CAUSE_ERROR; } /*保存此函数译出的消息长度*/ *pulTcMsgLen = ulSum ; /*返回SM_SUCCESS*/ return NAS_ETC_CAUSE_SUCCESS; }