zoukankan      html  css  js  c++  java
  • [Android P][Network data][Notes1]DcTracker setDataProfile 判断APN modemCognitive and requestNetwork set mApnSetting

    一、setDataProfile(apn.modemCognitive->??aosp apn not invoke setDataProfilesAsNeeded??):
    DcTracker.setDataProfilesAsNeeded
        ->for (ApnSetting apn : mAllApnSettings) {
        ->if (apn.modemCognitive) {
        ->...->RIL.setDataProfile->RIL_REQUEST_SET_DATA_PROFILE->...->ril_service.cpp
    ->RadioImpl::setDataProfile->RIL_REQUEST_SET_DATA_PROFILE->...->reference-ril.c.onRequest->??

    Telephony.Carriers.MODEM_COGNITIVE:
            /**
             * Is the apn setting to be set in modem
             * <P>Type: INTEGER (boolean)</P>
             *@hide
             */
            public static final String MODEM_COGNITIVE = "modem_cognitive";

    (setModemCognitive:
    DevicePolicyManager.getOverrideApns->DevicePolicyManagerService.getOverrideApns
    ->getOverrideApnsUnchecked->ApnSetting.makeApnSetting->setModemCognitive)


    二、requestNetwork set mApnSetting(from APN_TYPE_DUN/mAllApnSettings):
    DcTracker.requestNetwork->...->trySetupData
        ->int radioTech = mPhone.getServiceState().getRilDataRadioTechnology();
        ->ArrayList<ApnSetting> waitingApns =
                            buildWaitingApns(apnContext.getApnType(), radioTech);
    ->...(APN_TYPE_DUN/mPreferredApn/mAllApnSettings(
            ->for (ApnSetting apn : mAllApnSettings) {
            ->if (apn.canHandleType(requestedApnType)) {
            ->ServiceState.bitmaskHasTech(apn.networkTypeBitmask,
                                ServiceState.rilRadioTechnologyToNetworkType(radioTech))))
        ->apnContext.setWaitingApns(waitingApns);->RetryManager.setWaitingApns->mWaitingApns
        ->setupData
            ->apnSetting = apnContext.getNextApnSetting();->RetryManager.getNextApnSetting->mWaitingApns.get
            ->apnContext.setApnSetting(apnSetting);->apnContext.mApnSetting

    mPreferredApn(from apnContext.getApnSetting):
    DcTracker.requestNetwork->...->setupData->EVENT_DATA_SETUP_COMPLETE->...->onDataSetupComplete
        ->ApnSetting apn = apnContext.getApnSetting();->ApnContext.mApnSetting
        ->mPreferredApn = apn;
        ->setPreferredApn(mPreferredApn.id)

    buildWaitingApns:
        /**
         * Build a list of APNs to be used to create PDP's.
        private ArrayList<ApnSetting> buildWaitingApns(String requestedApnType, int radioTech) {

    setupDataCall mApnSetting(from apnContext.getApnSetting):
    DataConnection.DcInactiveState.processMessage->EVENT_CONNECT
        ->initConnection->mApnSetting = apnContext.getApnSetting();->ApnContext.mApnSetting
        ->onConnect(ConnectionParams cp)
            ->DataProfile dp = DcTracker.createDataProfile(mApnSetting, cp.mProfileId);
            ->DataServiceManager.setupDataCall(dp)->...->RIL.setupDataCall(DataProfile dataProfile)
                ->// Convert to HAL data profile
                        DataProfileInfo dpi = convertToHalDataProfile(dataProfile);
                ->radioProxy.setupDataCall(rr.mSerial, dataRat, dpi,
                                        dataProfile.isModemCognitive())
                                        

    mRilDataRadioTechnology(getRilDataRadioTechnology):
    ServiceStateTracker.EVENT_POLL_STATE_GPRS
        ->NetworkRegistrationState networkRegState = (NetworkRegistrationState) ar.result;
        ->int newDataRat = ServiceState.networkTypeToRilRadioTechnology(
                            networkRegState.getAccessNetworkTechnology());->mAccessNetworkTechnology
        ->ServiceState.setRilDataRadioTechnology(newDataRat)->this.mRilDataRadioTechnology = newDataRat;<-getRilDataRadioTechnology

    NetworkRegistrationState.mAccessNetworkTechnology(from mCi):
    CellularNetworkService.getNetworkRegistrationState->mPhone.mCi.getDataRegistrationState->GET_PS_REGISTRATION_STATE_DONE
    ->...->getRegistrationStateFromResult->createRegistrationStateFromDataRegState(Object result)
        ->if (result instanceof android.hardware.radio.V1_0.DataRegStateResult) {
        ->android.hardware.radio.V1_0.DataRegStateResult dataRegState =
                            (android.hardware.radio.V1_0.DataRegStateResult) result;
        ->int accessNetworkTechnology = getAccessNetworkTechnologyFromRat(dataRegState.rat);->ServiceState.rilRadioTechnologyToNetworkType(rilRat)
        ->return new NetworkRegistrationState(transportType, domain, regState,
                            accessNetworkTechnology, reasonForDenial, emergencyOnly, availableServices,
                            cellIdentity, maxDataCalls);->mAccessNetworkTechnology = accessNetworkTechnology;
        ->...(V1_2)

    (ServiceStateTracker.pollState
        ->mRegStateManagers.get(AccessNetworkConstants.TransportType.WWAN)
                            .getNetworkRegistrationState(NetworkRegistrationState.DOMAIN_PS,
                            obtainMessage(EVENT_POLL_STATE_GPRS, mPollingContext));
    private final SparseArray<NetworkRegistrationManager> mRegStateManagers = new SparseArray<>();
    NetworkRegistrationManager)

    ServiceState
        public static int rilRadioTechnologyToNetworkType(@RilRadioTechnology int rt) {
            switch(rt) {
            case ServiceState.RIL_RADIO_TECHNOLOGY_GPRS:
                return TelephonyManager.NETWORK_TYPE_GPRS;
            case ServiceState.RIL_RADIO_TECHNOLOGY_EDGE:
                return TelephonyManager.NETWORK_TYPE_EDGE;
            case ServiceState.RIL_RADIO_TECHNOLOGY_UMTS:
                return TelephonyManager.NETWORK_TYPE_UMTS;
            case ServiceState.RIL_RADIO_TECHNOLOGY_HSDPA:
                return TelephonyManager.NETWORK_TYPE_HSDPA;
            case ServiceState.RIL_RADIO_TECHNOLOGY_HSUPA:
                return TelephonyManager.NETWORK_TYPE_HSUPA;
            case ServiceState.RIL_RADIO_TECHNOLOGY_HSPA:
                return TelephonyManager.NETWORK_TYPE_HSPA;
            case ServiceState.RIL_RADIO_TECHNOLOGY_IS95A:
            case ServiceState.RIL_RADIO_TECHNOLOGY_IS95B:
                return TelephonyManager.NETWORK_TYPE_CDMA;
            case ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT:
                return TelephonyManager.NETWORK_TYPE_1xRTT;
            case ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0:
                return TelephonyManager.NETWORK_TYPE_EVDO_0;
            case ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A:
                return TelephonyManager.NETWORK_TYPE_EVDO_A;
            case ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_B:
                return TelephonyManager.NETWORK_TYPE_EVDO_B;
            case ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD:
                return TelephonyManager.NETWORK_TYPE_EHRPD;
            case ServiceState.RIL_RADIO_TECHNOLOGY_LTE:
                return TelephonyManager.NETWORK_TYPE_LTE;
            case ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP:
                return TelephonyManager.NETWORK_TYPE_HSPAP;
            case ServiceState.RIL_RADIO_TECHNOLOGY_GSM:
                return TelephonyManager.NETWORK_TYPE_GSM;
            case ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA:
                return TelephonyManager.NETWORK_TYPE_TD_SCDMA;
            case ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN:
                return TelephonyManager.NETWORK_TYPE_IWLAN;
            case ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA:
                return TelephonyManager.NETWORK_TYPE_LTE_CA;
            default:
                return TelephonyManager.NETWORK_TYPE_UNKNOWN;
            }
        }

  • 相关阅读:
    《大数据之路:阿里巴巴大数据实践》——7-章 数据挖掘
    《如何做到毫秒级从百亿大表任意维度筛选数据?》
    《大数据之路:阿里巴巴大数据实践》——6-章 数据服务
    《【原创】推荐系统
    给机器学习面试者的十项建议 | 面试官角度
    干货 | NLP算法岗大厂面试经验与路线图分享
    目标检测任务中的训练宝典 |实用技巧
    食物图片变菜谱:这篇CVPR论文让人人都可以学习新料理
    一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)
    CVPR 2019细粒度图像分类竞赛中国团队DeepBlueAI获冠军 | 技术干货分享
  • 原文地址:https://www.cnblogs.com/sxjzhjj/p/12285849.html
Copyright © 2011-2022 走看看