VOS_VOID TAF_CBA_ReadSpecificFileListRefreshFile(
    VOS_UINT16                          usFileId,
    NAS_USIMM_SERVICES_TYPE_ENUM_UINT32 ulUsimmService,
    PS_USIM_REFRESH_IND_STRU           *pstRefreshInd
)
{
    VOS_UINT32                          ulEfLen;
    VOS_UINT32                          ulResult;
    USIMM_APP_TYPE_ENUM_UINT32          enAppType;      /*APP类型*/
    VOS_UINT8                           ucFileExistFlg;
    VOS_UINT8                          *pucEf   = VOS_NULL_PTR;

    if (PS_USIM_SERVICE_NOT_AVAILIABLE != NAS_USIMMAPI_IsServiceAvailable(ulUsimmService))
    {
        if (VOS_TRUE == TAF_GetSpecificFileListRefreshFileInfo(usFileId, pstRefreshInd, &enAppType))
        {
            /* 读取 TAF_CBA_EF_CBMI_ID USIM文件 */
            ucFileExistFlg = VOS_TRUE;
            ulResult = NAS_USIMMAPI_GetCachedFile(usFileId, &ulEfLen, &pucEf, enAppType);
            if (USIMM_API_SUCCESS != ulResult)
            {
                ucFileExistFlg = VOS_FALSE;
            }
            TAF_CBA_ParseSpecUsimFileData(usFileId, ucFileExistFlg, pucEf, (VOS_UINT16)ulEfLen);
        }
    }

    return;
}
VOS_VOID TAF_CBA_ReadUsimFile(
    VOS_UINT16                          usFileId,
    NAS_USIMM_SERVICES_TYPE_ENUM_UINT32 ulUsimmService
)
{
    VOS_UINT32                          ulEfLen;
    VOS_UINT32                          ulResult;
    VOS_UINT8                           ucFileExistFlg;
    VOS_UINT8                          *pucEf   = VOS_NULL_PTR;

    if (PS_USIM_SERVICE_NOT_AVAILIABLE != NAS_USIMMAPI_IsServiceAvailable(ulUsimmService))
    {
        ucFileExistFlg = VOS_TRUE;
        ulResult = NAS_USIMMAPI_GetCachedFile(usFileId, &ulEfLen, &pucEf, USIMM_UNLIMIT_APP);
        if (USIMM_API_SUCCESS != ulResult)
        {
            ucFileExistFlg = VOS_FALSE;
        }

        TAF_CBA_ParseSpecUsimFileData(usFileId, ucFileExistFlg, pucEf, (VOS_UINT16)ulEfLen);

    }

    return;
}
VOS_VOID TAF_MMA_ReadSpdiFile(VOS_VOID)
{
    VOS_UINT32                          ulSpdiExistFlag;
    VOS_UINT8                           ucSimType;

    ucSimType = 0;

    /* 31102协议描述If service n°51 is "available", this file shall be present.*/
    ulSpdiExistFlag = NAS_USIMMAPI_IsServiceAvailable(NAS_USIM_SVR_SP_DISP_INFO);

    if (PS_USIM_SERVICE_AVAILIABLE != ulSpdiExistFlag)
    {
        return;
    }

    /* 读取文件,启动保护定时器 */
    (VOS_VOID)NAS_USIMMAPI_GetCardType(VOS_NULL_PTR, &ucSimType);

    (VOS_VOID)TAF_MMA_SendUsimFileReq(USIMM_GUTL_APP, USIMM_GSM_EFSPDI_ID);

    TAF_MMA_SetWaitSimFilesCnfFlg(TAF_MMA_READ_SIM_SPDI_FILE_ID_FLG);

    if (USIMM_CARD_USIM == ucSimType)
    {
        (VOS_VOID)TAF_MMA_SendUsimFileReq(USIMM_GUTL_APP, USIMM_USIM_EFSPDI_ID);
        TAF_MMA_SetWaitSimFilesCnfFlg(TAF_MMA_READ_USIM_SPDI_FILE_ID_FLG);
    }

    return;
}
VOS_VOID TAF_MMA_ReadPnnFile(VOS_VOID)
{
    VOS_UINT8                           ucSimType;
    VOS_UINT32                          ulPnnExistFlag;

    ucSimType      = 0;
    ulPnnExistFlag = NAS_USIMMAPI_IsServiceAvailable(NAS_USIM_SVR_PLMN_NTWRK_NAME);

    if (PS_USIM_SERVICE_AVAILIABLE != ulPnnExistFlag)
    {
        return;
    }

    (VOS_VOID)NAS_USIMMAPI_GetCardType(VOS_NULL_PTR, &ucSimType);

    (VOS_VOID)TAF_MMA_SendUsimFileReq(USIMM_GUTL_APP, USIMM_GSM_EFPNN_ID);

    TAF_MMA_SetWaitSimFilesCnfFlg(TAF_MMA_READ_SIM_PNN_FILE_ID_FLG);

    if (USIMM_CARD_USIM == ucSimType)
    {
        (VOS_VOID)TAF_MMA_SendUsimFileReq(USIMM_GUTL_APP, USIMM_USIM_EFPNN_ID);
        TAF_MMA_SetWaitSimFilesCnfFlg(TAF_MMA_READ_USIM_PNN_FILE_ID_FLG);
    }

    return;
}
VOS_VOID TAF_MMA_ReadSpnFile(VOS_VOID)
{
    VOS_UINT32                          ulSpnExistFlag;
    VOS_UINT8                           ucSimType;

    /* 从USIM中获取SPN文件,文件ID:0x6F46 */
    ulSpnExistFlag = NAS_USIMMAPI_IsServiceAvailable(NAS_USIM_SVR_SPN);

    ucSimType = 0;

    if (PS_USIM_SERVICE_AVAILIABLE == ulSpnExistFlag)
    {
        (VOS_VOID)NAS_USIMMAPI_GetCardType(VOS_NULL_PTR, &ucSimType);

        (VOS_VOID)TAF_MMA_SendUsimFileReq(USIMM_GUTL_APP, USIMM_GSM_EFSPN_ID);

        TAF_MMA_SetWaitSimFilesCnfFlg(TAF_MMA_READ_SIM_SPN_FILE_ID_FLG);

        if (USIMM_CARD_USIM == ucSimType)
        {
            (VOS_VOID)TAF_MMA_SendUsimFileReq(USIMM_GUTL_APP, USIMM_USIM_EFSPN_ID);
            TAF_MMA_SetWaitSimFilesCnfFlg(TAF_MMA_READ_USIM_SPN_FILE_ID_FLG);
        }
    }

}
VOS_UINT32 TAF_SPM_IsNeedCallControl(VOS_VOID)
{
    TAF_SPM_SERVICE_CTRL_CFG_INFO_STRU *pstServiceCtrlCfgInfo = VOS_NULL_PTR;

    pstServiceCtrlCfgInfo   = TAF_SPM_GetServiceCtrlCfgInfoAddr();

    /* ME没有启用CALL CONTROL检查功能,直接返回业务检查通过 */
    if (VOS_FALSE == pstServiceCtrlCfgInfo->ucSimCallCtrlSupportFlg)
    {
        return VOS_FALSE;
    }

    /*
    根据(U)SIM卡的CALL CONTROL状态确定是否发起CALL CONTROL检查
       0 去使能: 不做CALL CONTROL检查
       1 使能:   做CALL CONTROL检查
    如果是去使能状态,则退出;
    */
    if (VOS_TRUE != NAS_USIMMAPI_IsServiceAvailable(NAS_USIM_SVR_CALL_CONTROL))
    {

        return VOS_FALSE;
    }


    return VOS_TRUE;
}
VOS_VOID TAF_MMA_UpdateCallMode( VOS_VOID )
{
    VOS_UINT32                          ulFdnExistFlag;
    VOS_UINT32                          ulSdnExistFlag;
    VOS_UINT32                          ulEcallDataExistFlag;
    VOS_UINT32                          ulUsimFdnStatus;
    VOS_UINT32                          ulCsimFdnStatus;

    if (TAF_SDC_SIM_TYPE_USIM == TAF_SDC_GetSimType())
    {
        NAS_USIMMAPI_FdnQuery(&ulUsimFdnStatus, &ulCsimFdnStatus);

        ulEcallDataExistFlag = NAS_USIMMAPI_IsServiceAvailable(NAS_USIM_SVR_ECALL_DATA);
        ulFdnExistFlag       = NAS_USIMMAPI_IsServiceAvailable(NAS_USIM_SVR_FDN);

        /* 5.3.40.1 eCall Only support
            Requirement: Service n° 89 and Service n° 2 are "available" and FDN service is enabled in EFEST. */
        if ((VOS_TRUE                   == ulUsimFdnStatus)
         && (PS_USIM_SERVICE_AVAILIABLE == ulEcallDataExistFlag)
         && (PS_USIM_SERVICE_AVAILIABLE == ulFdnExistFlag))
        {
            TAF_SDC_SetCurCallMode(TAF_SDC_ECALL_ONLY);

            return;
        }

        ulSdnExistFlag = NAS_USIMMAPI_IsServiceAvailable(NAS_USIM_SVR_SDN);

        /* 5.3.40.2 eCall and Normal call support
           Requirement: Service n° 89 and Service n° 4 are "available". */
        if ((PS_USIM_SERVICE_AVAILIABLE == ulEcallDataExistFlag)
         && (PS_USIM_SERVICE_AVAILIABLE == ulSdnExistFlag))
        {
            TAF_SDC_SetCurCallMode(TAF_SDC_ECALL_AND_NORMAL_CALL);

            return;
        }
    }

    return;
}