/*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;
    }
}
Example #2
0
/*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;
}