DcActivatingState状态是在建立数据业务的时候,从状态DcInactiveState转换过来的,在DcActivatingState状态主要处理的事件有如下:

1.EVENT_SETUP_DATA_CONNECTION_DONE,此消息是在DcInactiveState申请建立数据业务的时候的回调消息,对这个消息的处理主要完成如下工作.

a.onSetupConnectionCompleted()完成建立数据业务后对modem返回的结果进行解析的过程.

假如(ar.exception != null) ,那么通过下面代码进行结果解析:

        if (ar.exception instanceof CommandException && ((CommandException) (ar.exception)).getCommandError()

                == CommandException.Error.RADIO_NOT_AVAILABLE) {

            result = DataCallResponse.SetupResult.ERR_BadCommand;

            result.mFailCause = DcFailCause.RADIO_NOT_AVAILABLE;

        } else if ((response == null) || (response.version > 4)) {

            result = DataCallResponse.SetupResult.ERR_GetLastErrorFromRil;

        } else {

            result = DataCallResponse.SetupResult.ERR_RilError;

            result.mFailCause = DcFailCause.fromInt(response.status);

        }

假如(ar.exception == null)但是if (response.status != 0)要对status的值用下面的方法进行解析.

        result = DataCallResponse.SetupResult.ERR_RilError;

        result.mFailCause = DcFailCause.fromInt(response.status);

对应的原因解析的文件是:\frameworks\opt\telephony\src\java\com\android\internal\telephony\dataconnection\DcFailCause.java

假如(ar.exception == null) 同时(response.status == 0),那么就会result = updateLinkProperty(response).setupResult;来对结果赋值,

在updateLinkProperty里面会对MTU,TCP buffer,proxy等属性进行设置.

b.假如经过上面a里面对result进行赋值后,这里将分别对不同的值进行处理:

if(SUCCESS) transitionTo(mActiveState);

if(ERR_BadCommand) transitionTo(mInactiveState); 不需要重试.

if(ERR_UnacceptableParameter) tearDownData(cp); transitionTo(mDisconnectingErrorCreatingConnection);不需要重试.在DcDisconnectionErrorCreatingConnection中会处理tearDownData(cp)返回的EVENT_DEACTIVATE_DONE事件进行处理.

if(ERR_GetLastErrorFromRil) 不需要重试.

if(ERR_RilError) 需要重试,重试的时间是modem层放回的,可以通过getSuggestedRetryDelay(ar)方法获得,同时调用cp.mApnContext.setModemSuggestedDelay(delay);设置重试的时间.在时间将在DcTracker的onDataSetupCompleteError里面用到,transitionTo(mInactiveState);切换到mInactiveState状态.

results matching ""

    No results matching ""