summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNaveen Kalla <nkalla@codeaurora.org>2014-07-31 16:48:31 -0700
committerWink Saville <wink@google.com>2014-08-19 08:19:47 -0700
commita65a16a2e81b11762fd9e4233e1a212effcfee82 (patch)
tree2193567b4291928f6bf16db47487414ac9c64f56
parent6e5a42e6948b434815d12663eeb792600531fe08 (diff)
downloadandroid_hardware_ril-a65a16a2e81b11762fd9e4233e1a212effcfee82.tar.gz
android_hardware_ril-a65a16a2e81b11762fd9e4233e1a212effcfee82.tar.bz2
android_hardware_ril-a65a16a2e81b11762fd9e4233e1a212effcfee82.zip
Add RIL_REQUEST_SHUTDOWN to notify RIL that device is shutting down
When device is in airplane mode, SIM card and modem may be powered on. RIL can use RIL_REQUEST_SHUTDOWN to shutdown the modem and SIM card gracefully. Bug: 9773278 Change-Id: I6afa9e810cefc7855f7ae42e51f39cc51fa2aa6e
-rw-r--r--include/telephony/ril.h18
-rw-r--r--libril/ril.cpp1
-rw-r--r--libril/ril_commands.h1
-rw-r--r--reference-ril/reference-ril.c21
4 files changed, 41 insertions, 0 deletions
diff --git a/include/telephony/ril.h b/include/telephony/ril.h
index 1518d81..9f6163f 100644
--- a/include/telephony/ril.h
+++ b/include/telephony/ril.h
@@ -4069,6 +4069,24 @@ typedef struct {
* SUBSCRIPTION_NOT_AVAILABLE
*/
#define RIL_REQUEST_SET_DATA_PROFILE 128
+
+/**
+ * RIL_REQUEST_SHUTDOWN
+ *
+ * Device is shutting down. All further commands are ignored
+ * and RADIO_NOT_AVAILABLE must be returned.
+ *
+ * "data" is null
+ * "response" is NULL
+ *
+ * Valid errors:
+ * SUCCESS
+ * RADIO_NOT_AVAILABLE
+ * GENERIC_FAILURE
+ */
+#define RIL_REQUEST_SHUTDOWN 129
+
+
/***********************************************************************/
diff --git a/libril/ril.cpp b/libril/ril.cpp
index 4b3e1b8..feaf60f 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -4710,6 +4710,7 @@ requestToString(int request) {
case RIL_UNSOL_SRVCC_STATE_NOTIFY: return "UNSOL_SRVCC_STATE_NOTIFY";
case RIL_UNSOL_HARDWARE_CONFIG_CHANGED: return "HARDWARE_CONFIG_CHANGED";
case RIL_UNSOL_DC_RT_INFO_CHANGED: return "UNSOL_DC_RT_INFO_CHANGED";
+ case RIL_REQUEST_SHUTDOWN: return "SHUTDOWN";
default: return "<unknown request>";
}
}
diff --git a/libril/ril_commands.h b/libril/ril_commands.h
index 1d96abb..7c3af55 100644
--- a/libril/ril_commands.h
+++ b/libril/ril_commands.h
@@ -143,3 +143,4 @@
{RIL_REQUEST_GET_DC_RT_INFO, dispatchVoid, responseDcRtInfo},
{RIL_REQUEST_SET_DC_RT_INFO_RATE, dispatchInts, responseVoid},
{RIL_REQUEST_SET_DATA_PROFILE, dispatchDataProfile, responseVoid},
+ {RIL_REQUEST_SHUTDOWN, dispatchVoid, responseVoid},
diff --git a/reference-ril/reference-ril.c b/reference-ril/reference-ril.c
index 5d45cde..02e5d50 100644
--- a/reference-ril/reference-ril.c
+++ b/reference-ril/reference-ril.c
@@ -398,6 +398,23 @@ error:
RIL_onRequestComplete(t, RIL_E_GENERIC_FAILURE, NULL, 0);
}
+static void requestShutdown(RIL_Token t)
+{
+ int onOff;
+
+ int err;
+ ATResponse *p_response = NULL;
+
+ if (sState != RADIO_STATE_OFF) {
+ err = at_send_command("AT+CFUN=0", &p_response);
+ setRadioState(RADIO_STATE_UNAVAILABLE);
+ }
+
+ at_response_free(p_response);
+ RIL_onRequestComplete(t, RIL_E_SUCCESS, NULL, 0);
+ return;
+}
+
static void requestOrSendDataCallList(RIL_Token *t);
static void onDataCallListChanged(void *param __unused)
@@ -2308,6 +2325,10 @@ onRequest (int request, void *data, size_t datalen, RIL_Token t)
requestGetHardwareConfig(data, datalen, t);
break;
+ case RIL_REQUEST_SHUTDOWN:
+ requestShutdown(t);
+ break;
+
/* CDMA Specific Requests */
case RIL_REQUEST_BASEBAND_VERSION:
if (TECH_BIT(sMdmInfo) == MDM_CDMA) {