Exemplo n.º 1
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;
    }
}
Exemplo n.º 2
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);
}
Exemplo n.º 3
0
/*lint -e961*/
VOS_VOID NAS_ETC_SndAirMsgReportInd
(
    const VOS_UINT8                    *pucData,
    VOS_UINT32                          ulLength,
    NAS_ETC_AIR_MSG_DIR_ENUM_UINT8       enMsgDir,
    OM_PS_AIR_MSG_ENUM_UINT8            enMsgId
)
{
#ifndef PS_ITT_PC_TEST
    DIAG_AIR_MSG_LOG_STRU       stAirMsg;
    VOS_UINT8                  *pucTmpData = VOS_NULL_PTR;

    /*分配空口消息空间*/
    pucTmpData = (VOS_UINT8*)
                        NAS_ETC_MEM_ALLOC(ulLength);

    if(VOS_NULL_PTR== pucTmpData)
    {
        NAS_ETC_ERR_LOG("NAS_ETC_SndAirMsgReportInd: MEM_ALLOC ERR!");
        return;
    }

    NAS_ETC_MEM_CPY(pucTmpData, pucData, ulLength);

    /*设置空口消息方向*/
    if(NAS_ETC_AIR_MSG_DIR_ENUM_UP == enMsgDir)
    {
        stAirMsg.ulId = DIAG_AIR_MSG_LOG_ID(PS_PID_TC, OS_MSG_UL);
        stAirMsg.ulSideId = DIAG_SIDE_NET;
    }
    else
    {
        stAirMsg.ulId = DIAG_AIR_MSG_LOG_ID(PS_PID_TC, OS_MSG_DL);
        stAirMsg.ulSideId = DIAG_SIDE_UE;
    }
    stAirMsg.ulMessageID = (VOS_UINT32)(enMsgId+ PS_MSG_ID_AIR_BASE);
    stAirMsg.ulDestMod = 0;
    stAirMsg.ulDataSize = ulLength;
    stAirMsg.pData = (void*)pucTmpData;

    /*上报空口消息*/
    if(ERR_MSP_SUCCESS != DIAG_ReportAirMessageLog(&stAirMsg))
    {
        NAS_ETC_WARN_LOG("NAS_ETC_SndAirMsgReportInd: Send Msg Fail!");
    }

    /*释放空口消息空间*/
    NAS_ETC_MEM_FREE(pucTmpData);
#endif

    NAS_ETC_NORM_LOG("TC->OMT: PS_OMT_AIR_MSG_REPORT_IND\r");
}
/*****************************************************************************
 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;
}
Exemplo n.º 5
0
/*****************************************************************************
 Function Name  : NAS_ETC_SndKeyEventReportInd()
 Description    : 作成和发送OM_PS_KEY_EVENT_REPORT_IND消息
 Input          : VOS_UINT8 ucKeyEvent 关键事件
 Output         : VOS_VOID
 Return Value   : VOS_VOID

 History        :
    1.lihong00150010      2010-04-15  Draft Enact

*****************************************************************************/
VOS_VOID NAS_ETC_SndKeyEventReportInd(OM_PS_KEY_EVENT_ENUM_UINT8 enKeyEvent)
{
#ifndef PS_ITT_PC_TEST
    /*lint -e778*/
    /*lint -e648*/
    if(ERR_MSP_SUCCESS != DIAG_ReportEventLog(MODID(UE_MODULE_TC_ID, LOG_TYPE_INFO),\
                            (VOS_UINT32)enKeyEvent+OM_PS_KEY_EVENT_BASE_ID))
    {
        NAS_ETC_WARN_LOG("NAS_ETC_SndKeyEventReportInd: Send Msg Fail!");
    }
    /*lint +e648*/
    /*lint +e778*/
#endif

    NAS_ETC_NORM_LOG("TC->OMT: PS_OMT_KEY_EVT_REPORT_IND\r");
}
Exemplo n.º 6
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);
    }

}
/*lint -e961*/
VOS_VOID  NAS_ETC_TaskEntry( MsgBlock* pMsg )
{
    PS_MSG_HEADER_STRU       *pHeader = VOS_NULL_PTR;              /*定义消息头指针*/

    /* 判断入口参数是否合法*/
    if (VOS_NULL_PTR == pMsg)
    {
        /*报告错误消息*/
        NAS_ETC_WARN_LOG("NAS_ETC_TaskEntry:ERROR: No Msg!");
        return;
    }

    pHeader = (PS_MSG_HEADER_STRU *)pMsg;          /* 获取消息头指针*/

    NAS_ETC_PrintTcRevMsg(pHeader,NAS_COMM_GET_ESM_PRINT_BUF());

    /*判断接收到的消息,进行分发处理*/
    switch (pHeader->ulSenderPid)
    {
        /*如果是EMM消息,调用EMM分发函数*/
        case PS_PID_MM:
            NAS_ETC_EmmMsgDistr(pMsg);
            break;

        /*如果是RABM消息,调用RABM分发函数*/
        case PS_PID_RABM:
            NAS_ETC_RabmMsgDistr(pMsg);
            break;

        /*如果是PDCP UL消息,调用PDCP UL分发函数*/
        case PS_PID_PDCP_UL:
            NAS_ETC_PdcpUlMsgDistr(pMsg);
            break;

        /*发送对象错误,报警*/
        default:
            NAS_ETC_LOG1("NAS_ETC_TaskEntry:NORM: Error SenderPid :",(VOS_INT32)pHeader->ulSenderPid);
            break;
    }
}
Exemplo n.º 8
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);

}
VOS_VOID NAS_ETC_PrintTcSendMsg
(
    const PS_MSG_HEADER_STRU           *pstMsg,
    VOS_CHAR                           *pcBuff
)
{
    VOS_INT32                           ilOutPutLenHead     = 0;
    VOS_INT32                           ilOutPutLen         = 0;
    VOS_UINT16                          usTotalLen          = 0;

    NAS_COMM_nsprintf(pcBuff,
                     usTotalLen,
                     "NAS TC Send Message:",
                     &ilOutPutLen);

    if ( 0 == ilOutPutLen )
    {
        NAS_ETC_WARN_LOG("NAS_ETC_PrintTcSendMsg, Print receive msg header exception.");
        return ;
    }

    usTotalLen += (VOS_UINT16)ilOutPutLen;

    /* 打印各个PID的消息 */
    switch ( pstMsg->ulReceiverPid )
    {

        case PS_PID_MM:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "TC-->MM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintMmTcMsg(pcBuff,
                                               usTotalLen,
                                               pstMsg->ulMsgName);

            break;

        case PS_PID_RABM:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "TC-->RABM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintRabmTcMsg(pcBuff,
                                             usTotalLen,
                                             pstMsg->ulMsgName);

            break;

        case PS_PID_PDCP_UL:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "TC-->PDCP\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_ETC_PrintTcPdcpMsg(pcBuff,
                                             usTotalLen,
                                             pstMsg->ulMsgName);

            break;

        case UEPS_PID_CDS:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "TC-->CDS\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintEtcCdsMsg(pcBuff,
                                             usTotalLen,
                                             pstMsg->ulMsgName);

            break;

        default:
            NAS_ETC_LOG2("NAS_ETC_PrintTcSendMsg,Invalid Pid, MsgId: ",
                        pstMsg->ulSenderPid,
                        pstMsg->ulMsgName);

            return ;
    }

    if ( 0 == ilOutPutLen )
    {
        NAS_ETC_LOG2("NAS_ETC_PrintTcSendMsg, print return zero length.SenderPid, MsgId: ",
                    pstMsg->ulSenderPid,
                    pstMsg->ulMsgName);
        return;
    }

    usTotalLen += (VOS_UINT16)ilOutPutLen;

    /* 打印接收到该消息时对应的系统TICK值 */
    NAS_COMM_nsprintf_1(pcBuff,
                       usTotalLen,
                       "[ TICK : %ld ]",
                       PS_GET_TICK(),
                       &ilOutPutLen);
    usTotalLen += (VOS_UINT16)ilOutPutLen;

    NAS_COMM_Print(pcBuff, usTotalLen);

    return ;

}
VOS_VOID NAS_ETC_PrintTcRevMsg
(
    const PS_MSG_HEADER_STRU           *pstMsg,
    VOS_CHAR                           *pcBuff
)
{
    VOS_INT32                           ilOutPutLenHead     = 0;
    VOS_INT32                           ilOutPutLen         = 0;
    VOS_UINT16                          usTotalLen          = 0;

    NAS_COMM_nsprintf(pcBuff,
                     usTotalLen,
                     "NAS TC Receive Message:",
                     &ilOutPutLen);

    if ( 0 == ilOutPutLen )
    {
        NAS_ETC_WARN_LOG("NAS_ETC_PrintTcRevMsg, Print receive msg header exception.");
        return ;
    }

    usTotalLen += (VOS_UINT16)ilOutPutLen;

    /* 打印各个PID的消息 */
    switch ( pstMsg->ulSenderPid )
    {

        case PS_PID_MM:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "MM-->TC\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintMmTcMsg(pcBuff,
                                                   usTotalLen,
                                                   pstMsg->ulMsgName);

            break;

        case PS_PID_RABM:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "RABM-->TC\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintRabmTcMsg(pcBuff,
                                             usTotalLen,
                                             pstMsg->ulMsgName);

            break;

        case PS_PID_PDCP_UL:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "PDCP-->TC\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_ETC_PrintTcPdcpMsg(pcBuff,
                                             usTotalLen,
                                             pstMsg->ulMsgName);

            break;

        default:
            NAS_ETC_LOG2("NAS_ETC_PrintTcRevMsg,Invalid Pid, MsgId: ",
                        pstMsg->ulSenderPid,
                        pstMsg->ulMsgName);

            return ;
    }

    if ( 0 == ilOutPutLen )
    {
        NAS_ETC_LOG2("NAS_ETC_PrintTcRevMsg, print return zero length.SenderPid, MsgId: ",
                    pstMsg->ulSenderPid,
                    pstMsg->ulMsgName);
        return;
    }

    usTotalLen += (VOS_UINT16)ilOutPutLen;

    NAS_COMM_Print(pcBuff, usTotalLen);

    return ;

}
Exemplo n.º 11
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;
}
Exemplo n.º 12
0
/*****************************************************************************
 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;
}
Exemplo n.º 13
0
/*****************************************************************************
 Function Name   : NAS_ETC_DecodeNwCloseUeTestLoopModeA
 Description     : 译码CLOSE UE TEST LOOP空口消息模式A
 Input           : None
 Output          : None
 Return          : NAS_ETC_CAUSE_ENUM_UINT8

 History         :
    1.lihong00150010      2010-06-23  Draft Enact

*****************************************************************************/
NAS_ETC_CAUSE_ENUM_UINT8  NAS_ETC_DecodeNwCloseUeTestLoopModeA
(
    const VOS_UINT8                    *pucMsg,
    VOS_UINT32                         *pulTcMsgLen,
    NAS_ETC_NW_MSG_STRU                 *pstMsgIE
)
{
    VOS_UINT32                          ulSum               = NAS_ETC_NULL;
    VOS_UINT32                          ulLbSetListLen      = NAS_ETC_NULL;
    VOS_UINT16                          usSduSize           = NAS_ETC_NULL;
    VOS_UINT32                          ulLoop              = NAS_ETC_NULL;
    VOS_UINT32                          ulUnDecodeMsgLen    = *pulTcMsgLen;
    NAS_ETC_NW_MSG_STRU                 *pstTmpMsgIE         = pstMsgIE;

    pstTmpMsgIE->bitOpLBModeA = NAS_ETC_OP_TRUE;

    /* 记录LB set list长度 */
    ulLbSetListLen = pucMsg[ulSum++];

    /* 剩余未译码长度减1 */
    ulUnDecodeMsgLen--;

    /* LB set list长度必须为3的倍数,且要小于或等于剩余未译码长度 */
    if (((ulLbSetListLen % NAS_ETC_LB_SETUP_DRB_IE_LEN) != NAS_ETC_NULL)
         || (ulLbSetListLen > ulUnDecodeMsgLen))
    {
        NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwCloseUeTestLoopMsg:WARN:LB Setup List Len Error!");
        return NAS_ETC_CAUSE_ERROR;
    }

    /* 保存LB setup DRB个数 */
    pstTmpMsgIE->stLBModeA.ulDrbNum = ulLbSetListLen / NAS_ETC_LB_SETUP_DRB_IE_LEN;
    if (pstTmpMsgIE->stLBModeA.ulDrbNum > NAS_ETC_MAX_DRB_NUM)
    {
        NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwCloseUeTestLoopMsg:WARN:DRB num is more than 8!");
        return NAS_ETC_CAUSE_ERROR;
    }

    /* 逐一保存LB setup DRB信息 */
    for (ulLoop = NAS_ETC_NULL; ulLoop < pstTmpMsgIE->stLBModeA.ulDrbNum; ulLoop++)
    {
        /* 保存SDU size信息 */
        usSduSize = (VOS_UINT16)pucMsg[ulSum++];
        usSduSize = (VOS_UINT16)(usSduSize << NAS_ETC_MOVEMENT_8_BITS)
                                    | (VOS_UINT16)pucMsg[ulSum++];

        /* 空口消息中SDU SIZE的单位为bit,而TC与PDCP接口中SDU SIZE的单位为
           byte,因此需要除8 */
        usSduSize /= 8;
        if (usSduSize > NAS_ETC_MAX_SDU_SIZE)
        {
            NAS_ETC_WARN_LOG("NAS_ETC_DecodeNwCloseUeTestLoopMsg:WARN:SDU SIZE is more than 1520!");
            return NAS_ETC_CAUSE_ERROR;
        }
        pstTmpMsgIE->stLBModeA.astDrbSetup[ulLoop].ulSduSize = (VOS_UINT32)usSduSize;

        /* 保存DRB ID信息 */
        pstTmpMsgIE->stLBModeA.astDrbSetup[ulLoop].ulDrbId
                    = (VOS_UINT32)(pucMsg[ulSum++] & NAS_ETC_MSG_LOW_5_BIT);
    }

    *pulTcMsgLen = ulSum;
    return NAS_ETC_CAUSE_SUCCESS;
}