/***************************************************************************** Function Name : NAS_ETC_RcvTcPdcpUlStopTestLoopCnf Description : PDCP UL模块发来的STOP TEST LOOP CNF消息处理函数 Input : pRcvMsg-----------收到的STOP TEST LOOP CNF消息 Output : None Return : VOS_VOID History : 1.lihong00150010 2009-10-15 Draft Enact *****************************************************************************/ VOS_VOID NAS_ETC_RcvTcPdcpUlStopTestLoopCnf ( const LTC_LPDCP_STOP_TEST_LOOP_CNF_STRU *pRcvMsg ) { VOS_UINT32 ulMsgLength; VOS_UINT8 aucMsgBuff[NAS_ETC_UL_AIR_MSG_BUFFER_LEN]; /* 若结果为失败,则直接返回 */ if (NAS_ETC_RESULT_TYPE_SUCCESS != pRcvMsg->ulResult) { NAS_ETC_WARN_LOG("NAS_ETC_RcvTcPdcpUlStopTestLoopCnf:WARNING:Stop test loop failed!"); return; } /* 编码形成OPEN UE TEST LOOP COMPLETE消息 */ NAS_ETC_EncodeOpenUeTestLoopComplete(aucMsgBuff, &ulMsgLength); /* 将OPEN UE TEST LOOP COMPLETE消息发送给EMM */ NAS_ETC_SndTcEmmDataReqMsg(aucMsgBuff, ulMsgLength); /* 空口消息上报 */ NAS_ETC_SndAirMsgReportInd( aucMsgBuff,ulMsgLength, NAS_ETC_AIR_MSG_DIR_ENUM_UP, TC_OPEN_UE_TEST_LOOP_CMP); }
/***************************************************************************** Function Name : NAS_ETC_RcvTcPdcpUlDeactTestModeCnf Description : PDCP UL模块发来的DEACTIVATE TEST MODE CNF消息处理函数 Input : pRcvMsg-----------收到的DEACTIVATE TEST MODE CNF消息 Output : None Return : VOS_VOID History : 1.lihong00150010 2009-10-15 Draft Enact *****************************************************************************/ VOS_VOID NAS_ETC_RcvTcPdcpUlDeactTestModeCnf ( const LTC_LPDCP_DEACTIVATE_TEST_MODE_CNF_STRU *pRcvMsg ) { VOS_UINT32 ulMsgLength; VOS_UINT8 aucMsgBuff[NAS_ETC_UL_AIR_MSG_BUFFER_LEN]; /* 若结果为失败,则直接返回 */ if (NAS_ETC_RESULT_TYPE_SUCCESS != pRcvMsg->ulResult) { NAS_ETC_WARN_LOG("NAS_ETC_RcvTcPdcpUlDeactTestModeCnf:WARNING:Deact test mode failed!"); return; } /* 将模式设置为正常模式 */ NAS_ETC_SetModeType(NAS_ETC_MODE_TYPE_NORMAL); /* 通知CDS退出环回模式 */ NAS_ETC_SndTcCdsDeactTestModeMsg(); /* L模挂起的情况下,不需要给EMM发送COMPLETR消息,不需要上报空口消息 */ if (NAS_ETC_L_MODE_STATUS_NORMAL == NAS_ETC_GetLModeStatus()) { /* L模挂起状态,ERABM收到ETC发送的去激活环回模式消息,直接丢弃;收到关机消息后, ESM会给ERABM发送ID_ESM_ERABM_REL_IND消息,通知ERABM清除资源,所以在挂起状态下不需要再 给ERABM发送去激活环回状态消息 */ /* 通知RABM进入正常模式 */ NAS_ETC_SndTcRabmDeactTestModeMsg(); /* 编码形成DEACTIVATE TEST MODE COMPLETE消息 */ NAS_ETC_EncodeDeactTestModeComplete(aucMsgBuff, &ulMsgLength); /* 将DEACTIVATE TEST MODE COMPLETE消息发送给EMM */ NAS_ETC_SndTcEmmDataReqMsg(aucMsgBuff, ulMsgLength); /* 空口消息上报 */ NAS_ETC_SndAirMsgReportInd( aucMsgBuff,ulMsgLength, NAS_ETC_AIR_MSG_DIR_ENUM_UP, TC_DEACT_TEST_MODE_CMP); } }
/***************************************************************************** Function Name : NAS_ETC_RcvTcPdcpUlActTestModeCnf Description : PDCP UL模块发来的ACTIVATE TEST MODE CNF消息处理函数 Input : pRcvMsg-----------收到的ACTIVATE TEST MODE CNF消息 Output : None Return : VOS_VOID History : 1.lihong00150010 2009-10-14 Draft Enact *****************************************************************************/ VOS_VOID NAS_ETC_RcvTcPdcpUlActTestModeCnf ( const LTC_LPDCP_ACTIVATE_TEST_MODE_CNF_STRU *pRcvMsg ) { VOS_UINT32 ulMsgLength; VOS_UINT8 aucMsgBuff[NAS_ETC_UL_AIR_MSG_BUFFER_LEN]; /* 若结果为失败,则直接返回 */ if (NAS_ETC_RESULT_TYPE_SUCCESS != pRcvMsg->ulResult) { NAS_ETC_WARN_LOG("NAS_ETC_RcvTcPdcpUlActTestModeCnf:WARNING:Act test mode failed!"); return; } /* 编码形成ACTIVATE TEST MODE COMPLETE消息 */ NAS_ETC_EncodeActTestModeComplete(aucMsgBuff, &ulMsgLength); /* 将ACTIVATE TEST MODE COMPLETE消息发送给EMM */ NAS_ETC_SndTcEmmDataReqMsg(aucMsgBuff, ulMsgLength); /* 将模式设置为环回模式 */ NAS_ETC_SetModeType(NAS_ETC_MODE_TYPE_LB); /* 通知RABM进入环回模式 */ NAS_ETC_SndTcRabmActTestModeMsg(); /* 通知CDS进入环回模式 */ NAS_ETC_SndTcCdsActTestModeMsg(); /* 空口消息上报 */ NAS_ETC_SndAirMsgReportInd( aucMsgBuff,ulMsgLength, NAS_ETC_AIR_MSG_DIR_ENUM_UP, TC_ACT_TEST_MODE_CMP); }
/***************************************************************************** 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; }