From 16206b179940182182a5f21be1baee7ef0f20c2d Mon Sep 17 00:00:00 2001 From: Naveen Kalla Date: Thu, 9 Sep 2010 13:38:22 -0700 Subject: [PATCH] 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 --- .../telephony/cdma/CdmaServiceStateTracker.java | 61 +++++++++++++++------- 1 file changed, 41 insertions(+), 20 deletions(-) mode change 100644 => 100755 telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java old mode 100644 new mode 100755 index 2cad6cc00a65..d2a4bd8db04d --- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java @@ -552,32 +552,53 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { } @Override - protected void powerOffRadioSafely(){ - // clean data connection + protected void powerOffRadioSafely() { 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 (!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."); - hangupAndPowerOff(); - } - else if (sendEmptyMessageDelayed(EVENT_SET_RADIO_POWER_OFF, 30000)) { - if (DBG) { - log("Wait up to 30 sec for data to disconnect, then turn off radio."); + 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) { + + 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 { + // clean data connection + msg.arg1 = 1; // tearDown is true + dcTracker.sendMessage(msg); + + if (sendEmptyMessageDelayed(EVENT_SET_RADIO_POWER_OFF, 30000)) { + if (DBG) { + log("Wait upto 30s for data to disconnect, then turn off radio."); + } + mPendingRadioPowerOffAfterDataOff = true; + } else { + Log.w(LOG_TAG, "Cannot send delayed Msg, turn off radio right away."); + hangupAndPowerOff(); + } } - mPendingRadioPowerOffAfterDataOff = true; - } else { - Log.w(LOG_TAG, "Cannot send delayed Msg, turn off radio right away."); - hangupAndPowerOff(); } } } -- 2.11.0