コード例 #1
0
/*****************************************************************************
 函 数 名  : NAS_CC_ProcMnccRejReq
 功能描述  : 处理MNCC_REJ_REQ原语
 输入参数  : pstMsg      - 来自上层的MNCC原语消息
              entityId    - 处理该原语的CC实体的ID
              ucTi        - CC实体对应的transaction ID
              enCurrState - CC实体当前的呼叫状态
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2008年2月14日
    作    者   : 丁庆 49431
    修改内容   : 新生成函数
*****************************************************************************/
LOCAL VOS_VOID  NAS_CC_ProcMnccRejReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    if (NAS_CC_CALL_STATE_U6 == enCurrState)
    {
        NAS_CC_StopAllTimer(entityId);

        /* 填写release complete消息头 */
        NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_RELEASE_COMPLETE, &pstMsg->unParam.stRelComp.stHeader);

        /* 判断UUS1是否激活 */
        NAS_CC_GetMsgUus1Info(entityId,NAS_CC_MSG_RELEASE_COMPLETE,&(pstMsg->unParam.stRelComp.stUserUser));

        /* 编码release complete消息 */
        NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stRelComp,
                         f_stCcEncodeBuf.aucBuf,
                         (VOS_UINT8 *)&f_stCcEncodeBuf.ulLen);

        /* 发送MMCC_DATA_REQ原语将消息发往网络 */
        NAS_CC_SendMmccDataReq(ucTi, f_stCcEncodeBuf.aucBuf, f_stCcEncodeBuf.ulLen);

        NAS_CC_SendMmccRelReq(ucTi, MMCC_RELEASE_SPECIFIC);

        NAS_CC_INFO_LOG("NAS_CC_ProcMnccRelReq ChangeCallState to U0");
        NAS_CC_ChangeCallState(entityId, NAS_CC_CALL_STATE_U0);
    }
    else
    {
        NAS_CC_ERR_LOG1("NAS_CC_ProcMnccRejReq: bad state.", enCurrState);
    }
}
コード例 #2
0
/*****************************************************************************
 函 数 名  : NAS_CC_ProcMnccModifyReq
 功能描述  : 处理MNCC_MODIFY_REQ原语
 输入参数  : pstMsg      - 来自上层的MNCC原语消息
              entityId    - 处理该原语的CC实体的ID
              ucTi        - CC实体对应的transaction ID
              enCurrState - CC实体当前的呼叫状态
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2008年2月14日
    作    者   : 丁庆 49431
    修改内容   : 新生成函数

*****************************************************************************/
LOCAL VOS_VOID  NAS_CC_ProcMnccModifyReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    if (NAS_CC_CALL_STATE_U10 == enCurrState)
    {
        /* 填写modify消息头 */
        NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_MODIFY, &pstMsg->unParam.stModify.stHeader);

        /* 编码modify消息 */
        NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stModify,
                         f_stCcEncodeBuf.aucBuf,
                         (VOS_UINT8 *)&f_stCcEncodeBuf.ulLen);

        /* 发送MMCC_DATA_REQ原语将消息发往网络 */
        NAS_CC_SendMmccDataReq(ucTi, f_stCcEncodeBuf.aucBuf, f_stCcEncodeBuf.ulLen);

        NAS_CC_StartTimer(entityId, TI_NAS_CC_T323, 0);
        NAS_CC_INFO_LOG("NAS_CC_ProcMnccModifyReq ChangeCallState to U26");
        NAS_CC_ChangeCallState(entityId, NAS_CC_CALL_STATE_U26);
    }
    else
    {
        NAS_CC_ERR_LOG1("NAS_CC_ProcMnccModifyReq: bad state.", enCurrState);
    }
}
コード例 #3
0
LOCAL VOS_VOID  NAS_CC_ProcMnccEmergSetupReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    NAS_CC_BC_PARAMS_STRU               stBcParams;

    NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_EMERGENCY_SETUP,
                            &pstMsg->unParam.stEmerg.stHeader);

    NAS_CC_SendMmccEstReq(ucTi, MMCC_EMERGENCY_CALL,MMCC_CALL_MODE_SPEECH,
                          MMCC_NO_CALL_PRIORITY);

    NAS_CC_StartTimer(entityId, TI_NAS_CC_T303, 0);

    /* 编码emergency setup消息并缓存 */
    NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stEmerg,
                     g_stNasCcBufferedSetupMsg.aucBuf,
                     (VOS_UINT8 *)&g_stNasCcBufferedSetupMsg.ulLen);

    NAS_CC_INFO_LOG("NAS_CC_ProcMnccEmergSetupReq: ChangeCallState to U0_1");
    NAS_CC_ChangeCallState(entityId, NAS_CC_CALL_STATE_U0_1);

    /* 记录呼叫的一些参数 */
    stBcParams.enItc = pstMsg->unParam.stEmerg.stBC.Octet3.InfoTransCap;
    NAS_CC_UpdateBcParams(entityId, NAS_CC_BC_PARAM_1, &stBcParams);
}
コード例 #4
0
LOCAL VOS_VOID  NAS_CC_ProcMnccCcEstCnfReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    if (NAS_CC_CALL_STATE_U0_4 == enCurrState)
    {
        /* 填写cc establishment cnf消息头 */
        NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_CC_EST_CNF,
                                &pstMsg->unParam.stCcEstCnf.stHeader);

        /* 编码cc establishment cnf消息 */
        NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stCcEstCnf,
                         f_stCcEncodeBuf.aucBuf,
                         (VOS_UINT8 *)&f_stCcEncodeBuf.ulLen);

        /* 发送MMCC_DATA_REQ原语将消息发往网络 */
        NAS_CC_SendMmccDataReq(ucTi, f_stCcEncodeBuf.aucBuf, f_stCcEncodeBuf.ulLen);

        NAS_CC_StartTimer(entityId, TI_NAS_CC_T335, 0);

        NAS_CC_INFO_LOG("NAS_CC_ProcMnccCcEstCnfReq: ChangeCallState to U0.5");

        NAS_CC_ChangeCallState(entityId, NAS_CC_CALL_STATE_U0_5);

        NAS_CC_UpdateCallId(entityId, pstMsg->ucCallId);

    }
    else
    {
        NAS_CC_ERR_LOG1("NAS_CC_ProcMnccCcEstCnfReq: bad state.", enCurrState);
    }
}
コード例 #5
0
LOCAL VOS_VOID  NAS_CC_ProcMnccRetrieveReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    NAS_CC_HOLD_AUX_STATE_ENUM_U8       enHoldState = NAS_CC_GetHoldAuxState(entityId);
    NAS_AIR_MSG_HDR_STRU                stHeader;
    VOS_UINT32                          ulResult;
    NAS_CC_CAUSE_VALUE_ENUM_U32         enCause;

    if ((NAS_CC_CALL_STATE_U10 == enCurrState)
     || (NAS_CC_CALL_STATE_U26 == enCurrState))
    {
        ulResult = NAS_CC_CheckSsSwitchRetrieveAllowed();

        if ( (NAS_CC_HOLD_AUX_S_CALL_HELD == enHoldState)
          && (VOS_OK == ulResult) )
        {
            /* 填写retrieve消息头 */
            NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_RETRIEVE, &stHeader);

            /* 编码retrieve消息 */
            NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&stHeader,
                             f_stCcEncodeBuf.aucBuf,
                             (VOS_UINT8 *)&f_stCcEncodeBuf.ulLen);

            /* 发送MMCC_DATA_REQ原语将消息发往网络 */
            NAS_CC_SendMmccDataReq(ucTi, f_stCcEncodeBuf.aucBuf, f_stCcEncodeBuf.ulLen);

            NAS_CC_StartTimer(entityId, TI_NAS_CC_HOLD, 0);

            NAS_CC_INFO_LOG("NAS_CC_ProcMnccRetrieveReq ChangeHoldAuxState to RETRIEVE_REQ");
            NAS_CC_ChangeHoldAuxState(entityId, NAS_CC_HOLD_AUX_S_RETRIEVE_REQ);

            NAS_CC_SetSsSwitchRetrieveInfo(entityId, NAS_CC_SS_SWITCH_WAIT_CNF, NAS_CC_CAUSE_NULL);

            return;
        }
        else
        {
            NAS_CC_ERR_LOG1("NAS_CC_ProcMnccRetrieveReq: bad hold state.", enHoldState);
        }
    }

    NAS_CC_ERR_LOG1("NAS_CC_ProcMnccRetrieveReq: bad state.", enCurrState);
    enCause = NAS_CC_CAUSE_111;
    NAS_CC_SendMnccMsg(entityId,
                       MNCC_RETRIEVE_REJ,
                       &enCause,
                       sizeof(enCause));

    return;

}
コード例 #6
0
LOCAL VOS_VOID  NAS_CC_ProcMnccStartDtmfReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    NAS_CC_CAUSE_VALUE_ENUM_U32         cause;
    NAS_CC_DTMF_STATE_ENUM              enDtmfState = NAS_CC_GetDtmfState(entityId);

    /* 是否有DTMF过程正在进行 */
    if ((enDtmfState != NAS_CC_DTMF_S_IDLE)
     && (enDtmfState != NAS_CC_DTMF_S_START_REJ))
    {
        /* 缓存DTMF请求 */
        NAS_CC_QueueDtmfReq(entityId,
                            NAS_CC_DTMF_START_REQ,
                            pstMsg->unParam.stStartDtmf.stKeypadFacility.KeypadInfo);
        return;
    }

    /*
    3GPP 24.008 5.5.7 DTMF protocol control procedure

    The mobile station shall be capable of transmitting DTMF messages if and
    only if the mobile station has the user connection for speech attached and
    an appropriate channel is available.
    */
    if (NAS_CC_IsTchAvailable(NAS_CC_ITC_SPEECH))
    {
        /* 填写start dtmf消息头 */
        NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_START_DTMF, &pstMsg->unParam.stStartDtmf.stHeader);

        /* 编码start dtmf消息 */
        NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stStartDtmf,
                         f_stCcEncodeBuf.aucBuf,
                         (VOS_UINT8 *)&f_stCcEncodeBuf.ulLen);

        /* 发送MMCC_DATA_REQ原语将消息发往网络 */
        NAS_CC_SendMmccDataReq(ucTi, f_stCcEncodeBuf.aucBuf, f_stCcEncodeBuf.ulLen);

        NAS_CC_StartTimer(entityId, TI_NAS_CC_T336, 0);
        NAS_CC_INFO_LOG("NAS_CC_ProcMnccStartDtmfReq ChangeDtmfState to START_REQ");
        NAS_CC_ChangeDtmfState(entityId, NAS_CC_DTMF_S_START_REQ);
    }
    else
    {
        /* 发送MNCC_START_DTMF_REJ原语 */
        cause = NAS_CC_CAUSE_111;
        NAS_CC_SendMnccMsg(entityId, MNCC_START_DTMF_REJ, &cause, sizeof(cause));
        NAS_CC_ERR_LOG("NAS_CC_ProcMnccStartDtmfReq: No appropriate channel.");

    }
}
コード例 #7
0
LOCAL VOS_VOID  NAS_CC_ProcMnccStopDtmfReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    NAS_CC_CAUSE_VALUE_ENUM_U32         cause;
    NAS_CC_DTMF_STATE_ENUM              enDtmfState = NAS_CC_GetDtmfState(entityId);

    if (NAS_CC_DTMF_S_START_REJ == enDtmfState)
    {
        NAS_CC_SendMnccMsg(entityId, MNCC_STOP_DTMF_CNF, VOS_NULL_PTR, 0);
        return;
    }

    /* 是否有DTMF过程正在进行 */
    if (enDtmfState != NAS_CC_DTMF_S_START_REQ)
    {
        if (enDtmfState != NAS_CC_DTMF_S_IDLE)
        {
            /* 缓存DTMF请求 */
            NAS_CC_QueueDtmfReq(entityId,
                                NAS_CC_DTMF_STOP_REQ,
                                0);
            return;
        }

        if (NAS_CC_IsTchAvailable(NAS_CC_ITC_SPEECH))
        {
            NAS_CC_SendStopDtmf(ucTi);

            NAS_CC_StartTimer(entityId, TI_NAS_CC_T337, 0);
            NAS_CC_INFO_LOG("NAS_CC_ProcMnccStopDtmfReq ChangeDtmfState to STOP_REQ");
            NAS_CC_ChangeDtmfState(entityId, NAS_CC_DTMF_S_STOP_REQ);
        }
        else
        {
            cause = NAS_CC_CAUSE_111;
            NAS_CC_SendMnccMsg(entityId, MNCC_STOP_DTMF_CNF, &cause, sizeof(cause));
            NAS_CC_ERR_LOG("NAS_CC_ProcMnccStopDtmfReq: No appropriate channel.");
        }
    }
    else
    {
       /* 缓存DTMF请求 */
        NAS_CC_QueueDtmfReq(entityId,
                            NAS_CC_DTMF_STOP_REQ,
                            0);
        return;
    }

}
コード例 #8
0
/*****************************************************************************
 函 数 名  : NAS_CC_ProcMnccCallConfReq
 功能描述  : 处理MNCC_CALL_CONF_REQ原语
 输入参数  : pstMsg      - 来自上层的MNCC原语消息
              entityId    - 处理该原语的CC实体的ID
              ucTi        - CC实体对应的transaction ID
              enCurrState - CC实体当前的呼叫状态
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2008年2月14日
    作    者   : 丁庆 49431
    修改内容   : 新生成函数

*****************************************************************************/
LOCAL VOS_VOID  NAS_CC_ProcMnccCallConfReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    NAS_CC_BC_PARAMS_STRU               stBcParams;

    if (NAS_CC_CALL_STATE_U6 == enCurrState)
    {
        /* 填写call confirm消息头 */
        NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_CALL_CNF, &pstMsg->unParam.stCallCnf.stHeader);

        /* 编码call confirm消息 */
        NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stCallCnf,
                         f_stCcEncodeBuf.aucBuf,
                         (VOS_UINT8 *)&f_stCcEncodeBuf.ulLen);

        /* 发送MMCC_DATA_REQ原语将消息发往网络 */
        NAS_CC_SendMmccDataReq(ucTi, f_stCcEncodeBuf.aucBuf, f_stCcEncodeBuf.ulLen);

        NAS_CC_INFO_LOG("NAS_CC_ProcMnccCallConfReq: ChangeCallState to U9");
        NAS_CC_ChangeCallState(entityId, NAS_CC_CALL_STATE_U9);

        NAS_CC_UpdateCallId(entityId, pstMsg->ucCallId);

        /* 如果BC改变,需要更新已保存的承载能力参数 */
        if (pstMsg->unParam.stCallCnf.stBC1.IsExist)
        {
            stBcParams.enItc = pstMsg->unParam.stCallCnf.stBC1.Octet3.InfoTransCap;
            NAS_CC_UpdateBcParams(entityId, NAS_CC_BC_PARAM_1, &stBcParams);
            if (pstMsg->unParam.stCallCnf.stBC2.IsExist)
            {
                stBcParams.enItc = pstMsg->unParam.stCallCnf.stBC2.Octet3.InfoTransCap;
                NAS_CC_UpdateBcParams(entityId, NAS_CC_BC_PARAM_2, &stBcParams);
            }
        }

        /* 信道已经接入的情况,需要设置当前使用此信道的每一个呼叫实体.
           避免多个呼叫存在时,原来的呼叫被释放后,就断开信道
           CC在呼叫结束的时候,会清除此标志*/
        if (VOS_TRUE == NAS_CC_IsAttachUserConn())
        {
            NAS_CC_SetUserConnEntity(entityId);
        }
    }
    else
    {
        NAS_CC_ERR_LOG1("NAS_CC_ProcMnccCallConfReq: bad state.", enCurrState);
    }
}
コード例 #9
0
/*****************************************************************************
 函 数 名  : NAS_CC_ProcMnccSetupRsp
 功能描述  : 处理MNCC_SETUP_RES原语
 输入参数  : pstMsg      - 来自上层的MNCC原语消息
              entityId    - 处理该原语的CC实体的ID
              ucTi        - CC实体对应的transaction ID
              enCurrState - CC实体当前的呼叫状态
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2008年2月14日
    作    者   : 丁庆 49431
    修改内容   : 新生成函数

*****************************************************************************/
LOCAL VOS_VOID  NAS_CC_ProcMnccSetupRsp(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    NAS_CC_BC_PARAMS_STRU               stBcParams;

    if ((NAS_CC_CALL_STATE_U9 == enCurrState)
      ||(NAS_CC_CALL_STATE_U7 == enCurrState))
    {
        /* 填写connect消息头 */
        NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_CONNECT, &pstMsg->unParam.stConn.stHeader);

        /* 判断UUS1是否激活 */
        NAS_CC_GetMsgUus1Info(entityId,NAS_CC_MSG_CONNECT,&(pstMsg->unParam.stConn.stUserUser));

        /* 编码connect消息 */
        NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stConn,
                         f_stCcEncodeBuf.aucBuf,
                         (VOS_UINT8 *)&f_stCcEncodeBuf.ulLen);

        /* 发送MMCC_DATA_REQ原语将消息发往网络 */
        NAS_CC_SendMmccDataReq(ucTi, f_stCcEncodeBuf.aucBuf, f_stCcEncodeBuf.ulLen);

        NAS_CC_StartTimer(entityId, TI_NAS_CC_T313, 0);

        /*
        [5.2.2.9 User connection attachment during a mobile terminating call]
        For speech calls: The mobile station shall attach the user connection
        at latest when sending the connect message.
        */
        NAS_CC_GetBcParams(entityId, NAS_CC_BC_PARAM_CURR, &stBcParams);
        if ( (NAS_CC_ITC_SPEECH == stBcParams.enItc)
          || (NAS_CC_ITC_AUXILIARY_SPEECH == stBcParams.enItc))
        {
            NAS_CC_AttachUserConn(entityId, NAS_CC_ITC_SPEECH);
        }

        NAS_CC_INFO_LOG("NAS_CC_ProcMnccSetupRsp: ChangeCallState to U8");
        NAS_CC_ChangeCallState(entityId, NAS_CC_CALL_STATE_U8);
    }
    else
    {
        NAS_CC_ERR_LOG1("NAS_CC_ProcMnccSetupRsp: bad state.", enCurrState);
    }
}
コード例 #10
0
VOS_UINT32  NAS_CC_ClearCacheMsg(
    VOS_UINT32                          ulEventType
)
{
    NAS_CC_MSG_QUEUE_STRU              *pstMsgQueue = VOS_NULL_PTR;
    VOS_INT8                            i;
    VOS_INT8                            cCachePos;

    pstMsgQueue                         = NAS_CC_GetCachMsgBufferAddr();
    cCachePos                           = -1;

    /* 先找到需要被清除的缓存 */
    for (i = 0 ; i < pstMsgQueue->ucCacheMsgNum; i++)
    {
        if (ulEventType == pstMsgQueue->astMsgQueue[i].stMsgEntry.ulEventType)
        {
            cCachePos = (VOS_INT8)i;
        }
    }

    /* 未找到该消息类型直接返回 */
    if (-1 == cCachePos)
    {
        NAS_CC_INFO_LOG("NAS_CC_ClearCacheMsg:invalid msg type");
        
        return VOS_FALSE;
    }

    /* 为保证先入先出,需要将后面的消息移到前面 */
    for (i = cCachePos; i < (pstMsgQueue->ucCacheMsgNum - 1); i++)
    {
        /* COPY消息内容 */
        PS_MEM_CPY(&(pstMsgQueue->astMsgQueue[i].stMsgEntry),
                   &(pstMsgQueue->astMsgQueue[i + 1].stMsgEntry),
                   sizeof(NAS_CC_ENTRY_MSG_STRU));

    }

    /* 将缓存个数减一 */
    pstMsgQueue->ucCacheMsgNum--;

    /* 将当前缓存给打印出来 */
    NAS_CC_LogBufferQueueMsg(VOS_FALSE);

    return VOS_OK;
}
コード例 #11
0
/*****************************************************************************
 函 数 名  : NAS_CC_ProcMnccAlertReq
 功能描述  : 处理MNCC_ALERT_REQ原语
 输入参数  : pstMsg      - 来自上层的MNCC原语消息
              entityId    - 处理该原语的CC实体的ID
              ucTi        - CC实体对应的transaction ID
              enCurrState - CC实体当前的呼叫状态
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2008年2月14日
    作    者   : 丁庆 49431
    修改内容   : 新生成函数

*****************************************************************************/
LOCAL VOS_VOID  NAS_CC_ProcMnccAlertReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    if (NAS_CC_CALL_STATE_U9 == enCurrState)
    {
        /* 填写alerting消息头 */
        NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_ALERTING, &pstMsg->unParam.stAlert.stHeader);


        /* 判断UUS1是否激活 */
        NAS_CC_GetMsgUus1Info(entityId,
                              NAS_CC_MSG_ALERTING,
                              &(pstMsg->unParam.stAlert.stUserUser));

        /* 编码alerting消息 */
        NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stAlert,
                         f_stCcEncodeBuf.aucBuf,
                         (VOS_UINT8 *)&f_stCcEncodeBuf.ulLen);

        /* 发送MMCC_DATA_REQ原语将消息发往网络 */
        NAS_CC_SendMmccDataReq(ucTi, f_stCcEncodeBuf.aucBuf, f_stCcEncodeBuf.ulLen);

        NAS_CC_INFO_LOG("NAS_CC_ProcMnccAlertReq: ChangeCallState to U7");
        NAS_CC_ChangeCallState(entityId, NAS_CC_CALL_STATE_U7);

        /* 信道已经接入的情况,需要设置当前使用此信道的每一个呼叫实体.
           避免多个呼叫存在时,原来的呼叫被释放后,就断开信道
           CC在呼叫结束的时候,会清除此标志*/
        if (VOS_TRUE == NAS_CC_IsAttachUserConn())
        {
            NAS_CC_SetUserConnEntity(entityId);
        }
    }
    else
    {
        NAS_CC_ERR_LOG1("NAS_CC_ProcMnccAlertReq: bad state.", enCurrState);
    }
}
コード例 #12
0
LOCAL VOS_VOID  NAS_CC_ProcMnccCcbsSetupReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    NAS_CC_BC_PARAMS_STRU               stBcParams;

    NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_SETUP, &pstMsg->unParam.stSetup.stHeader);
    NAS_CC_StartTimer(entityId, TI_NAS_CC_T303, 0);

    /* 此处放在上面的目的是由于NAS_CC_GetMsgUus1Info会使用到更新后的ITC  */
    /* 记录呼叫的承载能力参数 */
    stBcParams.enItc = pstMsg->unParam.stSetup.stBC1.Octet3.InfoTransCap;
    NAS_CC_UpdateBcParams(entityId, NAS_CC_BC_PARAM_1, &stBcParams);
    if (pstMsg->unParam.stSetup.stBC2.IsExist)
    {
        stBcParams.enItc = pstMsg->unParam.stSetup.stBC2.Octet3.InfoTransCap;
        NAS_CC_UpdateBcParams(entityId, NAS_CC_BC_PARAM_2, &stBcParams);
    }

    /* 判断UUS1是否激活 */
    NAS_CC_GetMsgUus1Info(entityId,
                          NAS_CC_MSG_SETUP,
                          &pstMsg->unParam.stSetup.stUserUser);

    /* 编码setup消息并缓存 */
    NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stSetup,
                     g_stNasCcBufferedSetupMsg.aucBuf,
                     (VOS_UINT8 *)&g_stNasCcBufferedSetupMsg.ulLen);

    NAS_CC_SendMmccDataReq(ucTi, g_stNasCcBufferedSetupMsg.aucBuf,
                           g_stNasCcBufferedSetupMsg.ulLen);

    NAS_CC_INFO_LOG("NAS_CC_ProcMnccCcbsSetupReq: ChangeCallState to U1");
    NAS_CC_ChangeCallState(entityId, NAS_CC_CALL_STATE_U1);


}
コード例 #13
0
LOCAL VOS_VOID  NAS_CC_ProcMnccSetupReq(
    MNCC_REQ_PRIM_MSG_STRU              *pstMsg,
    NAS_CC_ENTITY_ID_T                  entityId,
    VOS_UINT8                           ucTi,
    NAS_CC_CALL_STATE_ENUM_U8           enCurrState
)
{
    NAS_CC_BC_PARAMS_STRU               stBcParams;
    VOS_UINT32                          ulCallMode;
    NAS_CC_CUSTOM_CFG_INFO_STRU        *pstCustomCfgAddr;

    /* 获取特性控制NV地址 */
    pstCustomCfgAddr                    = NAS_CC_GetCustomCfgInfo();


    if ( (NAS_CC_CALL_STATE_U0_6 == enCurrState)
       &&(NAS_CC_NV_ITEM_ACTIVE == pstCustomCfgAddr->ucCcbsSupportFlg))
    {
        NAS_CC_ProcMnccCcbsSetupReq(pstMsg,entityId,ucTi,enCurrState);
        return;
    }


    NAS_CC_FillAirMsgHeader(ucTi, NAS_CC_MSG_SETUP, &pstMsg->unParam.stSetup.stHeader);

    /* 获取当前呼叫模式 */
    ulCallMode = NAS_CC_GetCallMode(&pstMsg->unParam.stSetup);

    /* 此处放在上面的目的是由于NAS_CC_GetMsgUus1Info会使用到更新后的ITC,不能放在后面  */

    /* 记录呼叫的承载能力参数 */
    stBcParams.enItc = pstMsg->unParam.stSetup.stBC1.Octet3.InfoTransCap;
    NAS_CC_UpdateBcParams(entityId, NAS_CC_BC_PARAM_1, &stBcParams);
    if (pstMsg->unParam.stSetup.stBC2.IsExist)
    {
        stBcParams.enItc = pstMsg->unParam.stSetup.stBC2.Octet3.InfoTransCap;
        NAS_CC_UpdateBcParams(entityId, NAS_CC_BC_PARAM_2, &stBcParams);
    }

    NAS_CC_SendMmccEstReq(ucTi, MMCC_MO_NORMAL_CALL,ulCallMode,MMCC_NO_CALL_PRIORITY);

    NAS_CC_StartTimer(entityId, TI_NAS_CC_T303, 0);

    /* 判断UUS1是否激活 */
    NAS_CC_GetMsgUus1Info(entityId,
                          NAS_CC_MSG_SETUP,
                          &(pstMsg->unParam.stSetup.stUserUser));

    /* 编码setup消息并缓存 */
    NAS_CC_EncodeMsg((NAS_CC_AIR_MSG_UNION *)&pstMsg->unParam.stSetup,
                     g_stNasCcBufferedSetupMsg.aucBuf,
                     (VOS_UINT8 *)&g_stNasCcBufferedSetupMsg.ulLen);

    NAS_CC_INFO_LOG("NAS_CC_ProcMnccSetupReq: ChangeCallState to U0_1");
    NAS_CC_ChangeCallState(entityId, NAS_CC_CALL_STATE_U0_1);

    /* 信道已经接入的情况,需要设置当前使用此信道的每一个呼叫实体.
       避免多个呼叫存在时,原来的呼叫被释放后,就断开信道
       CC在呼叫结束的时候,会清除此标志*/
    if (VOS_TRUE == NAS_CC_IsAttachUserConn())
    {
        NAS_CC_SetUserConnEntity(entityId);
    }


}