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
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 @@
* 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 @@
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 @@
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 @@
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) {