VOS_VOID TAF_MMA_ReadSystemAppCofigNvim(VOS_VOID)
{
    VOS_UINT32                          ulLength;
    NAS_NVIM_SYSTEM_APP_CONFIG_STRU     stSysAppConfig;

    PS_MEM_SET(&stSysAppConfig, 0x00, sizeof(NAS_NVIM_SYSTEM_APP_CONFIG_STRU));

    /* 读取en_NV_Item_System_APP_Config,获取对接的上层应用 */
    NV_GetLength(en_NV_Item_System_APP_Config, &ulLength);

    if (NV_OK != NV_Read(en_NV_Item_System_APP_Config,
                         &stSysAppConfig, ulLength))
    {
        stSysAppConfig.usSysAppConfigType = SYSTEM_APP_MP;
        MMA_WARNINGLOG("TAF_MMA_ReadSystemAppCofigNvim():Read en_NV_Item_System_APP_Config Failed!");
    }

    if ( SYSTEM_APP_ANDROID < stSysAppConfig.usSysAppConfigType)
    {
        g_usMmaAppConfigSupportType = SYSTEM_APP_MP;
        MMA_WARNINGLOG("TAF_MMA_ReadSystemAppCofigNvim():en_NV_Item_System_APP_Config error!");
    }
    else
    {
        g_usMmaAppConfigSupportType = stSysAppConfig.usSysAppConfigType;
    }


    return;
}
/*****************************************************************************
 函 数 名  : MMA_UpdateForbBandStatusToNV
 功能描述  : 将ForbBand的NV的状态更新为VOS_TRUE
 输入参数  : VOS_VOID
 输出参数  : 无
 返 回 值  : VOS_VOID
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2010年4月23日
    作    者   : likelai
    修改内容   : 新生成函数

*****************************************************************************/
VOS_VOID MMA_UpdateForbBandStatusToNV(VOS_VOID)
{
    VOS_UINT32                           ulRslt;

    gstMmaForbBand.ucForbStatus = VOS_TRUE;

    ulRslt = MMA_WriteValue2Nvim(en_NV_Item_Forbidden_Band,
                   &gstMmaForbBand,
                   sizeof(gstMmaForbBand.ucActiveFlag)+sizeof(gstMmaForbBand.ucForbStatus));

    if (MMA_SUCCESS != ulRslt)
    {
        MMA_WARNINGLOG("MMA_UpdateForbBandStatusToNV():WARNING:NVIM_Write en_NV_Item_Forbbiden_Band failed");
    }

    return;
}
VOS_VOID TAF_MMA_ReadUeSupporttedGuBandNvim(VOS_VOID)
{
    /* 修改硬件频段的读取为32位格式 */
    VOS_UINT32                          aulSptBand[3];
    MMA_UE_SUPPORT_FREQ_BAND_STRU       stUeBand;
    MMA_USER_BAND_SET_UN                uUserSetBand;
    VOS_UINT32                          ulDataLen;

    ulDataLen = 0;

    /*获取 UE支持的 Band */
    PS_MEM_SET(&stUeBand,0x00,sizeof(stUeBand));
    PS_MEM_SET(&uUserSetBand,0x00,sizeof(uUserSetBand));


    PS_MEM_SET(aulSptBand, 0x00, sizeof(aulSptBand));

    NV_GetLength(en_NV_Item_WG_RF_MAIN_BAND, &ulDataLen);

    if (NV_OK != NV_Read(en_NV_Item_WG_RF_MAIN_BAND,aulSptBand,ulDataLen))
    {
        /*打印未成功初始化值,原值保留*/
        MMA_WARNINGLOG("MMA_InitMeInfo():Read en_NV_Item_WG_RF_MAIN_BAND Failed!");
    }
    else
    {
        stUeBand.unWcdmaBand.ulBand = aulSptBand[0];
        gstMmaBandCapa.unWRFSptBand.ulBand = aulSptBand[0];
        MMA_SwitchUESupportBand2UserSetBand(stUeBand,&uUserSetBand);
        gstMmaBandCapa.ulUeWSptBand = uUserSetBand.ulPrefBand;

        PS_MEM_SET(&stUeBand,0x00,sizeof(stUeBand));
        PS_MEM_SET(&uUserSetBand,0x00,sizeof(uUserSetBand));
        /*V9R1 NV数据结构扩展为32位 */
        stUeBand.unGsmBand.ulBand = aulSptBand[2];
        gstMmaBandCapa.unGRFSptBand.ulBand = aulSptBand[2];
        /*V9R1 NV数据结构扩展为32位 */
        MMA_SwitchUESupportBand2UserSetBand(stUeBand,&uUserSetBand);
        gstMmaBandCapa.ulUeGSptBand = uUserSetBand.ulPrefBand;

        gstMmaBandCapa.ulAllUeBand = (gstMmaBandCapa.ulUeGSptBand | gstMmaBandCapa.ulUeWSptBand);
    }

    return;
}
VOS_VOID TAF_MMA_ReadProductNameNvim(VOS_VOID)
{
    VOS_UINT32                          ulDataLen;
    TAF_PH_MEINFO_STRU                 *pstMeInfo = VOS_NULL_PTR;

    pstMeInfo = &(gstMmaValue.stMeInfo);
    ulDataLen = TAF_PH_PRODUCT_NAME_LEN + 1;

    /*获取产品名字*/
    if (NV_OK != NV_Read(en_NV_Item_ProductName,
                         pstMeInfo->ProductName.aucProductName,
                         ulDataLen))
    {
        /*打印未成功初始化值,原值保留*/
       MMA_WARNINGLOG("TAF_MMA_ReadProductNameNvim():Read ProductName Failed!");
    }


    return;
}
VOS_VOID TAF_MMA_ReadFmridNvim(VOS_VOID)
{
    VOS_UINT32                          ulDataLen;
    TAF_PH_MEINFO_STRU                 *pstMeInfo = VOS_NULL_PTR;

    pstMeInfo = &(gstMmaValue.stMeInfo);
    ulDataLen = TAF_MAX_MFR_ID_LEN + 1;

    /*获取厂商名字*/
    if (NV_OK != NV_Read(en_NV_Item_FMRID,
                         pstMeInfo->FmrId.aucMfrId,
                         ulDataLen))
    {
        /*打印未成功初始化值,原值保留*/
        MMA_WARNINGLOG("TAF_MMA_ReadFmridNvim():Read FMRID Failed!");
    }


    return;
}
VOS_VOID  TAF_MMA_UpdateSupportFreqBand(
    MMA_UE_SUPPORT_FREQ_BAND_STRU      *pstOrigFreqBand
)
{
    MN_MMA_SYSCFG_USER_SET_BAND_STRU   *pstUserSetBand = VOS_NULL_PTR;

    pstUserSetBand = MN_MMA_GetSyscfgUserSetBandAddr();

    /* 更新频段NV */
    if (MMA_SUCCESS != MMA_WriteValue2Nvim(en_NV_Item_Support_Freqbands,
                                           pstOrigFreqBand,
                                           sizeof(pstOrigFreqBand->unWcdmaBand)+sizeof(pstOrigFreqBand->unGsmBand)))
    {
        MMA_WARNINGLOG("MMA_UpdateBandNvRefForbBand():WARNING:NVIM_Write en_NV_Item_Support_Freqbands failed");
    }

    /* 写完en_NV_Item_Support_Freqbands之后,直接更新全局变量,后续不用再重新读该NV */
    PS_MEM_CPY(&(pstUserSetBand->uUserSetUeFormatGuBand),
                pstOrigFreqBand,
                sizeof(MMA_UE_SUPPORT_FREQ_BAND_STRU));
    return;
}
VOS_VOID TAF_MMA_ReadUserSettedBandNvim(VOS_VOID)
{
    MN_MMA_SYSCFG_USER_SET_BAND_STRU  *pstUserSetBand = VOS_NULL_PTR;

    pstUserSetBand = MN_MMA_GetSyscfgUserSetBandAddr();

    /* 获取用户设置的GU频段 */
    if (NV_OK != NV_Read(en_NV_Item_User_Set_Freqbands,
                         &(pstUserSetBand->stOrigUserSetGuBand),
                         sizeof(TAF_USER_SET_PREF_BAND64)))
    {
        /*打印未成功初始化值,原值保留*/
        pstUserSetBand->uUserSetGuBand.ulPrefBand      = TAF_PH_BAND_ANY;
        pstUserSetBand->stOrigUserSetGuBand.ulBandHigh = 0;
        pstUserSetBand->stOrigUserSetGuBand.ulBandLow  = TAF_PH_BAND_ANY;
        MMA_WARNINGLOG("TAF_MMA_ReadUserSettedBandNvim():Read UserSet_Freqbands Failed!");
    }
    else
    {
        if ( (0 != pstUserSetBand->stOrigUserSetGuBand.ulBandHigh )
          || ( TAF_PH_BAND_ANY != pstUserSetBand->stOrigUserSetGuBand.ulBandLow) )
        {
            pstUserSetBand->uUserSetGuBand.ulPrefBand = pstUserSetBand->stOrigUserSetGuBand.ulBandHigh |
                                        (pstUserSetBand->stOrigUserSetGuBand.ulBandLow & ~TAF_PH_BAND_NEED_CHANGE_TO_64BIT);
            /* 过滤无效频段 */
            pstUserSetBand->uUserSetGuBand.ulPrefBand &= (gstMmaBandCapa.ulAllUeBand);
        }
        else
        {
            /* 当前频段为TAF_PH_BAND_ANY时,赋值为单板支持的所有频段 */
            pstUserSetBand->uUserSetGuBand.ulPrefBand = gstMmaBandCapa.ulAllUeBand;
        }
    }

    MN_INFO_LOG1("TAF_MMA_ReadUserSettedBandNvim():Support_Freqbands:",(VOS_INT32)pstUserSetBand->uUserSetGuBand.ulPrefBand);


    return;
}
VOS_VOID TAF_MMA_ReadEFustServiceCfgNvim(VOS_VOID)
{
    VOS_UINT32                          ulDataLen;

    ulDataLen = sizeof(MMA_EFUST_SERVICE_CFG_STRU);

    if (NV_OK != NV_Read(en_NV_Item_EFust_Service_Cfg,
                          (VOS_VOID*)(&(gstMmaValue.stEfustServiceCfg)),
                           ulDataLen))
    {
         /*打印未成功初始化值,原值保留*/
        MMA_WARNINGLOG("TAF_MMA_ReadEFustServiceCfgNvim():Read EFust_Service_Cfg Failed!");
    }

    if (NV_ITEM_DEACTIVE == gstMmaValue.stEfustServiceCfg.ucEnableFlag)
    {
        gstMmaValue.stEfustServiceCfg.ucForbidSndMsg = 0;
        gstMmaValue.stEfustServiceCfg.ucForbidReg2GNetWork = 0;
    }

    return;
}
VOS_VOID TAF_MMA_ReadRoamCapaNvim(VOS_VOID)
{
    VOS_UINT32                          ulLength;
    NAS_NVIM_ROAM_CFG_INFO_STRU         stRoamFeature;
    MN_MMA_LAST_SETTED_SYSCFG_SET_STRU *pstLastSyscfgSet = VOS_NULL_PTR;

    PS_MEM_SET(&stRoamFeature, 0x00, sizeof(stRoamFeature));
    pstLastSyscfgSet = MN_MMA_GetLastSyscfgSetAddr();
    ulLength = 0;

    NV_GetLength(en_NV_Item_Roam_Capa, &ulLength);

    if ( NV_OK != NV_Read(en_NV_Item_Roam_Capa,
                          &stRoamFeature,
                          ulLength))
    {
        MMA_WARNINGLOG("TAF_MMA_ReadRoamCapaNvim():Read en_NV_Item_Roam_Capa Failed!");
        stRoamFeature.ucRoamFeatureFlg = MMA_MMC_ROAM_FEATURE_OFF;
        stRoamFeature.ucRoamCapability = MMA_MMC_ROAM_NATION_OFF_INTERNATION_OFF;
    }
    else
    {
        if (stRoamFeature.ucRoamFeatureFlg >= MMA_MMC_ROAM_FEATURE_BUTT)
        {
            stRoamFeature.ucRoamFeatureFlg = MMA_MMC_ROAM_FEATURE_OFF;
        }
        if (stRoamFeature.ucRoamCapability >= MMA_MMC_ROAM_BUTT)
        {
            stRoamFeature.ucRoamCapability = MMA_MMC_ROAM_NATION_OFF_INTERNATION_OFF;
        }
    }

    gstMmaValue.ucRoamFeatureStatus = stRoamFeature.ucRoamFeatureFlg;
    pstLastSyscfgSet->ucRoam        = stRoamFeature.ucRoamCapability;
    return;
}
VOS_VOID  TAF_MMA_UpdateUserSetFreqBand(VOS_VOID)
{
    TAF_USER_SET_PREF_BAND64            stUserSetBandAny;  /*64位原始频带*/
    MN_MMA_SYSCFG_USER_SET_BAND_STRU   *pstUserSetBand = VOS_NULL_PTR;

    pstUserSetBand = MN_MMA_GetSyscfgUserSetBandAddr();

    stUserSetBandAny.ulBandHigh = 0;
    stUserSetBandAny.ulBandLow = TAF_PH_BAND_ANY;

    /* 更新用户设置频段的NV为3fffffff */
    if (MMA_SUCCESS != MMA_WriteValue2Nvim(en_NV_Item_User_Set_Freqbands,
                                           &stUserSetBandAny,
                                           sizeof(stUserSetBandAny)))
    {
        MMA_WARNINGLOG("MMA_UpdateBandNvRefForbBand():WARNING:NVIM_Write en_NV_Item_User_Set_Freqbands failed");
    }

    /* 当前频段为TAF_PH_BAND_ANY时,赋值为单板支持的所有频段 */
    /* 写完en_NV_Item_User_Set_Freqbands之后,直接更新全局变量,后续不用再重新读该NV */
    pstUserSetBand->uUserSetGuBand.ulPrefBand = gstMmaBandCapa.ulAllUeBand;

    return;
}
VOS_VOID TAF_MMA_USIMRefreshFileProc(
    VOS_UINT16                          usEfId,
    VOS_UINT16                          usEfLen,
    VOS_UINT8                          *pucEf
)
{
    USIMM_READFILE_CNF_STRU           *pUsimTafMsg;
    VOS_UINT8                         *pucImsi = VOS_NULL_PTR;
    MMA_GET_ICC_ID_ST                 *pstIccId = VOS_NULL_PTR;

    pucImsi  = TAF_SDC_GetSimImsi();
    pstIccId = TAF_MMA_GetIccIdInfo();

    switch (usEfId)
    {
        case USIMM_GSM_EFONS_ID:
            /*lint -e961*/
            pUsimTafMsg = (USIMM_READFILE_CNF_STRU *)PS_MEM_ALLOC(WUEPS_PID_MMA, (VOS_UINT32)(sizeof(USIMM_READFILE_CNF_STRU) - 4 + usEfLen));
            /*lint +e961*/
            if (VOS_NULL_PTR == pUsimTafMsg)
            {
                MMA_ERRORLOG("MMA_USIMReadRefreshFileProc():ERROR:MALLOC FAIL");
                return;
            }
            /*lint -e961*/
            PS_MEM_SET(pUsimTafMsg, 0, (VOS_UINT32)(sizeof(USIMM_READFILE_CNF_STRU) - 4 + usEfLen));
            /*lint +e961*/


           pUsimTafMsg->stCmdResult.ulResult = MMA_SUCCESS;
           pUsimTafMsg->usEfLen  = usEfLen;
           PS_MEM_CPY(pUsimTafMsg->aucEf, pucEf, usEfLen);

           TAF_MMA_ReadCphsFileCnf(pUsimTafMsg);

           PS_MEM_FREE(WUEPS_PID_MMA, pUsimTafMsg);
           break;

        case USIMM_ICCID_ID:
            MMA_MEM_SET(&(pstIccId->stIccId), 0, sizeof(TAF_PH_ICC_ID_STRU));
            MMA_MEM_CPY(pstIccId->stIccId.aucIccId,
                        pucEf,
                        usEfLen);
            pstIccId->stIccId.ucLen = (VOS_UINT8)usEfLen;
            TAF_MMA_ReadIccIdFileCnf();
            break;

        case USIMM_USIM_EFIMSI_ID:
        case USIMM_GSM_EFIMSI_ID:
            /* 判断IMSI是否改变 */
            if (0 != VOS_MemCmp(pucImsi, pucEf, NAS_MAX_IMSI_LENGTH))
            {
                if (TAF_MMA_FSM_MAIN != TAF_MMA_GetCurrFsmId())
                {
                    TAF_MMA_SndInterUsimChangeInd();

                    break;
                }

                if (STA_FSM_NULL == g_StatusContext.ulFsmState)
                {
                   break;
                }

                TAF_MMA_SndInterUsimChangeInd();
            }

            MMA_WARNINGLOG("MMA_USIMReadRefreshFileProc():WARNING:Refresh File Id IMSI");
            break;

        case USIMM_USIM_EFPNN_ID:
        case USIMM_USIM_EFPNNI_ID:
            MMA_INFOLOG("MMA_USIMReadRefreshFileProc():INFO:Refresh File PNN");
            break;

        case USIMM_USIM_EFOPL_ID:
        case USIMM_GSM_EFOPL_ID:
            MMA_INFOLOG("MMA_USIMReadRefreshFileProc():INFO:Refresh File OPL");
            break;

        case USIMM_GSM_EFCSP_ID:
            TAF_MMA_RcvCustomerServiceProfileFile(VOS_OK, usEfLen, pucEf);
            break;

        case USIMM_ATTUSIM_EFRATMODE_ID:
            TAF_MMA_RcvRatModeFileRefresh(usEfLen, pucEf);
            break;

        default:
            MMA_WARNINGLOG("MMA_USIMReadRefreshFileProc():WARNING:UNKNOW EFID RECEIVE!");
            break;
    }

}
VOS_UINT32 TAF_MMA_UsimGetFileRspPreProc(
    VOS_UINT32                          ulEventType,
    struct MsgCB                       *pstMsg
)
{
    VOS_UINT32                          ulRet;
    TAF_PH_USIM_SPN_CNF_STRU            stSpnTmp;
    MMA_GET_ICC_ID_ST                  *pstIccId     = VOS_NULL_PTR;
    USIMM_READFILE_CNF_STRU            *pUsimTafMsg  = VOS_NULL_PTR;
    USIMM_DEF_FILEID_ENUM_UINT32        enFileID;

    PS_MEM_SET(&stSpnTmp, 0xFF, sizeof(TAF_PH_USIM_SPN_CNF_STRU));

    pUsimTafMsg = (USIMM_READFILE_CNF_STRU *)pstMsg;
    if (VOS_OK != USIMM_ChangePathToDefFileID(pUsimTafMsg->stCmdResult.enApptype, pUsimTafMsg->stFilePath.ulPathLen, pUsimTafMsg->stFilePath.acPath, &enFileID))
    {
        return VOS_FALSE;
    }

    pstIccId     = TAF_MMA_GetIccIdInfo();
    pUsimTafMsg  = (USIMM_READFILE_CNF_STRU*)pstMsg;

    TAF_MMA_ClearWaitSimFilesCnfFlg(enFileID);

    switch (enFileID)
    {
        case USIMM_USIM_EFSPN_ID:
        case USIMM_GSM_EFSPN_ID:
            if (MMA_SUCCESS == pUsimTafMsg->stCmdResult.ulResult)
            {
                if (pUsimTafMsg->usEfLen > sizeof(TAF_PH_USIM_SPN_CNF_STRU))
                {
                    MMA_MEM_CPY(&stSpnTmp, (VOS_UINT8*)(VOS_UINT32)(pUsimTafMsg->aucEf), sizeof(TAF_PH_USIM_SPN_CNF_STRU));
                }
                else
                {
                    MMA_MEM_CPY(&stSpnTmp, pUsimTafMsg->aucEf, pUsimTafMsg->usEfLen);
                }

                MMA_ReadSpnFileCnf((TAF_PH_USIM_SPN_CNF_STRU *)&stSpnTmp, enFileID);
            }
            break;

         case USIMM_GSM_EFONS_ID:
            TAF_MMA_ReadCphsFileCnf(pUsimTafMsg);
            break;

        case USIMM_ICCID_ID:
            MMA_MEM_SET(&(pstIccId->stIccId), 0, sizeof(TAF_PH_ICC_ID_STRU));
            MMA_MEM_CPY(pstIccId->stIccId.aucIccId,
                        pUsimTafMsg->aucEf,
                        pUsimTafMsg->usEfLen);
            pstIccId->stIccId.ucLen = (VOS_UINT8)pUsimTafMsg->usEfLen;
            TAF_MMA_ReadIccIdFileCnf();
            break;
        case USIMM_USIM_EFIMSI_ID:
        case USIMM_GSM_EFIMSI_ID:

            ulRet = MMA_CheckPin1SatusSimple();

            if ( MMA_NONEED_PIN1 == ulRet )
            {
                if (pUsimTafMsg->usEfLen< 10 )
                {
                    MMA_MEM_CPY(TAF_SDC_GetSimImsi(), pUsimTafMsg->aucEf, pUsimTafMsg->usEfLen);

                    /* 检查是否锁卡 */
                    (VOS_VOID)MMA_CheckMePersonalisationStatus();
                }
            }
            break;
        case USIMM_USIM_EFPNN_ID:
        case USIMM_GSM_EFPNN_ID:
            TAF_MMA_ReadPnnFileCnf(pUsimTafMsg, enFileID);
            break;

        case USIMM_USIM_EFOPL_ID:
        case USIMM_GSM_EFOPL_ID:
            TAF_MMA_ReadOplFileCnf(pUsimTafMsg, enFileID);

            break;

        case USIMM_USIM_EFSPDI_ID:
        case USIMM_GSM_EFSPDI_ID:
            TAF_MMA_ReadSpdiFileCnf(pUsimTafMsg, enFileID);

            break;


        case USIMM_USIM_EFAD_ID:
        case USIMM_GSM_EFAD_ID:
            TAF_MMA_GetUsimHplmnMncLenFileInd(pUsimTafMsg);
            break;

        case USIMM_GSM_EFCSP_ID:
            TAF_MMA_RcvCustomerServiceProfileFile(pUsimTafMsg->stCmdResult.ulResult,
                                                  pUsimTafMsg->usEfLen,
                                                  pUsimTafMsg->aucEf);
            break;

 #if (FEATURE_ON == FEATURE_UE_MODE_CDMA)
        case USIMM_CSIM_EFRUIMID_ID:
        case USIMM_CDMA_EFRUIMID_ID:
            TAF_MMA_RcvUsimmReadRuimidFile(pUsimTafMsg);
            break;
#endif

        case USIMM_USIM_EFEHPLMN_ID:
            TAF_MMA_GetUsimEHplmnFileInd(pUsimTafMsg);
            break;

        case USIMM_ATTGSM_EFACTINGHPLMN_ID:
            TAF_MMA_GetSimActingHplmnFileInd(pUsimTafMsg);
            break;

        default:
            MMA_WARNINGLOG("TAf_MMA_UsimGetFileRspMsgProc():WARNING:UNKNOW EFID RECEIVE!");
            break;
    }

    if (TAF_MMA_READ_USIM_FILE_FLG_NULL == TAF_MMA_GetWaitSimFilesCnfFlg())
    {
        TAF_MMA_StopTimer(TI_TAF_MMA_WAIT_READ_SIM_FILES);
    }

    return VOS_TRUE;
}
VOS_VOID TAF_MMA_ReadForbBandNvim(VOS_VOID)
{
    VOS_UINT32                          ulLen;
    NAS_MMA_NVIM_FORBAND_STRU           stForband;
    VOS_UINT8                           ucOffSet;


    ulLen = 0;
    PS_MEM_SET(&stForband, 0x00, sizeof(stForband));

    NV_GetLength(en_NV_Item_Forbidden_Band, &ulLen);

    if (ulLen > MMA_FORB_BAND_NV_MAX_SIZE)
    {
        return;
    }

    PS_MEM_SET(&stForband, 0, ulLen);

    if (NV_OK != NV_Read(en_NV_Item_Forbidden_Band,&stForband, ulLen))
    {
        MMA_WARNINGLOG("MMA_GetForbBandFromNV():WARNING: en_NV_Item_Forbbiden_Band Error");
        return;
    }

    /*
    gstMmaForbBand定义与NV中的值不一致,需要按下述字节进行转换
    VOS_UINT8    ucActiveFlag  - NV项第1个字节
    VOS_UINT8    ucForbStatus  - NV项第2个字节
    TAF_UINT32   ulBandLow     - NV项第3-6个字节
    TAF_UINT32   ulBandHigh    - NV项第7-10个字节
    */
    ucOffSet = 0;
    /*lint -e961*/
    gstMmaForbBand.ucActiveFlag = stForband.aucForband[ucOffSet++];
    /*lint +e961*/

    if (NV_ITEM_DEACTIVE == gstMmaForbBand.ucActiveFlag)
    {
        return;
    }
    /*lint -e961*/
    gstMmaForbBand.ucForbStatus = stForband.aucForband[ucOffSet++];
    /*lint +e961*/

    PS_MEM_CPY(&(gstMmaForbBand.stForbBand.ulBandLow),stForband.aucForband+ucOffSet,
                                sizeof(gstMmaForbBand.stForbBand.ulBandLow));

    ucOffSet += sizeof(gstMmaForbBand.stForbBand.ulBandLow);

    PS_MEM_CPY(&(gstMmaForbBand.stForbBand.ulBandHigh),stForband.aucForband+ucOffSet,
                                sizeof(gstMmaForbBand.stForbBand.ulBandHigh));


    if ( (0 != gstMmaForbBand.stForbBand.ulBandHigh)
      || (TAF_PH_BAND_ANY != gstMmaForbBand.stForbBand.ulBandLow))
    {
        gstMmaForbBand.ulForbBand = gstMmaForbBand.stForbBand.ulBandHigh |
            (gstMmaForbBand.stForbBand.ulBandLow & ~TAF_PH_BAND_NEED_CHANGE_TO_64BIT);
    }
    else
    {
        gstMmaForbBand.ulForbBand = gstMmaForbBand.stForbBand.ulBandLow;
    }

    /* 容错处理 */
    if (TAF_PH_BAND_ANY == gstMmaForbBand.ulForbBand)
    {
        gstMmaForbBand.ulForbBand = 0;
    }

    return;
}
VOS_UINT32 TAF_MMA_ReadAlphanumericNameByPlmnIdNvim( TAF_PH_OPERATOR_NAME_STRU   *pstOperName)
{
    VOS_UINT16                          usI;
    NAS_MMA_NVIM_OPERATOR_NAME_STRU     stRcvData;
    TAF_PH_OPERATOR_NAME_STRU           austOperName[TAF_PH_STORED_OPER_NAME_NUM_IN_NVIM];
    VOS_UINT16                          usDataLen;
    VOS_UINT32                          ulNvLen;


    PS_MEM_SET(&stRcvData,   0x00, sizeof(stRcvData));
    PS_MEM_SET(austOperName, 0x00, sizeof(austOperName));

    usDataLen = (TAF_PH_STORED_OPER_NAME_NUM_IN_NVIM*sizeof( TAF_PH_OPERATOR_NAME_STRU )) + 4;

    NV_GetLength(en_NV_Item_HUAWEI_NW_OPL_NAME_CUSTOMIZED, &ulNvLen);

    if ( ulNvLen < usDataLen)
    {
        return MMA_FAILURE;
    }

    if (NV_OK !=  NV_Read(en_NV_Item_HUAWEI_NW_OPL_NAME_CUSTOMIZED,(VOS_VOID *)(&stRcvData),  ulNvLen))
    {
        pstOperName->aucOperatorNameLong[0]  = '\0';
        pstOperName->aucOperatorNameShort[0] = '\0';
        MMA_WARNINGLOG("MMA_PhoneGetAlphanumericNameByPlmnIdFromNV():WARNING:Reading PLMN failed!");
        return MMA_FAILURE;
    }

    if( NV_ITEM_DEACTIVE == stRcvData.aucRcvData[0])
    {
        return MMA_FAILURE;
    }

    /*Compare the specified PLMN ID with that one in NVIM*/
    for ( usI = 0; usI < TAF_PH_STORED_OPER_NAME_NUM_IN_NVIM; usI++ )
    {
        MMA_MEM_CPY((VOS_VOID *)(&austOperName[usI]),
                    (VOS_VOID *)(stRcvData.aucRcvData + 4 +(usI*NV_ITEM_MMA_OPERATORNAME_SIZE)),
                    NV_ITEM_MMA_OPERATORNAME_SIZE);

        MMA_INFOLOG1("MMA_PhoneGetAlphanumericNameByPlmnId():austOperName[usI].Mcc =",
            (VOS_INT32)austOperName[usI].PlmnId.Mcc);
        MMA_INFOLOG1("MMA_PhoneGetAlphanumericNameByPlmnId():austOperName[usI].Mnc =",
            (VOS_INT32)austOperName[usI].PlmnId.Mnc);
        MMA_INFOLOG(austOperName[usI].aucOperatorNameLong);
        MMA_INFOLOG(austOperName[usI].aucOperatorNameShort);

        if( (austOperName[usI].PlmnId.Mcc == (pstOperName->PlmnId.Mcc & 0xfff))
          &&(austOperName[usI].PlmnId.Mnc == (pstOperName->PlmnId.Mnc & 0xfff))
            )
        {
            MMA_MEM_CPY(pstOperName->aucOperatorNameLong,
                austOperName[usI].aucOperatorNameLong, (TAF_PH_OPER_NAME_LONG ));
            MMA_MEM_CPY(pstOperName->aucOperatorNameShort,
                austOperName[usI].aucOperatorNameShort, (TAF_PH_OPER_NAME_SHORT));
            MMA_NORMAILLOG("MMA_PhoneGetAlphanumericNameByPlmnIdFromNV():the specified PLMN found in NVIM!");
            return MMA_SUCCESS;
        }
    }

    MMA_NORMAILLOG("MMA_PhoneGetAlphanumericNameByPlmnIdFromNV():the specified PLMN not found in NVIM!");
    pstOperName->aucOperatorNameLong[0]  = '\0';
    pstOperName->aucOperatorNameShort[0] = '\0';

    return MMA_FAILURE;
}
VOS_VOID TAF_MMA_UsimRefreshIndFileListChangedMsgProc(USIMM_STKREFRESH_IND_STRU *pUsimTafMsg)
{
    VOS_UINT16                          usEfId;
    VOS_UINT32                          ulEfLen;
    VOS_UINT8                          *pucEf;
    VOS_UINT32                          ulResult;
    VOS_UINT16                          i;
    NAS_USIMM_GETFILE_INFO_STRU         stGetFileInfo;
    VOS_UINT8                          *pucOldImsi;
    VOS_UINT8                           aucNewImsi[TAF_SDC_MAX_IMSI_LEN];
#if (FEATURE_ON == FEATURE_UE_MODE_CDMA)
    VOS_UINT8                           aucIMSIM[NAS_MAX_IMSIM_DATA_LEN];

    PS_MEM_SET(aucIMSIM, 0x00, sizeof(aucIMSIM));
#endif

    PS_MEM_SET(&stGetFileInfo, 0x00, sizeof(stGetFileInfo));


    pucEf = VOS_NULL_PTR;

    usEfId    = USIMM_DEF_FILEID_BUTT;
    ulEfLen   = 0;

    /*依次读取上报的refresh文件*/
    for (i = 0; i < pUsimTafMsg->usEfNum; i++)
    {
        usEfId = pUsimTafMsg->astEfId[i].usFileId;

        switch (usEfId)
        {
            case USIMM_USIM_EFSPN_ID:
            case USIMM_GSM_EFSPN_ID:
                TAF_MMA_ReadSpnFile();

                break;

            case USIMM_USIM_EFSPDI_ID:
            case USIMM_GSM_EFSPDI_ID:
                TAF_MMA_ReadSpdiFile();

                break;

            case USIMM_USIM_EFPNN_ID:
            case USIMM_GSM_EFPNN_ID:
                TAF_MMA_ReadPnnFile();

                break;

            case USIMM_USIM_EFOPL_ID:
            case USIMM_GSM_EFOPL_ID:
                TAF_MMA_ReadOplFile();

                break;


#if (FEATURE_ON == FEATURE_ECALL)
            case USIMM_USIM_EFUST_ID:
            case USIMM_GSM_EFSST_ID:
            case USIMM_USIM_EFEST_ID:
                (VOS_VOID)TAF_MMA_ProcPihUsimRefreshIndEfUstFileChanged_PreProc();
                break;
#endif

            /* 如果IMSI发生变更,发送卡状态发生变更,有业务启动定时器 */
            case USIMM_USIM_EFIMSI_ID:
            case USIMM_GSM_EFIMSI_ID:
                pucOldImsi      = TAF_SDC_GetLastSimImsi();
                PS_MEM_SET(aucNewImsi, 0, sizeof(aucNewImsi));
                if (USIMM_API_SUCCESS == USIMM_GetCardIMSI(aucNewImsi))
                {
                    if (0 != VOS_MemCmp(pucOldImsi, aucNewImsi, TAF_SDC_MAX_IMSI_LEN))
                    {
                        if (VOS_TRUE == TAF_SDC_GetCsEccExistFlg())
                        {
                            /* 存在CS业务,则启动定时器等待CS业务结束后关机 */
                            TAF_MMA_StartTimer(TI_TAF_MMA_WAIT_CS_SERVICE_DISCONN, TI_TAF_MMA_WAIT_CS_SERVICE_DISCONN_LEN);
                        }
                        else
                        {
                            TAF_MMA_SndInterUsimChangeInd();
                        }
                    }
                }
                break;
#if (FEATURE_ON == FEATURE_UE_MODE_CDMA)
            case USIMM_CSIM_EFEPRL_ID:
            case USIMM_CDMA_EFEPRL_ID:
            case USIMM_CDMA_EFPRL_ID:
            case USIMM_CSIM_EFPRL_ID:
                TAF_MMA_SndInterUsimChangeInd();
                break;
            case USIMM_CDMA_EFIMSIM_ID:
            case USIMM_CSIM_EFIMSIM_ID:
                pucOldImsi      = TAF_SDC_GetCsimImsi();
                PS_MEM_SET(aucNewImsi, 0x00, sizeof(aucNewImsi));
                if (USIMM_API_SUCCESS != USIMM_GetCdmaIMSIM(aucIMSIM))
                {
                    MMA_WARNINGLOG("USIMM_GetCdmaIMSIM:Get Imsim Failed");

                    break;
                }

                (VOS_VOID)TAF_SDC_ConvertCImsiBcdCode(aucIMSIM, aucNewImsi);

                if (0 != VOS_MemCmp(pucOldImsi, aucNewImsi, TAF_SDC_MAX_IMSI_LEN))
                {
                    PS_MEM_CPY(pucOldImsi, aucNewImsi, TAF_SDC_MAX_IMSI_LEN);

                    if (VOS_TRUE == TAF_SDC_GetCsEccExistFlg())
                    {
                        /* 存在CS业务,则启动定时器等待CS业务结束后关机 */
                        TAF_MMA_StartTimer(TI_TAF_MMA_WAIT_CS_SERVICE_DISCONN, TI_TAF_MMA_WAIT_CS_SERVICE_DISCONN_LEN);
                    }
                    else
                    {
                        TAF_MMA_SndInterUsimChangeInd();
                    }
                }
                break;
#endif
            default:
                ulResult = NAS_USIMMAPI_GetCachedFile(usEfId, &ulEfLen, &pucEf, pUsimTafMsg->astEfId[i].enAppType);

                if (USIMM_API_SUCCESS != ulResult)
                {
                    /*读当前文件失败,读取下一个文件*/
                    MMA_ERRORLOG("MMA_UsimRefreshFileIndMsgProc():ERROR:READ FILE FAIL!");
                    continue;
                }

                /* 增加可维可测 */
                TAF_MMA_SndOmGetCacheFile(usEfId, ulEfLen, pucEf);


                /*读取文件成功后,MMA内部做相应处理*/
                TAF_MMA_USIMRefreshFileProc(usEfId, (VOS_UINT16)ulEfLen, pucEf);

                break;
        }

    }

    return;
}
VOS_VOID TAF_MMA_InitOrigMeInfo( VOS_VOID )
{
    VOS_UINT32                          i;
    VOS_INT32                           lRslt;
    VOS_UINT32                          ulDataLen;
    VOS_CHAR                           *ucSoftDate = "2006/11/15";
    VOS_CHAR                           *ucSoftTime = "00:00:00";

    gstMmaValue.stMeInfo.ImeisV.ImeiMode                                 = TAF_PH_IMEIV_Mode;
    for ( i = 0; i < TAF_PH_IMEI_LEN; i++ )
    {
         gstMmaValue.stMeInfo.ImeisV.aucImei[i]                            = 0;
    }
    gstMmaValue.stMeInfo.ProductName.aucProductName[0]                          = '\0';
    gstMmaValue.stMeInfo.ModelId.aucModelId[0]                                  = '\0';
    gstMmaValue.stMeInfo.ReleaseDate.aucReleaseDate[0]                          = '\0';
    gstMmaValue.stMeInfo.ReleaseTime.aucReleaseTime[0]                          = '\0';
    gstMmaValue.stMeInfo.CompleteCapitiyList.aucCompleteCapilityList[0][0]      = '\0';
    gstMmaValue.stMeInfo.CompleteCapitiyList.aucCompleteCapilityList[1][0]      = '\0';
    gstMmaValue.stMeInfo.CompleteCapitiyList.aucCompleteCapilityList[2][0]      = '\0';
    gstMmaValue.stMeInfo.GsmCompleteCapitiyList.aucCompleteCapilityList[0][0]   = '\0';
    gstMmaValue.stMeInfo.GsmCompleteCapitiyList.aucCompleteCapilityList[1][0]   = '\0';
    gstMmaValue.stMeInfo.GsmCompleteCapitiyList.aucCompleteCapilityList[2][0]   = '\0';
    VOS_StrNCpy((VOS_CHAR *)( gstMmaValue.stMeInfo.SoftVersion.aucRevisionId), 0x00,
                         TAF_MAX_REVISION_ID_LEN+1);
    VOS_sprintf((VOS_CHAR *) gstMmaValue.stMeInfo.FmrId.aucMfrId, "huawei");

    /*获取发行日期*/
    ulDataLen = TAF_PH_RELEASEDATE_LEN + 1;
    VOS_StrNCpy( (VOS_CHAR *)(gstMmaValue.stMeInfo.ReleaseDate.aucReleaseDate),
                 ucSoftDate,
                 ulDataLen);

    /*获取发行时间*/
    ulDataLen = TAF_PH_RELEASETIME_LEN + 1;
    VOS_StrNCpy( (VOS_CHAR *)(gstMmaValue.stMeInfo.ReleaseTime.aucReleaseTime),
                 ucSoftTime,
                 ulDataLen);

    /*获取硬件模块名*/
    lRslt = DRV_MEM_VERCTRL((char *)(gstMmaValue.stMeInfo.ModelId.aucModelId),
                    TAF_MAX_MODEL_ID_LEN,
                    VER_PRODUCT_ID,
                    VERIONREADMODE);
    if(DRV_INTERFACE_RSLT_OK != lRslt)
    {
        MMA_WARNINGLOG("MMA_InitMeInfo():VER_PRODUCT_ID  Failed!");
    }

    /*获取软件版本号*/
    lRslt = DRV_MEM_VERCTRL((char *)(gstMmaValue.stMeInfo.SoftVersion.aucRevisionId),
                    TAF_MAX_REVISION_ID_LEN + 1,
                    VER_SOFTWARE,
                    VERIONREADMODE);
    if ( DRV_INTERFACE_RSLT_OK != lRslt )
    {
        MMA_WARNINGLOG("MMA_InitMeInfo():Read Software Version  Failed!");
    }

    gstMmaValue.ucCopsNotDisplaySpnFlg = MMA_FALSE;

    /* 默认全球运营商表有效  */
    gstMmaValue.ucNotDisplayLocalNetworkNameFlg = MMA_FALSE;

    PS_MEM_SET(&gstMmaStoredClientOPID,0x00,sizeof(gstMmaStoredClientOPID));

    MMA_RdWt_StordedClientOpID(MMA_STORED_CLIENT_OPID_OP_READ);


}
VOS_VOID TAF_MMA_InitOrigMeInfo( VOS_VOID )
{
    VOS_UINT32                          i;
    VOS_INT32                           lRslt;
    VOS_UINT32                          ulDataLen;
    VOS_CHAR                           *ucSoftDate = "2006/11/15";
    VOS_CHAR                           *ucSoftTime = "00:00:00";

    gstMmaValue.stMeInfo.ImeisV.ImeiMode                                 = TAF_PH_IMEIV_Mode;
    for ( i = 0; i < TAF_PH_IMEI_LEN; i++ )
    {
         gstMmaValue.stMeInfo.ImeisV.aucImei[i]                            = 0;
    }
    gstMmaValue.stMeInfo.ProductName.aucProductName[0]                          = '\0';
    gstMmaValue.stMeInfo.ModelId.aucModelId[0]                                  = '\0';
    gstMmaValue.stMeInfo.ReleaseDate.aucReleaseDate[0]                          = '\0';
    gstMmaValue.stMeInfo.ReleaseTime.aucReleaseTime[0]                          = '\0';
    gstMmaValue.stMeInfo.CompleteCapitiyList.aucCompleteCapilityList[0][0]      = '\0';
    gstMmaValue.stMeInfo.CompleteCapitiyList.aucCompleteCapilityList[1][0]      = '\0';
    gstMmaValue.stMeInfo.CompleteCapitiyList.aucCompleteCapilityList[2][0]      = '\0';
    gstMmaValue.stMeInfo.GsmCompleteCapitiyList.aucCompleteCapilityList[0][0]   = '\0';
    gstMmaValue.stMeInfo.GsmCompleteCapitiyList.aucCompleteCapilityList[1][0]   = '\0';
    gstMmaValue.stMeInfo.GsmCompleteCapitiyList.aucCompleteCapilityList[2][0]   = '\0';
    (VOS_VOID)VOS_StrNCpy((VOS_CHAR *)( gstMmaValue.stMeInfo.SoftVersion.aucRevisionId), 0x00,
                         TAF_MAX_REVISION_ID_LEN+1);
    (VOS_VOID)VOS_sprintf((VOS_CHAR *) gstMmaValue.stMeInfo.FmrId.aucMfrId, "huawei");

    /*获取发行日期*/
    ulDataLen = TAF_PH_RELEASEDATE_LEN + 1;
    (VOS_VOID)VOS_StrNCpy( (VOS_CHAR *)(gstMmaValue.stMeInfo.ReleaseDate.aucReleaseDate),
                 ucSoftDate,
                 ulDataLen);

    /*获取发行时间*/
    ulDataLen = TAF_PH_RELEASETIME_LEN + 1;
    (VOS_VOID)VOS_StrNCpy( (VOS_CHAR *)(gstMmaValue.stMeInfo.ReleaseTime.aucReleaseTime),
                 ucSoftTime,
                 ulDataLen);

    /*获取硬件模块名*/
    lRslt = mdrv_ver_memberctrl((VOS_INT8 *)(gstMmaValue.stMeInfo.ModelId.aucModelId),
                    TAF_MAX_MODEL_ID_LEN,
                    VER_PRODUCT_ID,
                    VERIONREADMODE);
    if(MDRV_OK != lRslt)
    {
        MMA_WARNINGLOG("MMA_InitMeInfo():VER_PRODUCT_ID  Failed!");
    }

    /*获取软件版本号*/
    lRslt = mdrv_ver_memberctrl((VOS_INT8 *)(gstMmaValue.stMeInfo.SoftVersion.aucRevisionId),
                    TAF_MAX_REVISION_ID_LEN + 1,
                    VER_SOFTWARE,
                    VERIONREADMODE);
    if ( MDRV_OK != lRslt )
    {
        MMA_WARNINGLOG("MMA_InitMeInfo():Read Software Version  Failed!");
    }


    /* 默认全球运营商表有效  */
    gstMmaValue.ucNotDisplayLocalNetworkNameFlg = VOS_FALSE;


}