Esempio n. 1
0
VOS_UINT32 TAF_MMA_SndMmcNetScanMsgReq(
    TAF_MMA_NET_SCAN_REQ_STRU          *pstNetScanReq
)
{
    VOS_UINT32                          ulRet;
    MMA_MMC_NET_SCAN_REQ_STRU          *pstMsg              = VOS_NULL_PTR;
    MMA_UE_SUPPORT_FREQ_BAND_STRU       stUeBand;                               /* UE支持的用户设置的频段 */
    VOS_UINT32                          ulBand;
    MMA_USER_BAND_SET_UN                uUserSetBand;

    /* 申请消息内存 */
    pstMsg = (MMA_MMC_NET_SCAN_REQ_STRU*)PS_ALLOC_MSG_WITH_HEADER_LEN(
                                         WUEPS_PID_MMA,
                                         sizeof(MMA_MMC_NET_SCAN_REQ_STRU));
    if (VOS_NULL_PTR == pstMsg)
    {
        /* 内存申请失败 */
        MN_ERR_LOG("TAF_MMA_SndNetScanMsgReq():ERROR: Memory Alloc Error for pMsg");
        return VOS_ERR;
    }

    PS_MEM_SET(pstMsg, 0x00, sizeof(MMA_MMC_NET_SCAN_REQ_STRU));

    pstMsg->MsgHeader.ulSenderCpuId     = VOS_LOCAL_CPUID;
    pstMsg->MsgHeader.ulSenderPid       = WUEPS_PID_MMA;
    pstMsg->MsgHeader.ulReceiverCpuId   = VOS_LOCAL_CPUID;
    pstMsg->MsgHeader.ulReceiverPid     = WUEPS_PID_MMC;
    pstMsg->MsgHeader.ulLength          = sizeof(MMA_MMC_NET_SCAN_REQ_STRU) - VOS_MSG_HEAD_LENGTH;
    pstMsg->MsgHeader.ulMsgName         = ID_MMA_MMC_NET_SCAN_REQ;

    /* GU频带设置参数填写 */
    /* 将pstNetScanReq->stGuBand 从64位转换为32位 */
    MN_MMA_Convert64BitBandTo32Bit(&pstNetScanReq->stBand, &ulBand);
    MN_MMA_ConvertGUFrequencyBand(&ulBand);
    uUserSetBand.ulPrefBand             = ulBand;

    MMA_SwitchUserSetBand2UESupportBand(uUserSetBand, &stUeBand);

    pstMsg->stBand.unGsmBand.ulBand     = stUeBand.unGsmBand.ulBand;
    pstMsg->stBand.unWcdmaBand.ulBand   = stUeBand.unWcdmaBand.ulBand;
    pstMsg->sCellPow                    = pstNetScanReq->sCellPow;
    pstMsg->usCellNum                   = pstNetScanReq->usCellNum;
    pstMsg->ucRat                       = pstNetScanReq->ucRat;

    /*消息发送*/
    ulRet = PS_SEND_MSG( WUEPS_PID_MMA, pstMsg);

    if (VOS_OK != ulRet)
    {
        MN_ERR_LOG("TAF_MMA_SndMmcNetScanMsgReq():ERROR: Send Msg Fail.");
        return VOS_ERR;
    }

    return VOS_OK;
}
VOS_VOID TAF_MMA_UpdateUeBandNvim()
{
    TAF_USER_SET_PREF_BAND64            stOrigUserSetGuBand;
    TAF_PH_PREF_BAND                    ulBand;
    MMA_USER_BAND_SET_UN                uUserSetBand;
    MMA_UE_SUPPORT_FREQ_BAND_STRU       stSetBand;
    MMA_UE_SUPPORT_FREQ_BAND_STRU       stUeOrigSupportFreqBand;
    MMA_USER_BAND_SET_UN                uUeOrigSupportFreqBand;

    PS_MEM_SET(&stOrigUserSetGuBand, 0x00, sizeof(stOrigUserSetGuBand));
    PS_MEM_SET(&ulBand, 0x00, sizeof(ulBand));
    PS_MEM_SET(&uUserSetBand, 0x00, sizeof(uUserSetBand));
    PS_MEM_SET(&stSetBand, 0x00, sizeof(stSetBand));
    PS_MEM_SET(&stUeOrigSupportFreqBand, 0x00, sizeof(stUeOrigSupportFreqBand));
    PS_MEM_SET(&uUeOrigSupportFreqBand, 0x00, sizeof(uUeOrigSupportFreqBand));


    /* 读NV8265到stOrigUserSetGuBand中 */
    TAF_MMA_ReadUserSettedBandNvim();

    MN_MMA_Convert64BitBandTo32Bit(&gstMmaValue.stLastSyscfgSet.stUserSetBand.stOrigUserSetGuBand, &ulBand);

    MN_MMA_ConvertGUFrequencyBand(&ulBand);
    uUserSetBand.ulPrefBand = ulBand;
    
    /* 读NV8229到stUeOrigSupportFreqBand中 */
    TAF_MMA_ReadFreqBandNvim();

    /*将当前系统设置的频段转换为用户设置的格式*/
    MMA_SwitchUESupportBand2UserSetBand(gstMmaValue.stLastSyscfgSet.stUserSetBand.uUserSetUeFormatGuBand, &uUeOrigSupportFreqBand);

    /* 如果用户设置频段、射频频段交集与NV 8229值相同,则直接返回不需要写NV */
    if (uUserSetBand.ulPrefBand != uUeOrigSupportFreqBand.ulPrefBand)
    {
        MMA_SwitchUserSetBand2UESupportBand(uUserSetBand, &stSetBand);
        
        /* 写NV:en_NV_Item_Support_Freqbands,更新全局变量 */
        TAF_MMA_UpdateSupportFreqBand(&stSetBand);
    }

    /*若ForbBandNV激活,进行频段检查和 更新NV项*/
    if (NV_ITEM_ACTIVE == gstMmaForbBand.ucActiveFlag)
    {
        if (VOS_FALSE == gstMmaForbBand.ucForbStatus)
        {
            /*根据禁止频段的信息更新FreqBandNV和UsersetBandNV*/
            MMA_UpdateBandNvRefForbBand();

            /*更新禁止频段的Status为TRUE 1*/
            MMA_UpdateForbBandStatusToNV();
        }
    }

    return;
}
Esempio n. 3
0
VOS_UINT32  TAF_MMA_SndMmcSysCfgReq(
    TAF_MMA_SYS_CFG_PARA_STRU          *pSysCfgReq,
    MMA_SYS_CFG_SET_FLG                 usSetFlg
)
{
    VOS_UINT32                          ulRet;
    MMA_MMC_SYS_CFG_SET_REQ_STRU       *pMsg = VOS_NULL_PTR;
    MMA_USER_BAND_SET_UN                uUserSetBand;
    MMA_UE_SUPPORT_FREQ_BAND_STRU       stUeBand;   /* UE支持的用户设置的频段 */
    VOS_UINT32                          ulBand;
    VOS_UINT32                          i;


    /* 申请消息内存 */
    pMsg = (MMA_MMC_SYS_CFG_SET_REQ_STRU*)PS_ALLOC_MSG_WITH_HEADER_LEN(
                                         WUEPS_PID_MMA,
                                         sizeof(MMA_MMC_SYS_CFG_SET_REQ_STRU));
    if (VOS_NULL_PTR == pMsg)
    {
        /* 内存申请失败                             */
        MN_ERR_LOG("TAF_MMA_SndMmcSysCfgReq():ERROR: Memory Alloc Error for pMsg");
        return VOS_ERR;
    }

    pMsg->MsgHeader.ulSenderCpuId       = VOS_LOCAL_CPUID;
    pMsg->MsgHeader.ulSenderPid         = WUEPS_PID_MMA;
    pMsg->MsgHeader.ulReceiverCpuId     = VOS_LOCAL_CPUID;
    pMsg->MsgHeader.ulReceiverPid       = WUEPS_PID_MMC;
    pMsg->MsgHeader.ulMsgName           = ID_MMA_MMC_SYS_CFG_SET_REQ;

    pMsg->ucOnlyRoamParaChanged         = VOS_FALSE;

    /*漫游参数填写*/
    pMsg->enRoamCapability = pSysCfgReq->ucRoam;

    /*接入模式pMsg->stRatPrioList参数填写*/


#if (FEATURE_ON == FEATURE_LTE)
    if (pSysCfgReq->stRatOrder.ucRatOrderNum > TAF_PH_MAX_GUL_RAT_NUM)
    {
        pSysCfgReq->stRatOrder.ucRatOrderNum = TAF_PH_MAX_GUL_RAT_NUM;
    }
#else
    if (pSysCfgReq->stRatOrder.ucRatOrderNum > TAF_PH_MAX_GU_RAT_NUM)
    {
        pSysCfgReq->stRatOrder.ucRatOrderNum = TAF_PH_MAX_GU_RAT_NUM;
    }
#endif

    /* 如果UE不支持GSM,当设置包含G模去掉G模 */
    if (MMA_TRUE == MMA_IsGsmForbidden())
    {
        pMsg->stRatPrioList.ucRatNum = 0;
        for ( i = 0 ; i < pSysCfgReq->stRatOrder.ucRatOrderNum; i++ )
        {
            if ( TAF_PH_RAT_GSM == pSysCfgReq->stRatOrder.aenRatOrder[i])
            {
                continue;
            }
            pMsg->stRatPrioList.aucRatPrio[pMsg->stRatPrioList.ucRatNum] = pSysCfgReq->stRatOrder.aenRatOrder[i];
            pMsg->stRatPrioList.ucRatNum++;
        }
    }
    else
    {
        PS_MEM_CPY(&(pMsg->stRatPrioList), &(pSysCfgReq->stRatOrder), sizeof(MMA_MMC_PLMN_RAT_PRIO_STRU));
    }

    /* GU频带设置参数填写*/
    /*将pSysCfgReq->stGuBand 从64位转换为32位*/
    MN_MMA_Convert64BitBandTo32Bit(&pSysCfgReq->stGuBand, &ulBand);
    MN_MMA_ConvertGUFrequencyBand(&ulBand);
    uUserSetBand.ulPrefBand         = ulBand;

    MMA_SwitchUserSetBand2UESupportBand(uUserSetBand, &stUeBand);
    pMsg->stBand.unGsmBand.ulBand   = stUeBand.unGsmBand.ulBand;
    pMsg->stBand.unWcdmaBand.ulBand = stUeBand.unWcdmaBand.ulBand;

    /* L频段设置参数填写 */
    pMsg->stBand.stLteBand.aulLteBand[0] = pSysCfgReq->stLBand.ulBandLow;
    pMsg->stBand.stLteBand.aulLteBand[1] = pSysCfgReq->stLBand.ulBandHigh;

    if ((MMA_SYS_CFG_MODE_SET != (usSetFlg & MMA_SYS_CFG_MODE_SET))
     && (MMA_SYS_CFG_BAND_SET != (usSetFlg & MMA_SYS_CFG_BAND_SET))
     && (MMA_SYS_CFG_ROAM_SET == (usSetFlg & MMA_SYS_CFG_ROAM_SET)))
    {
        pMsg->ucOnlyRoamParaChanged = VOS_TRUE;
    }

    /*消息发送*/
    ulRet = PS_SEND_MSG( WUEPS_PID_MMA, pMsg);
    if (VOS_OK != ulRet)
    {
        MN_ERR_LOG("TAF_MMA_SndMmcSysCfgReq():ERROR: Send Msg Fail.");
        return VOS_ERR;
    }


    return VOS_OK;
}