Add default impl for emergencyDial
Test: run vts on cuttlefish glinux; vts pass
Bug: 121345950
Change-Id: I462eb3ee699cf1d9fe9d97593f745be17b2978b9
diff --git a/guest/hals/ril/cuttlefish_ril.cpp b/guest/hals/ril/cuttlefish_ril.cpp
index dc16884..d5fe831 100644
--- a/guest/hals/ril/cuttlefish_ril.cpp
+++ b/guest/hals/ril/cuttlefish_ril.cpp
@@ -2320,7 +2320,7 @@
static void request_emergency_dial(int /*request*/, void* /*data*/, size_t /*datalen*/,
RIL_Token t) {
- ALOGV("Emergency dial - void");
+ ALOGV("Emergency dial");
gce_ril_env->OnRequestComplete(t, RIL_E_SUCCESS, NULL, 0);
return;
}
diff --git a/guest/hals/ril/libril/ril.h b/guest/hals/ril/libril/ril.h
index 07fa4f9..1d035cf 100644
--- a/guest/hals/ril/libril/ril.h
+++ b/guest/hals/ril/libril/ril.h
@@ -91,6 +91,7 @@
* RIL_REQUEST_STOP_NETWORK_SCAN
* RIL_UNSOL_NETWORK_SCAN_RESULT
* RIL_REQUEST_GET_MODEM_STACK_STATUS
+ * RIL_REQUEST_EMERGENCY_DIAL
*/
#define RIL_VERSION 12
#define LAST_IMPRECISE_RIL_VERSION 12 // Better self-documented name
@@ -6457,7 +6458,7 @@
* ABORTED
* INVALID_MODEM_STATE
*/
-#define RIL_REQUEST_EMERGENCY_DIAL 205
+#define RIL_REQUEST_EMERGENCY_DIAL 150
/***********************************************************************/
diff --git a/guest/hals/ril/libril/ril_commands.h b/guest/hals/ril/libril/ril_commands.h
index 1d59aa5..2411f3d 100644
--- a/guest/hals/ril/libril/ril_commands.h
+++ b/guest/hals/ril/libril/ril_commands.h
@@ -164,3 +164,4 @@
{RIL_REQUEST_GET_MODEM_STACK_STATUS, radio_1_4::getModemStackStatusResponse},
{RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE_BITMAP, radio_1_4::getPreferredNetworkTypeBitmapResponse},
{RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE_BITMAP, radio_1_4::setPreferredNetworkTypeBitmapResponse},
+ {RIL_REQUEST_EMERGENCY_DIAL, radio_1_4::emergencyDialResponse},
diff --git a/guest/hals/ril/libril/ril_service.cpp b/guest/hals/ril/libril/ril_service.cpp
index 6166c10..692c8cb 100755
--- a/guest/hals/ril/libril/ril_service.cpp
+++ b/guest/hals/ril/libril/ril_service.cpp
@@ -3236,7 +3236,7 @@
}
Return<void> RadioImpl_1_4::emergencyDial(int32_t serial,
- const ::android::hardware::radio::V1_0::Dial& /* dialInfo */,
+ const ::android::hardware::radio::V1_0::Dial& dialInfo,
hidl_bitfield<android::hardware::radio::V1_4::EmergencyServiceCategory> /* categories */,
const hidl_vec<hidl_string>& /* urns */,
::android::hardware::radio::V1_4::EmergencyCallRouting /* routing */,
@@ -3244,8 +3244,42 @@
#if VDBG
RLOGD("emergencyDial: serial %d", serial);
#endif
- // TODO actual implementation
- dispatchVoid(serial, mSlotId, RIL_REQUEST_EMERGENCY_DIAL);
+
+ RequestInfo *pRI = android::addRequestToList(serial, mSlotId, RIL_REQUEST_EMERGENCY_DIAL);
+ if (pRI == NULL) {
+ return Void();
+ }
+ RIL_Dial dial = {};
+ RIL_UUS_Info uusInfo = {};
+ int32_t sizeOfDial = sizeof(dial);
+
+ if (!copyHidlStringToRil(&dial.address, dialInfo.address, pRI)) {
+ return Void();
+ }
+ dial.clir = (int) dialInfo.clir;
+
+ if (dialInfo.uusInfo.size() != 0) {
+ uusInfo.uusType = (RIL_UUS_Type) dialInfo.uusInfo[0].uusType;
+ uusInfo.uusDcs = (RIL_UUS_DCS) dialInfo.uusInfo[0].uusDcs;
+
+ if (dialInfo.uusInfo[0].uusData.size() == 0) {
+ uusInfo.uusData = NULL;
+ uusInfo.uusLength = 0;
+ } else {
+ if (!copyHidlStringToRil(&uusInfo.uusData, dialInfo.uusInfo[0].uusData, pRI)) {
+ memsetAndFreeStrings(1, dial.address);
+ return Void();
+ }
+ uusInfo.uusLength = dialInfo.uusInfo[0].uusData.size();
+ }
+
+ dial.uusInfo = &uusInfo;
+ }
+
+ CALL_ONREQUEST(RIL_REQUEST_EMERGENCY_DIAL, &dial, sizeOfDial, pRI, mSlotId);
+
+ memsetAndFreeStrings(2, dial.address, uusInfo.uusData);
+
return Void();
}
@@ -7179,6 +7213,24 @@
return 0;
}
+int radio_1_4::emergencyDialResponse(int slotId, int responseType, int serial, RIL_Errno e,
+ void *response, size_t responseLen) {
+#if VDBG
+ RLOGD("emergencyDialResponse: serial %d", serial);
+#endif
+
+ if (radioService[slotId]->mRadioResponseV1_4 != NULL) {
+ RadioResponseInfo responseInfo = {};
+ populateResponseInfo(responseInfo, serial, responseType, e);
+ Return<void> retStatus
+ = radioService[slotId]->mRadioResponseV1_4->emergencyDialResponse(responseInfo);
+ radioService[slotId]->checkReturnStatus(retStatus);
+ } else {
+ RLOGE("emergencyDialResponse: radioService[%d]->mRadioResponseV1_4 == NULL", slotId);
+ }
+ return 0;
+}
+
void convertRilKeepaliveStatusToHal(const RIL_KeepaliveStatus *rilStatus,
V1_1::KeepaliveStatus& halStatus) {
halStatus.sessionHandle = rilStatus->sessionHandle;
diff --git a/guest/hals/ril/libril/ril_service.h b/guest/hals/ril/libril/ril_service.h
index 0b86fd9..973f138 100644
--- a/guest/hals/ril/libril/ril_service.h
+++ b/guest/hals/ril/libril/ril_service.h
@@ -753,6 +753,10 @@
int responseType, int serial, RIL_Errno e,
void *response, size_t responseLen);
+int emergencyDialResponse(int slotId,
+ int responseType, int serial, RIL_Errno e,
+ void *response, size_t responselen);
+
int carrierInfoForImsiEncryption(int slotId,
int responseType, int serial, RIL_Errno e,
void *response, size_t responseLen);