Ejemplo n.º 1
0
/*****************************************************************************
 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);
}
Ejemplo n.º 2
0
/*****************************************************************************
 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);
    }

}
Ejemplo n.º 3
0
/*****************************************************************************
 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);

}
Ejemplo n.º 4
0
/*****************************************************************************
  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;
}