VOS_VOID TAF_MMA_SndImsaCampInfoChangeInd(VOS_VOID)
{
    MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU *pstSndMsg    = VOS_NULL_PTR;
    VOS_UINT32                          ulRet;

    /* 申请内存  */
    pstSndMsg = (MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU *)PS_ALLOC_MSG(WUEPS_PID_MMA,
                           sizeof(MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH);

    if ( VOS_NULL_PTR == pstSndMsg )
    {
        TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SndImsaCampInfoChangeInd: Memory allocation is failure");
        return;
    }

    PS_MEM_SET(pstSndMsg, 0, sizeof(MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU));
    
    /* fill in header information */
    pstSndMsg->ulSenderCpuId      = VOS_LOCAL_CPUID;
    pstSndMsg->ulSenderPid        = WUEPS_PID_MMA;
    pstSndMsg->ulReceiverCpuId    = VOS_LOCAL_CPUID;
    pstSndMsg->ulReceiverPid      = PS_PID_IMSA;
    pstSndMsg->ulLength           = sizeof(MMA_IMSA_CAMP_INFO_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH;

    /* fill in message name */
    pstSndMsg->ulMsgId            = ID_MMA_IMSA_CAMP_INFO_CHANGE_IND;

    /* fill in Roaming flag */
    pstSndMsg->ucRoamingFlg       = TAF_SDC_GetRoamFlag();

    /* set PLMN identity */
    pstSndMsg->stPlmnId.ulMcc     = TAF_SDC_GetCurrCampPlmnId()->ulMcc;
    pstSndMsg->stPlmnId.ulMnc     = TAF_SDC_GetCurrCampPlmnId()->ulMnc;
    
    /* set cell identity */
    pstSndMsg->ulCellId           = TAF_SDC_GetCurrCampCellId();

    if (TAF_SDC_SYS_MODE_LTE == TAF_SDC_GetSysMode())
    {
        if (TAF_SDC_LMM_ACCESS_TYPE_EUTRAN_TDD == TAF_SDC_GetCurrLmmAccessType())
        {
            pstSndMsg->enAccessType = MMA_IMSA_ACCESS_TYPE_EUTRAN_TDD;
        }
        else
        {
            pstSndMsg->enAccessType = MMA_IMSA_ACCESS_TYPE_EUTRAN_FDD;
        }

        /* Get TAC */
        /* IMSA要求usTac的高8bit是系统消息中的Tac,低8bit是系统消息中的TacCnt */
        pstSndMsg->usTac          = TAF_SDC_GetCurrCampLac();
    }
    else
    {
        if (TAF_SDC_SYS_MODE_WCDMA == TAF_SDC_GetSysMode())
        {
            if (NAS_UTRANCTRL_UTRAN_MODE_FDD == NAS_UTRANCTRL_GetCurrUtranMode())
            {
                pstSndMsg->enAccessType = MMA_IMSA_ACCESS_TYPE_UTRAN_FDD;
            }
            else
            {
                pstSndMsg->enAccessType = MMA_IMSA_ACCESS_TYPE_UTRAN_TDD;
            }
        }
        else
        {
            pstSndMsg->enAccessType     = MMA_IMSA_ACCESS_TYPE_GERAN;
        }

        /* Get LAC */
        pstSndMsg->usLac          = TAF_SDC_GetCurrCampLac();
    }
    
    /* send message */
    ulRet = PS_SEND_MSG(WUEPS_PID_MMA, pstSndMsg);

    if (VOS_OK != ulRet)
    {
        TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SndImsaCampInfoChangeInd: Send message is failure");
    }
}
VOS_VOID TAF_MMA_SndImsaSrvInfoNotify(
    MMA_MMC_SERVICE_STATUS_ENUM_UINT32  enPsServiceStatus
)
{
    MMA_IMSA_SERVICE_CHANGE_IND_STRU   *pstSndMsg    = VOS_NULL_PTR;
    TAF_SDC_NETWORK_CAP_INFO_STRU      *pstNwCapInfo = VOS_NULL_PTR;
    VOS_UINT32                          ulRet;

    /* 申请内存  */
    pstSndMsg = (MMA_IMSA_SERVICE_CHANGE_IND_STRU *)PS_ALLOC_MSG(WUEPS_PID_MMA,
                           sizeof(MMA_IMSA_SERVICE_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH);

    if ( VOS_NULL_PTR == pstSndMsg )
    {
        TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SndImsaSrvInfoNotify: Memory allocation is failure");
        return;
    }

    PS_MEM_SET(((VOS_UINT8*)pstSndMsg) + VOS_MSG_HEAD_LENGTH, 0, sizeof(MMA_IMSA_SERVICE_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH);

    /* fill in header information */
    pstSndMsg->ulSenderCpuId      = VOS_LOCAL_CPUID;
    pstSndMsg->ulSenderPid        = WUEPS_PID_MMA;
    pstSndMsg->ulReceiverCpuId    = VOS_LOCAL_CPUID;
    pstSndMsg->ulReceiverPid      = PS_PID_IMSA;
    pstSndMsg->ulLength           = sizeof(MMA_IMSA_SERVICE_CHANGE_IND_STRU) - VOS_MSG_HEAD_LENGTH;

    /* fill in message name */
    pstSndMsg->ulMsgId            = ID_MMA_IMSA_SERVICE_CHANGE_IND;

    /* set PS service status */
    pstSndMsg->enPsServiceStatus  = TAF_MMA_ConvertMmaPsServiceStatusToImsaFormat(enPsServiceStatus);

    /* set PS sim valid */
    pstSndMsg->ucPsSimValid       = VOS_TRUE;
    
    if (MMA_MMC_SERVICE_STATUS_NO_IMSI == enPsServiceStatus)
    {
        pstSndMsg->ucPsSimValid       = VOS_FALSE;
    }
    
    if (TAF_SDC_SYS_MODE_LTE == TAF_SDC_GetSysMode())
    {
        /* by the way, here get lte network capability information */
        pstNwCapInfo              = TAF_SDC_GetLteNwCapInfo();
    }
    else
    {
        /* by the way, here get GU network capability information */
        pstNwCapInfo              = TAF_SDC_GetGuNwCapInfo();
    }

    /* fill RAT */
    pstSndMsg->enRat              = (MMA_IMSA_RAT_TYPE_ENUM_UINT8)TAF_SDC_GetSysMode();

    /* fill in network capability infomation */
    pstSndMsg->enEmsInd           = (MMA_IMSA_EMS_INDICATOR_ENUM_UINT8)pstNwCapInfo->enNwEmcBsCap;
    pstSndMsg->enImsVoPsInd       = (MMA_IMSA_IMS_VOPS_INDICATOR_ENUM_UINT8)pstNwCapInfo->enNwImsVoCap;

    /* send message */
    ulRet = PS_SEND_MSG(WUEPS_PID_MMA, pstSndMsg);
    if ( VOS_OK != ulRet )
    {
        TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SndImsaSrvInfoNotify: Send message is failure");
    }
}
Ejemplo n.º 3
0
VOS_VOID MN_CALL_CsCallErrRecord(
    MN_CALL_ID_T                        ucCallId,
    TAF_CS_CAUSE_ENUM_UINT32            enCause
)
{
    NAS_ERR_LOG_CS_CALL_FAIL_EVENT_STRU                     stCsCallFailEvent;
    MN_CALL_INFO_STRU                                       stCallInfo;
    VOS_UINT32                                              ulIsLogRecord;
    VOS_UINT32                                              ulLength;
    VOS_UINT32                                              ulResult;
    VOS_UINT16                                              usLevel;

    /* 查询对应Alarm Id是否需要记录异常信息 */
    usLevel       = NAS_GetErrLogAlmLevel(NAS_ERR_LOG_ALM_CS_CALL_FAIL);
    ulIsLogRecord = TAF_SDC_IsErrLogNeedRecord(usLevel);

    /* 不需要记录或没有异常时,不保存异常信息 */
    if ((VOS_FALSE == ulIsLogRecord)
     || (TAF_CS_CAUSE_SUCCESS == enCause)
     || (TAF_CS_CAUSE_CC_NW_NORMAL_CALL_CLEARING == enCause))
    {
        return;
    }

    ulLength = sizeof(NAS_ERR_LOG_CS_CALL_FAIL_EVENT_STRU);

    /* 填充Cs呼叫失败异常信息 */
    PS_MEM_SET(&stCsCallFailEvent, 0x00, ulLength);
    PS_MEM_SET(&stCallInfo, 0x00, sizeof(stCallInfo));

    NAS_COMM_BULID_ERRLOG_HEADER_INFO(&stCsCallFailEvent.stHeader,
                                      VOS_GetModemIDFromPid(WUEPS_PID_TAF),
                                      NAS_ERR_LOG_ALM_CS_CALL_FAIL,
                                      usLevel,
                                      VOS_GetSlice(),
                                      (ulLength - sizeof(OM_ERR_LOG_HEADER_STRU)));

    stCsCallFailEvent.ulCcCause = enCause;

    if (0 == ucCallId)
    {
        /* ucCallId为0说明为本地异常,无法在全局变量中获取信息 */
        stCsCallFailEvent.ucCallId            = ucCallId;
        stCsCallFailEvent.enCallState         = NAS_ERR_LOG_CALL_S_IDLE;
        stCsCallFailEvent.stDiscDir.ucIsUser  = VOS_TRUE;
    }
    else
    {
        MN_CALL_GetCallInfoByCallId(ucCallId, &stCallInfo);

        stCsCallFailEvent.ucCallId    = stCallInfo.callId;
        stCsCallFailEvent.enCallState = stCallInfo.enCallState;
        PS_MEM_CPY(&stCsCallFailEvent.stDiscDir, &stCallInfo.stDiscDir, sizeof(NAS_ERR_LOG_MN_CALL_DISC_DIR_STRU) );
    }

    /* 获取当前位置信息 */
    NAS_MNTN_OutputPositionInfo(&stCsCallFailEvent.stPositionInfo);

    /* 获取当前Usim信息 */
    NAS_MMA_OutputUsimInfo(&stCsCallFailEvent.stUsimInfo);

    stCsCallFailEvent.enRat = TAF_SDC_GetSysMode();

    /*
       将异常信息写入Buffer中
       实际写入的字符数与需要写入的不等则打印异常
     */
    ulResult = TAF_SDC_PutErrLogRingBuf((VOS_CHAR *)&stCsCallFailEvent, ulLength);
    if (ulResult != ulLength)
    {
        NAS_ERROR_LOG(WUEPS_PID_TAF, "MN_CALL_CsCallErrRecord(): Push buffer error.");
    }

    NAS_COM_MntnPutRingbuf(NAS_ERR_LOG_ALM_CS_CALL_FAIL,
                           WUEPS_PID_TAF,
                           (VOS_UINT8 *)&stCsCallFailEvent,
                           sizeof(stCsCallFailEvent));
    return;
}