Add APN type XCAP
Update DataProfileInfo to use new types
Test: build
Bug: 73792201
Change-Id: Idd5dfd9d2756d489651df24617a0feb6a29d19c3
diff --git a/guest/hals/ril/cuttlefish_ril.cpp b/guest/hals/ril/cuttlefish_ril.cpp
index 47cb5c5..b3346c5 100644
--- a/guest/hals/ril/cuttlefish_ril.cpp
+++ b/guest/hals/ril/cuttlefish_ril.cpp
@@ -2276,7 +2276,7 @@
return;
}
-// New functions after Q
+// New functions after Q.
static void request_set_signal_strength_reporting_criteria_1_5(int /*request*/, void* /*data*/,
size_t /*datalen*/, RIL_Token t) {
ALOGV("request_set_signal_strength_reporting_criteria_1_5 - void");
diff --git a/guest/hals/ril/libril/ril.h b/guest/hals/ril/libril/ril.h
index 80394ea..8b837fc 100644
--- a/guest/hals/ril/libril/ril.h
+++ b/guest/hals/ril/libril/ril.h
@@ -2041,6 +2041,8 @@
RIL_APN_TYPE_EMERGENCY = 0x200, // APN type for Emergency PDN. This is not an IA apn,
// but is used for access to carrier services in an
// emergency call situation.
+ RIL_APN_TYPE_MCX = 0x400, // APN type for Mission Critical Service
+ RIL_APN_TYPE_XCAP = 0x800, // APN type for XCAP
RIL_APN_TYPE_ALL = 0xFFFFFFFF // All APN types
} RIL_ApnTypes;
diff --git a/guest/hals/ril/libril/ril_service.cpp b/guest/hals/ril/libril/ril_service.cpp
index b7b02a6..62f7ea5 100755
--- a/guest/hals/ril/libril/ril_service.cpp
+++ b/guest/hals/ril/libril/ril_service.cpp
@@ -542,6 +542,15 @@
const hidl_vec<::android::hardware::radio::V1_5::RadioAccessSpecifier>& specifiers);
Return<void> startNetworkScan_1_5(int32_t serial,
const ::android::hardware::radio::V1_5::NetworkScanRequest& request);
+ Return<void> setupDataCall_1_5(int32_t serial,
+ ::android::hardware::radio::V1_5::AccessNetwork accessNetwork,
+ const ::android::hardware::radio::V1_5::DataProfileInfo& dataProfileInfo,
+ bool roamingAllowed, ::android::hardware::radio::V1_2::DataRequestReason reason,
+ const hidl_vec<hidl_string>& addresses, const hidl_vec<hidl_string>& dnses);
+ Return<void> setInitialAttachApn_1_5(int32_t serial,
+ const ::android::hardware::radio::V1_5::DataProfileInfo& dataProfileInfo);
+ Return<void> setDataProfile_1_5(int32_t serial,
+ const hidl_vec<::android::hardware::radio::V1_5::DataProfileInfo>& profiles);
};
struct OemHookImpl : public IOemHook {
@@ -3580,7 +3589,7 @@
return Void();
}
-// Methods from ::android::hardware::radio::IRadio::V1_5 follow.
+// Methods from ::android::hardware::radio::V1_5::IRadio follow.
Return<void> RadioImpl_1_5::setSignalStrengthReportingCriteria_1_5(int32_t /* serial */,
const ::android::hardware::radio::V1_5::SignalThresholdInfo& /* signalThresholdInfo */,
const ::android::hardware::radio::V1_5::AccessNetwork /* accessNetwork */) {
@@ -3651,6 +3660,102 @@
return Void();
}
+Return<void> RadioImpl_1_5::setupDataCall_1_5(int32_t serial ,
+ ::android::hardware::radio::V1_5::AccessNetwork /* accessNetwork */,
+ const ::android::hardware::radio::V1_5::DataProfileInfo& dataProfileInfo,
+ bool roamingAllowed, ::android::hardware::radio::V1_2::DataRequestReason /* reason */,
+ const hidl_vec<hidl_string>& /* addresses */, const hidl_vec<hidl_string>& /* dnses */) {
+
+#if VDBG
+ RLOGD("setupDataCall_1_5: serial %d", serial);
+#endif
+
+ char *mvnoTypeStr = NULL;
+ if (!convertMvnoTypeToString(MvnoType::IMSI, mvnoTypeStr)) {
+ RequestInfo *pRI = android::addRequestToList(serial, mSlotId,
+ RIL_REQUEST_SETUP_DATA_CALL);
+ if (pRI != NULL) {
+ sendErrorResponse(pRI, RIL_E_INVALID_ARGUMENTS);
+ }
+ return Void();
+ }
+ dispatchStrings(serial, mSlotId, RIL_REQUEST_SETUP_DATA_CALL, true, 15,
+ std::to_string((int) RadioTechnology::UNKNOWN + 2).c_str(),
+ std::to_string((int) dataProfileInfo.base.profileId).c_str(),
+ dataProfileInfo.base.apn.c_str(),
+ dataProfileInfo.base.user.c_str(),
+ dataProfileInfo.base.password.c_str(),
+ std::to_string((int) dataProfileInfo.base.authType).c_str(),
+ getProtocolString(dataProfileInfo.base.protocol),
+ getProtocolString(dataProfileInfo.base.roamingProtocol),
+ std::to_string(dataProfileInfo.supportedApnTypesBitmap).c_str(),
+ std::to_string(dataProfileInfo.base.bearerBitmap).c_str(),
+ dataProfileInfo.base.persistent ? "1" : "0",
+ std::to_string(dataProfileInfo.base.mtu).c_str(),
+ mvnoTypeStr,
+ "302720x94",
+ roamingAllowed ? "1" : "0");
+ return Void();
+}
+
+Return<void> RadioImpl_1_5::setInitialAttachApn_1_5(int32_t serial ,
+ const ::android::hardware::radio::V1_5::DataProfileInfo& dataProfileInfo) {
+ RequestInfo *pRI = android::addRequestToList(serial, mSlotId,
+ RIL_REQUEST_SET_INITIAL_ATTACH_APN);
+ if (pRI == NULL) {
+ return Void();
+ }
+
+ RadioResponseInfo responseInfo = {};
+ populateResponseInfo(responseInfo, serial, RESPONSE_SOLICITED, RIL_E_SUCCESS);
+
+ if (radioService[mSlotId]->mRadioResponseV1_5 != NULL) {
+ Return<void> retStatus
+ = radioService[mSlotId]->mRadioResponseV1_5->setInitialAttachApnResponse(responseInfo);
+ } else if (radioService[mSlotId]->mRadioResponseV1_4 != NULL) {
+ Return<void> retStatus
+ = radioService[mSlotId]->mRadioResponseV1_4->setInitialAttachApnResponse(responseInfo);
+ radioService[mSlotId]->checkReturnStatus(retStatus);
+ } else if (radioService[mSlotId]->mRadioResponse != NULL) {
+ Return<void> retStatus
+ = radioService[mSlotId]->mRadioResponse->setInitialAttachApnResponse(responseInfo);
+ radioService[mSlotId]->checkReturnStatus(retStatus);
+ } else {
+ RLOGE("setInitialAttachApnResponse: radioService[%d]->mRadioResponse == NULL", mSlotId);
+ }
+
+ return Void();
+}
+
+Return<void> RadioImpl_1_5::setDataProfile_1_5(int32_t serial ,
+ const hidl_vec<::android::hardware::radio::V1_5::DataProfileInfo>& /* profiles */) {
+ RequestInfo *pRI = android::addRequestToList(serial, mSlotId,
+ RIL_REQUEST_SET_DATA_PROFILE);
+ if (pRI == NULL) {
+ return Void();
+ }
+
+ RadioResponseInfo responseInfo = {};
+ populateResponseInfo(responseInfo, serial, RESPONSE_SOLICITED, RIL_E_SUCCESS);
+
+ if (radioService[mSlotId]->mRadioResponseV1_5 != NULL) {
+ Return<void> retStatus
+ = radioService[mSlotId]->mRadioResponseV1_5->setDataProfileResponse(responseInfo);
+ } else if (radioService[mSlotId]->mRadioResponseV1_4 != NULL) {
+ Return<void> retStatus
+ = radioService[mSlotId]->mRadioResponseV1_4->setDataProfileResponse(responseInfo);
+ radioService[mSlotId]->checkReturnStatus(retStatus);
+ } else if (radioService[mSlotId]->mRadioResponse != NULL) {
+ Return<void> retStatus
+ = radioService[mSlotId]->mRadioResponse->setDataProfileResponse(responseInfo);
+ radioService[mSlotId]->checkReturnStatus(retStatus);
+ } else {
+ RLOGE("setDataProfileResponse: radioService[%d]->mRadioResponse == NULL", mSlotId);
+ }
+
+ return Void();
+}
+
// OEM hook methods:
Return<void> OemHookImpl::setResponseFunctions(
const ::android::sp<IOemHookResponse>& oemHookResponseParam,
@@ -4845,14 +4950,36 @@
#if VDBG
RLOGD("setupDataCallResponse: serial %d", serial);
#endif
-
- if (radioService[slotId]->mRadioResponseV1_4 != NULL) {
+ if (radioService[slotId]->mRadioResponseV1_5 != NULL) {
RadioResponseInfo responseInfo = {};
populateResponseInfo(responseInfo, serial, responseType, e);
::android::hardware::radio::V1_4::SetupDataCallResult result;
if (response == NULL || (responseLen % sizeof(RIL_Data_Call_Response_v11)) != 0) {
if (response != NULL) {
- RLOGE("setupDataCallResponse: Invalid response");
+ RLOGE("setupDataCallResponse_1_5: Invalid response");
+ if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
+ }
+ result.cause = ::android::hardware::radio::V1_4::DataCallFailCause::ERROR_UNSPECIFIED;
+ result.type = ::android::hardware::radio::V1_4::PdpProtocolType::UNKNOWN;
+ result.ifname = hidl_string();
+ result.addresses = hidl_vec<hidl_string>();
+ result.dnses = hidl_vec<hidl_string>();
+ result.gateways = hidl_vec<hidl_string>();
+ result.pcscf = hidl_vec<hidl_string>();
+ } else {
+ convertRilDataCallToHal((RIL_Data_Call_Response_v11 *) response, result);
+ }
+
+ Return<void> retStatus = radioService[slotId]->mRadioResponseV1_5->setupDataCallResponse_1_5(
+ responseInfo, result);
+ radioService[slotId]->checkReturnStatus(retStatus);
+ } else if (radioService[slotId]->mRadioResponseV1_4 != NULL) {
+ RadioResponseInfo responseInfo = {};
+ populateResponseInfo(responseInfo, serial, responseType, e);
+ ::android::hardware::radio::V1_4::SetupDataCallResult result;
+ if (response == NULL || (responseLen % sizeof(RIL_Data_Call_Response_v11)) != 0) {
+ if (response != NULL) {
+ RLOGE("setupDataCallResponse_1_4: Invalid response");
if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
}
result.cause = ::android::hardware::radio::V1_4::DataCallFailCause::ERROR_UNSPECIFIED;
@@ -6749,7 +6876,13 @@
RLOGD("setInitialAttachApnResponse: serial %d", serial);
#endif
- if (radioService[slotId]->mRadioResponse != NULL) {
+ if (radioService[slotId]->mRadioResponseV1_5 != NULL) {
+ RadioResponseInfo responseInfo = {};
+ populateResponseInfo(responseInfo, serial, responseType, e);
+ Return<void> retStatus
+ = radioService[slotId]->mRadioResponseV1_5->setInitialAttachApnResponse_1_5(
+ responseInfo);
+ } else if (radioService[slotId]->mRadioResponse != NULL) {
RadioResponseInfo responseInfo = {};
populateResponseInfo(responseInfo, serial, responseType, e);
Return<void> retStatus
@@ -7109,7 +7242,13 @@
RLOGD("setDataProfileResponse: serial %d", serial);
#endif
- if (radioService[slotId]->mRadioResponse != NULL) {
+ if (radioService[slotId]->mRadioResponseV1_5 != NULL) {
+ RadioResponseInfo responseInfo = {};
+ populateResponseInfo(responseInfo, serial, responseType, e);
+ Return<void> retStatus
+ = radioService[slotId]->mRadioResponseV1_5->setDataProfileResponse_1_5(
+ responseInfo);
+ } else if (radioService[slotId]->mRadioResponse != NULL) {
RadioResponseInfo responseInfo = {};
populateResponseInfo(responseInfo, serial, responseType, e);
Return<void> retStatus