Add SIM Depersonalisation interface
Add cuttlefish to perform SIM depersonalisation
for all the supported Perso types.
Bug: 69389695
Change-Id: I4b02c93da91ebde93334bd61ef2b5ac5a969114b
diff --git a/guest/hals/ril/libril/ril.cpp b/guest/hals/ril/libril/ril.cpp
index 03d469a..f223263 100644
--- a/guest/hals/ril/libril/ril.cpp
+++ b/guest/hals/ril/libril/ril.cpp
@@ -1174,6 +1174,7 @@
case RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION: return "SET_CARRIER_INFO_IMSI_ENCRYPTION";
case RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA_1_5: return "SET_SIGNAL_STRENGTH_REPORTING_CRITERIA_1_5";
case RIL_REQUEST_SET_RADIO_POWER_1_5: return "SET_RADIO_POWER_1_5";
+ case RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION: return "ENTER_SIM_DEPERSONALIZATION";
case RIL_RESPONSE_ACKNOWLEDGEMENT: return "RESPONSE_ACKNOWLEDGEMENT";
case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
diff --git a/guest/hals/ril/libril/ril.h b/guest/hals/ril/libril/ril.h
index 32d5aa0..5ed022c 100644
--- a/guest/hals/ril/libril/ril.h
+++ b/guest/hals/ril/libril/ril.h
@@ -6725,6 +6725,34 @@
*/
#define RIL_REQUEST_SET_RADIO_POWER_1_5 160
+
+/**
+ * RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION
+ *
+ * Requests that sim personlization be deactivated
+ *
+ * "data" is const char **
+ * ((const char **)(data))[0]] is sim depersonlization code
+ *
+ * "response" is int *
+ * ((int *)response)[0] is the number of retries remaining,
+ * or -1 if number of retries are infinite.
+ *
+ * Valid errors:
+ *
+ * SUCCESS
+ * RADIO_NOT_AVAILABLE (radio resetting)
+ * PASSWORD_INCORRECT
+ * SIM_ABSENT (code is invalid)
+ * INTERNAL_ERR
+ * NO_MEMORY
+ * NO_RESOURCES
+ * CANCELLED
+ * REQUEST_NOT_SUPPORTED
+ */
+
+#define RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION 161
+
/***********************************************************************/
/**
diff --git a/guest/hals/ril/libril/ril_commands.h b/guest/hals/ril/libril/ril_commands.h
index 6cf94ba..1931592 100644
--- a/guest/hals/ril/libril/ril_commands.h
+++ b/guest/hals/ril/libril/ril_commands.h
@@ -175,3 +175,4 @@
{RIL_REQUEST_SET_SYSTEM_SELECTION_CHANNELS_1_5, radio_1_5::setSystemSelectionChannelsResponse_1_5},
{RIL_REQUEST_START_NETWORK_SCAN_1_5, radio_1_5::startNetworkScanResponse_1_5},
{RIL_REQUEST_SET_RADIO_POWER_1_5, radio_1_5::setRadioPowerResponse_1_5},
+ {RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION, radio_1_5::supplySimDepersonalizationResponse},
diff --git a/guest/hals/ril/libril/ril_service.cpp b/guest/hals/ril/libril/ril_service.cpp
old mode 100755
new mode 100644
index 7349845..7504d41
--- a/guest/hals/ril/libril/ril_service.cpp
+++ b/guest/hals/ril/libril/ril_service.cpp
@@ -170,6 +170,10 @@
Return<void> supplyNetworkDepersonalization(int32_t serial, const hidl_string& netPin);
+ Return<void> supplySimDepersonalization(int32_t serial,
+ ::android::hardware::radio::V1_5::PersoSubstate persoType,
+ const hidl_string& controlKey);
+
Return<void> getCurrentCalls(int32_t serial);
Return<void> dial(int32_t serial, const Dial& dialInfo);
@@ -1033,6 +1037,17 @@
return Void();
}
+Return<void> RadioImpl_1_5::supplySimDepersonalization(int32_t serial,
+ ::android::hardware::radio::V1_5::PersoSubstate persoType,
+ const hidl_string& controlKey) {
+#if VDBG
+ RLOGD("supplySimDepersonalization: serial %d", serial);
+#endif
+ dispatchStrings(serial, mSlotId, RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION, true,
+ 1, controlKey.c_str());
+ return Void();
+}
+
Return<void> RadioImpl_1_5::getCurrentCalls(int32_t serial) {
#if VDBG
RLOGD("getCurrentCalls: serial %d", serial);
@@ -4112,6 +4127,37 @@
return 0;
}
+int radio_1_5::supplySimDepersonalizationResponse(int slotId,
+ int responseType, int serial, RIL_Errno e,
+ void *response, size_t responseLen) {
+#if VDBG
+ RLOGD("supplySimDepersonalizationResponse: serial %d", serial);
+#endif
+
+ if (radioService[slotId]->mRadioResponseV1_5 != NULL) {
+ RadioResponseInfo responseInfo = {};
+ int persoType = -1, remainingRetries = -1;
+ int numInts = responseLen / sizeof(int);
+ if (response == NULL || numInts != 2) {
+ RLOGE("getClirResponse Invalid response: NULL");
+ if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
+ } else {
+ int *pInt = (int *) response;
+ persoType = pInt[0];
+ remainingRetries = pInt[1];
+ }
+ Return<void> retStatus = radioService[slotId]->mRadioResponseV1_5->
+ supplySimDepersonalizationResponse(responseInfo, (::android::hardware::radio::V1_5::PersoSubstate) persoType,
+ remainingRetries);
+ radioService[slotId]->checkReturnStatus(retStatus);
+ } else {
+ RLOGE("supplySimDepersonalizationResponse: radioService[%d]->mRadioResponseV1_5 == "
+ "NULL", slotId);
+ }
+
+ return 0;
+}
+
int radio_1_5::getCurrentCallsResponse(int slotId,
int responseType, int serial, RIL_Errno e,
void *response, size_t responseLen) {
diff --git a/guest/hals/ril/libril/ril_service.h b/guest/hals/ril/libril/ril_service.h
index 7807004..ad3f983 100644
--- a/guest/hals/ril/libril/ril_service.h
+++ b/guest/hals/ril/libril/ril_service.h
@@ -54,6 +54,10 @@
int responseType, int serial, RIL_Errno e,
void *response, size_t responselen);
+int supplySimDepersonalizationResponse(int slotId,
+ int responseType, int serial, RIL_Errno e,
+ void *response, size_t responselen);
+
int getCurrentCallsResponse(int slotId,
int responseType, int serial, RIL_Errno e, void *response,
size_t responselen);