Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 323f059d authored by Naveen Kalla's avatar Naveen Kalla
Browse files

Do not explicity disconnect Data during power down for 1x.

In 1x, if the data call is torn down before radio power off, modem will
have to send a data call release and change to initialization state followed
by idle state and send out power down registration. If the power off request is sent
to the modem during Initialization state after call release, there is a chance that
modem does not perform power down registration.

Instead if we directly initiate a power down, modem just sets a power down registration
bit in the release order. This change also optimizes the power down procedure in 1x by
letting the modem handle data call release during power down.

Change-Id: I0f083cc3b005ec1e64105350abb43d10583b0881
parent bd6abed3
Loading
Loading
Loading
Loading
+41 −20
Original line number Diff line number Diff line
@@ -553,26 +553,45 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {

    @Override
    protected void powerOffRadioSafely() {
        // clean data connection
        DataConnectionTracker dcTracker = phone.mDataConnection;

        Message msg = dcTracker.obtainMessage(DataConnectionTracker.EVENT_CLEAN_UP_CONNECTION);
        msg.arg1 = 1; // tearDown is true
        msg.obj = CDMAPhone.REASON_RADIO_TURNED_OFF;
        dcTracker.sendMessage(msg);

        synchronized (this) {
            if (networkType == ServiceState.RADIO_TECHNOLOGY_1xRTT) {
                /*
                 * In 1x CDMA , during radio power off modem will disconnect the
                 * data call and sends the power down registration message along
                 * with the data call release message to the network
                 */

                msg.arg1 = 0; // tearDown is false since modem does it anyway for 1X
                dcTracker.sendMessage(msg);

                Log.w(LOG_TAG, "Turn off the radio right away");
                hangupAndPowerOff();
            } else {
                if (!mPendingRadioPowerOffAfterDataOff) {
                    DataConnectionTracker.State currentState = dcTracker.getState();
                    if (currentState != DataConnectionTracker.State.CONNECTED
                            && currentState != DataConnectionTracker.State.DISCONNECTING
                            && currentState != DataConnectionTracker.State.INITING) {
                    if (DBG) log("Data disconnected, turn off radio right away.");

                        msg.arg1 = 0; // tearDown is false as it is not needed.
                        dcTracker.sendMessage(msg);

                        if (DBG)
                            log("Data disconnected, turn off radio right away.");
                        hangupAndPowerOff();
                }
                else if (sendEmptyMessageDelayed(EVENT_SET_RADIO_POWER_OFF, 30000)) {
                    } else {
                        // clean data connection
                        msg.arg1 = 1; // tearDown is true
                        dcTracker.sendMessage(msg);

                        if (sendEmptyMessageDelayed(EVENT_SET_RADIO_POWER_OFF, 30000)) {
                            if (DBG) {
                        log("Wait up to 30 sec for data to disconnect, then turn off radio.");
                                log("Wait upto 30s for data to disconnect, then turn off radio.");
                            }
                            mPendingRadioPowerOffAfterDataOff = true;
                        } else {
@@ -582,6 +601,8 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
                    }
                }
            }
        }
    }

    @Override
    protected void updateSpnDisplay() {