diff --git a/biometrics/fingerprint/2.2/vts/functional/OWNERS b/biometrics/fingerprint/2.2/vts/functional/OWNERS
new file mode 100644
index 0000000..0014ce9
--- /dev/null
+++ b/biometrics/fingerprint/2.2/vts/functional/OWNERS
@@ -0,0 +1,2 @@
+# Bug component: 114777
+ilyamaty@google.com
diff --git a/neuralnetworks/1.0/vts/functional/OWNERS b/neuralnetworks/1.0/vts/functional/OWNERS
new file mode 100644
index 0000000..a48301d
--- /dev/null
+++ b/neuralnetworks/1.0/vts/functional/OWNERS
@@ -0,0 +1,4 @@
+# Bug component: 195575
+jeanluc@google.com
+miaowang@google.com
+pszczepaniak@google.com
diff --git a/neuralnetworks/1.1/vts/functional/OWNERS b/neuralnetworks/1.1/vts/functional/OWNERS
new file mode 100644
index 0000000..a48301d
--- /dev/null
+++ b/neuralnetworks/1.1/vts/functional/OWNERS
@@ -0,0 +1,4 @@
+# Bug component: 195575
+jeanluc@google.com
+miaowang@google.com
+pszczepaniak@google.com
diff --git a/neuralnetworks/1.2/vts/functional/OWNERS b/neuralnetworks/1.2/vts/functional/OWNERS
new file mode 100644
index 0000000..a48301d
--- /dev/null
+++ b/neuralnetworks/1.2/vts/functional/OWNERS
@@ -0,0 +1,4 @@
+# Bug component: 195575
+jeanluc@google.com
+miaowang@google.com
+pszczepaniak@google.com
diff --git a/neuralnetworks/1.3/vts/functional/OWNERS b/neuralnetworks/1.3/vts/functional/OWNERS
new file mode 100644
index 0000000..a48301d
--- /dev/null
+++ b/neuralnetworks/1.3/vts/functional/OWNERS
@@ -0,0 +1,4 @@
+# Bug component: 195575
+jeanluc@google.com
+miaowang@google.com
+pszczepaniak@google.com
diff --git a/radio/1.6/vts/functional/radio_hidl_hal_api.cpp b/radio/1.6/vts/functional/radio_hidl_hal_api.cpp
index efad72b..710616e 100644
--- a/radio/1.6/vts/functional/radio_hidl_hal_api.cpp
+++ b/radio/1.6/vts/functional/radio_hidl_hal_api.cpp
@@ -261,7 +261,7 @@
     msg.smscPdu = "";
     msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
 
-    radio_v1_6->sendSms(serial, msg);
+    radio_v1_6->sendSms_1_6(serial, msg);
 
     EXPECT_EQ(std::cv_status::no_timeout, wait());
     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
@@ -289,7 +289,7 @@
     msg.smscPdu = "";
     msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
 
-    radio_v1_6->sendSMSExpectMore(serial, msg);
+    radio_v1_6->sendSmsExpectMore_1_6(serial, msg);
 
     EXPECT_EQ(std::cv_status::no_timeout, wait());
     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
@@ -337,7 +337,7 @@
     cdmaSmsMessage.bearerData =
         (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-    radio_v1_6->sendCdmaSms(serial, cdmaSmsMessage);
+    radio_v1_6->sendCdmaSms_1_6(serial, cdmaSmsMessage);
 
     EXPECT_EQ(std::cv_status::no_timeout, wait());
     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
@@ -384,7 +384,7 @@
     cdmaSmsMessage.bearerData =
             (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-    radio_v1_6->sendCdmaSmsExpectMore(serial, cdmaSmsMessage);
+    radio_v1_6->sendCdmaSmsExpectMore_1_6(serial, cdmaSmsMessage);
 
     EXPECT_EQ(std::cv_status::no_timeout, wait());
     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
diff --git a/radio/aidl/Android.bp b/radio/aidl/Android.bp
index 29d7a58..998c8ea 100644
--- a/radio/aidl/Android.bp
+++ b/radio/aidl/Android.bp
@@ -21,7 +21,6 @@
 cc_library {
     name: "android.hardware.radio-translate-ndk",
     vendor_available: true,
-    srcs: ["android/hardware/radio/translate-ndk.cpp"],
     shared_libs: [
         "libbinder_ndk",
         "libhidlbase",
@@ -34,12 +33,10 @@
         "android.hardware.radio@1.5",
         "android.hardware.radio@1.6",
     ],
-    export_include_dirs: ["include"],
 }
 
 java_library {
     name: "android.hardware.radio-translate-java",
-    srcs: ["android/hardware/radio/Translate.java"],
     libs: [
         "android.hardware.radio-V1-java",
         "android.hardware.radio-V1.0-java",
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalTrafficDescriptor.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AccessTechnologySpecificInfo.aidl
similarity index 87%
rename from radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalTrafficDescriptor.aidl
rename to radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AccessTechnologySpecificInfo.aidl
index 6b57525..988f118 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalTrafficDescriptor.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AccessTechnologySpecificInfo.aidl
@@ -33,7 +33,10 @@
 
 package android.hardware.radio;
 @VintfStability
-union OptionalTrafficDescriptor {
+union AccessTechnologySpecificInfo {
   boolean noinit;
-  android.hardware.radio.TrafficDescriptor value;
+  android.hardware.radio.Cdma2000RegistrationInfo cdmaInfo;
+  android.hardware.radio.EutranRegistrationInfo eutranInfo;
+  android.hardware.radio.NrVopsInfo ngranNrVopsInfo;
+  boolean geranDtmSupported;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AddressProperty.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AddressProperty.aidl
deleted file mode 100644
index dd6e79a..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AddressProperty.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum AddressProperty {
-  NONE = 0,
-  DEPRECATED = 32,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppState.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppState.aidl
deleted file mode 100644
index 59e2bd4..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppState.aidl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum AppState {
-  UNKNOWN = 0,
-  DETECTED = 1,
-  PIN = 2,
-  PUK = 3,
-  SUBSCRIPTION_PERSO = 4,
-  READY = 5,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppStatus.aidl
index c9abe32..ea2cd3a 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppStatus.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppStatus.aidl
@@ -34,12 +34,24 @@
 package android.hardware.radio;
 @VintfStability
 parcelable AppStatus {
-  android.hardware.radio.AppType appType;
-  android.hardware.radio.AppState appState;
+  int appType;
+  int appState;
   android.hardware.radio.PersoSubstate persoSubstate;
   String aidPtr;
   String appLabelPtr;
-  int pin1Replaced;
+  boolean pin1Replaced;
   android.hardware.radio.PinState pin1;
   android.hardware.radio.PinState pin2;
+  const int APP_STATE_UNKNOWN = 0;
+  const int APP_STATE_DETECTED = 1;
+  const int APP_STATE_PIN = 2;
+  const int APP_STATE_PUK = 3;
+  const int APP_STATE_SUBSCRIPTION_PERSO = 4;
+  const int APP_STATE_READY = 5;
+  const int APP_TYPE_UNKNOWN = 0;
+  const int APP_TYPE_SIM = 1;
+  const int APP_TYPE_USIM = 2;
+  const int APP_TYPE_RUIM = 3;
+  const int APP_TYPE_CSIM = 4;
+  const int APP_TYPE_ISIM = 5;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppType.aidl
deleted file mode 100644
index adbbe9f..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AppType.aidl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum AppType {
-  UNKNOWN = 0,
-  SIM = 1,
-  USIM = 2,
-  RUIM = 3,
-  CSIM = 4,
-  ISIM = 5,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfo.aidl
index ac0b4aa..1623764 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfo.aidl
@@ -34,7 +34,52 @@
 package android.hardware.radio;
 @VintfStability
 parcelable BarringInfo {
-  android.hardware.radio.BarringInfoServiceType serviceType;
-  android.hardware.radio.BarringInfoBarringType barringType;
-  android.hardware.radio.BarringInfoBarringTypeSpecificInfo barringTypeSpecificInfo;
+  int serviceType;
+  int barringType;
+  @nullable android.hardware.radio.BarringTypeSpecificInfo barringTypeSpecificInfo;
+  const int BARRING_TYPE_NONE = 0;
+  const int BARRING_TYPE_CONDITIONAL = 1;
+  const int BARRING_TYPE_UNCONDITIONAL = 2;
+  const int SERVICE_TYPE_CS_SERVICE = 0;
+  const int SERVICE_TYPE_PS_SERVICE = 1;
+  const int SERVICE_TYPE_CS_VOICE = 2;
+  const int SERVICE_TYPE_MO_SIGNALLING = 3;
+  const int SERVICE_TYPE_MO_DATA = 4;
+  const int SERVICE_TYPE_CS_FALLBACK = 5;
+  const int SERVICE_TYPE_MMTEL_VOICE = 6;
+  const int SERVICE_TYPE_MMTEL_VIDEO = 7;
+  const int SERVICE_TYPE_EMERGENCY = 8;
+  const int SERVICE_TYPE_SMS = 9;
+  const int SERVICE_TYPE_OPERATOR_1 = 1001;
+  const int SERVICE_TYPE_OPERATOR_2 = 1002;
+  const int SERVICE_TYPE_OPERATOR_3 = 1003;
+  const int SERVICE_TYPE_OPERATOR_4 = 1004;
+  const int SERVICE_TYPE_OPERATOR_5 = 1005;
+  const int SERVICE_TYPE_OPERATOR_6 = 1006;
+  const int SERVICE_TYPE_OPERATOR_7 = 1007;
+  const int SERVICE_TYPE_OPERATOR_8 = 1008;
+  const int SERVICE_TYPE_OPERATOR_9 = 1009;
+  const int SERVICE_TYPE_OPERATOR_10 = 1010;
+  const int SERVICE_TYPE_OPERATOR_11 = 1011;
+  const int SERVICE_TYPE_OPERATOR_12 = 1012;
+  const int SERVICE_TYPE_OPERATOR_13 = 1013;
+  const int SERVICE_TYPE_OPERATOR_14 = 1014;
+  const int SERVICE_TYPE_OPERATOR_15 = 1015;
+  const int SERVICE_TYPE_OPERATOR_16 = 1016;
+  const int SERVICE_TYPE_OPERATOR_17 = 1017;
+  const int SERVICE_TYPE_OPERATOR_18 = 1018;
+  const int SERVICE_TYPE_OPERATOR_19 = 1019;
+  const int SERVICE_TYPE_OPERATOR_20 = 1020;
+  const int SERVICE_TYPE_OPERATOR_21 = 1021;
+  const int SERVICE_TYPE_OPERATOR_22 = 1022;
+  const int SERVICE_TYPE_OPERATOR_23 = 1023;
+  const int SERVICE_TYPE_OPERATOR_24 = 1024;
+  const int SERVICE_TYPE_OPERATOR_25 = 1025;
+  const int SERVICE_TYPE_OPERATOR_26 = 1026;
+  const int SERVICE_TYPE_OPERATOR_27 = 1027;
+  const int SERVICE_TYPE_OPERATOR_28 = 1028;
+  const int SERVICE_TYPE_OPERATOR_29 = 1029;
+  const int SERVICE_TYPE_OPERATOR_30 = 1030;
+  const int SERVICE_TYPE_OPERATOR_31 = 1031;
+  const int SERVICE_TYPE_OPERATOR_32 = 1032;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoBarringType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoBarringType.aidl
deleted file mode 100644
index 6b8006e..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoBarringType.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum BarringInfoBarringType {
-  NONE = 0,
-  CONDITIONAL = 1,
-  UNCONDITIONAL = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoBarringTypeSpecificInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoBarringTypeSpecificInfo.aidl
deleted file mode 100644
index c2ba1d2..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoBarringTypeSpecificInfo.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-union BarringInfoBarringTypeSpecificInfo {
-  boolean noinit;
-  android.hardware.radio.BarringInfoBarringTypeSpecificInfoConditional conditional;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoServiceType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoServiceType.aidl
deleted file mode 100644
index faea9b9..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoServiceType.aidl
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum BarringInfoServiceType {
-  CS_SERVICE = 0,
-  PS_SERVICE = 1,
-  CS_VOICE = 2,
-  MO_SIGNALLING = 3,
-  MO_DATA = 4,
-  CS_FALLBACK = 5,
-  MMTEL_VOICE = 6,
-  MMTEL_VIDEO = 7,
-  EMERGENCY = 8,
-  SMS = 9,
-  OPERATOR_1 = 1001,
-  OPERATOR_2 = 1002,
-  OPERATOR_3 = 1003,
-  OPERATOR_4 = 1004,
-  OPERATOR_5 = 1005,
-  OPERATOR_6 = 1006,
-  OPERATOR_7 = 1007,
-  OPERATOR_8 = 1008,
-  OPERATOR_9 = 1009,
-  OPERATOR_10 = 1010,
-  OPERATOR_11 = 1011,
-  OPERATOR_12 = 1012,
-  OPERATOR_13 = 1013,
-  OPERATOR_14 = 1014,
-  OPERATOR_15 = 1015,
-  OPERATOR_16 = 1016,
-  OPERATOR_17 = 1017,
-  OPERATOR_18 = 1018,
-  OPERATOR_19 = 1019,
-  OPERATOR_20 = 1020,
-  OPERATOR_21 = 1021,
-  OPERATOR_22 = 1022,
-  OPERATOR_23 = 1023,
-  OPERATOR_24 = 1024,
-  OPERATOR_25 = 1025,
-  OPERATOR_26 = 1026,
-  OPERATOR_27 = 1027,
-  OPERATOR_28 = 1028,
-  OPERATOR_29 = 1029,
-  OPERATOR_30 = 1030,
-  OPERATOR_31 = 1031,
-  OPERATOR_32 = 1032,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoBarringTypeSpecificInfoConditional.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringTypeSpecificInfo.aidl
similarity index 96%
rename from radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoBarringTypeSpecificInfoConditional.aidl
rename to radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringTypeSpecificInfo.aidl
index 8c079e2..98b46c9 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringInfoBarringTypeSpecificInfoConditional.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/BarringTypeSpecificInfo.aidl
@@ -33,7 +33,7 @@
 
 package android.hardware.radio;
 @VintfStability
-parcelable BarringInfoBarringTypeSpecificInfoConditional {
+parcelable BarringTypeSpecificInfo {
   int factor;
   int timeSeconds;
   boolean isBarred;
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Call.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Call.aidl
index 36e1ae3..b4a3cc7 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Call.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Call.aidl
@@ -34,7 +34,7 @@
 package android.hardware.radio;
 @VintfStability
 parcelable Call {
-  android.hardware.radio.CallState state;
+  int state;
   int index;
   int toa;
   boolean isMpty;
@@ -43,10 +43,20 @@
   boolean isVoice;
   boolean isVoicePrivacy;
   String number;
-  android.hardware.radio.CallPresentation numberPresentation;
+  int numberPresentation;
   String name;
-  android.hardware.radio.CallPresentation namePresentation;
+  int namePresentation;
   android.hardware.radio.UusInfo[] uusInfo;
   android.hardware.radio.AudioQuality audioQuality;
   String forwardedNumber;
+  const int PRESENTATION_ALLOWED = 0;
+  const int PRESENTATION_RESTRICTED = 1;
+  const int PRESENTATION_UNKNOWN = 2;
+  const int PRESENTATION_PAYPHONE = 3;
+  const int STATE_ACTIVE = 0;
+  const int STATE_HOLDING = 1;
+  const int STATE_DIALING = 2;
+  const int STATE_ALERTING = 3;
+  const int STATE_INCOMING = 4;
+  const int STATE_WAITING = 5;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallForwardInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallForwardInfo.aidl
index bcfa90f..0b79272 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallForwardInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallForwardInfo.aidl
@@ -34,10 +34,15 @@
 package android.hardware.radio;
 @VintfStability
 parcelable CallForwardInfo {
-  android.hardware.radio.CallForwardInfoStatus status;
+  int status;
   int reason;
   int serviceClass;
   int toa;
   String number;
   int timeSeconds;
+  const int STATUS_DISABLE = 0;
+  const int STATUS_ENABLE = 1;
+  const int STATUS_INTERROGATE = 2;
+  const int STATUS_REGISTRATION = 3;
+  const int STATUS_ERASURE = 4;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallForwardInfoStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallForwardInfoStatus.aidl
deleted file mode 100644
index 5ac129a..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallForwardInfoStatus.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CallForwardInfoStatus {
-  DISABLE = 0,
-  ENABLE = 1,
-  INTERROGATE = 2,
-  REGISTRATION = 3,
-  ERASURE = 4,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallPresentation.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallPresentation.aidl
deleted file mode 100644
index c32cd08..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallPresentation.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CallPresentation {
-  ALLOWED = 0,
-  RESTRICTED = 1,
-  UNKNOWN = 2,
-  PAYPHONE = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallState.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallState.aidl
deleted file mode 100644
index 375ca2c..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CallState.aidl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CallState {
-  ACTIVE = 0,
-  HOLDING = 1,
-  DIALING = 2,
-  ALERTING = 3,
-  INCOMING = 4,
-  WAITING = 5,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CardState.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CardState.aidl
deleted file mode 100644
index d200b97..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CardState.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CardState {
-  ABSENT = 0,
-  PRESENT = 1,
-  ERROR = 2,
-  RESTRICTED = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CardStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CardStatus.aidl
index e11bb21..e7a666f 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CardStatus.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CardStatus.aidl
@@ -34,7 +34,7 @@
 package android.hardware.radio;
 @VintfStability
 parcelable CardStatus {
-  android.hardware.radio.CardState cardState;
+  int cardState;
   android.hardware.radio.PinState universalPinState;
   int gsmUmtsSubscriptionAppIndex;
   int cdmaSubscriptionAppIndex;
@@ -44,4 +44,8 @@
   String atr;
   String iccid;
   String eid;
+  const int STATE_ABSENT = 0;
+  const int STATE_PRESENT = 1;
+  const int STATE_ERROR = 2;
+  const int STATE_RESTRICTED = 3;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Carrier.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Carrier.aidl
index bbf777f..46d5dca 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Carrier.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Carrier.aidl
@@ -36,6 +36,11 @@
 parcelable Carrier {
   String mcc;
   String mnc;
-  android.hardware.radio.CarrierMatchType matchType;
+  int matchType;
   String matchData;
+  const int MATCH_TYPE_ALL = 0;
+  const int MATCH_TYPE_SPN = 1;
+  const int MATCH_TYPE_IMSI_PREFIX = 2;
+  const int MATCH_TYPE_GID1 = 3;
+  const int MATCH_TYPE_GID2 = 4;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierMatchType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierMatchType.aidl
deleted file mode 100644
index c3596cd..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierMatchType.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CarrierMatchType {
-  ALL = 0,
-  SPN = 1,
-  IMSI_PREFIX = 2,
-  GID1 = 3,
-  GID2 = 4,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierRestrictions.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierRestrictions.aidl
index f8cafb5..f7c7a5a 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierRestrictions.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierRestrictions.aidl
@@ -36,4 +36,6 @@
 parcelable CarrierRestrictions {
   android.hardware.radio.Carrier[] allowedCarriers;
   android.hardware.radio.Carrier[] excludedCarriers;
+  boolean priority;
+  boolean allowedCarriersPrioritized;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierRestrictionsWithPriority.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierRestrictionsWithPriority.aidl
deleted file mode 100644
index 1f06980..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CarrierRestrictionsWithPriority.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-parcelable CarrierRestrictionsWithPriority {
-  android.hardware.radio.Carrier[] allowedCarriers;
-  android.hardware.radio.Carrier[] excludedCarriers;
-  boolean allowedCarriersPrioritized;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Cdma2000RegistrationInfo.aidl
similarity index 90%
rename from radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo.aidl
rename to radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Cdma2000RegistrationInfo.aidl
index a56a791..6e4d7b6 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Cdma2000RegistrationInfo.aidl
@@ -33,9 +33,12 @@
 
 package android.hardware.radio;
 @VintfStability
-parcelable RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo {
+parcelable Cdma2000RegistrationInfo {
   boolean cssSupported;
   int roamingIndicator;
-  android.hardware.radio.PrlIndicator systemIsInPrl;
+  int systemIsInPrl;
   int defaultRoamingIndicator;
+  const int PRL_INDICATOR_NOT_REGISTERED = -1;
+  const int PRL_INDICATOR_NOT_IN_PRL = 0;
+  const int PRL_INDICATOR_IN_PRL = 1;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaiting.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaiting.aidl
index 564433f..b486691 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaiting.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaiting.aidl
@@ -35,9 +35,23 @@
 @VintfStability
 parcelable CdmaCallWaiting {
   String number;
-  android.hardware.radio.CdmaCallWaitingNumberPresentation numberPresentation;
+  int numberPresentation;
   String name;
   android.hardware.radio.CdmaSignalInfoRecord signalInfoRecord;
-  android.hardware.radio.CdmaCallWaitingNumberType numberType;
-  android.hardware.radio.CdmaCallWaitingNumberPlan numberPlan;
+  int numberType;
+  int numberPlan;
+  const int NUMBER_PLAN_UNKNOWN = 0;
+  const int NUMBER_PLAN_ISDN = 1;
+  const int NUMBER_PLAN_DATA = 3;
+  const int NUMBER_PLAN_TELEX = 4;
+  const int NUMBER_PLAN_NATIONAL = 8;
+  const int NUMBER_PLAN_PRIVATE = 9;
+  const int NUMBER_PRESENTATION_ALLOWED = 0;
+  const int NUMBER_PRESENTATION_RESTRICTED = 1;
+  const int NUMBER_PRESENTATION_UNKNOWN = 2;
+  const int NUMBER_TYPE_UNKNOWN = 0;
+  const int NUMBER_TYPE_INTERNATIONAL = 1;
+  const int NUMBER_TYPE_NATIONAL = 2;
+  const int NUMBER_TYPE_NETWORK_SPECIFIC = 3;
+  const int NUMBER_TYPE_SUBSCRIBER = 4;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaitingNumberPlan.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaitingNumberPlan.aidl
deleted file mode 100644
index 6dcd594..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaitingNumberPlan.aidl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaCallWaitingNumberPlan {
-  UNKNOWN = 0,
-  ISDN = 1,
-  DATA = 3,
-  TELEX = 4,
-  NATIONAL = 8,
-  PRIVATE = 9,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaitingNumberPresentation.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaitingNumberPresentation.aidl
deleted file mode 100644
index 22eaf6b..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaitingNumberPresentation.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaCallWaitingNumberPresentation {
-  ALLOWED = 0,
-  RESTRICTED = 1,
-  UNKNOWN = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaitingNumberType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaitingNumberType.aidl
deleted file mode 100644
index 4740108..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaCallWaitingNumberType.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaCallWaitingNumberType {
-  UNKNOWN = 0,
-  INTERNATIONAL = 1,
-  NATIONAL = 2,
-  NETWORK_SPECIFIC = 3,
-  SUBSCRIBER = 4,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaInfoRecName.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaInfoRecName.aidl
deleted file mode 100644
index 182dcc0..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaInfoRecName.aidl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaInfoRecName {
-  DISPLAY = 0,
-  CALLED_PARTY_NUMBER = 1,
-  CALLING_PARTY_NUMBER = 2,
-  CONNECTED_NUMBER = 3,
-  SIGNAL = 4,
-  REDIRECTING_NUMBER = 5,
-  LINE_CONTROL = 6,
-  EXTENDED_DISPLAY = 7,
-  T53_CLIR = 8,
-  T53_RELEASE = 9,
-  T53_AUDIO_CONTROL = 10,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaInformationRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaInformationRecord.aidl
index 844a1bf..c2f2df2 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaInformationRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaInformationRecord.aidl
@@ -34,7 +34,7 @@
 package android.hardware.radio;
 @VintfStability
 parcelable CdmaInformationRecord {
-  android.hardware.radio.CdmaInfoRecName name;
+  int name;
   android.hardware.radio.CdmaDisplayInfoRecord[] display;
   android.hardware.radio.CdmaNumberInfoRecord[] number;
   android.hardware.radio.CdmaSignalInfoRecord[] signal;
@@ -42,4 +42,15 @@
   android.hardware.radio.CdmaLineControlInfoRecord[] lineCtrl;
   android.hardware.radio.CdmaT53ClirInfoRecord[] clir;
   android.hardware.radio.CdmaT53AudioControlInfoRecord[] audioCtrl;
+  const int NAME_DISPLAY = 0;
+  const int NAME_CALLED_PARTY_NUMBER = 1;
+  const int NAME_CALLING_PARTY_NUMBER = 2;
+  const int NAME_CONNECTED_NUMBER = 3;
+  const int NAME_SIGNAL = 4;
+  const int NAME_REDIRECTING_NUMBER = 5;
+  const int NAME_LINE_CONTROL = 6;
+  const int NAME_EXTENDED_DISPLAY = 7;
+  const int NAME_T53_CLIR = 8;
+  const int NAME_T53_RELEASE = 9;
+  const int NAME_T53_AUDIO_CONTROL = 10;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaRedirectingNumberInfoRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaRedirectingNumberInfoRecord.aidl
index 44b7993..9713f80 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaRedirectingNumberInfoRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaRedirectingNumberInfoRecord.aidl
@@ -35,5 +35,12 @@
 @VintfStability
 parcelable CdmaRedirectingNumberInfoRecord {
   android.hardware.radio.CdmaNumberInfoRecord redirectingNumber;
-  android.hardware.radio.CdmaRedirectingReason redirectingReason;
+  int redirectingReason;
+  const int REDIRECTING_REASON_UNKNOWN = 0;
+  const int REDIRECTING_REASON_CALL_FORWARDING_BUSY = 1;
+  const int REDIRECTING_REASON_CALL_FORWARDING_NO_REPLY = 2;
+  const int REDIRECTING_REASON_CALLED_DTE_OUT_OF_ORDER = 9;
+  const int REDIRECTING_REASON_CALL_FORWARDING_BY_THE_CALLED_DTE = 10;
+  const int REDIRECTING_REASON_CALL_FORWARDING_UNCONDITIONAL = 15;
+  const int REDIRECTING_REASON_RESERVED = 16;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaRedirectingReason.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaRedirectingReason.aidl
deleted file mode 100644
index e109c5b..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaRedirectingReason.aidl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaRedirectingReason {
-  UNKNOWN = 0,
-  CALL_FORWARDING_BUSY = 1,
-  CALL_FORWARDING_NO_REPLY = 2,
-  CALLED_DTE_OUT_OF_ORDER = 9,
-  CALL_FORWARDING_BY_THE_CALLED_DTE = 10,
-  CALL_FORWARDING_UNCONDITIONAL = 15,
-  RESERVED = 16,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsAck.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsAck.aidl
index 0ef4331..8dfa1da 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsAck.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsAck.aidl
@@ -34,6 +34,6 @@
 package android.hardware.radio;
 @VintfStability
 parcelable CdmaSmsAck {
-  android.hardware.radio.CdmaSmsErrorClass errorClass;
+  boolean errorClass;
   int smsCauseCode;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsAddress.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsAddress.aidl
index a37f1e7..a24c701 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsAddress.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsAddress.aidl
@@ -34,9 +34,35 @@
 package android.hardware.radio;
 @VintfStability
 parcelable CdmaSmsAddress {
-  android.hardware.radio.CdmaSmsDigitMode digitMode;
-  android.hardware.radio.CdmaSmsNumberMode numberMode;
-  android.hardware.radio.CdmaSmsNumberType numberType;
-  android.hardware.radio.CdmaSmsNumberPlan numberPlan;
+  int digitMode;
+  boolean isNumberModeDataNetwork;
+  int numberType;
+  int numberPlan;
   byte[] digits;
+  const int DIGIT_MODE_FOUR_BIT = 0;
+  const int DIGIT_MODE_EIGHT_BIT = 1;
+  const int NUMBER_PLAN_UNKNOWN = 0;
+  const int NUMBER_PLAN_TELEPHONY = 1;
+  const int NUMBER_PLAN_RESERVED_2 = 2;
+  const int NUMBER_PLAN_DATA = 3;
+  const int NUMBER_PLAN_TELEX = 4;
+  const int NUMBER_PLAN_RESERVED_5 = 5;
+  const int NUMBER_PLAN_RESERVED_6 = 6;
+  const int NUMBER_PLAN_RESERVED_7 = 7;
+  const int NUMBER_PLAN_RESERVED_8 = 8;
+  const int NUMBER_PLAN_PRIVATE = 9;
+  const int NUMBER_PLAN_RESERVED_10 = 10;
+  const int NUMBER_PLAN_RESERVED_11 = 11;
+  const int NUMBER_PLAN_RESERVED_12 = 12;
+  const int NUMBER_PLAN_RESERVED_13 = 13;
+  const int NUMBER_PLAN_RESERVED_14 = 14;
+  const int NUMBER_PLAN_RESERVED_15 = 15;
+  const int NUMBER_TYPE_UNKNOWN = 0;
+  const int NUMBER_TYPE_INTERNATIONAL_OR_DATA_IP = 1;
+  const int NUMBER_TYPE_NATIONAL_OR_INTERNET_MAIL = 2;
+  const int NUMBER_TYPE_NETWORK = 3;
+  const int NUMBER_TYPE_SUBSCRIBER = 4;
+  const int NUMBER_TYPE_ALPHANUMERIC = 5;
+  const int NUMBER_TYPE_ABBREVIATED = 6;
+  const int NUMBER_TYPE_RESERVED_7 = 7;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsDigitMode.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsDigitMode.aidl
deleted file mode 100644
index 7c77830..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsDigitMode.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaSmsDigitMode {
-  FOUR_BIT = 0,
-  EIGHT_BIT = 1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsErrorClass.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsErrorClass.aidl
deleted file mode 100644
index 3ad5c1a..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsErrorClass.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaSmsErrorClass {
-  NO_ERROR = 0,
-  ERROR = 1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsNumberMode.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsNumberMode.aidl
deleted file mode 100644
index 31d49d4..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsNumberMode.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaSmsNumberMode {
-  NOT_DATA_NETWORK = 0,
-  DATA_NETWORK = 1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsNumberPlan.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsNumberPlan.aidl
deleted file mode 100644
index fcbd1cc..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsNumberPlan.aidl
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaSmsNumberPlan {
-  UNKNOWN = 0,
-  TELEPHONY = 1,
-  RESERVED_2 = 2,
-  DATA = 3,
-  TELEX = 4,
-  RESERVED_5 = 5,
-  RESERVED_6 = 6,
-  RESERVED_7 = 7,
-  RESERVED_8 = 8,
-  PRIVATE = 9,
-  RESERVED_10 = 10,
-  RESERVED_11 = 11,
-  RESERVED_12 = 12,
-  RESERVED_13 = 13,
-  RESERVED_14 = 14,
-  RESERVED_15 = 15,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsNumberType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsNumberType.aidl
deleted file mode 100644
index ca14dbc..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsNumberType.aidl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaSmsNumberType {
-  UNKNOWN = 0,
-  INTERNATIONAL_OR_DATA_IP = 1,
-  NATIONAL_OR_INTERNET_MAIL = 2,
-  NETWORK = 3,
-  SUBSCRIBER = 4,
-  ALPHANUMERIC = 5,
-  ABBREVIATED = 6,
-  RESERVED_7 = 7,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsSubaddress.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsSubaddress.aidl
index a0155da..0cf3e58 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsSubaddress.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsSubaddress.aidl
@@ -34,7 +34,9 @@
 package android.hardware.radio;
 @VintfStability
 parcelable CdmaSmsSubaddress {
-  android.hardware.radio.CdmaSmsSubaddressType subaddressType;
+  int subaddressType;
   boolean odd;
   byte[] digits;
+  const int SUBADDRESS_TYPE_NSAP = 0;
+  const int SUBADDRESS_TYPE_USER_SPECIFIED = 1;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsSubaddressType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsSubaddressType.aidl
deleted file mode 100644
index a4db5ec..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsSubaddressType.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaSmsSubaddressType {
-  NSAP = 0,
-  USER_SPECIFIED = 1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsWriteArgs.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsWriteArgs.aidl
index 3202314..e2fd8fd 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsWriteArgs.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsWriteArgs.aidl
@@ -34,6 +34,10 @@
 package android.hardware.radio;
 @VintfStability
 parcelable CdmaSmsWriteArgs {
-  android.hardware.radio.CdmaSmsWriteArgsStatus status;
+  int status;
   android.hardware.radio.CdmaSmsMessage message;
+  const int STATUS_REC_UNREAD = 0;
+  const int STATUS_REC_READ = 1;
+  const int STATUS_STO_UNSENT = 2;
+  const int STATUS_STO_SENT = 3;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsWriteArgsStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsWriteArgsStatus.aidl
deleted file mode 100644
index 4bad261..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CdmaSmsWriteArgsStatus.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum CdmaSmsWriteArgsStatus {
-  REC_UNREAD = 0,
-  REC_READ = 1,
-  STO_UNSENT = 2,
-  STO_SENT = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityLte.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityLte.aidl
index 5a8c272..4f7c90b 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityLte.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityLte.aidl
@@ -43,6 +43,6 @@
   android.hardware.radio.CellIdentityOperatorNames operatorNames;
   int bandwidth;
   String[] additionalPlmns;
-  android.hardware.radio.OptionalCsgInfo optionalCsgInfo;
+  @nullable android.hardware.radio.ClosedSubscriberGroupInfo csgInfo;
   android.hardware.radio.EutranBands[] bands;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityTdscdma.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityTdscdma.aidl
index 35e1f5d..7cc13b5 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityTdscdma.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityTdscdma.aidl
@@ -42,5 +42,5 @@
   int uarfcn;
   android.hardware.radio.CellIdentityOperatorNames operatorNames;
   String[] additionalPlmns;
-  android.hardware.radio.OptionalCsgInfo optionalCsgInfo;
+  @nullable android.hardware.radio.ClosedSubscriberGroupInfo csgInfo;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityWcdma.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityWcdma.aidl
index 7bcc4d5..c43a8ad 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityWcdma.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/CellIdentityWcdma.aidl
@@ -42,5 +42,5 @@
   int uarfcn;
   android.hardware.radio.CellIdentityOperatorNames operatorNames;
   String[] additionalPlmns;
-  android.hardware.radio.OptionalCsgInfo optionalCsgInfo;
+  @nullable android.hardware.radio.ClosedSubscriberGroupInfo csgInfo;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Clir.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Clir.aidl
deleted file mode 100644
index 97ba4ed..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Clir.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum Clir {
-  DEFAULT = 0,
-  INVOCATION = 1,
-  SUPPRESSION = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataConnActiveStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataConnActiveStatus.aidl
deleted file mode 100644
index 0d11390..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataConnActiveStatus.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum DataConnActiveStatus {
-  INACTIVE = 0,
-  DORMANT = 1,
-  ACTIVE = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileId.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileId.aidl
deleted file mode 100644
index 2c86c0f..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileId.aidl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum DataProfileId {
-  DEFAULT = 0,
-  TETHERED = 1,
-  IMS = 2,
-  FOTA = 3,
-  CBS = 4,
-  OEM_BASE = 1000,
-  INVALID = -1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileInfo.aidl
index d9d0487..b8bba27 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileInfo.aidl
@@ -34,14 +34,14 @@
 package android.hardware.radio;
 @VintfStability
 parcelable DataProfileInfo {
-  android.hardware.radio.DataProfileId profileId;
+  int profileId;
   String apn;
   android.hardware.radio.PdpProtocolType protocol;
   android.hardware.radio.PdpProtocolType roamingProtocol;
   android.hardware.radio.ApnAuthType authType;
   String user;
   String password;
-  android.hardware.radio.DataProfileInfoType type;
+  int type;
   int maxConnsTime;
   int maxConns;
   int waitTime;
@@ -52,4 +52,14 @@
   int mtuV6;
   boolean preferred;
   boolean persistent;
+  const int ID_DEFAULT = 0;
+  const int ID_TETHERED = 1;
+  const int ID_IMS = 2;
+  const int ID_FOTA = 3;
+  const int ID_CBS = 4;
+  const int ID_OEM_BASE = 1000;
+  const int ID_INVALID = -1;
+  const int TYPE_COMMON = 0;
+  const int TYPE_THREE_GPP = 1;
+  const int TYPE_THREE_GPP2 = 2;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileInfoType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileInfoType.aidl
deleted file mode 100644
index a559de0..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataProfileInfoType.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum DataProfileInfoType {
-  COMMON = 0,
-  THREE_GPP = 1,
-  THREE_GPP2 = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataRegStateResult.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataRegStateResult.aidl
index 303035f..8eac451 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataRegStateResult.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataRegStateResult.aidl
@@ -39,6 +39,6 @@
   int reasonDataDenied;
   int maxDataCalls;
   android.hardware.radio.CellIdentity cellIdentity;
-  android.hardware.radio.DataRegStateResultVopsInfo vopsInfo;
+  @nullable android.hardware.radio.LteVopsInfo lteVopsInfo;
   android.hardware.radio.NrIndicators nrIndicators;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Dial.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Dial.aidl
index f8edf48..cc9fc78 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Dial.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/Dial.aidl
@@ -35,6 +35,9 @@
 @VintfStability
 parcelable Dial {
   String address;
-  android.hardware.radio.Clir clir;
+  int clir;
   android.hardware.radio.UusInfo[] uusInfo;
+  const int CLIR_DEFAULT = 0;
+  const int CLIR_INVOCATION = 1;
+  const int CLIR_SUPPRESSION = 2;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmcIndicator.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmcIndicator.aidl
deleted file mode 100644
index 846084b..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmcIndicator.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum EmcIndicator {
-  EMC_NOT_SUPPORTED = 0,
-  EMC_NR_CONNECTED_TO_5GCN = 1,
-  EMC_EUTRA_CONNECTED_TO_5GCN = 2,
-  EMC_BOTH_NR_EUTRA_CONNECTED_TO_5GCN = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmergencyNumber.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmergencyNumber.aidl
index 7aa4cd8..1de6246 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmergencyNumber.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmergencyNumber.aidl
@@ -39,5 +39,9 @@
   String mnc;
   android.hardware.radio.EmergencyServiceCategory categories;
   String[] urns;
-  android.hardware.radio.EmergencyNumberSource sources;
+  int sources;
+  const int SOURCE_NETWORK_SIGNALING = 1;
+  const int SOURCE_SIM = 2;
+  const int SOURCE_MODEM_CONFIG = 4;
+  const int SOURCE_DEFAULT = 8;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmergencyNumberSource.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmergencyNumberSource.aidl
deleted file mode 100644
index 1424bfa..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmergencyNumberSource.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum EmergencyNumberSource {
-  NETWORK_SIGNALING = 1,
-  SIM = 2,
-  MODEM_CONFIG = 4,
-  DEFAULT = 8,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmfIndicator.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmfIndicator.aidl
deleted file mode 100644
index 21100f2..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EmfIndicator.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum EmfIndicator {
-  EMF_NOT_SUPPORTED = 0,
-  EMF_NR_CONNECTED_TO_5GCN = 1,
-  EMF_EUTRA_CONNECTED_TO_5GCN = 2,
-  EMF_BOTH_NR_EUTRA_CONNECTED_TO_5GCN = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataRegStateResultVopsInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EutranRegistrationInfo.aidl
similarity index 95%
rename from radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataRegStateResultVopsInfo.aidl
rename to radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EutranRegistrationInfo.aidl
index 2ce646e..0ab8833 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/DataRegStateResultVopsInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/EutranRegistrationInfo.aidl
@@ -33,7 +33,7 @@
 
 package android.hardware.radio;
 @VintfStability
-union DataRegStateResultVopsInfo {
-  boolean noinit;
+parcelable EutranRegistrationInfo {
   android.hardware.radio.LteVopsInfo lteVopsInfo;
+  android.hardware.radio.NrIndicators nrIndicators;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/FrequencyRange.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/FrequencyRange.aidl
deleted file mode 100644
index 243b54e..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/FrequencyRange.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum FrequencyRange {
-  LOW = 1,
-  MID = 2,
-  HIGH = 3,
-  MMWAVE = 4,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HandoverFailureMode.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HandoverFailureMode.aidl
deleted file mode 100644
index 661b7b7..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HandoverFailureMode.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum HandoverFailureMode {
-  LEGACY = 0,
-  DO_FALLBACK = 1,
-  NO_FALLBACK_RETRY_HANDOVER = 2,
-  NO_FALLBACK_RETRY_SETUP_NORMAL = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfig.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfig.aidl
index 4a5c107..60ab511 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfig.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfig.aidl
@@ -34,9 +34,14 @@
 package android.hardware.radio;
 @VintfStability
 parcelable HardwareConfig {
-  android.hardware.radio.HardwareConfigType type;
+  int type;
   String uuid;
-  android.hardware.radio.HardwareConfigState state;
+  int state;
   android.hardware.radio.HardwareConfigModem[] modem;
   android.hardware.radio.HardwareConfigSim[] sim;
+  const int STATE_ENABLED = 0;
+  const int STATE_STANDBY = 1;
+  const int STATE_DISABLED = 2;
+  const int TYPE_MODEM = 0;
+  const int TYPE_SIM = 1;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfigState.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfigState.aidl
deleted file mode 100644
index 672fe47..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfigState.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum HardwareConfigState {
-  ENABLED = 0,
-  STANDBY = 1,
-  DISABLED = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfigType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfigType.aidl
deleted file mode 100644
index a152282..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/HardwareConfigType.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum HardwareConfigType {
-  MODEM = 0,
-  SIM = 1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IRadio.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IRadio.aidl
index 5a7b251..0bcbd55 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IRadio.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IRadio.aidl
@@ -113,7 +113,6 @@
   oneway void nvResetConfig(in int serial, in android.hardware.radio.ResetNvType resetType);
   oneway void nvWriteCdmaPrl(in int serial, in byte[] prl);
   oneway void nvWriteItem(in int serial, in android.hardware.radio.NvWriteItem item);
-  oneway void pullLceData(in int serial);
   oneway void rejectCall(in int serial);
   oneway void releasePduSessionId(in int serial, in int id);
   oneway void reportSmsMemoryStatus(in int serial, in boolean available);
@@ -131,13 +130,12 @@
   oneway void sendEnvelope(in int serial, in String command);
   oneway void sendEnvelopeWithStatus(in int serial, in String contents);
   oneway void sendImsSms(in int serial, in android.hardware.radio.ImsSmsMessage message);
-  oneway void sendSMSExpectMore(in int serial, in android.hardware.radio.GsmSmsMessage message);
   oneway void sendSms(in int serial, in android.hardware.radio.GsmSmsMessage message);
   oneway void sendSmsExpectMore(in int serial, in android.hardware.radio.GsmSmsMessage message);
   oneway void sendTerminalResponseToSim(in int serial, in String commandResponse);
   oneway void sendUssd(in int serial, in String ussd);
   oneway void separateConnection(in int serial, in int gsmIndex);
-  oneway void setAllowedCarriers(in int serial, in android.hardware.radio.CarrierRestrictionsWithPriority carriers, in android.hardware.radio.SimLockMultiSimPolicy multiSimPolicy);
+  oneway void setAllowedCarriers(in int serial, in android.hardware.radio.CarrierRestrictions carriers, in android.hardware.radio.SimLockMultiSimPolicy multiSimPolicy);
   oneway void setAllowedNetworkTypesBitmap(in int serial, in android.hardware.radio.RadioAccessFamily networkTypeBitmap);
   oneway void setBandMode(in int serial, in android.hardware.radio.RadioBandMode mode);
   oneway void setBarringPassword(in int serial, in String facility, in String oldPassword, in String newPassword);
@@ -169,7 +167,7 @@
   oneway void setPreferredVoicePrivacy(in int serial, in boolean enable);
   oneway void setRadioCapability(in int serial, in android.hardware.radio.RadioCapability rc);
   oneway void setRadioPower(in int serial, in boolean powerOn, in boolean forEmergencyCall, in boolean preferredForEmergencyCall);
-  void setResponseFunctions(in android.hardware.radio.IRadioResponse radioResponse, in android.hardware.radio.IRadioIndication radioIndication);
+  oneway void setResponseFunctions(in android.hardware.radio.IRadioResponse radioResponse, in android.hardware.radio.IRadioIndication radioIndication);
   oneway void setSignalStrengthReportingCriteria(in int serial, in android.hardware.radio.SignalThresholdInfo signalThresholdInfo, in android.hardware.radio.AccessNetwork accessNetwork);
   oneway void setSimCardPower(in int serial, in android.hardware.radio.CardPowerState powerUp);
   oneway void setSmscAddress(in int serial, in String smsc);
@@ -177,15 +175,13 @@
   oneway void setSystemSelectionChannels(in int serial, in boolean specifyChannels, in android.hardware.radio.RadioAccessSpecifier[] specifiers);
   oneway void setTTYMode(in int serial, in android.hardware.radio.TtyMode mode);
   oneway void setUiccSubscription(in int serial, in android.hardware.radio.SelectUiccSub uiccSub);
-  oneway void setupDataCall(in int serial, in android.hardware.radio.AccessNetwork accessNetwork, in android.hardware.radio.DataProfileInfo dataProfileInfo, in boolean roamingAllowed, in android.hardware.radio.DataRequestReason reason, in android.hardware.radio.LinkAddress[] addresses, in String[] dnses, in int pduSessionId, in android.hardware.radio.OptionalSliceInfo sliceInfo, in android.hardware.radio.OptionalTrafficDescriptor trafficDescriptor, in boolean matchAllRuleAllowed);
+  oneway void setupDataCall(in int serial, in android.hardware.radio.AccessNetwork accessNetwork, in android.hardware.radio.DataProfileInfo dataProfileInfo, in boolean roamingAllowed, in android.hardware.radio.DataRequestReason reason, in android.hardware.radio.LinkAddress[] addresses, in String[] dnses, in int pduSessionId, in @nullable android.hardware.radio.SliceInfo sliceInfo, in @nullable android.hardware.radio.TrafficDescriptor trafficDescriptor, in boolean matchAllRuleAllowed);
   oneway void startDtmf(in int serial, in String s);
   oneway void startHandover(in int serial, in int callId);
   oneway void startKeepalive(in int serial, in android.hardware.radio.KeepaliveRequest keepalive);
-  oneway void startLceService(in int serial, in int reportInterval, in boolean pullMode);
   oneway void startNetworkScan(in int serial, in android.hardware.radio.NetworkScanRequest request);
   oneway void stopDtmf(in int serial);
   oneway void stopKeepalive(in int serial, in int sessionHandle);
-  oneway void stopLceService(in int serial);
   oneway void stopNetworkScan(in int serial);
   oneway void supplyIccPin2ForApp(in int serial, in String pin2, in String aid);
   oneway void supplyIccPinForApp(in int serial, in String pin, in String aid);
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IRadioResponse.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IRadioResponse.aidl
index 9137b973..0d18cf8 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IRadioResponse.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IRadioResponse.aidl
@@ -55,7 +55,7 @@
   oneway void enableUiccApplicationsResponse(in android.hardware.radio.RadioResponseInfo info);
   oneway void exitEmergencyCallbackModeResponse(in android.hardware.radio.RadioResponseInfo info);
   oneway void explicitCallTransferResponse(in android.hardware.radio.RadioResponseInfo info);
-  oneway void getAllowedCarriersResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.CarrierRestrictionsWithPriority carriers, in android.hardware.radio.SimLockMultiSimPolicy multiSimPolicy);
+  oneway void getAllowedCarriersResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.CarrierRestrictions carriers, in android.hardware.radio.SimLockMultiSimPolicy multiSimPolicy);
   oneway void getAllowedNetworkTypesBitmapResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.RadioAccessFamily networkTypeBitmap);
   oneway void getAvailableBandModesResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.RadioBandMode[] bandModes);
   oneway void getAvailableNetworksResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.OperatorInfo[] networkInfos);
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ISap.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ISap.aidl
index fa04264..2a111c6 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ISap.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ISap.aidl
@@ -39,7 +39,7 @@
   oneway void disconnectReq(in int token);
   oneway void powerReq(in int token, in boolean state);
   oneway void resetSimReq(in int token);
-  void setCallback(in android.hardware.radio.ISapCallback sapCallback);
+  oneway void setCallback(in android.hardware.radio.ISapCallback sapCallback);
   oneway void setTransferProtocolReq(in int token, in android.hardware.radio.SapTransferProtocol transferProtocol);
   oneway void transferAtrReq(in int token);
   oneway void transferCardReaderStatusReq(in int token);
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ImsiEncryptionInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ImsiEncryptionInfo.aidl
index c89c3a0..fb85eca 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ImsiEncryptionInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ImsiEncryptionInfo.aidl
@@ -39,5 +39,7 @@
   byte[] carrierKey;
   String keyIdentifier;
   long expirationTime;
-  android.hardware.radio.PublicKeyType keyType;
+  byte keyType;
+  const byte PUBLIC_KEY_TYPE_EPDG = 1;
+  const byte PUBLIC_KEY_TYPE_WLAN = 2;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IncrementalResultsPeriodicityRange.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IncrementalResultsPeriodicityRange.aidl
deleted file mode 100644
index ad3441f..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/IncrementalResultsPeriodicityRange.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum IncrementalResultsPeriodicityRange {
-  MIN = 1,
-  MAX = 10,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveRequest.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveRequest.aidl
index 1f23a69..1aeeb55 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveRequest.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveRequest.aidl
@@ -34,11 +34,13 @@
 package android.hardware.radio;
 @VintfStability
 parcelable KeepaliveRequest {
-  android.hardware.radio.KeepaliveType type;
+  int type;
   byte[] sourceAddress;
   int sourcePort;
   byte[] destinationAddress;
   int destinationPort;
   int maxKeepaliveIntervalMillis;
   int cid;
+  const int TYPE_NATT_IPV4 = 0;
+  const int TYPE_NATT_IPV6 = 1;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveStatus.aidl
index 8729b69..3c7a736 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveStatus.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveStatus.aidl
@@ -35,5 +35,8 @@
 @VintfStability
 parcelable KeepaliveStatus {
   int sessionHandle;
-  android.hardware.radio.KeepaliveStatusCode code;
+  int code;
+  const int CODE_ACTIVE = 0;
+  const int CODE_INACTIVE = 1;
+  const int CODE_PENDING = 2;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveStatusCode.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveStatusCode.aidl
deleted file mode 100644
index 8ad5dc5..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveStatusCode.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum KeepaliveStatusCode {
-  ACTIVE = 0,
-  INACTIVE = 1,
-  PENDING = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveType.aidl
deleted file mode 100644
index f0dd521..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/KeepaliveType.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum KeepaliveType {
-  NATT_IPV4 = 0,
-  NATT_IPV6 = 1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LceStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LceStatus.aidl
deleted file mode 100644
index 2542cc7..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LceStatus.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum LceStatus {
-  NOT_SUPPORTED = 0,
-  STOPPED = 1,
-  ACTIVE = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LceStatusInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LceStatusInfo.aidl
index 29f5ab6..74166c3 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LceStatusInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LceStatusInfo.aidl
@@ -34,6 +34,9 @@
 package android.hardware.radio;
 @VintfStability
 parcelable LceStatusInfo {
-  android.hardware.radio.LceStatus lceStatus;
+  int lceStatus;
   byte actualIntervalMs;
+  const int LCE_STATUS_NOT_SUPPORTED = 0;
+  const int LCE_STATUS_STOPPED = 1;
+  const int LCE_STATUS_ACTIVE = 2;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LinkAddress.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LinkAddress.aidl
index b64daf9..bdeb9b8 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LinkAddress.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/LinkAddress.aidl
@@ -35,7 +35,9 @@
 @VintfStability
 parcelable LinkAddress {
   String address;
-  android.hardware.radio.AddressProperty properties;
+  int addressProperties;
   long deprecationTime;
   long expirationTime;
+  const int ADDRESS_PROPERTY_NONE = 0;
+  const int ADDRESS_PROPERTY_DEPRECATED = 32;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/MaxSearchTimeRange.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/MaxSearchTimeRange.aidl
deleted file mode 100644
index 88cdf5f..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/MaxSearchTimeRange.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum MaxSearchTimeRange {
-  MIN = 60,
-  MAX = 3600,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/MaybePort.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/MaybePort.aidl
deleted file mode 100644
index f556c7f..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/MaybePort.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-union MaybePort {
-  boolean noinit;
-  android.hardware.radio.PortRange range;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/MvnoType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/MvnoType.aidl
deleted file mode 100644
index 8be23b6..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/MvnoType.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum MvnoType {
-  NONE = 0,
-  IMSI = 1,
-  GID = 2,
-  SPN = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NetworkScanRequest.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NetworkScanRequest.aidl
index 4e6f613..992ac48 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NetworkScanRequest.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NetworkScanRequest.aidl
@@ -34,11 +34,19 @@
 package android.hardware.radio;
 @VintfStability
 parcelable NetworkScanRequest {
-  android.hardware.radio.ScanType type;
+  int type;
   int interval;
   android.hardware.radio.RadioAccessSpecifier[] specifiers;
   int maxSearchTime;
   boolean incrementalResults;
   int incrementalResultsPeriodicity;
   String[] mccMncs;
+  const int INCREMENTAL_RESULTS_PREIODICITY_RANGE_MIN = 1;
+  const int INCREMENTAL_RESULTS_PREIODICITY_RANGE_MAX = 10;
+  const int MAX_SEARCH_TIME_RANGE_MIN = 60;
+  const int MAX_SEARCH_TIME_RANGE_MAX = 3600;
+  const int SCAN_INTERVAL_RANGE_MIN = 5;
+  const int SCAN_INTERVAL_RANGE_MAX = 300;
+  const int SCAN_TYPE_ONE_SHOT = 0;
+  const int SCAN_TYPE_PERIODIC = 1;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NetworkScanResult.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NetworkScanResult.aidl
index 86543e3..670c173 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NetworkScanResult.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NetworkScanResult.aidl
@@ -34,7 +34,9 @@
 package android.hardware.radio;
 @VintfStability
 parcelable NetworkScanResult {
-  android.hardware.radio.ScanStatus status;
+  int status;
   android.hardware.radio.RadioError error;
   android.hardware.radio.CellInfo[] networkInfos;
+  const int SCAN_STATUS_PARTIAL = 1;
+  const int SCAN_STATUS_COMPLETE = 2;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NrQos.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NrQos.aidl
index 6cb8f33..a40dda8 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NrQos.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NrQos.aidl
@@ -39,4 +39,6 @@
   android.hardware.radio.QosBandwidth uplink;
   byte qfi;
   char averagingWindowMs;
+  const byte FLOW_ID_RANGE_MIN = 1;
+  const byte FLOW_ID_RANGE_MAX = 63;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NrVopsInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NrVopsInfo.aidl
index b737aaf..52abce6 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NrVopsInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/NrVopsInfo.aidl
@@ -34,7 +34,18 @@
 package android.hardware.radio;
 @VintfStability
 parcelable NrVopsInfo {
-  android.hardware.radio.VopsIndicator vopsSupported;
-  android.hardware.radio.EmcIndicator emcSupported;
-  android.hardware.radio.EmfIndicator emfSupported;
+  byte vopsSupported;
+  byte emcSupported;
+  byte emfSupported;
+  const byte EMC_INDICATOR_NOT_SUPPORTED = 0;
+  const byte EMC_INDICATOR_NR_CONNECTED_TO_5GCN = 1;
+  const byte EMC_INDICATOR_EUTRA_CONNECTED_TO_5GCN = 2;
+  const byte EMC_INDICATOR_BOTH_NR_EUTRA_CONNECTED_TO_5GCN = 3;
+  const byte EMF_INDICATOR_NOT_SUPPORTED = 0;
+  const byte EMF_INDICATOR_NR_CONNECTED_TO_5GCN = 1;
+  const byte EMF_INDICATOR_EUTRA_CONNECTED_TO_5GCN = 2;
+  const byte EMF_INDICATOR_BOTH_NR_EUTRA_CONNECTED_TO_5GCN = 3;
+  const byte VOPS_INDICATOR_VOPS_NOT_SUPPORTED = 0;
+  const byte VOPS_INDICATOR_VOPS_OVER_3GPP = 1;
+  const byte VOPS_INDICATOR_VOPS_OVER_NON_3GPP = 2;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OperatorInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OperatorInfo.aidl
index 2f29c02..bb90f12 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OperatorInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OperatorInfo.aidl
@@ -37,5 +37,9 @@
   String alphaLong;
   String alphaShort;
   String operatorNumeric;
-  android.hardware.radio.OperatorStatus status;
+  int status;
+  const int STATUS_UNKNOWN = 0;
+  const int STATUS_AVAILABLE = 1;
+  const int STATUS_CURRENT = 2;
+  const int STATUS_FORBIDDEN = 3;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OperatorStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OperatorStatus.aidl
deleted file mode 100644
index 4ef10ca..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OperatorStatus.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum OperatorStatus {
-  UNKNOWN = 0,
-  AVAILABLE = 1,
-  CURRENT = 2,
-  FORBIDDEN = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalCsgInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalCsgInfo.aidl
deleted file mode 100644
index 6866dca..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalCsgInfo.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-union OptionalCsgInfo {
-  boolean noinit;
-  android.hardware.radio.ClosedSubscriberGroupInfo csgInfo;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalDnn.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalDnn.aidl
deleted file mode 100644
index 88582de..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalDnn.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-union OptionalDnn {
-  boolean noinit;
-  String value;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalOsAppId.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalOsAppId.aidl
deleted file mode 100644
index 40bfa41..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalOsAppId.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-union OptionalOsAppId {
-  boolean noinit;
-  android.hardware.radio.OsAppId value;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalPdpProtocolType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalPdpProtocolType.aidl
deleted file mode 100644
index 5b4964f..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalPdpProtocolType.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-union OptionalPdpProtocolType {
-  boolean noinit;
-  android.hardware.radio.PdpProtocolType value;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalSliceInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalSliceInfo.aidl
deleted file mode 100644
index d640aac..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalSliceInfo.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-union OptionalSliceInfo {
-  boolean noinit;
-  android.hardware.radio.SliceInfo value;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalSscMode.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalSscMode.aidl
deleted file mode 100644
index 0472615..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/OptionalSscMode.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-union OptionalSscMode {
-  boolean noinit;
-  android.hardware.radio.SscMode value;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/P2Constant.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/P2Constant.aidl
deleted file mode 100644
index eb8b442..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/P2Constant.aidl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum P2Constant {
-  NO_P2 = -1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PortRange.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PortRange.aidl
index 9e4d272..8e02ff3 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PortRange.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PortRange.aidl
@@ -36,4 +36,6 @@
 parcelable PortRange {
   int start;
   int end;
+  const int PORT_RANGE_MIN = 20;
+  const int PORT_RANGE_MAX = 65535;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PrlIndicator.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PrlIndicator.aidl
deleted file mode 100644
index b596d30..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PrlIndicator.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum PrlIndicator {
-  NOT_REGISTERED = -1,
-  NOT_IN_PRL = 0,
-  IN_PRL = 1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PublicKeyType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PublicKeyType.aidl
deleted file mode 100644
index 68d96e8..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/PublicKeyType.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum PublicKeyType {
-  EPDG = 1,
-  WLAN = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFilter.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFilter.aidl
index 3376c66..a568506 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFilter.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFilter.aidl
@@ -36,12 +36,20 @@
 parcelable QosFilter {
   String[] localAddresses;
   String[] remoteAddresses;
-  android.hardware.radio.MaybePort localPort;
-  android.hardware.radio.MaybePort remotePort;
-  android.hardware.radio.QosProtocol protocol;
+  @nullable android.hardware.radio.PortRange localPort;
+  @nullable android.hardware.radio.PortRange remotePort;
+  byte protocol;
   android.hardware.radio.QosFilterTypeOfService tos;
   android.hardware.radio.QosFilterIpv6FlowLabel flowLabel;
   android.hardware.radio.QosFilterIpsecSpi spi;
-  android.hardware.radio.QosFilterDirection direction;
+  byte direction;
   int precedence;
+  const byte DIRECTION_DOWNLINK = 0;
+  const byte DIRECTION_UPLINK = 1;
+  const byte DIRECTION_BIDIRECTIONAL = 2;
+  const byte PROTOCOL_UNSPECIFIED = -1;
+  const byte PROTOCOL_TCP = 6;
+  const byte PROTOCOL_UDP = 17;
+  const byte PROTOCOL_ESP = 50;
+  const byte PROTOCOL_AH = 51;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFilterDirection.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFilterDirection.aidl
deleted file mode 100644
index efb9c50..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFilterDirection.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum QosFilterDirection {
-  DOWNLINK = 0,
-  UPLINK = 1,
-  BIDIRECTIONAL = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFlowIdRange.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFlowIdRange.aidl
deleted file mode 100644
index 95468e0..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosFlowIdRange.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum QosFlowIdRange {
-  MIN = 1,
-  MAX = 63,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosPortRange.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosPortRange.aidl
deleted file mode 100644
index 7171c7e..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosPortRange.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum QosPortRange {
-  MIN = 20,
-  MAX = 65535,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosProtocol.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosProtocol.aidl
deleted file mode 100644
index cb68f04..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/QosProtocol.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum QosProtocol {
-  UNSPECIFIED = -1,
-  TCP = 6,
-  UDP = 17,
-  ESP = 50,
-  AH = 51,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapability.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapability.aidl
index 99c1a41..ca1e389 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapability.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapability.aidl
@@ -35,8 +35,16 @@
 @VintfStability
 parcelable RadioCapability {
   int session;
-  android.hardware.radio.RadioCapabilityPhase phase;
+  int phase;
   android.hardware.radio.RadioAccessFamily raf;
   String logicalModemUuid;
-  android.hardware.radio.RadioCapabilityStatus status;
+  int status;
+  const int PHASE_CONFIGURED = 0;
+  const int PHASE_START = 1;
+  const int PHASE_APPLY = 2;
+  const int PHASE_UNSOL_RSP = 3;
+  const int PHASE_FINISH = 4;
+  const int STATUS_NONE = 0;
+  const int STATUS_SUCCESS = 1;
+  const int STATUS_FAIL = 2;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapabilityPhase.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapabilityPhase.aidl
deleted file mode 100644
index 7a4b9ad..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapabilityPhase.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum RadioCapabilityPhase {
-  CONFIGURED = 0,
-  START = 1,
-  APPLY = 2,
-  UNSOL_RSP = 3,
-  FINISH = 4,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapabilityStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapabilityStatus.aidl
deleted file mode 100644
index 72e0bd5..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCapabilityStatus.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum RadioCapabilityStatus {
-  NONE = 0,
-  SUCCESS = 1,
-  FAIL = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCdmaSmsConst.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCdmaSmsConst.aidl
deleted file mode 100644
index 7e5c471..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioCdmaSmsConst.aidl
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum RadioCdmaSmsConst {
-  ADDRESS_MAX = 36,
-  SUBADDRESS_MAX = 36,
-  BEARER_DATA_MAX = 255,
-  UDH_MAX_SND_SIZE = 128,
-  UDH_EO_DATA_SEGMENT_MAX = 131,
-  MAX_UD_HEADERS = 7,
-  USER_DATA_MAX = 229,
-  UDH_LARGE_PIC_SIZE = 128,
-  UDH_SMALL_PIC_SIZE = 32,
-  UDH_VAR_PIC_SIZE = 134,
-  UDH_ANIM_NUM_BITMAPS = 4,
-  UDH_LARGE_BITMAP_SIZE = 32,
-  UDH_SMALL_BITMAP_SIZE = 8,
-  UDH_OTHER_SIZE = 226,
-  IP_ADDRESS_SIZE = 4,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioConst.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioConst.aidl
index d37f13b..d111a0d 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioConst.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioConst.aidl
@@ -48,4 +48,5 @@
   NUM_SERVICE_CLASSES = 7,
   NUM_TX_POWER_LEVELS = 5,
   RADIO_ACCESS_SPECIFIER_MAX_SIZE = 8,
+  P2_CONSTANT_NO_P2 = -1,
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioFrequencyInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioFrequencyInfo.aidl
index 6c07045..cd0f6c2 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioFrequencyInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioFrequencyInfo.aidl
@@ -35,6 +35,10 @@
 @VintfStability
 union RadioFrequencyInfo {
   boolean noinit;
-  android.hardware.radio.FrequencyRange range;
+  int range;
   int channelNumber;
+  const int FREQUENCY_RANGE_LOW = 1;
+  const int FREQUENCY_RANGE_MID = 2;
+  const int FREQUENCY_RANGE_HIGH = 3;
+  const int FREQUENCY_RANGE_MMWAVE = 4;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResult.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResult.aidl
index 78c5c2d..e5b5aa5 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResult.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResult.aidl
@@ -39,5 +39,5 @@
   android.hardware.radio.RegistrationFailCause reasonForDenial;
   android.hardware.radio.CellIdentity cellIdentity;
   String registeredPlmn;
-  android.hardware.radio.RegStateResultAccessTechnologySpecificInfo accessTechnologySpecificInfo;
+  android.hardware.radio.AccessTechnologySpecificInfo accessTechnologySpecificInfo;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResultAccessTechnologySpecificInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResultAccessTechnologySpecificInfo.aidl
deleted file mode 100644
index 6ce6398..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResultAccessTechnologySpecificInfo.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-union RegStateResultAccessTechnologySpecificInfo {
-  boolean noinit;
-  android.hardware.radio.RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo cdmaInfo;
-  android.hardware.radio.RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo eutranInfo;
-  android.hardware.radio.NrVopsInfo ngranNrVopsInfo;
-  boolean geranDtmSupported;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo.aidl
deleted file mode 100644
index ed422eb..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@VintfStability
-parcelable RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo {
-  android.hardware.radio.LteVopsInfo lteVopsInfo;
-  android.hardware.radio.NrIndicators nrIndicators;
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RestrictedState.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RestrictedState.aidl
deleted file mode 100644
index dc83ba5..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RestrictedState.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum RestrictedState {
-  NONE = 0,
-  CS_EMERGENCY = 1,
-  CS_NORMAL = 2,
-  CS_ALL = 4,
-  PS_ALL = 16,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RouteSelectionDescriptor.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RouteSelectionDescriptor.aidl
index 689ee2f..233b8b5 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RouteSelectionDescriptor.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RouteSelectionDescriptor.aidl
@@ -35,8 +35,12 @@
 @VintfStability
 parcelable RouteSelectionDescriptor {
   byte precedence;
-  android.hardware.radio.OptionalPdpProtocolType sessionType;
-  android.hardware.radio.OptionalSscMode sscMode;
+  android.hardware.radio.PdpProtocolType sessionType;
+  byte sscMode;
   android.hardware.radio.SliceInfo[] sliceInfo;
   String[] dnn;
+  const byte SSC_MODE_UNKNOWN = -1;
+  const byte SSC_MODE_1 = 1;
+  const byte SSC_MODE_2 = 2;
+  const byte SSC_MODE_3 = 3;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ScanIntervalRange.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ScanIntervalRange.aidl
deleted file mode 100644
index 3e6539b..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ScanIntervalRange.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum ScanIntervalRange {
-  MIN = 5,
-  MAX = 300,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ScanStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ScanStatus.aidl
deleted file mode 100644
index f8810b6..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ScanStatus.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum ScanStatus {
-  PARTIAL = 1,
-  COMPLETE = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ScanType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ScanType.aidl
deleted file mode 100644
index 7d51ce2..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/ScanType.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum ScanType {
-  ONE_SHOT = 0,
-  PERIODIC = 1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SelectUiccSub.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SelectUiccSub.aidl
index a285f64..b7acc66 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SelectUiccSub.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SelectUiccSub.aidl
@@ -36,6 +36,11 @@
 parcelable SelectUiccSub {
   int slot;
   int appIndex;
-  android.hardware.radio.SubscriptionType subType;
-  android.hardware.radio.UiccSubActStatus actStatus;
+  int subType;
+  int actStatus;
+  const int SUBSCRIPTION_TYPE_1 = 0;
+  const int SUBSCRIPTION_TYPE_2 = 1;
+  const int SUBSCRIPTION_TYPE_3 = 2;
+  const int ACT_STATUS_DEACTIVATE = 0;
+  const int ACT_STATUS_ACTIVATE = 1;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SetupDataCallResult.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SetupDataCallResult.aidl
index ae4493d..edf7a8a 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SetupDataCallResult.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SetupDataCallResult.aidl
@@ -37,7 +37,7 @@
   android.hardware.radio.DataCallFailCause cause;
   long suggestedRetryTime;
   int cid;
-  android.hardware.radio.DataConnActiveStatus active;
+  int active;
   android.hardware.radio.PdpProtocolType type;
   String ifname;
   android.hardware.radio.LinkAddress[] addresses;
@@ -48,8 +48,15 @@
   int mtuV6;
   android.hardware.radio.Qos defaultQos;
   android.hardware.radio.QosSession[] qosSessions;
-  android.hardware.radio.HandoverFailureMode handoverFailureMode;
+  byte handoverFailureMode;
   int pduSessionId;
-  android.hardware.radio.OptionalSliceInfo sliceInfo;
+  @nullable android.hardware.radio.SliceInfo sliceInfo;
   android.hardware.radio.TrafficDescriptor[] trafficDescriptors;
+  const int DATA_CONNECTION_STATUS_INACTIVE = 0;
+  const int DATA_CONNECTION_STATUS_DORMANT = 1;
+  const int DATA_CONNECTION_STATUS_ACTIVE = 2;
+  const byte HANDOVER_FAILURE_MODE_LEGACY = 0;
+  const byte HANDOVER_FAILURE_MODE_DO_FALLBACK = 1;
+  const byte HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 2;
+  const byte HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 3;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SignalMeasurementType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SignalMeasurementType.aidl
deleted file mode 100644
index 7f864e5..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SignalMeasurementType.aidl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum SignalMeasurementType {
-  RSSI = 1,
-  RSCP = 2,
-  RSRP = 3,
-  RSRQ = 4,
-  RSSNR = 5,
-  SSRSRP = 6,
-  SSRSRQ = 7,
-  SSSINR = 8,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SignalThresholdInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SignalThresholdInfo.aidl
index f519d69..381984e 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SignalThresholdInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SignalThresholdInfo.aidl
@@ -34,9 +34,17 @@
 package android.hardware.radio;
 @VintfStability
 parcelable SignalThresholdInfo {
-  android.hardware.radio.SignalMeasurementType signalMeasurement;
+  int signalMeasurement;
   int hysteresisMs;
   int hysteresisDb;
   int[] thresholds;
   boolean isEnabled;
+  const int SIGNAL_MEASUREMENT_TYPE_RSSI = 1;
+  const int SIGNAL_MEASUREMENT_TYPE_RSCP = 2;
+  const int SIGNAL_MEASUREMENT_TYPE_RSRP = 3;
+  const int SIGNAL_MEASUREMENT_TYPE_RSRQ = 4;
+  const int SIGNAL_MEASUREMENT_TYPE_RSSNR = 5;
+  const int SIGNAL_MEASUREMENT_TYPE_SSRSRP = 6;
+  const int SIGNAL_MEASUREMENT_TYPE_SSRSRQ = 7;
+  const int SIGNAL_MEASUREMENT_TYPE_SSSINR = 8;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SimRefreshResult.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SimRefreshResult.aidl
index 720c8a2..ce870c5 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SimRefreshResult.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SimRefreshResult.aidl
@@ -34,7 +34,10 @@
 package android.hardware.radio;
 @VintfStability
 parcelable SimRefreshResult {
-  android.hardware.radio.SimRefreshType type;
+  int type;
   int efId;
   String aid;
+  const int TYPE_SIM_FILE_UPDATE = 0;
+  const int TYPE_SIM_INIT = 1;
+  const int TYPE_SIM_RESET = 2;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SimRefreshType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SimRefreshType.aidl
deleted file mode 100644
index b114ec7..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SimRefreshType.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum SimRefreshType {
-  SIM_FILE_UPDATE = 0,
-  SIM_INIT = 1,
-  SIM_RESET = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceInfo.aidl
index 8b36380..f49ff3b 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceInfo.aidl
@@ -34,9 +34,19 @@
 package android.hardware.radio;
 @VintfStability
 parcelable SliceInfo {
-  android.hardware.radio.SliceServiceType sst;
+  byte sliceServiceType;
   int sliceDifferentiator;
-  android.hardware.radio.SliceServiceType mappedHplmnSst;
+  byte mappedHplmnSst;
   int mappedHplmnSD;
-  android.hardware.radio.SliceStatus status;
+  byte status;
+  const byte SERVICE_TYPE_NONE = 0;
+  const byte SERVICE_TYPE_EMBB = 1;
+  const byte SERVICE_TYPE_URLLC = 2;
+  const byte SERVICE_TYPE_MIOT = 3;
+  const byte STATUS_UNKNOWN = 0;
+  const byte STATUS_CONFIGURED = 1;
+  const byte STATUS_ALLOWED = 2;
+  const byte STATUS_REJECTED_NOT_AVAILABLE_IN_PLMN = 3;
+  const byte STATUS_REJECTED_NOT_AVAILABLE_IN_REG_AREA = 4;
+  const byte STATUS_DEFAULT_CONFIGURED = 5;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceServiceType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceServiceType.aidl
deleted file mode 100644
index d0a9f58..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceServiceType.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum SliceServiceType {
-  NONE = 0,
-  EMBB = 1,
-  URLLC = 2,
-  MIOT = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceStatus.aidl
deleted file mode 100644
index 3fa1ee6..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SliceStatus.aidl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum SliceStatus {
-  UNKNOWN = 0,
-  CONFIGURED = 1,
-  ALLOWED = 2,
-  REJECTED_NOT_AVAILABLE_IN_PLMN = 3,
-  REJECTED_NOT_AVAILABLE_IN_REG_AREA = 4,
-  DEFAULT_CONFIGURED = 5,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SmsWriteArgs.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SmsWriteArgs.aidl
index 6b0d9bf..a42339d 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SmsWriteArgs.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SmsWriteArgs.aidl
@@ -34,7 +34,11 @@
 package android.hardware.radio;
 @VintfStability
 parcelable SmsWriteArgs {
-  android.hardware.radio.SmsWriteArgsStatus status;
+  int status;
   String pdu;
   String smsc;
+  const int STATUS_REC_UNREAD = 0;
+  const int STATUS_REC_READ = 1;
+  const int STATUS_STO_UNSENT = 2;
+  const int STATUS_STO_SENT = 3;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SmsWriteArgsStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SmsWriteArgsStatus.aidl
deleted file mode 100644
index 31a3f42..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SmsWriteArgsStatus.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum SmsWriteArgsStatus {
-  REC_UNREAD = 0,
-  REC_READ = 1,
-  STO_UNSENT = 2,
-  STO_SENT = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SsRequestType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SsRequestType.aidl
deleted file mode 100644
index 75ad9bb..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SsRequestType.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum SsRequestType {
-  ACTIVATION = 0,
-  DEACTIVATION = 1,
-  INTERROGATION = 2,
-  REGISTRATION = 3,
-  ERASURE = 4,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SsServiceType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SsServiceType.aidl
deleted file mode 100644
index c3506b1..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SsServiceType.aidl
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum SsServiceType {
-  CFU = 0,
-  CF_BUSY = 1,
-  CF_NO_REPLY = 2,
-  CF_NOT_REACHABLE = 3,
-  CF_ALL = 4,
-  CF_ALL_CONDITIONAL = 5,
-  CLIP = 6,
-  CLIR = 7,
-  COLP = 8,
-  COLR = 9,
-  WAIT = 10,
-  BAOC = 11,
-  BAOIC = 12,
-  BAOIC_EXC_HOME = 13,
-  BAIC = 14,
-  BAIC_ROAMING = 15,
-  ALL_BARRING = 16,
-  OUTGOING_BARRING = 17,
-  INCOMING_BARRING = 18,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SsTeleserviceType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SsTeleserviceType.aidl
deleted file mode 100644
index f06014c..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SsTeleserviceType.aidl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum SsTeleserviceType {
-  ALL_TELE_AND_BEARER_SERVICES = 0,
-  ALL_TELESEVICES = 1,
-  TELEPHONY = 2,
-  ALL_DATA_TELESERVICES = 3,
-  SMS_SERVICES = 4,
-  ALL_TELESERVICES_EXCEPT_SMS = 5,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SscMode.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SscMode.aidl
deleted file mode 100644
index e2c3e09..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SscMode.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum SscMode {
-  MODE_1 = 1,
-  MODE_2 = 2,
-  MODE_3 = 3,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/StkCcUnsolSsResult.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/StkCcUnsolSsResult.aidl
index 1e4f95b..31c2494 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/StkCcUnsolSsResult.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/StkCcUnsolSsResult.aidl
@@ -34,11 +34,51 @@
 package android.hardware.radio;
 @VintfStability
 parcelable StkCcUnsolSsResult {
-  android.hardware.radio.SsServiceType serviceType;
-  android.hardware.radio.SsRequestType requestType;
-  android.hardware.radio.SsTeleserviceType teleserviceType;
-  android.hardware.radio.SuppServiceClass serviceClass;
+  int serviceType;
+  int requestType;
+  int teleserviceType;
+  int serviceClass;
   android.hardware.radio.RadioError result;
   android.hardware.radio.SsInfoData[] ssInfo;
   android.hardware.radio.CfData[] cfData;
+  const int REQUEST_TYPE_ACTIVATION = 0;
+  const int REQUEST_TYPE_DEACTIVATION = 1;
+  const int REQUEST_TYPE_INTERROGATION = 2;
+  const int REQUEST_TYPE_REGISTRATION = 3;
+  const int REQUEST_TYPE_ERASURE = 4;
+  const int SERVICE_TYPE_CFU = 0;
+  const int SERVICE_TYPE_CF_BUSY = 1;
+  const int SERVICE_TYPE_CF_NO_REPLY = 2;
+  const int SERVICE_TYPE_CF_NOT_REACHABLE = 3;
+  const int SERVICE_TYPE_CF_ALL = 4;
+  const int SERVICE_TYPE_CF_ALL_CONDITIONAL = 5;
+  const int SERVICE_TYPE_CLIP = 6;
+  const int SERVICE_TYPE_CLIR = 7;
+  const int SERVICE_TYPE_COLP = 8;
+  const int SERVICE_TYPE_COLR = 9;
+  const int SERVICE_TYPE_WAIT = 10;
+  const int SERVICE_TYPE_BAOC = 11;
+  const int SERVICE_TYPE_BAOIC = 12;
+  const int SERVICE_TYPE_BAOIC_EXC_HOME = 13;
+  const int SERVICE_TYPE_BAIC = 14;
+  const int SERVICE_TYPE_BAIC_ROAMING = 15;
+  const int SERVICE_TYPE_ALL_BARRING = 16;
+  const int SERVICE_TYPE_OUTGOING_BARRING = 17;
+  const int SERVICE_TYPE_INCOMING_BARRING = 18;
+  const int TELESERVICE_TYPE_ALL_TELE_AND_BEARER_SERVICES = 0;
+  const int TELESERVICE_TYPE_ALL_TELESEVICES = 1;
+  const int TELESERVICE_TYPE_TELEPHONY = 2;
+  const int TELESERVICE_TYPE_ALL_DATA_TELESERVICES = 3;
+  const int TELESERVICE_TYPE_SMS_SERVICES = 4;
+  const int TELESERVICE_TYPE_ALL_TELESERVICES_EXCEPT_SMS = 5;
+  const int SUPP_SERVICE_CLASS_NONE = 0;
+  const int SUPP_SERVICE_CLASS_VOICE = 1;
+  const int SUPP_SERVICE_CLASS_DATA = 2;
+  const int SUPP_SERVICE_CLASS_FAX = 4;
+  const int SUPP_SERVICE_CLASS_SMS = 8;
+  const int SUPP_SERVICE_CLASS_DATA_SYNC = 16;
+  const int SUPP_SERVICE_CLASS_DATA_ASYNC = 32;
+  const int SUPP_SERVICE_CLASS_PACKET = 64;
+  const int SUPP_SERVICE_CLASS_PAD = 128;
+  const int SUPP_SERVICE_CLASS_MAX = 128;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SubscriptionType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SubscriptionType.aidl
deleted file mode 100644
index f469f2f..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SubscriptionType.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum SubscriptionType {
-  SUBSCRIPTION_1 = 0,
-  SUBSCRIPTION_2 = 1,
-  SUBSCRIPTION_3 = 2,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SuppServiceClass.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SuppServiceClass.aidl
deleted file mode 100644
index e59f40b..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/SuppServiceClass.aidl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum SuppServiceClass {
-  NONE = 0,
-  VOICE = 1,
-  DATA = 2,
-  FAX = 4,
-  SMS = 8,
-  DATA_SYNC = 16,
-  DATA_ASYNC = 32,
-  PACKET = 64,
-  PAD = 128,
-  MAX = 128,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/TimeStampType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/TimeStampType.aidl
deleted file mode 100644
index ae70522..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/TimeStampType.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum TimeStampType {
-  UNKNOWN = 0,
-  ANTENNA = 1,
-  MODEM = 2,
-  OEM_RIL = 3,
-  JAVA_RIL = 4,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/TrafficDescriptor.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/TrafficDescriptor.aidl
index 9f46848..7dabe99 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/TrafficDescriptor.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/TrafficDescriptor.aidl
@@ -34,6 +34,6 @@
 package android.hardware.radio;
 @VintfStability
 parcelable TrafficDescriptor {
-  android.hardware.radio.OptionalDnn dnn;
-  android.hardware.radio.OptionalOsAppId osAppId;
+  @nullable String dnn;
+  @nullable android.hardware.radio.OsAppId osAppId;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UiccSubActStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UiccSubActStatus.aidl
deleted file mode 100644
index 5ec511e..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UiccSubActStatus.aidl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum UiccSubActStatus {
-  DEACTIVATE = 0,
-  ACTIVATE = 1,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UrspRule.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UrspRule.aidl
index ababb29..30c851c 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UrspRule.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UrspRule.aidl
@@ -34,7 +34,7 @@
 package android.hardware.radio;
 @VintfStability
 parcelable UrspRule {
-  byte precedence;
+  int precedence;
   android.hardware.radio.TrafficDescriptor[] trafficDescriptors;
   android.hardware.radio.RouteSelectionDescriptor[] routeSelectionDescriptor;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusDcs.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusDcs.aidl
deleted file mode 100644
index cf1baca..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusDcs.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum UusDcs {
-  USP = 0,
-  OSIHLP = 1,
-  X244 = 2,
-  RMCF = 3,
-  IA5C = 4,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusInfo.aidl
index 3551fe3..5b7190e 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusInfo.aidl
@@ -34,7 +34,19 @@
 package android.hardware.radio;
 @VintfStability
 parcelable UusInfo {
-  android.hardware.radio.UusType uusType;
-  android.hardware.radio.UusDcs uusDcs;
+  int uusType;
+  int uusDcs;
   String uusData;
+  const int UUS_DCS_USP = 0;
+  const int UUS_DCS_OSIHLP = 1;
+  const int UUS_DCS_X244 = 2;
+  const int UUS_DCS_RMCF = 3;
+  const int UUS_DCS_IA5C = 4;
+  const int UUS_TYPE_TYPE1_IMPLICIT = 0;
+  const int UUS_TYPE_TYPE1_REQUIRED = 1;
+  const int UUS_TYPE_TYPE1_NOT_REQUIRED = 2;
+  const int UUS_TYPE_TYPE2_REQUIRED = 3;
+  const int UUS_TYPE_TYPE2_NOT_REQUIRED = 4;
+  const int UUS_TYPE_TYPE3_REQUIRED = 5;
+  const int UUS_TYPE_TYPE3_NOT_REQUIRED = 6;
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusType.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusType.aidl
deleted file mode 100644
index 7176d40..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/UusType.aidl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="int") @VintfStability
-enum UusType {
-  TYPE1_IMPLICIT = 0,
-  TYPE1_REQUIRED = 1,
-  TYPE1_NOT_REQUIRED = 2,
-  TYPE2_REQUIRED = 3,
-  TYPE2_NOT_REQUIRED = 4,
-  TYPE3_REQUIRED = 5,
-  TYPE3_NOT_REQUIRED = 6,
-}
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/VopsIndicator.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/VopsIndicator.aidl
deleted file mode 100644
index 028b719..0000000
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/VopsIndicator.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-//     the interface (from the latest frozen version), the build system will
-//     prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package android.hardware.radio;
-@Backing(type="byte") @VintfStability
-enum VopsIndicator {
-  VOPS_NOT_SUPPORTED = 0,
-  VOPS_OVER_3GPP = 1,
-  VOPS_OVER_NON_3GPP = 2,
-}
diff --git a/radio/aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfo.aidl b/radio/aidl/android/hardware/radio/AccessTechnologySpecificInfo.aidl
similarity index 73%
rename from radio/aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfo.aidl
rename to radio/aidl/android/hardware/radio/AccessTechnologySpecificInfo.aidl
index b22e413..6f0640c 100644
--- a/radio/aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfo.aidl
+++ b/radio/aidl/android/hardware/radio/AccessTechnologySpecificInfo.aidl
@@ -16,15 +16,15 @@
 
 package android.hardware.radio;
 
+import android.hardware.radio.Cdma2000RegistrationInfo;
+import android.hardware.radio.EutranRegistrationInfo;
 import android.hardware.radio.NrVopsInfo;
-import android.hardware.radio.RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo;
-import android.hardware.radio.RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo;
 
 @VintfStability
-union RegStateResultAccessTechnologySpecificInfo {
+union AccessTechnologySpecificInfo {
     boolean noinit;
-    RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo cdmaInfo;
-    RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo eutranInfo;
+    Cdma2000RegistrationInfo cdmaInfo;
+    EutranRegistrationInfo eutranInfo;
     /**
      * Network capabilities for voice over PS services. This info is valid only on NR network and
      * must be present when the device is camped on NR. VopsInfo must be empty when the device is
diff --git a/radio/aidl/android/hardware/radio/AddressProperty.aidl b/radio/aidl/android/hardware/radio/AddressProperty.aidl
deleted file mode 100644
index dbafc17..0000000
--- a/radio/aidl/android/hardware/radio/AddressProperty.aidl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * The properties of the link address. This enum reflects the definition in if_addr.h in
- * Linux kernel.
- */
-@VintfStability
-@Backing(type="int")
-enum AddressProperty {
-    NONE = 0,
-    /**
-     * Indicates this address is deprecated
-     */
-    DEPRECATED = 0x20,
-}
diff --git a/radio/aidl/android/hardware/radio/AppState.aidl b/radio/aidl/android/hardware/radio/AppState.aidl
deleted file mode 100644
index 9488282..0000000
--- a/radio/aidl/android/hardware/radio/AppState.aidl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum AppState {
-    UNKNOWN,
-    DETECTED,
-    /**
-     * If PIN1 or UPin is required
-     */
-    PIN,
-    /**
-     * If PUK1 or Puk for Upin is required
-     */
-    PUK,
-    /**
-     * perso_substate must be looked at when app_state is assigned to this value
-     */
-    SUBSCRIPTION_PERSO,
-    READY,
-}
diff --git a/radio/aidl/android/hardware/radio/AppStatus.aidl b/radio/aidl/android/hardware/radio/AppStatus.aidl
index 6b62697..6fd17e4 100644
--- a/radio/aidl/android/hardware/radio/AppStatus.aidl
+++ b/radio/aidl/android/hardware/radio/AppStatus.aidl
@@ -16,15 +16,42 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.AppState;
-import android.hardware.radio.AppType;
 import android.hardware.radio.PersoSubstate;
 import android.hardware.radio.PinState;
 
 @VintfStability
 parcelable AppStatus {
-    AppType appType;
-    AppState appState;
+    const int APP_STATE_UNKNOWN = 0;
+    const int APP_STATE_DETECTED = 1;
+    /**
+     * If PIN1 or UPin is required
+     */
+    const int APP_STATE_PIN = 2;
+    /**
+     * If PUK1 or Puk for Upin is required
+     */
+    const int APP_STATE_PUK = 3;
+    /**
+     * perso_substate must be looked at when app_state is assigned to this value
+     */
+    const int APP_STATE_SUBSCRIPTION_PERSO = 4;
+    const int APP_STATE_READY = 5;
+
+    const int APP_TYPE_UNKNOWN = 0;
+    const int APP_TYPE_SIM = 1;
+    const int APP_TYPE_USIM = 2;
+    const int APP_TYPE_RUIM = 3;
+    const int APP_TYPE_CSIM = 4;
+    const int APP_TYPE_ISIM = 5;
+
+    /**
+     * Values are APP_TYPE_
+     */
+    int appType;
+    /**
+     * Values are APP_STATE_
+     */
+    int appState;
     /**
      * Applicable only if appState == SUBSCRIPTION_PERSO
      */
@@ -37,7 +64,7 @@
     /**
      * Applicable to USIM, CSIM and ISIM
      */
-    int pin1Replaced;
+    boolean pin1Replaced;
     PinState pin1;
     PinState pin2;
 }
diff --git a/radio/aidl/android/hardware/radio/AppType.aidl b/radio/aidl/android/hardware/radio/AppType.aidl
deleted file mode 100644
index 8403f7d..0000000
--- a/radio/aidl/android/hardware/radio/AppType.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum AppType {
-    UNKNOWN,
-    SIM,
-    USIM,
-    RUIM,
-    CSIM,
-    ISIM,
-}
diff --git a/radio/aidl/android/hardware/radio/BarringInfo.aidl b/radio/aidl/android/hardware/radio/BarringInfo.aidl
index c50fa4b..2bffa2e 100644
--- a/radio/aidl/android/hardware/radio/BarringInfo.aidl
+++ b/radio/aidl/android/hardware/radio/BarringInfo.aidl
@@ -16,27 +16,118 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.BarringInfoBarringType;
-import android.hardware.radio.BarringInfoBarringTypeSpecificInfo;
-import android.hardware.radio.BarringInfoServiceType;
+import android.hardware.radio.BarringTypeSpecificInfo;
 
 @VintfStability
 parcelable BarringInfo {
     /**
+     * Device is not barred for the given service
+     */
+    const int BARRING_TYPE_NONE = 0;
+    /**
+     * Device may be barred based on time and probability factors
+     */
+    const int BARRING_TYPE_CONDITIONAL = 1;
+    /*
+     * Device is unconditionally barred
+     */
+    const int BARRING_TYPE_UNCONDITIONAL = 2;
+
+    /**
+     * Applicable to UTRAN
+     * Barring for all CS services, including registration
+     */
+    const int SERVICE_TYPE_CS_SERVICE = 0;
+    /**
+     * Barring for all PS services, including registration
+     */
+    const int SERVICE_TYPE_PS_SERVICE = 1;
+    /**
+     * Barring for mobile-originated circuit-switched voice calls
+     */
+    const int SERVICE_TYPE_CS_VOICE = 2;
+    /**
+     * Applicable to EUTRAN, NGRAN
+     * Barring for mobile-originated signalling for any purpose
+     */
+    const int SERVICE_TYPE_MO_SIGNALLING = 3;
+    /**
+     * Barring for mobile-originated internet or other interactive data
+     */
+    const int SERVICE_TYPE_MO_DATA = 4;
+    /**
+     * Barring for circuit-switched fallback calling
+     */
+    const int SERVICE_TYPE_CS_FALLBACK = 5;
+    /**
+     * Barring for IMS voice calling
+     */
+    const int SERVICE_TYPE_MMTEL_VOICE = 6;
+    /**
+     * Barring for IMS video calling
+     */
+    const int SERVICE_TYPE_MMTEL_VIDEO = 7;
+    /**
+     * Applicable to UTRAN, EUTRAN, NGRAN
+     * Barring for emergency services, either CS or emergency MMTEL
+     */
+    const int SERVICE_TYPE_EMERGENCY = 8;
+    /**
+     * Barring for short message services
+     */
+    const int SERVICE_TYPE_SMS = 9;
+    /**
+     * Operator-specific barring codes; applicable to NGRAN
+     */
+    const int SERVICE_TYPE_OPERATOR_1 = 1001;
+    const int SERVICE_TYPE_OPERATOR_2 = 1002;
+    const int SERVICE_TYPE_OPERATOR_3 = 1003;
+    const int SERVICE_TYPE_OPERATOR_4 = 1004;
+    const int SERVICE_TYPE_OPERATOR_5 = 1005;
+    const int SERVICE_TYPE_OPERATOR_6 = 1006;
+    const int SERVICE_TYPE_OPERATOR_7 = 1007;
+    const int SERVICE_TYPE_OPERATOR_8 = 1008;
+    const int SERVICE_TYPE_OPERATOR_9 = 1009;
+    const int SERVICE_TYPE_OPERATOR_10 = 1010;
+    const int SERVICE_TYPE_OPERATOR_11 = 1011;
+    const int SERVICE_TYPE_OPERATOR_12 = 1012;
+    const int SERVICE_TYPE_OPERATOR_13 = 1013;
+    const int SERVICE_TYPE_OPERATOR_14 = 1014;
+    const int SERVICE_TYPE_OPERATOR_15 = 1015;
+    const int SERVICE_TYPE_OPERATOR_16 = 1016;
+    const int SERVICE_TYPE_OPERATOR_17 = 1017;
+    const int SERVICE_TYPE_OPERATOR_18 = 1018;
+    const int SERVICE_TYPE_OPERATOR_19 = 1019;
+    const int SERVICE_TYPE_OPERATOR_20 = 1020;
+    const int SERVICE_TYPE_OPERATOR_21 = 1021;
+    const int SERVICE_TYPE_OPERATOR_22 = 1022;
+    const int SERVICE_TYPE_OPERATOR_23 = 1023;
+    const int SERVICE_TYPE_OPERATOR_24 = 1024;
+    const int SERVICE_TYPE_OPERATOR_25 = 1025;
+    const int SERVICE_TYPE_OPERATOR_26 = 1026;
+    const int SERVICE_TYPE_OPERATOR_27 = 1027;
+    const int SERVICE_TYPE_OPERATOR_28 = 1028;
+    const int SERVICE_TYPE_OPERATOR_29 = 1029;
+    const int SERVICE_TYPE_OPERATOR_30 = 1030;
+    const int SERVICE_TYPE_OPERATOR_31 = 1031;
+    const int SERVICE_TYPE_OPERATOR_32 = 1032;
+    /**
      * Combined list of barring services for UTRAN, EUTRAN, and NGRAN.
      *
      * Barring information is defined in:
      * -UTRAN - 3gpp 25.331 Sec 10.2.48.8.6.
      * -EUTRAN - 3gpp 36.331 Sec 6.3.1 SystemInformationBlockType2
      * -NGRAN - 3gpp 38.331 Sec 6.3.2 UAC-BarringInfo and 22.261 Sec 6.22.2.[2-3]
+     * Values are SERVICE_TYPE_
      */
-    BarringInfoServiceType serviceType;
+    int serviceType;
     /**
      * The type of barring applied to the service
+     * Values are BARRING_TYPE_
      */
-    BarringInfoBarringType barringType;
+    int barringType;
     /**
      * Type-specific barring info if applicable
      */
-    BarringInfoBarringTypeSpecificInfo barringTypeSpecificInfo;
+    @nullable BarringTypeSpecificInfo barringTypeSpecificInfo;
 }
diff --git a/radio/aidl/android/hardware/radio/BarringInfoBarringType.aidl b/radio/aidl/android/hardware/radio/BarringInfoBarringType.aidl
deleted file mode 100644
index 41f5fbb..0000000
--- a/radio/aidl/android/hardware/radio/BarringInfoBarringType.aidl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum BarringInfoBarringType {
-    /**
-     * Device is not barred for the given service
-     */
-    NONE,
-    /**
-     * Device may be barred based on time and probability factors
-     */
-    CONDITIONAL,
-    /*
-     * Device is unconditionally barred
-     */
-    UNCONDITIONAL,
-}
diff --git a/radio/aidl/android/hardware/radio/BarringInfoBarringTypeSpecificInfo.aidl b/radio/aidl/android/hardware/radio/BarringInfoBarringTypeSpecificInfo.aidl
deleted file mode 100644
index 18f309d..0000000
--- a/radio/aidl/android/hardware/radio/BarringInfoBarringTypeSpecificInfo.aidl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.BarringInfoBarringTypeSpecificInfoConditional;
-
-@VintfStability
-union BarringInfoBarringTypeSpecificInfo {
-    /**
-     * Barring type is either none or unconditional
-     */
-    boolean noinit;
-    /**
-     * Must be included if barring is conditional
-     */
-    BarringInfoBarringTypeSpecificInfoConditional conditional;
-}
diff --git a/radio/aidl/android/hardware/radio/BarringInfoServiceType.aidl b/radio/aidl/android/hardware/radio/BarringInfoServiceType.aidl
deleted file mode 100644
index 1fa52a0..0000000
--- a/radio/aidl/android/hardware/radio/BarringInfoServiceType.aidl
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum BarringInfoServiceType {
-    /**
-     * Applicable to UTRAN
-     * Barring for all CS services, including registration
-     */
-    CS_SERVICE,
-    /**
-     * Barring for all PS services, including registration
-     */
-    PS_SERVICE,
-    /**
-     * Barring for mobile-originated circuit-switched voice calls
-     */
-    CS_VOICE,
-    /**
-     * Applicable to EUTRAN, NGRAN
-     * Barring for mobile-originated signalling for any purpose
-     */
-    MO_SIGNALLING,
-    /**
-     * Barring for mobile-originated internet or other interactive data
-     */
-    MO_DATA,
-    /**
-     * Barring for circuit-switched fallback calling
-     */
-    CS_FALLBACK,
-    /**
-     * Barring for IMS voice calling
-     */
-    MMTEL_VOICE,
-    /**
-     * Barring for IMS video calling
-     */
-    MMTEL_VIDEO,
-    /**
-     * Applicable to UTRAN, EUTRAN, NGRAN
-     * Barring for emergency services, either CS or emergency MMTEL
-     */
-    EMERGENCY,
-    /**
-     * Barring for short message services
-     */
-    SMS,
-    /**
-     * Operator-specific barring codes; applicable to NGRAN
-     */
-    OPERATOR_1 = 1001,
-    OPERATOR_2 = 1002,
-    OPERATOR_3 = 1003,
-    OPERATOR_4 = 1004,
-    OPERATOR_5 = 1005,
-    OPERATOR_6 = 1006,
-    OPERATOR_7 = 1007,
-    OPERATOR_8 = 1008,
-    OPERATOR_9 = 1009,
-    OPERATOR_10 = 1010,
-    OPERATOR_11 = 1011,
-    OPERATOR_12 = 1012,
-    OPERATOR_13 = 1013,
-    OPERATOR_14 = 1014,
-    OPERATOR_15 = 1015,
-    OPERATOR_16 = 1016,
-    OPERATOR_17 = 1017,
-    OPERATOR_18 = 1018,
-    OPERATOR_19 = 1019,
-    OPERATOR_20 = 1020,
-    OPERATOR_21 = 1021,
-    OPERATOR_22 = 1022,
-    OPERATOR_23 = 1023,
-    OPERATOR_24 = 1024,
-    OPERATOR_25 = 1025,
-    OPERATOR_26 = 1026,
-    OPERATOR_27 = 1027,
-    OPERATOR_28 = 1028,
-    OPERATOR_29 = 1029,
-    OPERATOR_30 = 1030,
-    OPERATOR_31 = 1031,
-    OPERATOR_32 = 1032,
-}
diff --git a/radio/aidl/android/hardware/radio/BarringInfoBarringTypeSpecificInfoConditional.aidl b/radio/aidl/android/hardware/radio/BarringTypeSpecificInfo.aidl
similarity index 95%
rename from radio/aidl/android/hardware/radio/BarringInfoBarringTypeSpecificInfoConditional.aidl
rename to radio/aidl/android/hardware/radio/BarringTypeSpecificInfo.aidl
index e3b7dfa..c3b892b 100644
--- a/radio/aidl/android/hardware/radio/BarringInfoBarringTypeSpecificInfoConditional.aidl
+++ b/radio/aidl/android/hardware/radio/BarringTypeSpecificInfo.aidl
@@ -17,7 +17,7 @@
 package android.hardware.radio;
 
 @VintfStability
-parcelable BarringInfoBarringTypeSpecificInfoConditional {
+parcelable BarringTypeSpecificInfo {
     /**
      * The barring factor as a percentage 0-100
      */
diff --git a/radio/aidl/android/hardware/radio/Call.aidl b/radio/aidl/android/hardware/radio/Call.aidl
index 38cb3d3..467a5b9 100644
--- a/radio/aidl/android/hardware/radio/Call.aidl
+++ b/radio/aidl/android/hardware/radio/Call.aidl
@@ -17,13 +17,38 @@
 package android.hardware.radio;
 
 import android.hardware.radio.AudioQuality;
-import android.hardware.radio.CallPresentation;
-import android.hardware.radio.CallState;
 import android.hardware.radio.UusInfo;
 
 @VintfStability
 parcelable Call {
-    CallState state;
+    const int PRESENTATION_ALLOWED = 0;
+    const int PRESENTATION_RESTRICTED = 1;
+    const int PRESENTATION_UNKNOWN = 2;
+    const int PRESENTATION_PAYPHONE = 3;
+
+    const int STATE_ACTIVE = 0;
+    const int STATE_HOLDING = 1;
+    /**
+     * MO call only
+     */
+    const int STATE_DIALING = 2;
+    /**
+     * MO call only
+     */
+    const int STATE_ALERTING = 3;
+    /**
+     * MT call only
+     */
+    const int STATE_INCOMING = 4;
+    /**
+     * MT call only
+     */
+    const int STATE_WAITING = 5;
+
+    /**
+     * Values are STATE_
+     */
+    int state;
     /**
      * Connection index for use with, eg, AT+CHLD
      */
@@ -56,12 +81,18 @@
      * Remote party nummber
      */
     String number;
-    CallPresentation numberPresentation;
+    /**
+     * Values are PRESENTATION_
+     */
+    int numberPresentation;
     /**
      * Remote party name
      */
     String name;
-    CallPresentation namePresentation;
+    /**
+     * Values are PRESENTATION_
+     */
+    int namePresentation;
     /**
      * Vector of User-User Signaling Information
      */
diff --git a/radio/aidl/android/hardware/radio/CallForwardInfo.aidl b/radio/aidl/android/hardware/radio/CallForwardInfo.aidl
index 91a3055..1835631 100644
--- a/radio/aidl/android/hardware/radio/CallForwardInfo.aidl
+++ b/radio/aidl/android/hardware/radio/CallForwardInfo.aidl
@@ -16,18 +16,23 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.CallForwardInfoStatus;
-
 /**
  * See also com.android.internal.telephony.gsm.CallForwardInfo
  */
 @VintfStability
 parcelable CallForwardInfo {
+    const int STATUS_DISABLE = 0;
+    const int STATUS_ENABLE = 1;
+    const int STATUS_INTERROGATE = 2;
+    const int STATUS_REGISTRATION = 3;
+    const int STATUS_ERASURE = 4;
+
     /**
      * For queryCallForwardStatus() status is DISABLE (Not used by vendor code currently)
      * For setCallForward() status must be DISABLE, ENABLE, INTERROGATE, REGISTRATION, ERASURE
+     * Values are STATUS_
      */
-    CallForwardInfoStatus status;
+    int status;
     /**
      * From TS 27.007 7.11 "reason"
      */
diff --git a/radio/aidl/android/hardware/radio/CallForwardInfoStatus.aidl b/radio/aidl/android/hardware/radio/CallForwardInfoStatus.aidl
deleted file mode 100644
index f4ae503..0000000
--- a/radio/aidl/android/hardware/radio/CallForwardInfoStatus.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CallForwardInfoStatus {
-    DISABLE,
-    ENABLE,
-    INTERROGATE,
-    REGISTRATION,
-    ERASURE,
-}
diff --git a/radio/aidl/android/hardware/radio/CallPresentation.aidl b/radio/aidl/android/hardware/radio/CallPresentation.aidl
deleted file mode 100644
index 76b5f21..0000000
--- a/radio/aidl/android/hardware/radio/CallPresentation.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CallPresentation {
-    ALLOWED,
-    RESTRICTED,
-    UNKNOWN,
-    PAYPHONE,
-}
diff --git a/radio/aidl/android/hardware/radio/CallState.aidl b/radio/aidl/android/hardware/radio/CallState.aidl
deleted file mode 100644
index 4b6f1ac..0000000
--- a/radio/aidl/android/hardware/radio/CallState.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CallState {
-    ACTIVE,
-    HOLDING,
-    /**
-     * MO call only
-     */
-    DIALING,
-    /**
-     * MO call only
-     */
-    ALERTING,
-    /**
-     * MT call only
-     */
-    INCOMING,
-    /**
-     * MT call only
-     */
-    WAITING,
-}
diff --git a/radio/aidl/android/hardware/radio/CardState.aidl b/radio/aidl/android/hardware/radio/CardState.aidl
deleted file mode 100644
index c1bbee6..0000000
--- a/radio/aidl/android/hardware/radio/CardState.aidl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CardState {
-    /*
-     * Card is physically absent from device. (Some old modems use CardState.ABSENT when the SIM
-     * is powered off. This is no longer correct, however the platform will still support this
-     * legacy behavior.)
-     */
-    ABSENT,
-    /*
-     * Card is inserted in the device
-     */
-    PRESENT,
-    ERROR,
-    /*
-     * Card is present but not usable due to carrier restrictions
-     */
-    RESTRICTED,
-}
diff --git a/radio/aidl/android/hardware/radio/CardStatus.aidl b/radio/aidl/android/hardware/radio/CardStatus.aidl
index a8df53d..a6a287d 100644
--- a/radio/aidl/android/hardware/radio/CardStatus.aidl
+++ b/radio/aidl/android/hardware/radio/CardStatus.aidl
@@ -17,12 +17,30 @@
 package android.hardware.radio;
 
 import android.hardware.radio.AppStatus;
-import android.hardware.radio.CardState;
 import android.hardware.radio.PinState;
 
 @VintfStability
 parcelable CardStatus {
-    CardState cardState;
+    /*
+     * Card is physically absent from device. (Some old modems use CardState.ABSENT when the SIM
+     * is powered off. This is no longer correct, however the platform will still support this
+     * legacy behavior.)
+     */
+    const int STATE_ABSENT = 0;
+    /*
+     * Card is inserted in the device
+     */
+    const int STATE_PRESENT = 1;
+    const int STATE_ERROR = 2;
+    /*
+     * Card is present but not usable due to carrier restrictions
+     */
+    const int STATE_RESTRICTED = 3;
+
+    /**
+     * Values are STATE_
+     */
+    int cardState;
     /**
      * Applicable to USIM and CSIM
      */
diff --git a/radio/aidl/android/hardware/radio/Carrier.aidl b/radio/aidl/android/hardware/radio/Carrier.aidl
index be619b9..cde9b5f 100644
--- a/radio/aidl/android/hardware/radio/Carrier.aidl
+++ b/radio/aidl/android/hardware/radio/Carrier.aidl
@@ -16,16 +16,36 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.CarrierMatchType;
-
 @VintfStability
 parcelable Carrier {
+    /**
+     * Apply to all carrier with the same mcc/mnc
+     */
+    const int MATCH_TYPE_ALL = 0;
+    /**
+     * Use SPN and mcc/mnc to identify the carrier
+     */
+    const int MATCH_TYPE_SPN = 1;
+    /**
+     * Use IMSI prefix and mcc/mnc to identify the carrier
+     */
+    const int MATCH_TYPE_IMSI_PREFIX = 2;
+    /**
+     * Use GID1 and mcc/mnc to identify the carrier
+     */
+    const int MATCH_TYPE_GID1 = 3;
+    /**
+     * Use GID2 and mcc/mnc to identify the carrier
+     */
+    const int MATCH_TYPE_GID2 = 4;
+
     String mcc;
     String mnc;
     /**
      * Specify match type for the carrier. If it’s ALL, matchData is empty string; otherwise,
      * matchData is the value for the match type.
+     * Values are MATCH_TYPE_
      */
-    CarrierMatchType matchType;
+    int matchType;
     String matchData;
 }
diff --git a/radio/aidl/android/hardware/radio/CarrierMatchType.aidl b/radio/aidl/android/hardware/radio/CarrierMatchType.aidl
deleted file mode 100644
index 39b9466..0000000
--- a/radio/aidl/android/hardware/radio/CarrierMatchType.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CarrierMatchType {
-    /**
-     * Apply to all carrier with the same mcc/mnc
-     */
-    ALL,
-    /**
-     * Use SPN and mcc/mnc to identify the carrier
-     */
-    SPN,
-    /**
-     * Use IMSI prefix and mcc/mnc to identify the carrier
-     */
-    IMSI_PREFIX,
-    /**
-     * Use GID1 and mcc/mnc to identify the carrier
-     */
-    GID1,
-    /**
-     * Use GID2 and mcc/mnc to identify the carrier
-     */
-    GID2,
-}
diff --git a/radio/aidl/android/hardware/radio/CarrierRestrictions.aidl b/radio/aidl/android/hardware/radio/CarrierRestrictions.aidl
index 70df637..5e1f815 100644
--- a/radio/aidl/android/hardware/radio/CarrierRestrictions.aidl
+++ b/radio/aidl/android/hardware/radio/CarrierRestrictions.aidl
@@ -30,4 +30,18 @@
      * is ABCD, all carriers with the same mcc/mnc are allowed.
      */
     Carrier[] excludedCarriers;
+    /**
+     * Whether this is a carrier restriction with priority or not.
+     * If this is false, allowedCarriersPrioritized is not applicable.
+     */
+    boolean priority;
+    /**
+     * True means that only carriers included in the allowed list and not in the excluded list
+     * are permitted. Eg. allowedCarriers match mcc/mnc, excludedCarriers has same mcc/mnc and
+     * gid1 is ABCD. It means except the carrier whose gid1 is ABCD, all carriers with the
+     * same mcc/mnc are allowed.
+     * False means that all carriers are allowed except those included in the excluded list
+     * and not in the allowed list.
+     */
+    boolean allowedCarriersPrioritized;
 }
diff --git a/radio/aidl/android/hardware/radio/CarrierRestrictionsWithPriority.aidl b/radio/aidl/android/hardware/radio/CarrierRestrictionsWithPriority.aidl
deleted file mode 100644
index 057b016..0000000
--- a/radio/aidl/android/hardware/radio/CarrierRestrictionsWithPriority.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.Carrier;
-
-@VintfStability
-parcelable CarrierRestrictionsWithPriority {
-    /**
-     * List of allowed carriers.
-     * The character '?' is used as wildcard character to match any value.
-     */
-    Carrier[] allowedCarriers;
-    /**
-     * List of excluded carriers.
-     * The character '?' is used as wildcard character to match any value.
-     */
-    Carrier[] excludedCarriers;
-    /**
-     * True means that only carriers included in the allowed list and not in the excluded list
-     * are permitted. Eg. allowedCarriers match mcc/mnc, excludedCarriers has same mcc/mnc and
-     * gid1 is ABCD. It means except the carrier whose gid1 is ABCD, all carriers with the
-     * same mcc/mnc are allowed.
-     * False means that all carriers are allowed except those included in the excluded list
-     * and not in the allowed list.
-     */
-    boolean allowedCarriersPrioritized;
-}
diff --git a/radio/aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo.aidl b/radio/aidl/android/hardware/radio/Cdma2000RegistrationInfo.aidl
similarity index 85%
rename from radio/aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo.aidl
rename to radio/aidl/android/hardware/radio/Cdma2000RegistrationInfo.aidl
index 14f68ec..b9f3b66 100644
--- a/radio/aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo.aidl
+++ b/radio/aidl/android/hardware/radio/Cdma2000RegistrationInfo.aidl
@@ -16,10 +16,11 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.PrlIndicator;
-
 @VintfStability
-parcelable RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo {
+parcelable Cdma2000RegistrationInfo {
+    const int PRL_INDICATOR_NOT_REGISTERED = -1;
+    const int PRL_INDICATOR_NOT_IN_PRL = 0;
+    const int PRL_INDICATOR_IN_PRL = 1;
     /**
      * Concurrent services support indicator. if registered on a CDMA system.
      * false - Concurrent services not supported,
@@ -34,8 +35,9 @@
     /**
      * Indicates whether the current system is in the PRL if registered on a CDMA or EVDO system
      * or -1 if not. 0=not in the PRL, 1=in the PRL.
+     * Values are PRL_INDICATOR_
      */
-    PrlIndicator systemIsInPrl;
+    int systemIsInPrl;
     /**
      * Default Roaming Indicator from the PRL if registered on a CDMA or EVDO system or -1 if not.
      * Valid values are 0-255.
diff --git a/radio/aidl/android/hardware/radio/CdmaCallWaiting.aidl b/radio/aidl/android/hardware/radio/CdmaCallWaiting.aidl
index 3db6ee0..b08ba7f 100644
--- a/radio/aidl/android/hardware/radio/CdmaCallWaiting.aidl
+++ b/radio/aidl/android/hardware/radio/CdmaCallWaiting.aidl
@@ -16,18 +16,35 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.CdmaCallWaitingNumberPlan;
-import android.hardware.radio.CdmaCallWaitingNumberPresentation;
-import android.hardware.radio.CdmaCallWaitingNumberType;
 import android.hardware.radio.CdmaSignalInfoRecord;
 
 @VintfStability
 parcelable CdmaCallWaiting {
+    const int NUMBER_PLAN_UNKNOWN = 0;
+    const int NUMBER_PLAN_ISDN = 1;
+    const int NUMBER_PLAN_DATA = 3;
+    const int NUMBER_PLAN_TELEX = 4;
+    const int NUMBER_PLAN_NATIONAL = 8;
+    const int NUMBER_PLAN_PRIVATE = 9;
+
+    const int NUMBER_PRESENTATION_ALLOWED = 0;
+    const int NUMBER_PRESENTATION_RESTRICTED = 1;
+    const int NUMBER_PRESENTATION_UNKNOWN = 2;
+
+    const int NUMBER_TYPE_UNKNOWN = 0;
+    const int NUMBER_TYPE_INTERNATIONAL = 1;
+    const int NUMBER_TYPE_NATIONAL = 2;
+    const int NUMBER_TYPE_NETWORK_SPECIFIC = 3;
+    const int NUMBER_TYPE_SUBSCRIBER = 4;
+
     /**
      * Remote party number
      */
     String number;
-    CdmaCallWaitingNumberPresentation numberPresentation;
+    /**
+     * Values are NUMBER_PRESENTATION_
+     */
+    int numberPresentation;
     /**
      * Remote party name
      */
@@ -35,10 +52,12 @@
     CdmaSignalInfoRecord signalInfoRecord;
     /**
      * Required to support International Call Waiting
+     * Values are NUMBER_TYPE_
      */
-    CdmaCallWaitingNumberType numberType;
+    int numberType;
     /**
      * Required to support International Call Waiting
+     * Values are NUMBER_PLAN_
      */
-    CdmaCallWaitingNumberPlan numberPlan;
+    int numberPlan;
 }
diff --git a/radio/aidl/android/hardware/radio/CdmaCallWaitingNumberPlan.aidl b/radio/aidl/android/hardware/radio/CdmaCallWaitingNumberPlan.aidl
deleted file mode 100644
index 76d2197..0000000
--- a/radio/aidl/android/hardware/radio/CdmaCallWaitingNumberPlan.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaCallWaitingNumberPlan {
-    UNKNOWN = 0,
-    ISDN = 1,
-    DATA = 3,
-    TELEX = 4,
-    NATIONAL = 8,
-    PRIVATE = 9,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaCallWaitingNumberPresentation.aidl b/radio/aidl/android/hardware/radio/CdmaCallWaitingNumberPresentation.aidl
deleted file mode 100644
index f9fca96..0000000
--- a/radio/aidl/android/hardware/radio/CdmaCallWaitingNumberPresentation.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaCallWaitingNumberPresentation {
-    ALLOWED,
-    RESTRICTED,
-    UNKNOWN,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaCallWaitingNumberType.aidl b/radio/aidl/android/hardware/radio/CdmaCallWaitingNumberType.aidl
deleted file mode 100644
index 9c5b8ed..0000000
--- a/radio/aidl/android/hardware/radio/CdmaCallWaitingNumberType.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaCallWaitingNumberType {
-    UNKNOWN,
-    INTERNATIONAL,
-    NATIONAL,
-    NETWORK_SPECIFIC,
-    SUBSCRIBER,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaInfoRecName.aidl b/radio/aidl/android/hardware/radio/CdmaInfoRecName.aidl
deleted file mode 100644
index 63ec699..0000000
--- a/radio/aidl/android/hardware/radio/CdmaInfoRecName.aidl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Names of the CDMA info records (C.S0005 section 3.7.5)
- */
-@VintfStability
-@Backing(type="int")
-enum CdmaInfoRecName {
-    DISPLAY,
-    CALLED_PARTY_NUMBER,
-    CALLING_PARTY_NUMBER,
-    CONNECTED_NUMBER,
-    SIGNAL,
-    REDIRECTING_NUMBER,
-    LINE_CONTROL,
-    EXTENDED_DISPLAY,
-    T53_CLIR,
-    T53_RELEASE,
-    T53_AUDIO_CONTROL,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaInformationRecord.aidl b/radio/aidl/android/hardware/radio/CdmaInformationRecord.aidl
index 7d9cb0a..20eabff 100644
--- a/radio/aidl/android/hardware/radio/CdmaInformationRecord.aidl
+++ b/radio/aidl/android/hardware/radio/CdmaInformationRecord.aidl
@@ -17,7 +17,6 @@
 package android.hardware.radio;
 
 import android.hardware.radio.CdmaDisplayInfoRecord;
-import android.hardware.radio.CdmaInfoRecName;
 import android.hardware.radio.CdmaLineControlInfoRecord;
 import android.hardware.radio.CdmaNumberInfoRecord;
 import android.hardware.radio.CdmaRedirectingNumberInfoRecord;
@@ -28,10 +27,26 @@
 @VintfStability
 parcelable CdmaInformationRecord {
     /**
+     * Names of the CDMA info records (C.S0005 section 3.7.5)
+     */
+    const int NAME_DISPLAY = 0;
+    const int NAME_CALLED_PARTY_NUMBER = 1;
+    const int NAME_CALLING_PARTY_NUMBER = 2;
+    const int NAME_CONNECTED_NUMBER = 3;
+    const int NAME_SIGNAL = 4;
+    const int NAME_REDIRECTING_NUMBER = 5;
+    const int NAME_LINE_CONTROL = 6;
+    const int NAME_EXTENDED_DISPLAY = 7;
+    const int NAME_T53_CLIR = 8;
+    const int NAME_T53_RELEASE = 9;
+    const int NAME_T53_AUDIO_CONTROL = 10;
+
+    /**
      * Based on CdmaInfoRecName, only one of the below vectors must have size = 1.
      * All other vectors must have size 0.
+     * Values are NAME_
      */
-    CdmaInfoRecName name;
+    int name;
     /**
      * Display and extended display info rec
      */
diff --git a/radio/aidl/android/hardware/radio/CdmaRedirectingNumberInfoRecord.aidl b/radio/aidl/android/hardware/radio/CdmaRedirectingNumberInfoRecord.aidl
index d15621a..7ba272b 100644
--- a/radio/aidl/android/hardware/radio/CdmaRedirectingNumberInfoRecord.aidl
+++ b/radio/aidl/android/hardware/radio/CdmaRedirectingNumberInfoRecord.aidl
@@ -17,13 +17,24 @@
 package android.hardware.radio;
 
 import android.hardware.radio.CdmaNumberInfoRecord;
-import android.hardware.radio.CdmaRedirectingReason;
 
 @VintfStability
 parcelable CdmaRedirectingNumberInfoRecord {
+    /**
+     * Redirecting Number Information Record as defined in C.S0005 section 3.7.5.11
+     */
+    const int REDIRECTING_REASON_UNKNOWN = 0;
+    const int REDIRECTING_REASON_CALL_FORWARDING_BUSY = 1;
+    const int REDIRECTING_REASON_CALL_FORWARDING_NO_REPLY = 2;
+    const int REDIRECTING_REASON_CALLED_DTE_OUT_OF_ORDER = 9;
+    const int REDIRECTING_REASON_CALL_FORWARDING_BY_THE_CALLED_DTE = 10;
+    const int REDIRECTING_REASON_CALL_FORWARDING_UNCONDITIONAL = 15;
+    const int REDIRECTING_REASON_RESERVED = 16;
+
     CdmaNumberInfoRecord redirectingNumber;
     /**
      * Set to UNKNOWN if not included.
+     * Values are REDIRECTING_REASON_
      */
-    CdmaRedirectingReason redirectingReason;
+    int redirectingReason;
 }
diff --git a/radio/aidl/android/hardware/radio/CdmaRedirectingReason.aidl b/radio/aidl/android/hardware/radio/CdmaRedirectingReason.aidl
deleted file mode 100644
index c86b9b2..0000000
--- a/radio/aidl/android/hardware/radio/CdmaRedirectingReason.aidl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Redirecting Number Information Record as defined in C.S0005 section 3.7.5.11
- */
-@VintfStability
-@Backing(type="int")
-enum CdmaRedirectingReason {
-    UNKNOWN = 0,
-    CALL_FORWARDING_BUSY = 1,
-    CALL_FORWARDING_NO_REPLY = 2,
-    CALLED_DTE_OUT_OF_ORDER = 9,
-    CALL_FORWARDING_BY_THE_CALLED_DTE = 10,
-    CALL_FORWARDING_UNCONDITIONAL = 15,
-    RESERVED,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsAck.aidl b/radio/aidl/android/hardware/radio/CdmaSmsAck.aidl
index b412b70..b1e85ff 100644
--- a/radio/aidl/android/hardware/radio/CdmaSmsAck.aidl
+++ b/radio/aidl/android/hardware/radio/CdmaSmsAck.aidl
@@ -16,11 +16,9 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.CdmaSmsErrorClass;
-
 @VintfStability
 parcelable CdmaSmsAck {
-    CdmaSmsErrorClass errorClass;
+    boolean errorClass;
     /**
      * SMS cause code as defined in N.S00005, 6.5.2.125.
      * Currently, only 35 (resource shortage) and 39 (other terminal problem) are reported.
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsAddress.aidl b/radio/aidl/android/hardware/radio/CdmaSmsAddress.aidl
index 83e8839..d449ccf 100644
--- a/radio/aidl/android/hardware/radio/CdmaSmsAddress.aidl
+++ b/radio/aidl/android/hardware/radio/CdmaSmsAddress.aidl
@@ -16,36 +16,87 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.CdmaSmsDigitMode;
-import android.hardware.radio.CdmaSmsNumberMode;
-import android.hardware.radio.CdmaSmsNumberPlan;
-import android.hardware.radio.CdmaSmsNumberType;
-
 @VintfStability
 parcelable CdmaSmsAddress {
     /**
+     * DTMF digits
+     */
+    const int DIGIT_MODE_FOUR_BIT = 0;
+    const int DIGIT_MODE_EIGHT_BIT = 1;
+
+    const int NUMBER_PLAN_UNKNOWN = 0;
+    /**
+     * CCITT E.164 and E.163, including ISDN plan
+     */
+    const int NUMBER_PLAN_TELEPHONY = 1;
+    const int NUMBER_PLAN_RESERVED_2 = 2;
+    /**
+     * CCITT X.121
+     */
+    const int NUMBER_PLAN_DATA = 3;
+    /**
+     * CCITT F.69
+     */
+    const int NUMBER_PLAN_TELEX = 4;
+    const int NUMBER_PLAN_RESERVED_5 = 5;
+    const int NUMBER_PLAN_RESERVED_6 = 6;
+    const int NUMBER_PLAN_RESERVED_7 = 7;
+    const int NUMBER_PLAN_RESERVED_8 = 8;
+    const int NUMBER_PLAN_PRIVATE = 9;
+    const int NUMBER_PLAN_RESERVED_10 = 10;
+    const int NUMBER_PLAN_RESERVED_11 = 11;
+    const int NUMBER_PLAN_RESERVED_12 = 12;
+    const int NUMBER_PLAN_RESERVED_13 = 13;
+    const int NUMBER_PLAN_RESERVED_14 = 14;
+    const int NUMBER_PLAN_RESERVED_15 = 15;
+
+    const int NUMBER_TYPE_UNKNOWN = 0;
+    /**
+     * INTERNATIONAL is used when number mode is not data network address. DATA_IP is used when the
+     * number mode is data network address.
+     */
+    const int NUMBER_TYPE_INTERNATIONAL_OR_DATA_IP = 1;
+    /**
+     * NATIONAL is used when the number mode is not data netework address. INTERNET_MAIL is used
+     * when the number mode is data network address. For INTERNET_MAIL, in the address data
+     * "digits", each byte contains an ASCII character. Examples are: "x@y.com,a@b.com"
+     * Ref TIA/EIA-637A 3.4.3.3
+     */
+    const int NUMBER_TYPE_NATIONAL_OR_INTERNET_MAIL = 2;
+    const int NUMBER_TYPE_NETWORK = 3;
+    const int NUMBER_TYPE_SUBSCRIBER = 4;
+    /**
+     * GSM SMS: address value is GSM 7-bit chars
+     */
+    const int NUMBER_TYPE_ALPHANUMERIC = 5;
+    const int NUMBER_TYPE_ABBREVIATED = 6;
+    const int NUMBER_TYPE_RESERVED_7 = 7;
+
+    /**
      * CdmaSmsDigitMode is of two types : 4 bit and 8 bit.
      * For 4-bit type, only "digits" field defined below in this struct is used.
+     * Values are DIGIT_MODE_
      */
-    CdmaSmsDigitMode digitMode;
+    int digitMode;
     /**
      * Used only when digitMode is 8-bit.
      */
-    CdmaSmsNumberMode numberMode;
+    boolean isNumberModeDataNetwork;
     /**
      * Used only when digitMode is 8-bit. To specify an international address, use the following:
-     * digitMode = CdmaSmsDigitMode:EIGHT_BIT:
-     * numberMode = CdmaSmsNumberMode:NOT_DATA_NETWORK
-     * numberType = CdmaSmsNumberType:INTERNATIONAL_OR_DATA_IP
-     * numberPlan = CdmaSmsNumberPlan:TELEPHONY
-     * numberOfDigits = number of digits
+     * digitMode = EIGHT_BIT
+     * isNumberModeDataNetwork = true
+     * numberType = INTERNATIONAL_OR_DATA_IP
+     * numberPlan = TELEPHONY
      * digits = ASCII digits, e.g. '1', '2', '3', '4', and '5'
+     * Values are NUMBER_TYPE_
      */
-    CdmaSmsNumberType numberType;
+    int numberType;
     /**
      * Used only when digitMode is 8-bit.
+     * Values are NUMBER_PLAN_
      */
-    CdmaSmsNumberPlan numberPlan;
+    int numberPlan;
     /**
      * Each byte in this array represents a 4 bit or 8-bit digit of address data.
      */
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsDigitMode.aidl b/radio/aidl/android/hardware/radio/CdmaSmsDigitMode.aidl
deleted file mode 100644
index 662311d..0000000
--- a/radio/aidl/android/hardware/radio/CdmaSmsDigitMode.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaSmsDigitMode {
-    /**
-     * DTMF digits
-     */
-    FOUR_BIT,
-    EIGHT_BIT,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsErrorClass.aidl b/radio/aidl/android/hardware/radio/CdmaSmsErrorClass.aidl
deleted file mode 100644
index ec8c74e..0000000
--- a/radio/aidl/android/hardware/radio/CdmaSmsErrorClass.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaSmsErrorClass {
-    NO_ERROR,
-    ERROR,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsNumberMode.aidl b/radio/aidl/android/hardware/radio/CdmaSmsNumberMode.aidl
deleted file mode 100644
index e1e96dd..0000000
--- a/radio/aidl/android/hardware/radio/CdmaSmsNumberMode.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaSmsNumberMode {
-    NOT_DATA_NETWORK,
-    DATA_NETWORK,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsNumberPlan.aidl b/radio/aidl/android/hardware/radio/CdmaSmsNumberPlan.aidl
deleted file mode 100644
index 23dea9b..0000000
--- a/radio/aidl/android/hardware/radio/CdmaSmsNumberPlan.aidl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaSmsNumberPlan {
-    UNKNOWN,
-    /**
-     * CCITT E.164 and E.163, including ISDN plan
-     */
-    TELEPHONY,
-    RESERVED_2,
-    /**
-     * CCITT X.121
-     */
-    DATA,
-    /**
-     * CCITT F.69
-     */
-    TELEX,
-    RESERVED_5,
-    RESERVED_6,
-    RESERVED_7,
-    RESERVED_8,
-    PRIVATE,
-    RESERVED_10,
-    RESERVED_11,
-    RESERVED_12,
-    RESERVED_13,
-    RESERVED_14,
-    RESERVED_15,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsNumberType.aidl b/radio/aidl/android/hardware/radio/CdmaSmsNumberType.aidl
deleted file mode 100644
index e439d1f..0000000
--- a/radio/aidl/android/hardware/radio/CdmaSmsNumberType.aidl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaSmsNumberType {
-    UNKNOWN,
-    /**
-     * INTERNATIONAL is used when number mode is not data network address. DATA_IP is used when the
-     * number mode is data network address.
-     */
-    INTERNATIONAL_OR_DATA_IP,
-    /**
-     * NATIONAL is used when the number mode is not data netework address. INTERNET_MAIL is used
-     * when the number mode is data network address. For INTERNET_MAIL, in the address data
-     * "digits", each byte contains an ASCII character. Examples are: "x@y.com,a@b.com"
-     * Ref TIA/EIA-637A 3.4.3.3
-     */
-    NATIONAL_OR_INTERNET_MAIL,
-    NETWORK,
-    SUBSCRIBER,
-    /**
-     * GSM SMS: address value is GSM 7-bit chars
-     */
-    ALPHANUMERIC,
-    ABBREVIATED,
-    RESERVED_7,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsSubaddress.aidl b/radio/aidl/android/hardware/radio/CdmaSmsSubaddress.aidl
index 4a84c79..e5d7494 100644
--- a/radio/aidl/android/hardware/radio/CdmaSmsSubaddress.aidl
+++ b/radio/aidl/android/hardware/radio/CdmaSmsSubaddress.aidl
@@ -16,11 +16,21 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.CdmaSmsSubaddressType;
-
 @VintfStability
 parcelable CdmaSmsSubaddress {
-    CdmaSmsSubaddressType subaddressType;
+    /**
+     * CCITT X.213 or ISO 8348 AD2
+     */
+    const int SUBADDRESS_TYPE_NSAP = 0;
+    /**
+     * e.g. X.25
+     */
+    const int SUBADDRESS_TYPE_USER_SPECIFIED = 1;
+
+    /**
+     * Values are SUBADDRESS_TYPE_
+     */
+    int subaddressType;
     /**
      * True means the last byte's lower 4 bits must be ignored
      */
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsSubaddressType.aidl b/radio/aidl/android/hardware/radio/CdmaSmsSubaddressType.aidl
deleted file mode 100644
index 60aa37b..0000000
--- a/radio/aidl/android/hardware/radio/CdmaSmsSubaddressType.aidl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaSmsSubaddressType {
-    /**
-     * CCITT X.213 or ISO 8348 AD2
-     */
-    NSAP,
-    /**
-     * e.g. X.25
-     */
-    USER_SPECIFIED,
-}
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsWriteArgs.aidl b/radio/aidl/android/hardware/radio/CdmaSmsWriteArgs.aidl
index f613e39..57896f4 100644
--- a/radio/aidl/android/hardware/radio/CdmaSmsWriteArgs.aidl
+++ b/radio/aidl/android/hardware/radio/CdmaSmsWriteArgs.aidl
@@ -17,13 +17,18 @@
 package android.hardware.radio;
 
 import android.hardware.radio.CdmaSmsMessage;
-import android.hardware.radio.CdmaSmsWriteArgsStatus;
 
 @VintfStability
 parcelable CdmaSmsWriteArgs {
+    const int STATUS_REC_UNREAD = 0;
+    const int STATUS_REC_READ = 1;
+    const int STATUS_STO_UNSENT = 2;
+    const int STATUS_STO_SENT = 3;
+
     /**
      * Status of message. See TS 27.005 3.1
+     * Values are STATUS_
      */
-    CdmaSmsWriteArgsStatus status;
+    int status;
     CdmaSmsMessage message;
 }
diff --git a/radio/aidl/android/hardware/radio/CdmaSmsWriteArgsStatus.aidl b/radio/aidl/android/hardware/radio/CdmaSmsWriteArgsStatus.aidl
deleted file mode 100644
index 009e8a9..0000000
--- a/radio/aidl/android/hardware/radio/CdmaSmsWriteArgsStatus.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum CdmaSmsWriteArgsStatus {
-    REC_UNREAD,
-    REC_READ,
-    STO_UNSENT,
-    STO_SENT,
-}
diff --git a/radio/aidl/android/hardware/radio/CellIdentityLte.aidl b/radio/aidl/android/hardware/radio/CellIdentityLte.aidl
index f7f8fef..1a261a6 100644
--- a/radio/aidl/android/hardware/radio/CellIdentityLte.aidl
+++ b/radio/aidl/android/hardware/radio/CellIdentityLte.aidl
@@ -17,8 +17,8 @@
 package android.hardware.radio;
 
 import android.hardware.radio.CellIdentityOperatorNames;
+import android.hardware.radio.ClosedSubscriberGroupInfo;
 import android.hardware.radio.EutranBands;
-import android.hardware.radio.OptionalCsgInfo;
 
 @VintfStability
 parcelable CellIdentityLte {
@@ -58,7 +58,7 @@
     /**
      * Information about any closed subscriber group ID for this cell
      */
-    OptionalCsgInfo optionalCsgInfo;
+    @nullable ClosedSubscriberGroupInfo csgInfo;
     /**
      * Bands used by the cell.
      */
diff --git a/radio/aidl/android/hardware/radio/CellIdentityTdscdma.aidl b/radio/aidl/android/hardware/radio/CellIdentityTdscdma.aidl
index 8268bba..8232245 100644
--- a/radio/aidl/android/hardware/radio/CellIdentityTdscdma.aidl
+++ b/radio/aidl/android/hardware/radio/CellIdentityTdscdma.aidl
@@ -17,7 +17,7 @@
 package android.hardware.radio;
 
 import android.hardware.radio.CellIdentityOperatorNames;
-import android.hardware.radio.OptionalCsgInfo;
+import android.hardware.radio.ClosedSubscriberGroupInfo;
 
 @VintfStability
 parcelable CellIdentityTdscdma {
@@ -53,5 +53,5 @@
     /**
      * Information about any closed subscriber group ID for this cell.
      */
-    OptionalCsgInfo optionalCsgInfo;
+    @nullable ClosedSubscriberGroupInfo csgInfo;
 }
diff --git a/radio/aidl/android/hardware/radio/CellIdentityWcdma.aidl b/radio/aidl/android/hardware/radio/CellIdentityWcdma.aidl
index 667c15b..3432747 100644
--- a/radio/aidl/android/hardware/radio/CellIdentityWcdma.aidl
+++ b/radio/aidl/android/hardware/radio/CellIdentityWcdma.aidl
@@ -17,7 +17,7 @@
 package android.hardware.radio;
 
 import android.hardware.radio.CellIdentityOperatorNames;
-import android.hardware.radio.OptionalCsgInfo;
+import android.hardware.radio.ClosedSubscriberGroupInfo;
 
 @VintfStability
 parcelable CellIdentityWcdma {
@@ -53,5 +53,5 @@
     /**
      * Information about any closed subscriber group ID for this cell.
      */
-    OptionalCsgInfo optionalCsgInfo;
+    @nullable ClosedSubscriberGroupInfo csgInfo;
 }
diff --git a/radio/aidl/android/hardware/radio/Clir.aidl b/radio/aidl/android/hardware/radio/Clir.aidl
deleted file mode 100644
index a13ff9d..0000000
--- a/radio/aidl/android/hardware/radio/Clir.aidl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum Clir {
-    /**
-     * Use subscription default value
-     */
-    DEFAULT,
-    /**
-     * Restrict CLI presentation
-     */
-    INVOCATION,
-    /**
-     * Allow CLI presentation
-     */
-    SUPPRESSION,
-}
diff --git a/radio/aidl/android/hardware/radio/DataConnActiveStatus.aidl b/radio/aidl/android/hardware/radio/DataConnActiveStatus.aidl
deleted file mode 100644
index 1e83727..0000000
--- a/radio/aidl/android/hardware/radio/DataConnActiveStatus.aidl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Data connection active status
- */
-@VintfStability
-@Backing(type="int")
-enum DataConnActiveStatus {
-    /**
-     * Indicates the data connection is inactive.
-     */
-    INACTIVE,
-    /**
-     * Indicates the data connection is active with physical link dormant.
-     */
-    DORMANT,
-    /**
-     * Indicates the data connection is active with physical link up.
-     */
-    ACTIVE,
-}
diff --git a/radio/aidl/android/hardware/radio/DataProfileId.aidl b/radio/aidl/android/hardware/radio/DataProfileId.aidl
deleted file mode 100644
index f173f1f..0000000
--- a/radio/aidl/android/hardware/radio/DataProfileId.aidl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum DataProfileId {
-    DEFAULT = 0,
-    TETHERED = 1,
-    IMS = 2,
-    FOTA = 3,
-    CBS = 4,
-    /**
-     * Start of OEM-specific profiles
-     */
-    OEM_BASE = 1000,
-    INVALID = 0xFFFFFFFF,
-}
diff --git a/radio/aidl/android/hardware/radio/DataProfileInfo.aidl b/radio/aidl/android/hardware/radio/DataProfileInfo.aidl
index 5e2d4d2..2f7bbb1 100644
--- a/radio/aidl/android/hardware/radio/DataProfileInfo.aidl
+++ b/radio/aidl/android/hardware/radio/DataProfileInfo.aidl
@@ -18,17 +18,31 @@
 
 import android.hardware.radio.ApnAuthType;
 import android.hardware.radio.ApnTypes;
-import android.hardware.radio.DataProfileId;
-import android.hardware.radio.DataProfileInfoType;
 import android.hardware.radio.PdpProtocolType;
 import android.hardware.radio.RadioAccessFamily;
 
 @VintfStability
 parcelable DataProfileInfo {
+    const int ID_DEFAULT = 0;
+    const int ID_TETHERED = 1;
+    const int ID_IMS = 2;
+    const int ID_FOTA = 3;
+    const int ID_CBS = 4;
+    /**
+     * Start of OEM-specific profiles
+     */
+    const int ID_OEM_BASE = 1000;
+    const int ID_INVALID = 0xFFFFFFFF;
+
+    const int TYPE_COMMON = 0;
+    const int TYPE_THREE_GPP = 1;
+    const int TYPE_THREE_GPP2 = 2;
+
     /**
      * ID of the data profile.
+     * Values are ID_
      */
-    DataProfileId profileId;
+    int profileId;
     /**
      * The APN name.
      */
@@ -55,8 +69,9 @@
     String password;
     /**
      * Data profile technology type.
+     * Values are TYPE_
      */
-    DataProfileInfoType type;
+    int type;
     /**
      * The period in seconds to limit the maximum connections.
      */
diff --git a/radio/aidl/android/hardware/radio/DataProfileInfoType.aidl b/radio/aidl/android/hardware/radio/DataProfileInfoType.aidl
deleted file mode 100644
index df46ef3..0000000
--- a/radio/aidl/android/hardware/radio/DataProfileInfoType.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum DataProfileInfoType {
-    COMMON,
-    THREE_GPP,
-    THREE_GPP2,
-}
diff --git a/radio/aidl/android/hardware/radio/DataRegStateResult.aidl b/radio/aidl/android/hardware/radio/DataRegStateResult.aidl
index 53a3e52..dcc39c8 100644
--- a/radio/aidl/android/hardware/radio/DataRegStateResult.aidl
+++ b/radio/aidl/android/hardware/radio/DataRegStateResult.aidl
@@ -17,7 +17,7 @@
 package android.hardware.radio;
 
 import android.hardware.radio.CellIdentity;
-import android.hardware.radio.DataRegStateResultVopsInfo;
+import android.hardware.radio.LteVopsInfo;
 import android.hardware.radio.NrIndicators;
 import android.hardware.radio.RegState;
 
@@ -54,7 +54,7 @@
      * must be present when device is camped on LTE. vopsInfo must be empty when device is camped
      * only on 2G/3G.
      */
-    DataRegStateResultVopsInfo vopsInfo;
+    @nullable LteVopsInfo lteVopsInfo;
     /**
      * The parameters of NR 5G Non-Standalone. This value is only valid on E-UTRAN, otherwise
      * must be empty.
diff --git a/radio/aidl/android/hardware/radio/DataRegStateResultVopsInfo.aidl b/radio/aidl/android/hardware/radio/DataRegStateResultVopsInfo.aidl
deleted file mode 100644
index 885d5b2..0000000
--- a/radio/aidl/android/hardware/radio/DataRegStateResultVopsInfo.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.LteVopsInfo;
-
-@VintfStability
-union DataRegStateResultVopsInfo {
-    boolean noinit;
-    /**
-     * LTE network capability
-     */
-    LteVopsInfo lteVopsInfo;
-}
diff --git a/radio/aidl/android/hardware/radio/Dial.aidl b/radio/aidl/android/hardware/radio/Dial.aidl
index 9056815..f4097ff 100644
--- a/radio/aidl/android/hardware/radio/Dial.aidl
+++ b/radio/aidl/android/hardware/radio/Dial.aidl
@@ -16,13 +16,28 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.Clir;
 import android.hardware.radio.UusInfo;
 
 @VintfStability
 parcelable Dial {
+    /**
+     * Use subscription default value
+     */
+    const int CLIR_DEFAULT = 0;
+    /**
+     * Restrict CLI presentation
+     */
+    const int CLIR_INVOCATION = 1;
+    /**
+     * Allow CLI presentation
+     */
+    const int CLIR_SUPPRESSION = 2;
+
     String address;
-    Clir clir;
+    /**
+     * Values are CLIR_
+     */
+    int clir;
     /**
      * Vector of User-User Signaling Information
      */
diff --git a/radio/aidl/android/hardware/radio/EmcIndicator.aidl b/radio/aidl/android/hardware/radio/EmcIndicator.aidl
deleted file mode 100644
index 6f0b19f..0000000
--- a/radio/aidl/android/hardware/radio/EmcIndicator.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Defines the values for emergency service indicator of NR as per 3gpp spec 24.501 sec 9.10.3.5
- */
-@VintfStability
-@Backing(type="byte")
-enum EmcIndicator {
-    /**
-     * Emergency services not supported
-     */
-    EMC_NOT_SUPPORTED,
-    /**
-     * Emergency services supported in NR connected to 5GCN only
-     */
-    EMC_NR_CONNECTED_TO_5GCN,
-    /**
-     * Emergency services supported in E-UTRA connected to 5GCN only
-     */
-    EMC_EUTRA_CONNECTED_TO_5GCN,
-    /**
-     * Emergency services supported in NR connected to 5GCN and E-UTRA connected to 5GCN
-     */
-    EMC_BOTH_NR_EUTRA_CONNECTED_TO_5GCN,
-}
diff --git a/radio/aidl/android/hardware/radio/EmergencyNumber.aidl b/radio/aidl/android/hardware/radio/EmergencyNumber.aidl
index ee425f8..152be90 100644
--- a/radio/aidl/android/hardware/radio/EmergencyNumber.aidl
+++ b/radio/aidl/android/hardware/radio/EmergencyNumber.aidl
@@ -16,7 +16,6 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.EmergencyNumberSource;
 import android.hardware.radio.EmergencyServiceCategory;
 
 /**
@@ -44,6 +43,25 @@
 @VintfStability
 parcelable EmergencyNumber {
     /**
+     * Indicates the number is from the network signal.
+     */
+    const int SOURCE_NETWORK_SIGNALING = 1 << 0;
+    /**
+     * Indicates the number is from the sim card.
+     */
+    const int SOURCE_SIM = 1 << 1;
+    /**
+     * Indicates the number is from the modem config.
+     */
+    const int SOURCE_MODEM_CONFIG = 1 << 2;
+    /**
+     * Indicates the number is available as default. Per the reference, 112, 911 must always be
+     * available; additionally, 000, 08, 110, 999, 118 and 119 must be available when sim is not
+     * present.
+     */
+    const int SOURCE_DEFAULT = 1 << 3;
+
+    /**
      * The emergency number. The character in the number string should only be the dial pad
      * character('0'-'9', '*', or '#'). For example: 911.
      */
@@ -66,8 +84,9 @@
      */
     String[] urns;
     /**
-     * The bitfield of EmergencyNumberSource(s). See EmergencyNumberSource for the value of
-     * each bit.
+     * The bitfield of EmergencyNumberSource(s) to tell where the EmergencyNumber comes from.
+     * Reference: 3gpp 22.101, Section 10 - Emergency Calls
+     * Values are SOURCE_
      */
-    EmergencyNumberSource sources;
+    int sources;
 }
diff --git a/radio/aidl/android/hardware/radio/EmergencyNumberSource.aidl b/radio/aidl/android/hardware/radio/EmergencyNumberSource.aidl
deleted file mode 100644
index c2d6547..0000000
--- a/radio/aidl/android/hardware/radio/EmergencyNumberSource.aidl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * The source to tell where the corresponding EmergencyNumber comes from.
- * Reference: 3gpp 22.101, Section 10 - Emergency Calls
- */
-@VintfStability
-@Backing(type="int")
-enum EmergencyNumberSource {
-    /**
-     * Indicates the number is from the network signal.
-     */
-    NETWORK_SIGNALING = 1 << 0,
-    /**
-     * Indicates the number is from the sim card.
-     */
-    SIM = 1 << 1,
-    /**
-     * Indicates the number is from the modem config.
-     */
-    MODEM_CONFIG = 1 << 2,
-    /**
-     * Indicates the number is available as default. Per the reference, 112, 911 must always be
-     * available; additionally, 000, 08, 110, 999, 118 and 119 must be available when sim is not
-     * present.
-     */
-    DEFAULT = 1 << 3,
-}
diff --git a/radio/aidl/android/hardware/radio/EmfIndicator.aidl b/radio/aidl/android/hardware/radio/EmfIndicator.aidl
deleted file mode 100644
index 226e684..0000000
--- a/radio/aidl/android/hardware/radio/EmfIndicator.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Defines the values for emergency service fallback indicator of NR as per TS 24.501 sec 9.10.3.5.
- */
-@VintfStability
-@Backing(type="byte")
-enum EmfIndicator {
-    /**
-     * Emergency services fallback not supported
-     */
-    EMF_NOT_SUPPORTED,
-    /**
-     * Emergency services fallback supported in NR connected to 5GCN only
-     */
-    EMF_NR_CONNECTED_TO_5GCN,
-    /**
-     * Emergency services fallback supported in E-UTRA connected to 5GCN only
-     */
-    EMF_EUTRA_CONNECTED_TO_5GCN,
-    /**
-     * Emergency services fallback supported in NR connected to 5GCN and E-UTRA connected to 5GCN.
-     */
-    EMF_BOTH_NR_EUTRA_CONNECTED_TO_5GCN,
-}
diff --git a/radio/aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo.aidl b/radio/aidl/android/hardware/radio/EutranRegistrationInfo.aidl
similarity index 93%
rename from radio/aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo.aidl
rename to radio/aidl/android/hardware/radio/EutranRegistrationInfo.aidl
index 5b942f4..0f8f949 100644
--- a/radio/aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo.aidl
+++ b/radio/aidl/android/hardware/radio/EutranRegistrationInfo.aidl
@@ -20,7 +20,7 @@
 import android.hardware.radio.NrIndicators;
 
 @VintfStability
-parcelable RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo {
+parcelable EutranRegistrationInfo {
     /**
      * Network capabilities for voice over PS services. This info is valid only on LTE network and
      * must be present when device is camped on LTE. VopsInfo must be empty when device is camped
diff --git a/radio/aidl/android/hardware/radio/FrequencyRange.aidl b/radio/aidl/android/hardware/radio/FrequencyRange.aidl
deleted file mode 100644
index 09ec3bc..0000000
--- a/radio/aidl/android/hardware/radio/FrequencyRange.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Mapping the frequency to a rough range.
- */
-@VintfStability
-@Backing(type="int")
-enum FrequencyRange {
-    /**
-     * Indicates the frequency range is below 1GHz.
-     */
-    LOW = 1,
-    /**
-     * Indicates the frequency range is between 1GHz and 3GHz.
-     */
-    MID = 2,
-    /**
-     * Indicates the frequency range is between 3GHz and 6GHz.
-     */
-    HIGH = 3,
-    /**
-     * Indicates the frequency range is above 6GHz (millimeter wave frequency).
-     */
-    MMWAVE = 4,
-}
diff --git a/radio/aidl/android/hardware/radio/HandoverFailureMode.aidl b/radio/aidl/android/hardware/radio/HandoverFailureMode.aidl
deleted file mode 100644
index f6918a8..0000000
--- a/radio/aidl/android/hardware/radio/HandoverFailureMode.aidl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * The allowed failure modes on an IWLAN handover failure.
- */
-@VintfStability
-@Backing(type="byte")
-enum HandoverFailureMode {
-    /**
-     * On data handover failure, fallback to the source data transport when the fail cause is due
-     * to a hand off preference change.
-     */
-    LEGACY,
-    /**
-     * On data handover failure, fallback to the source data transport.
-     */
-    DO_FALLBACK,
-    /**
-     * On data handover failure, retry the handover instead of falling back to the source data
-     * transport.
-     */
-    NO_FALLBACK_RETRY_HANDOVER,
-    /**
-     * On data handover failure, setup a new data connection by sending a normal request to the
-     * underlying data service.
-     */
-    NO_FALLBACK_RETRY_SETUP_NORMAL,
-}
diff --git a/radio/aidl/android/hardware/radio/HardwareConfig.aidl b/radio/aidl/android/hardware/radio/HardwareConfig.aidl
index d3902af..59850ad 100644
--- a/radio/aidl/android/hardware/radio/HardwareConfig.aidl
+++ b/radio/aidl/android/hardware/radio/HardwareConfig.aidl
@@ -18,17 +18,28 @@
 
 import android.hardware.radio.HardwareConfigModem;
 import android.hardware.radio.HardwareConfigSim;
-import android.hardware.radio.HardwareConfigState;
-import android.hardware.radio.HardwareConfigType;
 
 @VintfStability
 parcelable HardwareConfig {
-    HardwareConfigType type;
+    const int STATE_ENABLED = 0;
+    const int STATE_STANDBY = 1;
+    const int STATE_DISABLED = 2;
+
+    const int TYPE_MODEM = 0;
+    const int TYPE_SIM = 1;
+
+    /**
+     * Values are TYPE_
+     */
+    int type;
     /**
      * RadioConst:MAX_UUID_LENGTH is max length of the string
      */
     String uuid;
-    HardwareConfigState state;
+    /**
+     * Values are STATE_
+     */
+    int state;
     /**
      * Valid only if type is Modem and size = 1 else must be empty. Only one of modem or sim must
      * have size = 1 based on the HardwareConfigType, and the other must have size = 0.
diff --git a/radio/aidl/android/hardware/radio/HardwareConfigModem.aidl b/radio/aidl/android/hardware/radio/HardwareConfigModem.aidl
index ef348d6..8e3bc47 100644
--- a/radio/aidl/android/hardware/radio/HardwareConfigModem.aidl
+++ b/radio/aidl/android/hardware/radio/HardwareConfigModem.aidl
@@ -18,12 +18,31 @@
 
 @VintfStability
 parcelable HardwareConfigModem {
+    /**
+     * RIL attachment model. Values are:
+     * 0: single
+     * 1: multiple
+     * If single, there is a one-to-one relationship between a modem hardware and a ril daemon.
+     * If multiple, there is a one-to-many relationship between a modem hardware and several
+     * simultaneous ril daemons.
+     */
     int rilModel;
     /**
-     * bitset - ref. RadioTechnology.
+     * Bitset value, based on RadioTechnology.
      */
     int rat;
+    /**
+     * Maximum number of concurrent active voice calls.
+     */
     int maxVoice;
+    /**
+     * Maximum number of concurrent active data calls.
+     */
     int maxData;
+    /**
+     * Maximum number of concurrent standby connections. This is not necessarily an equal sum of the
+     * maxVoice and maxData (or a derivative of it) since it really depends on the modem capability,
+     * hence it is left for the hardware to define.
+     */
     int maxStandby;
 }
diff --git a/radio/aidl/android/hardware/radio/HardwareConfigState.aidl b/radio/aidl/android/hardware/radio/HardwareConfigState.aidl
deleted file mode 100644
index 05c806d..0000000
--- a/radio/aidl/android/hardware/radio/HardwareConfigState.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum HardwareConfigState {
-    ENABLED,
-    STANDBY,
-    DISABLED,
-}
diff --git a/radio/aidl/android/hardware/radio/HardwareConfigType.aidl b/radio/aidl/android/hardware/radio/HardwareConfigType.aidl
deleted file mode 100644
index 5605c2b..0000000
--- a/radio/aidl/android/hardware/radio/HardwareConfigType.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum HardwareConfigType {
-    MODEM,
-    SIM,
-}
diff --git a/radio/aidl/android/hardware/radio/IRadio.aidl b/radio/aidl/android/hardware/radio/IRadio.aidl
index 352cbfb..ebf3c9b 100644
--- a/radio/aidl/android/hardware/radio/IRadio.aidl
+++ b/radio/aidl/android/hardware/radio/IRadio.aidl
@@ -20,7 +20,6 @@
 import android.hardware.radio.CallForwardInfo;
 import android.hardware.radio.CardPowerState;
 import android.hardware.radio.CarrierRestrictions;
-import android.hardware.radio.CarrierRestrictionsWithPriority;
 import android.hardware.radio.CdmaBroadcastSmsConfigInfo;
 import android.hardware.radio.CdmaRoamingType;
 import android.hardware.radio.CdmaSmsAck;
@@ -48,8 +47,6 @@
 import android.hardware.radio.NrDualConnectivityState;
 import android.hardware.radio.NvItem;
 import android.hardware.radio.NvWriteItem;
-import android.hardware.radio.OptionalSliceInfo;
-import android.hardware.radio.OptionalTrafficDescriptor;
 import android.hardware.radio.PersoSubstate;
 import android.hardware.radio.PhonebookRecordInfo;
 import android.hardware.radio.PreferredNetworkType;
@@ -64,8 +61,10 @@
 import android.hardware.radio.SignalThresholdInfo;
 import android.hardware.radio.SimApdu;
 import android.hardware.radio.SimLockMultiSimPolicy;
+import android.hardware.radio.SliceInfo;
 import android.hardware.radio.SmsAcknowledgeFailCause;
 import android.hardware.radio.SmsWriteArgs;
+import android.hardware.radio.TrafficDescriptor;
 import android.hardware.radio.TtyMode;
 
 /**
@@ -77,7 +76,7 @@
  * setResponseFunctions must work with IRadioResponse and IRadioIndication.
  */
 @VintfStability
-interface IRadio {
+oneway interface IRadio {
     /**
      * Answer incoming call. Must not be called for WAITING calls.
      * switchWaitingOrHoldingAndActive() must be used in this case instead
@@ -86,7 +85,7 @@
      *
      * Response function is IRadioResponse.acceptCallResponse()
      */
-    oneway void acceptCall(in int serial);
+    void acceptCall(in int serial);
 
     /**
      * Acknowledge successful or failed receipt of SMS previously indicated via unsol
@@ -100,8 +99,7 @@
      *
      * Response callback is IRadioResponse.acknowledgeIncomingGsmSmsWithPduResponse()
      */
-    oneway void acknowledgeIncomingGsmSmsWithPdu(
-            in int serial, in boolean success, in String ackPdu);
+    void acknowledgeIncomingGsmSmsWithPdu(in int serial, in boolean success, in String ackPdu);
 
     /**
      * Acknowledge the success or failure in the receipt of SMS previously indicated
@@ -112,7 +110,7 @@
      *
      * Response callback is IRadioResponse.acknowledgeLastIncomingCdmaSmsResponse()
      */
-    oneway void acknowledgeLastIncomingCdmaSms(in int serial, in CdmaSmsAck smsAck);
+    void acknowledgeLastIncomingCdmaSms(in int serial, in CdmaSmsAck smsAck);
 
     /**
      * Acknowledge successful or failed receipt of SMS previously indicated via unsolResponseNewSms
@@ -126,7 +124,7 @@
      *
      * Response function is IRadioResponse.acknowledgeLastIncomingGsmSmsResponse()
      */
-    oneway void acknowledgeLastIncomingGsmSms(
+    void acknowledgeLastIncomingGsmSms(
             in int serial, in boolean success, in SmsAcknowledgeFailCause cause);
 
     /**
@@ -140,7 +138,7 @@
      *
      * Response function is IRadioResponse.allocatePduSessionIdResponse()
      */
-    oneway void allocatePduSessionId(in int serial);
+    void allocatePduSessionId(in int serial);
 
     /**
      * Whether uiccApplications are enabled, or disabled.
@@ -151,7 +149,7 @@
      *
      * Response callback is IRadioResponse.areUiccApplicationsEnabledResponse()
      */
-    oneway void areUiccApplicationsEnabled(in int serial);
+    void areUiccApplicationsEnabled(in int serial);
 
     /**
      * Indicates that a handover was cancelled after a call to IRadio::startHandover.
@@ -163,7 +161,7 @@
      *
      * Response function is IRadioResponse.cancelHandoverResponse()
      */
-    oneway void cancelHandover(in int serial, in int callId);
+    void cancelHandover(in int serial, in int callId);
 
     /**
      * Cancel the current USSD session if one exists.
@@ -172,7 +170,7 @@
      *
      * Response function is IRadioResponse.cancelPendingUssdResponse()
      */
-    oneway void cancelPendingUssd(in int serial);
+    void cancelPendingUssd(in int serial);
 
     /**
      * Supplies old ICC PIN2 and new PIN2.
@@ -184,8 +182,7 @@
      *
      * Response function is IRadioResponse.changeIccPin2ForAppResponse()
      */
-    oneway void changeIccPin2ForApp(
-            in int serial, in String oldPin2, in String newPin2, in String aid);
+    void changeIccPin2ForApp(in int serial, in String oldPin2, in String newPin2, in String aid);
 
     /**
      * Supplies old ICC PIN and new PIN.
@@ -197,8 +194,7 @@
      *
      * Response function is IRadioResponse.changeIccPinForAppResponse()
      */
-    oneway void changeIccPinForApp(
-            in int serial, in String oldPin, in String newPin, in String aid);
+    void changeIccPinForApp(in int serial, in String oldPin, in String newPin, in String aid);
 
     /**
      * Conference holding and active (like AT+CHLD=3)
@@ -207,7 +203,7 @@
      *
      * Response function is IRadioResponse.conferenceResponse()
      */
-    oneway void conference(in int serial);
+    void conference(in int serial);
 
     /**
      * Deactivate packet data connection and remove from the data call list. An
@@ -219,7 +215,7 @@
      *
      * Response function is IRadioResponse.deactivateDataCallResponse()
      */
-    oneway void deactivateDataCall(in int serial, in int cid, in DataRequestReason reason);
+    void deactivateDataCall(in int serial, in int cid, in DataRequestReason reason);
 
     /**
      * Deletes a CDMA SMS message from RUIM memory.
@@ -229,7 +225,7 @@
      *
      * Response callback is IRadioResponse.deleteSmsOnRuimResponse()
      */
-    oneway void deleteSmsOnRuim(in int serial, in int index);
+    void deleteSmsOnRuim(in int serial, in int index);
 
     /**
      * Deletes a SMS message from SIM memory.
@@ -239,7 +235,7 @@
      *
      * Response function is IRadioResponse.deleteSmsOnSimResponse()
      */
-    oneway void deleteSmsOnSim(in int serial, in int index);
+    void deleteSmsOnSim(in int serial, in int index);
 
     /**
      * Initiate voice call. This method is never used for supplementary service codes.
@@ -249,35 +245,35 @@
      *
      * Response function is IRadioResponse.dialResponse()
      */
-    oneway void dial(in int serial, in Dial dialInfo);
+    void dial(in int serial, in Dial dialInfo);
 
     /**
      * Initiate emergency voice call, with zero or more emergency service category(s), zero or
      * more emergency Uniform Resource Names (URN), and routing information for handling the call.
-     * Android uses this request to make its emergency call instead of using @1.0::IRadio.dial
-     * if the 'address' in the 'dialInfo' field is identified as an emergency number by Android.
+     * Android uses this request to make its emergency call instead of using IRadio.dial if the
+     * 'address' in the 'dialInfo' field is identified as an emergency number by Android.
      *
      * In multi-sim scenario, if the emergency number is from a specific subscription, this radio
      * request can still be sent out on the other subscription as long as routing is set to
-     * @1.4::EmergencyNumberRouting#EMERGENCY. This radio request will not be sent on an inactive
+     * EmergencyNumberRouting#EMERGENCY. This radio request will not be sent on an inactive
      * (PIN/PUK locked) subscription unless both subscriptions are PIN/PUK locked. In this case,
      * the request will be sent on the primary subscription.
      *
      * Some countries or carriers require some emergency numbers that must be handled with normal
      * call routing if possible or emergency routing. 1) if the 'routing' field is specified as
-     * @1.4::EmergencyNumberRouting#NORMAL, the implementation must try the full radio service to
-     * use normal call routing to handle the call; if service cannot support normal routing, the
+     * EmergencyNumberRouting#NORMAL, the implementation must try the full radio service to use
+     * normal call routing to handle the call; if service cannot support normal routing, the
      * implementation must use emergency routing to handle the call. 2) if 'routing' is specified
-     * as @1.4::EmergencyNumberRouting#EMERGENCY, the implementation must use emergency routing to
-     * handle the call. 3) if 'routing' is specified as @1.4::EmergencyNumberRouting#UNKNOWN,
-     * Android does not know how to handle the call.
+     * as EmergencyNumberRouting#EMERGENCY, the implementation must use emergency routing to handle
+     * the call. 3) if 'routing' is specified as EmergencyNumberRouting#UNKNOWN, Android does not
+     * know how to handle the call.
      *
      * If the dialed emergency number does not have a specified emergency service category, the
-     * 'categories' field is set to @1.4::EmergencyServiceCategory#UNSPECIFIED; if the dialed
-     * emergency number does not have specified emergency Uniform Resource Names, the 'urns' field
-     * is set to an empty list. If the underlying technology used to request emergency services
-     * does not support the emergency service category or emergency uniform resource names, the
-     * field 'categories' or 'urns' may be ignored.
+     * 'categories' field is set to EmergencyServiceCategory#UNSPECIFIED; if the dialed emergency
+     * number does not have specified emergency Uniform Resource Names, the 'urns' field is set to
+     * an empty list. If the underlying technology used to request emergency services does not
+     * support the emergency service category or emergency uniform resource names, the field
+     * 'categories' or 'urns' may be ignored.
      *
      * In the scenarios that the 'address' in the 'dialInfo' field has other functions besides the
      * emergency number function, if the 'hasKnownUserIntentEmergency' field is true, the user's
@@ -294,24 +290,23 @@
      *            RFC 5031
      *
      * @param serial Serial number of request.
-     * @param dialInfo the same @1.0::Dial information used by @1.0::IRadio.dial.
-     * @param categories bitfield<@1.4::EmergencyServiceCategory> the Emergency Service Category(s)
+     * @param dialInfo the same Dial information used by IRadio.dial.
+     * @param categories bitfield<EmergencyServiceCategory> the Emergency Service Category(s)
      *        of the call.
      * @param urns the emergency Uniform Resource Names (URN)
-     * @param routing @1.4::EmergencyCallRouting the emergency call routing information.
+     * @param routing EmergencyCallRouting the emergency call routing information.
      * @param hasKnownUserIntentEmergency Flag indicating if user's intent for the emergency call
      *        is known.
      * @param isTesting Flag indicating if this request is for testing purpose.
      *
      * Response function is IRadioResponse.emergencyDialResponse()
      */
-    oneway void emergencyDial(in int serial, in Dial dialInfo,
-            in EmergencyServiceCategory categories, in String[] urns,
-            in EmergencyCallRouting routing, in boolean hasKnownUserIntentEmergency,
-            in boolean isTesting);
+    void emergencyDial(in int serial, in Dial dialInfo, in EmergencyServiceCategory categories,
+            in String[] urns, in EmergencyCallRouting routing,
+            in boolean hasKnownUserIntentEmergency, in boolean isTesting);
 
     /**
-     * Toggle logical modem on/off. This is similar to @1.0::IRadio.setRadioPower(), however that
+     * Toggle logical modem on/off. This is similar to IRadio.setRadioPower(), however that
      * does not enforce that radio power is toggled only for the corresponding radio and certain
      * vendor implementations do it for all radios. This new API should affect only the modem for
      * which it is called. A modem stack must be on/active only when both setRadioPower() and
@@ -324,7 +319,7 @@
      *
      * Response function is IRadioResponse.enableModemResponse()
      */
-    oneway void enableModem(in int serial, in boolean on);
+    void enableModem(in int serial, in boolean on);
 
     /**
      * Enable or disable UiccApplications on the SIM. If disabled:
@@ -342,7 +337,7 @@
      *
      * Response callback is IRadioResponse.enableUiccApplicationsResponse()
      */
-    oneway void enableUiccApplications(in int serial, in boolean enable);
+    void enableUiccApplications(in int serial, in boolean enable);
 
     /**
      * Request the radio's system selection module to exit emergency callback mode. Radio must not
@@ -352,7 +347,7 @@
      *
      * Response callback is IRadioResponse.exitEmergencyCallbackModeResponse()
      */
-    oneway void exitEmergencyCallbackMode(in int serial);
+    void exitEmergencyCallbackMode(in int serial);
 
     /**
      * Connects the two calls and disconnects the subscriber from both calls.
@@ -361,16 +356,16 @@
      *
      * Response callback is IRadioResponse.explicitCallTransferResponse()
      */
-    oneway void explicitCallTransfer(in int serial);
+    void explicitCallTransfer(in int serial);
 
     /**
      * Get carrier restrictions.
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioResponse.getAllowedCarriersResponse_1_4()
+     * Response callback is IRadioResponse.getAllowedCarriersResponse()
      */
-    oneway void getAllowedCarriers(in int serial);
+    void getAllowedCarriers(in int serial);
 
     /**
      * Requests bitmap representing the currently allowed network types.
@@ -381,7 +376,7 @@
      *
      * Response callback is IRadioResponse.getAllowedNetworkTypesBitmapResponse()
      */
-    oneway void getAllowedNetworkTypesBitmap(in int serial);
+    void getAllowedNetworkTypesBitmap(in int serial);
 
     /**
      * Get the list of band modes supported by RF.
@@ -390,7 +385,7 @@
      *
      * Response function is IRadioResponse.getAvailableBandModesResponse()
      */
-    oneway void getAvailableBandModes(in int serial);
+    void getAvailableBandModes(in int serial);
 
     /**
      * Scans for available networks
@@ -399,7 +394,7 @@
      *
      * Response function is IRadioResponse.getAvailableNetworksResponse()
      */
-    oneway void getAvailableNetworks(in int serial);
+    void getAvailableNetworks(in int serial);
 
     /**
      * Get all the barring info for the current camped cell applicable to the current user.
@@ -408,7 +403,7 @@
      *
      * Response callback is IRadioResponse.getBarringInfoResponse()
      */
-    oneway void getBarringInfo(in int serial);
+    void getBarringInfo(in int serial);
 
     /**
      * Return string value indicating baseband version, eg response from AT+CGMR
@@ -417,7 +412,7 @@
      *
      * Response function is IRadioResponse.getBasebandVersionResponse()
      */
-    oneway void getBasebandVersion(in int serial);
+    void getBasebandVersion(in int serial);
 
     /**
      * Request the device MDN / H_SID / H_NID. The request is only allowed when CDMA subscription
@@ -428,7 +423,7 @@
      *
      * Response callback is IRadioResponse.getCDMASubscriptionResponse()
      */
-    oneway void getCDMASubscription(in int serial);
+    void getCDMASubscription(in int serial);
 
     /**
      * Request call forward status.
@@ -438,7 +433,7 @@
      *
      * Response function is IRadioResponse.getCallForwardStatusResponse()
      */
-    oneway void getCallForwardStatus(in int serial, in CallForwardInfo callInfo);
+    void getCallForwardStatus(in int serial, in CallForwardInfo callInfo);
 
     /**
      * Query current call waiting state
@@ -448,7 +443,7 @@
      *
      * Response function is IRadioResponse.getCallWaitingResponse()
      */
-    oneway void getCallWaiting(in int serial, in int serviceClass);
+    void getCallWaiting(in int serial, in int serviceClass);
 
     /**
      * Request the setting of CDMA Broadcast SMS config
@@ -457,7 +452,7 @@
      *
      * Response callback is IRadioResponse.getCdmaBroadcastConfigResponse()
      */
-    oneway void getCdmaBroadcastConfig(in int serial);
+    void getCdmaBroadcastConfig(in int serial);
 
     /**
      * Request the actual setting of the roaming preferences in CDMA in the modem
@@ -466,7 +461,7 @@
      *
      * Response callback is IRadioResponse.getCdmaRoamingPreferenceResponse()
      */
-    oneway void getCdmaRoamingPreference(in int serial);
+    void getCdmaRoamingPreference(in int serial);
 
     /**
      * Request to query the location where the CDMA subscription shall be retrieved.
@@ -475,19 +470,19 @@
      *
      * Response callback is IRadioResponse.getCdmaSubscriptionSourceResponse()
      */
-    oneway void getCdmaSubscriptionSource(in int serial);
+    void getCdmaSubscriptionSource(in int serial);
 
     /**
-     * Request all of the current cell information known to the radio. The radio
-     * must return list of all current cells, including the neighboring cells. If for a particular
-     * cell information isn't known then the appropriate unknown value will be returned.
+     * Request all of the current cell information known to the radio. The radio must return a list
+     * of all current cells, including the neighboring cells. If for a particular cell information
+     * isn't known then the appropriate unknown value will be returned.
      * This does not cause or change the rate of unsolicited cellInfoList().
      *
      * @param serial Serial number of request.
      *
      * Response callback is IRadioResponse.getCellInfoListResponse()
      */
-    oneway void getCellInfoList(in int serial);
+    void getCellInfoList(in int serial);
 
     /**
      * Queries the status of the CLIP supplementary service (for MMI code "*#30#")
@@ -496,7 +491,7 @@
      *
      * Response function is IRadioResponse.getClipResponse()
      */
-    oneway void getClip(in int serial);
+    void getClip(in int serial);
 
     /**
      * Gets current CLIR status
@@ -505,16 +500,16 @@
      *
      * Response function is IRadioResponse.getClirResponse()
      */
-    oneway void getClir(in int serial);
+    void getClir(in int serial);
 
     /**
      * Requests current call list
      *
      * @param serial Serial number of request.
      *
-     * Response function is IRadioResponse.getCurrentCallsResponse_1_6()
+     * Response function is IRadioResponse.getCurrentCallsResponse()
      */
-    oneway void getCurrentCalls(in int serial);
+    void getCurrentCalls(in int serial);
 
     /**
      * Returns the data call list. An entry is added when a setupDataCall() is issued and removed
@@ -523,18 +518,18 @@
      *
      * @param serial Serial number of request.
      *
-     * Response function is IRadioResponse.getDataCallListResponse_1_6()
+     * Response function is IRadioResponse.getDataCallListResponse()
      */
-    oneway void getDataCallList(in int serial);
+    void getDataCallList(in int serial);
 
     /**
      * Request current data registration state.
      *
      * @param serial Serial number of request.
      *
-     * Response function is IRadioResponse.getDataRegistrationStateResponse_1_6()
+     * Response function is IRadioResponse.getDataRegistrationStateResponse()
      */
-    oneway void getDataRegistrationState(in int serial);
+    void getDataRegistrationState(in int serial);
 
     /**
      * Request the device ESN / MEID / IMEI / IMEISV. The request is always allowed and contains
@@ -545,7 +540,7 @@
      *
      * Response callback is IRadioResponse.getDeviceIdentityResponse()
      */
-    oneway void getDeviceIdentity(in int serial);
+    void getDeviceIdentity(in int serial);
 
     /**
      * Query the status of a facility lock state
@@ -560,7 +555,7 @@
      *
      * Response function is IRadioResponse.getFacilityLockForAppResponse()
      */
-    oneway void getFacilityLockForApp(in int serial, in String facility, in String password,
+    void getFacilityLockForApp(in int serial, in String facility, in String password,
             in int serviceClass, in String appId);
 
     /**
@@ -570,7 +565,7 @@
      *
      * Response callback is IRadioResponse.getGsmBroadcastConfigResponse()
      */
-    oneway void getGsmBroadcastConfig(in int serial);
+    void getGsmBroadcastConfig(in int serial);
 
     /**
      * Request all of the current hardware (modem and sim) associated with Radio.
@@ -579,7 +574,7 @@
      *
      * Response callback is IRadioResponse.getHardwareConfigResponse()
      */
-    oneway void getHardwareConfig(in int serial);
+    void getHardwareConfig(in int serial);
 
     /**
      * Requests status of the ICC card
@@ -589,7 +584,7 @@
      * Response function is IRadioResponse.getIccCardStatusResponse()
      *
      */
-    oneway void getIccCardStatus(in int serial);
+    void getIccCardStatus(in int serial);
 
     /**
      * Request current IMS registration state
@@ -598,7 +593,7 @@
      *
      * Response callback is IRadioResponse.getImsRegistrationStateResponse()
      */
-    oneway void getImsRegistrationState(in int serial);
+    void getImsRegistrationState(in int serial);
 
     /**
      * Get the SIM IMSI. Only valid when radio state is "RADIO_STATE_ON"
@@ -609,7 +604,7 @@
      * Response function is IRadioResponse.getImsiForAppResponse()
      *
      */
-    oneway void getImsiForApp(in int serial, in String aid);
+    void getImsiForApp(in int serial, in String aid);
 
     /**
      * Requests the failure cause code for the most recently terminated call.
@@ -619,7 +614,7 @@
      * Response function is IRadioResponse.getLastCallFailCauseResponse()
      *
      */
-    oneway void getLastCallFailCause(in int serial);
+    void getLastCallFailCause(in int serial);
 
     /**
      * Get modem activity information for power consumption estimation. Request clear-on-read
@@ -630,7 +625,7 @@
      *
      * Response callback is IRadioResponse.getModemActivityInfoResponse()
      */
-    oneway void getModemActivityInfo(in int serial);
+    void getModemActivityInfo(in int serial);
 
     /**
      * Request status of logical modem. It returns isEnabled=true if the logical modem is on.
@@ -640,7 +635,7 @@
      *
      * Response function is IRadioResponse.getModemStackStatusResponse()
      */
-    oneway void getModemStackStatus(in int serial);
+    void getModemStackStatus(in int serial);
 
     /**
      * Queries the current state of the uplink mute setting
@@ -649,7 +644,7 @@
      *
      * Response function is IRadioResponse.getMuteResponse()
      */
-    oneway void getMute(in int serial);
+    void getMute(in int serial);
 
     /**
      * Request neighboring cell id in GSM network
@@ -658,7 +653,7 @@
      *
      * Response callback is IRadioResponse.getNeighboringCidsResponse()
      */
-    oneway void getNeighboringCids(in int serial);
+    void getNeighboringCids(in int serial);
 
     /**
      * Query current network selection mode
@@ -667,7 +662,7 @@
      *
      * Response function is IRadioResponse.getNetworkSelectionModeResponse()
      */
-    oneway void getNetworkSelectionMode(in int serial);
+    void getNetworkSelectionMode(in int serial);
 
     /**
      * Request current operator ONS or EONS
@@ -676,7 +671,7 @@
      *
      * Response function is IRadioResponse.getOperatorResponse()
      */
-    oneway void getOperator(in int serial);
+    void getOperator(in int serial);
 
     /**
      * Query the preferred network type (CS/PS domain, RAT, and operation mode)
@@ -686,7 +681,7 @@
      *
      * Response callback is IRadioResponse.getPreferredNetworkTypeResponse()
      */
-    oneway void getPreferredNetworkType(in int serial);
+    void getPreferredNetworkType(in int serial);
 
     /**
      * Query the preferred network type bitmap.
@@ -695,7 +690,7 @@
      *
      * Response callback is IRadioResponse.getPreferredNetworkTypeBitmapResponse()
      */
-    oneway void getPreferredNetworkTypeBitmap(in int serial);
+    void getPreferredNetworkTypeBitmap(in int serial);
 
     /**
      * Request the setting of preferred voice privacy mode.
@@ -704,7 +699,7 @@
      *
      * Response callback is IRadioResponse.getPreferredVoicePrivacyResponse()
      */
-    oneway void getPreferredVoicePrivacy(in int serial);
+    void getPreferredVoicePrivacy(in int serial);
 
     /**
      * Used to get phone radio capability.
@@ -713,16 +708,16 @@
      *
      * Response callback is IRadioResponse.getRadioCapabilityResponse()
      */
-    oneway void getRadioCapability(in int serial);
+    void getRadioCapability(in int serial);
 
     /**
      * Requests current signal strength and associated information. Must succeed if radio is on.
      *
      * @param serial Serial number of request.
      *
-     * Response function is IRadioResponse.getSignalStrengthResponse_1_6()
+     * Response function is IRadioResponse.getSignalStrengthResponse()
      */
-    oneway void getSignalStrength(in int serial);
+    void getSignalStrength(in int serial);
 
     /**
      * Get the phone book capacity
@@ -731,7 +726,7 @@
      *
      * Response function is defined from IRadioResponse.getSimPhonebookCapacityResponse()
      */
-    oneway void getSimPhonebookCapacity(in int serial);
+    void getSimPhonebookCapacity(in int serial);
 
     /**
      * Get the local and global phonebook records from the SIM card.
@@ -742,7 +737,7 @@
      *
      * Response callback is IRadioResponse.getSimPhonebookRecordsResponse()
      */
-    oneway void getSimPhonebookRecords(in int serial);
+    void getSimPhonebookRecords(in int serial);
 
     /**
      * Request to get the current slicing configuration including URSP rules and NSSAIs
@@ -753,7 +748,7 @@
      *
      * Response function is IRadioResponse.getSlicingConfigResponse()
      */
-    oneway void getSlicingConfig(in int serial);
+    void getSlicingConfig(in int serial);
 
     /**
      * Get the default Short Message Service Center address on the device.
@@ -762,7 +757,7 @@
      *
      * Response callback is IRadioResponse.getSmscAddressResponse()
      */
-    oneway void getSmscAddress(in int serial);
+    void getSmscAddress(in int serial);
 
     /**
      * Get which bands the modem's background scan is acting on.
@@ -771,7 +766,7 @@
      *
      * Response callback is IRadioResponse.getSystemSelectionChannelsResponse()
      */
-    oneway void getSystemSelectionChannels(in int serial);
+    void getSystemSelectionChannels(in int serial);
 
     /**
      * Request the setting of TTY mode
@@ -780,7 +775,7 @@
      *
      * Response callback is IRadioResponse.getTTYModeResponse()
      */
-    oneway void getTTYMode(in int serial);
+    void getTTYMode(in int serial);
 
     /**
      * Query the radio technology type (3GPP/3GPP2) used for voice. Query is valid only
@@ -790,7 +785,7 @@
      *
      * Response callback is IRadioResponse.getVoiceRadioTechnologyResponse()
      */
-    oneway void getVoiceRadioTechnology(in int serial);
+    void getVoiceRadioTechnology(in int serial);
 
     /**
      * Request current voice registration state.
@@ -799,7 +794,7 @@
      *
      * Response function is IRadioResponse.getVoiceRegistrationStateResponse()
      */
-    oneway void getVoiceRegistrationState(in int serial);
+    void getVoiceRegistrationState(in int serial);
 
     /**
      * When STK application gets stkCallSetup(), the call actually has been initialized by the
@@ -811,7 +806,7 @@
      *
      * Response callback is IRadioResponse.handleStkCallSetupRequestFromSimResponse()
      */
-    oneway void handleStkCallSetupRequestFromSim(in int serial, in boolean accept);
+    void handleStkCallSetupRequestFromSim(in int serial, in boolean accept);
 
     /**
      * Hang up a specific line (like AT+CHLD=1x). After this HANGUP request returns, Radio must
@@ -822,7 +817,7 @@
      *
      * Response function is IRadioResponse.hangupResponse()
      */
-    oneway void hangup(in int serial, in int gsmIndex);
+    void hangup(in int serial, in int gsmIndex);
 
     /**
      * Hang up waiting or held (like AT+CHLD=1). After this HANGUP request returns, Radio must show
@@ -832,7 +827,7 @@
      *
      * Response function is IRadioResponse.hangupForegroundResumeBackgroundResponse()
      */
-    oneway void hangupForegroundResumeBackground(in int serial);
+    void hangupForegroundResumeBackground(in int serial);
 
     /**
      * Hang up waiting or held (like AT+CHLD=0). After this HANGUP request returns, Radio must show
@@ -842,7 +837,7 @@
      *
      * Response function is IRadioResponse.hangupWaitingOrBackgroundResponse()
      */
-    oneway void hangupWaitingOrBackground(in int serial);
+    void hangupWaitingOrBackground(in int serial);
 
     /**
      * Close a previously opened logical channel. This command reflects TS 27.007
@@ -853,7 +848,7 @@
      *
      * Response callback is IRadioResponse.iccCloseLogicalChannelResponse()
      */
-    oneway void iccCloseLogicalChannel(in int serial, in int channelId);
+    void iccCloseLogicalChannel(in int serial, in int channelId);
 
     /**
      * Request ICC I/O operation. This is similar to the TS 27.007 "restricted SIM" operation where
@@ -867,7 +862,7 @@
      *
      * Response function is IRadioResponse.iccIOForAppResponse()
      */
-    oneway void iccIOForApp(in int serial, in IccIo iccIo);
+    void iccIOForApp(in int serial, in IccIo iccIo);
 
     /**
      * Open a new logical channel and select the given application. This command
@@ -875,11 +870,11 @@
      *
      * @param serial Serial number of request.
      * @param aid AID value, See ETSI 102.221 and 101.220.
-     * @param p2 P2 value, described in ISO 7816-4. Ignore if equal to P2Constant:NO_P2
+     * @param p2 P2 value, described in ISO 7816-4. Ignore if equal to RadioConst:P2_CONSTANT_NO_P2
      *
      * Response callback is IRadioResponse.iccOpenLogicalChannelResponse()
      */
-    oneway void iccOpenLogicalChannel(in int serial, in String aid, in int p2);
+    void iccOpenLogicalChannel(in int serial, in String aid, in int p2);
 
     /**
      * Request APDU exchange on the basic channel. This command reflects TS 27.007
@@ -892,7 +887,7 @@
      *
      * Response callback is IRadioResponse.iccTransmitApduBasicChannelResponse()
      */
-    oneway void iccTransmitApduBasicChannel(in int serial, in SimApdu message);
+    void iccTransmitApduBasicChannel(in int serial, in SimApdu message);
 
     /**
      * Exchange APDUs with a UICC over a previously opened logical channel. This command reflects
@@ -904,7 +899,7 @@
      *
      * Response callback is IRadioResponse.iccTransmitApduLogicalChannelResponse()
      */
-    oneway void iccTransmitApduLogicalChannel(in int serial, in SimApdu message);
+    void iccTransmitApduLogicalChannel(in int serial, in SimApdu message);
 
     /**
      * Is E-UTRA-NR Dual Connectivity enabled
@@ -912,7 +907,7 @@
      * @param serial Serial number of request.
      * Response callback is IRadioResponse.isNrDualConnectivityEnabledResponse()
      */
-    oneway void isNrDualConnectivityEnabled(in int serial);
+    void isNrDualConnectivityEnabled(in int serial);
 
     /**
      * Read one of the radio NV items.
@@ -923,7 +918,7 @@
      *
      * Response callback is IRadioResponse.nvReadItemResponse()
      */
-    oneway void nvReadItem(in int serial, in NvItem itemId);
+    void nvReadItem(in int serial, in NvItem itemId);
 
     /**
      * Reset the radio NV configuration to the factory state.
@@ -934,7 +929,7 @@
      *
      * Response callback is IRadioResponse.nvResetConfigResponse()
      */
-    oneway void nvResetConfig(in int serial, in ResetNvType resetType);
+    void nvResetConfig(in int serial, in ResetNvType resetType);
 
     /**
      * Update the CDMA Preferred Roaming List (PRL) in the radio NV storage.
@@ -945,7 +940,7 @@
      *
      * Response callback is IRadioResponse.nvWriteCdmaPrlResponse()
      */
-    oneway void nvWriteCdmaPrl(in int serial, in byte[] prl);
+    void nvWriteCdmaPrl(in int serial, in byte[] prl);
 
     /**
      * Write one of the radio NV items.
@@ -956,19 +951,7 @@
      *
      * Response callback is IRadioResponse.nvWriteItemResponse()
      */
-    oneway void nvWriteItem(in int serial, in NvWriteItem item);
-
-    /**
-     * Pull LCE service for capacity information.
-     *
-     * @param serial Serial number of request.
-     *
-     * Response callback is IRadioResponse.pullLceDataResponse() which may return
-     * RadioError:REQUEST_NOT_SUPPORTED if @1.2::IRadio or higher is supported.
-     *
-     * DEPRECATED in @1.2 or higher which use the always-on LCE that relies on indications.
-     */
-    oneway void pullLceData(in int serial);
+    void nvWriteItem(in int serial, in NvWriteItem item);
 
     /**
      * Send UDUB (user determined user busy) to ringing or waiting call answer)
@@ -977,7 +960,7 @@
      *
      * Response function is IRadioResponse.rejectCallResponse()
      */
-    oneway void rejectCall(in int serial);
+    void rejectCall(in int serial);
 
     /**
      * Releases a pdu session id that was previously allocated using allocatePduSessionId.
@@ -988,7 +971,7 @@
      *
      * Response function is IRadioResponse.releasePduSessionIdResponse()
      */
-    oneway void releasePduSessionId(in int serial, in int id);
+    void releasePduSessionId(in int serial, in int id);
 
     /**
      * Indicates whether there is storage available for new SMS messages.
@@ -999,7 +982,7 @@
      *
      * Response callback is IRadioResponse.reportSmsMemoryStatusResponse()
      */
-    oneway void reportSmsMemoryStatus(in int serial, in boolean available);
+    void reportSmsMemoryStatus(in int serial, in boolean available);
 
     /**
      * Indicates that the StkService is running and is ready to receive unsolicited stk commands.
@@ -1008,7 +991,7 @@
      *
      * Response callback is IRadioResponse.reportStkServiceIsRunningResponse()
      */
-    oneway void reportStkServiceIsRunning(in int serial);
+    void reportStkServiceIsRunning(in int serial);
 
     /**
      * Returns the response of SIM Authentication through Radio challenge request.
@@ -1021,7 +1004,7 @@
      *
      * Response callback is IRadioResponse.requestIccSimAuthenticationResponse()
      */
-    oneway void requestIccSimAuthentication(
+    void requestIccSimAuthentication(
             in int serial, in int authContext, in String authData, in String aid);
 
     /**
@@ -1033,7 +1016,7 @@
      *
      * Response callback is IRadioResponse.requestIsimAuthenticationResponse()
      */
-    oneway void requestIsimAuthentication(in int serial, in String challenge);
+    void requestIsimAuthentication(in int serial, in String challenge);
 
     /**
      * Device is shutting down. All further commands are ignored and RADIO_NOT_AVAILABLE
@@ -1043,14 +1026,14 @@
      *
      * Response callback is IRadioResponse.requestShutdownResponse()
      */
-    oneway void requestShutdown(in int serial);
+    void requestShutdown(in int serial);
 
     /**
      * When response type received from a radio indication or radio response is
      * RadioIndicationType:UNSOLICITED_ACK_EXP or RadioResponseType:SOLICITED_ACK_EXP respectively,
      * acknowledge the receipt of those messages by sending responseAcknowledgement().
      */
-    oneway void responseAcknowledgement();
+    void responseAcknowledgement();
 
     /**
      * Send DTMF string
@@ -1062,7 +1045,7 @@
      *
      * Response callback is IRadioResponse.sendBurstDtmfResponse()
      */
-    oneway void sendBurstDtmf(in int serial, in String dtmf, in int on, in int off);
+    void sendBurstDtmf(in int serial, in String dtmf, in int on, in int off);
 
     /**
      * Send FLASH command
@@ -1072,7 +1055,7 @@
      *
      * Response callback is IRadioResponse.sendCDMAFeatureCodeResponse()
      */
-    oneway void sendCDMAFeatureCode(in int serial, in String featureCode);
+    void sendCDMAFeatureCode(in int serial, in String featureCode);
 
     /**
      * Send a CDMA SMS message
@@ -1082,7 +1065,7 @@
      *
      * Response callback is IRadioResponse.sendCdmaSmsResponse()
      */
-    oneway void sendCdmaSms(in int serial, in CdmaSmsMessage sms);
+    void sendCdmaSms(in int serial, in CdmaSmsMessage sms);
 
     /**
      * Send an SMS message. Identical to sendCdmaSms, except that more messages are expected to be
@@ -1093,7 +1076,7 @@
      *
      * Response callback is IRadioResponse.sendCdmaSMSExpectMoreResponse()
      */
-    oneway void sendCdmaSmsExpectMore(in int serial, in CdmaSmsMessage sms);
+    void sendCdmaSmsExpectMore(in int serial, in CdmaSmsMessage sms);
 
     /**
      * Send the updated device state. This is providing the device state information for the modem
@@ -1105,8 +1088,7 @@
      *
      * Response callback is IRadioResponse.sendDeviceStateResponse()
      */
-    oneway void sendDeviceState(
-            in int serial, in DeviceStateType deviceStateType, in boolean state);
+    void sendDeviceState(in int serial, in DeviceStateType deviceStateType, in boolean state);
 
     /**
      * Send a DTMF tone. If the implementation is currently playing a tone requested via
@@ -1117,7 +1099,7 @@
      *
      * Response function is IRadioResponse.sendDtmfResponse()
      */
-    oneway void sendDtmf(in int serial, in String s);
+    void sendDtmf(in int serial, in String s);
 
     /**
      * Requests to send a SAT/USAT envelope command to SIM.
@@ -1128,7 +1110,7 @@
      *
      * Response function is IRadioResponse.sendEnvelopeResponse()
      */
-    oneway void sendEnvelope(in int serial, in String command);
+    void sendEnvelope(in int serial, in String command);
 
     /**
      * Requests to send a SAT/USAT envelope command to SIM. The SAT/USAT envelope command refers to
@@ -1143,7 +1125,7 @@
      *
      * Response callback is IRadioResponse.sendEnvelopeWithStatusResponse()
      */
-    oneway void sendEnvelopeWithStatus(in int serial, in String contents);
+    void sendEnvelopeWithStatus(in int serial, in String contents);
 
     /**
      * Send a SMS message over IMS. Based on the return error, caller decides to resend if sending
@@ -1155,23 +1137,7 @@
      *
      * Response callback is IRadioResponse.sendImsSmsResponse()
      */
-    oneway void sendImsSms(in int serial, in ImsSmsMessage message);
-
-    /**
-     * Send an SMS message. Identical to sendSms, except that more messages are expected to be sent
-     * soon. If possible, keep SMS relay protocol link open (eg TS 27.005 AT+CMMS command).
-     * Based on the returned error, caller decides to resend if sending sms fails.
-     * RadioError:SMS_SEND_FAIL_RETRY means retry (i.e. error cause is 332) and
-     * RadioError:GENERIC_FAILURE means no retry (i.e. error cause is 500)
-     *
-     * @param serial Serial number of request.
-     * @param message GsmSmsMessage as defined in types.hal
-     *
-     * Response function is IRadioResponse.sendSMSExpectMoreResponse()
-     *
-     * DEPRECATED in @1.6 or higher which uses sendSmsExpectMore().
-     */
-    oneway void sendSMSExpectMore(in int serial, in GsmSmsMessage message);
+    void sendImsSms(in int serial, in ImsSmsMessage message);
 
     /**
      * Send an SMS message. Based on the returned error, caller decides to resend if sending sms
@@ -1183,7 +1149,7 @@
      *
      * Response function is IRadioResponse.sendSmsResponse()
      */
-    oneway void sendSms(in int serial, in GsmSmsMessage message);
+    void sendSms(in int serial, in GsmSmsMessage message);
 
     /**
      * Send an SMS message. Identical to sendSms, except that more messages are expected to be sent
@@ -1197,7 +1163,7 @@
      *
      * Response function is IRadioResponse.sendSmsExpectMoreResponse()
      */
-    oneway void sendSmsExpectMore(in int serial, in GsmSmsMessage message);
+    void sendSmsExpectMore(in int serial, in GsmSmsMessage message);
 
     /**
      * Requests to send a terminal response to SIM for a received proactive command
@@ -1208,7 +1174,7 @@
      *
      * Response function is IRadioResponse.sendTerminalResponseResponseToSim()
      */
-    oneway void sendTerminalResponseToSim(in int serial, in String commandResponse);
+    void sendTerminalResponseToSim(in int serial, in String commandResponse);
 
     /**
      * Send a USSD message. If a USSD session already exists, the message must be sent in the
@@ -1227,7 +1193,7 @@
      *
      * See also requestCancelUssd, unsolOnUssd
      */
-    oneway void sendUssd(in int serial, in String ussd);
+    void sendUssd(in int serial, in String ussd);
 
     /**
      * Separate a party from a multiparty call placing the multiparty call (less the specified
@@ -1243,7 +1209,7 @@
      *
      * Response function is IRadioResponse.separateConnectionResponse()
      */
-    oneway void separateConnection(in int serial, in int gsmIndex);
+    void separateConnection(in int serial, in int gsmIndex);
 
     /**
      * Set carrier restrictions. Expected modem behavior:
@@ -1257,13 +1223,12 @@
      *    CardState:RESTRICTED. Emergency service must be enabled.
      *
      * @param serial Serial number of request.
-     * @param carriers CarrierRestrictionsWithPriority consisting allowed and excluded carriers
-     *        as defined in types.hal
+     * @param carriers CarrierRestrictions consisting allowed and excluded carriers
      * @param multiSimPolicy Policy to be used for devices with multiple SIMs.
      *
      * Response callback is IRadioResponse.setAllowedCarriersResponse()
      */
-    oneway void setAllowedCarriers(in int serial, in CarrierRestrictionsWithPriority carriers,
+    void setAllowedCarriers(in int serial, in CarrierRestrictions carriers,
             in SimLockMultiSimPolicy multiSimPolicy);
 
     /**
@@ -1277,7 +1242,7 @@
      *
      * Response callback is IRadioResponse.setAllowedNetworkTypesBitmapResponse()
      */
-    oneway void setAllowedNetworkTypesBitmap(in int serial, in RadioAccessFamily networkTypeBitmap);
+    void setAllowedNetworkTypesBitmap(in int serial, in RadioAccessFamily networkTypeBitmap);
 
     /**
      * Assign a specified band for RF configuration.
@@ -1287,7 +1252,7 @@
      *
      * Response function is IRadioResponse.setBandModeResponse()
      */
-    oneway void setBandMode(in int serial, in RadioBandMode mode);
+    void setBandMode(in int serial, in RadioBandMode mode);
 
     /**
      * Change call barring facility password
@@ -1299,7 +1264,7 @@
      *
      * Response function is IRadioResponse.setBarringPasswordResponse()
      */
-    oneway void setBarringPassword(
+    void setBarringPassword(
             in int serial, in String facility, in String oldPassword, in String newPassword);
 
     /**
@@ -1310,7 +1275,7 @@
      *
      * Response function is IRadioResponse.setCallForwardResponse()
      */
-    oneway void setCallForward(in int serial, in CallForwardInfo callInfo);
+    void setCallForward(in int serial, in CallForwardInfo callInfo);
 
     /**
      * Configure current call waiting state
@@ -1321,7 +1286,7 @@
      *
      * Response function is IRadioResponse.setCallWaitingResponse()
      */
-    oneway void setCallWaiting(in int serial, in boolean enable, in int serviceClass);
+    void setCallWaiting(in int serial, in boolean enable, in int serviceClass);
 
     /**
      * Provide Carrier specific information to the modem that must be used to encrypt the IMSI and
@@ -1333,8 +1298,7 @@
      *
      * Response callback is IRadioResponse.setCarrierInfoForImsiEncryptionResponse()
      */
-    oneway void setCarrierInfoForImsiEncryption(
-            in int serial, in ImsiEncryptionInfo imsiEncryptionInfo);
+    void setCarrierInfoForImsiEncryption(in int serial, in ImsiEncryptionInfo imsiEncryptionInfo);
 
     /**
      * Enable or disable the reception of CDMA Cell Broadcast SMS
@@ -1345,7 +1309,7 @@
      *
      * Response callback is IRadioResponse.setCdmaBroadcastActivationResponse()
      */
-    oneway void setCdmaBroadcastActivation(in int serial, in boolean activate);
+    void setCdmaBroadcastActivation(in int serial, in boolean activate);
 
     /**
      * Set CDMA Broadcast SMS config
@@ -1355,7 +1319,7 @@
      *
      * Response callback is IRadioResponse.setCdmaBroadcastConfigResponse()
      */
-    oneway void setCdmaBroadcastConfig(in int serial, in CdmaBroadcastSmsConfigInfo[] configInfo);
+    void setCdmaBroadcastConfig(in int serial, in CdmaBroadcastSmsConfigInfo[] configInfo);
 
     /**
      * Request to set the roaming preferences in CDMA
@@ -1365,7 +1329,7 @@
      *
      * Response callback is IRadioResponse.setCdmaRoamingPreferenceResponse()
      */
-    oneway void setCdmaRoamingPreference(in int serial, in CdmaRoamingType type);
+    void setCdmaRoamingPreference(in int serial, in CdmaRoamingType type);
 
     /**
      * Request to set the location where the CDMA subscription shall be retrieved
@@ -1375,7 +1339,7 @@
      *
      * Response callback is IRadioResponse.setCdmaSubscriptionSourceResponse()
      */
-    oneway void setCdmaSubscriptionSource(in int serial, in CdmaSubscriptionSource cdmaSub);
+    void setCdmaSubscriptionSource(in int serial, in CdmaSubscriptionSource cdmaSub);
 
     /**
      * Sets the minimum time between when unsolicited cellInfoList() must be invoked.
@@ -1387,7 +1351,7 @@
      *
      * Response callback is IRadioResponse.setCellInfoListRateResponse()
      */
-    oneway void setCellInfoListRate(in int serial, in int rate);
+    void setCellInfoListRate(in int serial, in int rate);
 
     /**
      * Set current CLIR status
@@ -1397,7 +1361,7 @@
      *
      * Response function is IRadioResponse.setClirResponse()
      */
-    oneway void setClir(in int serial, in int status);
+    void setClir(in int serial, in int status);
 
     /**
      * Tells the modem whether data calls are allowed or not
@@ -1407,7 +1371,7 @@
      *
      * Response callback is IRadioResponse.setDataAllowedResponse()
      */
-    oneway void setDataAllowed(in int serial, in boolean allow);
+    void setDataAllowed(in int serial, in boolean allow);
 
     /**
      * Send data profiles of the current carrier to the modem.
@@ -1417,7 +1381,7 @@
      *
      * Response callback is IRadioResponse.setDataProfileResponse()
      */
-    oneway void setDataProfile(in int serial, in DataProfileInfo[] profiles);
+    void setDataProfile(in int serial, in DataProfileInfo[] profiles);
 
     /**
      * Control data throttling at modem.
@@ -1438,7 +1402,7 @@
      *
      * Response function is IRadioResponse.setDataThrottlingResponse()
      */
-    oneway void setDataThrottling(in int serial, in DataThrottlingAction dataThrottlingAction,
+    void setDataThrottling(in int serial, in DataThrottlingAction dataThrottlingAction,
             in long completionDurationMillis);
 
     /**
@@ -1455,7 +1419,7 @@
      *
      * Response function is IRadioResponse.setFacilityLockForAppResponse()
      */
-    oneway void setFacilityLockForApp(in int serial, in String facility, in boolean lockState,
+    void setFacilityLockForApp(in int serial, in String facility, in boolean lockState,
             in String password, in int serviceClass, in String appId);
 
     /**
@@ -1467,7 +1431,7 @@
      *
      * Response callback is IRadioResponse.setGsmBroadcastActivationResponse()
      */
-    oneway void setGsmBroadcastActivation(in int serial, in boolean activate);
+    void setGsmBroadcastActivation(in int serial, in boolean activate);
 
     /**
      * Set GSM/WCDMA Cell Broadcast SMS config
@@ -1477,7 +1441,7 @@
      *
      * Response callback is IRadioResponse.setGsmBroadcastConfigResponse()
      */
-    oneway void setGsmBroadcastConfig(in int serial, in GsmBroadcastSmsConfigInfo[] configInfo);
+    void setGsmBroadcastConfig(in int serial, in GsmBroadcastSmsConfigInfo[] configInfo);
 
     /**
      * Sets the indication filter. Prevents the reporting of specified unsolicited indications from
@@ -1490,7 +1454,7 @@
      *
      * Response callback is IRadioResponse.setIndicationFilterResponse()
      */
-    oneway void setIndicationFilter(in int serial, in IndicationFilter indicationFilter);
+    void setIndicationFilter(in int serial, in IndicationFilter indicationFilter);
 
     /**
      * Set an APN to initial attach network.
@@ -1500,7 +1464,7 @@
      *
      * Response callback is IRadioResponse.setInitialAttachApnResponse()
      */
-    oneway void setInitialAttachApn(in int serial, in DataProfileInfo dataProfileInfo);
+    void setInitialAttachApn(in int serial, in DataProfileInfo dataProfileInfo);
 
     /**
      * Sets the link capacity reporting criteria. The resulting reporting criteria are the AND of
@@ -1524,7 +1488,7 @@
      *        vector size of 0 disables the use of UL thresholds for reporting.
      * @param accessNetwork The type of network for which to apply these thresholds.
      */
-    oneway void setLinkCapacityReportingCriteria(in int serial, in int hysteresisMs,
+    void setLinkCapacityReportingCriteria(in int serial, in int hysteresisMs,
             in int hysteresisDlKbps, in int hysteresisUlKbps, in int[] thresholdsDownlinkKbps,
             in int[] thresholdsUplinkKbps, in AccessNetwork accessNetwork);
 
@@ -1539,7 +1503,7 @@
      *
      * Response callback is IRadioResponse.setLocationUpdatesResponse()
      */
-    oneway void setLocationUpdates(in int serial, in boolean enable);
+    void setLocationUpdates(in int serial, in boolean enable);
 
     /**
      * Turn on or off uplink (microphone) mute. Must only be sent while voice call is active.
@@ -1550,7 +1514,7 @@
      *
      * Response function is IRadioResponse.setMuteResponse()
      */
-    oneway void setMute(in int serial, in boolean enable);
+    void setMute(in int serial, in boolean enable);
 
     /**
      * Specify that the network must be selected automatically.
@@ -1560,7 +1524,7 @@
      *
      * Response function is IRadioResponse.setNetworkSelectionModeAutomaticResponse()
      */
-    oneway void setNetworkSelectionModeAutomatic(in int serial);
+    void setNetworkSelectionModeAutomatic(in int serial);
 
     /**
      * Manually select a specified network. This request must not respond until the new operator is
@@ -1576,7 +1540,7 @@
      *
      * Response function is IRadioResponse.setNetworkSelectionModeManualResponse()
      */
-    oneway void setNetworkSelectionModeManual(
+    void setNetworkSelectionModeManual(
             in int serial, in String operatorNumeric, in RadioAccessNetworks ran);
 
     /**
@@ -1592,7 +1556,7 @@
      *
      * Response callback is IRadioResponse.setNRDualConnectivityStateResponse()
      */
-    oneway void setNrDualConnectivityState(
+    void setNrDualConnectivityState(
             in int serial, in NrDualConnectivityState nrDualConnectivityState);
 
     /**
@@ -1604,7 +1568,7 @@
      *
      * Response callback is IRadioResponse.setPreferredNetworkTypeResponse()
      */
-    oneway void setPreferredNetworkType(in int serial, in PreferredNetworkType nwType);
+    void setPreferredNetworkType(in int serial, in PreferredNetworkType nwType);
 
     /**
      * Requests to set the preferred network type for searching and registering.
@@ -1614,8 +1578,7 @@
      *
      * Response callback is IRadioResponse.setPreferredNetworkTypeBitmapResponse()
      */
-    oneway void setPreferredNetworkTypeBitmap(
-            in int serial, in RadioAccessFamily networkTypeBitmap);
+    void setPreferredNetworkTypeBitmap(in int serial, in RadioAccessFamily networkTypeBitmap);
 
     /**
      * Request to set the preferred voice privacy mode used in voice scrambling.
@@ -1626,7 +1589,7 @@
      *
      * Response callback is IRadioResponse.setPreferredVoicePrivacyResponse()
      */
-    oneway void setPreferredVoicePrivacy(in int serial, in boolean enable);
+    void setPreferredVoicePrivacy(in int serial, in boolean enable);
 
     /**
      * Used to set the phones radio capability. Be VERY careful using this request as it may cause
@@ -1638,7 +1601,7 @@
      *
      * Response callback is IRadioResponse.setRadioCapabilityResponse()
      */
-    oneway void setRadioCapability(in int serial, in RadioCapability rc);
+    void setRadioCapability(in int serial, in RadioCapability rc);
 
     /**
      * Toggle radio on and off (for "airplane" mode). If the radio is turned off/on the radio modem
@@ -1648,7 +1611,7 @@
      * logical modem, powerOn, forEmergencyCall and preferredForEmergencyCall must be true. In
      * this case, this modem is optimized to scan only emergency call bands, until:
      * 1) Emergency call is completed; or
-     * 2) Another setRadioPower_1_5 is issued with forEmergencyCall being false or
+     * 2) Another setRadioPower is issued with forEmergencyCall being false or
      *    preferredForEmergencyCall being false; or
      * 3) Timeout after 30 seconds if dial or emergencyDial is not called.
      * Once one of these conditions is reached, the modem should move into normal operation.
@@ -1662,7 +1625,7 @@
      *
      * Response callback is IRadioConfigResponse.setRadioPowerResponse.
      */
-    oneway void setRadioPower(in int serial, in boolean powerOn, in boolean forEmergencyCall,
+    void setRadioPower(in int serial, in boolean powerOn, in boolean forEmergencyCall,
             in boolean preferredForEmergencyCall);
 
     /**
@@ -1695,7 +1658,7 @@
      *
      * Response callback is IRadioResponse.setSignalStrengthReportingCriteriaResponse()
      */
-    oneway void setSignalStrengthReportingCriteria(in int serial,
+    void setSignalStrengthReportingCriteria(in int serial,
             in SignalThresholdInfo signalThresholdInfo, in AccessNetwork accessNetwork);
 
     /**
@@ -1725,7 +1688,7 @@
      *
      * Response callback is IRadioResponse.setSimCardPowerResponse().
      */
-    oneway void setSimCardPower(in int serial, in CardPowerState powerUp);
+    void setSimCardPower(in int serial, in CardPowerState powerUp);
 
     /**
      * Set the default Short Message Service Center address on the device.
@@ -1735,7 +1698,7 @@
      *
      * Response callback is IRadioResponse.setSmscAddressResponse()
      */
-    oneway void setSmscAddress(in int serial, in String smsc);
+    void setSmscAddress(in int serial, in String smsc);
 
     /**
      * Enables/disables supplementary service related notifications from the network.
@@ -1746,7 +1709,7 @@
      *
      * Response function is IRadioResponse.setSuppServiceNotificationsResponse()
      */
-    oneway void setSuppServiceNotifications(in int serial, in boolean enable);
+    void setSuppServiceNotifications(in int serial, in boolean enable);
 
     /**
      * Specify which bands modem's background scan must act on. If specifyChannels is true, it only
@@ -1759,7 +1722,7 @@
      *
      * Response callback is IRadioResponse.setSystemSelectionChannelsResponse()
      */
-    oneway void setSystemSelectionChannels(
+    void setSystemSelectionChannels(
             in int serial, in boolean specifyChannels, in RadioAccessSpecifier[] specifiers);
 
     /**
@@ -1770,7 +1733,7 @@
      *
      * Response callback is IRadioResponse.setTTYModeResponse()
      */
-    oneway void setTTYMode(in int serial, in TtyMode mode);
+    void setTTYMode(in int serial, in TtyMode mode);
 
     /**
      * Selection/de-selection of a subscription from a SIM card
@@ -1780,7 +1743,7 @@
      *
      * Response callback is IRadioResponse.setUiccSubscriptionResponse()
      */
-    oneway void setUiccSubscription(in int serial, in SelectUiccSub uiccSub);
+    void setUiccSubscription(in int serial, in SelectUiccSub uiccSub);
 
     /**
      * Setup a packet data connection. If DataCallResponse.status returns DataCallFailCause:NONE,
@@ -1839,11 +1802,12 @@
      *
      * Response function is IRadioResponse.setupDataCallResponse()
      */
-    oneway void setupDataCall(in int serial, in AccessNetwork accessNetwork,
+    void setupDataCall(in int serial, in AccessNetwork accessNetwork,
             in DataProfileInfo dataProfileInfo, in boolean roamingAllowed,
             in DataRequestReason reason, in LinkAddress[] addresses, in String[] dnses,
-            in int pduSessionId, in OptionalSliceInfo sliceInfo,
-            in OptionalTrafficDescriptor trafficDescriptor, in boolean matchAllRuleAllowed);
+            in int pduSessionId, in @nullable SliceInfo sliceInfo,
+            in @nullable TrafficDescriptor trafficDescriptor,
+            in boolean matchAllRuleAllowed);
 
     /**
      * Start playing a DTMF tone. Continue playing DTMF tone until stopDtmf is received. If a
@@ -1855,7 +1819,7 @@
      *
      * Response function is IRadioResponse.startDtmfResponse()
      */
-    oneway void startDtmf(in int serial, in String s);
+    void startDtmf(in int serial, in String s);
 
     /**
      * Indicates that a handover to the IWLAN transport has begun. Any resources being transferred
@@ -1872,7 +1836,7 @@
      *
      * Response function is IRadioResponse.startHandoverResponse()
      */
-    oneway void startHandover(in int serial, in int callId);
+    void startHandover(in int serial, in int callId);
 
     /**
      * Start a Keepalive session (for IPsec)
@@ -1882,20 +1846,7 @@
      *
      * Response function is IRadioResponse.startKeepaliveResponse()
      */
-    oneway void startKeepalive(in int serial, in KeepaliveRequest keepalive);
-
-    /**
-     * Start Link Capacity Estimate (LCE) service if supported by the radio.
-     *
-     * @param serial Serial number of request.
-     * @param reportInterval desired reporting interval (ms).
-     * @param pullMode LCE service mode. true: PULL; false: PUSH.
-     *
-     * Response callback is IRadioResponse.startLceServiceResponse()
-     *
-     * DEPRECATED in @1.2 or higher which use the always-on LCE that relies on indications.
-     */
-    oneway void startLceService(in int serial, in int reportInterval, in boolean pullMode);
+    void startKeepalive(in int serial, in KeepaliveRequest keepalive);
 
     /**
      * Starts a network scan.
@@ -1905,7 +1856,7 @@
      *
      * Response function is IRadioResponse.startNetworkScanResponse()
      */
-    oneway void startNetworkScan(in int serial, in NetworkScanRequest request);
+    void startNetworkScan(in int serial, in NetworkScanRequest request);
 
     /**
      * Stop playing a currently playing DTMF tone.
@@ -1914,7 +1865,7 @@
      *
      * Response function is IRadioResponse.stopDtmfResponse()
      */
-    oneway void stopDtmf(in int serial);
+    void stopDtmf(in int serial);
 
     /**
      * Stop an ongoing Keepalive session (for IPsec)
@@ -1924,19 +1875,7 @@
      *
      * Response function is IRadioResponse.stopKeepaliveResponse()
      */
-    oneway void stopKeepalive(in int serial, in int sessionHandle);
-
-    /**
-     * Stop Link Capacity Estimate (LCE) service, the STOP operation must be idempotent for the
-     * radio modem.
-     *
-     * @param serial Serial number of request.
-     *
-     * Response callback is IRadioResponse.stopLceServiceResponse()
-     *
-     * DEPRECATED in @1.2 or higher which use the always-on LCE that relies on indications.
-     */
-    oneway void stopLceService(in int serial);
+    void stopKeepalive(in int serial, in int sessionHandle);
 
     /**
      * Stops ongoing network scan
@@ -1945,7 +1884,7 @@
      *
      * Response function is IRadioResponse.stopNetworkScanResponse()
      */
-    oneway void stopNetworkScan(in int serial);
+    void stopNetworkScan(in int serial);
 
     /**
      * Supplies ICC PIN2. Only called following operation where SIM_PIN2 was returned as a failure
@@ -1957,7 +1896,7 @@
      *
      * Response function is IRadioResponse.supplyIccPin2ForAppResponse()
      */
-    oneway void supplyIccPin2ForApp(in int serial, in String pin2, in String aid);
+    void supplyIccPin2ForApp(in int serial, in String pin2, in String aid);
 
     /**
      * Supplies ICC PIN. Only called if CardStatus has AppState.PIN state
@@ -1968,7 +1907,7 @@
      *
      * Response function is IRadioResponse.supplyIccPinForAppResponse()
      */
-    oneway void supplyIccPinForApp(in int serial, in String pin, in String aid);
+    void supplyIccPinForApp(in int serial, in String pin, in String aid);
 
     /**
      * Supplies ICC PUK2 and new PIN2.
@@ -1980,7 +1919,7 @@
      *
      * Response function is IRadioResponse.supplyIccPuk2ForAppResponse()
      */
-    oneway void supplyIccPuk2ForApp(in int serial, in String puk2, in String pin2, in String aid);
+    void supplyIccPuk2ForApp(in int serial, in String puk2, in String pin2, in String aid);
 
     /**
      * Supplies ICC PUK and new PIN.
@@ -1992,7 +1931,7 @@
      *
      * Response function is IRadioResponse.supplyIccPukForAppResponse()
      */
-    oneway void supplyIccPukForApp(in int serial, in String puk, in String pin, in String aid);
+    void supplyIccPukForApp(in int serial, in String puk, in String pin, in String aid);
 
     /**
      * Requests that network personalization be deactivated
@@ -2002,7 +1941,7 @@
      *
      * Response function is IRadioResponse.supplyNetworkDepersonalizationResponse()
      */
-    oneway void supplyNetworkDepersonalization(in int serial, in String netPin);
+    void supplyNetworkDepersonalization(in int serial, in String netPin);
 
     /**
      * Request that deactivates one category of device personalization. Device personalization
@@ -2017,7 +1956,7 @@
      *
      * Response function is IRadioResponse.supplySimDepersonalizationResponse()
      */
-    oneway void supplySimDepersonalization(
+    void supplySimDepersonalization(
             in int serial, in PersoSubstate persoType, in String controlKey);
 
     /**
@@ -2035,7 +1974,7 @@
      *
      * Response function is IRadioResponse.switchWaitingOrHoldingAndActiveResponse()
      */
-    oneway void switchWaitingOrHoldingAndActive(in int serial);
+    void switchWaitingOrHoldingAndActive(in int serial);
 
     /**
      * Insert, delete or update a phonebook record on the SIM card. If the index of recordInfo is 0,
@@ -2049,7 +1988,7 @@
      *
      * Response callback is IRadioResponse.updateSimPhonebookRecordsResponse()
      */
-    oneway void updateSimPhonebookRecords(in int serial, in PhonebookRecordInfo recordInfo);
+    void updateSimPhonebookRecords(in int serial, in PhonebookRecordInfo recordInfo);
 
     /**
      * Stores a CDMA SMS message to RUIM memory.
@@ -2059,7 +1998,7 @@
      *
      * Response callback is IRadioResponse.writeSmsToRuimResponse()
      */
-    oneway void writeSmsToRuim(in int serial, in CdmaSmsWriteArgs cdmaSms);
+    void writeSmsToRuim(in int serial, in CdmaSmsWriteArgs cdmaSms);
 
     /**
      * Stores a SMS message to SIM memory.
@@ -2069,5 +2008,5 @@
      *
      * Response function is IRadioResponse.writeSmsToSimResponse()
      */
-    oneway void writeSmsToSim(in int serial, in SmsWriteArgs smsWriteArgs);
+    void writeSmsToSim(in int serial, in SmsWriteArgs smsWriteArgs);
 }
diff --git a/radio/aidl/android/hardware/radio/IRadioIndication.aidl b/radio/aidl/android/hardware/radio/IRadioIndication.aidl
index 054a53e..ec6adde 100644
--- a/radio/aidl/android/hardware/radio/IRadioIndication.aidl
+++ b/radio/aidl/android/hardware/radio/IRadioIndication.aidl
@@ -53,7 +53,7 @@
  * Interface declaring unsolicited radio indications.
  */
 @VintfStability
-interface IRadioIndication {
+oneway interface IRadioIndication {
     /**
      * Indicate barring information for the user’s access category / access class and PLMN.
      *
@@ -68,7 +68,7 @@
      * when PLMN selection is completed, when the device attempts to access a conditionally barred
      * service, and when the System Information including barring info for a camped cell is updated.
      */
-    oneway void barringInfoChanged(in RadioIndicationType type, in CellIdentity cellIdentity,
+    void barringInfoChanged(in RadioIndicationType type, in CellIdentity cellIdentity,
             in BarringInfo[] barringInfos);
 
     /**
@@ -84,8 +84,7 @@
      * @param isGsm true for GSM & false for CDMA
      * @param record Cdma Signal Information
      */
-    oneway void callRing(
-            in RadioIndicationType type, in boolean isGsm, in CdmaSignalInfoRecord record);
+    void callRing(in RadioIndicationType type, in boolean isGsm, in CdmaSignalInfoRecord record);
 
     /**
      * Indicates when call state has changed. Callee must invoke IRadio.getCurrentCalls(). Must be
@@ -94,7 +93,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void callStateChanged(in RadioIndicationType type);
+    void callStateChanged(in RadioIndicationType type);
 
     /**
      * Indicates that the modem requires the Carrier info for IMSI/IMPI encryption. This might
@@ -102,7 +101,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void carrierInfoForImsiEncryption(in RadioIndicationType info);
+    void carrierInfoForImsiEncryption(in RadioIndicationType info);
 
     /**
      * Indicates when CDMA radio receives a call waiting indication.
@@ -110,7 +109,7 @@
      * @param type Type of radio indication
      * @param callWaitingRecord Cdma CallWaiting information
      */
-    oneway void cdmaCallWaiting(in RadioIndicationType type, in CdmaCallWaiting callWaitingRecord);
+    void cdmaCallWaiting(in RadioIndicationType type, in CdmaCallWaiting callWaitingRecord);
 
     /**
      * Indicates when CDMA radio receives one or more info recs.
@@ -118,7 +117,7 @@
      * @param type Type of radio indication
      * @param records New Cdma Information
      */
-    oneway void cdmaInfoRec(in RadioIndicationType type, in CdmaInformationRecords records);
+    void cdmaInfoRec(in RadioIndicationType type, in CdmaInformationRecords records);
 
     /**
      * Indicates when new CDMA SMS is received. Callee must subsequently confirm the receipt of the
@@ -128,7 +127,7 @@
      * @param type Type of radio indication
      * @param msg Cdma Sms Message
      */
-    oneway void cdmaNewSms(in RadioIndicationType type, in CdmaSmsMessage msg);
+    void cdmaNewSms(in RadioIndicationType type, in CdmaSmsMessage msg);
 
     /**
      * Indicates when CDMA radio receives an update of the progress of an OTASP/OTAPA call.
@@ -136,8 +135,7 @@
      * @param type Type of radio indication
      * @param status Cdma OTA provision status
      */
-    oneway void cdmaOtaProvisionStatus(
-            in RadioIndicationType type, in CdmaOtaProvisionStatus status);
+    void cdmaOtaProvisionStatus(in RadioIndicationType type, in CdmaOtaProvisionStatus status);
 
     /**
      * Indicates when PRL (preferred roaming list) changes.
@@ -145,7 +143,7 @@
      * @param type Type of radio indication
      * @param version PRL version after PRL changes
      */
-    oneway void cdmaPrlChanged(in RadioIndicationType type, in int version);
+    void cdmaPrlChanged(in RadioIndicationType type, in int version);
 
     /**
      * Indicates that SMS storage on the RUIM is full. Messages cannot be saved on the RUIM until
@@ -153,7 +151,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void cdmaRuimSmsStorageFull(in RadioIndicationType type);
+    void cdmaRuimSmsStorageFull(in RadioIndicationType type);
 
     /**
      * Indicates when CDMA subscription source changed.
@@ -161,7 +159,7 @@
      * @param type Type of radio indication
      * @param cdmaSource New Cdma SubscriptionSource
      */
-    oneway void cdmaSubscriptionSourceChanged(
+    void cdmaSubscriptionSourceChanged(
             in RadioIndicationType type, in CdmaSubscriptionSource cdmaSource);
 
     /**
@@ -170,7 +168,7 @@
      * @param type Type of radio indication
      * @param records Current cell information
      */
-    oneway void cellInfoList(in RadioIndicationType type, in CellInfo[] records);
+    void cellInfoList(in RadioIndicationType type, in CellInfo[] records);
 
     /**
      * Report the current list of emergency numbers. Each emergency number in the emergency number
@@ -194,7 +192,7 @@
      * @param type Type of radio indication
      * @param emergencyNumberList Current list of emergency numbers known to radio.
      */
-    oneway void currentEmergencyNumberList(
+    void currentEmergencyNumberList(
             in RadioIndicationType type, in EmergencyNumber[] emergencyNumberList);
 
     /**
@@ -205,8 +203,7 @@
      * @param type Type of radio indication
      * @param lce LinkCapacityEstimate
      */
-    oneway void currentLinkCapacityEstimate(
-            in RadioIndicationType type, in LinkCapacityEstimate lce);
+    void currentLinkCapacityEstimate(in RadioIndicationType type, in LinkCapacityEstimate lce);
 
     /**
      * Indicates physical channel configurations. An empty configs list shall be returned when the
@@ -215,7 +212,7 @@
      * @param type Type of radio indication
      * @param configs Vector of PhysicalChannelConfigs
      */
-    oneway void currentPhysicalChannelConfigs(
+    void currentPhysicalChannelConfigs(
             in RadioIndicationType type, in PhysicalChannelConfig[] configs);
 
     /**
@@ -224,8 +221,7 @@
      * @param type Type of radio indication
      * @param signalStrength SignalStrength information
      */
-    oneway void currentSignalStrength(
-            in RadioIndicationType type, in SignalStrength signalStrength);
+    void currentSignalStrength(in RadioIndicationType type, in SignalStrength signalStrength);
 
     /**
      * Indicates data call contexts have changed.
@@ -239,7 +235,7 @@
      *        - The radio is powered off/on.
      *        - Unsolicited disconnect from either modem or network side.
      */
-    oneway void dataCallListChanged(in RadioIndicationType type, in SetupDataCallResult[] dcList);
+    void dataCallListChanged(in RadioIndicationType type, in SetupDataCallResult[] dcList);
 
     /**
      * Indicates that the radio system selection module has autonomously entered emergency
@@ -247,7 +243,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void enterEmergencyCallbackMode(in RadioIndicationType type);
+    void enterEmergencyCallbackMode(in RadioIndicationType type);
 
     /**
      * Indicates when Emergency Callback Mode Ends. Indicates that the radio system selection module
@@ -255,7 +251,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void exitEmergencyCallbackMode(in RadioIndicationType type);
+    void exitEmergencyCallbackMode(in RadioIndicationType type);
 
     /**
      * Indicates when the hardware configuration associated with the RILd changes.
@@ -263,7 +259,7 @@
      * @param type Type of radio indication
      * @param configs Array of hardware configs
      */
-    oneway void hardwareConfigChanged(in RadioIndicationType type, in HardwareConfig[] configs);
+    void hardwareConfigChanged(in RadioIndicationType type, in HardwareConfig[] configs);
 
     /**
      * Indicates when IMS registration state has changed. To get IMS registration state and IMS SMS
@@ -271,7 +267,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void imsNetworkStateChanged(in RadioIndicationType type);
+    void imsNetworkStateChanged(in RadioIndicationType type);
 
     /**
      * Indicates that nework doesn't have in-band information, need to play out-band tone.
@@ -279,7 +275,7 @@
      * @param type Type of radio indication
      * @param start true = start play ringback tone, false = stop playing ringback tone
      */
-    oneway void indicateRingbackTone(in RadioIndicationType type, in boolean start);
+    void indicateRingbackTone(in RadioIndicationType type, in boolean start);
 
     /**
      * Indicates a status update for a particular Keepalive session. This must include a handle for
@@ -290,7 +286,7 @@
      * @param type Type of radio indication
      * @param status Status information for a Keepalive session
      */
-    oneway void keepaliveStatus(in RadioIndicationType type, in KeepaliveStatus status);
+    void keepaliveStatus(in RadioIndicationType type, in KeepaliveStatus status);
 
     /**
      * Indicates when there is an incoming Link Capacity Estimate (LCE) info report.
@@ -300,7 +296,7 @@
      *
      * DEPRECATED in @1.2 and above, use IRadioIndication.currentLinkCapacityEstimate() instead.
      */
-    oneway void lceData(in RadioIndicationType type, in LceDataInfo lce);
+    void lceData(in RadioIndicationType type, in LceDataInfo lce);
 
     /**
      * Indicates when there is a modem reset.
@@ -318,7 +314,7 @@
      *        a crash or some string such as "user-initiated restart" or "AT command initiated
      *        restart" that explains the cause of the modem restart
      */
-    oneway void modemReset(in RadioIndicationType type, in String reason);
+    void modemReset(in RadioIndicationType type, in String reason);
 
     /**
      * Incremental network scan results.
@@ -326,7 +322,7 @@
      * @param type Type of radio indication
      * @param result the result of the network scan
      */
-    oneway void networkScanResult(in RadioIndicationType type, in NetworkScanResult result);
+    void networkScanResult(in RadioIndicationType type, in NetworkScanResult result);
 
     /**
      * Indicates when voice or data network state changed. Callee must invoke
@@ -335,7 +331,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void networkStateChanged(in RadioIndicationType type);
+    void networkStateChanged(in RadioIndicationType type);
 
     /**
      * Indicates when new Broadcast SMS is received
@@ -347,7 +343,7 @@
      *        which contain between 1 and 15 CBS Message pages sent as one packet to the MS by the
      *        BTS as coded in 3GPP 23.041 Section 9.4.2.2
      */
-    oneway void newBroadcastSms(in RadioIndicationType type, in byte[] data);
+    void newBroadcastSms(in RadioIndicationType type, in byte[] data);
 
     /**
      * Indicates when new SMS is received. Callee must subsequently confirm the receipt of the SMS
@@ -358,7 +354,7 @@
      * @param pdu PDU of SMS-DELIVER represented as byte array.
      *        The PDU starts with the SMSC address per TS 27.005 (+CMT:)
      */
-    oneway void newSms(in RadioIndicationType type, in byte[] pdu);
+    void newSms(in RadioIndicationType type, in byte[] pdu);
 
     /**
      * Indicates when new SMS has been stored on SIM card
@@ -366,7 +362,7 @@
      * @param type Type of radio indication
      * @param recordNumber Record number on the sim
      */
-    oneway void newSmsOnSim(in RadioIndicationType type, in int recordNumber);
+    void newSmsOnSim(in RadioIndicationType type, in int recordNumber);
 
     /**
      * Indicates when new SMS Status Report is received. Callee must subsequently confirm the
@@ -377,7 +373,7 @@
      * @param pdu PDU of SMS-STATUS-REPORT represented as byte array.
      *        The PDU starts with the SMSC address per TS 27.005 (+CMT:)
      */
-    oneway void newSmsStatusReport(in RadioIndicationType type, in byte[] pdu);
+    void newSmsStatusReport(in RadioIndicationType type, in byte[] pdu);
 
     /**
      * Indicates when radio has received a NITZ time message.
@@ -386,8 +382,7 @@
      * @param nitzTime NITZ time string in the form "yy/mm/dd,hh:mm:ss(+/-)tz,dt"
      * @param receivedTime milliseconds since boot that the NITZ time was received
      */
-    oneway void nitzTimeReceived(
-            in RadioIndicationType type, in String nitzTime, in long receivedTime);
+    void nitzTimeReceived(in RadioIndicationType type, in String nitzTime, in long receivedTime);
 
     /**
      * Indicates when Supplementary service(SS) response is received when DIAL/USSD/SS is changed to
@@ -395,8 +390,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void onSupplementaryServiceIndication(
-            in RadioIndicationType type, in StkCcUnsolSsResult ss);
+    void onSupplementaryServiceIndication(in RadioIndicationType type, in StkCcUnsolSsResult ss);
 
     /**
      * Indicates when a new USSD message is received. The USSD session is assumed to persist if the
@@ -406,7 +400,7 @@
      * @param modeType USSD type code
      * @param msg Message string in UTF-8, if applicable
      */
-    oneway void onUssd(in RadioIndicationType type, in UssdModeType modeType, in String msg);
+    void onUssd(in RadioIndicationType type, in UssdModeType modeType, in String msg);
 
     /**
      * Indicates when there is new Carrier PCO data received for a data call. Ideally only new data
@@ -416,7 +410,7 @@
      * @param type Type of radio indication
      * @param pco New PcoData
      */
-    oneway void pcoData(in RadioIndicationType type, in PcoDataInfo pco);
+    void pcoData(in RadioIndicationType type, in PcoDataInfo pco);
 
     /**
      * Sent when setRadioCapability() completes. Returns the phone radio capability exactly as
@@ -425,7 +419,7 @@
      * @param type Type of radio indication
      * @param rc Current radio capability
      */
-    oneway void radioCapabilityIndication(in RadioIndicationType type, in RadioCapability rc);
+    void radioCapabilityIndication(in RadioIndicationType type, in RadioCapability rc);
 
     /**
      * Indicates when radio state changes.
@@ -433,7 +427,7 @@
      * @param type Type of radio indication
      * @param radioState Current radio state
      */
-    oneway void radioStateChanged(in RadioIndicationType type, in RadioState radioState);
+    void radioStateChanged(in RadioIndicationType type, in RadioState radioState);
 
     /**
      * Report that Registration or a Location/Routing/Tracking Area update has failed.
@@ -460,7 +454,7 @@
      *        For LTE (ESM), cause codes are in TS 24.301 9.9.4.4
      *        MAX_INT if this value is unused.
      */
-    oneway void registrationFailed(in RadioIndicationType type, in CellIdentity cellIdentity,
+    void registrationFailed(in RadioIndicationType type, in CellIdentity cellIdentity,
             in String chosenPlmn, in Domain domain, in int causeCode, in int additionalCauseCode);
 
     /**
@@ -468,7 +462,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void resendIncallMute(in RadioIndicationType type);
+    void resendIncallMute(in RadioIndicationType type);
 
     /**
      * Indicates a restricted state change (eg, for Domain Specific Access Control).
@@ -477,14 +471,14 @@
      * @param type Type of radio indication
      * @param state Bitmask of restricted state as defined by PhoneRestrictedState
      */
-    oneway void restrictedStateChanged(in RadioIndicationType type, in PhoneRestrictedState state);
+    void restrictedStateChanged(in RadioIndicationType type, in PhoneRestrictedState state);
 
     /**
      * Indicates the ril connects and returns the version
      *
      * @param type Type of radio indication
      */
-    oneway void rilConnected(in RadioIndicationType type);
+    void rilConnected(in RadioIndicationType type);
 
     /**
      * Indicates whether SIM phonebook is changed. This indication is sent whenever the SIM
@@ -493,7 +487,7 @@
      *
      * @param type Type of radio indication
      */
-    oneway void simPhonebookChanged(in RadioIndicationType type);
+    void simPhonebookChanged(in RadioIndicationType type);
 
     /**
      * Indicates the content of all the used records in the SIM phonebook. This indication is
@@ -504,7 +498,7 @@
      * @param status Status of PbReceivedStatus
      * @param records Vector of PhonebookRecordInfo
      */
-    oneway void simPhonebookRecordsReceived(in RadioIndicationType type, in PbReceivedStatus status,
+    void simPhonebookRecordsReceived(in RadioIndicationType type, in PbReceivedStatus status,
             in PhonebookRecordInfo[] records);
 
     /**
@@ -515,7 +509,7 @@
      * @param type Type of radio indication
      * @param refreshResult Result of sim refresh
      */
-    oneway void simRefresh(in RadioIndicationType type, in SimRefreshResult refreshResult);
+    void simRefresh(in RadioIndicationType type, in SimRefreshResult refreshResult);
 
     /**
      * Indicates that SMS storage on the SIM is full. Sent when the network attempts to deliver a
@@ -524,14 +518,14 @@
      *
      * @param type Type of radio indication
      */
-    oneway void simSmsStorageFull(in RadioIndicationType type);
+    void simSmsStorageFull(in RadioIndicationType type);
 
     /**
      * Indicates that SIM state changes. Callee must invoke getIccCardStatus().
      *
      * @param type Type of radio indication
      */
-    oneway void simStatusChanged(in RadioIndicationType type);
+    void simStatusChanged(in RadioIndicationType type);
 
     /**
      * Indicates when Single Radio Voice Call Continuity (SRVCC) progress state has changed.
@@ -539,7 +533,7 @@
      * @param type Type of radio indication
      * @param state New Srvcc State
      */
-    oneway void srvccStateNotify(in RadioIndicationType type, in SrvccState state);
+    void srvccStateNotify(in RadioIndicationType type, in SrvccState state);
 
     /**
      * Indicates when there is an ALPHA from UICC during Call Control.
@@ -547,7 +541,7 @@
      * @param type Type of radio indication
      * @param alpha ALPHA string from UICC in UTF-8 format
      */
-    oneway void stkCallControlAlphaNotify(in RadioIndicationType type, in String alpha);
+    void stkCallControlAlphaNotify(in RadioIndicationType type, in String alpha);
 
     /**
      * Indicates when SIM wants application to setup a voice call.
@@ -555,7 +549,7 @@
      * @param type Type of radio indication
      * @param timeout Timeout value in millisec for setting up voice call
      */
-    oneway void stkCallSetup(in RadioIndicationType type, in long timeout);
+    void stkCallSetup(in RadioIndicationType type, in long timeout);
 
     /**
      * Indicates when SIM notifies applcations some event happens.
@@ -565,7 +559,7 @@
      *        represented as byte array starting with first byte of response data for command tag.
      *        Refer to TS 102.223 section 9.4 for command types
      */
-    oneway void stkEventNotify(in RadioIndicationType type, in String cmd);
+    void stkEventNotify(in RadioIndicationType type, in String cmd);
 
     /**
      * Indicates when SIM issue a STK proactive command to applications
@@ -574,14 +568,14 @@
      * @param cmd SAT/USAT proactive represented as byte array starting with command tag.
      *        Refer to TS 102.223 section 9.4 for command types
      */
-    oneway void stkProactiveCommand(in RadioIndicationType type, in String cmd);
+    void stkProactiveCommand(in RadioIndicationType type, in String cmd);
 
     /**
      * Indicates when STK session is terminated by SIM.
      *
      * @param type Type of radio indication
      */
-    oneway void stkSessionEnd(in RadioIndicationType type);
+    void stkSessionEnd(in RadioIndicationType type);
 
     /**
      * Indicated when there is a change in subscription status.
@@ -593,7 +587,7 @@
      * @param type Type of radio indication
      * @param activate false for subscription deactivated, true for subscription activated
      */
-    oneway void subscriptionStatusChanged(in RadioIndicationType type, in boolean activate);
+    void subscriptionStatusChanged(in RadioIndicationType type, in boolean activate);
 
     /**
      * Reports supplementary service related notification from the network.
@@ -601,7 +595,7 @@
      * @param type Type of radio indication
      * @param suppSvc SuppSvcNotification as defined in types.hal
      */
-    oneway void suppSvcNotify(in RadioIndicationType type, in SuppSvcNotification suppSvc);
+    void suppSvcNotify(in RadioIndicationType type, in SuppSvcNotification suppSvc);
 
     /**
      * Report change of whether uiccApplications are enabled, or disabled.
@@ -609,7 +603,7 @@
      * @param type Type of radio indication
      * @param enabled whether uiccApplications are enabled, or disabled
      */
-    oneway void uiccApplicationsEnablementChanged(in RadioIndicationType type, in boolean enabled);
+    void uiccApplicationsEnablementChanged(in RadioIndicationType type, in boolean enabled);
 
     /**
      * The modem can explicitly set SetupDataCallResult::suggestedRetryTime after a failure in
@@ -620,7 +614,7 @@
      * @param type Type of radio indication
      * @param apn Apn to unthrottle
      */
-    oneway void unthrottleApn(in RadioIndicationType type, in String apn);
+    void unthrottleApn(in RadioIndicationType type, in String apn);
 
     /**
      * Indicates that voice technology has changed. Responds with new rat.
@@ -628,5 +622,5 @@
      * @param type Type of radio indication
      * @param rat Current new voice rat
      */
-    oneway void voiceRadioTechChanged(in RadioIndicationType type, in RadioTechnology rat);
+    void voiceRadioTechChanged(in RadioIndicationType type, in RadioTechnology rat);
 }
diff --git a/radio/aidl/android/hardware/radio/IRadioResponse.aidl b/radio/aidl/android/hardware/radio/IRadioResponse.aidl
index 9ae6495..4447bb1 100644
--- a/radio/aidl/android/hardware/radio/IRadioResponse.aidl
+++ b/radio/aidl/android/hardware/radio/IRadioResponse.aidl
@@ -22,7 +22,6 @@
 import android.hardware.radio.CallForwardInfo;
 import android.hardware.radio.CardStatus;
 import android.hardware.radio.CarrierRestrictions;
-import android.hardware.radio.CarrierRestrictionsWithPriority;
 import android.hardware.radio.CdmaBroadcastSmsConfigInfo;
 import android.hardware.radio.CdmaRoamingType;
 import android.hardware.radio.CdmaSubscriptionSource;
@@ -62,7 +61,7 @@
  * Interface declaring response functions to solicited radio requests.
  */
 @VintfStability
-interface IRadioResponse {
+oneway interface IRadioResponse {
     /**
      * @param info Response info struct containing response type, serial no. and error
      *
@@ -81,7 +80,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void acceptCallResponse(in RadioResponseInfo info);
+    void acceptCallResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -95,7 +94,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void acknowledgeIncomingGsmSmsWithPduResponse(in RadioResponseInfo info);
+    void acknowledgeIncomingGsmSmsWithPduResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -118,7 +117,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void acknowledgeLastIncomingCdmaSmsResponse(in RadioResponseInfo info);
+    void acknowledgeLastIncomingCdmaSmsResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -132,7 +131,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void acknowledgeLastIncomingGsmSmsResponse(in RadioResponseInfo info);
+    void acknowledgeLastIncomingGsmSmsResponse(in RadioResponseInfo info);
 
     /**
      * Acknowledge the receipt of radio request sent to the vendor. This must be sent only for
@@ -141,7 +140,7 @@
      *
      * @param serial Serial no. of the request whose acknowledgement is sent.
      */
-    oneway void acknowledgeRequest(in int serial);
+    void acknowledgeRequest(in int serial);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -154,7 +153,7 @@
      *   RadioError:NO_RESOURCES- Indicates that no pdu session ids are available
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void allocatePduSessionIdResponse(in RadioResponseInfo info, in int id);
+    void allocatePduSessionIdResponse(in RadioResponseInfo info, in int id);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -166,7 +165,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:INTERNAL_ERR
      */
-    oneway void areUiccApplicationsEnabledResponse(in RadioResponseInfo info, in boolean enabled);
+    void areUiccApplicationsEnabledResponse(in RadioResponseInfo info, in boolean enabled);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -180,7 +179,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:INVALID_CALL_ID
      */
-    oneway void cancelHandoverResponse(in RadioResponseInfo info);
+    void cancelHandoverResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -201,7 +200,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void cancelPendingUssdResponse(in RadioResponseInfo info);
+    void cancelPendingUssdResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -220,7 +219,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_PUK2
      */
-    oneway void changeIccPin2ForAppResponse(in RadioResponseInfo info, in int remainingRetries);
+    void changeIccPin2ForAppResponse(in RadioResponseInfo info, in int remainingRetries);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -238,7 +237,7 @@
      *   RadioError:INVALID_SIM_STATE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void changeIccPinForAppResponse(in RadioResponseInfo info, in int remainingRetries);
+    void changeIccPinForAppResponse(in RadioResponseInfo info, in int remainingRetries);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -259,7 +258,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void conferenceResponse(in RadioResponseInfo info);
+    void conferenceResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -277,7 +276,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void deactivateDataCallResponse(in RadioResponseInfo info);
+    void deactivateDataCallResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -299,7 +298,7 @@
      *   RadioError:OPERATION_NOT_ALLOWED
      *   RadioError:SIM_ABSENT
      */
-    oneway void deleteSmsOnRuimResponse(in RadioResponseInfo info);
+    void deleteSmsOnRuimResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -321,7 +320,7 @@
      *   RadioError:INVALID_MODEM_STATE
      *   RadioError:SIM_ABSENT
      */
-    oneway void deleteSmsOnSimResponse(in RadioResponseInfo info);
+    void deleteSmsOnSimResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -350,7 +349,7 @@
      *   RadioError:INVALID_MODEM_STATE
      *   RadioError:CANCELLED
      */
-    oneway void dialResponse(in RadioResponseInfo info);
+    void dialResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -373,7 +372,7 @@
      *   RadioError:ABORTED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void emergencyDialResponse(in RadioResponseInfo info);
+    void emergencyDialResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -386,7 +385,7 @@
      *              mode, or when there is only one modem available, as this API should only
      *              be called in multi sim status.
      */
-    oneway void enableModemResponse(in RadioResponseInfo info);
+    void enableModemResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -398,7 +397,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:BUSY
      */
-    oneway void enableUiccApplicationsResponse(in RadioResponseInfo info);
+    void enableUiccApplicationsResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -417,7 +416,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void exitEmergencyCallbackModeResponse(in RadioResponseInfo info);
+    void exitEmergencyCallbackModeResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -439,7 +438,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void explicitCallTransferResponse(in RadioResponseInfo info);
+    void explicitCallTransferResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -451,8 +450,8 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void getAllowedCarriersResponse(in RadioResponseInfo info,
-            in CarrierRestrictionsWithPriority carriers, in SimLockMultiSimPolicy multiSimPolicy);
+    void getAllowedCarriersResponse(in RadioResponseInfo info, in CarrierRestrictions carriers,
+            in SimLockMultiSimPolicy multiSimPolicy);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -469,7 +468,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:NO_RESOURCES
      */
-    oneway void getAllowedNetworkTypesBitmapResponse(
+    void getAllowedNetworkTypesBitmapResponse(
             in RadioResponseInfo info, in RadioAccessFamily networkTypeBitmap);
 
     /**
@@ -488,8 +487,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getAvailableBandModesResponse(
-            in RadioResponseInfo info, in RadioBandMode[] bandModes);
+    void getAvailableBandModesResponse(in RadioResponseInfo info, in RadioBandMode[] bandModes);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -510,8 +508,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:INTERNAL_ERR
      */
-    oneway void getAvailableNetworksResponse(
-            in RadioResponseInfo info, in OperatorInfo[] networkInfos);
+    void getAvailableNetworksResponse(in RadioResponseInfo info, in OperatorInfo[] networkInfos);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -524,7 +521,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:MODEM_ERR
      */
-    oneway void getBarringInfoResponse(
+    void getBarringInfoResponse(
             in RadioResponseInfo info, in CellIdentity cellIdentity, in BarringInfo[] barringInfos);
 
     /**
@@ -544,7 +541,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getBasebandVersionResponse(in RadioResponseInfo info, in String version);
+    void getBasebandVersionResponse(in RadioResponseInfo info, in String version);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -571,8 +568,8 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void getCDMASubscriptionResponse(in RadioResponseInfo info, in String mdn,
-            in String hSid, in String hNid, in String min, in String prl);
+    void getCDMASubscriptionResponse(in RadioResponseInfo info, in String mdn, in String hSid,
+            in String hNid, in String min, in String prl);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -599,7 +596,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getCallForwardStatusResponse(
+    void getCallForwardStatusResponse(
             in RadioResponseInfo info, in CallForwardInfo[] callForwardInfos);
 
     /**
@@ -627,8 +624,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getCallWaitingResponse(
-            in RadioResponseInfo info, in boolean enable, in int serviceClass);
+    void getCallWaitingResponse(in RadioResponseInfo info, in boolean enable, in int serviceClass);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -650,7 +646,7 @@
      *   RadioError:CANCELLED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void getCdmaBroadcastConfigResponse(
+    void getCdmaBroadcastConfigResponse(
             in RadioResponseInfo info, in CdmaBroadcastSmsConfigInfo[] configs);
 
     /**
@@ -670,8 +666,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void getCdmaRoamingPreferenceResponse(
-            in RadioResponseInfo info, in CdmaRoamingType type);
+    void getCdmaRoamingPreferenceResponse(in RadioResponseInfo info, in CdmaRoamingType type);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -688,7 +683,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_ABSENT
      */
-    oneway void getCdmaSubscriptionSourceResponse(
+    void getCdmaSubscriptionSourceResponse(
             in RadioResponseInfo info, in CdmaSubscriptionSource source);
 
     /**
@@ -700,7 +695,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:INTERNAL_ERR
      */
-    oneway void getCellInfoListResponse(in RadioResponseInfo info, in CellInfo[] cellInfo);
+    void getCellInfoListResponse(in RadioResponseInfo info, in CellInfo[] cellInfo);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -719,7 +714,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getClipResponse(in RadioResponseInfo info, in ClipStatus status);
+    void getClipResponse(in RadioResponseInfo info, in ClipStatus status);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -742,7 +737,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getClirResponse(in RadioResponseInfo info, in int n, in int m);
+    void getClirResponse(in RadioResponseInfo info, in int n, in int m);
 
     /**
      * @param info Response info struct containing respontype, serial no. and error
@@ -757,7 +752,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getCurrentCallsResponse(in RadioResponseInfo info, in Call[] calls);
+    void getCurrentCallsResponse(in RadioResponseInfo info, in Call[] calls);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -769,8 +764,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:SIM_ABSENT
      */
-    oneway void getDataCallListResponse(
-            in RadioResponseInfo info, in SetupDataCallResult[] dcResponse);
+    void getDataCallListResponse(in RadioResponseInfo info, in SetupDataCallResult[] dcResponse);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -783,7 +777,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:NOT_PROVISIONED
      */
-    oneway void getDataRegistrationStateResponse(
+    void getDataRegistrationStateResponse(
             in RadioResponseInfo info, in RegStateResult dataRegResponse);
 
     /**
@@ -809,8 +803,8 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void getDeviceIdentityResponse(in RadioResponseInfo info, in String imei,
-            in String imeisv, in String esn, in String meid);
+    void getDeviceIdentityResponse(in RadioResponseInfo info, in String imei, in String imeisv,
+            in String esn, in String meid);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -833,7 +827,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getFacilityLockForAppResponse(in RadioResponseInfo info, in int response);
+    void getFacilityLockForAppResponse(in RadioResponseInfo info, in int response);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -855,7 +849,7 @@
      *   RadioError:CANCELLED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void getGsmBroadcastConfigResponse(
+    void getGsmBroadcastConfigResponse(
             in RadioResponseInfo info, in GsmBroadcastSmsConfigInfo[] configs);
 
     /**
@@ -867,7 +861,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void getHardwareConfigResponse(in RadioResponseInfo info, in HardwareConfig[] config);
+    void getHardwareConfigResponse(in RadioResponseInfo info, in HardwareConfig[] config);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -884,7 +878,7 @@
      *   RadioError:SIM_ERR
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void getIMSIForAppResponse(in RadioResponseInfo info, in String imsi);
+    void getIMSIForAppResponse(in RadioResponseInfo info, in String imsi);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -897,7 +891,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void getIccCardStatusResponse(in RadioResponseInfo info, in CardStatus cardStatus);
+    void getIccCardStatusResponse(in RadioResponseInfo info, in CardStatus cardStatus);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -915,7 +909,7 @@
      *   RadioError:INVALID_MODEM_STATE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void getImsRegistrationStateResponse(
+    void getImsRegistrationStateResponse(
             in RadioResponseInfo info, in boolean isRegistered, in RadioTechnologyFamily ratFamily);
 
     /**
@@ -963,7 +957,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getLastCallFailCauseResponse(
+    void getLastCallFailCauseResponse(
             in RadioResponseInfo info, in LastCallFailCauseInfo failCauseinfo);
 
     /**
@@ -982,8 +976,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void getModemActivityInfoResponse(
-            in RadioResponseInfo info, in ActivityStatsInfo activityInfo);
+    void getModemActivityInfoResponse(in RadioResponseInfo info, in ActivityStatsInfo activityInfo);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -993,7 +986,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:MODEM_ERR
      */
-    oneway void getModemStackStatusResponse(in RadioResponseInfo info, in boolean isEnabled);
+    void getModemStackStatusResponse(in RadioResponseInfo info, in boolean isEnabled);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1014,7 +1007,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getMuteResponse(in RadioResponseInfo info, in boolean enable);
+    void getMuteResponse(in RadioResponseInfo info, in boolean enable);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1033,7 +1026,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getNeighboringCidsResponse(in RadioResponseInfo info, in NeighboringCell[] cells);
+    void getNeighboringCidsResponse(in RadioResponseInfo info, in NeighboringCell[] cells);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1051,7 +1044,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getNetworkSelectionModeResponse(in RadioResponseInfo info, in boolean manual);
+    void getNetworkSelectionModeResponse(in RadioResponseInfo info, in boolean manual);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1069,7 +1062,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getOperatorResponse(
+    void getOperatorResponse(
             in RadioResponseInfo info, in String longName, in String shortName, in String numeric);
 
     /**
@@ -1085,7 +1078,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:NO_RESOURCES
      */
-    oneway void getPreferredNetworkTypeBitmapResponse(
+    void getPreferredNetworkTypeBitmapResponse(
             in RadioResponseInfo info, in RadioAccessFamily networkTypeBitmap);
 
     /**
@@ -1104,8 +1097,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getPreferredNetworkTypeResponse(
-            in RadioResponseInfo info, in PreferredNetworkType nwType);
+    void getPreferredNetworkTypeResponse(in RadioResponseInfo info, in PreferredNetworkType nwType);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1124,7 +1116,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getPreferredVoicePrivacyResponse(in RadioResponseInfo info, in boolean enable);
+    void getPreferredVoicePrivacyResponse(in RadioResponseInfo info, in boolean enable);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1141,7 +1133,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getRadioCapabilityResponse(in RadioResponseInfo info, in RadioCapability rc);
+    void getRadioCapabilityResponse(in RadioResponseInfo info, in RadioCapability rc);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1152,8 +1144,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:INTERNAL_ERR
      */
-    oneway void getSignalStrengthResponse(
-            in RadioResponseInfo info, in SignalStrength signalStrength);
+    void getSignalStrengthResponse(in RadioResponseInfo info, in SignalStrength signalStrength);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1170,8 +1161,7 @@
      * REQUEST_NOT_SUPPORTED may only be returned on devices that don't support this API,
      * indicated by the HAL capability CAPABILITY_SIM_PHONEBOOK_IN_MODEM.
      */
-    oneway void getSimPhonebookCapacityResponse(
-            in RadioResponseInfo info, in PhonebookCapacity capacity);
+    void getSimPhonebookCapacityResponse(in RadioResponseInfo info, in PhonebookCapacity capacity);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1187,7 +1177,7 @@
      * REQUEST_NOT_SUPPORTED may only be returned on devices that don't support this API,
      * indicated by the HAL capability CAPABILITY_SIM_PHONEBOOK_IN_MODEM.
      */
-    oneway void getSimPhonebookRecordsResponse(in RadioResponseInfo info);
+    void getSimPhonebookRecordsResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1199,7 +1189,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:MODEM_ERR
      */
-    oneway void getSlicingConfigResponse(in RadioResponseInfo info, in SlicingConfig slicingConfig);
+    void getSlicingConfigResponse(in RadioResponseInfo info, in SlicingConfig slicingConfig);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1222,7 +1212,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void getSmscAddressResponse(in RadioResponseInfo info, in String smsc);
+    void getSmscAddressResponse(in RadioResponseInfo info, in String smsc);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1234,7 +1224,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:INVALID_ARGUMENTS
      */
-    oneway void getSystemSelectionChannelsResponse(
+    void getSystemSelectionChannelsResponse(
             in RadioResponseInfo info, in RadioAccessSpecifier[] specifiers);
 
     /**
@@ -1253,7 +1243,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void getTTYModeResponse(in RadioResponseInfo info, in TtyMode mode);
+    void getTTYModeResponse(in RadioResponseInfo info, in TtyMode mode);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1268,7 +1258,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void getVoiceRadioTechnologyResponse(in RadioResponseInfo info, in RadioTechnology rat);
+    void getVoiceRadioTechnologyResponse(in RadioResponseInfo info, in RadioTechnology rat);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1279,7 +1269,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:INTERNAL_ERR
      */
-    oneway void getVoiceRegistrationStateResponse(
+    void getVoiceRegistrationStateResponse(
             in RadioResponseInfo info, in RegStateResult voiceRegResponse);
 
     /**
@@ -1298,7 +1288,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_ABSENT
      */
-    oneway void handleStkCallSetupRequestFromSimResponse(in RadioResponseInfo info);
+    void handleStkCallSetupRequestFromSimResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1316,7 +1306,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void hangupConnectionResponse(in RadioResponseInfo info);
+    void hangupConnectionResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1337,7 +1327,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void hangupForegroundResumeBackgroundResponse(in RadioResponseInfo info);
+    void hangupForegroundResumeBackgroundResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1357,7 +1347,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:CANCELLED
      */
-    oneway void hangupWaitingOrBackgroundResponse(in RadioResponseInfo info);
+    void hangupWaitingOrBackgroundResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1371,7 +1361,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void iccCloseLogicalChannelResponse(in RadioResponseInfo info);
+    void iccCloseLogicalChannelResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1390,7 +1380,7 @@
      *   RadioError:SIM_ERR
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void iccIOForAppResponse(in RadioResponseInfo info, in IccIoResult iccIo);
+    void iccIOForAppResponse(in RadioResponseInfo info, in IccIoResult iccIo);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1412,7 +1402,7 @@
      *   RadioError:MISSING_RESOURCE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void iccOpenLogicalChannelResponse(
+    void iccOpenLogicalChannelResponse(
             in RadioResponseInfo info, in int channelId, in byte[] selectResponse);
 
     /**
@@ -1428,8 +1418,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void iccTransmitApduBasicChannelResponse(
-            in RadioResponseInfo info, in IccIoResult result);
+    void iccTransmitApduBasicChannelResponse(in RadioResponseInfo info, in IccIoResult result);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1444,8 +1433,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void iccTransmitApduLogicalChannelResponse(
-            in RadioResponseInfo info, in IccIoResult result);
+    void iccTransmitApduLogicalChannelResponse(in RadioResponseInfo info, in IccIoResult result);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1458,8 +1446,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void isNrDualConnectivityEnabledResponse(
-            in RadioResponseInfo info, in boolean isEnabled);
+    void isNrDualConnectivityEnabledResponse(in RadioResponseInfo info, in boolean isEnabled);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1470,7 +1457,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void nvReadItemResponse(in RadioResponseInfo info, in String result);
+    void nvReadItemResponse(in RadioResponseInfo info, in String result);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1480,7 +1467,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void nvResetConfigResponse(in RadioResponseInfo info);
+    void nvResetConfigResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1490,7 +1477,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void nvWriteCdmaPrlResponse(in RadioResponseInfo info);
+    void nvWriteCdmaPrlResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1500,7 +1487,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void nvWriteItemResponse(in RadioResponseInfo info);
+    void nvWriteItemResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1517,7 +1504,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void pullLceDataResponse(in RadioResponseInfo info, in LceDataInfo lceInfo);
+    void pullLceDataResponse(in RadioResponseInfo info, in LceDataInfo lceInfo);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1539,7 +1526,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void rejectCallResponse(in RadioResponseInfo info);
+    void rejectCallResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1551,7 +1538,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void releasePduSessionIdResponse(in RadioResponseInfo info);
+    void releasePduSessionIdResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1571,7 +1558,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void reportSmsMemoryStatusResponse(in RadioResponseInfo info);
+    void reportSmsMemoryStatusResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1585,7 +1572,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void reportStkServiceIsRunningResponse(in RadioResponseInfo info);
+    void reportStkServiceIsRunningResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1603,8 +1590,7 @@
      *   RadioError:INVALID_ARGUMENTS
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void requestIccSimAuthenticationResponse(
-            in RadioResponseInfo info, in IccIoResult result);
+    void requestIccSimAuthenticationResponse(in RadioResponseInfo info, in IccIoResult result);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1622,7 +1608,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_ABSENT
      */
-    oneway void requestIsimAuthenticationResponse(in RadioResponseInfo info, in String response);
+    void requestIsimAuthenticationResponse(in RadioResponseInfo info, in String response);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1638,7 +1624,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void requestShutdownResponse(in RadioResponseInfo info);
+    void requestShutdownResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1659,7 +1645,7 @@
      *   RadioError:INVALID_MODEM_STATE
      *   RadioError:OPERATION_NOT_ALLOWED
      */
-    oneway void sendBurstDtmfResponse(in RadioResponseInfo info);
+    void sendBurstDtmfResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1680,7 +1666,7 @@
      *   RadioError:CANCELLED
      *   RadioError:OPERATION_NOT_ALLOWED
      */
-    oneway void sendCDMAFeatureCodeResponse(in RadioResponseInfo info);
+    void sendCDMAFeatureCodeResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1714,7 +1700,7 @@
      *   RadioError:ACCESS_BARRED
      *   RadioError:BLOCKED_DUE_TO_CALL
      */
-    oneway void sendCdmaSmsExpectMoreResponse(in RadioResponseInfo info, in SendSmsResult sms);
+    void sendCdmaSmsExpectMoreResponse(in RadioResponseInfo info, in SendSmsResult sms);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1748,7 +1734,7 @@
      *   RadioError:ACCESS_BARRED
      *   RadioError:BLOCKED_DUE_TO_CALL
      */
-    oneway void sendCdmaSmsResponse(in RadioResponseInfo info, in SendSmsResult sms);
+    void sendCdmaSmsResponse(in RadioResponseInfo info, in SendSmsResult sms);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1764,7 +1750,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void sendDeviceStateResponse(in RadioResponseInfo info);
+    void sendDeviceStateResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1783,7 +1769,7 @@
      *   RadioError:CANCELLED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void sendDtmfResponse(in RadioResponseInfo info);
+    void sendDtmfResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1804,7 +1790,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_ABSENT
      */
-    oneway void sendEnvelopeResponse(in RadioResponseInfo info, in String commandResponse);
+    void sendEnvelopeResponse(in RadioResponseInfo info, in String commandResponse);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1822,7 +1808,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_ABSENT
      */
-    oneway void sendEnvelopeWithStatusResponse(in RadioResponseInfo info, in IccIoResult iccIo);
+    void sendEnvelopeWithStatusResponse(in RadioResponseInfo info, in IccIoResult iccIo);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1850,7 +1836,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void sendImsSmsResponse(in RadioResponseInfo info, in SendSmsResult sms);
+    void sendImsSmsResponse(in RadioResponseInfo info, in SendSmsResult sms);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1881,7 +1867,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void sendSMSExpectMoreResponse(in RadioResponseInfo info, in SendSmsResult sms);
+    void sendSMSExpectMoreResponse(in RadioResponseInfo info, in SendSmsResult sms);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1914,7 +1900,7 @@
      *   RadioError:ACCESS_BARRED
      *   RadioError:BLOCKED_DUE_TO_CALL
      */
-    oneway void sendSmsExpectMoreResponse(in RadioResponseInfo info, in SendSmsResult sms);
+    void sendSmsExpectMoreResponse(in RadioResponseInfo info, in SendSmsResult sms);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1946,7 +1932,7 @@
      *   RadioError:ACCESS_BARRED
      *   RadioError:BLOCKED_DUE_TO_CALL
      */
-    oneway void sendSmsResponse(in RadioResponseInfo info, in SendSmsResult sms);
+    void sendSmsResponse(in RadioResponseInfo info, in SendSmsResult sms);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1964,7 +1950,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_ABSENT
      */
-    oneway void sendTerminalResponseToSimResponse(in RadioResponseInfo info);
+    void sendTerminalResponseToSimResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -1990,7 +1976,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void sendUssdResponse(in RadioResponseInfo info);
+    void sendUssdResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2011,7 +1997,7 @@
      *   RadioError:INVALID_MODEM_STATE
      *   RadioError:CANCELLED
      */
-    oneway void separateConnectionResponse(in RadioResponseInfo info);
+    void separateConnectionResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2022,7 +2008,7 @@
      *   RadioError:INVALID_ARGUMENTS
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void setAllowedCarriersResponse(in RadioResponseInfo info);
+    void setAllowedCarriersResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2038,7 +2024,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:NO_RESOURCES
      */
-    oneway void setAllowedNetworkTypesBitmapResponse(in RadioResponseInfo info);
+    void setAllowedNetworkTypesBitmapResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2056,7 +2042,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setBandModeResponse(in RadioResponseInfo info);
+    void setBandModeResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2077,7 +2063,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setBarringPasswordResponse(in RadioResponseInfo info);
+    void setBarringPasswordResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2100,7 +2086,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setCallForwardResponse(in RadioResponseInfo info);
+    void setCallForwardResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2123,7 +2109,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setCallWaitingResponse(in RadioResponseInfo info);
+    void setCallWaitingResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2136,7 +2122,7 @@
      *   RadioError:INVALID_ARGUMENTS
      *   RadioError:MODEM_INTERNAL_FAILURE
      */
-    oneway void setCarrierInfoForImsiEncryptionResponse(in RadioResponseInfo info);
+    void setCarrierInfoForImsiEncryptionResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2157,7 +2143,7 @@
      *   RadioError:CANCELLED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void setCdmaBroadcastActivationResponse(in RadioResponseInfo info);
+    void setCdmaBroadcastActivationResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2177,7 +2163,7 @@
      *   RadioError:CANCELLED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void setCdmaBroadcastConfigResponse(in RadioResponseInfo info);
+    void setCdmaBroadcastConfigResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2196,7 +2182,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void setCdmaRoamingPreferenceResponse(in RadioResponseInfo info);
+    void setCdmaRoamingPreferenceResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2212,7 +2198,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void setCdmaSubscriptionSourceResponse(in RadioResponseInfo info);
+    void setCdmaSubscriptionSourceResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2228,7 +2214,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void setCellInfoListRateResponse(in RadioResponseInfo info);
+    void setCellInfoListRateResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2247,7 +2233,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setClirResponse(in RadioResponseInfo info);
+    void setClirResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2266,7 +2252,7 @@
      *   RadioError:CANCELLED
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void setDataAllowedResponse(in RadioResponseInfo info);
+    void setDataAllowedResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2282,7 +2268,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_ABSENT
      */
-    oneway void setDataProfileResponse(in RadioResponseInfo info);
+    void setDataProfileResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2294,7 +2280,7 @@
      *  RadioError:INVALID_ARGUMENTS
      *  RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void setDataThrottlingResponse(in RadioResponseInfo info);
+    void setDataThrottlingResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2318,7 +2304,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setFacilityLockForAppResponse(in RadioResponseInfo info, in int retry);
+    void setFacilityLockForAppResponse(in RadioResponseInfo info, in int retry);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2339,7 +2325,7 @@
      *   RadioError:CANCELLED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void setGsmBroadcastActivationResponse(in RadioResponseInfo info);
+    void setGsmBroadcastActivationResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2359,7 +2345,7 @@
      *   RadioError:CANCELLED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void setGsmBroadcastConfigResponse(in RadioResponseInfo info);
+    void setGsmBroadcastConfigResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2371,7 +2357,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:SYSTEM_ERR
      */
-    oneway void setIndicationFilterResponse(in RadioResponseInfo info);
+    void setIndicationFilterResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2390,7 +2376,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setInitialAttachApnResponse(in RadioResponseInfo info);
+    void setInitialAttachApnResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2401,7 +2387,7 @@
      *   RadioError:RADIO_NOT_AVAILABLE
      *   RadioError:INTERNAL_ERR
      */
-    oneway void setLinkCapacityReportingCriteriaResponse(in RadioResponseInfo info);
+    void setLinkCapacityReportingCriteriaResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2419,7 +2405,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void setLocationUpdatesResponse(in RadioResponseInfo info);
+    void setLocationUpdatesResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2436,7 +2422,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setMuteResponse(in RadioResponseInfo info);
+    void setMuteResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2458,7 +2444,7 @@
      * Returns RadioError:ILLEGAL_SIM_OR_ME when the failure is permanent and
      * no retries needed, such as illegal SIM or ME.
      */
-    oneway void setNetworkSelectionModeAutomaticResponse(in RadioResponseInfo info);
+    void setNetworkSelectionModeAutomaticResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2481,7 +2467,7 @@
      * Returns RadioError:ILLEGAL_SIM_OR_ME when the failure is permanent and
      * no retries needed, such as illegal SIM or ME.
      */
-    oneway void setNetworkSelectionModeManualResponse(in RadioResponseInfo info);
+    void setNetworkSelectionModeManualResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2493,7 +2479,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:INVALID_STATE
      */
-    oneway void setNrDualConnectivityStateResponse(in RadioResponseInfo info);
+    void setNrDualConnectivityStateResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2509,7 +2495,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:NO_RESOURCES
      */
-    oneway void setPreferredNetworkTypeBitmapResponse(in RadioResponseInfo info);
+    void setPreferredNetworkTypeBitmapResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2528,7 +2514,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setPreferredNetworkTypeResponse(in RadioResponseInfo info);
+    void setPreferredNetworkTypeResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2546,7 +2532,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setPreferredVoicePrivacyResponse(in RadioResponseInfo info);
+    void setPreferredVoicePrivacyResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2567,7 +2553,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setRadioCapabilityResponse(in RadioResponseInfo info, in RadioCapability rc);
+    void setRadioCapabilityResponse(in RadioResponseInfo info, in RadioCapability rc);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2579,7 +2565,7 @@
      *   RadioError:RF_HARDWARE_ISSUE
      *   RadioError:NO_RF_CALIBRATION_INFO
      */
-    oneway void setRadioPowerResponse(in RadioResponseInfo info);
+    void setRadioPowerResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2589,7 +2575,7 @@
      *   RadioError:INVALID_ARGUMENTS
      *   RadioError:RADIO_NOT_AVAILABLE
      */
-    oneway void setSignalStrengthReportingCriteriaResponse(in RadioResponseInfo info);
+    void setSignalStrengthReportingCriteriaResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2600,7 +2586,7 @@
      *   RadioError:INVALID_ARGUMENTS
      *   RadioError:SIM_ERR (indicates a timeout or other issue making the SIM unresponsive)
      */
-    oneway void setSimCardPowerResponse(in RadioResponseInfo info);
+    void setSimCardPowerResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2622,7 +2608,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void setSmscAddressResponse(in RadioResponseInfo info);
+    void setSmscAddressResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2641,7 +2627,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void setSuppServiceNotificationsResponse(in RadioResponseInfo info);
+    void setSuppServiceNotificationsResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2652,7 +2638,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:INVALID_ARGUMENTS
      */
-    oneway void setSystemSelectionChannelsResponse(in RadioResponseInfo info);
+    void setSystemSelectionChannelsResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2669,7 +2655,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setTTYModeResponse(in RadioResponseInfo info);
+    void setTTYModeResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2687,7 +2673,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void setUiccSubscriptionResponse(in RadioResponseInfo info);
+    void setUiccSubscriptionResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2705,7 +2691,7 @@
      *   RadioError:NO_RESOURCES if the vendor is unable handle due to resources are full.
      *   RadioError:SIM_ABSENT
      */
-    oneway void setupDataCallResponse(in RadioResponseInfo info, in SetupDataCallResult dcResponse);
+    void setupDataCallResponse(in RadioResponseInfo info, in SetupDataCallResult dcResponse);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2725,7 +2711,7 @@
      *   RadioError:CANCELLED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void startDtmfResponse(in RadioResponseInfo info);
+    void startDtmfResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2738,7 +2724,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:INVALID_CALL_ID
      */
-    oneway void startHandoverResponse(in RadioResponseInfo info);
+    void startHandoverResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2751,7 +2737,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:INVALID_ARGUMENTS
      */
-    oneway void startKeepaliveResponse(in RadioResponseInfo info, in KeepaliveStatus status);
+    void startKeepaliveResponse(in RadioResponseInfo info, in KeepaliveStatus status);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2767,7 +2753,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void startLceServiceResponse(in RadioResponseInfo info, in LceStatusInfo statusInfo);
+    void startLceServiceResponse(in RadioResponseInfo info, in LceStatusInfo statusInfo);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2780,7 +2766,7 @@
      *   RadioError:MODEM_ERR
      *   RadioError:INVALID_ARGUMENTS
      */
-    oneway void startNetworkScanResponse(in RadioResponseInfo info);
+    void startNetworkScanResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2800,7 +2786,7 @@
      *   RadioError:CANCELLED
      *   RadioError:INVALID_MODEM_STATE
      */
-    oneway void stopDtmfResponse(in RadioResponseInfo info);
+    void stopDtmfResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2809,7 +2795,7 @@
      *   RadioError:NONE
      *   RadioError:INVALID_ARGUMENTS
      */
-    oneway void stopKeepaliveResponse(in RadioResponseInfo info);
+    void stopKeepaliveResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2826,7 +2812,7 @@
      *   RadioError:CANCELLED
      *   RadioError:SIM_ABSENT
      */
-    oneway void stopLceServiceResponse(in RadioResponseInfo info, in LceStatusInfo statusInfo);
+    void stopLceServiceResponse(in RadioResponseInfo info, in LceStatusInfo statusInfo);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2836,7 +2822,7 @@
      *   RadioError:INTERNAL_ERR
      *   RadioError:MODEM_ERR
      */
-    oneway void stopNetworkScanResponse(in RadioResponseInfo info);
+    void stopNetworkScanResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2855,7 +2841,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_PUK2
      */
-    oneway void supplyIccPin2ForAppResponse(in RadioResponseInfo info, in int remainingRetries);
+    void supplyIccPin2ForAppResponse(in RadioResponseInfo info, in int remainingRetries);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2873,7 +2859,7 @@
      *   RadioError:INVALID_SIM_STATE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void supplyIccPinForAppResponse(in RadioResponseInfo info, in int remainingRetries);
+    void supplyIccPinForAppResponse(in RadioResponseInfo info, in int remainingRetries);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2891,7 +2877,7 @@
      *   RadioError:INVALID_SIM_STATE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void supplyIccPuk2ForAppResponse(in RadioResponseInfo info, in int remainingRetries);
+    void supplyIccPuk2ForAppResponse(in RadioResponseInfo info, in int remainingRetries);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2909,7 +2895,7 @@
      *   RadioError:INVALID_SIM_STATE
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void supplyIccPukForAppResponse(in RadioResponseInfo info, in int remainingRetries);
+    void supplyIccPukForAppResponse(in RadioResponseInfo info, in int remainingRetries);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2930,8 +2916,7 @@
      *   RadioError:REQUEST_NOT_SUPPORTED
      *   RadioError:SIM_ABSENT
      */
-    oneway void supplyNetworkDepersonalizationResponse(
-            in RadioResponseInfo info, in int remainingRetries);
+    void supplyNetworkDepersonalizationResponse(in RadioResponseInfo info, in int remainingRetries);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2952,7 +2937,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:REQUEST_NOT_SUPPORTED
      */
-    oneway void supplySimDepersonalizationResponse(
+    void supplySimDepersonalizationResponse(
             in RadioResponseInfo info, in PersoSubstate persoType, in int remainingRetries);
 
     /**
@@ -2975,7 +2960,7 @@
      *   RadioError:NO_RESOURCES
      *   RadioError:CANCELLED
      */
-    oneway void switchWaitingOrHoldingAndActiveResponse(in RadioResponseInfo info);
+    void switchWaitingOrHoldingAndActiveResponse(in RadioResponseInfo info);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -2996,8 +2981,7 @@
      * REQUEST_NOT_SUPPORTED may only be returned on devices that don't support this API,
      * indicated by the HAL capability CAPABILITY_SIM_PHONEBOOK_IN_MODEM.
      */
-    oneway void updateSimPhonebookRecordsResponse(
-            in RadioResponseInfo info, in int updatedRecordIndex);
+    void updateSimPhonebookRecordsResponse(in RadioResponseInfo info, in int updatedRecordIndex);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -3024,7 +3008,7 @@
      *   RadioError:INVALID_MODEM_STATE
      *   RadioError:SIM_ABSENT
      */
-    oneway void writeSmsToRuimResponse(in RadioResponseInfo info, in int index);
+    void writeSmsToRuimResponse(in RadioResponseInfo info, in int index);
 
     /**
      * @param info Response info struct containing response type, serial no. and error
@@ -3051,5 +3035,5 @@
      *   RadioError:INVALID_MODEM_STATE
      *   RadioError:SIM_ABSENT
      */
-    oneway void writeSmsToSimResponse(in RadioResponseInfo info, in int index);
+    void writeSmsToSimResponse(in RadioResponseInfo info, in int index);
 }
diff --git a/radio/aidl/android/hardware/radio/ISap.aidl b/radio/aidl/android/hardware/radio/ISap.aidl
index 55950fd..1ca4fe7 100644
--- a/radio/aidl/android/hardware/radio/ISap.aidl
+++ b/radio/aidl/android/hardware/radio/ISap.aidl
@@ -24,7 +24,7 @@
  * Empty top level interface.
  */
 @VintfStability
-interface ISap {
+oneway interface ISap {
     /**
      * TRANSFER_APDU_REQ from SAP 1.1 spec 5.1.6
      *
@@ -32,7 +32,7 @@
      * @param type APDU command type
      * @param command CommandAPDU/CommandAPDU7816 parameter depending on type
      */
-    oneway void apduReq(in int token, in SapApduType type, in byte[] command);
+    void apduReq(in int token, in SapApduType type, in byte[] command);
 
     /**
      * CONNECT_REQ from SAP 1.1 spec 5.1.1
@@ -40,14 +40,14 @@
      * @param token Id to match req-resp. Resp must include same token.
      * @param maxMsgSize MaxMsgSize to be used for SIM Access Profile connection
      */
-    oneway void connectReq(in int token, in int maxMsgSize);
+    void connectReq(in int token, in int maxMsgSize);
 
     /**
      * DISCONNECT_REQ from SAP 1.1 spec 5.1.3
      *
      * @param token Id to match req-resp. Resp must include same token.
      */
-    oneway void disconnectReq(in int token);
+    void disconnectReq(in int token);
 
     /**
      * POWER_SIM_OFF_REQ and POWER_SIM_ON_REQ from SAP 1.1 spec 5.1.10 + 5.1.12
@@ -55,14 +55,14 @@
      * @param token Id to match req-resp. Resp must include same token.
      * @param state true for on, false for off
      */
-    oneway void powerReq(in int token, in boolean state);
+    void powerReq(in int token, in boolean state);
 
     /**
      * RESET_SIM_REQ from SAP 1.1 spec 5.1.14
      *
      * @param token Id to match req-resp. Resp must include same token.
      */
-    oneway void resetSimReq(in int token);
+    void resetSimReq(in int token);
 
     /**
      * Set callback that has response and unsolicited indication functions
@@ -77,19 +77,19 @@
      * @param token Id to match req-resp. Resp must include same token.
      * @param transferProtocol Transport Protocol
      */
-    oneway void setTransferProtocolReq(in int token, in SapTransferProtocol transferProtocol);
+    void setTransferProtocolReq(in int token, in SapTransferProtocol transferProtocol);
 
     /**
      * TRANSFER_ATR_REQ from SAP 1.1 spec 5.1.8
      *
      * @param token Id to match req-resp. Resp must include same token.
      */
-    oneway void transferAtrReq(in int token);
+    void transferAtrReq(in int token);
 
     /**
      * TRANSFER_CARD_READER_STATUS_REQ from SAP 1.1 spec 5.1.17
      *
      * @param token Id to match req-resp. Resp must include same token.
      */
-    oneway void transferCardReaderStatusReq(in int token);
+    void transferCardReaderStatusReq(in int token);
 }
diff --git a/radio/aidl/android/hardware/radio/ISapCallback.aidl b/radio/aidl/android/hardware/radio/ISapCallback.aidl
index e7a4bac..00e543b 100644
--- a/radio/aidl/android/hardware/radio/ISapCallback.aidl
+++ b/radio/aidl/android/hardware/radio/ISapCallback.aidl
@@ -22,7 +22,7 @@
 import android.hardware.radio.SapStatus;
 
 @VintfStability
-interface ISapCallback {
+oneway interface ISapCallback {
     /**
      * TRANSFER_APDU_RESP from SAP 1.1 spec 5.1.7
      *
@@ -37,7 +37,7 @@
      * @param apduRsp APDU Response. Valid only if command was processed correctly and no error
      *        occurred.
      */
-    oneway void apduResponse(in int token, in SapResultCode resultCode, in byte[] apduRsp);
+    void apduResponse(in int token, in SapResultCode resultCode, in byte[] apduRsp);
 
     /**
      * CONNECT_RESP from SAP 1.1 spec 5.1.2
@@ -47,7 +47,7 @@
      * @param maxMsgSize MaxMsgSize supported by server if request cannot be fulfilled.
      *        Valid only if connectResponse is SapConnectResponse:MSG_SIZE_TOO_LARGE.
      */
-    oneway void connectResponse(in int token, in SapConnectRsp sapConnectRsp, in int maxMsgSize);
+    void connectResponse(in int token, in SapConnectRsp sapConnectRsp, in int maxMsgSize);
 
     /**
      * DISCONNECT_IND from SAP 1.1 spec 5.1.5
@@ -55,21 +55,21 @@
      * @param token Id to match req-resp. Value must match the one in req.
      * @param disconnectType Disconnect Type to indicate if shutdown is graceful or immediate
      */
-    oneway void disconnectIndication(in int token, in SapDisconnectType disconnectType);
+    void disconnectIndication(in int token, in SapDisconnectType disconnectType);
 
     /**
      * DISCONNECT_RESP from SAP 1.1 spec 5.1.4
      *
      * @param token Id to match req-resp. Value must match the one in req.
      */
-    oneway void disconnectResponse(in int token);
+    void disconnectResponse(in int token);
 
     /**
      * ERROR_RESP from SAP 1.1 spec 5.1.19
      *
      * @param token Id to match req-resp. Value must match the one in req.
      */
-    oneway void errorResponse(in int token);
+    void errorResponse(in int token);
 
     /**
      * POWER_SIM_OFF_RESP and POWER_SIM_ON_RESP from SAP 1.1 spec 5.1.11 + 5.1.13
@@ -84,7 +84,7 @@
      *        SapResultCode:CARD_REMOVED,
      *        SapResultCode:CARD_ALREADY_POWERED_ON (possible only for power on req)
      */
-    oneway void powerResponse(in int token, in SapResultCode resultCode);
+    void powerResponse(in int token, in SapResultCode resultCode);
 
     /**
      * RESET_SIM_RESP from SAP 1.1 spec 5.1.15
@@ -98,7 +98,7 @@
      *        SapResultCode:CARD_ALREADY_POWERED_OFF,
      *        SapResultCode:CARD_REMOVED
      */
-    oneway void resetSimResponse(in int token, in SapResultCode resultCode);
+    void resetSimResponse(in int token, in SapResultCode resultCode);
 
     /**
      * STATUS_IND from SAP 1.1 spec 5.1.16
@@ -106,7 +106,7 @@
      * @param token Id to match req-resp. Value must match the one in req.
      * @param status Parameter to indicate reason for the status change.
      */
-    oneway void statusIndication(in int token, in SapStatus status);
+    void statusIndication(in int token, in SapStatus status);
 
     /**
      * TRANSFER_ATR_RESP from SAP 1.1 spec 5.1.9
@@ -122,7 +122,7 @@
      * @param atr Answer to Reset from the subscription module. Included only if no error occurred,
      *        otherwise empty.
      */
-    oneway void transferAtrResponse(in int token, in SapResultCode resultCode, in byte[] atr);
+    void transferAtrResponse(in int token, in SapResultCode resultCode, in byte[] atr);
 
     /**
      * TRANSFER_CARD_READER_STATUS_REQ from SAP 1.1 spec 5.1.18
@@ -136,7 +136,7 @@
      * @param cardReaderStatus Card Reader Status coded as described in 3GPP TS 11.14 Section 12.33
      *        and TS 31.111 Section 8.33
      */
-    oneway void transferCardReaderStatusResponse(
+    void transferCardReaderStatusResponse(
             in int token, in SapResultCode resultCode, in int cardReaderStatus);
 
     /**
@@ -148,5 +148,5 @@
      *        SapResultCode:SUCCESS
      *        SapResultCode:NOT_SUPPORTED
      */
-    oneway void transferProtocolResponse(in int token, in SapResultCode resultCode);
+    void transferProtocolResponse(in int token, in SapResultCode resultCode);
 }
diff --git a/radio/aidl/android/hardware/radio/ImsiEncryptionInfo.aidl b/radio/aidl/android/hardware/radio/ImsiEncryptionInfo.aidl
index dbb0a9e..3429beb 100644
--- a/radio/aidl/android/hardware/radio/ImsiEncryptionInfo.aidl
+++ b/radio/aidl/android/hardware/radio/ImsiEncryptionInfo.aidl
@@ -16,14 +16,21 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.PublicKeyType;
-
 /**
  * Carrier specific Information sent by the carrier, which will be used to encrypt IMSI and IMPI.
  */
 @VintfStability
 parcelable ImsiEncryptionInfo {
     /**
+     * Key type to be used for ePDG
+     */
+    const byte PUBLIC_KEY_TYPE_EPDG = 1;
+    /**
+     * Key type to be used for WLAN
+     */
+    const byte PUBLIC_KEY_TYPE_WLAN = 2;
+
+    /**
      * MCC of the Carrier.
      */
     String mcc;
@@ -51,7 +58,8 @@
      */
     long expirationTime;
     /**
-     * Public key type.
+     * Public key type from carrier certificate.
+     * Values are PUBLIC_KEY_TYPE_
      */
-    PublicKeyType keyType;
+    byte keyType;
 }
diff --git a/radio/aidl/android/hardware/radio/IncrementalResultsPeriodicityRange.aidl b/radio/aidl/android/hardware/radio/IncrementalResultsPeriodicityRange.aidl
deleted file mode 100644
index 4a863a7..0000000
--- a/radio/aidl/android/hardware/radio/IncrementalResultsPeriodicityRange.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Values are in seconds.
- */
-@VintfStability
-@Backing(type="int")
-enum IncrementalResultsPeriodicityRange {
-    MIN = 1,
-    MAX = 10,
-}
diff --git a/radio/aidl/android/hardware/radio/KeepaliveRequest.aidl b/radio/aidl/android/hardware/radio/KeepaliveRequest.aidl
index ef594ad..1433b96 100644
--- a/radio/aidl/android/hardware/radio/KeepaliveRequest.aidl
+++ b/radio/aidl/android/hardware/radio/KeepaliveRequest.aidl
@@ -16,14 +16,22 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.KeepaliveType;
-
 @VintfStability
 parcelable KeepaliveRequest {
     /**
-     * The format of the keepalive packet
+     * Keepalive specified by RFC 3948 Sec. 2.3 using IPv4
      */
-    KeepaliveType type;
+    const int TYPE_NATT_IPV4 = 0;
+    /**
+     * Keepalive specified by RFC 3948 Sec. 2.3 using IPv6
+     */
+    const int TYPE_NATT_IPV6 = 1;
+
+    /**
+     * The format of the keepalive packet
+     * Values are TYPE_
+     */
+    int type;
     /**
      * Source address with type = family, in network byte order
      */
diff --git a/radio/aidl/android/hardware/radio/KeepaliveStatus.aidl b/radio/aidl/android/hardware/radio/KeepaliveStatus.aidl
index 911cdae..0cf6767 100644
--- a/radio/aidl/android/hardware/radio/KeepaliveStatus.aidl
+++ b/radio/aidl/android/hardware/radio/KeepaliveStatus.aidl
@@ -16,16 +16,29 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.KeepaliveStatusCode;
-
 @VintfStability
 parcelable KeepaliveStatus {
     /**
-     * The sessionHandle provided by the API
+     * Keepalive is currently active.
+     */
+    const int CODE_ACTIVE = 0;
+    /**
+     * Keepalive is inactive, which indicates an error.
+     */
+    const int CODE_INACTIVE = 1;
+    /**
+     * Requested keepalive has not yet been processed by the modem.
+     * Only allowed in a RESPONSE message to a REQUEST.
+     */
+    const int CODE_PENDING = 2;
+
+    /**
+     * The sessionHandle provided by the API.
      */
     int sessionHandle;
     /**
-     * Status for the given keepalive
+     * Status for the given keepalive.
+     * Values are CODE_
      */
-    KeepaliveStatusCode code;
+    int code;
 }
diff --git a/radio/aidl/android/hardware/radio/KeepaliveStatusCode.aidl b/radio/aidl/android/hardware/radio/KeepaliveStatusCode.aidl
deleted file mode 100644
index ed4b327..0000000
--- a/radio/aidl/android/hardware/radio/KeepaliveStatusCode.aidl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum KeepaliveStatusCode {
-    /**
-     * Keepalive is currently active
-     */
-    ACTIVE,
-    /**
-     * Keepalive is inactive, which indicates an error
-     */
-    INACTIVE,
-    /**
-     * Requested keepalive has not yet been processed by the modem.
-     * Only allowed in a RESPONSE message to a REQUEST
-     */
-    PENDING,
-}
diff --git a/radio/aidl/android/hardware/radio/KeepaliveType.aidl b/radio/aidl/android/hardware/radio/KeepaliveType.aidl
deleted file mode 100644
index 86b1509..0000000
--- a/radio/aidl/android/hardware/radio/KeepaliveType.aidl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum KeepaliveType {
-    /**
-     * Keepalive specified by RFC 3948 Sec. 2.3 using IPv4
-     */
-    NATT_IPV4,
-    /**
-     * Keepalive specified by RFC 3948 Sec. 2.3 using IPv6
-     */
-    NATT_IPV6,
-}
diff --git a/radio/aidl/android/hardware/radio/LceStatus.aidl b/radio/aidl/android/hardware/radio/LceStatus.aidl
deleted file mode 100644
index 0d3a27e..0000000
--- a/radio/aidl/android/hardware/radio/LceStatus.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum LceStatus {
-    NOT_SUPPORTED,
-    STOPPED,
-    ACTIVE,
-}
diff --git a/radio/aidl/android/hardware/radio/LceStatusInfo.aidl b/radio/aidl/android/hardware/radio/LceStatusInfo.aidl
index e2b35e1..d663d38 100644
--- a/radio/aidl/android/hardware/radio/LceStatusInfo.aidl
+++ b/radio/aidl/android/hardware/radio/LceStatusInfo.aidl
@@ -16,11 +16,16 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.LceStatus;
-
 @VintfStability
 parcelable LceStatusInfo {
-    LceStatus lceStatus;
+    const int LCE_STATUS_NOT_SUPPORTED = 0;
+    const int LCE_STATUS_STOPPED = 1;
+    const int LCE_STATUS_ACTIVE = 2;
+
+    /**
+     * Values are LCE_STATUS_
+     */
+    int lceStatus;
     /**
      * Actual LCE reporting interval, meaningful only if LceStatus = ACTIVE.
      */
diff --git a/radio/aidl/android/hardware/radio/LinkAddress.aidl b/radio/aidl/android/hardware/radio/LinkAddress.aidl
index 6fc12c7..0c18e27 100644
--- a/radio/aidl/android/hardware/radio/LinkAddress.aidl
+++ b/radio/aidl/android/hardware/radio/LinkAddress.aidl
@@ -16,13 +16,16 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.AddressProperty;
-
 /**
  * Describes a data link address for mobile data connection.
  */
 @VintfStability
 parcelable LinkAddress {
+    const int ADDRESS_PROPERTY_NONE = 0;
+    /**
+     * Indicates this address is deprecated
+     */
+    const int ADDRESS_PROPERTY_DEPRECATED = 0x20;
     /**
      * The format is IP address with optional "/" prefix length (The format is defined in RFC-4291
      * section 2.3). For example, "192.0.1.3", "192.0.1.11/16", or "2001:db8::1/64". Typically one
@@ -31,9 +34,10 @@
      */
     String address;
     /**
-     * The properties of the link address
+     * The properties of the link address, as defined in if_addr.h in the Linux kernel.
+     * Values are ADDRESS_PROPERTY_
      */
-    AddressProperty properties;
+    int addressProperties;
     /**
      * The time, as reported by SystemClock.elapsedRealtime(), when this link address will be or
      * was deprecated. -1 indicates this information is not available. At the time existing
diff --git a/radio/aidl/android/hardware/radio/MaxSearchTimeRange.aidl b/radio/aidl/android/hardware/radio/MaxSearchTimeRange.aidl
deleted file mode 100644
index babbd3c..0000000
--- a/radio/aidl/android/hardware/radio/MaxSearchTimeRange.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Values are in seconds.
- */
-@VintfStability
-@Backing(type="int")
-enum MaxSearchTimeRange {
-    MIN = 60,
-    MAX = 3600,
-}
diff --git a/radio/aidl/android/hardware/radio/MaybePort.aidl b/radio/aidl/android/hardware/radio/MaybePort.aidl
deleted file mode 100644
index 169f90f..0000000
--- a/radio/aidl/android/hardware/radio/MaybePort.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.PortRange;
-
-/**
- * Port is optional, contains either single port or range of ports
- */
-@VintfStability
-union MaybePort {
-    boolean noinit;
-    PortRange range;
-}
diff --git a/radio/aidl/android/hardware/radio/MvnoType.aidl b/radio/aidl/android/hardware/radio/MvnoType.aidl
deleted file mode 100644
index 0f0df62..0000000
--- a/radio/aidl/android/hardware/radio/MvnoType.aidl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum MvnoType {
-    /**
-     * None
-     */
-    NONE,
-    /**
-     * The matching data is based on IMSI.
-     */
-    IMSI,
-    /**
-     * The matching data is based on group id.
-     */
-    GID,
-    /**
-     * The matching data is based service provider name.
-     */
-    SPN,
-}
diff --git a/radio/aidl/android/hardware/radio/NetworkScanRequest.aidl b/radio/aidl/android/hardware/radio/NetworkScanRequest.aidl
index 7659b89..d495a9d 100644
--- a/radio/aidl/android/hardware/radio/NetworkScanRequest.aidl
+++ b/radio/aidl/android/hardware/radio/NetworkScanRequest.aidl
@@ -17,15 +17,35 @@
 package android.hardware.radio;
 
 import android.hardware.radio.RadioAccessSpecifier;
-import android.hardware.radio.ScanType;
 
 @VintfStability
 parcelable NetworkScanRequest {
-    ScanType type;
+    const int INCREMENTAL_RESULTS_PREIODICITY_RANGE_MIN = 1;
+    const int INCREMENTAL_RESULTS_PREIODICITY_RANGE_MAX = 10;
+
+    const int MAX_SEARCH_TIME_RANGE_MIN = 60;
+    const int MAX_SEARCH_TIME_RANGE_MAX = 3600;
+
+    const int SCAN_INTERVAL_RANGE_MIN = 5;
+    const int SCAN_INTERVAL_RANGE_MAX = 300;
+
+    /**
+     * Performs the scan only once
+     */
+    const int SCAN_TYPE_ONE_SHOT = 0;
+    /**
+     * Performs the scan periodically until cancelled
+     */
+    const int SCAN_TYPE_PERIODIC = 1;
+
+    /**
+     * Values are SCAN_TYPE_
+     */
+    int type;
     /**
      * Time interval in seconds between the completion of one scan and the start of a subsequent
      * scan. Implementations may ignore this field unless the 'type' is 'PERIODIC'.
-     * Range: ScanIntervalRange:MIN to ScanIntervalRange:MAX.
+     * Range: SCAN_INTERVAL_RANGE_MIN to SCAN_INTERVAL_RANGE_MAX.
      */
     int interval;
     /**
@@ -35,7 +55,7 @@
     RadioAccessSpecifier[] specifiers;
     /**
      * Maximum duration of the periodic search (in seconds). If the search lasts maxSearchTime, it
-     * must be terminated. Range: MaxSearchTimeRange:MIN to MaxSearchTimeRange:MAX
+     * must be terminated. Range: MAX_SEARCH_TIME_RANGE_MIN to MAX_SEARCH_TIME_RANGE_MAX
      */
     int maxSearchTime;
     /**
@@ -48,7 +68,7 @@
      * Indicates the periodicity with which the modem must report incremental results to the client
      * (in seconds). Implementations may ignore this value if the incremental results are not
      * requested. This value must be less than or equal to maxSearchTime.
-     * Range: IncrementalResultsPeriodicityRange:MIN to IncrementalResultsPeriodicityRange:MAX
+     * Range: INCREMENTAL_RESULTS_PREIODICITY_RANGE_MIN to INCREMENTAL_RESULTS_PREIODICITY_RANGE_MAX
      */
     int incrementalResultsPeriodicity;
     /**
diff --git a/radio/aidl/android/hardware/radio/NetworkScanResult.aidl b/radio/aidl/android/hardware/radio/NetworkScanResult.aidl
index c542a47..dd71d11 100644
--- a/radio/aidl/android/hardware/radio/NetworkScanResult.aidl
+++ b/radio/aidl/android/hardware/radio/NetworkScanResult.aidl
@@ -18,14 +18,23 @@
 
 import android.hardware.radio.CellInfo;
 import android.hardware.radio.RadioError;
-import android.hardware.radio.ScanStatus;
 
 @VintfStability
 parcelable NetworkScanResult {
     /**
-     * The status of the scan.
+     * The result contains a part of the scan results.
      */
-    ScanStatus status;
+    const int SCAN_STATUS_PARTIAL = 1;
+    /**
+     * The result contains the last part of the scan results.
+     */
+    const int SCAN_STATUS_COMPLETE = 2;
+
+    /**
+     * The status of the scan.
+     * Values are SCAN_STATUS_
+     */
+    int status;
     /**
      * The error code of the incremental result.
      */
diff --git a/radio/aidl/android/hardware/radio/NrQos.aidl b/radio/aidl/android/hardware/radio/NrQos.aidl
index 3d0278c..d791eef 100644
--- a/radio/aidl/android/hardware/radio/NrQos.aidl
+++ b/radio/aidl/android/hardware/radio/NrQos.aidl
@@ -23,6 +23,9 @@
  */
 @VintfStability
 parcelable NrQos {
+    const byte FLOW_ID_RANGE_MIN = 1;
+    const byte FLOW_ID_RANGE_MAX = 63;
+
     /**
      * 5G QOS Identifier (5QI), see 3GPP TS 24.501 and 23.501. The allowed values are standard
      * values (1-9, 65-68, 69-70, 75, 79-80, 82-85) defined in the spec and operator specific values
@@ -33,7 +36,7 @@
     QosBandwidth uplink;
     /**
      * QOS flow identifier of the QOS flow description in the range
-     * (QosFlowIdRange::MIN, QosFlowIdRange::MAX)
+     * (FLOW_ID_RANGE_MIN, FLOW_ID_RANGE_MAX)
      */
     byte qfi;
     char averagingWindowMs;
diff --git a/radio/aidl/android/hardware/radio/NrVopsInfo.aidl b/radio/aidl/android/hardware/radio/NrVopsInfo.aidl
index 4d80f32..0d01aab 100644
--- a/radio/aidl/android/hardware/radio/NrVopsInfo.aidl
+++ b/radio/aidl/android/hardware/radio/NrVopsInfo.aidl
@@ -16,10 +16,6 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.EmcIndicator;
-import android.hardware.radio.EmfIndicator;
-import android.hardware.radio.VopsIndicator;
-
 /**
  * Type to define the NR specific network capabilities for voice over PS including emergency and
  * normal voice calls.
@@ -27,12 +23,60 @@
 @VintfStability
 parcelable NrVopsInfo {
     /**
+     * Emergency services not supported
+     */
+    const byte EMC_INDICATOR_NOT_SUPPORTED = 0;
+    /**
+     * Emergency services supported in NR connected to 5GCN only
+     */
+    const byte EMC_INDICATOR_NR_CONNECTED_TO_5GCN = 1;
+    /**
+     * Emergency services supported in E-UTRA connected to 5GCN only
+     */
+    const byte EMC_INDICATOR_EUTRA_CONNECTED_TO_5GCN = 2;
+    /**
+     * Emergency services supported in NR connected to 5GCN and E-UTRA connected to 5GCN
+     */
+    const byte EMC_INDICATOR_BOTH_NR_EUTRA_CONNECTED_TO_5GCN = 3;
+
+    /**
+     * Emergency services fallback not supported
+     */
+    const byte EMF_INDICATOR_NOT_SUPPORTED = 0;
+    /**
+     * Emergency services fallback supported in NR connected to 5GCN only
+     */
+    const byte EMF_INDICATOR_NR_CONNECTED_TO_5GCN = 1;
+    /**
+     * Emergency services fallback supported in E-UTRA connected to 5GCN only
+     */
+    const byte EMF_INDICATOR_EUTRA_CONNECTED_TO_5GCN = 2;
+    /**
+     * Emergency services fallback supported in NR connected to 5GCN and E-UTRA connected to 5GCN.
+     */
+    const byte EMF_INDICATOR_BOTH_NR_EUTRA_CONNECTED_TO_5GCN = 3;
+
+    /**
+     * IMS voice over PS session not supported
+     */
+    const byte VOPS_INDICATOR_VOPS_NOT_SUPPORTED = 0;
+    /**
+     * IMS voice over PS session supported over 3GPP access
+     */
+    const byte VOPS_INDICATOR_VOPS_OVER_3GPP = 1;
+    /**
+     * IMS voice over PS session supported over non-3GPP access
+     */
+    const byte VOPS_INDICATOR_VOPS_OVER_NON_3GPP = 2;
+
+    /**
      * This indicates if the camped network supports VoNR services, and what kind of services
      * it supports. This information is received from NR network during NR NAS registration
      * procedure through NR REGISTRATION ACCEPT.
      * Refer 3GPP 24.501 EPS 5GS network feature support -> IMS VoPS
+     * Values are VOPS_INDICATOR
      */
-    VopsIndicator vopsSupported;
+    byte vopsSupported;
     /**
      * This indicates if the camped network supports VoNR emergency service. This information
      * is received from NR network through two sources:
@@ -42,13 +86,15 @@
      *    Refer 3GPP 38.331 SIB1 : ims-EmergencySupport
      *    If device is registered on NR, then this field indicates whether the cell
      *    supports IMS emergency bearer services for UEs in limited service mode.
+     * Values are EMC_INDICATOR_
      */
-    EmcIndicator emcSupported;
+    byte emcSupported;
     /**
      * This indicates if the camped network supports VoNR emergency service fallback. This
      * information is received from NR network during NR NAS registration procedure through
      * NR REGISTRATION ACCEPT.
      * Refer 3GPP 24.501 EPS 5GS network feature support -> EMF
+     * Values are EMF_INDICATOR_ from TS 24.501 sec 9.10.3.5.
      */
-    EmfIndicator emfSupported;
+    byte emfSupported;
 }
diff --git a/radio/aidl/android/hardware/radio/OperatorInfo.aidl b/radio/aidl/android/hardware/radio/OperatorInfo.aidl
index 4475ff5..e0234fc 100644
--- a/radio/aidl/android/hardware/radio/OperatorInfo.aidl
+++ b/radio/aidl/android/hardware/radio/OperatorInfo.aidl
@@ -16,10 +16,13 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.OperatorStatus;
-
 @VintfStability
 parcelable OperatorInfo {
+    const int STATUS_UNKNOWN = 0;
+    const int STATUS_AVAILABLE = 1;
+    const int STATUS_CURRENT = 2;
+    const int STATUS_FORBIDDEN = 3;
+
     /**
      * Long alpha ONS or EONS
      */
@@ -32,5 +35,8 @@
      * 5 or 6 digit numeric code (MCC + MNC)
      */
     String operatorNumeric;
-    OperatorStatus status;
+    /**
+     * Values are STATUS_
+     */
+    int status;
 }
diff --git a/radio/aidl/android/hardware/radio/OperatorStatus.aidl b/radio/aidl/android/hardware/radio/OperatorStatus.aidl
deleted file mode 100644
index fcc31ec..0000000
--- a/radio/aidl/android/hardware/radio/OperatorStatus.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum OperatorStatus {
-    UNKNOWN,
-    AVAILABLE,
-    CURRENT,
-    FORBIDDEN,
-}
diff --git a/radio/aidl/android/hardware/radio/OptionalCsgInfo.aidl b/radio/aidl/android/hardware/radio/OptionalCsgInfo.aidl
deleted file mode 100644
index f785693..0000000
--- a/radio/aidl/android/hardware/radio/OptionalCsgInfo.aidl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.ClosedSubscriberGroupInfo;
-
-@VintfStability
-union OptionalCsgInfo {
-    /**
-     * If no CSG info is provided by the cell, then this structure shall be present.
-     */
-    boolean noinit;
-    /**
-     * If CSG info is provided by the cell, this structure shall be present.
-     */
-    ClosedSubscriberGroupInfo csgInfo;
-}
diff --git a/radio/aidl/android/hardware/radio/OptionalDnn.aidl b/radio/aidl/android/hardware/radio/OptionalDnn.aidl
deleted file mode 100644
index 1c38a71..0000000
--- a/radio/aidl/android/hardware/radio/OptionalDnn.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * This safe_union represents an optional DNN. DNN stands for Data Network Name and represents
- * an APN as defined in 3GPP TS 23.003.
- */
-@VintfStability
-union OptionalDnn {
-    boolean noinit;
-    String value;
-}
diff --git a/radio/aidl/android/hardware/radio/OptionalOsAppId.aidl b/radio/aidl/android/hardware/radio/OptionalOsAppId.aidl
deleted file mode 100644
index 4614601..0000000
--- a/radio/aidl/android/hardware/radio/OptionalOsAppId.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.OsAppId;
-
-/**
- * This safe_union represents an optional OsAppId.
- */
-@VintfStability
-union OptionalOsAppId {
-    boolean noinit;
-    OsAppId value;
-}
diff --git a/radio/aidl/android/hardware/radio/OptionalPdpProtocolType.aidl b/radio/aidl/android/hardware/radio/OptionalPdpProtocolType.aidl
deleted file mode 100644
index 7e51b83..0000000
--- a/radio/aidl/android/hardware/radio/OptionalPdpProtocolType.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.PdpProtocolType;
-
-/**
- * This safe_union represents an optional PdpProtocolType.
- */
-@VintfStability
-union OptionalPdpProtocolType {
-    boolean noinit;
-    PdpProtocolType value;
-}
diff --git a/radio/aidl/android/hardware/radio/OptionalSliceInfo.aidl b/radio/aidl/android/hardware/radio/OptionalSliceInfo.aidl
deleted file mode 100644
index cfc309c..0000000
--- a/radio/aidl/android/hardware/radio/OptionalSliceInfo.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.SliceInfo;
-
-/**
- * This safe_union represents an optional slice info.
- */
-@VintfStability
-union OptionalSliceInfo {
-    boolean noinit;
-    SliceInfo value;
-}
diff --git a/radio/aidl/android/hardware/radio/OptionalSscMode.aidl b/radio/aidl/android/hardware/radio/OptionalSscMode.aidl
deleted file mode 100644
index 22933b9..0000000
--- a/radio/aidl/android/hardware/radio/OptionalSscMode.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.SscMode;
-
-/**
- * This safe_union represents an optional SscMode.
- */
-@VintfStability
-union OptionalSscMode {
-    boolean noinit;
-    SscMode value;
-}
diff --git a/radio/aidl/android/hardware/radio/OptionalTrafficDescriptor.aidl b/radio/aidl/android/hardware/radio/OptionalTrafficDescriptor.aidl
deleted file mode 100644
index b524cb3..0000000
--- a/radio/aidl/android/hardware/radio/OptionalTrafficDescriptor.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.hardware.radio.TrafficDescriptor;
-
-/**
- * This safe_union represents an optional TrafficDescriptor.
- */
-@VintfStability
-union OptionalTrafficDescriptor {
-    boolean noinit;
-    TrafficDescriptor value;
-}
diff --git a/radio/aidl/android/hardware/radio/P2Constant.aidl b/radio/aidl/android/hardware/radio/P2Constant.aidl
deleted file mode 100644
index d40a446..0000000
--- a/radio/aidl/android/hardware/radio/P2Constant.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum P2Constant {
-    /**
-     * No P2 value is provided
-     */
-    NO_P2 = -1,
-}
diff --git a/radio/aidl/android/hardware/radio/PortRange.aidl b/radio/aidl/android/hardware/radio/PortRange.aidl
index 932d54a..2b67e0e 100644
--- a/radio/aidl/android/hardware/radio/PortRange.aidl
+++ b/radio/aidl/android/hardware/radio/PortRange.aidl
@@ -18,11 +18,14 @@
 
 /**
  * Defines range of ports. start and end are the first and last port numbers (inclusive) in the
- * range. Both start and end are in QosPortRange.MIN to QosPortRange.MAX range. A single port shall
+ * range. Both start and end are in PORT_RANGE_MIN to PORT_RANGE_MAX range. A single port shall
  * be represented by the same start and end value.
  */
 @VintfStability
 parcelable PortRange {
+    const int PORT_RANGE_MIN = 20;
+    const int PORT_RANGE_MAX = 65535;
+
     int start;
     int end;
 }
diff --git a/radio/aidl/android/hardware/radio/PrlIndicator.aidl b/radio/aidl/android/hardware/radio/PrlIndicator.aidl
deleted file mode 100644
index acd870e..0000000
--- a/radio/aidl/android/hardware/radio/PrlIndicator.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum PrlIndicator {
-    NOT_REGISTERED = -1,
-    NOT_IN_PRL = 0,
-    IN_PRL = 1,
-}
diff --git a/radio/aidl/android/hardware/radio/PublicKeyType.aidl b/radio/aidl/android/hardware/radio/PublicKeyType.aidl
deleted file mode 100644
index c1babc4..0000000
--- a/radio/aidl/android/hardware/radio/PublicKeyType.aidl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Public key type from carrier certificate.
- */
-@VintfStability
-@Backing(type="byte")
-enum PublicKeyType {
-    /**
-     * Key type to be used for ePDG
-     */
-    EPDG = 1,
-    /**
-     * Key type to be used for WLAN
-     */
-    WLAN = 2,
-}
diff --git a/radio/aidl/android/hardware/radio/QosFilter.aidl b/radio/aidl/android/hardware/radio/QosFilter.aidl
index 717944a..8b12649 100644
--- a/radio/aidl/android/hardware/radio/QosFilter.aidl
+++ b/radio/aidl/android/hardware/radio/QosFilter.aidl
@@ -16,18 +16,41 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.MaybePort;
-import android.hardware.radio.QosFilterDirection;
+import android.hardware.radio.PortRange;
 import android.hardware.radio.QosFilterIpsecSpi;
 import android.hardware.radio.QosFilterIpv6FlowLabel;
 import android.hardware.radio.QosFilterTypeOfService;
-import android.hardware.radio.QosProtocol;
 
 /**
  * See 3gpp 24.008 10.5.6.12 and 3gpp 24.501 9.11.4.13
  */
 @VintfStability
 parcelable QosFilter {
+    const byte DIRECTION_DOWNLINK = 0;
+    const byte DIRECTION_UPLINK = 1;
+    const byte DIRECTION_BIDIRECTIONAL = 2;
+
+    /**
+     * No protocol specified
+     */
+    const byte PROTOCOL_UNSPECIFIED = -1;
+    /**
+     * Transmission Control Protocol
+     */
+    const byte PROTOCOL_TCP = 6;
+    /**
+     * User Datagram Protocol
+     */
+    const byte PROTOCOL_UDP = 17;
+    /**
+     * Encapsulating Security Payload Protocol
+     */
+    const byte PROTOCOL_ESP = 50;
+    /**
+     * Authentication Header
+     */
+    const byte PROTOCOL_AH = 51;
+
     /**
      * Local and remote IP addresses, typically one IPv4 or one IPv6 or one of each. Addresses could
      * be with optional "/" prefix length, e.g.,"192.0.1.3" or "192.0.1.11/16 2001:db8::1/64".
@@ -37,14 +60,18 @@
     String[] localAddresses;
     String[] remoteAddresses;
     /**
-     * Local and remote port/ranges
+     * Local port/range
      */
-    MaybePort localPort;
-    MaybePort remotePort;
+    @nullable PortRange localPort;
     /**
-     * QoS protocol
+     * Remote port/range
      */
-    QosProtocol protocol;
+    @nullable PortRange remotePort;
+    /**
+     * Next header QoS protocol numbers defined by IANA, RFC 5237
+     * Values are PROTOCOL_
+     */
+    byte protocol;
     /**
      * Type of service value or mask as defined in RFC 1349
      */
@@ -59,8 +86,9 @@
     QosFilterIpsecSpi spi;
     /**
      * Filter direction
+     * Values are DIRECTION_
      */
-    QosFilterDirection direction;
+    byte direction;
     /**
      * Specifies the order in which the filter needs to be matched. A lower numerical (positive)
      * value has a higher precedence. Set -1 when unspecified.
diff --git a/radio/aidl/android/hardware/radio/QosFilterDirection.aidl b/radio/aidl/android/hardware/radio/QosFilterDirection.aidl
deleted file mode 100644
index 7693c8c..0000000
--- a/radio/aidl/android/hardware/radio/QosFilterDirection.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="byte")
-enum QosFilterDirection {
-    DOWNLINK,
-    UPLINK,
-    BIDIRECTIONAL,
-}
diff --git a/radio/aidl/android/hardware/radio/QosFlowIdRange.aidl b/radio/aidl/android/hardware/radio/QosFlowIdRange.aidl
deleted file mode 100644
index df2398b..0000000
--- a/radio/aidl/android/hardware/radio/QosFlowIdRange.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Allowed values for 5G QOS flow identifier
- */
-@VintfStability
-@Backing(type="byte")
-enum QosFlowIdRange {
-    MIN = 1,
-    MAX = 63,
-}
diff --git a/radio/aidl/android/hardware/radio/QosPortRange.aidl b/radio/aidl/android/hardware/radio/QosPortRange.aidl
deleted file mode 100644
index f3df19f..0000000
--- a/radio/aidl/android/hardware/radio/QosPortRange.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Allowed port numbers
- */
-@VintfStability
-@Backing(type="int")
-enum QosPortRange {
-    MIN = 20,
-    MAX = 65535,
-}
diff --git a/radio/aidl/android/hardware/radio/QosProtocol.aidl b/radio/aidl/android/hardware/radio/QosProtocol.aidl
deleted file mode 100644
index 05cd670..0000000
--- a/radio/aidl/android/hardware/radio/QosProtocol.aidl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Next header protocol numbers defined by IANA, RFC 5237
- */
-@VintfStability
-@Backing(type="byte")
-enum QosProtocol {
-    /**
-     * No protocol specified
-     */
-    UNSPECIFIED = -1,
-    /**
-     * Transmission Control Protocol
-     */
-    TCP = 6,
-    /**
-     * User Datagram Protocol
-     */
-    UDP = 17,
-    /**
-     * Encapsulating Security Payload Protocol
-     */
-    ESP = 50,
-    /**
-     * Authentication Header
-     */
-    AH = 51,
-}
diff --git a/radio/aidl/android/hardware/radio/RadioCapability.aidl b/radio/aidl/android/hardware/radio/RadioCapability.aidl
index d911b6f..a94e96a 100644
--- a/radio/aidl/android/hardware/radio/RadioCapability.aidl
+++ b/radio/aidl/android/hardware/radio/RadioCapability.aidl
@@ -17,16 +17,57 @@
 package android.hardware.radio;
 
 import android.hardware.radio.RadioAccessFamily;
-import android.hardware.radio.RadioCapabilityPhase;
-import android.hardware.radio.RadioCapabilityStatus;
 
 @VintfStability
 parcelable RadioCapability {
     /**
+     * Logical Modem's (LM) initial value and value after PHASE_FINISH completes.
+     */
+    const int PHASE_CONFIGURED = 0;
+    /**
+     * PHASE_START is sent before PHASE_APPLY and indicates that an APPLY is forthcoming with these
+     * same parameters.
+     */
+    const int PHASE_START = 1;
+    /**
+     * PHASE_APPLY is sent after all LM's receive PHASE_START and returned
+     * RadioCapability.status = 0.
+     * If any PHASE_START's fail, hal implementation must not send PHASE_APPLY.
+     */
+    const int PHASE_APPLY = 2;
+    /**
+     * PHASE_UNSOL_RSP is sent with unsolicited radioCapability().
+     */
+    const int PHASE_UNSOL_RSP = 3;
+    /**
+     * PHASE_FINISH is sent after all commands have completed. If an error occurs in any previous
+     * command, the RadioAccessFamily and logicalModemUuid fields must be the prior configuration
+     * thus restoring the configuration to the previous value. An error returned by PHASE_FINISH
+     * will generally be ignored or may cause that LM to be removed from service.
+     */
+    const int PHASE_FINISH = 4;
+
+    /**
+     * This parameter has no meaning with PHASE_START, PHASE_APPLY.
+     */
+    const int STATUS_NONE = 0;
+    /**
+     * Tell modem the action transaction of set radio capability was successful with PHASE_FINISH.
+     */
+    const int STATUS_SUCCESS = 1;
+    /**
+     * Tell modem the action transaction of set radio capability failed with PHASE_FINISH.
+     */
+    const int STATUS_FAIL = 2;
+
+    /**
      * Unique session value defined by framework returned in all "responses/unslo".
      */
     int session;
-    RadioCapabilityPhase phase;
+    /**
+     * Values are PHASE_
+     */
+    int phase;
     /**
      * 32-bit bitmap of RadioAccessFamily.
      */
@@ -36,5 +77,8 @@
      * RadioConst:MAX_UUID_LENGTH is the max length.
      */
     String logicalModemUuid;
-    RadioCapabilityStatus status;
+    /**
+     * Values are STATUS_
+     */
+    int status;
 }
diff --git a/radio/aidl/android/hardware/radio/RadioCapabilityPhase.aidl b/radio/aidl/android/hardware/radio/RadioCapabilityPhase.aidl
deleted file mode 100644
index a586300..0000000
--- a/radio/aidl/android/hardware/radio/RadioCapabilityPhase.aidl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum RadioCapabilityPhase {
-    /**
-     * Logical Modem's (LM) initial value and value after FINISH completes
-     */
-    CONFIGURED,
-    /**
-     * START is sent before APPLY and indicates that an APPLY is forthcoming with these same
-     * parameters.
-     */
-    START,
-    /**
-     * APPLY is sent after all LM's receive START and returned RadioCapability.status = 0.
-     * If any START's fail, hal implementation must not send APPLY.
-     */
-    APPLY,
-    /**
-     * UNSOL_RSP is sent with unsolicited radioCapability()
-     */
-    UNSOL_RSP,
-    /**
-     * FINISH is sent after all commands have completed. If an error occurs in any previous command,
-     * the RadioAccessFamily and logicalModemUuid fields must be the prior configuration thus
-     * restoring the configuration to the previous value. An error returned by FINISH will generally
-     * be ignored or may cause that LM to be removed from service.
-     */
-    FINISH,
-}
diff --git a/radio/aidl/android/hardware/radio/RadioCapabilityStatus.aidl b/radio/aidl/android/hardware/radio/RadioCapabilityStatus.aidl
deleted file mode 100644
index 5b90f38..0000000
--- a/radio/aidl/android/hardware/radio/RadioCapabilityStatus.aidl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum RadioCapabilityStatus {
-    /**
-     * This parameter has no meaning with RadioCapabilityPhase:START, RadioCapabilityPhase:APPLY
-     */
-    NONE,
-    /**
-     * Tell modem the action transaction of set radio capability was successful with
-     * RadioCapabilityPhase:FINISH
-     */
-    SUCCESS,
-    /**
-     * Tell modem the action transaction of set radio capability failed with
-     * RadioCapabilityPhase:FINISH
-     */
-    FAIL,
-}
diff --git a/radio/aidl/android/hardware/radio/RadioCdmaSmsConst.aidl b/radio/aidl/android/hardware/radio/RadioCdmaSmsConst.aidl
deleted file mode 100644
index f480077..0000000
--- a/radio/aidl/android/hardware/radio/RadioCdmaSmsConst.aidl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum RadioCdmaSmsConst {
-    ADDRESS_MAX = 36,
-    SUBADDRESS_MAX = 36,
-    BEARER_DATA_MAX = 255,
-    UDH_MAX_SND_SIZE = 128,
-    UDH_EO_DATA_SEGMENT_MAX = 131,
-    MAX_UD_HEADERS = 7,
-    USER_DATA_MAX = 229,
-    UDH_LARGE_PIC_SIZE = 128,
-    UDH_SMALL_PIC_SIZE = 32,
-    UDH_VAR_PIC_SIZE = 134,
-    UDH_ANIM_NUM_BITMAPS = 4,
-    UDH_LARGE_BITMAP_SIZE = 32,
-    UDH_SMALL_BITMAP_SIZE = 8,
-    UDH_OTHER_SIZE = 226,
-    IP_ADDRESS_SIZE = 4,
-}
diff --git a/radio/aidl/android/hardware/radio/RadioConst.aidl b/radio/aidl/android/hardware/radio/RadioConst.aidl
index 815b3b9..2e1bcf0 100644
--- a/radio/aidl/android/hardware/radio/RadioConst.aidl
+++ b/radio/aidl/android/hardware/radio/RadioConst.aidl
@@ -33,4 +33,8 @@
     NUM_SERVICE_CLASSES = 7,
     NUM_TX_POWER_LEVELS = 5,
     RADIO_ACCESS_SPECIFIER_MAX_SIZE = 8,
+    /**
+     * No P2 value is provided
+     */
+    P2_CONSTANT_NO_P2 = -1,
 }
diff --git a/radio/aidl/android/hardware/radio/RadioFrequencyInfo.aidl b/radio/aidl/android/hardware/radio/RadioFrequencyInfo.aidl
index e5aa9fb..140d65a 100644
--- a/radio/aidl/android/hardware/radio/RadioFrequencyInfo.aidl
+++ b/radio/aidl/android/hardware/radio/RadioFrequencyInfo.aidl
@@ -16,15 +16,31 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.FrequencyRange;
-
 @VintfStability
 union RadioFrequencyInfo {
+    /**
+     * Indicates the frequency range is below 1GHz.
+     */
+    const int FREQUENCY_RANGE_LOW = 1;
+    /**
+     * Indicates the frequency range is between 1GHz and 3GHz.
+     */
+    const int FREQUENCY_RANGE_MID = 2;
+    /**
+     * Indicates the frequency range is between 3GHz and 6GHz.
+     */
+    const int FREQUENCY_RANGE_HIGH = 3;
+    /**
+     * Indicates the frequency range is above 6GHz (millimeter wave frequency).
+     */
+    const int FREQUENCY_RANGE_MMWAVE = 4;
+
     boolean noinit;
     /**
      * A rough frequency range.
+     * Values are FREQUENCY_RANGE_
      */
-    FrequencyRange range;
+    int range;
     /**
      * The Absolute Radio Frequency Channel Number.
      */
diff --git a/radio/aidl/android/hardware/radio/RegStateResult.aidl b/radio/aidl/android/hardware/radio/RegStateResult.aidl
index 4bc55c4..615392c 100644
--- a/radio/aidl/android/hardware/radio/RegStateResult.aidl
+++ b/radio/aidl/android/hardware/radio/RegStateResult.aidl
@@ -16,10 +16,10 @@
 
 package android.hardware.radio;
 
+import android.hardware.radio.AccessTechnologySpecificInfo;
 import android.hardware.radio.CellIdentity;
 import android.hardware.radio.RadioTechnology;
 import android.hardware.radio.RegState;
-import android.hardware.radio.RegStateResultAccessTechnologySpecificInfo;
 import android.hardware.radio.RegistrationFailCause;
 
 @VintfStability
@@ -56,5 +56,5 @@
     /**
      * Access-technology-specific registration information, such as for CDMA2000.
      */
-    RegStateResultAccessTechnologySpecificInfo accessTechnologySpecificInfo;
+    AccessTechnologySpecificInfo accessTechnologySpecificInfo;
 }
diff --git a/radio/aidl/android/hardware/radio/RestrictedState.aidl b/radio/aidl/android/hardware/radio/RestrictedState.aidl
deleted file mode 100644
index 1cf8be2..0000000
--- a/radio/aidl/android/hardware/radio/RestrictedState.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum RestrictedState {
-    NONE = 0x00,
-    CS_EMERGENCY = 0x01,
-    CS_NORMAL = 0x02,
-    CS_ALL = 0x04,
-    PS_ALL = 0x10,
-}
diff --git a/radio/aidl/android/hardware/radio/RouteSelectionDescriptor.aidl b/radio/aidl/android/hardware/radio/RouteSelectionDescriptor.aidl
index 14591a0..a1b482b 100644
--- a/radio/aidl/android/hardware/radio/RouteSelectionDescriptor.aidl
+++ b/radio/aidl/android/hardware/radio/RouteSelectionDescriptor.aidl
@@ -16,8 +16,7 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.OptionalPdpProtocolType;
-import android.hardware.radio.OptionalSscMode;
+import android.hardware.radio.PdpProtocolType;
 import android.hardware.radio.SliceInfo;
 
 /**
@@ -25,15 +24,24 @@
  */
 @VintfStability
 parcelable RouteSelectionDescriptor {
+    const byte SSC_MODE_UNKNOWN = -1;
+    const byte SSC_MODE_1 = 1;
+    const byte SSC_MODE_2 = 2;
+    const byte SSC_MODE_3 = 3;
+
     /**
      * Precedence value in the range of 0 to 255. Higher value has lower precedence.
      */
     byte precedence;
     /**
-     * Valid values are IP, IPV6 and IPV4V6.
+     * Valid values are IP, IPV6, IPV4V6, and UNKNOWN.
      */
-    OptionalPdpProtocolType sessionType;
-    OptionalSscMode sscMode;
+    PdpProtocolType sessionType;
+    /**
+     * Session and service continuity mode as defined in 3GPP TS 23.501.
+     * Valid values are SSC_MODE_
+     */
+    byte sscMode;
     /**
      * There can be 0 or more SliceInfo specified in a route descriptor.
      */
diff --git a/radio/aidl/android/hardware/radio/ScanIntervalRange.aidl b/radio/aidl/android/hardware/radio/ScanIntervalRange.aidl
deleted file mode 100644
index 7ea4d12..0000000
--- a/radio/aidl/android/hardware/radio/ScanIntervalRange.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Values are in seconds
- */
-@VintfStability
-@Backing(type="int")
-enum ScanIntervalRange {
-    MIN = 5,
-    MAX = 300,
-}
diff --git a/radio/aidl/android/hardware/radio/ScanStatus.aidl b/radio/aidl/android/hardware/radio/ScanStatus.aidl
deleted file mode 100644
index c9c436e..0000000
--- a/radio/aidl/android/hardware/radio/ScanStatus.aidl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum ScanStatus {
-    /**
-     * The result contains a part of the scan results
-     */
-    PARTIAL = 1,
-    /**
-     * The result contains the last part of the scan results
-     */
-    COMPLETE = 2,
-}
diff --git a/radio/aidl/android/hardware/radio/ScanType.aidl b/radio/aidl/android/hardware/radio/ScanType.aidl
deleted file mode 100644
index 66ed451..0000000
--- a/radio/aidl/android/hardware/radio/ScanType.aidl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum ScanType {
-    /**
-     * Performs the scan only once
-     */
-    ONE_SHOT,
-    /**
-     * Performs the scan periodically until cancelled
-     */
-    PERIODIC,
-}
diff --git a/radio/aidl/android/hardware/radio/SelectUiccSub.aidl b/radio/aidl/android/hardware/radio/SelectUiccSub.aidl
index 4db5e66..f762e9f 100644
--- a/radio/aidl/android/hardware/radio/SelectUiccSub.aidl
+++ b/radio/aidl/android/hardware/radio/SelectUiccSub.aidl
@@ -16,16 +16,26 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.SubscriptionType;
-import android.hardware.radio.UiccSubActStatus;
-
 @VintfStability
 parcelable SelectUiccSub {
+    const int SUBSCRIPTION_TYPE_1 = 0;
+    const int SUBSCRIPTION_TYPE_2 = 1;
+    const int SUBSCRIPTION_TYPE_3 = 2;
+
+    const int ACT_STATUS_DEACTIVATE = 0;
+    const int ACT_STATUS_ACTIVATE = 1;
+
     int slot;
     /**
      * Array subscriptor from applications[RadioConst:CARD_MAX_APPS] in getIccCardStatus()
      */
     int appIndex;
-    SubscriptionType subType;
-    UiccSubActStatus actStatus;
+    /**
+     * Values are SUBSCRIPTION_TYPE_
+     */
+    int subType;
+    /**
+     * Values are ACT_STATUS_
+     */
+    int actStatus;
 }
diff --git a/radio/aidl/android/hardware/radio/SetupDataCallResult.aidl b/radio/aidl/android/hardware/radio/SetupDataCallResult.aidl
index 5fc017c..0fae8b0 100644
--- a/radio/aidl/android/hardware/radio/SetupDataCallResult.aidl
+++ b/radio/aidl/android/hardware/radio/SetupDataCallResult.aidl
@@ -17,18 +17,49 @@
 package android.hardware.radio;
 
 import android.hardware.radio.DataCallFailCause;
-import android.hardware.radio.DataConnActiveStatus;
-import android.hardware.radio.HandoverFailureMode;
 import android.hardware.radio.LinkAddress;
-import android.hardware.radio.OptionalSliceInfo;
 import android.hardware.radio.PdpProtocolType;
 import android.hardware.radio.Qos;
 import android.hardware.radio.QosSession;
+import android.hardware.radio.SliceInfo;
 import android.hardware.radio.TrafficDescriptor;
 
 @VintfStability
 parcelable SetupDataCallResult {
     /**
+     * Indicates the data connection is inactive.
+     */
+    const int DATA_CONNECTION_STATUS_INACTIVE = 0;
+    /**
+     * Indicates the data connection is active with physical link dormant.
+     */
+    const int DATA_CONNECTION_STATUS_DORMANT = 1;
+    /**
+     * Indicates the data connection is active with physical link up.
+     */
+    const int DATA_CONNECTION_STATUS_ACTIVE = 2;
+
+    /**
+     * On data handover failure, fallback to the source data transport when the fail cause is due
+     * to a hand off preference change.
+     */
+    const byte HANDOVER_FAILURE_MODE_LEGACY = 0;
+    /**
+     * On data handover failure, fallback to the source data transport.
+     */
+    const byte HANDOVER_FAILURE_MODE_DO_FALLBACK = 1;
+    /**
+     * On data handover failure, retry the handover instead of falling back to the source data
+     * transport.
+     */
+    const byte HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 2;
+    /**
+     * On data handover failure, setup a new data connection by sending a normal request to the
+     * underlying data service.
+     */
+    const byte HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 3;
+
+    /**
      * Data call fail cause. DataCallFailCause.NONE if no error.
      */
     DataCallFailCause cause;
@@ -47,8 +78,9 @@
     int cid;
     /**
      * Data connection active status.
+     * Values are DATA_CONNECTION_STATUS_
      */
-    DataConnActiveStatus active;
+    int active;
     /**
      * PDP protocol type. If cause is DataCallFailCause.ONLY_SINGLE_BEARER_ALLOWED, this is the
      * protocol type supported, such as "IP" or "IPV6".
@@ -98,8 +130,9 @@
     QosSession[] qosSessions;
     /**
      * Specifies the fallback mode on an IWLAN handover failure.
+     * Values are HANDOVER_FAILURE_MODE_
      */
-    HandoverFailureMode handoverFailureMode;
+    byte handoverFailureMode;
     /**
      * The allocated pdu session id for this data call. A value of 0 means no pdu session id was
      * attached to this call. Reference: 3GPP TS 24.007 section 11.2.3.1b.
@@ -108,7 +141,7 @@
     /**
      * Slice used for this data call. It is valid only when this data call is on AccessNetwork:NGRAN
      */
-    OptionalSliceInfo sliceInfo;
+    @nullable SliceInfo sliceInfo;
     /**
      * TrafficDescriptors for which this data call must be used. It only includes the TDs for which
      * a data call has been requested so far; it is not an exhaustive list.
diff --git a/radio/aidl/android/hardware/radio/SignalMeasurementType.aidl b/radio/aidl/android/hardware/radio/SignalMeasurementType.aidl
deleted file mode 100644
index d92ae91..0000000
--- a/radio/aidl/android/hardware/radio/SignalMeasurementType.aidl
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Defining signal strength type.
- */
-@VintfStability
-@Backing(type="int")
-enum SignalMeasurementType {
-    /**
-     * Received Signal Strength Indication.
-     * Range: -113 dBm and -51 dBm
-     * Used RAN: GERAN, CDMA2000
-     * Reference: 3GPP TS 27.007 section 8.5.
-     */
-    RSSI = 1,
-    /**
-     * Received Signal Code Power.
-     * Range: -120 dBm to -25 dBm;
-     * Used RAN: UTRAN
-     * Reference: 3GPP TS 25.123, section 9.1.1.1
-     */
-    RSCP = 2,
-    /**
-     * Reference Signal Received Power.
-     * Range: -140 dBm to -44 dBm;
-     * Used RAN: EUTRAN
-     * Reference: 3GPP TS 36.133 9.1.4
-     */
-    RSRP = 3,
-    /**
-     * Reference Signal Received Quality
-     * Range: -34 dB to 3 dB;
-     * Used RAN: EUTRAN
-     * Reference: 3GPP TS 36.133 v12.6.0 section 9.1.7
-     */
-    RSRQ = 4,
-    /**
-     * Reference Signal Signal to Noise Ratio
-     * Range: -20 dB to 30 dB;
-     * Used RAN: EUTRAN
-     * Note: This field is optional; how to support it can be decided by the corresponding vendor.
-     * Though the response code is not enforced, vendor's implementation must ensure this interface
-     * does not crash.
-     */
-    RSSNR = 5,
-    /**
-     * 5G SS reference signal received power.
-     * Range: -140 dBm to -44 dBm.
-     * Used RAN: NGRAN
-     * Reference: 3GPP TS 38.215.
-     */
-    SSRSRP = 6,
-    /**
-     * 5G SS reference signal received quality.
-     * Range: -43 dB to 20 dB.
-     * Used RAN: NGRAN
-     * Reference: 3GPP TS 38.215, 3GPP TS 38.133 section 10
-     */
-    SSRSRQ = 7,
-    /**
-     * 5G SS signal-to-noise and interference ratio.
-     * Range: -23 dB to 40 dB
-     * Used RAN: NGRAN
-     * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
-     */
-    SSSINR = 8,
-}
diff --git a/radio/aidl/android/hardware/radio/SignalThresholdInfo.aidl b/radio/aidl/android/hardware/radio/SignalThresholdInfo.aidl
index 9274b42..0d818b4 100644
--- a/radio/aidl/android/hardware/radio/SignalThresholdInfo.aidl
+++ b/radio/aidl/android/hardware/radio/SignalThresholdInfo.aidl
@@ -16,17 +16,75 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.SignalMeasurementType;
-
 /**
  * Contains the threshold values of each signal measurement type.
  */
 @VintfStability
 parcelable SignalThresholdInfo {
     /**
-     * Signal Measurement Type
+     * Received Signal Strength Indication.
+     * Range: -113 dBm and -51 dBm
+     * Used RAN: GERAN, CDMA2000
+     * Reference: 3GPP TS 27.007 section 8.5.
      */
-    SignalMeasurementType signalMeasurement;
+    const int SIGNAL_MEASUREMENT_TYPE_RSSI = 1;
+    /**
+     * Received Signal Code Power.
+     * Range: -120 dBm to -25 dBm;
+     * Used RAN: UTRAN
+     * Reference: 3GPP TS 25.123, section 9.1.1.1
+     */
+    const int SIGNAL_MEASUREMENT_TYPE_RSCP = 2;
+    /**
+     * Reference Signal Received Power.
+     * Range: -140 dBm to -44 dBm;
+     * Used RAN: EUTRAN
+     * Reference: 3GPP TS 36.133 9.1.4
+     */
+    const int SIGNAL_MEASUREMENT_TYPE_RSRP = 3;
+    /**
+     * Reference Signal Received Quality
+     * Range: -34 dB to 3 dB;
+     * Used RAN: EUTRAN
+     * Reference: 3GPP TS 36.133 v12.6.0 section 9.1.7
+     */
+    const int SIGNAL_MEASUREMENT_TYPE_RSRQ = 4;
+    /**
+     * Reference Signal Signal to Noise Ratio
+     * Range: -20 dB to 30 dB;
+     * Used RAN: EUTRAN
+     * Note: This field is optional; how to support it can be decided by the corresponding vendor.
+     * Though the response code is not enforced, vendor's implementation must ensure this interface
+     * does not crash.
+     */
+    const int SIGNAL_MEASUREMENT_TYPE_RSSNR = 5;
+    /**
+     * 5G SS reference signal received power.
+     * Range: -140 dBm to -44 dBm.
+     * Used RAN: NGRAN
+     * Reference: 3GPP TS 38.215.
+     */
+    const int SIGNAL_MEASUREMENT_TYPE_SSRSRP = 6;
+    /**
+     * 5G SS reference signal received quality.
+     * Range: -43 dB to 20 dB.
+     * Used RAN: NGRAN
+     * Reference: 3GPP TS 38.215, 3GPP TS 38.133 section 10
+     */
+    const int SIGNAL_MEASUREMENT_TYPE_SSRSRQ = 7;
+    /**
+     * 5G SS signal-to-noise and interference ratio.
+     * Range: -23 dB to 40 dB
+     * Used RAN: NGRAN
+     * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+     */
+    const int SIGNAL_MEASUREMENT_TYPE_SSSINR = 8;
+
+    /**
+     * Signal Measurement Type
+     * Values are SIGNAL_MEASUREMENT_TYPE_
+     */
+    int signalMeasurement;
     /**
      * A hysteresis time in milliseconds to prevent flapping. A value of 0 disables hysteresis.
      */
diff --git a/radio/aidl/android/hardware/radio/SimRefreshResult.aidl b/radio/aidl/android/hardware/radio/SimRefreshResult.aidl
index f480888..9e38fff 100644
--- a/radio/aidl/android/hardware/radio/SimRefreshResult.aidl
+++ b/radio/aidl/android/hardware/radio/SimRefreshResult.aidl
@@ -16,11 +16,25 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.SimRefreshType;
-
 @VintfStability
 parcelable SimRefreshResult {
-    SimRefreshType type;
+    /**
+     * A file on SIM has been updated.
+     */
+    const int TYPE_SIM_FILE_UPDATE = 0;
+    /**
+     * SIM initialized. All files should be re-read.
+     */
+    const int TYPE_SIM_INIT = 1;
+    /**
+     * SIM reset. SIM power required, SIM may be locked and all files must be re-read.
+     */
+    const int TYPE_SIM_RESET = 2;
+
+    /**
+     * Values are TYPE_SIM_
+     */
+    int type;
     /**
      * EFID of the updated file if the result is SIM_FILE_UPDATE or 0 for any other result.
      */
diff --git a/radio/aidl/android/hardware/radio/SimRefreshType.aidl b/radio/aidl/android/hardware/radio/SimRefreshType.aidl
deleted file mode 100644
index 996cdce..0000000
--- a/radio/aidl/android/hardware/radio/SimRefreshType.aidl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum SimRefreshType {
-    /**
-     * A file on SIM has been updated.
-     */
-    SIM_FILE_UPDATE,
-    /**
-     * SIM initialized. All files should be re-read.
-     */
-    SIM_INIT,
-    /**
-     * SIM reset. SIM power required, SIM may be locked and all files must be re-read.
-     */
-    SIM_RESET,
-}
diff --git a/radio/aidl/android/hardware/radio/SliceInfo.aidl b/radio/aidl/android/hardware/radio/SliceInfo.aidl
index 91b0067..e5b4354 100644
--- a/radio/aidl/android/hardware/radio/SliceInfo.aidl
+++ b/radio/aidl/android/hardware/radio/SliceInfo.aidl
@@ -16,18 +16,55 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.SliceServiceType;
-import android.hardware.radio.SliceStatus;
-
 /**
  * This struct represents a S-NSSAI as defined in 3GPP TS 24.501.
  */
 @VintfStability
 parcelable SliceInfo {
+    /*
+     * Not specified
+     */
+    const byte SERVICE_TYPE_NONE = 0;
+    /*
+     * Slice suitable for the handling of 5G enhanced Mobile Broadband
+     */
+    const byte SERVICE_TYPE_EMBB = 1;
+    /**
+     * Slice suitable for the handling of ultra-reliable low latency communications
+     */
+    const byte SERVICE_TYPE_URLLC = 2;
+    /*
+     * Slice suitable for the handling of massive IoT
+     */
+    const byte SERVICE_TYPE_MIOT = 3;
+
+    const byte STATUS_UNKNOWN = 0;
+    /**
+     * Configured but not allowed or rejected yet
+     */
+    const byte STATUS_CONFIGURED = 1;
+    /**
+     * Allowed to be used
+     */
+    const byte STATUS_ALLOWED = 2;
+    /**
+     * Rejected because not available in PLMN
+     */
+    const byte STATUS_REJECTED_NOT_AVAILABLE_IN_PLMN = 3;
+    /**
+     * Rejected because not available in reg area
+     */
+    const byte STATUS_REJECTED_NOT_AVAILABLE_IN_REG_AREA = 4;
+    /**
+     * Considered valid when configured/allowed slices are not available
+     */
+    const byte STATUS_DEFAULT_CONFIGURED = 5;
+
     /**
      * The type of service provided by the slice. See: 3GPP TS 24.501 Section 9.11.2.8.
+     * Values are SERVICE_TYPE_
      */
-    SliceServiceType sst;
+    byte sliceServiceType;
     /**
      * Slice differentiator is the identifier of a slice that has SliceServiceType as SST. A value
      * of -1 indicates that there is no corresponding SliceInfo of the HPLMN.
@@ -37,8 +74,9 @@
     /**
      * This SST corresponds to a SliceInfo (S-NSSAI) of the HPLMN; the SST is mapped to this value.
      * See: 3GPP TS 24.501 Section 9.11.2.8.
+     * Values are SERVICE_TYPE_
      */
-    SliceServiceType mappedHplmnSst;
+    byte mappedHplmnSst;
     /**
      * Present only if both sliceDifferentiator and mappedHplmnSst are also present. This SD
      * corresponds to a SliceInfo (S-NSSAI) of the HPLMN; sliceDifferentiator is mapped to this
@@ -48,6 +86,7 @@
     int mappedHplmnSD;
     /**
      * Field to indicate the current status of the slice.
+     * Values are STATUS_
      */
-    SliceStatus status;
+    byte status;
 }
diff --git a/radio/aidl/android/hardware/radio/SliceServiceType.aidl b/radio/aidl/android/hardware/radio/SliceServiceType.aidl
deleted file mode 100644
index 624dfb1..0000000
--- a/radio/aidl/android/hardware/radio/SliceServiceType.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Slice/Service Type as defined in 3GPP TS 23.501.
- */
-@VintfStability
-@Backing(type="byte")
-enum SliceServiceType {
-    /*
-     * Not specified
-     */
-    NONE,
-    /*
-     * Slice suitable for the handling of 5G enhanced Mobile Broadband
-     */
-    EMBB,
-    /**
-     * Slice suitable for the handling of ultra-reliable low latency communications
-     */
-    URLLC,
-    /*
-     * Slice suitable for the handling of massive IoT
-     */
-    MIOT,
-}
diff --git a/radio/aidl/android/hardware/radio/SliceStatus.aidl b/radio/aidl/android/hardware/radio/SliceStatus.aidl
deleted file mode 100644
index 076e23b..0000000
--- a/radio/aidl/android/hardware/radio/SliceStatus.aidl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="byte")
-enum SliceStatus {
-    UNKNOWN,
-    /**
-     * Configured but not allowed or rejected yet
-     */
-    CONFIGURED,
-    /**
-     * Allowed to be used
-     */
-    ALLOWED,
-    /**
-     * Rejected because not available in PLMN
-     */
-    REJECTED_NOT_AVAILABLE_IN_PLMN,
-    /**
-     * Rejected because not available in reg area
-     */
-    REJECTED_NOT_AVAILABLE_IN_REG_AREA,
-    /**
-     * Considered valid when configured/allowed slices are not available
-     */
-    DEFAULT_CONFIGURED,
-}
diff --git a/radio/aidl/android/hardware/radio/SmsWriteArgs.aidl b/radio/aidl/android/hardware/radio/SmsWriteArgs.aidl
index f7a3fd4..7258e0a 100644
--- a/radio/aidl/android/hardware/radio/SmsWriteArgs.aidl
+++ b/radio/aidl/android/hardware/radio/SmsWriteArgs.aidl
@@ -16,14 +16,18 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.SmsWriteArgsStatus;
-
 @VintfStability
 parcelable SmsWriteArgs {
+    const int STATUS_REC_UNREAD = 0;
+    const int STATUS_REC_READ = 1;
+    const int STATUS_STO_UNSENT = 2;
+    const int STATUS_STO_SENT = 3;
+
     /**
      * Status of message. See TS 27.005 3.1.
+     * Values are STATUS_
      */
-    SmsWriteArgsStatus status;
+    int status;
     /**
      * PDU of message to write, as an ASCII hex string less the SMSC address, the TP-layer length
      * is strlen(pdu)/2.
diff --git a/radio/aidl/android/hardware/radio/SmsWriteArgsStatus.aidl b/radio/aidl/android/hardware/radio/SmsWriteArgsStatus.aidl
deleted file mode 100644
index 095c71e..0000000
--- a/radio/aidl/android/hardware/radio/SmsWriteArgsStatus.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum SmsWriteArgsStatus {
-    REC_UNREAD,
-    REC_READ,
-    STO_UNSENT,
-    STO_SENT,
-}
diff --git a/radio/aidl/android/hardware/radio/SsRequestType.aidl b/radio/aidl/android/hardware/radio/SsRequestType.aidl
deleted file mode 100644
index f3decbe..0000000
--- a/radio/aidl/android/hardware/radio/SsRequestType.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum SsRequestType {
-    ACTIVATION,
-    DEACTIVATION,
-    INTERROGATION,
-    REGISTRATION,
-    ERASURE,
-}
diff --git a/radio/aidl/android/hardware/radio/SsServiceType.aidl b/radio/aidl/android/hardware/radio/SsServiceType.aidl
deleted file mode 100644
index eb344f4..0000000
--- a/radio/aidl/android/hardware/radio/SsServiceType.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum SsServiceType {
-    CFU,
-    CF_BUSY,
-    CF_NO_REPLY,
-    CF_NOT_REACHABLE,
-    CF_ALL,
-    CF_ALL_CONDITIONAL,
-    CLIP,
-    CLIR,
-    COLP,
-    COLR,
-    WAIT,
-    BAOC,
-    BAOIC,
-    BAOIC_EXC_HOME,
-    BAIC,
-    BAIC_ROAMING,
-    ALL_BARRING,
-    OUTGOING_BARRING,
-    INCOMING_BARRING,
-}
diff --git a/radio/aidl/android/hardware/radio/SsTeleserviceType.aidl b/radio/aidl/android/hardware/radio/SsTeleserviceType.aidl
deleted file mode 100644
index c11bbfa..0000000
--- a/radio/aidl/android/hardware/radio/SsTeleserviceType.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum SsTeleserviceType {
-    ALL_TELE_AND_BEARER_SERVICES,
-    ALL_TELESEVICES,
-    TELEPHONY,
-    ALL_DATA_TELESERVICES,
-    SMS_SERVICES,
-    ALL_TELESERVICES_EXCEPT_SMS,
-}
diff --git a/radio/aidl/android/hardware/radio/SscMode.aidl b/radio/aidl/android/hardware/radio/SscMode.aidl
deleted file mode 100644
index 8722048..0000000
--- a/radio/aidl/android/hardware/radio/SscMode.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Enum representing session and service continuity mode as defined in 3GPP TS 23.501.
- */
-@VintfStability
-@Backing(type="byte")
-enum SscMode {
-    MODE_1 = 1,
-    MODE_2 = 2,
-    MODE_3 = 3,
-}
diff --git a/radio/aidl/android/hardware/radio/StkCcUnsolSsResult.aidl b/radio/aidl/android/hardware/radio/StkCcUnsolSsResult.aidl
index 0895f98..d73f687 100644
--- a/radio/aidl/android/hardware/radio/StkCcUnsolSsResult.aidl
+++ b/radio/aidl/android/hardware/radio/StkCcUnsolSsResult.aidl
@@ -19,17 +19,69 @@
 import android.hardware.radio.CfData;
 import android.hardware.radio.RadioError;
 import android.hardware.radio.SsInfoData;
-import android.hardware.radio.SsRequestType;
-import android.hardware.radio.SsServiceType;
-import android.hardware.radio.SsTeleserviceType;
-import android.hardware.radio.SuppServiceClass;
 
 @VintfStability
 parcelable StkCcUnsolSsResult {
-    SsServiceType serviceType;
-    SsRequestType requestType;
-    SsTeleserviceType teleserviceType;
-    SuppServiceClass serviceClass;
+    const int REQUEST_TYPE_ACTIVATION = 0;
+    const int REQUEST_TYPE_DEACTIVATION = 1;
+    const int REQUEST_TYPE_INTERROGATION = 2;
+    const int REQUEST_TYPE_REGISTRATION = 3;
+    const int REQUEST_TYPE_ERASURE = 4;
+
+    const int SERVICE_TYPE_CFU = 0;
+    const int SERVICE_TYPE_CF_BUSY = 1;
+    const int SERVICE_TYPE_CF_NO_REPLY = 2;
+    const int SERVICE_TYPE_CF_NOT_REACHABLE = 3;
+    const int SERVICE_TYPE_CF_ALL = 4;
+    const int SERVICE_TYPE_CF_ALL_CONDITIONAL = 5;
+    const int SERVICE_TYPE_CLIP = 6;
+    const int SERVICE_TYPE_CLIR = 7;
+    const int SERVICE_TYPE_COLP = 8;
+    const int SERVICE_TYPE_COLR = 9;
+    const int SERVICE_TYPE_WAIT = 10;
+    const int SERVICE_TYPE_BAOC = 11;
+    const int SERVICE_TYPE_BAOIC = 12;
+    const int SERVICE_TYPE_BAOIC_EXC_HOME = 13;
+    const int SERVICE_TYPE_BAIC = 14;
+    const int SERVICE_TYPE_BAIC_ROAMING = 15;
+    const int SERVICE_TYPE_ALL_BARRING = 16;
+    const int SERVICE_TYPE_OUTGOING_BARRING = 17;
+    const int SERVICE_TYPE_INCOMING_BARRING = 18;
+
+    const int TELESERVICE_TYPE_ALL_TELE_AND_BEARER_SERVICES = 0;
+    const int TELESERVICE_TYPE_ALL_TELESEVICES = 1;
+    const int TELESERVICE_TYPE_TELEPHONY = 2;
+    const int TELESERVICE_TYPE_ALL_DATA_TELESERVICES = 3;
+    const int TELESERVICE_TYPE_SMS_SERVICES = 4;
+    const int TELESERVICE_TYPE_ALL_TELESERVICES_EXCEPT_SMS = 5;
+
+    const int SUPP_SERVICE_CLASS_NONE = 0;
+    const int SUPP_SERVICE_CLASS_VOICE = 1 << 0;
+    const int SUPP_SERVICE_CLASS_DATA = 1 << 1;
+    const int SUPP_SERVICE_CLASS_FAX = 1 << 2;
+    const int SUPP_SERVICE_CLASS_SMS = 1 << 3;
+    const int SUPP_SERVICE_CLASS_DATA_SYNC = 1 << 4;
+    const int SUPP_SERVICE_CLASS_DATA_ASYNC = 1 << 5;
+    const int SUPP_SERVICE_CLASS_PACKET = 1 << 6;
+    const int SUPP_SERVICE_CLASS_PAD = 1 << 7;
+    const int SUPP_SERVICE_CLASS_MAX = 1 << 7;
+
+    /**
+     * Values are SERVICE_TYPE_
+     */
+    int serviceType;
+    /**
+     * Values are REQUEST_TYPE_
+     */
+    int requestType;
+    /**
+     * Values are TELESERVICE_TYPE_
+     */
+    int teleserviceType;
+    /**
+     * Values are a bitfield of SUPP_SERVICE_CLASS_
+     */
+    int serviceClass;
     RadioError result;
     /**
      * Valid only for all SsServiceType except SsServiceType:CF_* else empty.
diff --git a/radio/aidl/android/hardware/radio/SubscriptionType.aidl b/radio/aidl/android/hardware/radio/SubscriptionType.aidl
deleted file mode 100644
index 47c54f7..0000000
--- a/radio/aidl/android/hardware/radio/SubscriptionType.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum SubscriptionType {
-    SUBSCRIPTION_1,
-    SUBSCRIPTION_2,
-    SUBSCRIPTION_3,
-}
diff --git a/radio/aidl/android/hardware/radio/SuppServiceClass.aidl b/radio/aidl/android/hardware/radio/SuppServiceClass.aidl
deleted file mode 100644
index 79e73ce..0000000
--- a/radio/aidl/android/hardware/radio/SuppServiceClass.aidl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum SuppServiceClass {
-    NONE = 0,
-    VOICE = 1 << 0,
-    DATA = 1 << 1,
-    FAX = 1 << 2,
-    SMS = 1 << 3,
-    DATA_SYNC = 1 << 4,
-    DATA_ASYNC = 1 << 5,
-    PACKET = 1 << 6,
-    PAD = 1 << 7,
-    MAX = 1 << 7,
-}
diff --git a/radio/aidl/android/hardware/radio/TimeStampType.aidl b/radio/aidl/android/hardware/radio/TimeStampType.aidl
deleted file mode 100644
index f76a032..0000000
--- a/radio/aidl/android/hardware/radio/TimeStampType.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum TimeStampType {
-    UNKNOWN,
-    ANTENNA,
-    MODEM,
-    OEM_RIL,
-    JAVA_RIL,
-}
diff --git a/radio/aidl/android/hardware/radio/TrafficDescriptor.aidl b/radio/aidl/android/hardware/radio/TrafficDescriptor.aidl
index 4c41e8c..2580a4c 100644
--- a/radio/aidl/android/hardware/radio/TrafficDescriptor.aidl
+++ b/radio/aidl/android/hardware/radio/TrafficDescriptor.aidl
@@ -16,8 +16,7 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.OptionalDnn;
-import android.hardware.radio.OptionalOsAppId;
+import android.hardware.radio.OsAppId;
 
 /**
  * This struct represents a traffic descriptor. A valid struct must have at least one of the
@@ -29,9 +28,9 @@
     /**
      * DNN stands for Data Network Name and represents an APN as defined in 3GPP TS 23.003.
      */
-    OptionalDnn dnn;
+    @nullable String dnn;
     /**
      * Indicates the OsId + OsAppId (used as category in Android).
      */
-    OptionalOsAppId osAppId;
+    @nullable OsAppId osAppId;
 }
diff --git a/radio/aidl/android/hardware/radio/Translate.java b/radio/aidl/android/hardware/radio/Translate.java
deleted file mode 100644
index a5d32b4..0000000
--- a/radio/aidl/android/hardware/radio/Translate.java
+++ /dev/null
@@ -1,2520 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import java.util.List;
-
-public class Translate {
-    static public android.hardware.radio.IccIo h2aTranslate(android.hardware.radio.V1_0.IccIo in) {
-        android.hardware.radio.IccIo out = new android.hardware.radio.IccIo();
-        out.command = in.command;
-        out.fileId = in.fileId;
-        out.path = in.path;
-        out.p1 = in.p1;
-        out.p2 = in.p2;
-        out.p3 = in.p3;
-        out.data = in.data;
-        out.pin2 = in.pin2;
-        out.aid = in.aid;
-        return out;
-    }
-
-    static public android.hardware.radio.NeighboringCell h2aTranslate(
-            android.hardware.radio.V1_0.NeighboringCell in) {
-        android.hardware.radio.NeighboringCell out = new android.hardware.radio.NeighboringCell();
-        out.cid = in.cid;
-        out.rssi = in.rssi;
-        return out;
-    }
-
-    static public android.hardware.radio.UusInfo h2aTranslate(
-            android.hardware.radio.V1_0.UusInfo in) {
-        android.hardware.radio.UusInfo out = new android.hardware.radio.UusInfo();
-        out.uusType = in.uusType;
-        out.uusDcs = in.uusDcs;
-        out.uusData = in.uusData;
-        return out;
-    }
-
-    static public android.hardware.radio.Dial h2aTranslate(android.hardware.radio.V1_0.Dial in) {
-        android.hardware.radio.Dial out = new android.hardware.radio.Dial();
-        out.address = in.address;
-        out.clir = in.clir;
-        if (in.uusInfo != null) {
-            out.uusInfo = new android.hardware.radio.UusInfo[in.uusInfo.size()];
-            for (int i = 0; i < in.uusInfo.size(); i++) {
-                out.uusInfo[i] = h2aTranslate(in.uusInfo.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.LastCallFailCauseInfo h2aTranslate(
-            android.hardware.radio.V1_0.LastCallFailCauseInfo in) {
-        android.hardware.radio.LastCallFailCauseInfo out =
-                new android.hardware.radio.LastCallFailCauseInfo();
-        out.causeCode = in.causeCode;
-        out.vendorCause = in.vendorCause;
-        return out;
-    }
-
-    static public android.hardware.radio.GsmSignalStrength h2aTranslate(
-            android.hardware.radio.V1_0.GsmSignalStrength in) {
-        android.hardware.radio.GsmSignalStrength out =
-                new android.hardware.radio.GsmSignalStrength();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.signalStrength > 2147483647 || in.signalStrength < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.signalStrength");
-        }
-        out.signalStrength = in.signalStrength;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.bitErrorRate > 2147483647 || in.bitErrorRate < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.bitErrorRate");
-        }
-        out.bitErrorRate = in.bitErrorRate;
-        out.timingAdvance = in.timingAdvance;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaSignalStrength h2aTranslate(
-            android.hardware.radio.V1_0.CdmaSignalStrength in) {
-        android.hardware.radio.CdmaSignalStrength out =
-                new android.hardware.radio.CdmaSignalStrength();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.dbm > 2147483647 || in.dbm < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.dbm");
-        }
-        out.dbm = in.dbm;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.ecio > 2147483647 || in.ecio < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.ecio");
-        }
-        out.ecio = in.ecio;
-        return out;
-    }
-
-    static public android.hardware.radio.EvdoSignalStrength h2aTranslate(
-            android.hardware.radio.V1_0.EvdoSignalStrength in) {
-        android.hardware.radio.EvdoSignalStrength out =
-                new android.hardware.radio.EvdoSignalStrength();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.dbm > 2147483647 || in.dbm < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.dbm");
-        }
-        out.dbm = in.dbm;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.ecio > 2147483647 || in.ecio < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.ecio");
-        }
-        out.ecio = in.ecio;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.signalNoiseRatio > 2147483647 || in.signalNoiseRatio < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.signalNoiseRatio");
-        }
-        out.signalNoiseRatio = in.signalNoiseRatio;
-        return out;
-    }
-
-    static public android.hardware.radio.SendSmsResult h2aTranslate(
-            android.hardware.radio.V1_0.SendSmsResult in) {
-        android.hardware.radio.SendSmsResult out = new android.hardware.radio.SendSmsResult();
-        out.messageRef = in.messageRef;
-        out.ackPDU = in.ackPDU;
-        out.errorCode = in.errorCode;
-        return out;
-    }
-
-    static public android.hardware.radio.IccIoResult h2aTranslate(
-            android.hardware.radio.V1_0.IccIoResult in) {
-        android.hardware.radio.IccIoResult out = new android.hardware.radio.IccIoResult();
-        out.sw1 = in.sw1;
-        out.sw2 = in.sw2;
-        out.simResponse = in.simResponse;
-        return out;
-    }
-
-    static public android.hardware.radio.CallForwardInfo h2aTranslate(
-            android.hardware.radio.V1_0.CallForwardInfo in) {
-        android.hardware.radio.CallForwardInfo out = new android.hardware.radio.CallForwardInfo();
-        out.status = in.status;
-        out.reason = in.reason;
-        out.serviceClass = in.serviceClass;
-        out.toa = in.toa;
-        out.number = in.number;
-        out.timeSeconds = in.timeSeconds;
-        return out;
-    }
-
-    static public android.hardware.radio.OperatorInfo h2aTranslate(
-            android.hardware.radio.V1_0.OperatorInfo in) {
-        android.hardware.radio.OperatorInfo out = new android.hardware.radio.OperatorInfo();
-        out.alphaLong = in.alphaLong;
-        out.alphaShort = in.alphaShort;
-        out.operatorNumeric = in.operatorNumeric;
-        out.status = in.status;
-        return out;
-    }
-
-    static public android.hardware.radio.SmsWriteArgs h2aTranslate(
-            android.hardware.radio.V1_0.SmsWriteArgs in) {
-        android.hardware.radio.SmsWriteArgs out = new android.hardware.radio.SmsWriteArgs();
-        out.status = in.status;
-        out.pdu = in.pdu;
-        out.smsc = in.smsc;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaSmsAddress h2aTranslate(
-            android.hardware.radio.V1_0.CdmaSmsAddress in) {
-        android.hardware.radio.CdmaSmsAddress out = new android.hardware.radio.CdmaSmsAddress();
-        out.digitMode = in.digitMode;
-        out.numberMode = in.numberMode;
-        out.numberType = in.numberType;
-        out.numberPlan = in.numberPlan;
-        if (in.digits != null) {
-            out.digits = new byte[in.digits.size()];
-            for (int i = 0; i < in.digits.size(); i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.digits.get(i) > 127 || in.digits.get(i) < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.digits.get(i)");
-                }
-                out.digits[i] = in.digits.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaSmsSubaddress h2aTranslate(
-            android.hardware.radio.V1_0.CdmaSmsSubaddress in) {
-        android.hardware.radio.CdmaSmsSubaddress out =
-                new android.hardware.radio.CdmaSmsSubaddress();
-        out.subaddressType = in.subaddressType;
-        out.odd = in.odd;
-        if (in.digits != null) {
-            out.digits = new byte[in.digits.size()];
-            for (int i = 0; i < in.digits.size(); i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.digits.get(i) > 127 || in.digits.get(i) < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.digits.get(i)");
-                }
-                out.digits[i] = in.digits.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaSmsMessage h2aTranslate(
-            android.hardware.radio.V1_0.CdmaSmsMessage in) {
-        android.hardware.radio.CdmaSmsMessage out = new android.hardware.radio.CdmaSmsMessage();
-        out.teleserviceId = in.teleserviceId;
-        out.isServicePresent = in.isServicePresent;
-        out.serviceCategory = in.serviceCategory;
-        out.address = h2aTranslate(in.address);
-        out.subAddress = h2aTranslate(in.subAddress);
-        if (in.bearerData != null) {
-            out.bearerData = new byte[in.bearerData.size()];
-            for (int i = 0; i < in.bearerData.size(); i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.bearerData.get(i) > 127 || in.bearerData.get(i) < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.bearerData.get(i)");
-                }
-                out.bearerData[i] = in.bearerData.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaSmsAck h2aTranslate(
-            android.hardware.radio.V1_0.CdmaSmsAck in) {
-        android.hardware.radio.CdmaSmsAck out = new android.hardware.radio.CdmaSmsAck();
-        out.errorClass = in.errorClass;
-        out.smsCauseCode = in.smsCauseCode;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaBroadcastSmsConfigInfo h2aTranslate(
-            android.hardware.radio.V1_0.CdmaBroadcastSmsConfigInfo in) {
-        android.hardware.radio.CdmaBroadcastSmsConfigInfo out =
-                new android.hardware.radio.CdmaBroadcastSmsConfigInfo();
-        out.serviceCategory = in.serviceCategory;
-        out.language = in.language;
-        out.selected = in.selected;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaSmsWriteArgs h2aTranslate(
-            android.hardware.radio.V1_0.CdmaSmsWriteArgs in) {
-        android.hardware.radio.CdmaSmsWriteArgs out = new android.hardware.radio.CdmaSmsWriteArgs();
-        out.status = in.status;
-        out.message = h2aTranslate(in.message);
-        return out;
-    }
-
-    static public android.hardware.radio.GsmBroadcastSmsConfigInfo h2aTranslate(
-            android.hardware.radio.V1_0.GsmBroadcastSmsConfigInfo in) {
-        android.hardware.radio.GsmBroadcastSmsConfigInfo out =
-                new android.hardware.radio.GsmBroadcastSmsConfigInfo();
-        out.fromServiceId = in.fromServiceId;
-        out.toServiceId = in.toServiceId;
-        out.fromCodeScheme = in.fromCodeScheme;
-        out.toCodeScheme = in.toCodeScheme;
-        out.selected = in.selected;
-        return out;
-    }
-
-    static public android.hardware.radio.GsmSmsMessage h2aTranslate(
-            android.hardware.radio.V1_0.GsmSmsMessage in) {
-        android.hardware.radio.GsmSmsMessage out = new android.hardware.radio.GsmSmsMessage();
-        out.smscPdu = in.smscPdu;
-        out.pdu = in.pdu;
-        return out;
-    }
-
-    static public android.hardware.radio.ImsSmsMessage h2aTranslate(
-            android.hardware.radio.V1_0.ImsSmsMessage in) {
-        android.hardware.radio.ImsSmsMessage out = new android.hardware.radio.ImsSmsMessage();
-        out.tech = in.tech;
-        out.retry = in.retry;
-        out.messageRef = in.messageRef;
-        if (in.cdmaMessage != null) {
-            out.cdmaMessage = new android.hardware.radio.CdmaSmsMessage[in.cdmaMessage.size()];
-            for (int i = 0; i < in.cdmaMessage.size(); i++) {
-                out.cdmaMessage[i] = h2aTranslate(in.cdmaMessage.get(i));
-            }
-        }
-        if (in.gsmMessage != null) {
-            out.gsmMessage = new android.hardware.radio.GsmSmsMessage[in.gsmMessage.size()];
-            for (int i = 0; i < in.gsmMessage.size(); i++) {
-                out.gsmMessage[i] = h2aTranslate(in.gsmMessage.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.SimApdu h2aTranslate(
-            android.hardware.radio.V1_0.SimApdu in) {
-        android.hardware.radio.SimApdu out = new android.hardware.radio.SimApdu();
-        out.sessionId = in.sessionId;
-        out.cla = in.cla;
-        out.instruction = in.instruction;
-        out.p1 = in.p1;
-        out.p2 = in.p2;
-        out.p3 = in.p3;
-        out.data = in.data;
-        return out;
-    }
-
-    static public android.hardware.radio.NvWriteItem h2aTranslate(
-            android.hardware.radio.V1_0.NvWriteItem in) {
-        android.hardware.radio.NvWriteItem out = new android.hardware.radio.NvWriteItem();
-        out.itemId = in.itemId;
-        out.value = in.value;
-        return out;
-    }
-
-    static public android.hardware.radio.SelectUiccSub h2aTranslate(
-            android.hardware.radio.V1_0.SelectUiccSub in) {
-        android.hardware.radio.SelectUiccSub out = new android.hardware.radio.SelectUiccSub();
-        out.slot = in.slot;
-        out.appIndex = in.appIndex;
-        out.subType = in.subType;
-        out.actStatus = in.actStatus;
-        return out;
-    }
-
-    static public android.hardware.radio.HardwareConfigModem h2aTranslate(
-            android.hardware.radio.V1_0.HardwareConfigModem in) {
-        android.hardware.radio.HardwareConfigModem out =
-                new android.hardware.radio.HardwareConfigModem();
-        out.rilModel = in.rilModel;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.rat > 2147483647 || in.rat < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.rat");
-        }
-        out.rat = in.rat;
-        out.maxVoice = in.maxVoice;
-        out.maxData = in.maxData;
-        out.maxStandby = in.maxStandby;
-        return out;
-    }
-
-    static public android.hardware.radio.HardwareConfigSim h2aTranslate(
-            android.hardware.radio.V1_0.HardwareConfigSim in) {
-        android.hardware.radio.HardwareConfigSim out =
-                new android.hardware.radio.HardwareConfigSim();
-        out.modemUuid = in.modemUuid;
-        return out;
-    }
-
-    static public android.hardware.radio.HardwareConfig h2aTranslate(
-            android.hardware.radio.V1_0.HardwareConfig in) {
-        android.hardware.radio.HardwareConfig out = new android.hardware.radio.HardwareConfig();
-        out.type = in.type;
-        out.uuid = in.uuid;
-        out.state = in.state;
-        if (in.modem != null) {
-            out.modem = new android.hardware.radio.HardwareConfigModem[in.modem.size()];
-            for (int i = 0; i < in.modem.size(); i++) {
-                out.modem[i] = h2aTranslate(in.modem.get(i));
-            }
-        }
-        if (in.sim != null) {
-            out.sim = new android.hardware.radio.HardwareConfigSim[in.sim.size()];
-            for (int i = 0; i < in.sim.size(); i++) {
-                out.sim[i] = h2aTranslate(in.sim.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.LceStatusInfo h2aTranslate(
-            android.hardware.radio.V1_0.LceStatusInfo in) {
-        android.hardware.radio.LceStatusInfo out = new android.hardware.radio.LceStatusInfo();
-        out.lceStatus = in.lceStatus;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.actualIntervalMs > 127 || in.actualIntervalMs < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.actualIntervalMs");
-        }
-        out.actualIntervalMs = in.actualIntervalMs;
-        return out;
-    }
-
-    static public android.hardware.radio.LceDataInfo h2aTranslate(
-            android.hardware.radio.V1_0.LceDataInfo in) {
-        android.hardware.radio.LceDataInfo out = new android.hardware.radio.LceDataInfo();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.lastHopCapacityKbps > 2147483647 || in.lastHopCapacityKbps < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.lastHopCapacityKbps");
-        }
-        out.lastHopCapacityKbps = in.lastHopCapacityKbps;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.confidenceLevel > 127 || in.confidenceLevel < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.confidenceLevel");
-        }
-        out.confidenceLevel = in.confidenceLevel;
-        out.lceSuspended = in.lceSuspended;
-        return out;
-    }
-
-    static public android.hardware.radio.ActivityStatsInfo h2aTranslate(
-            android.hardware.radio.V1_0.ActivityStatsInfo in) {
-        android.hardware.radio.ActivityStatsInfo out =
-                new android.hardware.radio.ActivityStatsInfo();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.sleepModeTimeMs > 2147483647 || in.sleepModeTimeMs < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.sleepModeTimeMs");
-        }
-        out.sleepModeTimeMs = in.sleepModeTimeMs;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.idleModeTimeMs > 2147483647 || in.idleModeTimeMs < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.idleModeTimeMs");
-        }
-        out.idleModeTimeMs = in.idleModeTimeMs;
-        if (in.txmModetimeMs != null) {
-            out.txmModetimeMs = new int[in.txmModetimeMs.length];
-            for (int i = 0; i < in.txmModetimeMs.length; i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.txmModetimeMs[i] > 2147483647 || in.txmModetimeMs[i] < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.txmModetimeMs[i]");
-                }
-                out.txmModetimeMs[i] = in.txmModetimeMs[i];
-            }
-        }
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.rxModeTimeMs > 2147483647 || in.rxModeTimeMs < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.rxModeTimeMs");
-        }
-        out.rxModeTimeMs = in.rxModeTimeMs;
-        return out;
-    }
-
-    static public android.hardware.radio.Carrier h2aTranslate(
-            android.hardware.radio.V1_0.Carrier in) {
-        android.hardware.radio.Carrier out = new android.hardware.radio.Carrier();
-        out.mcc = in.mcc;
-        out.mnc = in.mnc;
-        out.matchType = in.matchType;
-        out.matchData = in.matchData;
-        return out;
-    }
-
-    static public android.hardware.radio.CarrierRestrictions h2aTranslate(
-            android.hardware.radio.V1_0.CarrierRestrictions in) {
-        android.hardware.radio.CarrierRestrictions out =
-                new android.hardware.radio.CarrierRestrictions();
-        if (in.allowedCarriers != null) {
-            out.allowedCarriers = new android.hardware.radio.Carrier[in.allowedCarriers.size()];
-            for (int i = 0; i < in.allowedCarriers.size(); i++) {
-                out.allowedCarriers[i] = h2aTranslate(in.allowedCarriers.get(i));
-            }
-        }
-        if (in.excludedCarriers != null) {
-            out.excludedCarriers = new android.hardware.radio.Carrier[in.excludedCarriers.size()];
-            for (int i = 0; i < in.excludedCarriers.size(); i++) {
-                out.excludedCarriers[i] = h2aTranslate(in.excludedCarriers.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.SuppSvcNotification h2aTranslate(
-            android.hardware.radio.V1_0.SuppSvcNotification in) {
-        android.hardware.radio.SuppSvcNotification out =
-                new android.hardware.radio.SuppSvcNotification();
-        out.isMT = in.isMT;
-        out.code = in.code;
-        out.index = in.index;
-        out.type = in.type;
-        out.number = in.number;
-        return out;
-    }
-
-    static public android.hardware.radio.SimRefreshResult h2aTranslate(
-            android.hardware.radio.V1_0.SimRefreshResult in) {
-        android.hardware.radio.SimRefreshResult out = new android.hardware.radio.SimRefreshResult();
-        out.type = in.type;
-        out.efId = in.efId;
-        out.aid = in.aid;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaSignalInfoRecord h2aTranslate(
-            android.hardware.radio.V1_0.CdmaSignalInfoRecord in) {
-        android.hardware.radio.CdmaSignalInfoRecord out =
-                new android.hardware.radio.CdmaSignalInfoRecord();
-        out.isPresent = in.isPresent;
-        out.signalType = in.signalType;
-        out.alertPitch = in.alertPitch;
-        out.signal = in.signal;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaCallWaiting h2aTranslate(
-            android.hardware.radio.V1_0.CdmaCallWaiting in) {
-        android.hardware.radio.CdmaCallWaiting out = new android.hardware.radio.CdmaCallWaiting();
-        out.number = in.number;
-        out.numberPresentation = in.numberPresentation;
-        out.name = in.name;
-        out.signalInfoRecord = h2aTranslate(in.signalInfoRecord);
-        out.numberType = in.numberType;
-        out.numberPlan = in.numberPlan;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaDisplayInfoRecord h2aTranslate(
-            android.hardware.radio.V1_0.CdmaDisplayInfoRecord in) {
-        android.hardware.radio.CdmaDisplayInfoRecord out =
-                new android.hardware.radio.CdmaDisplayInfoRecord();
-        out.alphaBuf = in.alphaBuf;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaNumberInfoRecord h2aTranslate(
-            android.hardware.radio.V1_0.CdmaNumberInfoRecord in) {
-        android.hardware.radio.CdmaNumberInfoRecord out =
-                new android.hardware.radio.CdmaNumberInfoRecord();
-        out.number = in.number;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.numberType > 127 || in.numberType < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.numberType");
-        }
-        out.numberType = in.numberType;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.numberPlan > 127 || in.numberPlan < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.numberPlan");
-        }
-        out.numberPlan = in.numberPlan;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.pi > 127 || in.pi < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.pi");
-        }
-        out.pi = in.pi;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.si > 127 || in.si < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.si");
-        }
-        out.si = in.si;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaRedirectingNumberInfoRecord h2aTranslate(
-            android.hardware.radio.V1_0.CdmaRedirectingNumberInfoRecord in) {
-        android.hardware.radio.CdmaRedirectingNumberInfoRecord out =
-                new android.hardware.radio.CdmaRedirectingNumberInfoRecord();
-        out.redirectingNumber = h2aTranslate(in.redirectingNumber);
-        out.redirectingReason = in.redirectingReason;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaLineControlInfoRecord h2aTranslate(
-            android.hardware.radio.V1_0.CdmaLineControlInfoRecord in) {
-        android.hardware.radio.CdmaLineControlInfoRecord out =
-                new android.hardware.radio.CdmaLineControlInfoRecord();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.lineCtrlPolarityIncluded > 127 || in.lineCtrlPolarityIncluded < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.lineCtrlPolarityIncluded");
-        }
-        out.lineCtrlPolarityIncluded = in.lineCtrlPolarityIncluded;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.lineCtrlToggle > 127 || in.lineCtrlToggle < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.lineCtrlToggle");
-        }
-        out.lineCtrlToggle = in.lineCtrlToggle;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.lineCtrlReverse > 127 || in.lineCtrlReverse < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.lineCtrlReverse");
-        }
-        out.lineCtrlReverse = in.lineCtrlReverse;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.lineCtrlPowerDenial > 127 || in.lineCtrlPowerDenial < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.lineCtrlPowerDenial");
-        }
-        out.lineCtrlPowerDenial = in.lineCtrlPowerDenial;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaT53ClirInfoRecord h2aTranslate(
-            android.hardware.radio.V1_0.CdmaT53ClirInfoRecord in) {
-        android.hardware.radio.CdmaT53ClirInfoRecord out =
-                new android.hardware.radio.CdmaT53ClirInfoRecord();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.cause > 127 || in.cause < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.cause");
-        }
-        out.cause = in.cause;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaT53AudioControlInfoRecord h2aTranslate(
-            android.hardware.radio.V1_0.CdmaT53AudioControlInfoRecord in) {
-        android.hardware.radio.CdmaT53AudioControlInfoRecord out =
-                new android.hardware.radio.CdmaT53AudioControlInfoRecord();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.upLink > 127 || in.upLink < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.upLink");
-        }
-        out.upLink = in.upLink;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.downLink > 127 || in.downLink < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.downLink");
-        }
-        out.downLink = in.downLink;
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaInformationRecord h2aTranslate(
-            android.hardware.radio.V1_0.CdmaInformationRecord in) {
-        android.hardware.radio.CdmaInformationRecord out =
-                new android.hardware.radio.CdmaInformationRecord();
-        out.name = in.name;
-        if (in.display != null) {
-            out.display = new android.hardware.radio.CdmaDisplayInfoRecord[in.display.size()];
-            for (int i = 0; i < in.display.size(); i++) {
-                out.display[i] = h2aTranslate(in.display.get(i));
-            }
-        }
-        if (in.number != null) {
-            out.number = new android.hardware.radio.CdmaNumberInfoRecord[in.number.size()];
-            for (int i = 0; i < in.number.size(); i++) {
-                out.number[i] = h2aTranslate(in.number.get(i));
-            }
-        }
-        if (in.signal != null) {
-            out.signal = new android.hardware.radio.CdmaSignalInfoRecord[in.signal.size()];
-            for (int i = 0; i < in.signal.size(); i++) {
-                out.signal[i] = h2aTranslate(in.signal.get(i));
-            }
-        }
-        if (in.redir != null) {
-            out.redir = new android.hardware.radio.CdmaRedirectingNumberInfoRecord[in.redir.size()];
-            for (int i = 0; i < in.redir.size(); i++) {
-                out.redir[i] = h2aTranslate(in.redir.get(i));
-            }
-        }
-        if (in.lineCtrl != null) {
-            out.lineCtrl = new android.hardware.radio.CdmaLineControlInfoRecord[in.lineCtrl.size()];
-            for (int i = 0; i < in.lineCtrl.size(); i++) {
-                out.lineCtrl[i] = h2aTranslate(in.lineCtrl.get(i));
-            }
-        }
-        if (in.clir != null) {
-            out.clir = new android.hardware.radio.CdmaT53ClirInfoRecord[in.clir.size()];
-            for (int i = 0; i < in.clir.size(); i++) {
-                out.clir[i] = h2aTranslate(in.clir.get(i));
-            }
-        }
-        if (in.audioCtrl != null) {
-            out.audioCtrl =
-                    new android.hardware.radio.CdmaT53AudioControlInfoRecord[in.audioCtrl.size()];
-            for (int i = 0; i < in.audioCtrl.size(); i++) {
-                out.audioCtrl[i] = h2aTranslate(in.audioCtrl.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CdmaInformationRecords h2aTranslate(
-            android.hardware.radio.V1_0.CdmaInformationRecords in) {
-        android.hardware.radio.CdmaInformationRecords out =
-                new android.hardware.radio.CdmaInformationRecords();
-        if (in.infoRec != null) {
-            out.infoRec = new android.hardware.radio.CdmaInformationRecord[in.infoRec.size()];
-            for (int i = 0; i < in.infoRec.size(); i++) {
-                out.infoRec[i] = h2aTranslate(in.infoRec.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CfData h2aTranslate(
-            android.hardware.radio.V1_0.CfData in) {
-        android.hardware.radio.CfData out = new android.hardware.radio.CfData();
-        if (in.cfInfo != null) {
-            out.cfInfo = new android.hardware.radio.CallForwardInfo[in.cfInfo.size()];
-            for (int i = 0; i < in.cfInfo.size(); i++) {
-                out.cfInfo[i] = h2aTranslate(in.cfInfo.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.SsInfoData h2aTranslate(
-            android.hardware.radio.V1_0.SsInfoData in) {
-        android.hardware.radio.SsInfoData out = new android.hardware.radio.SsInfoData();
-        if (in.ssInfo != null) {
-            out.ssInfo = new int[in.ssInfo.size()];
-            for (int i = 0; i < in.ssInfo.size(); i++) {
-                out.ssInfo[i] = in.ssInfo.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.StkCcUnsolSsResult h2aTranslate(
-            android.hardware.radio.V1_0.StkCcUnsolSsResult in) {
-        android.hardware.radio.StkCcUnsolSsResult out =
-                new android.hardware.radio.StkCcUnsolSsResult();
-        out.serviceType = in.serviceType;
-        out.requestType = in.requestType;
-        out.teleserviceType = in.teleserviceType;
-        out.serviceClass = in.serviceClass;
-        out.result = in.result;
-        if (in.ssInfo != null) {
-            out.ssInfo = new android.hardware.radio.SsInfoData[in.ssInfo.size()];
-            for (int i = 0; i < in.ssInfo.size(); i++) {
-                out.ssInfo[i] = h2aTranslate(in.ssInfo.get(i));
-            }
-        }
-        if (in.cfData != null) {
-            out.cfData = new android.hardware.radio.CfData[in.cfData.size()];
-            for (int i = 0; i < in.cfData.size(); i++) {
-                out.cfData[i] = h2aTranslate(in.cfData.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.PcoDataInfo h2aTranslate(
-            android.hardware.radio.V1_0.PcoDataInfo in) {
-        android.hardware.radio.PcoDataInfo out = new android.hardware.radio.PcoDataInfo();
-        out.cid = in.cid;
-        out.bearerProto = in.bearerProto;
-        out.pcoId = in.pcoId;
-        if (in.contents != null) {
-            out.contents = new byte[in.contents.size()];
-            for (int i = 0; i < in.contents.size(); i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.contents.get(i) > 127 || in.contents.get(i) < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.contents.get(i)");
-                }
-                out.contents[i] = in.contents.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.KeepaliveRequest h2aTranslate(
-            android.hardware.radio.V1_1.KeepaliveRequest in) {
-        android.hardware.radio.KeepaliveRequest out = new android.hardware.radio.KeepaliveRequest();
-        out.type = in.type;
-        if (in.sourceAddress != null) {
-            out.sourceAddress = new byte[in.sourceAddress.size()];
-            for (int i = 0; i < in.sourceAddress.size(); i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.sourceAddress.get(i) > 127 || in.sourceAddress.get(i) < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.sourceAddress.get(i)");
-                }
-                out.sourceAddress[i] = in.sourceAddress.get(i);
-            }
-        }
-        out.sourcePort = in.sourcePort;
-        if (in.destinationAddress != null) {
-            out.destinationAddress = new byte[in.destinationAddress.size()];
-            for (int i = 0; i < in.destinationAddress.size(); i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.destinationAddress.get(i) > 127 || in.destinationAddress.get(i) < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.destinationAddress.get(i)");
-                }
-                out.destinationAddress[i] = in.destinationAddress.get(i);
-            }
-        }
-        out.destinationPort = in.destinationPort;
-        out.maxKeepaliveIntervalMillis = in.maxKeepaliveIntervalMillis;
-        out.cid = in.cid;
-        return out;
-    }
-
-    static public android.hardware.radio.KeepaliveStatus h2aTranslate(
-            android.hardware.radio.V1_1.KeepaliveStatus in) {
-        android.hardware.radio.KeepaliveStatus out = new android.hardware.radio.KeepaliveStatus();
-        out.sessionHandle = in.sessionHandle;
-        out.code = in.code;
-        return out;
-    }
-
-    static public android.hardware.radio.CellIdentityOperatorNames h2aTranslate(
-            android.hardware.radio.V1_2.CellIdentityOperatorNames in) {
-        android.hardware.radio.CellIdentityOperatorNames out =
-                new android.hardware.radio.CellIdentityOperatorNames();
-        out.alphaLong = in.alphaLong;
-        out.alphaShort = in.alphaShort;
-        return out;
-    }
-
-    static public android.hardware.radio.CellIdentityCdma h2aTranslate(
-            android.hardware.radio.V1_2.CellIdentityCdma in) {
-        android.hardware.radio.CellIdentityCdma out = new android.hardware.radio.CellIdentityCdma();
-        out.networkId = in.base.networkId;
-        out.systemId = in.base.systemId;
-        out.baseStationId = in.base.baseStationId;
-        out.longitude = in.base.longitude;
-        out.latitude = in.base.latitude;
-        out.operatorNames = h2aTranslate(in.operatorNames);
-        return out;
-    }
-
-    static public android.hardware.radio.CellInfoCdma h2aTranslate(
-            android.hardware.radio.V1_2.CellInfoCdma in) {
-        android.hardware.radio.CellInfoCdma out = new android.hardware.radio.CellInfoCdma();
-        out.cellIdentityCdma = h2aTranslate(in.cellIdentityCdma);
-        out.signalStrengthCdma = h2aTranslate(in.signalStrengthCdma);
-        out.signalStrengthEvdo = h2aTranslate(in.signalStrengthEvdo);
-        return out;
-    }
-
-    static public android.hardware.radio.WcdmaSignalStrength h2aTranslate(
-            android.hardware.radio.V1_2.WcdmaSignalStrength in) {
-        android.hardware.radio.WcdmaSignalStrength out =
-                new android.hardware.radio.WcdmaSignalStrength();
-        out.signalStrength = in.base.signalStrength;
-        out.bitErrorRate = in.base.bitErrorRate;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.rscp > 2147483647 || in.rscp < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.rscp");
-        }
-        out.rscp = in.rscp;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.ecno > 2147483647 || in.ecno < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.ecno");
-        }
-        out.ecno = in.ecno;
-        return out;
-    }
-
-    static public android.hardware.radio.TdscdmaSignalStrength h2aTranslate(
-            android.hardware.radio.V1_2.TdscdmaSignalStrength in) {
-        android.hardware.radio.TdscdmaSignalStrength out =
-                new android.hardware.radio.TdscdmaSignalStrength();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.signalStrength > 2147483647 || in.signalStrength < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.signalStrength");
-        }
-        out.signalStrength = in.signalStrength;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.bitErrorRate > 2147483647 || in.bitErrorRate < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.bitErrorRate");
-        }
-        out.bitErrorRate = in.bitErrorRate;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.rscp > 2147483647 || in.rscp < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.rscp");
-        }
-        out.rscp = in.rscp;
-        return out;
-    }
-
-    static public android.hardware.radio.VoiceRegStateResult h2aTranslate(
-            android.hardware.radio.V1_2.VoiceRegStateResult in) {
-        android.hardware.radio.VoiceRegStateResult out =
-                new android.hardware.radio.VoiceRegStateResult();
-        out.regState = in.regState;
-        out.rat = in.rat;
-        out.cssSupported = in.cssSupported;
-        out.roamingIndicator = in.roamingIndicator;
-        out.systemIsInPrl = in.systemIsInPrl;
-        out.defaultRoamingIndicator = in.defaultRoamingIndicator;
-        out.reasonForDenial = in.reasonForDenial;
-        // FIXME Unknown type: android.hardware.radio@1.2::CellIdentity
-        // That type's package needs to be converted separately and the corresponding translate
-        // function should be added here.
-        return out;
-    }
-
-    static public android.hardware.radio.RadioResponseInfoModem h2aTranslate(
-            android.hardware.radio.V1_3.RadioResponseInfoModem in) {
-        android.hardware.radio.RadioResponseInfoModem out =
-                new android.hardware.radio.RadioResponseInfoModem();
-        out.type = in.type;
-        out.serial = in.serial;
-        out.error = in.error;
-        out.isEnabled = in.isEnabled;
-        return out;
-    }
-
-    static public android.hardware.radio.EmergencyNumber h2aTranslate(
-            android.hardware.radio.V1_4.EmergencyNumber in) {
-        android.hardware.radio.EmergencyNumber out = new android.hardware.radio.EmergencyNumber();
-        out.number = in.number;
-        out.mcc = in.mcc;
-        out.mnc = in.mnc;
-        out.categories = in.categories;
-        if (in.urns != null) {
-            out.urns = new String[in.urns.size()];
-            for (int i = 0; i < in.urns.size(); i++) {
-                out.urns[i] = in.urns.get(i);
-            }
-        }
-        out.sources = in.sources;
-        return out;
-    }
-
-    static public android.hardware.radio.RadioFrequencyInfo h2aTranslate(
-            android.hardware.radio.V1_4.RadioFrequencyInfo in) {
-        android.hardware.radio.RadioFrequencyInfo out =
-                new android.hardware.radio.RadioFrequencyInfo();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_4.RadioFrequencyInfo.hidl_discriminator.range:
-                out.setRange(in.range());
-                break;
-            case android.hardware.radio.V1_4.RadioFrequencyInfo.hidl_discriminator.channelNumber:
-                out.setChannelNumber(in.channelNumber());
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.LteVopsInfo h2aTranslate(
-            android.hardware.radio.V1_4.LteVopsInfo in) {
-        android.hardware.radio.LteVopsInfo out = new android.hardware.radio.LteVopsInfo();
-        out.isVopsSupported = in.isVopsSupported;
-        out.isEmcBearerSupported = in.isEmcBearerSupported;
-        return out;
-    }
-
-    static public android.hardware.radio.NrIndicators h2aTranslate(
-            android.hardware.radio.V1_4.NrIndicators in) {
-        android.hardware.radio.NrIndicators out = new android.hardware.radio.NrIndicators();
-        out.isEndcAvailable = in.isEndcAvailable;
-        out.isDcNrRestricted = in.isDcNrRestricted;
-        out.isNrAvailable = in.isNrAvailable;
-        return out;
-    }
-
-    static public android.hardware.radio.DataRegStateResult h2aTranslate(
-            android.hardware.radio.V1_4.DataRegStateResult in) {
-        android.hardware.radio.DataRegStateResult out =
-                new android.hardware.radio.DataRegStateResult();
-        out.regState = in.base.regState;
-        out.rat = in.base.rat;
-        out.reasonDataDenied = in.base.reasonDataDenied;
-        out.maxDataCalls = in.base.maxDataCalls;
-        // FIXME Unknown type: android.hardware.radio@1.2::CellIdentity
-        // That type's package needs to be converted separately and the corresponding translate
-        // function should be added here.
-        out.vopsInfo = h2aTranslate(in.vopsInfo);
-        out.nrIndicators = h2aTranslate(in.nrIndicators);
-        return out;
-    }
-
-    static public android.hardware.radio.DataRegStateResultVopsInfo h2aTranslate(
-            android.hardware.radio.V1_4.DataRegStateResult.VopsInfo in) {
-        android.hardware.radio.DataRegStateResultVopsInfo out =
-                new android.hardware.radio.DataRegStateResultVopsInfo();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_4.DataRegStateResult.VopsInfo.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_4.DataRegStateResult.VopsInfo.hidl_discriminator
-                    .lteVopsInfo:
-                out.setLteVopsInfo(h2aTranslate(in.lteVopsInfo()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CellConfigLte h2aTranslate(
-            android.hardware.radio.V1_4.CellConfigLte in) {
-        android.hardware.radio.CellConfigLte out = new android.hardware.radio.CellConfigLte();
-        out.isEndcAvailable = in.isEndcAvailable;
-        return out;
-    }
-
-    static public android.hardware.radio.CellInfoInfo h2aTranslate(
-            android.hardware.radio.V1_4.CellInfo.Info in) {
-        android.hardware.radio.CellInfoInfo out = new android.hardware.radio.CellInfoInfo();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.gsm:
-                // FIXME Unknown type: android.hardware.radio@1.2::CellInfoGsm
-                // That type's package needs to be converted separately and the corresponding
-                // translate function should be added here.
-                break;
-            case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.cdma:
-                out.setCdma(h2aTranslate(in.cdma()));
-                break;
-            case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.wcdma:
-                // FIXME Unknown type: android.hardware.radio@1.2::CellInfoWcdma
-                // That type's package needs to be converted separately and the corresponding
-                // translate function should be added here.
-                break;
-            case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.tdscdma:
-                // FIXME Unknown type: android.hardware.radio@1.2::CellInfoTdscdma
-                // That type's package needs to be converted separately and the corresponding
-                // translate function should be added here.
-                break;
-            case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.lte:
-                // FIXME Unknown type: android.hardware.radio@1.4::CellInfoLte
-                // That type's package needs to be converted separately and the corresponding
-                // translate function should be added here.
-                break;
-            case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.nr:
-                // FIXME Unknown type: android.hardware.radio@1.4::CellInfoNr
-                // That type's package needs to be converted separately and the corresponding
-                // translate function should be added here.
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.RadioCapability h2aTranslate(
-            android.hardware.radio.V1_4.RadioCapability in) {
-        android.hardware.radio.RadioCapability out = new android.hardware.radio.RadioCapability();
-        out.session = in.session;
-        out.phase = in.phase;
-        out.raf = in.raf;
-        out.logicalModemUuid = in.logicalModemUuid;
-        out.status = in.status;
-        return out;
-    }
-
-    static public android.hardware.radio.CarrierRestrictionsWithPriority h2aTranslate(
-            android.hardware.radio.V1_4.CarrierRestrictionsWithPriority in) {
-        android.hardware.radio.CarrierRestrictionsWithPriority out =
-                new android.hardware.radio.CarrierRestrictionsWithPriority();
-        if (in.allowedCarriers != null) {
-            out.allowedCarriers = new android.hardware.radio.Carrier[in.allowedCarriers.size()];
-            for (int i = 0; i < in.allowedCarriers.size(); i++) {
-                out.allowedCarriers[i] = h2aTranslate(in.allowedCarriers.get(i));
-            }
-        }
-        if (in.excludedCarriers != null) {
-            out.excludedCarriers = new android.hardware.radio.Carrier[in.excludedCarriers.size()];
-            for (int i = 0; i < in.excludedCarriers.size(); i++) {
-                out.excludedCarriers[i] = h2aTranslate(in.excludedCarriers.get(i));
-            }
-        }
-        out.allowedCarriersPrioritized = in.allowedCarriersPrioritized;
-        return out;
-    }
-
-    static public android.hardware.radio.RadioAccessSpecifier h2aTranslate(
-            android.hardware.radio.V1_5.RadioAccessSpecifier in) {
-        android.hardware.radio.RadioAccessSpecifier out =
-                new android.hardware.radio.RadioAccessSpecifier();
-        out.radioAccessNetwork = in.radioAccessNetwork;
-        out.bands = h2aTranslate(in.bands);
-        if (in.channels != null) {
-            out.channels = new int[in.channels.size()];
-            for (int i = 0; i < in.channels.size(); i++) {
-                out.channels[i] = in.channels.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.RadioAccessSpecifierBands h2aTranslate(
-            android.hardware.radio.V1_5.RadioAccessSpecifier.Bands in) {
-        android.hardware.radio.RadioAccessSpecifierBands out =
-                new android.hardware.radio.RadioAccessSpecifierBands();
-        List<Integer> bands;
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_5.RadioAccessSpecifier.Bands.hidl_discriminator
-                    .geranBands:
-                bands = in.geranBands();
-                if (bands != null) {
-                    int[] geranBands = new int[bands.size()];
-                    for (int i = 0; i < bands.size(); i++) {
-                        geranBands[i] = bands.get(i);
-                    }
-                    out.geranBands(geranBands);
-                }
-                break;
-            case android.hardware.radio.V1_5.RadioAccessSpecifier.Bands.hidl_discriminator
-                    .utranBands:
-                bands = in.utranBands();
-                if (bands != null) {
-                    int[] utranBands = new int[bands.size()];
-                    for (int i = 0; i < bands.size(); i++) {
-                        utranBands[i] = bands.get(i);
-                    }
-                    out.utranBands(utranBands);
-                }
-                break;
-            case android.hardware.radio.V1_5.RadioAccessSpecifier.Bands.hidl_discriminator
-                    .eutranBands:
-                bands = in.eutranBands();
-                if (bands != null) {
-                    int[] eutranBands = new int[bands.size()];
-                    for (int i = 0; i < bands.size(); i++) {
-                        eutranBands[i] = bands.get(i);
-                    }
-                    out.eutranBands(eutranBands);
-                }
-                break;
-            case android.hardware.radio.V1_5.RadioAccessSpecifier.Bands.hidl_discriminator
-                    .ngranBands:
-                bands = in.ngranBands();
-                if (bands != null) {
-                    int[] ngranBands = new int[bands.size()];
-                    for (int i = 0; i < bands.size(); i++) {
-                        ngranBands[i] = bands.get(i);
-                    }
-                    out.ngranBands(ngranBands);
-                }
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.SignalThresholdInfo h2aTranslate(
-            android.hardware.radio.V1_5.SignalThresholdInfo in) {
-        android.hardware.radio.SignalThresholdInfo out =
-                new android.hardware.radio.SignalThresholdInfo();
-        out.signalMeasurement = in.signalMeasurement;
-        out.hysteresisMs = in.hysteresisMs;
-        out.hysteresisDb = in.hysteresisDb;
-        if (in.thresholds != null) {
-            out.thresholds = new int[in.thresholds.size()];
-            for (int i = 0; i < in.thresholds.size(); i++) {
-                out.thresholds[i] = in.thresholds.get(i);
-            }
-        }
-        out.isEnabled = in.isEnabled;
-        return out;
-    }
-
-    static public android.hardware.radio.NetworkScanRequest h2aTranslate(
-            android.hardware.radio.V1_5.NetworkScanRequest in) {
-        android.hardware.radio.NetworkScanRequest out =
-                new android.hardware.radio.NetworkScanRequest();
-        out.type = in.type;
-        out.interval = in.interval;
-        if (in.specifiers != null) {
-            out.specifiers = new android.hardware.radio.RadioAccessSpecifier[in.specifiers.size()];
-            for (int i = 0; i < in.specifiers.size(); i++) {
-                out.specifiers[i] = h2aTranslate(in.specifiers.get(i));
-            }
-        }
-        out.maxSearchTime = in.maxSearchTime;
-        out.incrementalResults = in.incrementalResults;
-        out.incrementalResultsPeriodicity = in.incrementalResultsPeriodicity;
-        if (in.mccMncs != null) {
-            out.mccMncs = new String[in.mccMncs.size()];
-            for (int i = 0; i < in.mccMncs.size(); i++) {
-                out.mccMncs[i] = in.mccMncs.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.DataProfileInfo h2aTranslate(
-            android.hardware.radio.V1_5.DataProfileInfo in) {
-        android.hardware.radio.DataProfileInfo out = new android.hardware.radio.DataProfileInfo();
-        out.profileId = in.profileId;
-        out.apn = in.apn;
-        out.protocol = in.protocol;
-        out.roamingProtocol = in.roamingProtocol;
-        out.authType = in.authType;
-        out.user = in.user;
-        out.password = in.password;
-        out.type = in.type;
-        out.maxConnsTime = in.maxConnsTime;
-        out.maxConns = in.maxConns;
-        out.waitTime = in.waitTime;
-        out.enabled = in.enabled;
-        out.supportedApnTypesBitmap = in.supportedApnTypesBitmap;
-        out.bearerBitmap = in.bearerBitmap;
-        out.mtuV4 = in.mtuV4;
-        out.mtuV6 = in.mtuV6;
-        out.preferred = in.preferred;
-        out.persistent = in.persistent;
-        return out;
-    }
-
-    static public android.hardware.radio.LinkAddress h2aTranslate(
-            android.hardware.radio.V1_5.LinkAddress in) {
-        android.hardware.radio.LinkAddress out = new android.hardware.radio.LinkAddress();
-        out.address = in.address;
-        out.properties = in.properties;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.deprecationTime > 9223372036854775807L || in.deprecationTime < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.deprecationTime");
-        }
-        out.deprecationTime = in.deprecationTime;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.expirationTime > 9223372036854775807L || in.expirationTime < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.expirationTime");
-        }
-        out.expirationTime = in.expirationTime;
-        return out;
-    }
-
-    static public android.hardware.radio.ClosedSubscriberGroupInfo h2aTranslate(
-            android.hardware.radio.V1_5.ClosedSubscriberGroupInfo in) {
-        android.hardware.radio.ClosedSubscriberGroupInfo out =
-                new android.hardware.radio.ClosedSubscriberGroupInfo();
-        out.csgIndication = in.csgIndication;
-        out.homeNodebName = in.homeNodebName;
-        out.csgIdentity = in.csgIdentity;
-        return out;
-    }
-
-    static public android.hardware.radio.OptionalCsgInfo h2aTranslate(
-            android.hardware.radio.V1_5.OptionalCsgInfo in) {
-        android.hardware.radio.OptionalCsgInfo out = new android.hardware.radio.OptionalCsgInfo();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo:
-                out.setCsgInfo(h2aTranslate(in.csgInfo()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CellIdentityGsm h2aTranslate(
-            android.hardware.radio.V1_5.CellIdentityGsm in) {
-        android.hardware.radio.CellIdentityGsm out = new android.hardware.radio.CellIdentityGsm();
-        out.mcc = in.base.base.mcc;
-        out.mnc = in.base.base.mnc;
-        out.lac = in.base.base.lac;
-        out.cid = in.base.base.cid;
-        out.arfcn = in.base.base.arfcn;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.base.bsic > 127 || in.base.base.bsic < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.base.bsic");
-        }
-        out.bsic = in.base.base.bsic;
-        out.operatorNames = h2aTranslate(in.base.operatorNames);
-        if (in.additionalPlmns != null) {
-            out.additionalPlmns = new String[in.additionalPlmns.size()];
-            for (int i = 0; i < in.additionalPlmns.size(); i++) {
-                out.additionalPlmns[i] = in.additionalPlmns.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CellIdentityWcdma h2aTranslate(
-            android.hardware.radio.V1_5.CellIdentityWcdma in) {
-        android.hardware.radio.CellIdentityWcdma out =
-                new android.hardware.radio.CellIdentityWcdma();
-        out.mcc = in.base.base.mcc;
-        out.mnc = in.base.base.mnc;
-        out.lac = in.base.base.lac;
-        out.cid = in.base.base.cid;
-        out.psc = in.base.base.psc;
-        out.uarfcn = in.base.base.uarfcn;
-        out.operatorNames = h2aTranslate(in.base.operatorNames);
-        if (in.additionalPlmns != null) {
-            out.additionalPlmns = new String[in.additionalPlmns.size()];
-            for (int i = 0; i < in.additionalPlmns.size(); i++) {
-                out.additionalPlmns[i] = in.additionalPlmns.get(i);
-            }
-        }
-        out.optionalCsgInfo = h2aTranslate(in.optionalCsgInfo);
-        return out;
-    }
-
-    static public android.hardware.radio.CellIdentityTdscdma h2aTranslate(
-            android.hardware.radio.V1_5.CellIdentityTdscdma in) {
-        android.hardware.radio.CellIdentityTdscdma out =
-                new android.hardware.radio.CellIdentityTdscdma();
-        out.mcc = in.base.base.mcc;
-        out.mnc = in.base.base.mnc;
-        out.lac = in.base.base.lac;
-        out.cid = in.base.base.cid;
-        out.cpid = in.base.base.cpid;
-        out.uarfcn = in.base.uarfcn;
-        out.operatorNames = h2aTranslate(in.base.operatorNames);
-        if (in.additionalPlmns != null) {
-            out.additionalPlmns = new String[in.additionalPlmns.size()];
-            for (int i = 0; i < in.additionalPlmns.size(); i++) {
-                out.additionalPlmns[i] = in.additionalPlmns.get(i);
-            }
-        }
-        out.optionalCsgInfo = h2aTranslate(in.optionalCsgInfo);
-        return out;
-    }
-
-    static public android.hardware.radio.CellIdentityLte h2aTranslate(
-            android.hardware.radio.V1_5.CellIdentityLte in) {
-        android.hardware.radio.CellIdentityLte out = new android.hardware.radio.CellIdentityLte();
-        out.mcc = in.base.base.mcc;
-        out.mnc = in.base.base.mnc;
-        out.ci = in.base.base.ci;
-        out.pci = in.base.base.pci;
-        out.tac = in.base.base.tac;
-        out.earfcn = in.base.base.earfcn;
-        out.operatorNames = h2aTranslate(in.base.operatorNames);
-        out.bandwidth = in.base.bandwidth;
-        if (in.additionalPlmns != null) {
-            out.additionalPlmns = new String[in.additionalPlmns.size()];
-            for (int i = 0; i < in.additionalPlmns.size(); i++) {
-                out.additionalPlmns[i] = in.additionalPlmns.get(i);
-            }
-        }
-        out.optionalCsgInfo = h2aTranslate(in.optionalCsgInfo);
-        if (in.bands != null) {
-            out.bands = new int[in.bands.size()];
-            for (int i = 0; i < in.bands.size(); i++) {
-                out.bands[i] = in.bands.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CellIdentityNr h2aTranslate(
-            android.hardware.radio.V1_5.CellIdentityNr in) {
-        android.hardware.radio.CellIdentityNr out = new android.hardware.radio.CellIdentityNr();
-        out.mcc = in.base.mcc;
-        out.mnc = in.base.mnc;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.nci > 9223372036854775807L || in.base.nci < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.nci");
-        }
-        out.nci = in.base.nci;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.pci > 2147483647 || in.base.pci < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.pci");
-        }
-        out.pci = in.base.pci;
-        out.tac = in.base.tac;
-        out.nrarfcn = in.base.nrarfcn;
-        out.operatorNames = h2aTranslate(in.base.operatorNames);
-        if (in.additionalPlmns != null) {
-            out.additionalPlmns = new String[in.additionalPlmns.size()];
-            for (int i = 0; i < in.additionalPlmns.size(); i++) {
-                out.additionalPlmns[i] = in.additionalPlmns.get(i);
-            }
-        }
-        if (in.bands != null) {
-            out.bands = new int[in.bands.size()];
-            for (int i = 0; i < in.bands.size(); i++) {
-                out.bands[i] = in.bands.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.CellInfoGsm h2aTranslate(
-            android.hardware.radio.V1_5.CellInfoGsm in) {
-        android.hardware.radio.CellInfoGsm out = new android.hardware.radio.CellInfoGsm();
-        out.cellIdentityGsm = h2aTranslate(in.cellIdentityGsm);
-        out.signalStrengthGsm = h2aTranslate(in.signalStrengthGsm);
-        return out;
-    }
-
-    static public android.hardware.radio.CellInfoWcdma h2aTranslate(
-            android.hardware.radio.V1_5.CellInfoWcdma in) {
-        android.hardware.radio.CellInfoWcdma out = new android.hardware.radio.CellInfoWcdma();
-        out.cellIdentityWcdma = h2aTranslate(in.cellIdentityWcdma);
-        out.signalStrengthWcdma = h2aTranslate(in.signalStrengthWcdma);
-        return out;
-    }
-
-    static public android.hardware.radio.CellInfoTdscdma h2aTranslate(
-            android.hardware.radio.V1_5.CellInfoTdscdma in) {
-        android.hardware.radio.CellInfoTdscdma out = new android.hardware.radio.CellInfoTdscdma();
-        out.cellIdentityTdscdma = h2aTranslate(in.cellIdentityTdscdma);
-        out.signalStrengthTdscdma = h2aTranslate(in.signalStrengthTdscdma);
-        return out;
-    }
-
-    static public android.hardware.radio.CellIdentity h2aTranslate(
-            android.hardware.radio.V1_5.CellIdentity in) {
-        android.hardware.radio.CellIdentity out = new android.hardware.radio.CellIdentity();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.gsm:
-                out.setGsm(h2aTranslate(in.gsm()));
-                break;
-            case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.wcdma:
-                out.setWcdma(h2aTranslate(in.wcdma()));
-                break;
-            case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.tdscdma:
-                out.setTdscdma(h2aTranslate(in.tdscdma()));
-                break;
-            case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.cdma:
-                out.setCdma(h2aTranslate(in.cdma()));
-                break;
-            case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.lte:
-                out.setLte(h2aTranslate(in.lte()));
-                break;
-            case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.nr:
-                out.setNr(h2aTranslate(in.nr()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.BarringInfo h2aTranslate(
-            android.hardware.radio.V1_5.BarringInfo in) {
-        android.hardware.radio.BarringInfo out = new android.hardware.radio.BarringInfo();
-        out.serviceType = in.serviceType;
-        out.barringType = in.barringType;
-        out.barringTypeSpecificInfo = h2aTranslate(in.barringTypeSpecificInfo);
-        return out;
-    }
-
-    static public android.hardware.radio.BarringInfoBarringTypeSpecificInfoConditional h2aTranslate(
-            android.hardware.radio.V1_5.BarringInfo.BarringTypeSpecificInfo.Conditional in) {
-        android.hardware.radio.BarringInfoBarringTypeSpecificInfoConditional out =
-                new android.hardware.radio.BarringInfoBarringTypeSpecificInfoConditional();
-        out.factor = in.factor;
-        out.timeSeconds = in.timeSeconds;
-        out.isBarred = in.isBarred;
-        return out;
-    }
-
-    static public android.hardware.radio.BarringInfoBarringTypeSpecificInfo h2aTranslate(
-            android.hardware.radio.V1_5.BarringInfo.BarringTypeSpecificInfo in) {
-        android.hardware.radio.BarringInfoBarringTypeSpecificInfo out =
-                new android.hardware.radio.BarringInfoBarringTypeSpecificInfo();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_5.BarringInfo.BarringTypeSpecificInfo.hidl_discriminator
-                    .noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_5.BarringInfo.BarringTypeSpecificInfo.hidl_discriminator
-                    .conditional:
-                out.setConditional(h2aTranslate(in.conditional()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio
-            .RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo
-            h2aTranslate(android.hardware.radio.V1_5.RegStateResult.AccessTechnologySpecificInfo
-                                 .Cdma2000RegistrationInfo in) {
-        android.hardware.radio
-                .RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo out =
-                new android.hardware.radio
-                        .RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo();
-        out.cssSupported = in.cssSupported;
-        out.roamingIndicator = in.roamingIndicator;
-        out.systemIsInPrl = in.systemIsInPrl;
-        out.defaultRoamingIndicator = in.defaultRoamingIndicator;
-        return out;
-    }
-
-    static public android.hardware.radio
-            .RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo
-            h2aTranslate(android.hardware.radio.V1_5.RegStateResult.AccessTechnologySpecificInfo
-                                 .EutranRegistrationInfo in) {
-        android.hardware.radio
-                .RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo out =
-                new android.hardware.radio
-                        .RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo();
-        out.lteVopsInfo = h2aTranslate(in.lteVopsInfo);
-        out.nrIndicators = h2aTranslate(in.nrIndicators);
-        return out;
-    }
-
-    static public android.hardware.radio.AppStatus h2aTranslate(
-            android.hardware.radio.V1_5.AppStatus in) {
-        android.hardware.radio.AppStatus out = new android.hardware.radio.AppStatus();
-        out.appType = in.base.appType;
-        out.appState = in.base.appState;
-        out.persoSubstate = in.persoSubstate;
-        out.aidPtr = in.base.aidPtr;
-        out.appLabelPtr = in.base.appLabelPtr;
-        out.pin1Replaced = in.base.pin1Replaced;
-        out.pin1 = in.base.pin1;
-        out.pin2 = in.base.pin2;
-        return out;
-    }
-
-    static public android.hardware.radio.CardStatus h2aTranslate(
-            android.hardware.radio.V1_5.CardStatus in) {
-        android.hardware.radio.CardStatus out = new android.hardware.radio.CardStatus();
-        out.cardState = in.base.base.base.cardState;
-        out.universalPinState = in.base.base.base.universalPinState;
-        out.gsmUmtsSubscriptionAppIndex = in.base.base.base.gsmUmtsSubscriptionAppIndex;
-        out.cdmaSubscriptionAppIndex = in.base.base.base.cdmaSubscriptionAppIndex;
-        out.imsSubscriptionAppIndex = in.base.base.base.imsSubscriptionAppIndex;
-        if (in.applications != null) {
-            out.applications = new android.hardware.radio.AppStatus[in.applications.size()];
-            for (int i = 0; i < in.applications.size(); i++) {
-                out.applications[i] = h2aTranslate(in.applications.get(i));
-            }
-        }
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.base.physicalSlotId > 2147483647 || in.base.base.physicalSlotId < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.base.physicalSlotId");
-        }
-        out.physicalSlotId = in.base.base.physicalSlotId;
-        out.atr = in.base.base.atr;
-        out.iccid = in.base.base.iccid;
-        out.eid = in.base.eid;
-        return out;
-    }
-
-    static public android.hardware.radio.QosBandwidth h2aTranslate(
-            android.hardware.radio.V1_6.QosBandwidth in) {
-        android.hardware.radio.QosBandwidth out = new android.hardware.radio.QosBandwidth();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.maxBitrateKbps > 2147483647 || in.maxBitrateKbps < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.maxBitrateKbps");
-        }
-        out.maxBitrateKbps = in.maxBitrateKbps;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.guaranteedBitrateKbps > 2147483647 || in.guaranteedBitrateKbps < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.guaranteedBitrateKbps");
-        }
-        out.guaranteedBitrateKbps = in.guaranteedBitrateKbps;
-        return out;
-    }
-
-    static public android.hardware.radio.EpsQos h2aTranslate(
-            android.hardware.radio.V1_6.EpsQos in) {
-        android.hardware.radio.EpsQos out = new android.hardware.radio.EpsQos();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.qci < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.qci");
-        }
-        out.qci = (char) in.qci;
-        out.downlink = h2aTranslate(in.downlink);
-        out.uplink = h2aTranslate(in.uplink);
-        return out;
-    }
-
-    static public android.hardware.radio.NrQos h2aTranslate(android.hardware.radio.V1_6.NrQos in) {
-        android.hardware.radio.NrQos out = new android.hardware.radio.NrQos();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.fiveQi < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.fiveQi");
-        }
-        out.fiveQi = (char) in.fiveQi;
-        out.downlink = h2aTranslate(in.downlink);
-        out.uplink = h2aTranslate(in.uplink);
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.qfi > 127 || in.qfi < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.qfi");
-        }
-        out.qfi = in.qfi;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.averagingWindowMs < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.averagingWindowMs");
-        }
-        out.averagingWindowMs = (char) in.averagingWindowMs;
-        return out;
-    }
-
-    static public android.hardware.radio.Qos h2aTranslate(android.hardware.radio.V1_6.Qos in) {
-        android.hardware.radio.Qos out = new android.hardware.radio.Qos();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.Qos.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.Qos.hidl_discriminator.eps:
-                out.setEps(h2aTranslate(in.eps()));
-                break;
-            case android.hardware.radio.V1_6.Qos.hidl_discriminator.nr:
-                out.setNr(h2aTranslate(in.nr()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.RadioResponseInfo h2aTranslate(
-            android.hardware.radio.V1_6.RadioResponseInfo in) {
-        android.hardware.radio.RadioResponseInfo out =
-                new android.hardware.radio.RadioResponseInfo();
-        out.type = in.type;
-        out.serial = in.serial;
-        out.error = in.error;
-        return out;
-    }
-
-    static public android.hardware.radio.PortRange h2aTranslate(
-            android.hardware.radio.V1_6.PortRange in) {
-        android.hardware.radio.PortRange out = new android.hardware.radio.PortRange();
-        out.start = in.start;
-        out.end = in.end;
-        return out;
-    }
-
-    static public android.hardware.radio.MaybePort h2aTranslate(
-            android.hardware.radio.V1_6.MaybePort in) {
-        android.hardware.radio.MaybePort out = new android.hardware.radio.MaybePort();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.MaybePort.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.MaybePort.hidl_discriminator.range:
-                out.setRange(h2aTranslate(in.range()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.QosFilter h2aTranslate(
-            android.hardware.radio.V1_6.QosFilter in) {
-        android.hardware.radio.QosFilter out = new android.hardware.radio.QosFilter();
-        if (in.localAddresses != null) {
-            out.localAddresses = new String[in.localAddresses.size()];
-            for (int i = 0; i < in.localAddresses.size(); i++) {
-                out.localAddresses[i] = in.localAddresses.get(i);
-            }
-        }
-        if (in.remoteAddresses != null) {
-            out.remoteAddresses = new String[in.remoteAddresses.size()];
-            for (int i = 0; i < in.remoteAddresses.size(); i++) {
-                out.remoteAddresses[i] = in.remoteAddresses.get(i);
-            }
-        }
-        out.localPort = h2aTranslate(in.localPort);
-        out.remotePort = h2aTranslate(in.remotePort);
-        out.protocol = in.protocol;
-        out.tos = h2aTranslate(in.tos);
-        out.flowLabel = h2aTranslate(in.flowLabel);
-        out.spi = h2aTranslate(in.spi);
-        out.direction = in.direction;
-        out.precedence = in.precedence;
-        return out;
-    }
-
-    static public android.hardware.radio.QosFilterTypeOfService h2aTranslate(
-            android.hardware.radio.V1_6.QosFilter.TypeOfService in) {
-        android.hardware.radio.QosFilterTypeOfService out =
-                new android.hardware.radio.QosFilterTypeOfService();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.QosFilter.TypeOfService.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.QosFilter.TypeOfService.hidl_discriminator.value:
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.value() > 127 || in.value() < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.value()");
-                }
-                out.setValue(in.value());
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.QosFilterIpv6FlowLabel h2aTranslate(
-            android.hardware.radio.V1_6.QosFilter.Ipv6FlowLabel in) {
-        android.hardware.radio.QosFilterIpv6FlowLabel out =
-                new android.hardware.radio.QosFilterIpv6FlowLabel();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.QosFilter.Ipv6FlowLabel.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.QosFilter.Ipv6FlowLabel.hidl_discriminator.value:
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.value() > 2147483647 || in.value() < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.value()");
-                }
-                out.setValue(in.value());
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.QosFilterIpsecSpi h2aTranslate(
-            android.hardware.radio.V1_6.QosFilter.IpsecSpi in) {
-        android.hardware.radio.QosFilterIpsecSpi out =
-                new android.hardware.radio.QosFilterIpsecSpi();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.QosFilter.IpsecSpi.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.QosFilter.IpsecSpi.hidl_discriminator.value:
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.value() > 2147483647 || in.value() < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.value()");
-                }
-                out.setValue(in.value());
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.QosSession h2aTranslate(
-            android.hardware.radio.V1_6.QosSession in) {
-        android.hardware.radio.QosSession out = new android.hardware.radio.QosSession();
-        out.qosSessionId = in.qosSessionId;
-        out.qos = h2aTranslate(in.qos);
-        if (in.qosFilters != null) {
-            out.qosFilters = new android.hardware.radio.QosFilter[in.qosFilters.size()];
-            for (int i = 0; i < in.qosFilters.size(); i++) {
-                out.qosFilters[i] = h2aTranslate(in.qosFilters.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.SetupDataCallResult h2aTranslate(
-            android.hardware.radio.V1_6.SetupDataCallResult in) {
-        android.hardware.radio.SetupDataCallResult out =
-                new android.hardware.radio.SetupDataCallResult();
-        out.cause = in.cause;
-        out.suggestedRetryTime = in.suggestedRetryTime;
-        out.cid = in.cid;
-        out.active = in.active;
-        out.type = in.type;
-        out.ifname = in.ifname;
-        if (in.addresses != null) {
-            out.addresses = new android.hardware.radio.LinkAddress[in.addresses.size()];
-            for (int i = 0; i < in.addresses.size(); i++) {
-                out.addresses[i] = h2aTranslate(in.addresses.get(i));
-            }
-        }
-        if (in.dnses != null) {
-            out.dnses = new String[in.dnses.size()];
-            for (int i = 0; i < in.dnses.size(); i++) {
-                out.dnses[i] = in.dnses.get(i);
-            }
-        }
-        if (in.gateways != null) {
-            out.gateways = new String[in.gateways.size()];
-            for (int i = 0; i < in.gateways.size(); i++) {
-                out.gateways[i] = in.gateways.get(i);
-            }
-        }
-        if (in.pcscf != null) {
-            out.pcscf = new String[in.pcscf.size()];
-            for (int i = 0; i < in.pcscf.size(); i++) {
-                out.pcscf[i] = in.pcscf.get(i);
-            }
-        }
-        out.mtuV4 = in.mtuV4;
-        out.mtuV6 = in.mtuV6;
-        out.defaultQos = h2aTranslate(in.defaultQos);
-        if (in.qosSessions != null) {
-            out.qosSessions = new android.hardware.radio.QosSession[in.qosSessions.size()];
-            for (int i = 0; i < in.qosSessions.size(); i++) {
-                out.qosSessions[i] = h2aTranslate(in.qosSessions.get(i));
-            }
-        }
-        out.handoverFailureMode = in.handoverFailureMode;
-        out.pduSessionId = in.pduSessionId;
-        out.sliceInfo = h2aTranslate(in.sliceInfo);
-        if (in.trafficDescriptors != null) {
-            out.trafficDescriptors =
-                    new android.hardware.radio.TrafficDescriptor[in.trafficDescriptors.size()];
-            for (int i = 0; i < in.trafficDescriptors.size(); i++) {
-                out.trafficDescriptors[i] = h2aTranslate(in.trafficDescriptors.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.LinkCapacityEstimate h2aTranslate(
-            android.hardware.radio.V1_6.LinkCapacityEstimate in) {
-        android.hardware.radio.LinkCapacityEstimate out =
-                new android.hardware.radio.LinkCapacityEstimate();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.downlinkCapacityKbps > 2147483647 || in.downlinkCapacityKbps < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.downlinkCapacityKbps");
-        }
-        out.downlinkCapacityKbps = in.downlinkCapacityKbps;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.uplinkCapacityKbps > 2147483647 || in.uplinkCapacityKbps < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.uplinkCapacityKbps");
-        }
-        out.uplinkCapacityKbps = in.uplinkCapacityKbps;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.secondaryDownlinkCapacityKbps > 2147483647 || in.secondaryDownlinkCapacityKbps < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.secondaryDownlinkCapacityKbps");
-        }
-        out.secondaryDownlinkCapacityKbps = in.secondaryDownlinkCapacityKbps;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.secondaryUplinkCapacityKbps > 2147483647 || in.secondaryUplinkCapacityKbps < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.secondaryUplinkCapacityKbps");
-        }
-        out.secondaryUplinkCapacityKbps = in.secondaryUplinkCapacityKbps;
-        return out;
-    }
-
-    static public android.hardware.radio.NrVopsInfo h2aTranslate(
-            android.hardware.radio.V1_6.NrVopsInfo in) {
-        android.hardware.radio.NrVopsInfo out = new android.hardware.radio.NrVopsInfo();
-        out.vopsSupported = in.vopsSupported;
-        out.emcSupported = in.emcSupported;
-        out.emfSupported = in.emfSupported;
-        return out;
-    }
-
-    static public android.hardware.radio.LteSignalStrength h2aTranslate(
-            android.hardware.radio.V1_6.LteSignalStrength in) {
-        android.hardware.radio.LteSignalStrength out =
-                new android.hardware.radio.LteSignalStrength();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.signalStrength > 2147483647 || in.base.signalStrength < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.signalStrength");
-        }
-        out.signalStrength = in.base.signalStrength;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.rsrp > 2147483647 || in.base.rsrp < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.rsrp");
-        }
-        out.rsrp = in.base.rsrp;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.rsrq > 2147483647 || in.base.rsrq < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.rsrq");
-        }
-        out.rsrq = in.base.rsrq;
-        out.rssnr = in.base.rssnr;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.cqi > 2147483647 || in.base.cqi < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.cqi");
-        }
-        out.cqi = in.base.cqi;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.timingAdvance > 2147483647 || in.base.timingAdvance < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.timingAdvance");
-        }
-        out.timingAdvance = in.base.timingAdvance;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.cqiTableIndex > 2147483647 || in.cqiTableIndex < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.cqiTableIndex");
-        }
-        out.cqiTableIndex = in.cqiTableIndex;
-        return out;
-    }
-
-    static public android.hardware.radio.NrSignalStrength h2aTranslate(
-            android.hardware.radio.V1_6.NrSignalStrength in) {
-        android.hardware.radio.NrSignalStrength out = new android.hardware.radio.NrSignalStrength();
-        out.ssRsrp = in.base.ssRsrp;
-        out.ssRsrq = in.base.ssRsrq;
-        out.ssSinr = in.base.ssSinr;
-        out.csiRsrp = in.base.csiRsrp;
-        out.csiRsrq = in.base.csiRsrq;
-        out.csiSinr = in.base.csiSinr;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.csiCqiTableIndex > 2147483647 || in.csiCqiTableIndex < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.csiCqiTableIndex");
-        }
-        out.csiCqiTableIndex = in.csiCqiTableIndex;
-        if (in.csiCqiReport != null) {
-            out.csiCqiReport = new byte[in.csiCqiReport.size()];
-            for (int i = 0; i < in.csiCqiReport.size(); i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.csiCqiReport.get(i) > 127 || in.csiCqiReport.get(i) < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.csiCqiReport.get(i)");
-                }
-                out.csiCqiReport[i] = in.csiCqiReport.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.SignalStrength h2aTranslate(
-            android.hardware.radio.V1_6.SignalStrength in) {
-        android.hardware.radio.SignalStrength out = new android.hardware.radio.SignalStrength();
-        out.gsm = h2aTranslate(in.gsm);
-        out.cdma = h2aTranslate(in.cdma);
-        out.evdo = h2aTranslate(in.evdo);
-        out.lte = h2aTranslate(in.lte);
-        out.tdscdma = h2aTranslate(in.tdscdma);
-        out.wcdma = h2aTranslate(in.wcdma);
-        out.nr = h2aTranslate(in.nr);
-        return out;
-    }
-
-    static public android.hardware.radio.CellInfoLte h2aTranslate(
-            android.hardware.radio.V1_6.CellInfoLte in) {
-        android.hardware.radio.CellInfoLte out = new android.hardware.radio.CellInfoLte();
-        out.cellIdentityLte = h2aTranslate(in.cellIdentityLte);
-        out.signalStrengthLte = h2aTranslate(in.signalStrengthLte);
-        return out;
-    }
-
-    static public android.hardware.radio.CellInfoNr h2aTranslate(
-            android.hardware.radio.V1_6.CellInfoNr in) {
-        android.hardware.radio.CellInfoNr out = new android.hardware.radio.CellInfoNr();
-        out.cellIdentityNr = h2aTranslate(in.cellIdentityNr);
-        out.signalStrengthNr = h2aTranslate(in.signalStrengthNr);
-        return out;
-    }
-
-    static public android.hardware.radio.CellInfo h2aTranslate(
-            android.hardware.radio.V1_6.CellInfo in) {
-        android.hardware.radio.CellInfo out = new android.hardware.radio.CellInfo();
-        out.registered = in.registered;
-        out.connectionStatus = in.connectionStatus;
-        out.ratSpecificInfo = h2aTranslate(in.ratSpecificInfo);
-        return out;
-    }
-
-    static public android.hardware.radio.CellInfoCellInfoRatSpecificInfo h2aTranslate(
-            android.hardware.radio.V1_6.CellInfo.CellInfoRatSpecificInfo in) {
-        android.hardware.radio.CellInfoCellInfoRatSpecificInfo out =
-                new android.hardware.radio.CellInfoCellInfoRatSpecificInfo();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.CellInfo.CellInfoRatSpecificInfo.hidl_discriminator
-                    .gsm:
-                out.setGsm(h2aTranslate(in.gsm()));
-                break;
-            case android.hardware.radio.V1_6.CellInfo.CellInfoRatSpecificInfo.hidl_discriminator
-                    .wcdma:
-                out.setWcdma(h2aTranslate(in.wcdma()));
-                break;
-            case android.hardware.radio.V1_6.CellInfo.CellInfoRatSpecificInfo.hidl_discriminator
-                    .tdscdma:
-                out.setTdscdma(h2aTranslate(in.tdscdma()));
-                break;
-            case android.hardware.radio.V1_6.CellInfo.CellInfoRatSpecificInfo.hidl_discriminator
-                    .lte:
-                out.setLte(h2aTranslate(in.lte()));
-                break;
-            case android.hardware.radio.V1_6.CellInfo.CellInfoRatSpecificInfo.hidl_discriminator.nr:
-                out.setNr(h2aTranslate(in.nr()));
-                break;
-            case android.hardware.radio.V1_6.CellInfo.CellInfoRatSpecificInfo.hidl_discriminator
-                    .cdma:
-                out.setCdma(h2aTranslate(in.cdma()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.NetworkScanResult h2aTranslate(
-            android.hardware.radio.V1_6.NetworkScanResult in) {
-        android.hardware.radio.NetworkScanResult out =
-                new android.hardware.radio.NetworkScanResult();
-        out.status = in.status;
-        out.error = in.error;
-        if (in.networkInfos != null) {
-            out.networkInfos = new android.hardware.radio.CellInfo[in.networkInfos.size()];
-            for (int i = 0; i < in.networkInfos.size(); i++) {
-                out.networkInfos[i] = h2aTranslate(in.networkInfos.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.RegStateResult h2aTranslate(
-            android.hardware.radio.V1_6.RegStateResult in) {
-        android.hardware.radio.RegStateResult out = new android.hardware.radio.RegStateResult();
-        out.regState = in.regState;
-        out.rat = in.rat;
-        out.reasonForDenial = in.reasonForDenial;
-        out.cellIdentity = h2aTranslate(in.cellIdentity);
-        out.registeredPlmn = in.registeredPlmn;
-        out.accessTechnologySpecificInfo = h2aTranslate(in.accessTechnologySpecificInfo);
-        return out;
-    }
-
-    static public android.hardware.radio.RegStateResultAccessTechnologySpecificInfo h2aTranslate(
-            android.hardware.radio.V1_6.RegStateResult.AccessTechnologySpecificInfo in) {
-        android.hardware.radio.RegStateResultAccessTechnologySpecificInfo out =
-                new android.hardware.radio.RegStateResultAccessTechnologySpecificInfo();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.RegStateResult.AccessTechnologySpecificInfo
-                    .hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.RegStateResult.AccessTechnologySpecificInfo
-                    .hidl_discriminator.cdmaInfo:
-                out.setCdmaInfo(h2aTranslate(in.cdmaInfo()));
-                break;
-            case android.hardware.radio.V1_6.RegStateResult.AccessTechnologySpecificInfo
-                    .hidl_discriminator.eutranInfo:
-                out.setEutranInfo(h2aTranslate(in.eutranInfo()));
-                break;
-            case android.hardware.radio.V1_6.RegStateResult.AccessTechnologySpecificInfo
-                    .hidl_discriminator.ngranNrVopsInfo:
-                out.setNgranNrVopsInfo(h2aTranslate(in.ngranNrVopsInfo()));
-                break;
-            case android.hardware.radio.V1_6.RegStateResult.AccessTechnologySpecificInfo
-                    .hidl_discriminator.geranDtmSupported:
-                out.setGeranDtmSupported(in.geranDtmSupported());
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.Call h2aTranslate(android.hardware.radio.V1_6.Call in) {
-        android.hardware.radio.Call out = new android.hardware.radio.Call();
-        out.state = in.base.base.state;
-        out.index = in.base.base.index;
-        out.toa = in.base.base.toa;
-        out.isMpty = in.base.base.isMpty;
-        out.isMT = in.base.base.isMT;
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.base.base.als > 127 || in.base.base.als < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.base.base.als");
-        }
-        out.als = in.base.base.als;
-        out.isVoice = in.base.base.isVoice;
-        out.isVoicePrivacy = in.base.base.isVoicePrivacy;
-        out.number = in.base.base.number;
-        out.numberPresentation = in.base.base.numberPresentation;
-        out.name = in.base.base.name;
-        out.namePresentation = in.base.base.namePresentation;
-        if (in.base.base.uusInfo != null) {
-            out.uusInfo = new android.hardware.radio.UusInfo[in.base.base.uusInfo.size()];
-            for (int i = 0; i < in.base.base.uusInfo.size(); i++) {
-                out.uusInfo[i] = h2aTranslate(in.base.base.uusInfo.get(i));
-            }
-        }
-        out.audioQuality = in.base.audioQuality;
-        out.forwardedNumber = in.forwardedNumber;
-        return out;
-    }
-
-    static public android.hardware.radio.PhysicalChannelConfig h2aTranslate(
-            android.hardware.radio.V1_6.PhysicalChannelConfig in) {
-        android.hardware.radio.PhysicalChannelConfig out =
-                new android.hardware.radio.PhysicalChannelConfig();
-        out.status = in.status;
-        out.rat = in.rat;
-        out.downlinkChannelNumber = in.downlinkChannelNumber;
-        out.uplinkChannelNumber = in.uplinkChannelNumber;
-        out.cellBandwidthDownlinkKhz = in.cellBandwidthDownlinkKhz;
-        out.cellBandwidthUplinkKhz = in.cellBandwidthUplinkKhz;
-        if (in.contextIds != null) {
-            out.contextIds = new int[in.contextIds.size()];
-            for (int i = 0; i < in.contextIds.size(); i++) {
-                out.contextIds[i] = in.contextIds.get(i);
-            }
-        }
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.physicalCellId > 2147483647 || in.physicalCellId < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.physicalCellId");
-        }
-        out.physicalCellId = in.physicalCellId;
-        out.band = h2aTranslate(in.band);
-        return out;
-    }
-
-    static public android.hardware.radio.PhysicalChannelConfigBand h2aTranslate(
-            android.hardware.radio.V1_6.PhysicalChannelConfig.Band in) {
-        android.hardware.radio.PhysicalChannelConfigBand out =
-                new android.hardware.radio.PhysicalChannelConfigBand();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.PhysicalChannelConfig.Band.hidl_discriminator
-                    .geranBand:
-                out.setGeranBand(in.geranBand());
-                break;
-            case android.hardware.radio.V1_6.PhysicalChannelConfig.Band.hidl_discriminator
-                    .utranBand:
-                out.setUtranBand(in.utranBand());
-                break;
-            case android.hardware.radio.V1_6.PhysicalChannelConfig.Band.hidl_discriminator
-                    .eutranBand:
-                out.setEutranBand(in.eutranBand());
-                break;
-            case android.hardware.radio.V1_6.PhysicalChannelConfig.Band.hidl_discriminator
-                    .ngranBand:
-                out.setNgranBand(in.ngranBand());
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.OptionalSliceInfo h2aTranslate(
-            android.hardware.radio.V1_6.OptionalSliceInfo in) {
-        android.hardware.radio.OptionalSliceInfo out =
-                new android.hardware.radio.OptionalSliceInfo();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.OptionalSliceInfo.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.OptionalSliceInfo.hidl_discriminator.value:
-                out.setValue(h2aTranslate(in.value()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.SliceInfo h2aTranslate(
-            android.hardware.radio.V1_6.SliceInfo in) {
-        android.hardware.radio.SliceInfo out = new android.hardware.radio.SliceInfo();
-        out.sst = in.sst;
-        out.sliceDifferentiator = in.sliceDifferentiator;
-        out.mappedHplmnSst = in.mappedHplmnSst;
-        out.mappedHplmnSD = in.mappedHplmnSD;
-        out.status = in.status;
-        return out;
-    }
-
-    static public android.hardware.radio.OptionalDnn h2aTranslate(
-            android.hardware.radio.V1_6.OptionalDnn in) {
-        android.hardware.radio.OptionalDnn out = new android.hardware.radio.OptionalDnn();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.OptionalDnn.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.OptionalDnn.hidl_discriminator.value:
-                out.setValue(in.value());
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.OptionalOsAppId h2aTranslate(
-            android.hardware.radio.V1_6.OptionalOsAppId in) {
-        android.hardware.radio.OptionalOsAppId out = new android.hardware.radio.OptionalOsAppId();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.OptionalOsAppId.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.OptionalOsAppId.hidl_discriminator.value:
-                out.setValue(h2aTranslate(in.value()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.OptionalTrafficDescriptor h2aTranslate(
-            android.hardware.radio.V1_6.OptionalTrafficDescriptor in) {
-        android.hardware.radio.OptionalTrafficDescriptor out =
-                new android.hardware.radio.OptionalTrafficDescriptor();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.OptionalTrafficDescriptor.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.OptionalTrafficDescriptor.hidl_discriminator.value:
-                out.setValue(h2aTranslate(in.value()));
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.TrafficDescriptor h2aTranslate(
-            android.hardware.radio.V1_6.TrafficDescriptor in) {
-        android.hardware.radio.TrafficDescriptor out =
-                new android.hardware.radio.TrafficDescriptor();
-        out.dnn = h2aTranslate(in.dnn);
-        out.osAppId = h2aTranslate(in.osAppId);
-        return out;
-    }
-
-    static public android.hardware.radio.OsAppId h2aTranslate(
-            android.hardware.radio.V1_6.OsAppId in) {
-        android.hardware.radio.OsAppId out = new android.hardware.radio.OsAppId();
-        if (in.osAppId != null) {
-            out.osAppId = new byte[in.osAppId.size()];
-            for (int i = 0; i < in.osAppId.size(); i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.osAppId.get(i) > 127 || in.osAppId.get(i) < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.osAppId.get(i)");
-                }
-                out.osAppId[i] = in.osAppId.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.SlicingConfig h2aTranslate(
-            android.hardware.radio.V1_6.SlicingConfig in) {
-        android.hardware.radio.SlicingConfig out = new android.hardware.radio.SlicingConfig();
-        if (in.urspRules != null) {
-            out.urspRules = new android.hardware.radio.UrspRule[in.urspRules.size()];
-            for (int i = 0; i < in.urspRules.size(); i++) {
-                out.urspRules[i] = h2aTranslate(in.urspRules.get(i));
-            }
-        }
-        if (in.sliceInfo != null) {
-            out.sliceInfo = new android.hardware.radio.SliceInfo[in.sliceInfo.size()];
-            for (int i = 0; i < in.sliceInfo.size(); i++) {
-                out.sliceInfo[i] = h2aTranslate(in.sliceInfo.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.UrspRule h2aTranslate(
-            android.hardware.radio.V1_6.UrspRule in) {
-        android.hardware.radio.UrspRule out = new android.hardware.radio.UrspRule();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.precedence > 127 || in.precedence < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.precedence");
-        }
-        out.precedence = in.precedence;
-        if (in.trafficDescriptors != null) {
-            out.trafficDescriptors =
-                    new android.hardware.radio.TrafficDescriptor[in.trafficDescriptors.size()];
-            for (int i = 0; i < in.trafficDescriptors.size(); i++) {
-                out.trafficDescriptors[i] = h2aTranslate(in.trafficDescriptors.get(i));
-            }
-        }
-        if (in.routeSelectionDescriptor != null) {
-            out.routeSelectionDescriptor =
-                    new android.hardware.radio
-                            .RouteSelectionDescriptor[in.routeSelectionDescriptor.size()];
-            for (int i = 0; i < in.routeSelectionDescriptor.size(); i++) {
-                out.routeSelectionDescriptor[i] = h2aTranslate(in.routeSelectionDescriptor.get(i));
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.RouteSelectionDescriptor h2aTranslate(
-            android.hardware.radio.V1_6.RouteSelectionDescriptor in) {
-        android.hardware.radio.RouteSelectionDescriptor out =
-                new android.hardware.radio.RouteSelectionDescriptor();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.precedence > 127 || in.precedence < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.precedence");
-        }
-        out.precedence = in.precedence;
-        out.sessionType = h2aTranslate(in.sessionType);
-        out.sscMode = h2aTranslate(in.sscMode);
-        if (in.sliceInfo != null) {
-            out.sliceInfo = new android.hardware.radio.SliceInfo[in.sliceInfo.size()];
-            for (int i = 0; i < in.sliceInfo.size(); i++) {
-                out.sliceInfo[i] = h2aTranslate(in.sliceInfo.get(i));
-            }
-        }
-        if (in.dnn != null) {
-            out.dnn = new String[in.dnn.size()];
-            for (int i = 0; i < in.dnn.size(); i++) {
-                out.dnn[i] = in.dnn.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.OptionalPdpProtocolType h2aTranslate(
-            android.hardware.radio.V1_6.OptionalPdpProtocolType in) {
-        android.hardware.radio.OptionalPdpProtocolType out =
-                new android.hardware.radio.OptionalPdpProtocolType();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.OptionalPdpProtocolType.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.OptionalPdpProtocolType.hidl_discriminator.value:
-                out.setValue(in.value());
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.OptionalSscMode h2aTranslate(
-            android.hardware.radio.V1_6.OptionalSscMode in) {
-        android.hardware.radio.OptionalSscMode out = new android.hardware.radio.OptionalSscMode();
-        switch (in.getDiscriminator()) {
-            case android.hardware.radio.V1_6.OptionalSscMode.hidl_discriminator.noinit:
-                // Nothing to translate for Monostate.
-                break;
-            case android.hardware.radio.V1_6.OptionalSscMode.hidl_discriminator.value:
-                out.setValue(in.value());
-                break;
-            default:
-                throw new RuntimeException(
-                        "Unknown discriminator value: " + Integer.toString(in.getDiscriminator()));
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.ImsiEncryptionInfo h2aTranslate(
-            android.hardware.radio.V1_6.ImsiEncryptionInfo in) {
-        android.hardware.radio.ImsiEncryptionInfo out =
-                new android.hardware.radio.ImsiEncryptionInfo();
-        out.mcc = in.base.mcc;
-        out.mnc = in.base.mnc;
-        if (in.base.carrierKey != null) {
-            out.carrierKey = new byte[in.base.carrierKey.size()];
-            for (int i = 0; i < in.base.carrierKey.size(); i++) {
-                // FIXME This requires conversion between signed and unsigned. Change this if it
-                // doesn't suit your needs.
-                if (in.base.carrierKey.get(i) > 127 || in.base.carrierKey.get(i) < 0) {
-                    throw new RuntimeException(
-                            "Unsafe conversion between signed and unsigned scalars for field: in.base.carrierKey.get(i)");
-                }
-                out.carrierKey[i] = in.base.carrierKey.get(i);
-            }
-        }
-        out.keyIdentifier = in.base.keyIdentifier;
-        out.expirationTime = in.base.expirationTime;
-        out.keyType = in.keyType;
-        return out;
-    }
-
-    static public android.hardware.radio.PhonebookRecordInfo h2aTranslate(
-            android.hardware.radio.V1_6.PhonebookRecordInfo in) {
-        android.hardware.radio.PhonebookRecordInfo out =
-                new android.hardware.radio.PhonebookRecordInfo();
-        // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-        // suit your needs.
-        if (in.recordId > 2147483647 || in.recordId < 0) {
-            throw new RuntimeException(
-                    "Unsafe conversion between signed and unsigned scalars for field: in.recordId");
-        }
-        out.recordId = in.recordId;
-        out.name = in.name;
-        out.number = in.number;
-        if (in.emails != null) {
-            out.emails = new String[in.emails.size()];
-            for (int i = 0; i < in.emails.size(); i++) {
-                out.emails[i] = in.emails.get(i);
-            }
-        }
-        if (in.additionalNumbers != null) {
-            out.additionalNumbers = new String[in.additionalNumbers.size()];
-            for (int i = 0; i < in.additionalNumbers.size(); i++) {
-                out.additionalNumbers[i] = in.additionalNumbers.get(i);
-            }
-        }
-        return out;
-    }
-
-    static public android.hardware.radio.PhonebookCapacity h2aTranslate(
-            android.hardware.radio.V1_6.PhonebookCapacity in) {
-        android.hardware.radio.PhonebookCapacity out =
-                new android.hardware.radio.PhonebookCapacity();
-        out.maxAdnRecords = in.maxAdnRecords;
-        out.usedAdnRecords = in.usedAdnRecords;
-        out.maxEmailRecords = in.maxEmailRecords;
-        out.usedEmailRecords = in.usedEmailRecords;
-        out.maxAdditionalNumberRecords = in.maxAdditionalNumberRecords;
-        out.usedAdditionalNumberRecords = in.usedAdditionalNumberRecords;
-        out.maxNameLen = in.maxNameLen;
-        out.maxNumberLen = in.maxNumberLen;
-        out.maxEmailLen = in.maxEmailLen;
-        out.maxAdditionalNumberLen = in.maxAdditionalNumberLen;
-        return out;
-    }
-}
diff --git a/radio/aidl/android/hardware/radio/UiccSubActStatus.aidl b/radio/aidl/android/hardware/radio/UiccSubActStatus.aidl
deleted file mode 100644
index b2bb03e..0000000
--- a/radio/aidl/android/hardware/radio/UiccSubActStatus.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-@VintfStability
-@Backing(type="int")
-enum UiccSubActStatus {
-    DEACTIVATE,
-    ACTIVATE,
-}
diff --git a/radio/aidl/android/hardware/radio/UrspRule.aidl b/radio/aidl/android/hardware/radio/UrspRule.aidl
index 244bcb1..67d797a 100644
--- a/radio/aidl/android/hardware/radio/UrspRule.aidl
+++ b/radio/aidl/android/hardware/radio/UrspRule.aidl
@@ -27,7 +27,7 @@
     /**
      * Precedence value in the range of 0 to 255. Higher value has lower precedence.
      */
-    byte precedence;
+    int precedence;
     /**
      * Used as a matcher for network requests.
      */
diff --git a/radio/aidl/android/hardware/radio/UusDcs.aidl b/radio/aidl/android/hardware/radio/UusDcs.aidl
deleted file mode 100644
index b157e47..0000000
--- a/radio/aidl/android/hardware/radio/UusDcs.aidl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * User-to-User Signaling Information data coding schemes. Possible values for Octet 3 (Protocol
- * Discriminator field) in the UUIE. The values have been specified in section 10.5.4.25 of
- * 3GPP TS 24.008
- */
-@VintfStability
-@Backing(type="int")
-enum UusDcs {
-    /**
-     * User specified protocol
-     */
-    USP,
-    /**
-     * OSI higher layer protocol
-     */
-    OSIHLP,
-    /**
-     * X.244
-     */
-    X244,
-    /**
-     * Reserved for system management
-     */
-    RMCF,
-    /**
-     * IA5 characters
-     */
-    IA5C,
-}
diff --git a/radio/aidl/android/hardware/radio/UusInfo.aidl b/radio/aidl/android/hardware/radio/UusInfo.aidl
index b766b0d..c96c626 100644
--- a/radio/aidl/android/hardware/radio/UusInfo.aidl
+++ b/radio/aidl/android/hardware/radio/UusInfo.aidl
@@ -16,22 +16,52 @@
 
 package android.hardware.radio;
 
-import android.hardware.radio.UusDcs;
-import android.hardware.radio.UusType;
-
 /**
  * User-to-User Signaling Information defined in 3GPP 23.087 v8.0
  */
 @VintfStability
 parcelable UusInfo {
     /**
-     * UUS type
+     * User specified protocol
      */
-    UusType uusType;
+    const int UUS_DCS_USP = 0;
     /**
-     * UUS data coding scheme
+     * OSI higher layer protocol
      */
-    UusDcs uusDcs;
+    const int UUS_DCS_OSIHLP = 1;
+    /**
+     * X.244
+     */
+    const int UUS_DCS_X244 = 2;
+    /**
+     * Reserved for system management
+     */
+    const int UUS_DCS_RMCF = 3;
+    /**
+     * IA5 characters
+     */
+    const int UUS_DCS_IA5C = 4;
+
+    const int UUS_TYPE_TYPE1_IMPLICIT = 0;
+    const int UUS_TYPE_TYPE1_REQUIRED = 1;
+    const int UUS_TYPE_TYPE1_NOT_REQUIRED = 2;
+    const int UUS_TYPE_TYPE2_REQUIRED = 3;
+    const int UUS_TYPE_TYPE2_NOT_REQUIRED = 4;
+    const int UUS_TYPE_TYPE3_REQUIRED = 5;
+    const int UUS_TYPE_TYPE3_NOT_REQUIRED = 6;
+
+    /**
+     * User-to-User Signaling Information activation types derived from 3GPP 23.087 v8.0
+     * Values are UUS_TYPE_
+     */
+    int uusType;
+    /**
+     * User-to-User Signaling Information data coding schemes. Possible values for Octet 3 (Protocol
+     * Discriminator field) in the UUIE. The values have been specified in section 10.5.4.25 of
+     * 3GPP TS 24.008
+     * Values are UUS_DCS_
+     */
+    int uusDcs;
     /**
      * UUS data
      */
diff --git a/radio/aidl/android/hardware/radio/UusType.aidl b/radio/aidl/android/hardware/radio/UusType.aidl
deleted file mode 100644
index af86c97..0000000
--- a/radio/aidl/android/hardware/radio/UusType.aidl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * User-to-User signaling Info activation types derived from 3GPP 23.087 v8.0
- */
-@VintfStability
-@Backing(type="int")
-enum UusType {
-    TYPE1_IMPLICIT,
-    TYPE1_REQUIRED,
-    TYPE1_NOT_REQUIRED,
-    TYPE2_REQUIRED,
-    TYPE2_NOT_REQUIRED,
-    TYPE3_REQUIRED,
-    TYPE3_NOT_REQUIRED,
-}
diff --git a/radio/aidl/android/hardware/radio/VopsIndicator.aidl b/radio/aidl/android/hardware/radio/VopsIndicator.aidl
deleted file mode 100644
index 0533be9..0000000
--- a/radio/aidl/android/hardware/radio/VopsIndicator.aidl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-/**
- * Defines the values for VoPS indicator of NR as per 3gpp spec 24.501 sec 9.10.3.5
- */
-@VintfStability
-@Backing(type="byte")
-enum VopsIndicator {
-    /**
-     * IMS voice over PS session not supported
-     */
-    VOPS_NOT_SUPPORTED,
-    /**
-     * IMS voice over PS session supported over 3GPP access
-     */
-    VOPS_OVER_3GPP,
-    /**
-     * IMS voice over PS session supported over non-3GPP access
-     */
-    VOPS_OVER_NON_3GPP,
-}
diff --git a/radio/aidl/android/hardware/radio/translate-ndk.cpp b/radio/aidl/android/hardware/radio/translate-ndk.cpp
deleted file mode 100644
index 0492ade..0000000
--- a/radio/aidl/android/hardware/radio/translate-ndk.cpp
+++ /dev/null
@@ -1,7404 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "android/hardware/radio/translate-ndk.h"
-
-namespace android::h2a {
-
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::ADDRESS_MAX ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::ADDRESS_MAX));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::SUBADDRESS_MAX ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::SUBADDRESS_MAX));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::BEARER_DATA_MAX ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::BEARER_DATA_MAX));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::UDH_MAX_SND_SIZE ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::UDH_MAX_SND_SIZE));
-static_assert(
-        aidl::android::hardware::radio::RadioCdmaSmsConst::UDH_EO_DATA_SEGMENT_MAX ==
-        static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                ::android::hardware::radio::V1_0::RadioCdmaSmsConst::UDH_EO_DATA_SEGMENT_MAX));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::MAX_UD_HEADERS ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::MAX_UD_HEADERS));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::USER_DATA_MAX ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::USER_DATA_MAX));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::UDH_LARGE_PIC_SIZE ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::UDH_LARGE_PIC_SIZE));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::UDH_SMALL_PIC_SIZE ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::UDH_SMALL_PIC_SIZE));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::UDH_VAR_PIC_SIZE ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::UDH_VAR_PIC_SIZE));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::UDH_ANIM_NUM_BITMAPS ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::UDH_ANIM_NUM_BITMAPS));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::UDH_LARGE_BITMAP_SIZE ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::UDH_LARGE_BITMAP_SIZE));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::UDH_SMALL_BITMAP_SIZE ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::UDH_SMALL_BITMAP_SIZE));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::UDH_OTHER_SIZE ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::UDH_OTHER_SIZE));
-static_assert(aidl::android::hardware::radio::RadioCdmaSmsConst::IP_ADDRESS_SIZE ==
-              static_cast<aidl::android::hardware::radio::RadioCdmaSmsConst>(
-                      ::android::hardware::radio::V1_0::RadioCdmaSmsConst::IP_ADDRESS_SIZE));
-
-static_assert(aidl::android::hardware::radio::RadioResponseType::SOLICITED ==
-              static_cast<aidl::android::hardware::radio::RadioResponseType>(
-                      ::android::hardware::radio::V1_0::RadioResponseType::SOLICITED));
-static_assert(aidl::android::hardware::radio::RadioResponseType::SOLICITED_ACK ==
-              static_cast<aidl::android::hardware::radio::RadioResponseType>(
-                      ::android::hardware::radio::V1_0::RadioResponseType::SOLICITED_ACK));
-static_assert(aidl::android::hardware::radio::RadioResponseType::SOLICITED_ACK_EXP ==
-              static_cast<aidl::android::hardware::radio::RadioResponseType>(
-                      ::android::hardware::radio::V1_0::RadioResponseType::SOLICITED_ACK_EXP));
-
-static_assert(aidl::android::hardware::radio::RadioIndicationType::UNSOLICITED ==
-              static_cast<aidl::android::hardware::radio::RadioIndicationType>(
-                      ::android::hardware::radio::V1_0::RadioIndicationType::UNSOLICITED));
-static_assert(aidl::android::hardware::radio::RadioIndicationType::UNSOLICITED_ACK_EXP ==
-              static_cast<aidl::android::hardware::radio::RadioIndicationType>(
-                      ::android::hardware::radio::V1_0::RadioIndicationType::UNSOLICITED_ACK_EXP));
-
-static_assert(aidl::android::hardware::radio::RestrictedState::NONE ==
-              static_cast<aidl::android::hardware::radio::RestrictedState>(
-                      ::android::hardware::radio::V1_0::RestrictedState::NONE));
-static_assert(aidl::android::hardware::radio::RestrictedState::CS_EMERGENCY ==
-              static_cast<aidl::android::hardware::radio::RestrictedState>(
-                      ::android::hardware::radio::V1_0::RestrictedState::CS_EMERGENCY));
-static_assert(aidl::android::hardware::radio::RestrictedState::CS_NORMAL ==
-              static_cast<aidl::android::hardware::radio::RestrictedState>(
-                      ::android::hardware::radio::V1_0::RestrictedState::CS_NORMAL));
-static_assert(aidl::android::hardware::radio::RestrictedState::CS_ALL ==
-              static_cast<aidl::android::hardware::radio::RestrictedState>(
-                      ::android::hardware::radio::V1_0::RestrictedState::CS_ALL));
-static_assert(aidl::android::hardware::radio::RestrictedState::PS_ALL ==
-              static_cast<aidl::android::hardware::radio::RestrictedState>(
-                      ::android::hardware::radio::V1_0::RestrictedState::PS_ALL));
-
-static_assert(aidl::android::hardware::radio::CardState::ABSENT ==
-              static_cast<aidl::android::hardware::radio::CardState>(
-                      ::android::hardware::radio::V1_0::CardState::ABSENT));
-static_assert(aidl::android::hardware::radio::CardState::PRESENT ==
-              static_cast<aidl::android::hardware::radio::CardState>(
-                      ::android::hardware::radio::V1_0::CardState::PRESENT));
-static_assert(aidl::android::hardware::radio::CardState::ERROR ==
-              static_cast<aidl::android::hardware::radio::CardState>(
-                      ::android::hardware::radio::V1_0::CardState::ERROR));
-static_assert(aidl::android::hardware::radio::CardState::RESTRICTED ==
-              static_cast<aidl::android::hardware::radio::CardState>(
-                      ::android::hardware::radio::V1_0::CardState::RESTRICTED));
-
-static_assert(aidl::android::hardware::radio::PinState::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::PinState>(
-                      ::android::hardware::radio::V1_0::PinState::UNKNOWN));
-static_assert(aidl::android::hardware::radio::PinState::ENABLED_NOT_VERIFIED ==
-              static_cast<aidl::android::hardware::radio::PinState>(
-                      ::android::hardware::radio::V1_0::PinState::ENABLED_NOT_VERIFIED));
-static_assert(aidl::android::hardware::radio::PinState::ENABLED_VERIFIED ==
-              static_cast<aidl::android::hardware::radio::PinState>(
-                      ::android::hardware::radio::V1_0::PinState::ENABLED_VERIFIED));
-static_assert(aidl::android::hardware::radio::PinState::DISABLED ==
-              static_cast<aidl::android::hardware::radio::PinState>(
-                      ::android::hardware::radio::V1_0::PinState::DISABLED));
-static_assert(aidl::android::hardware::radio::PinState::ENABLED_BLOCKED ==
-              static_cast<aidl::android::hardware::radio::PinState>(
-                      ::android::hardware::radio::V1_0::PinState::ENABLED_BLOCKED));
-static_assert(aidl::android::hardware::radio::PinState::ENABLED_PERM_BLOCKED ==
-              static_cast<aidl::android::hardware::radio::PinState>(
-                      ::android::hardware::radio::V1_0::PinState::ENABLED_PERM_BLOCKED));
-
-static_assert(aidl::android::hardware::radio::AppType::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::AppType>(
-                      ::android::hardware::radio::V1_0::AppType::UNKNOWN));
-static_assert(aidl::android::hardware::radio::AppType::SIM ==
-              static_cast<aidl::android::hardware::radio::AppType>(
-                      ::android::hardware::radio::V1_0::AppType::SIM));
-static_assert(aidl::android::hardware::radio::AppType::USIM ==
-              static_cast<aidl::android::hardware::radio::AppType>(
-                      ::android::hardware::radio::V1_0::AppType::USIM));
-static_assert(aidl::android::hardware::radio::AppType::RUIM ==
-              static_cast<aidl::android::hardware::radio::AppType>(
-                      ::android::hardware::radio::V1_0::AppType::RUIM));
-static_assert(aidl::android::hardware::radio::AppType::CSIM ==
-              static_cast<aidl::android::hardware::radio::AppType>(
-                      ::android::hardware::radio::V1_0::AppType::CSIM));
-static_assert(aidl::android::hardware::radio::AppType::ISIM ==
-              static_cast<aidl::android::hardware::radio::AppType>(
-                      ::android::hardware::radio::V1_0::AppType::ISIM));
-
-static_assert(aidl::android::hardware::radio::AppState::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::AppState>(
-                      ::android::hardware::radio::V1_0::AppState::UNKNOWN));
-static_assert(aidl::android::hardware::radio::AppState::DETECTED ==
-              static_cast<aidl::android::hardware::radio::AppState>(
-                      ::android::hardware::radio::V1_0::AppState::DETECTED));
-static_assert(aidl::android::hardware::radio::AppState::PIN ==
-              static_cast<aidl::android::hardware::radio::AppState>(
-                      ::android::hardware::radio::V1_0::AppState::PIN));
-static_assert(aidl::android::hardware::radio::AppState::PUK ==
-              static_cast<aidl::android::hardware::radio::AppState>(
-                      ::android::hardware::radio::V1_0::AppState::PUK));
-static_assert(aidl::android::hardware::radio::AppState::SUBSCRIPTION_PERSO ==
-              static_cast<aidl::android::hardware::radio::AppState>(
-                      ::android::hardware::radio::V1_0::AppState::SUBSCRIPTION_PERSO));
-static_assert(aidl::android::hardware::radio::AppState::READY ==
-              static_cast<aidl::android::hardware::radio::AppState>(
-                      ::android::hardware::radio::V1_0::AppState::READY));
-
-static_assert(aidl::android::hardware::radio::RadioState::OFF ==
-              static_cast<aidl::android::hardware::radio::RadioState>(
-                      ::android::hardware::radio::V1_0::RadioState::OFF));
-static_assert(aidl::android::hardware::radio::RadioState::UNAVAILABLE ==
-              static_cast<aidl::android::hardware::radio::RadioState>(
-                      ::android::hardware::radio::V1_0::RadioState::UNAVAILABLE));
-static_assert(aidl::android::hardware::radio::RadioState::ON ==
-              static_cast<aidl::android::hardware::radio::RadioState>(
-                      ::android::hardware::radio::V1_0::RadioState::ON));
-
-static_assert(aidl::android::hardware::radio::SapConnectRsp::SUCCESS ==
-              static_cast<aidl::android::hardware::radio::SapConnectRsp>(
-                      ::android::hardware::radio::V1_0::SapConnectRsp::SUCCESS));
-static_assert(aidl::android::hardware::radio::SapConnectRsp::CONNECT_FAILURE ==
-              static_cast<aidl::android::hardware::radio::SapConnectRsp>(
-                      ::android::hardware::radio::V1_0::SapConnectRsp::CONNECT_FAILURE));
-static_assert(aidl::android::hardware::radio::SapConnectRsp::MSG_SIZE_TOO_LARGE ==
-              static_cast<aidl::android::hardware::radio::SapConnectRsp>(
-                      ::android::hardware::radio::V1_0::SapConnectRsp::MSG_SIZE_TOO_LARGE));
-static_assert(aidl::android::hardware::radio::SapConnectRsp::MSG_SIZE_TOO_SMALL ==
-              static_cast<aidl::android::hardware::radio::SapConnectRsp>(
-                      ::android::hardware::radio::V1_0::SapConnectRsp::MSG_SIZE_TOO_SMALL));
-static_assert(aidl::android::hardware::radio::SapConnectRsp::CONNECT_OK_CALL_ONGOING ==
-              static_cast<aidl::android::hardware::radio::SapConnectRsp>(
-                      ::android::hardware::radio::V1_0::SapConnectRsp::CONNECT_OK_CALL_ONGOING));
-
-static_assert(aidl::android::hardware::radio::SapDisconnectType::GRACEFUL ==
-              static_cast<aidl::android::hardware::radio::SapDisconnectType>(
-                      ::android::hardware::radio::V1_0::SapDisconnectType::GRACEFUL));
-static_assert(aidl::android::hardware::radio::SapDisconnectType::IMMEDIATE ==
-              static_cast<aidl::android::hardware::radio::SapDisconnectType>(
-                      ::android::hardware::radio::V1_0::SapDisconnectType::IMMEDIATE));
-
-static_assert(aidl::android::hardware::radio::SapApduType::APDU ==
-              static_cast<aidl::android::hardware::radio::SapApduType>(
-                      ::android::hardware::radio::V1_0::SapApduType::APDU));
-static_assert(aidl::android::hardware::radio::SapApduType::APDU7816 ==
-              static_cast<aidl::android::hardware::radio::SapApduType>(
-                      ::android::hardware::radio::V1_0::SapApduType::APDU7816));
-
-static_assert(aidl::android::hardware::radio::SapResultCode::SUCCESS ==
-              static_cast<aidl::android::hardware::radio::SapResultCode>(
-                      ::android::hardware::radio::V1_0::SapResultCode::SUCCESS));
-static_assert(aidl::android::hardware::radio::SapResultCode::GENERIC_FAILURE ==
-              static_cast<aidl::android::hardware::radio::SapResultCode>(
-                      ::android::hardware::radio::V1_0::SapResultCode::GENERIC_FAILURE));
-static_assert(aidl::android::hardware::radio::SapResultCode::CARD_NOT_ACCESSSIBLE ==
-              static_cast<aidl::android::hardware::radio::SapResultCode>(
-                      ::android::hardware::radio::V1_0::SapResultCode::CARD_NOT_ACCESSSIBLE));
-static_assert(aidl::android::hardware::radio::SapResultCode::CARD_ALREADY_POWERED_OFF ==
-              static_cast<aidl::android::hardware::radio::SapResultCode>(
-                      ::android::hardware::radio::V1_0::SapResultCode::CARD_ALREADY_POWERED_OFF));
-static_assert(aidl::android::hardware::radio::SapResultCode::CARD_REMOVED ==
-              static_cast<aidl::android::hardware::radio::SapResultCode>(
-                      ::android::hardware::radio::V1_0::SapResultCode::CARD_REMOVED));
-static_assert(aidl::android::hardware::radio::SapResultCode::CARD_ALREADY_POWERED_ON ==
-              static_cast<aidl::android::hardware::radio::SapResultCode>(
-                      ::android::hardware::radio::V1_0::SapResultCode::CARD_ALREADY_POWERED_ON));
-static_assert(aidl::android::hardware::radio::SapResultCode::DATA_NOT_AVAILABLE ==
-              static_cast<aidl::android::hardware::radio::SapResultCode>(
-                      ::android::hardware::radio::V1_0::SapResultCode::DATA_NOT_AVAILABLE));
-static_assert(aidl::android::hardware::radio::SapResultCode::NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::SapResultCode>(
-                      ::android::hardware::radio::V1_0::SapResultCode::NOT_SUPPORTED));
-
-static_assert(aidl::android::hardware::radio::SapStatus::UNKNOWN_ERROR ==
-              static_cast<aidl::android::hardware::radio::SapStatus>(
-                      ::android::hardware::radio::V1_0::SapStatus::UNKNOWN_ERROR));
-static_assert(aidl::android::hardware::radio::SapStatus::CARD_RESET ==
-              static_cast<aidl::android::hardware::radio::SapStatus>(
-                      ::android::hardware::radio::V1_0::SapStatus::CARD_RESET));
-static_assert(aidl::android::hardware::radio::SapStatus::CARD_NOT_ACCESSIBLE ==
-              static_cast<aidl::android::hardware::radio::SapStatus>(
-                      ::android::hardware::radio::V1_0::SapStatus::CARD_NOT_ACCESSIBLE));
-static_assert(aidl::android::hardware::radio::SapStatus::CARD_REMOVED ==
-              static_cast<aidl::android::hardware::radio::SapStatus>(
-                      ::android::hardware::radio::V1_0::SapStatus::CARD_REMOVED));
-static_assert(aidl::android::hardware::radio::SapStatus::CARD_INSERTED ==
-              static_cast<aidl::android::hardware::radio::SapStatus>(
-                      ::android::hardware::radio::V1_0::SapStatus::CARD_INSERTED));
-static_assert(aidl::android::hardware::radio::SapStatus::RECOVERED ==
-              static_cast<aidl::android::hardware::radio::SapStatus>(
-                      ::android::hardware::radio::V1_0::SapStatus::RECOVERED));
-
-static_assert(aidl::android::hardware::radio::SapTransferProtocol::T0 ==
-              static_cast<aidl::android::hardware::radio::SapTransferProtocol>(
-                      ::android::hardware::radio::V1_0::SapTransferProtocol::T0));
-static_assert(aidl::android::hardware::radio::SapTransferProtocol::T1 ==
-              static_cast<aidl::android::hardware::radio::SapTransferProtocol>(
-                      ::android::hardware::radio::V1_0::SapTransferProtocol::T1));
-
-static_assert(aidl::android::hardware::radio::CallState::ACTIVE ==
-              static_cast<aidl::android::hardware::radio::CallState>(
-                      ::android::hardware::radio::V1_0::CallState::ACTIVE));
-static_assert(aidl::android::hardware::radio::CallState::HOLDING ==
-              static_cast<aidl::android::hardware::radio::CallState>(
-                      ::android::hardware::radio::V1_0::CallState::HOLDING));
-static_assert(aidl::android::hardware::radio::CallState::DIALING ==
-              static_cast<aidl::android::hardware::radio::CallState>(
-                      ::android::hardware::radio::V1_0::CallState::DIALING));
-static_assert(aidl::android::hardware::radio::CallState::ALERTING ==
-              static_cast<aidl::android::hardware::radio::CallState>(
-                      ::android::hardware::radio::V1_0::CallState::ALERTING));
-static_assert(aidl::android::hardware::radio::CallState::INCOMING ==
-              static_cast<aidl::android::hardware::radio::CallState>(
-                      ::android::hardware::radio::V1_0::CallState::INCOMING));
-static_assert(aidl::android::hardware::radio::CallState::WAITING ==
-              static_cast<aidl::android::hardware::radio::CallState>(
-                      ::android::hardware::radio::V1_0::CallState::WAITING));
-
-static_assert(aidl::android::hardware::radio::UusType::TYPE1_IMPLICIT ==
-              static_cast<aidl::android::hardware::radio::UusType>(
-                      ::android::hardware::radio::V1_0::UusType::TYPE1_IMPLICIT));
-static_assert(aidl::android::hardware::radio::UusType::TYPE1_REQUIRED ==
-              static_cast<aidl::android::hardware::radio::UusType>(
-                      ::android::hardware::radio::V1_0::UusType::TYPE1_REQUIRED));
-static_assert(aidl::android::hardware::radio::UusType::TYPE1_NOT_REQUIRED ==
-              static_cast<aidl::android::hardware::radio::UusType>(
-                      ::android::hardware::radio::V1_0::UusType::TYPE1_NOT_REQUIRED));
-static_assert(aidl::android::hardware::radio::UusType::TYPE2_REQUIRED ==
-              static_cast<aidl::android::hardware::radio::UusType>(
-                      ::android::hardware::radio::V1_0::UusType::TYPE2_REQUIRED));
-static_assert(aidl::android::hardware::radio::UusType::TYPE2_NOT_REQUIRED ==
-              static_cast<aidl::android::hardware::radio::UusType>(
-                      ::android::hardware::radio::V1_0::UusType::TYPE2_NOT_REQUIRED));
-static_assert(aidl::android::hardware::radio::UusType::TYPE3_REQUIRED ==
-              static_cast<aidl::android::hardware::radio::UusType>(
-                      ::android::hardware::radio::V1_0::UusType::TYPE3_REQUIRED));
-static_assert(aidl::android::hardware::radio::UusType::TYPE3_NOT_REQUIRED ==
-              static_cast<aidl::android::hardware::radio::UusType>(
-                      ::android::hardware::radio::V1_0::UusType::TYPE3_NOT_REQUIRED));
-
-static_assert(aidl::android::hardware::radio::UusDcs::USP ==
-              static_cast<aidl::android::hardware::radio::UusDcs>(
-                      ::android::hardware::radio::V1_0::UusDcs::USP));
-static_assert(aidl::android::hardware::radio::UusDcs::OSIHLP ==
-              static_cast<aidl::android::hardware::radio::UusDcs>(
-                      ::android::hardware::radio::V1_0::UusDcs::OSIHLP));
-static_assert(aidl::android::hardware::radio::UusDcs::X244 ==
-              static_cast<aidl::android::hardware::radio::UusDcs>(
-                      ::android::hardware::radio::V1_0::UusDcs::X244));
-static_assert(aidl::android::hardware::radio::UusDcs::RMCF ==
-              static_cast<aidl::android::hardware::radio::UusDcs>(
-                      ::android::hardware::radio::V1_0::UusDcs::RMCF));
-static_assert(aidl::android::hardware::radio::UusDcs::IA5C ==
-              static_cast<aidl::android::hardware::radio::UusDcs>(
-                      ::android::hardware::radio::V1_0::UusDcs::IA5C));
-
-static_assert(aidl::android::hardware::radio::CallPresentation::ALLOWED ==
-              static_cast<aidl::android::hardware::radio::CallPresentation>(
-                      ::android::hardware::radio::V1_0::CallPresentation::ALLOWED));
-static_assert(aidl::android::hardware::radio::CallPresentation::RESTRICTED ==
-              static_cast<aidl::android::hardware::radio::CallPresentation>(
-                      ::android::hardware::radio::V1_0::CallPresentation::RESTRICTED));
-static_assert(aidl::android::hardware::radio::CallPresentation::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::CallPresentation>(
-                      ::android::hardware::radio::V1_0::CallPresentation::UNKNOWN));
-static_assert(aidl::android::hardware::radio::CallPresentation::PAYPHONE ==
-              static_cast<aidl::android::hardware::radio::CallPresentation>(
-                      ::android::hardware::radio::V1_0::CallPresentation::PAYPHONE));
-
-static_assert(aidl::android::hardware::radio::Clir::DEFAULT ==
-              static_cast<aidl::android::hardware::radio::Clir>(
-                      ::android::hardware::radio::V1_0::Clir::DEFAULT));
-static_assert(aidl::android::hardware::radio::Clir::INVOCATION ==
-              static_cast<aidl::android::hardware::radio::Clir>(
-                      ::android::hardware::radio::V1_0::Clir::INVOCATION));
-static_assert(aidl::android::hardware::radio::Clir::SUPPRESSION ==
-              static_cast<aidl::android::hardware::radio::Clir>(
-                      ::android::hardware::radio::V1_0::Clir::SUPPRESSION));
-
-static_assert(aidl::android::hardware::radio::LastCallFailCause::UNOBTAINABLE_NUMBER ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::UNOBTAINABLE_NUMBER));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::NO_ROUTE_TO_DESTINATION ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::NO_ROUTE_TO_DESTINATION));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CHANNEL_UNACCEPTABLE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CHANNEL_UNACCEPTABLE));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::OPERATOR_DETERMINED_BARRING ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::OPERATOR_DETERMINED_BARRING));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NORMAL ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NORMAL));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::BUSY ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::BUSY));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NO_USER_RESPONDING ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NO_USER_RESPONDING));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NO_ANSWER_FROM_USER ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NO_ANSWER_FROM_USER));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CALL_REJECTED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CALL_REJECTED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NUMBER_CHANGED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NUMBER_CHANGED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::PREEMPTION ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::PREEMPTION));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::DESTINATION_OUT_OF_ORDER ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::DESTINATION_OUT_OF_ORDER));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::INVALID_NUMBER_FORMAT ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::INVALID_NUMBER_FORMAT));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::FACILITY_REJECTED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::FACILITY_REJECTED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RESP_TO_STATUS_ENQUIRY ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RESP_TO_STATUS_ENQUIRY));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NORMAL_UNSPECIFIED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NORMAL_UNSPECIFIED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CONGESTION ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CONGESTION));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NETWORK_OUT_OF_ORDER ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NETWORK_OUT_OF_ORDER));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::TEMPORARY_FAILURE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::TEMPORARY_FAILURE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::SWITCHING_EQUIPMENT_CONGESTION ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              SWITCHING_EQUIPMENT_CONGESTION));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::ACCESS_INFORMATION_DISCARDED ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::ACCESS_INFORMATION_DISCARDED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::
-                      REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::RESOURCES_UNAVAILABLE_OR_UNSPECIFIED ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::
-                        RESOURCES_UNAVAILABLE_OR_UNSPECIFIED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::QOS_UNAVAILABLE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::QOS_UNAVAILABLE));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::REQUESTED_FACILITY_NOT_SUBSCRIBED ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::
-                        REQUESTED_FACILITY_NOT_SUBSCRIBED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::INCOMING_CALLS_BARRED_WITHIN_CUG ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              INCOMING_CALLS_BARRED_WITHIN_CUG));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::BEARER_CAPABILITY_NOT_AUTHORIZED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              BEARER_CAPABILITY_NOT_AUTHORIZED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::BEARER_CAPABILITY_UNAVAILABLE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              BEARER_CAPABILITY_UNAVAILABLE));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::SERVICE_OPTION_NOT_AVAILABLE ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::SERVICE_OPTION_NOT_AVAILABLE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::BEARER_SERVICE_NOT_IMPLEMENTED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              BEARER_SERVICE_NOT_IMPLEMENTED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::ACM_LIMIT_EXCEEDED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::ACM_LIMIT_EXCEEDED));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::REQUESTED_FACILITY_NOT_IMPLEMENTED ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::
-                        REQUESTED_FACILITY_NOT_IMPLEMENTED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::
-                      ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::SERVICE_OR_OPTION_NOT_IMPLEMENTED ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::
-                        SERVICE_OR_OPTION_NOT_IMPLEMENTED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::INVALID_TRANSACTION_IDENTIFIER ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              INVALID_TRANSACTION_IDENTIFIER));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::USER_NOT_MEMBER_OF_CUG ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::USER_NOT_MEMBER_OF_CUG));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::INCOMPATIBLE_DESTINATION ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::INCOMPATIBLE_DESTINATION));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::INVALID_TRANSIT_NW_SELECTION ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::INVALID_TRANSIT_NW_SELECTION));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::SEMANTICALLY_INCORRECT_MESSAGE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              SEMANTICALLY_INCORRECT_MESSAGE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::INVALID_MANDATORY_INFORMATION ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              INVALID_MANDATORY_INFORMATION));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::MESSAGE_TYPE_NON_IMPLEMENTED ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::MESSAGE_TYPE_NON_IMPLEMENTED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::
-                      MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::INFORMATION_ELEMENT_NON_EXISTENT ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              INFORMATION_ELEMENT_NON_EXISTENT));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CONDITIONAL_IE_ERROR ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CONDITIONAL_IE_ERROR));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::
-                      MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::RECOVERY_ON_TIMER_EXPIRED ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::RECOVERY_ON_TIMER_EXPIRED));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::PROTOCOL_ERROR_UNSPECIFIED ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::PROTOCOL_ERROR_UNSPECIFIED));
-static_assert(
-        aidl::android::hardware::radio::LastCallFailCause::INTERWORKING_UNSPECIFIED ==
-        static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                ::android::hardware::radio::V1_0::LastCallFailCause::INTERWORKING_UNSPECIFIED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CALL_BARRED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CALL_BARRED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::FDN_BLOCKED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::FDN_BLOCKED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::IMSI_UNKNOWN_IN_VLR ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::IMSI_UNKNOWN_IN_VLR));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::IMEI_NOT_ACCEPTED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::IMEI_NOT_ACCEPTED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::DIAL_MODIFIED_TO_USSD ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::DIAL_MODIFIED_TO_USSD));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::DIAL_MODIFIED_TO_SS ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::DIAL_MODIFIED_TO_SS));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::DIAL_MODIFIED_TO_DIAL ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::DIAL_MODIFIED_TO_DIAL));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RADIO_OFF ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RADIO_OFF));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OUT_OF_SERVICE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OUT_OF_SERVICE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NO_VALID_SIM ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NO_VALID_SIM));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RADIO_INTERNAL_ERROR ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RADIO_INTERNAL_ERROR));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NETWORK_RESP_TIMEOUT ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NETWORK_RESP_TIMEOUT));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NETWORK_REJECT ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NETWORK_REJECT));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RADIO_ACCESS_FAILURE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RADIO_ACCESS_FAILURE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RADIO_LINK_FAILURE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RADIO_LINK_FAILURE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RADIO_LINK_LOST ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RADIO_LINK_LOST));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RADIO_UPLINK_FAILURE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RADIO_UPLINK_FAILURE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RADIO_SETUP_FAILURE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RADIO_SETUP_FAILURE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RADIO_RELEASE_NORMAL ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RADIO_RELEASE_NORMAL));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::RADIO_RELEASE_ABNORMAL ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::RADIO_RELEASE_ABNORMAL));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::ACCESS_CLASS_BLOCKED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::ACCESS_CLASS_BLOCKED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::NETWORK_DETACH ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::NETWORK_DETACH));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_LOCKED_UNTIL_POWER_CYCLE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::
-                              CDMA_LOCKED_UNTIL_POWER_CYCLE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_DROP ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CDMA_DROP));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_INTERCEPT ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CDMA_INTERCEPT));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_REORDER ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CDMA_REORDER));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_SO_REJECT ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CDMA_SO_REJECT));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_RETRY_ORDER ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CDMA_RETRY_ORDER));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_ACCESS_FAILURE ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CDMA_ACCESS_FAILURE));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_PREEMPTED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CDMA_PREEMPTED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_NOT_EMERGENCY ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CDMA_NOT_EMERGENCY));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::CDMA_ACCESS_BLOCKED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::CDMA_ACCESS_BLOCKED));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_1 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_1));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_2 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_2));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_3 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_3));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_4 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_4));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_5 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_5));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_6 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_6));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_7 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_7));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_8 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_8));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_9 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_9));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_10 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_10));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_11 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_11));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_12 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_12));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_13 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_13));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_14 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_14));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::OEM_CAUSE_15 ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::OEM_CAUSE_15));
-static_assert(aidl::android::hardware::radio::LastCallFailCause::ERROR_UNSPECIFIED ==
-              static_cast<aidl::android::hardware::radio::LastCallFailCause>(
-                      ::android::hardware::radio::V1_0::LastCallFailCause::ERROR_UNSPECIFIED));
-
-static_assert(aidl::android::hardware::radio::HardwareConfigType::MODEM ==
-              static_cast<aidl::android::hardware::radio::HardwareConfigType>(
-                      ::android::hardware::radio::V1_0::HardwareConfigType::MODEM));
-static_assert(aidl::android::hardware::radio::HardwareConfigType::SIM ==
-              static_cast<aidl::android::hardware::radio::HardwareConfigType>(
-                      ::android::hardware::radio::V1_0::HardwareConfigType::SIM));
-
-static_assert(aidl::android::hardware::radio::RegState::NOT_REG_MT_NOT_SEARCHING_OP ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::NOT_REG_MT_NOT_SEARCHING_OP));
-static_assert(aidl::android::hardware::radio::RegState::REG_HOME ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::REG_HOME));
-static_assert(aidl::android::hardware::radio::RegState::NOT_REG_MT_SEARCHING_OP ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::NOT_REG_MT_SEARCHING_OP));
-static_assert(aidl::android::hardware::radio::RegState::REG_DENIED ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::REG_DENIED));
-static_assert(aidl::android::hardware::radio::RegState::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::UNKNOWN));
-static_assert(aidl::android::hardware::radio::RegState::REG_ROAMING ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::REG_ROAMING));
-static_assert(aidl::android::hardware::radio::RegState::NOT_REG_MT_NOT_SEARCHING_OP_EM ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::NOT_REG_MT_NOT_SEARCHING_OP_EM));
-static_assert(aidl::android::hardware::radio::RegState::NOT_REG_MT_SEARCHING_OP_EM ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::NOT_REG_MT_SEARCHING_OP_EM));
-static_assert(aidl::android::hardware::radio::RegState::REG_DENIED_EM ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::REG_DENIED_EM));
-static_assert(aidl::android::hardware::radio::RegState::UNKNOWN_EM ==
-              static_cast<aidl::android::hardware::radio::RegState>(
-                      ::android::hardware::radio::V1_0::RegState::UNKNOWN_EM));
-
-static_assert(aidl::android::hardware::radio::DataProfileId::DEFAULT ==
-              static_cast<aidl::android::hardware::radio::DataProfileId>(
-                      ::android::hardware::radio::V1_0::DataProfileId::DEFAULT));
-static_assert(aidl::android::hardware::radio::DataProfileId::TETHERED ==
-              static_cast<aidl::android::hardware::radio::DataProfileId>(
-                      ::android::hardware::radio::V1_0::DataProfileId::TETHERED));
-static_assert(aidl::android::hardware::radio::DataProfileId::IMS ==
-              static_cast<aidl::android::hardware::radio::DataProfileId>(
-                      ::android::hardware::radio::V1_0::DataProfileId::IMS));
-static_assert(aidl::android::hardware::radio::DataProfileId::FOTA ==
-              static_cast<aidl::android::hardware::radio::DataProfileId>(
-                      ::android::hardware::radio::V1_0::DataProfileId::FOTA));
-static_assert(aidl::android::hardware::radio::DataProfileId::CBS ==
-              static_cast<aidl::android::hardware::radio::DataProfileId>(
-                      ::android::hardware::radio::V1_0::DataProfileId::CBS));
-static_assert(aidl::android::hardware::radio::DataProfileId::OEM_BASE ==
-              static_cast<aidl::android::hardware::radio::DataProfileId>(
-                      ::android::hardware::radio::V1_0::DataProfileId::OEM_BASE));
-static_assert(aidl::android::hardware::radio::DataProfileId::INVALID ==
-              static_cast<aidl::android::hardware::radio::DataProfileId>(
-                      ::android::hardware::radio::V1_0::DataProfileId::INVALID));
-
-static_assert(aidl::android::hardware::radio::SmsAcknowledgeFailCause::MEMORY_CAPACITY_EXCEEDED ==
-              static_cast<aidl::android::hardware::radio::SmsAcknowledgeFailCause>(
-                      ::android::hardware::radio::V1_0::SmsAcknowledgeFailCause::
-                              MEMORY_CAPACITY_EXCEEDED));
-static_assert(
-        aidl::android::hardware::radio::SmsAcknowledgeFailCause::UNSPECIFIED_ERROR ==
-        static_cast<aidl::android::hardware::radio::SmsAcknowledgeFailCause>(
-                ::android::hardware::radio::V1_0::SmsAcknowledgeFailCause::UNSPECIFIED_ERROR));
-
-static_assert(aidl::android::hardware::radio::CallForwardInfoStatus::DISABLE ==
-              static_cast<aidl::android::hardware::radio::CallForwardInfoStatus>(
-                      ::android::hardware::radio::V1_0::CallForwardInfoStatus::DISABLE));
-static_assert(aidl::android::hardware::radio::CallForwardInfoStatus::ENABLE ==
-              static_cast<aidl::android::hardware::radio::CallForwardInfoStatus>(
-                      ::android::hardware::radio::V1_0::CallForwardInfoStatus::ENABLE));
-static_assert(aidl::android::hardware::radio::CallForwardInfoStatus::INTERROGATE ==
-              static_cast<aidl::android::hardware::radio::CallForwardInfoStatus>(
-                      ::android::hardware::radio::V1_0::CallForwardInfoStatus::INTERROGATE));
-static_assert(aidl::android::hardware::radio::CallForwardInfoStatus::REGISTRATION ==
-              static_cast<aidl::android::hardware::radio::CallForwardInfoStatus>(
-                      ::android::hardware::radio::V1_0::CallForwardInfoStatus::REGISTRATION));
-static_assert(aidl::android::hardware::radio::CallForwardInfoStatus::ERASURE ==
-              static_cast<aidl::android::hardware::radio::CallForwardInfoStatus>(
-                      ::android::hardware::radio::V1_0::CallForwardInfoStatus::ERASURE));
-
-static_assert(aidl::android::hardware::radio::ClipStatus::CLIP_PROVISIONED ==
-              static_cast<aidl::android::hardware::radio::ClipStatus>(
-                      ::android::hardware::radio::V1_0::ClipStatus::CLIP_PROVISIONED));
-static_assert(aidl::android::hardware::radio::ClipStatus::CLIP_UNPROVISIONED ==
-              static_cast<aidl::android::hardware::radio::ClipStatus>(
-                      ::android::hardware::radio::V1_0::ClipStatus::CLIP_UNPROVISIONED));
-static_assert(aidl::android::hardware::radio::ClipStatus::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::ClipStatus>(
-                      ::android::hardware::radio::V1_0::ClipStatus::UNKNOWN));
-
-static_assert(aidl::android::hardware::radio::SmsWriteArgsStatus::REC_UNREAD ==
-              static_cast<aidl::android::hardware::radio::SmsWriteArgsStatus>(
-                      ::android::hardware::radio::V1_0::SmsWriteArgsStatus::REC_UNREAD));
-static_assert(aidl::android::hardware::radio::SmsWriteArgsStatus::REC_READ ==
-              static_cast<aidl::android::hardware::radio::SmsWriteArgsStatus>(
-                      ::android::hardware::radio::V1_0::SmsWriteArgsStatus::REC_READ));
-static_assert(aidl::android::hardware::radio::SmsWriteArgsStatus::STO_UNSENT ==
-              static_cast<aidl::android::hardware::radio::SmsWriteArgsStatus>(
-                      ::android::hardware::radio::V1_0::SmsWriteArgsStatus::STO_UNSENT));
-static_assert(aidl::android::hardware::radio::SmsWriteArgsStatus::STO_SENT ==
-              static_cast<aidl::android::hardware::radio::SmsWriteArgsStatus>(
-                      ::android::hardware::radio::V1_0::SmsWriteArgsStatus::STO_SENT));
-
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_UNSPECIFIED ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_UNSPECIFIED));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_EURO ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_EURO));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_USA ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_USA));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_JPN ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_JPN));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_AUS ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_AUS));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_AUS_2 ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_AUS_2));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_CELL_800 ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_CELL_800));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_PCS ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_PCS));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_JTACS ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_JTACS));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_KOREA_PCS ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_KOREA_PCS));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_5_450M ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_5_450M));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_IMT2000 ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_IMT2000));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_7_700M_2 ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_7_700M_2));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_8_1800M ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_8_1800M));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_9_900M ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_9_900M));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_10_800M_2 ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_10_800M_2));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_EURO_PAMR_400M ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_EURO_PAMR_400M));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_AWS ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_AWS));
-static_assert(aidl::android::hardware::radio::RadioBandMode::BAND_MODE_USA_2500M ==
-              static_cast<aidl::android::hardware::radio::RadioBandMode>(
-                      ::android::hardware::radio::V1_0::RadioBandMode::BAND_MODE_USA_2500M));
-
-static_assert(aidl::android::hardware::radio::OperatorStatus::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::OperatorStatus>(
-                      ::android::hardware::radio::V1_0::OperatorStatus::UNKNOWN));
-static_assert(aidl::android::hardware::radio::OperatorStatus::AVAILABLE ==
-              static_cast<aidl::android::hardware::radio::OperatorStatus>(
-                      ::android::hardware::radio::V1_0::OperatorStatus::AVAILABLE));
-static_assert(aidl::android::hardware::radio::OperatorStatus::CURRENT ==
-              static_cast<aidl::android::hardware::radio::OperatorStatus>(
-                      ::android::hardware::radio::V1_0::OperatorStatus::CURRENT));
-static_assert(aidl::android::hardware::radio::OperatorStatus::FORBIDDEN ==
-              static_cast<aidl::android::hardware::radio::OperatorStatus>(
-                      ::android::hardware::radio::V1_0::OperatorStatus::FORBIDDEN));
-
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::GSM_WCDMA ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::GSM_WCDMA));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::GSM_ONLY ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::GSM_ONLY));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::WCDMA ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::WCDMA));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::GSM_WCDMA_AUTO ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::GSM_WCDMA_AUTO));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::CDMA_EVDO_AUTO ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::CDMA_EVDO_AUTO));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::CDMA_ONLY ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::CDMA_ONLY));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::EVDO_ONLY ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::EVDO_ONLY));
-static_assert(
-        aidl::android::hardware::radio::PreferredNetworkType::GSM_WCDMA_CDMA_EVDO_AUTO ==
-        static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                ::android::hardware::radio::V1_0::PreferredNetworkType::GSM_WCDMA_CDMA_EVDO_AUTO));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::LTE_CDMA_EVDO ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::LTE_CDMA_EVDO));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::LTE_GSM_WCDMA ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::LTE_GSM_WCDMA));
-static_assert(
-        aidl::android::hardware::radio::PreferredNetworkType::LTE_CMDA_EVDO_GSM_WCDMA ==
-        static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                ::android::hardware::radio::V1_0::PreferredNetworkType::LTE_CMDA_EVDO_GSM_WCDMA));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::LTE_ONLY ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::LTE_ONLY));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::LTE_WCDMA ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::LTE_WCDMA));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_ONLY ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::TD_SCDMA_ONLY));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_WCDMA ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::TD_SCDMA_WCDMA));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_LTE ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::TD_SCDMA_LTE));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_GSM ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::TD_SCDMA_GSM));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_GSM_LTE ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::TD_SCDMA_GSM_LTE));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_GSM_WCDMA ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::TD_SCDMA_GSM_WCDMA));
-static_assert(aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_WCDMA_LTE ==
-              static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                      ::android::hardware::radio::V1_0::PreferredNetworkType::TD_SCDMA_WCDMA_LTE));
-static_assert(
-        aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_GSM_WCDMA_LTE ==
-        static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                ::android::hardware::radio::V1_0::PreferredNetworkType::TD_SCDMA_GSM_WCDMA_LTE));
-static_assert(
-        aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_GSM_WCDMA_CDMA_EVDO_AUTO ==
-        static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                ::android::hardware::radio::V1_0::PreferredNetworkType::
-                        TD_SCDMA_GSM_WCDMA_CDMA_EVDO_AUTO));
-static_assert(
-        aidl::android::hardware::radio::PreferredNetworkType::TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA ==
-        static_cast<aidl::android::hardware::radio::PreferredNetworkType>(
-                ::android::hardware::radio::V1_0::PreferredNetworkType::
-                        TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA));
-
-static_assert(aidl::android::hardware::radio::CdmaSubscriptionSource::RUIM_SIM ==
-              static_cast<aidl::android::hardware::radio::CdmaSubscriptionSource>(
-                      ::android::hardware::radio::V1_0::CdmaSubscriptionSource::RUIM_SIM));
-static_assert(aidl::android::hardware::radio::CdmaSubscriptionSource::NV ==
-              static_cast<aidl::android::hardware::radio::CdmaSubscriptionSource>(
-                      ::android::hardware::radio::V1_0::CdmaSubscriptionSource::NV));
-
-static_assert(aidl::android::hardware::radio::CdmaRoamingType::HOME_NETWORK ==
-              static_cast<aidl::android::hardware::radio::CdmaRoamingType>(
-                      ::android::hardware::radio::V1_0::CdmaRoamingType::HOME_NETWORK));
-static_assert(aidl::android::hardware::radio::CdmaRoamingType::AFFILIATED_ROAM ==
-              static_cast<aidl::android::hardware::radio::CdmaRoamingType>(
-                      ::android::hardware::radio::V1_0::CdmaRoamingType::AFFILIATED_ROAM));
-static_assert(aidl::android::hardware::radio::CdmaRoamingType::ANY_ROAM ==
-              static_cast<aidl::android::hardware::radio::CdmaRoamingType>(
-                      ::android::hardware::radio::V1_0::CdmaRoamingType::ANY_ROAM));
-
-static_assert(aidl::android::hardware::radio::TtyMode::OFF ==
-              static_cast<aidl::android::hardware::radio::TtyMode>(
-                      ::android::hardware::radio::V1_0::TtyMode::OFF));
-static_assert(aidl::android::hardware::radio::TtyMode::FULL ==
-              static_cast<aidl::android::hardware::radio::TtyMode>(
-                      ::android::hardware::radio::V1_0::TtyMode::FULL));
-static_assert(aidl::android::hardware::radio::TtyMode::HCO ==
-              static_cast<aidl::android::hardware::radio::TtyMode>(
-                      ::android::hardware::radio::V1_0::TtyMode::HCO));
-static_assert(aidl::android::hardware::radio::TtyMode::VCO ==
-              static_cast<aidl::android::hardware::radio::TtyMode>(
-                      ::android::hardware::radio::V1_0::TtyMode::VCO));
-
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_MEID ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_MEID));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_MIN ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_MIN));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_MDN ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_MDN));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_ACCOLC ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_ACCOLC));
-static_assert(aidl::android::hardware::radio::NvItem::DEVICE_MSL ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::DEVICE_MSL));
-static_assert(aidl::android::hardware::radio::NvItem::RTN_RECONDITIONED_STATUS ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::RTN_RECONDITIONED_STATUS));
-static_assert(aidl::android::hardware::radio::NvItem::RTN_ACTIVATION_DATE ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::RTN_ACTIVATION_DATE));
-static_assert(aidl::android::hardware::radio::NvItem::RTN_LIFE_TIMER ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::RTN_LIFE_TIMER));
-static_assert(aidl::android::hardware::radio::NvItem::RTN_LIFE_CALLS ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::RTN_LIFE_CALLS));
-static_assert(aidl::android::hardware::radio::NvItem::RTN_LIFE_DATA_TX ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::RTN_LIFE_DATA_TX));
-static_assert(aidl::android::hardware::radio::NvItem::RTN_LIFE_DATA_RX ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::RTN_LIFE_DATA_RX));
-static_assert(aidl::android::hardware::radio::NvItem::OMADM_HFA_LEVEL ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::OMADM_HFA_LEVEL));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_NAI ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_NAI));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_HOME_ADDRESS ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_HOME_ADDRESS));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_AAA_AUTH ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_AAA_AUTH));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_HA_AUTH ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_HA_AUTH));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_PRI_HA_ADDR ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_PRI_HA_ADDR));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_SEC_HA_ADDR ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_SEC_HA_ADDR));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_REV_TUN_PREF ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_REV_TUN_PREF));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_HA_SPI ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_HA_SPI));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_AAA_SPI ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_AAA_SPI));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_MN_HA_SS ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_MN_HA_SS));
-static_assert(aidl::android::hardware::radio::NvItem::MIP_PROFILE_MN_AAA_SS ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::MIP_PROFILE_MN_AAA_SS));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_PRL_VERSION ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_PRL_VERSION));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_BC10 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_BC10));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_BC14 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_BC14));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_SO68 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_SO68));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_SO73_COP0 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_SO73_COP0));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_SO73_COP1TO7 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_SO73_COP1TO7));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_1X_ADVANCED_ENABLED ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_1X_ADVANCED_ENABLED));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_EHRPD_ENABLED ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_EHRPD_ENABLED));
-static_assert(aidl::android::hardware::radio::NvItem::CDMA_EHRPD_FORCED ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::CDMA_EHRPD_FORCED));
-static_assert(aidl::android::hardware::radio::NvItem::LTE_BAND_ENABLE_25 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::LTE_BAND_ENABLE_25));
-static_assert(aidl::android::hardware::radio::NvItem::LTE_BAND_ENABLE_26 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::LTE_BAND_ENABLE_26));
-static_assert(aidl::android::hardware::radio::NvItem::LTE_BAND_ENABLE_41 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::LTE_BAND_ENABLE_41));
-static_assert(aidl::android::hardware::radio::NvItem::LTE_SCAN_PRIORITY_25 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::LTE_SCAN_PRIORITY_25));
-static_assert(aidl::android::hardware::radio::NvItem::LTE_SCAN_PRIORITY_26 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::LTE_SCAN_PRIORITY_26));
-static_assert(aidl::android::hardware::radio::NvItem::LTE_SCAN_PRIORITY_41 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::LTE_SCAN_PRIORITY_41));
-static_assert(aidl::android::hardware::radio::NvItem::LTE_HIDDEN_BAND_PRIORITY_25 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::LTE_HIDDEN_BAND_PRIORITY_25));
-static_assert(aidl::android::hardware::radio::NvItem::LTE_HIDDEN_BAND_PRIORITY_26 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::LTE_HIDDEN_BAND_PRIORITY_26));
-static_assert(aidl::android::hardware::radio::NvItem::LTE_HIDDEN_BAND_PRIORITY_41 ==
-              static_cast<aidl::android::hardware::radio::NvItem>(
-                      ::android::hardware::radio::V1_0::NvItem::LTE_HIDDEN_BAND_PRIORITY_41));
-
-static_assert(aidl::android::hardware::radio::ResetNvType::RELOAD ==
-              static_cast<aidl::android::hardware::radio::ResetNvType>(
-                      ::android::hardware::radio::V1_0::ResetNvType::RELOAD));
-static_assert(aidl::android::hardware::radio::ResetNvType::ERASE ==
-              static_cast<aidl::android::hardware::radio::ResetNvType>(
-                      ::android::hardware::radio::V1_0::ResetNvType::ERASE));
-static_assert(aidl::android::hardware::radio::ResetNvType::FACTORY_RESET ==
-              static_cast<aidl::android::hardware::radio::ResetNvType>(
-                      ::android::hardware::radio::V1_0::ResetNvType::FACTORY_RESET));
-
-static_assert(aidl::android::hardware::radio::HardwareConfigState::ENABLED ==
-              static_cast<aidl::android::hardware::radio::HardwareConfigState>(
-                      ::android::hardware::radio::V1_0::HardwareConfigState::ENABLED));
-static_assert(aidl::android::hardware::radio::HardwareConfigState::STANDBY ==
-              static_cast<aidl::android::hardware::radio::HardwareConfigState>(
-                      ::android::hardware::radio::V1_0::HardwareConfigState::STANDBY));
-static_assert(aidl::android::hardware::radio::HardwareConfigState::DISABLED ==
-              static_cast<aidl::android::hardware::radio::HardwareConfigState>(
-                      ::android::hardware::radio::V1_0::HardwareConfigState::DISABLED));
-
-static_assert(aidl::android::hardware::radio::LceStatus::NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::LceStatus>(
-                      ::android::hardware::radio::V1_0::LceStatus::NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::LceStatus::STOPPED ==
-              static_cast<aidl::android::hardware::radio::LceStatus>(
-                      ::android::hardware::radio::V1_0::LceStatus::STOPPED));
-static_assert(aidl::android::hardware::radio::LceStatus::ACTIVE ==
-              static_cast<aidl::android::hardware::radio::LceStatus>(
-                      ::android::hardware::radio::V1_0::LceStatus::ACTIVE));
-
-static_assert(aidl::android::hardware::radio::CarrierMatchType::ALL ==
-              static_cast<aidl::android::hardware::radio::CarrierMatchType>(
-                      ::android::hardware::radio::V1_0::CarrierMatchType::ALL));
-static_assert(aidl::android::hardware::radio::CarrierMatchType::SPN ==
-              static_cast<aidl::android::hardware::radio::CarrierMatchType>(
-                      ::android::hardware::radio::V1_0::CarrierMatchType::SPN));
-static_assert(aidl::android::hardware::radio::CarrierMatchType::IMSI_PREFIX ==
-              static_cast<aidl::android::hardware::radio::CarrierMatchType>(
-                      ::android::hardware::radio::V1_0::CarrierMatchType::IMSI_PREFIX));
-static_assert(aidl::android::hardware::radio::CarrierMatchType::GID1 ==
-              static_cast<aidl::android::hardware::radio::CarrierMatchType>(
-                      ::android::hardware::radio::V1_0::CarrierMatchType::GID1));
-static_assert(aidl::android::hardware::radio::CarrierMatchType::GID2 ==
-              static_cast<aidl::android::hardware::radio::CarrierMatchType>(
-                      ::android::hardware::radio::V1_0::CarrierMatchType::GID2));
-
-static_assert(aidl::android::hardware::radio::CdmaSmsDigitMode::FOUR_BIT ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsDigitMode>(
-                      ::android::hardware::radio::V1_0::CdmaSmsDigitMode::FOUR_BIT));
-static_assert(aidl::android::hardware::radio::CdmaSmsDigitMode::EIGHT_BIT ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsDigitMode>(
-                      ::android::hardware::radio::V1_0::CdmaSmsDigitMode::EIGHT_BIT));
-
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberMode::NOT_DATA_NETWORK ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberMode>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberMode::NOT_DATA_NETWORK));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberMode::DATA_NETWORK ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberMode>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberMode::DATA_NETWORK));
-
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberType::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberType::UNKNOWN));
-static_assert(
-        aidl::android::hardware::radio::CdmaSmsNumberType::INTERNATIONAL_OR_DATA_IP ==
-        static_cast<aidl::android::hardware::radio::CdmaSmsNumberType>(
-                ::android::hardware::radio::V1_0::CdmaSmsNumberType::INTERNATIONAL_OR_DATA_IP));
-static_assert(
-        aidl::android::hardware::radio::CdmaSmsNumberType::NATIONAL_OR_INTERNET_MAIL ==
-        static_cast<aidl::android::hardware::radio::CdmaSmsNumberType>(
-                ::android::hardware::radio::V1_0::CdmaSmsNumberType::NATIONAL_OR_INTERNET_MAIL));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberType::NETWORK ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberType::NETWORK));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberType::SUBSCRIBER ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberType::SUBSCRIBER));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberType::ALPHANUMERIC ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberType::ALPHANUMERIC));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberType::ABBREVIATED ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberType::ABBREVIATED));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberType::RESERVED_7 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberType::RESERVED_7));
-
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::UNKNOWN));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::TELEPHONY ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::TELEPHONY));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_2 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_2));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::DATA ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::DATA));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::TELEX ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::TELEX));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_5 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_5));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_6 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_6));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_7 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_7));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_8 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_8));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::PRIVATE ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::PRIVATE));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_10 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_10));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_11 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_11));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_12 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_12));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_13 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_13));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_14 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_14));
-static_assert(aidl::android::hardware::radio::CdmaSmsNumberPlan::RESERVED_15 ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaSmsNumberPlan::RESERVED_15));
-
-static_assert(aidl::android::hardware::radio::CdmaSmsSubaddressType::NSAP ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsSubaddressType>(
-                      ::android::hardware::radio::V1_0::CdmaSmsSubaddressType::NSAP));
-static_assert(aidl::android::hardware::radio::CdmaSmsSubaddressType::USER_SPECIFIED ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsSubaddressType>(
-                      ::android::hardware::radio::V1_0::CdmaSmsSubaddressType::USER_SPECIFIED));
-
-static_assert(aidl::android::hardware::radio::CdmaSmsErrorClass::NO_ERROR ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsErrorClass>(
-                      ::android::hardware::radio::V1_0::CdmaSmsErrorClass::NO_ERROR));
-static_assert(aidl::android::hardware::radio::CdmaSmsErrorClass::ERROR ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsErrorClass>(
-                      ::android::hardware::radio::V1_0::CdmaSmsErrorClass::ERROR));
-
-static_assert(aidl::android::hardware::radio::CdmaSmsWriteArgsStatus::REC_UNREAD ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsWriteArgsStatus>(
-                      ::android::hardware::radio::V1_0::CdmaSmsWriteArgsStatus::REC_UNREAD));
-static_assert(aidl::android::hardware::radio::CdmaSmsWriteArgsStatus::REC_READ ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsWriteArgsStatus>(
-                      ::android::hardware::radio::V1_0::CdmaSmsWriteArgsStatus::REC_READ));
-static_assert(aidl::android::hardware::radio::CdmaSmsWriteArgsStatus::STO_UNSENT ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsWriteArgsStatus>(
-                      ::android::hardware::radio::V1_0::CdmaSmsWriteArgsStatus::STO_UNSENT));
-static_assert(aidl::android::hardware::radio::CdmaSmsWriteArgsStatus::STO_SENT ==
-              static_cast<aidl::android::hardware::radio::CdmaSmsWriteArgsStatus>(
-                      ::android::hardware::radio::V1_0::CdmaSmsWriteArgsStatus::STO_SENT));
-
-static_assert(aidl::android::hardware::radio::CellInfoType::NONE ==
-              static_cast<aidl::android::hardware::radio::CellInfoType>(
-                      ::android::hardware::radio::V1_0::CellInfoType::NONE));
-static_assert(aidl::android::hardware::radio::CellInfoType::GSM ==
-              static_cast<aidl::android::hardware::radio::CellInfoType>(
-                      ::android::hardware::radio::V1_0::CellInfoType::GSM));
-static_assert(aidl::android::hardware::radio::CellInfoType::CDMA ==
-              static_cast<aidl::android::hardware::radio::CellInfoType>(
-                      ::android::hardware::radio::V1_0::CellInfoType::CDMA));
-static_assert(aidl::android::hardware::radio::CellInfoType::LTE ==
-              static_cast<aidl::android::hardware::radio::CellInfoType>(
-                      ::android::hardware::radio::V1_0::CellInfoType::LTE));
-static_assert(aidl::android::hardware::radio::CellInfoType::WCDMA ==
-              static_cast<aidl::android::hardware::radio::CellInfoType>(
-                      ::android::hardware::radio::V1_0::CellInfoType::WCDMA));
-static_assert(aidl::android::hardware::radio::CellInfoType::TD_SCDMA ==
-              static_cast<aidl::android::hardware::radio::CellInfoType>(
-                      ::android::hardware::radio::V1_0::CellInfoType::TD_SCDMA));
-
-static_assert(aidl::android::hardware::radio::TimeStampType::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::TimeStampType>(
-                      ::android::hardware::radio::V1_0::TimeStampType::UNKNOWN));
-static_assert(aidl::android::hardware::radio::TimeStampType::ANTENNA ==
-              static_cast<aidl::android::hardware::radio::TimeStampType>(
-                      ::android::hardware::radio::V1_0::TimeStampType::ANTENNA));
-static_assert(aidl::android::hardware::radio::TimeStampType::MODEM ==
-              static_cast<aidl::android::hardware::radio::TimeStampType>(
-                      ::android::hardware::radio::V1_0::TimeStampType::MODEM));
-static_assert(aidl::android::hardware::radio::TimeStampType::OEM_RIL ==
-              static_cast<aidl::android::hardware::radio::TimeStampType>(
-                      ::android::hardware::radio::V1_0::TimeStampType::OEM_RIL));
-static_assert(aidl::android::hardware::radio::TimeStampType::JAVA_RIL ==
-              static_cast<aidl::android::hardware::radio::TimeStampType>(
-                      ::android::hardware::radio::V1_0::TimeStampType::JAVA_RIL));
-
-static_assert(aidl::android::hardware::radio::ApnAuthType::NO_PAP_NO_CHAP ==
-              static_cast<aidl::android::hardware::radio::ApnAuthType>(
-                      ::android::hardware::radio::V1_0::ApnAuthType::NO_PAP_NO_CHAP));
-static_assert(aidl::android::hardware::radio::ApnAuthType::PAP_NO_CHAP ==
-              static_cast<aidl::android::hardware::radio::ApnAuthType>(
-                      ::android::hardware::radio::V1_0::ApnAuthType::PAP_NO_CHAP));
-static_assert(aidl::android::hardware::radio::ApnAuthType::NO_PAP_CHAP ==
-              static_cast<aidl::android::hardware::radio::ApnAuthType>(
-                      ::android::hardware::radio::V1_0::ApnAuthType::NO_PAP_CHAP));
-static_assert(aidl::android::hardware::radio::ApnAuthType::PAP_CHAP ==
-              static_cast<aidl::android::hardware::radio::ApnAuthType>(
-                      ::android::hardware::radio::V1_0::ApnAuthType::PAP_CHAP));
-
-static_assert(aidl::android::hardware::radio::RadioTechnologyFamily::THREE_GPP ==
-              static_cast<aidl::android::hardware::radio::RadioTechnologyFamily>(
-                      ::android::hardware::radio::V1_0::RadioTechnologyFamily::THREE_GPP));
-static_assert(aidl::android::hardware::radio::RadioTechnologyFamily::THREE_GPP2 ==
-              static_cast<aidl::android::hardware::radio::RadioTechnologyFamily>(
-                      ::android::hardware::radio::V1_0::RadioTechnologyFamily::THREE_GPP2));
-
-static_assert(aidl::android::hardware::radio::RadioCapabilityPhase::CONFIGURED ==
-              static_cast<aidl::android::hardware::radio::RadioCapabilityPhase>(
-                      ::android::hardware::radio::V1_0::RadioCapabilityPhase::CONFIGURED));
-static_assert(aidl::android::hardware::radio::RadioCapabilityPhase::START ==
-              static_cast<aidl::android::hardware::radio::RadioCapabilityPhase>(
-                      ::android::hardware::radio::V1_0::RadioCapabilityPhase::START));
-static_assert(aidl::android::hardware::radio::RadioCapabilityPhase::APPLY ==
-              static_cast<aidl::android::hardware::radio::RadioCapabilityPhase>(
-                      ::android::hardware::radio::V1_0::RadioCapabilityPhase::APPLY));
-static_assert(aidl::android::hardware::radio::RadioCapabilityPhase::UNSOL_RSP ==
-              static_cast<aidl::android::hardware::radio::RadioCapabilityPhase>(
-                      ::android::hardware::radio::V1_0::RadioCapabilityPhase::UNSOL_RSP));
-static_assert(aidl::android::hardware::radio::RadioCapabilityPhase::FINISH ==
-              static_cast<aidl::android::hardware::radio::RadioCapabilityPhase>(
-                      ::android::hardware::radio::V1_0::RadioCapabilityPhase::FINISH));
-
-static_assert(aidl::android::hardware::radio::RadioCapabilityStatus::NONE ==
-              static_cast<aidl::android::hardware::radio::RadioCapabilityStatus>(
-                      ::android::hardware::radio::V1_0::RadioCapabilityStatus::NONE));
-static_assert(aidl::android::hardware::radio::RadioCapabilityStatus::SUCCESS ==
-              static_cast<aidl::android::hardware::radio::RadioCapabilityStatus>(
-                      ::android::hardware::radio::V1_0::RadioCapabilityStatus::SUCCESS));
-static_assert(aidl::android::hardware::radio::RadioCapabilityStatus::FAIL ==
-              static_cast<aidl::android::hardware::radio::RadioCapabilityStatus>(
-                      ::android::hardware::radio::V1_0::RadioCapabilityStatus::FAIL));
-
-static_assert(aidl::android::hardware::radio::UssdModeType::NOTIFY ==
-              static_cast<aidl::android::hardware::radio::UssdModeType>(
-                      ::android::hardware::radio::V1_0::UssdModeType::NOTIFY));
-static_assert(aidl::android::hardware::radio::UssdModeType::REQUEST ==
-              static_cast<aidl::android::hardware::radio::UssdModeType>(
-                      ::android::hardware::radio::V1_0::UssdModeType::REQUEST));
-static_assert(aidl::android::hardware::radio::UssdModeType::NW_RELEASE ==
-              static_cast<aidl::android::hardware::radio::UssdModeType>(
-                      ::android::hardware::radio::V1_0::UssdModeType::NW_RELEASE));
-static_assert(aidl::android::hardware::radio::UssdModeType::LOCAL_CLIENT ==
-              static_cast<aidl::android::hardware::radio::UssdModeType>(
-                      ::android::hardware::radio::V1_0::UssdModeType::LOCAL_CLIENT));
-static_assert(aidl::android::hardware::radio::UssdModeType::NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::UssdModeType>(
-                      ::android::hardware::radio::V1_0::UssdModeType::NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::UssdModeType::NW_TIMEOUT ==
-              static_cast<aidl::android::hardware::radio::UssdModeType>(
-                      ::android::hardware::radio::V1_0::UssdModeType::NW_TIMEOUT));
-
-static_assert(aidl::android::hardware::radio::SimRefreshType::SIM_FILE_UPDATE ==
-              static_cast<aidl::android::hardware::radio::SimRefreshType>(
-                      ::android::hardware::radio::V1_0::SimRefreshType::SIM_FILE_UPDATE));
-static_assert(aidl::android::hardware::radio::SimRefreshType::SIM_INIT ==
-              static_cast<aidl::android::hardware::radio::SimRefreshType>(
-                      ::android::hardware::radio::V1_0::SimRefreshType::SIM_INIT));
-static_assert(aidl::android::hardware::radio::SimRefreshType::SIM_RESET ==
-              static_cast<aidl::android::hardware::radio::SimRefreshType>(
-                      ::android::hardware::radio::V1_0::SimRefreshType::SIM_RESET));
-
-static_assert(aidl::android::hardware::radio::SrvccState::HANDOVER_STARTED ==
-              static_cast<aidl::android::hardware::radio::SrvccState>(
-                      ::android::hardware::radio::V1_0::SrvccState::HANDOVER_STARTED));
-static_assert(aidl::android::hardware::radio::SrvccState::HANDOVER_COMPLETED ==
-              static_cast<aidl::android::hardware::radio::SrvccState>(
-                      ::android::hardware::radio::V1_0::SrvccState::HANDOVER_COMPLETED));
-static_assert(aidl::android::hardware::radio::SrvccState::HANDOVER_FAILED ==
-              static_cast<aidl::android::hardware::radio::SrvccState>(
-                      ::android::hardware::radio::V1_0::SrvccState::HANDOVER_FAILED));
-static_assert(aidl::android::hardware::radio::SrvccState::HANDOVER_CANCELED ==
-              static_cast<aidl::android::hardware::radio::SrvccState>(
-                      ::android::hardware::radio::V1_0::SrvccState::HANDOVER_CANCELED));
-
-static_assert(aidl::android::hardware::radio::UiccSubActStatus::DEACTIVATE ==
-              static_cast<aidl::android::hardware::radio::UiccSubActStatus>(
-                      ::android::hardware::radio::V1_0::UiccSubActStatus::DEACTIVATE));
-static_assert(aidl::android::hardware::radio::UiccSubActStatus::ACTIVATE ==
-              static_cast<aidl::android::hardware::radio::UiccSubActStatus>(
-                      ::android::hardware::radio::V1_0::UiccSubActStatus::ACTIVATE));
-
-static_assert(aidl::android::hardware::radio::SubscriptionType::SUBSCRIPTION_1 ==
-              static_cast<aidl::android::hardware::radio::SubscriptionType>(
-                      ::android::hardware::radio::V1_0::SubscriptionType::SUBSCRIPTION_1));
-static_assert(aidl::android::hardware::radio::SubscriptionType::SUBSCRIPTION_2 ==
-              static_cast<aidl::android::hardware::radio::SubscriptionType>(
-                      ::android::hardware::radio::V1_0::SubscriptionType::SUBSCRIPTION_2));
-static_assert(aidl::android::hardware::radio::SubscriptionType::SUBSCRIPTION_3 ==
-              static_cast<aidl::android::hardware::radio::SubscriptionType>(
-                      ::android::hardware::radio::V1_0::SubscriptionType::SUBSCRIPTION_3));
-
-static_assert(aidl::android::hardware::radio::DataProfileInfoType::COMMON ==
-              static_cast<aidl::android::hardware::radio::DataProfileInfoType>(
-                      ::android::hardware::radio::V1_0::DataProfileInfoType::COMMON));
-static_assert(aidl::android::hardware::radio::DataProfileInfoType::THREE_GPP ==
-              static_cast<aidl::android::hardware::radio::DataProfileInfoType>(
-                      ::android::hardware::radio::V1_0::DataProfileInfoType::THREE_GPP));
-static_assert(aidl::android::hardware::radio::DataProfileInfoType::THREE_GPP2 ==
-              static_cast<aidl::android::hardware::radio::DataProfileInfoType>(
-                      ::android::hardware::radio::V1_0::DataProfileInfoType::THREE_GPP2));
-
-static_assert(aidl::android::hardware::radio::PhoneRestrictedState::NONE ==
-              static_cast<aidl::android::hardware::radio::PhoneRestrictedState>(
-                      ::android::hardware::radio::V1_0::PhoneRestrictedState::NONE));
-static_assert(aidl::android::hardware::radio::PhoneRestrictedState::CS_EMERGENCY ==
-              static_cast<aidl::android::hardware::radio::PhoneRestrictedState>(
-                      ::android::hardware::radio::V1_0::PhoneRestrictedState::CS_EMERGENCY));
-static_assert(aidl::android::hardware::radio::PhoneRestrictedState::CS_NORMAL ==
-              static_cast<aidl::android::hardware::radio::PhoneRestrictedState>(
-                      ::android::hardware::radio::V1_0::PhoneRestrictedState::CS_NORMAL));
-static_assert(aidl::android::hardware::radio::PhoneRestrictedState::CS_ALL ==
-              static_cast<aidl::android::hardware::radio::PhoneRestrictedState>(
-                      ::android::hardware::radio::V1_0::PhoneRestrictedState::CS_ALL));
-static_assert(aidl::android::hardware::radio::PhoneRestrictedState::PS_ALL ==
-              static_cast<aidl::android::hardware::radio::PhoneRestrictedState>(
-                      ::android::hardware::radio::V1_0::PhoneRestrictedState::PS_ALL));
-
-static_assert(
-        aidl::android::hardware::radio::CdmaCallWaitingNumberPresentation::ALLOWED ==
-        static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPresentation>(
-                ::android::hardware::radio::V1_0::CdmaCallWaitingNumberPresentation::ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::CdmaCallWaitingNumberPresentation::RESTRICTED ==
-        static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPresentation>(
-                ::android::hardware::radio::V1_0::CdmaCallWaitingNumberPresentation::RESTRICTED));
-static_assert(
-        aidl::android::hardware::radio::CdmaCallWaitingNumberPresentation::UNKNOWN ==
-        static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPresentation>(
-                ::android::hardware::radio::V1_0::CdmaCallWaitingNumberPresentation::UNKNOWN));
-
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberType::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberType::UNKNOWN));
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberType::INTERNATIONAL ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberType::INTERNATIONAL));
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberType::NATIONAL ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberType::NATIONAL));
-static_assert(
-        aidl::android::hardware::radio::CdmaCallWaitingNumberType::NETWORK_SPECIFIC ==
-        static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberType>(
-                ::android::hardware::radio::V1_0::CdmaCallWaitingNumberType::NETWORK_SPECIFIC));
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberType::SUBSCRIBER ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberType>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberType::SUBSCRIBER));
-
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberPlan::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberPlan::UNKNOWN));
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberPlan::ISDN ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberPlan::ISDN));
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberPlan::DATA ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberPlan::DATA));
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberPlan::TELEX ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberPlan::TELEX));
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberPlan::NATIONAL ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberPlan::NATIONAL));
-static_assert(aidl::android::hardware::radio::CdmaCallWaitingNumberPlan::PRIVATE ==
-              static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPlan>(
-                      ::android::hardware::radio::V1_0::CdmaCallWaitingNumberPlan::PRIVATE));
-
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::SPL_UNLOCKED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::SPL_UNLOCKED));
-static_assert(
-        aidl::android::hardware::radio::CdmaOtaProvisionStatus::SPC_RETRIES_EXCEEDED ==
-        static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::SPC_RETRIES_EXCEEDED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::A_KEY_EXCHANGED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::A_KEY_EXCHANGED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::SSD_UPDATED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::SSD_UPDATED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::NAM_DOWNLOADED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::NAM_DOWNLOADED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::MDN_DOWNLOADED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::MDN_DOWNLOADED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::IMSI_DOWNLOADED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::IMSI_DOWNLOADED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::PRL_DOWNLOADED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::PRL_DOWNLOADED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::COMMITTED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::COMMITTED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::OTAPA_STARTED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::OTAPA_STARTED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::OTAPA_STOPPED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::OTAPA_STOPPED));
-static_assert(aidl::android::hardware::radio::CdmaOtaProvisionStatus::OTAPA_ABORTED ==
-              static_cast<aidl::android::hardware::radio::CdmaOtaProvisionStatus>(
-                      ::android::hardware::radio::V1_0::CdmaOtaProvisionStatus::OTAPA_ABORTED));
-
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::DISPLAY ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::DISPLAY));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::CALLED_PARTY_NUMBER ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::CALLED_PARTY_NUMBER));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::CALLING_PARTY_NUMBER ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::CALLING_PARTY_NUMBER));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::CONNECTED_NUMBER ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::CONNECTED_NUMBER));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::SIGNAL ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::SIGNAL));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::REDIRECTING_NUMBER ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::REDIRECTING_NUMBER));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::LINE_CONTROL ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::LINE_CONTROL));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::EXTENDED_DISPLAY ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::EXTENDED_DISPLAY));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::T53_CLIR ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::T53_CLIR));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::T53_RELEASE ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::T53_RELEASE));
-static_assert(aidl::android::hardware::radio::CdmaInfoRecName::T53_AUDIO_CONTROL ==
-              static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(
-                      ::android::hardware::radio::V1_0::CdmaInfoRecName::T53_AUDIO_CONTROL));
-
-static_assert(aidl::android::hardware::radio::CdmaRedirectingReason::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::CdmaRedirectingReason>(
-                      ::android::hardware::radio::V1_0::CdmaRedirectingReason::UNKNOWN));
-static_assert(
-        aidl::android::hardware::radio::CdmaRedirectingReason::CALL_FORWARDING_BUSY ==
-        static_cast<aidl::android::hardware::radio::CdmaRedirectingReason>(
-                ::android::hardware::radio::V1_0::CdmaRedirectingReason::CALL_FORWARDING_BUSY));
-static_assert(
-        aidl::android::hardware::radio::CdmaRedirectingReason::CALL_FORWARDING_NO_REPLY ==
-        static_cast<aidl::android::hardware::radio::CdmaRedirectingReason>(
-                ::android::hardware::radio::V1_0::CdmaRedirectingReason::CALL_FORWARDING_NO_REPLY));
-static_assert(
-        aidl::android::hardware::radio::CdmaRedirectingReason::CALLED_DTE_OUT_OF_ORDER ==
-        static_cast<aidl::android::hardware::radio::CdmaRedirectingReason>(
-                ::android::hardware::radio::V1_0::CdmaRedirectingReason::CALLED_DTE_OUT_OF_ORDER));
-static_assert(
-        aidl::android::hardware::radio::CdmaRedirectingReason::CALL_FORWARDING_BY_THE_CALLED_DTE ==
-        static_cast<aidl::android::hardware::radio::CdmaRedirectingReason>(
-                ::android::hardware::radio::V1_0::CdmaRedirectingReason::
-                        CALL_FORWARDING_BY_THE_CALLED_DTE));
-static_assert(
-        aidl::android::hardware::radio::CdmaRedirectingReason::CALL_FORWARDING_UNCONDITIONAL ==
-        static_cast<aidl::android::hardware::radio::CdmaRedirectingReason>(
-                ::android::hardware::radio::V1_0::CdmaRedirectingReason::
-                        CALL_FORWARDING_UNCONDITIONAL));
-static_assert(aidl::android::hardware::radio::CdmaRedirectingReason::RESERVED ==
-              static_cast<aidl::android::hardware::radio::CdmaRedirectingReason>(
-                      ::android::hardware::radio::V1_0::CdmaRedirectingReason::RESERVED));
-
-static_assert(aidl::android::hardware::radio::SsServiceType::CFU ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::CFU));
-static_assert(aidl::android::hardware::radio::SsServiceType::CF_BUSY ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::CF_BUSY));
-static_assert(aidl::android::hardware::radio::SsServiceType::CF_NO_REPLY ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::CF_NO_REPLY));
-static_assert(aidl::android::hardware::radio::SsServiceType::CF_NOT_REACHABLE ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::CF_NOT_REACHABLE));
-static_assert(aidl::android::hardware::radio::SsServiceType::CF_ALL ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::CF_ALL));
-static_assert(aidl::android::hardware::radio::SsServiceType::CF_ALL_CONDITIONAL ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::CF_ALL_CONDITIONAL));
-static_assert(aidl::android::hardware::radio::SsServiceType::CLIP ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::CLIP));
-static_assert(aidl::android::hardware::radio::SsServiceType::CLIR ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::CLIR));
-static_assert(aidl::android::hardware::radio::SsServiceType::COLP ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::COLP));
-static_assert(aidl::android::hardware::radio::SsServiceType::COLR ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::COLR));
-static_assert(aidl::android::hardware::radio::SsServiceType::WAIT ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::WAIT));
-static_assert(aidl::android::hardware::radio::SsServiceType::BAOC ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::BAOC));
-static_assert(aidl::android::hardware::radio::SsServiceType::BAOIC ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::BAOIC));
-static_assert(aidl::android::hardware::radio::SsServiceType::BAOIC_EXC_HOME ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::BAOIC_EXC_HOME));
-static_assert(aidl::android::hardware::radio::SsServiceType::BAIC ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::BAIC));
-static_assert(aidl::android::hardware::radio::SsServiceType::BAIC_ROAMING ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::BAIC_ROAMING));
-static_assert(aidl::android::hardware::radio::SsServiceType::ALL_BARRING ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::ALL_BARRING));
-static_assert(aidl::android::hardware::radio::SsServiceType::OUTGOING_BARRING ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::OUTGOING_BARRING));
-static_assert(aidl::android::hardware::radio::SsServiceType::INCOMING_BARRING ==
-              static_cast<aidl::android::hardware::radio::SsServiceType>(
-                      ::android::hardware::radio::V1_0::SsServiceType::INCOMING_BARRING));
-
-static_assert(aidl::android::hardware::radio::SsRequestType::ACTIVATION ==
-              static_cast<aidl::android::hardware::radio::SsRequestType>(
-                      ::android::hardware::radio::V1_0::SsRequestType::ACTIVATION));
-static_assert(aidl::android::hardware::radio::SsRequestType::DEACTIVATION ==
-              static_cast<aidl::android::hardware::radio::SsRequestType>(
-                      ::android::hardware::radio::V1_0::SsRequestType::DEACTIVATION));
-static_assert(aidl::android::hardware::radio::SsRequestType::INTERROGATION ==
-              static_cast<aidl::android::hardware::radio::SsRequestType>(
-                      ::android::hardware::radio::V1_0::SsRequestType::INTERROGATION));
-static_assert(aidl::android::hardware::radio::SsRequestType::REGISTRATION ==
-              static_cast<aidl::android::hardware::radio::SsRequestType>(
-                      ::android::hardware::radio::V1_0::SsRequestType::REGISTRATION));
-static_assert(aidl::android::hardware::radio::SsRequestType::ERASURE ==
-              static_cast<aidl::android::hardware::radio::SsRequestType>(
-                      ::android::hardware::radio::V1_0::SsRequestType::ERASURE));
-
-static_assert(
-        aidl::android::hardware::radio::SsTeleserviceType::ALL_TELE_AND_BEARER_SERVICES ==
-        static_cast<aidl::android::hardware::radio::SsTeleserviceType>(
-                ::android::hardware::radio::V1_0::SsTeleserviceType::ALL_TELE_AND_BEARER_SERVICES));
-static_assert(aidl::android::hardware::radio::SsTeleserviceType::ALL_TELESEVICES ==
-              static_cast<aidl::android::hardware::radio::SsTeleserviceType>(
-                      ::android::hardware::radio::V1_0::SsTeleserviceType::ALL_TELESEVICES));
-static_assert(aidl::android::hardware::radio::SsTeleserviceType::TELEPHONY ==
-              static_cast<aidl::android::hardware::radio::SsTeleserviceType>(
-                      ::android::hardware::radio::V1_0::SsTeleserviceType::TELEPHONY));
-static_assert(aidl::android::hardware::radio::SsTeleserviceType::ALL_DATA_TELESERVICES ==
-              static_cast<aidl::android::hardware::radio::SsTeleserviceType>(
-                      ::android::hardware::radio::V1_0::SsTeleserviceType::ALL_DATA_TELESERVICES));
-static_assert(aidl::android::hardware::radio::SsTeleserviceType::SMS_SERVICES ==
-              static_cast<aidl::android::hardware::radio::SsTeleserviceType>(
-                      ::android::hardware::radio::V1_0::SsTeleserviceType::SMS_SERVICES));
-static_assert(
-        aidl::android::hardware::radio::SsTeleserviceType::ALL_TELESERVICES_EXCEPT_SMS ==
-        static_cast<aidl::android::hardware::radio::SsTeleserviceType>(
-                ::android::hardware::radio::V1_0::SsTeleserviceType::ALL_TELESERVICES_EXCEPT_SMS));
-
-static_assert(aidl::android::hardware::radio::SuppServiceClass::NONE ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::NONE));
-static_assert(aidl::android::hardware::radio::SuppServiceClass::VOICE ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::VOICE));
-static_assert(aidl::android::hardware::radio::SuppServiceClass::DATA ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::DATA));
-static_assert(aidl::android::hardware::radio::SuppServiceClass::FAX ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::FAX));
-static_assert(aidl::android::hardware::radio::SuppServiceClass::SMS ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::SMS));
-static_assert(aidl::android::hardware::radio::SuppServiceClass::DATA_SYNC ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::DATA_SYNC));
-static_assert(aidl::android::hardware::radio::SuppServiceClass::DATA_ASYNC ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::DATA_ASYNC));
-static_assert(aidl::android::hardware::radio::SuppServiceClass::PACKET ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::PACKET));
-static_assert(aidl::android::hardware::radio::SuppServiceClass::PAD ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::PAD));
-static_assert(aidl::android::hardware::radio::SuppServiceClass::MAX ==
-              static_cast<aidl::android::hardware::radio::SuppServiceClass>(
-                      ::android::hardware::radio::V1_0::SuppServiceClass::MAX));
-
-static_assert(aidl::android::hardware::radio::MvnoType::NONE ==
-              static_cast<aidl::android::hardware::radio::MvnoType>(
-                      ::android::hardware::radio::V1_0::MvnoType::NONE));
-static_assert(aidl::android::hardware::radio::MvnoType::IMSI ==
-              static_cast<aidl::android::hardware::radio::MvnoType>(
-                      ::android::hardware::radio::V1_0::MvnoType::IMSI));
-static_assert(aidl::android::hardware::radio::MvnoType::GID ==
-              static_cast<aidl::android::hardware::radio::MvnoType>(
-                      ::android::hardware::radio::V1_0::MvnoType::GID));
-static_assert(aidl::android::hardware::radio::MvnoType::SPN ==
-              static_cast<aidl::android::hardware::radio::MvnoType>(
-                      ::android::hardware::radio::V1_0::MvnoType::SPN));
-
-static_assert(aidl::android::hardware::radio::DeviceStateType::POWER_SAVE_MODE ==
-              static_cast<aidl::android::hardware::radio::DeviceStateType>(
-                      ::android::hardware::radio::V1_0::DeviceStateType::POWER_SAVE_MODE));
-static_assert(aidl::android::hardware::radio::DeviceStateType::CHARGING_STATE ==
-              static_cast<aidl::android::hardware::radio::DeviceStateType>(
-                      ::android::hardware::radio::V1_0::DeviceStateType::CHARGING_STATE));
-static_assert(aidl::android::hardware::radio::DeviceStateType::LOW_DATA_EXPECTED ==
-              static_cast<aidl::android::hardware::radio::DeviceStateType>(
-                      ::android::hardware::radio::V1_0::DeviceStateType::LOW_DATA_EXPECTED));
-
-static_assert(aidl::android::hardware::radio::P2Constant::NO_P2 ==
-              static_cast<aidl::android::hardware::radio::P2Constant>(
-                      ::android::hardware::radio::V1_0::P2Constant::NO_P2));
-
-static_assert(aidl::android::hardware::radio::CardPowerState::POWER_DOWN ==
-              static_cast<aidl::android::hardware::radio::CardPowerState>(
-                      ::android::hardware::radio::V1_1::CardPowerState::POWER_DOWN));
-static_assert(aidl::android::hardware::radio::CardPowerState::POWER_UP ==
-              static_cast<aidl::android::hardware::radio::CardPowerState>(
-                      ::android::hardware::radio::V1_1::CardPowerState::POWER_UP));
-static_assert(aidl::android::hardware::radio::CardPowerState::POWER_UP_PASS_THROUGH ==
-              static_cast<aidl::android::hardware::radio::CardPowerState>(
-                      ::android::hardware::radio::V1_1::CardPowerState::POWER_UP_PASS_THROUGH));
-
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_T380 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_T380));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_T410 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_T410));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_450 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_450));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_480 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_480));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_710 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_710));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_750 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_750));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_T810 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_T810));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_850 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_850));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_P900 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_P900));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_E900 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_E900));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_R900 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_R900));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_DCS1800 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_DCS1800));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_PCS1900 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_PCS1900));
-static_assert(aidl::android::hardware::radio::GeranBands::BAND_ER900 ==
-              static_cast<aidl::android::hardware::radio::GeranBands>(
-                      ::android::hardware::radio::V1_1::GeranBands::BAND_ER900));
-
-static_assert(aidl::android::hardware::radio::ScanType::ONE_SHOT ==
-              static_cast<aidl::android::hardware::radio::ScanType>(
-                      ::android::hardware::radio::V1_1::ScanType::ONE_SHOT));
-static_assert(aidl::android::hardware::radio::ScanType::PERIODIC ==
-              static_cast<aidl::android::hardware::radio::ScanType>(
-                      ::android::hardware::radio::V1_1::ScanType::PERIODIC));
-
-static_assert(aidl::android::hardware::radio::ScanStatus::PARTIAL ==
-              static_cast<aidl::android::hardware::radio::ScanStatus>(
-                      ::android::hardware::radio::V1_1::ScanStatus::PARTIAL));
-static_assert(aidl::android::hardware::radio::ScanStatus::COMPLETE ==
-              static_cast<aidl::android::hardware::radio::ScanStatus>(
-                      ::android::hardware::radio::V1_1::ScanStatus::COMPLETE));
-
-static_assert(aidl::android::hardware::radio::KeepaliveType::NATT_IPV4 ==
-              static_cast<aidl::android::hardware::radio::KeepaliveType>(
-                      ::android::hardware::radio::V1_1::KeepaliveType::NATT_IPV4));
-static_assert(aidl::android::hardware::radio::KeepaliveType::NATT_IPV6 ==
-              static_cast<aidl::android::hardware::radio::KeepaliveType>(
-                      ::android::hardware::radio::V1_1::KeepaliveType::NATT_IPV6));
-
-static_assert(aidl::android::hardware::radio::KeepaliveStatusCode::ACTIVE ==
-              static_cast<aidl::android::hardware::radio::KeepaliveStatusCode>(
-                      ::android::hardware::radio::V1_1::KeepaliveStatusCode::ACTIVE));
-static_assert(aidl::android::hardware::radio::KeepaliveStatusCode::INACTIVE ==
-              static_cast<aidl::android::hardware::radio::KeepaliveStatusCode>(
-                      ::android::hardware::radio::V1_1::KeepaliveStatusCode::INACTIVE));
-static_assert(aidl::android::hardware::radio::KeepaliveStatusCode::PENDING ==
-              static_cast<aidl::android::hardware::radio::KeepaliveStatusCode>(
-                      ::android::hardware::radio::V1_1::KeepaliveStatusCode::PENDING));
-
-static_assert(aidl::android::hardware::radio::RadioConst::CDMA_ALPHA_INFO_BUFFER_LENGTH ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::CDMA_ALPHA_INFO_BUFFER_LENGTH));
-static_assert(
-        aidl::android::hardware::radio::RadioConst::CDMA_NUMBER_INFO_BUFFER_LENGTH ==
-        static_cast<aidl::android::hardware::radio::RadioConst>(
-                ::android::hardware::radio::V1_2::RadioConst::CDMA_NUMBER_INFO_BUFFER_LENGTH));
-static_assert(aidl::android::hardware::radio::RadioConst::MAX_RILDS ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::MAX_RILDS));
-static_assert(aidl::android::hardware::radio::RadioConst::MAX_SOCKET_NAME_LENGTH ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::MAX_SOCKET_NAME_LENGTH));
-static_assert(aidl::android::hardware::radio::RadioConst::MAX_CLIENT_ID_LENGTH ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::MAX_CLIENT_ID_LENGTH));
-static_assert(aidl::android::hardware::radio::RadioConst::MAX_DEBUG_SOCKET_NAME_LENGTH ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::MAX_DEBUG_SOCKET_NAME_LENGTH));
-static_assert(aidl::android::hardware::radio::RadioConst::MAX_QEMU_PIPE_NAME_LENGTH ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::MAX_QEMU_PIPE_NAME_LENGTH));
-static_assert(aidl::android::hardware::radio::RadioConst::MAX_UUID_LENGTH ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::MAX_UUID_LENGTH));
-static_assert(aidl::android::hardware::radio::RadioConst::CARD_MAX_APPS ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::CARD_MAX_APPS));
-static_assert(aidl::android::hardware::radio::RadioConst::CDMA_MAX_NUMBER_OF_INFO_RECS ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::CDMA_MAX_NUMBER_OF_INFO_RECS));
-static_assert(aidl::android::hardware::radio::RadioConst::SS_INFO_MAX ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::SS_INFO_MAX));
-static_assert(aidl::android::hardware::radio::RadioConst::NUM_SERVICE_CLASSES ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::NUM_SERVICE_CLASSES));
-static_assert(aidl::android::hardware::radio::RadioConst::NUM_TX_POWER_LEVELS ==
-              static_cast<aidl::android::hardware::radio::RadioConst>(
-                      ::android::hardware::radio::V1_2::RadioConst::NUM_TX_POWER_LEVELS));
-static_assert(
-        aidl::android::hardware::radio::RadioConst::RADIO_ACCESS_SPECIFIER_MAX_SIZE ==
-        static_cast<aidl::android::hardware::radio::RadioConst>(
-                ::android::hardware::radio::V1_2::RadioConst::RADIO_ACCESS_SPECIFIER_MAX_SIZE));
-
-static_assert(aidl::android::hardware::radio::ScanIntervalRange::MIN ==
-              static_cast<aidl::android::hardware::radio::ScanIntervalRange>(
-                      ::android::hardware::radio::V1_2::ScanIntervalRange::MIN));
-static_assert(aidl::android::hardware::radio::ScanIntervalRange::MAX ==
-              static_cast<aidl::android::hardware::radio::ScanIntervalRange>(
-                      ::android::hardware::radio::V1_2::ScanIntervalRange::MAX));
-
-static_assert(aidl::android::hardware::radio::MaxSearchTimeRange::MIN ==
-              static_cast<aidl::android::hardware::radio::MaxSearchTimeRange>(
-                      ::android::hardware::radio::V1_2::MaxSearchTimeRange::MIN));
-static_assert(aidl::android::hardware::radio::MaxSearchTimeRange::MAX ==
-              static_cast<aidl::android::hardware::radio::MaxSearchTimeRange>(
-                      ::android::hardware::radio::V1_2::MaxSearchTimeRange::MAX));
-
-static_assert(aidl::android::hardware::radio::IncrementalResultsPeriodicityRange::MIN ==
-              static_cast<aidl::android::hardware::radio::IncrementalResultsPeriodicityRange>(
-                      ::android::hardware::radio::V1_2::IncrementalResultsPeriodicityRange::MIN));
-static_assert(aidl::android::hardware::radio::IncrementalResultsPeriodicityRange::MAX ==
-              static_cast<aidl::android::hardware::radio::IncrementalResultsPeriodicityRange>(
-                      ::android::hardware::radio::V1_2::IncrementalResultsPeriodicityRange::MAX));
-
-static_assert(aidl::android::hardware::radio::CellConnectionStatus::NONE ==
-              static_cast<aidl::android::hardware::radio::CellConnectionStatus>(
-                      ::android::hardware::radio::V1_2::CellConnectionStatus::NONE));
-static_assert(aidl::android::hardware::radio::CellConnectionStatus::PRIMARY_SERVING ==
-              static_cast<aidl::android::hardware::radio::CellConnectionStatus>(
-                      ::android::hardware::radio::V1_2::CellConnectionStatus::PRIMARY_SERVING));
-static_assert(aidl::android::hardware::radio::CellConnectionStatus::SECONDARY_SERVING ==
-              static_cast<aidl::android::hardware::radio::CellConnectionStatus>(
-                      ::android::hardware::radio::V1_2::CellConnectionStatus::SECONDARY_SERVING));
-
-static_assert(aidl::android::hardware::radio::AudioQuality::UNSPECIFIED ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::UNSPECIFIED));
-static_assert(aidl::android::hardware::radio::AudioQuality::AMR ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::AMR));
-static_assert(aidl::android::hardware::radio::AudioQuality::AMR_WB ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::AMR_WB));
-static_assert(aidl::android::hardware::radio::AudioQuality::GSM_EFR ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::GSM_EFR));
-static_assert(aidl::android::hardware::radio::AudioQuality::GSM_FR ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::GSM_FR));
-static_assert(aidl::android::hardware::radio::AudioQuality::GSM_HR ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::GSM_HR));
-static_assert(aidl::android::hardware::radio::AudioQuality::EVRC ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::EVRC));
-static_assert(aidl::android::hardware::radio::AudioQuality::EVRC_B ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::EVRC_B));
-static_assert(aidl::android::hardware::radio::AudioQuality::EVRC_WB ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::EVRC_WB));
-static_assert(aidl::android::hardware::radio::AudioQuality::EVRC_NW ==
-              static_cast<aidl::android::hardware::radio::AudioQuality>(
-                      ::android::hardware::radio::V1_2::AudioQuality::EVRC_NW));
-
-static_assert(aidl::android::hardware::radio::DataRequestReason::NORMAL ==
-              static_cast<aidl::android::hardware::radio::DataRequestReason>(
-                      ::android::hardware::radio::V1_2::DataRequestReason::NORMAL));
-static_assert(aidl::android::hardware::radio::DataRequestReason::SHUTDOWN ==
-              static_cast<aidl::android::hardware::radio::DataRequestReason>(
-                      ::android::hardware::radio::V1_2::DataRequestReason::SHUTDOWN));
-static_assert(aidl::android::hardware::radio::DataRequestReason::HANDOVER ==
-              static_cast<aidl::android::hardware::radio::DataRequestReason>(
-                      ::android::hardware::radio::V1_2::DataRequestReason::HANDOVER));
-
-static_assert(aidl::android::hardware::radio::EmergencyServiceCategory::UNSPECIFIED ==
-              static_cast<aidl::android::hardware::radio::EmergencyServiceCategory>(
-                      ::android::hardware::radio::V1_4::EmergencyServiceCategory::UNSPECIFIED));
-static_assert(aidl::android::hardware::radio::EmergencyServiceCategory::POLICE ==
-              static_cast<aidl::android::hardware::radio::EmergencyServiceCategory>(
-                      ::android::hardware::radio::V1_4::EmergencyServiceCategory::POLICE));
-static_assert(aidl::android::hardware::radio::EmergencyServiceCategory::AMBULANCE ==
-              static_cast<aidl::android::hardware::radio::EmergencyServiceCategory>(
-                      ::android::hardware::radio::V1_4::EmergencyServiceCategory::AMBULANCE));
-static_assert(aidl::android::hardware::radio::EmergencyServiceCategory::FIRE_BRIGADE ==
-              static_cast<aidl::android::hardware::radio::EmergencyServiceCategory>(
-                      ::android::hardware::radio::V1_4::EmergencyServiceCategory::FIRE_BRIGADE));
-static_assert(aidl::android::hardware::radio::EmergencyServiceCategory::MARINE_GUARD ==
-              static_cast<aidl::android::hardware::radio::EmergencyServiceCategory>(
-                      ::android::hardware::radio::V1_4::EmergencyServiceCategory::MARINE_GUARD));
-static_assert(aidl::android::hardware::radio::EmergencyServiceCategory::MOUNTAIN_RESCUE ==
-              static_cast<aidl::android::hardware::radio::EmergencyServiceCategory>(
-                      ::android::hardware::radio::V1_4::EmergencyServiceCategory::MOUNTAIN_RESCUE));
-static_assert(aidl::android::hardware::radio::EmergencyServiceCategory::MIEC ==
-              static_cast<aidl::android::hardware::radio::EmergencyServiceCategory>(
-                      ::android::hardware::radio::V1_4::EmergencyServiceCategory::MIEC));
-static_assert(aidl::android::hardware::radio::EmergencyServiceCategory::AIEC ==
-              static_cast<aidl::android::hardware::radio::EmergencyServiceCategory>(
-                      ::android::hardware::radio::V1_4::EmergencyServiceCategory::AIEC));
-
-static_assert(aidl::android::hardware::radio::EmergencyNumberSource::NETWORK_SIGNALING ==
-              static_cast<aidl::android::hardware::radio::EmergencyNumberSource>(
-                      ::android::hardware::radio::V1_4::EmergencyNumberSource::NETWORK_SIGNALING));
-static_assert(aidl::android::hardware::radio::EmergencyNumberSource::SIM ==
-              static_cast<aidl::android::hardware::radio::EmergencyNumberSource>(
-                      ::android::hardware::radio::V1_4::EmergencyNumberSource::SIM));
-static_assert(aidl::android::hardware::radio::EmergencyNumberSource::MODEM_CONFIG ==
-              static_cast<aidl::android::hardware::radio::EmergencyNumberSource>(
-                      ::android::hardware::radio::V1_4::EmergencyNumberSource::MODEM_CONFIG));
-static_assert(aidl::android::hardware::radio::EmergencyNumberSource::DEFAULT ==
-              static_cast<aidl::android::hardware::radio::EmergencyNumberSource>(
-                      ::android::hardware::radio::V1_4::EmergencyNumberSource::DEFAULT));
-
-static_assert(aidl::android::hardware::radio::EmergencyCallRouting::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::EmergencyCallRouting>(
-                      ::android::hardware::radio::V1_4::EmergencyCallRouting::UNKNOWN));
-static_assert(aidl::android::hardware::radio::EmergencyCallRouting::EMERGENCY ==
-              static_cast<aidl::android::hardware::radio::EmergencyCallRouting>(
-                      ::android::hardware::radio::V1_4::EmergencyCallRouting::EMERGENCY));
-static_assert(aidl::android::hardware::radio::EmergencyCallRouting::NORMAL ==
-              static_cast<aidl::android::hardware::radio::EmergencyCallRouting>(
-                      ::android::hardware::radio::V1_4::EmergencyCallRouting::NORMAL));
-
-static_assert(aidl::android::hardware::radio::RadioTechnology::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::UNKNOWN));
-static_assert(aidl::android::hardware::radio::RadioTechnology::GPRS ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::GPRS));
-static_assert(aidl::android::hardware::radio::RadioTechnology::EDGE ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::EDGE));
-static_assert(aidl::android::hardware::radio::RadioTechnology::UMTS ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::UMTS));
-static_assert(aidl::android::hardware::radio::RadioTechnology::IS95A ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::IS95A));
-static_assert(aidl::android::hardware::radio::RadioTechnology::IS95B ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::IS95B));
-static_assert(aidl::android::hardware::radio::RadioTechnology::ONE_X_RTT ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::ONE_X_RTT));
-static_assert(aidl::android::hardware::radio::RadioTechnology::EVDO_0 ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::EVDO_0));
-static_assert(aidl::android::hardware::radio::RadioTechnology::EVDO_A ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::EVDO_A));
-static_assert(aidl::android::hardware::radio::RadioTechnology::HSDPA ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::HSDPA));
-static_assert(aidl::android::hardware::radio::RadioTechnology::HSUPA ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::HSUPA));
-static_assert(aidl::android::hardware::radio::RadioTechnology::HSPA ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::HSPA));
-static_assert(aidl::android::hardware::radio::RadioTechnology::EVDO_B ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::EVDO_B));
-static_assert(aidl::android::hardware::radio::RadioTechnology::EHRPD ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::EHRPD));
-static_assert(aidl::android::hardware::radio::RadioTechnology::LTE ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::LTE));
-static_assert(aidl::android::hardware::radio::RadioTechnology::HSPAP ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::HSPAP));
-static_assert(aidl::android::hardware::radio::RadioTechnology::GSM ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::GSM));
-static_assert(aidl::android::hardware::radio::RadioTechnology::TD_SCDMA ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::TD_SCDMA));
-static_assert(aidl::android::hardware::radio::RadioTechnology::IWLAN ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::IWLAN));
-static_assert(aidl::android::hardware::radio::RadioTechnology::LTE_CA ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::LTE_CA));
-static_assert(aidl::android::hardware::radio::RadioTechnology::NR ==
-              static_cast<aidl::android::hardware::radio::RadioTechnology>(
-                      ::android::hardware::radio::V1_4::RadioTechnology::NR));
-
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::UNKNOWN));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::GPRS ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::GPRS));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::EDGE ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::EDGE));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::UMTS ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::UMTS));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::IS95A ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::IS95A));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::IS95B ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::IS95B));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::ONE_X_RTT ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::ONE_X_RTT));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::EVDO_0 ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::EVDO_0));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::EVDO_A ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::EVDO_A));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::HSDPA ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::HSDPA));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::HSUPA ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::HSUPA));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::HSPA ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::HSPA));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::EVDO_B ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::EVDO_B));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::EHRPD ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::EHRPD));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::LTE ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::LTE));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::HSPAP ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::HSPAP));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::GSM ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::GSM));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::TD_SCDMA ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::TD_SCDMA));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::LTE_CA ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::LTE_CA));
-static_assert(aidl::android::hardware::radio::RadioAccessFamily::NR ==
-              static_cast<aidl::android::hardware::radio::RadioAccessFamily>(
-                      ::android::hardware::radio::V1_4::RadioAccessFamily::NR));
-
-static_assert(aidl::android::hardware::radio::FrequencyRange::LOW ==
-              static_cast<aidl::android::hardware::radio::FrequencyRange>(
-                      ::android::hardware::radio::V1_4::FrequencyRange::LOW));
-static_assert(aidl::android::hardware::radio::FrequencyRange::MID ==
-              static_cast<aidl::android::hardware::radio::FrequencyRange>(
-                      ::android::hardware::radio::V1_4::FrequencyRange::MID));
-static_assert(aidl::android::hardware::radio::FrequencyRange::HIGH ==
-              static_cast<aidl::android::hardware::radio::FrequencyRange>(
-                      ::android::hardware::radio::V1_4::FrequencyRange::HIGH));
-static_assert(aidl::android::hardware::radio::FrequencyRange::MMWAVE ==
-              static_cast<aidl::android::hardware::radio::FrequencyRange>(
-                      ::android::hardware::radio::V1_4::FrequencyRange::MMWAVE));
-
-static_assert(aidl::android::hardware::radio::DataConnActiveStatus::INACTIVE ==
-              static_cast<aidl::android::hardware::radio::DataConnActiveStatus>(
-                      ::android::hardware::radio::V1_4::DataConnActiveStatus::INACTIVE));
-static_assert(aidl::android::hardware::radio::DataConnActiveStatus::DORMANT ==
-              static_cast<aidl::android::hardware::radio::DataConnActiveStatus>(
-                      ::android::hardware::radio::V1_4::DataConnActiveStatus::DORMANT));
-static_assert(aidl::android::hardware::radio::DataConnActiveStatus::ACTIVE ==
-              static_cast<aidl::android::hardware::radio::DataConnActiveStatus>(
-                      ::android::hardware::radio::V1_4::DataConnActiveStatus::ACTIVE));
-
-static_assert(aidl::android::hardware::radio::PdpProtocolType::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::PdpProtocolType>(
-                      ::android::hardware::radio::V1_4::PdpProtocolType::UNKNOWN));
-static_assert(aidl::android::hardware::radio::PdpProtocolType::IP ==
-              static_cast<aidl::android::hardware::radio::PdpProtocolType>(
-                      ::android::hardware::radio::V1_4::PdpProtocolType::IP));
-static_assert(aidl::android::hardware::radio::PdpProtocolType::IPV6 ==
-              static_cast<aidl::android::hardware::radio::PdpProtocolType>(
-                      ::android::hardware::radio::V1_4::PdpProtocolType::IPV6));
-static_assert(aidl::android::hardware::radio::PdpProtocolType::IPV4V6 ==
-              static_cast<aidl::android::hardware::radio::PdpProtocolType>(
-                      ::android::hardware::radio::V1_4::PdpProtocolType::IPV4V6));
-static_assert(aidl::android::hardware::radio::PdpProtocolType::PPP ==
-              static_cast<aidl::android::hardware::radio::PdpProtocolType>(
-                      ::android::hardware::radio::V1_4::PdpProtocolType::PPP));
-static_assert(aidl::android::hardware::radio::PdpProtocolType::NON_IP ==
-              static_cast<aidl::android::hardware::radio::PdpProtocolType>(
-                      ::android::hardware::radio::V1_4::PdpProtocolType::NON_IP));
-static_assert(aidl::android::hardware::radio::PdpProtocolType::UNSTRUCTURED ==
-              static_cast<aidl::android::hardware::radio::PdpProtocolType>(
-                      ::android::hardware::radio::V1_4::PdpProtocolType::UNSTRUCTURED));
-
-static_assert(aidl::android::hardware::radio::AccessNetwork::GERAN ==
-              static_cast<aidl::android::hardware::radio::AccessNetwork>(
-                      ::android::hardware::radio::V1_5::AccessNetwork::GERAN));
-static_assert(aidl::android::hardware::radio::AccessNetwork::UTRAN ==
-              static_cast<aidl::android::hardware::radio::AccessNetwork>(
-                      ::android::hardware::radio::V1_5::AccessNetwork::UTRAN));
-static_assert(aidl::android::hardware::radio::AccessNetwork::EUTRAN ==
-              static_cast<aidl::android::hardware::radio::AccessNetwork>(
-                      ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN));
-static_assert(aidl::android::hardware::radio::AccessNetwork::CDMA2000 ==
-              static_cast<aidl::android::hardware::radio::AccessNetwork>(
-                      ::android::hardware::radio::V1_5::AccessNetwork::CDMA2000));
-static_assert(aidl::android::hardware::radio::AccessNetwork::IWLAN ==
-              static_cast<aidl::android::hardware::radio::AccessNetwork>(
-                      ::android::hardware::radio::V1_5::AccessNetwork::IWLAN));
-static_assert(aidl::android::hardware::radio::AccessNetwork::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::AccessNetwork>(
-                      ::android::hardware::radio::V1_5::AccessNetwork::UNKNOWN));
-static_assert(aidl::android::hardware::radio::AccessNetwork::NGRAN ==
-              static_cast<aidl::android::hardware::radio::AccessNetwork>(
-                      ::android::hardware::radio::V1_5::AccessNetwork::NGRAN));
-
-static_assert(aidl::android::hardware::radio::SignalMeasurementType::RSSI ==
-              static_cast<aidl::android::hardware::radio::SignalMeasurementType>(
-                      ::android::hardware::radio::V1_5::SignalMeasurementType::RSSI));
-static_assert(aidl::android::hardware::radio::SignalMeasurementType::RSCP ==
-              static_cast<aidl::android::hardware::radio::SignalMeasurementType>(
-                      ::android::hardware::radio::V1_5::SignalMeasurementType::RSCP));
-static_assert(aidl::android::hardware::radio::SignalMeasurementType::RSRP ==
-              static_cast<aidl::android::hardware::radio::SignalMeasurementType>(
-                      ::android::hardware::radio::V1_5::SignalMeasurementType::RSRP));
-static_assert(aidl::android::hardware::radio::SignalMeasurementType::RSRQ ==
-              static_cast<aidl::android::hardware::radio::SignalMeasurementType>(
-                      ::android::hardware::radio::V1_5::SignalMeasurementType::RSRQ));
-static_assert(aidl::android::hardware::radio::SignalMeasurementType::RSSNR ==
-              static_cast<aidl::android::hardware::radio::SignalMeasurementType>(
-                      ::android::hardware::radio::V1_5::SignalMeasurementType::RSSNR));
-static_assert(aidl::android::hardware::radio::SignalMeasurementType::SSRSRP ==
-              static_cast<aidl::android::hardware::radio::SignalMeasurementType>(
-                      ::android::hardware::radio::V1_5::SignalMeasurementType::SSRSRP));
-static_assert(aidl::android::hardware::radio::SignalMeasurementType::SSRSRQ ==
-              static_cast<aidl::android::hardware::radio::SignalMeasurementType>(
-                      ::android::hardware::radio::V1_5::SignalMeasurementType::SSRSRQ));
-static_assert(aidl::android::hardware::radio::SignalMeasurementType::SSSINR ==
-              static_cast<aidl::android::hardware::radio::SignalMeasurementType>(
-                      ::android::hardware::radio::V1_5::SignalMeasurementType::SSSINR));
-
-static_assert(aidl::android::hardware::radio::SimLockMultiSimPolicy::NO_MULTISIM_POLICY ==
-              static_cast<aidl::android::hardware::radio::SimLockMultiSimPolicy>(
-                      ::android::hardware::radio::V1_4::SimLockMultiSimPolicy::NO_MULTISIM_POLICY));
-static_assert(
-        aidl::android::hardware::radio::SimLockMultiSimPolicy::ONE_VALID_SIM_MUST_BE_PRESENT ==
-        static_cast<aidl::android::hardware::radio::SimLockMultiSimPolicy>(
-                ::android::hardware::radio::V1_4::SimLockMultiSimPolicy::
-                        ONE_VALID_SIM_MUST_BE_PRESENT));
-
-static_assert(aidl::android::hardware::radio::RadioAccessNetworks::GERAN ==
-              static_cast<aidl::android::hardware::radio::RadioAccessNetworks>(
-                      ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN));
-static_assert(aidl::android::hardware::radio::RadioAccessNetworks::UTRAN ==
-              static_cast<aidl::android::hardware::radio::RadioAccessNetworks>(
-                      ::android::hardware::radio::V1_5::RadioAccessNetworks::UTRAN));
-static_assert(aidl::android::hardware::radio::RadioAccessNetworks::EUTRAN ==
-              static_cast<aidl::android::hardware::radio::RadioAccessNetworks>(
-                      ::android::hardware::radio::V1_5::RadioAccessNetworks::EUTRAN));
-static_assert(aidl::android::hardware::radio::RadioAccessNetworks::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::RadioAccessNetworks>(
-                      ::android::hardware::radio::V1_5::RadioAccessNetworks::UNKNOWN));
-static_assert(aidl::android::hardware::radio::RadioAccessNetworks::NGRAN ==
-              static_cast<aidl::android::hardware::radio::RadioAccessNetworks>(
-                      ::android::hardware::radio::V1_5::RadioAccessNetworks::NGRAN));
-static_assert(aidl::android::hardware::radio::RadioAccessNetworks::CDMA2000 ==
-              static_cast<aidl::android::hardware::radio::RadioAccessNetworks>(
-                      ::android::hardware::radio::V1_5::RadioAccessNetworks::CDMA2000));
-
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_1 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_1));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_2 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_2));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_3 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_3));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_4 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_4));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_5 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_5));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_6 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_6));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_7 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_7));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_8 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_8));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_9 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_9));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_10 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_10));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_11 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_11));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_12 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_12));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_13 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_13));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_14 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_14));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_19 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_19));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_20 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_20));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_21 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_21));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_22 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_22));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_25 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_25));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_26 ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_26));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_A ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_A));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_B ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_B));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_C ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_C));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_D ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_D));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_E ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_E));
-static_assert(aidl::android::hardware::radio::UtranBands::BAND_F ==
-              static_cast<aidl::android::hardware::radio::UtranBands>(
-                      ::android::hardware::radio::V1_5::UtranBands::BAND_F));
-
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_1 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_1));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_2 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_2));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_3 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_3));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_4 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_4));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_5 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_5));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_6 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_6));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_7 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_7));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_8 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_8));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_9 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_9));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_10 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_10));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_11 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_11));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_12 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_12));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_13 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_13));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_14 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_14));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_17 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_17));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_18 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_18));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_19 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_19));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_20 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_20));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_21 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_21));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_22 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_22));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_23 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_23));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_24 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_24));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_25 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_25));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_26 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_26));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_27 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_27));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_28 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_28));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_30 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_30));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_31 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_31));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_33 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_33));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_34 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_34));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_35 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_35));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_36 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_36));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_37 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_37));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_38 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_38));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_39 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_39));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_40 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_40));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_41 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_41));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_42 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_42));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_43 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_43));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_44 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_44));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_45 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_45));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_46 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_46));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_47 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_47));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_48 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_48));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_65 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_65));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_66 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_66));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_68 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_68));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_70 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_70));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_49 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_49));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_50 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_50));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_51 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_51));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_52 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_52));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_53 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_53));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_71 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_71));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_72 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_72));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_73 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_73));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_74 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_74));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_85 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_85));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_87 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_87));
-static_assert(aidl::android::hardware::radio::EutranBands::BAND_88 ==
-              static_cast<aidl::android::hardware::radio::EutranBands>(
-                      ::android::hardware::radio::V1_5::EutranBands::BAND_88));
-
-static_assert(aidl::android::hardware::radio::ApnTypes::NONE ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::NONE));
-static_assert(aidl::android::hardware::radio::ApnTypes::DEFAULT ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::DEFAULT));
-static_assert(aidl::android::hardware::radio::ApnTypes::MMS ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::MMS));
-static_assert(aidl::android::hardware::radio::ApnTypes::SUPL ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::SUPL));
-static_assert(aidl::android::hardware::radio::ApnTypes::DUN ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::DUN));
-static_assert(aidl::android::hardware::radio::ApnTypes::HIPRI ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::HIPRI));
-static_assert(aidl::android::hardware::radio::ApnTypes::FOTA ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::FOTA));
-static_assert(aidl::android::hardware::radio::ApnTypes::IMS ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::IMS));
-static_assert(aidl::android::hardware::radio::ApnTypes::CBS ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::CBS));
-static_assert(aidl::android::hardware::radio::ApnTypes::IA ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::IA));
-static_assert(aidl::android::hardware::radio::ApnTypes::EMERGENCY ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::EMERGENCY));
-static_assert(aidl::android::hardware::radio::ApnTypes::ALL ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::ALL));
-static_assert(aidl::android::hardware::radio::ApnTypes::MCX ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::MCX));
-static_assert(aidl::android::hardware::radio::ApnTypes::XCAP ==
-              static_cast<aidl::android::hardware::radio::ApnTypes>(
-                      ::android::hardware::radio::V1_5::ApnTypes::XCAP));
-
-static_assert(aidl::android::hardware::radio::AddressProperty::NONE ==
-              static_cast<aidl::android::hardware::radio::AddressProperty>(
-                      ::android::hardware::radio::V1_5::AddressProperty::NONE));
-static_assert(aidl::android::hardware::radio::AddressProperty::DEPRECATED ==
-              static_cast<aidl::android::hardware::radio::AddressProperty>(
-                      ::android::hardware::radio::V1_5::AddressProperty::DEPRECATED));
-
-static_assert(aidl::android::hardware::radio::Domain::CS ==
-              static_cast<aidl::android::hardware::radio::Domain>(
-                      ::android::hardware::radio::V1_5::Domain::CS));
-static_assert(aidl::android::hardware::radio::Domain::PS ==
-              static_cast<aidl::android::hardware::radio::Domain>(
-                      ::android::hardware::radio::V1_5::Domain::PS));
-
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::CS_SERVICE ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::CS_SERVICE));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::PS_SERVICE ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::PS_SERVICE));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::CS_VOICE ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::CS_VOICE));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::MO_SIGNALLING ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::MO_SIGNALLING));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::MO_DATA ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::MO_DATA));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::CS_FALLBACK ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::CS_FALLBACK));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::MMTEL_VOICE ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::MMTEL_VOICE));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::MMTEL_VIDEO ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::MMTEL_VIDEO));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::EMERGENCY ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::EMERGENCY));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::SMS ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::SMS));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_1 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_1));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_2 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_2));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_3 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_3));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_4 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_4));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_5 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_5));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_6 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_6));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_7 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_7));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_8 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_8));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_9 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_9));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_10 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_10));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_11 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_11));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_12 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_12));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_13 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_13));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_14 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_14));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_15 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_15));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_16 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_16));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_17 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_17));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_18 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_18));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_19 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_19));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_20 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_20));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_21 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_21));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_22 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_22));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_23 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_23));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_24 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_24));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_25 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_25));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_26 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_26));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_27 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_27));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_28 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_28));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_29 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_29));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_30 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_30));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_31 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_31));
-static_assert(aidl::android::hardware::radio::BarringInfoServiceType::OPERATOR_32 ==
-              static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::ServiceType::OPERATOR_32));
-
-static_assert(aidl::android::hardware::radio::BarringInfoBarringType::NONE ==
-              static_cast<aidl::android::hardware::radio::BarringInfoBarringType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::BarringType::NONE));
-static_assert(aidl::android::hardware::radio::BarringInfoBarringType::CONDITIONAL ==
-              static_cast<aidl::android::hardware::radio::BarringInfoBarringType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::BarringType::CONDITIONAL));
-static_assert(aidl::android::hardware::radio::BarringInfoBarringType::UNCONDITIONAL ==
-              static_cast<aidl::android::hardware::radio::BarringInfoBarringType>(
-                      ::android::hardware::radio::V1_5::BarringInfo::BarringType::UNCONDITIONAL));
-
-static_assert(aidl::android::hardware::radio::IndicationFilter::NONE ==
-              static_cast<aidl::android::hardware::radio::IndicationFilter>(
-                      ::android::hardware::radio::V1_5::IndicationFilter::NONE));
-static_assert(aidl::android::hardware::radio::IndicationFilter::ALL ==
-              static_cast<aidl::android::hardware::radio::IndicationFilter>(
-                      ::android::hardware::radio::V1_5::IndicationFilter::ALL));
-static_assert(aidl::android::hardware::radio::IndicationFilter::SIGNAL_STRENGTH ==
-              static_cast<aidl::android::hardware::radio::IndicationFilter>(
-                      ::android::hardware::radio::V1_5::IndicationFilter::SIGNAL_STRENGTH));
-static_assert(aidl::android::hardware::radio::IndicationFilter::FULL_NETWORK_STATE ==
-              static_cast<aidl::android::hardware::radio::IndicationFilter>(
-                      ::android::hardware::radio::V1_5::IndicationFilter::FULL_NETWORK_STATE));
-static_assert(
-        aidl::android::hardware::radio::IndicationFilter::DATA_CALL_DORMANCY_CHANGED ==
-        static_cast<aidl::android::hardware::radio::IndicationFilter>(
-                ::android::hardware::radio::V1_5::IndicationFilter::DATA_CALL_DORMANCY_CHANGED));
-static_assert(aidl::android::hardware::radio::IndicationFilter::LINK_CAPACITY_ESTIMATE ==
-              static_cast<aidl::android::hardware::radio::IndicationFilter>(
-                      ::android::hardware::radio::V1_5::IndicationFilter::LINK_CAPACITY_ESTIMATE));
-static_assert(aidl::android::hardware::radio::IndicationFilter::PHYSICAL_CHANNEL_CONFIG ==
-              static_cast<aidl::android::hardware::radio::IndicationFilter>(
-                      ::android::hardware::radio::V1_5::IndicationFilter::PHYSICAL_CHANNEL_CONFIG));
-static_assert(aidl::android::hardware::radio::IndicationFilter::REGISTRATION_FAILURE ==
-              static_cast<aidl::android::hardware::radio::IndicationFilter>(
-                      ::android::hardware::radio::V1_5::IndicationFilter::REGISTRATION_FAILURE));
-static_assert(aidl::android::hardware::radio::IndicationFilter::BARRING_INFO ==
-              static_cast<aidl::android::hardware::radio::IndicationFilter>(
-                      ::android::hardware::radio::V1_5::IndicationFilter::BARRING_INFO));
-
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::NONE ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::NONE));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::IMSI_UNKNOWN_IN_HLR ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::IMSI_UNKNOWN_IN_HLR));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::ILLEGAL_MS ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::ILLEGAL_MS));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::IMSI_UNKNOWN_IN_VLR ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::IMSI_UNKNOWN_IN_VLR));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::IMEI_NOT_ACCEPTED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::IMEI_NOT_ACCEPTED));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::ILLEGAL_ME ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::ILLEGAL_ME));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::GPRS_SERVICES_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              GPRS_SERVICES_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::
-                      GPRS_AND_NON_GPRS_SERVICES_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              GPRS_AND_NON_GPRS_SERVICES_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::
-                      MS_IDENTITY_CANNOT_BE_DERIVED_BY_NETWORK ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              MS_IDENTITY_CANNOT_BE_DERIVED_BY_NETWORK));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::IMPLICITLY_DETACHED ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::IMPLICITLY_DETACHED));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::PLMN_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::PLMN_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::LOCATION_AREA_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              LOCATION_AREA_NOT_ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::ROAMING_NOT_ALLOWED ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::ROAMING_NOT_ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::GPRS_SERVICES_NOT_ALLOWED_IN_PLMN ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        GPRS_SERVICES_NOT_ALLOWED_IN_PLMN));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::NO_SUITABLE_CELLS ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::NO_SUITABLE_CELLS));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::MSC_TEMPORARILY_NOT_REACHABLE ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        MSC_TEMPORARILY_NOT_REACHABLE));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::NETWORK_FAILURE ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::NETWORK_FAILURE));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::MAC_FAILURE ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::MAC_FAILURE));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::SYNC_FAILURE ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::SYNC_FAILURE));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::CONGESTION ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::CONGESTION));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::GSM_AUTHENTICATION_UNACCEPTABLE ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        GSM_AUTHENTICATION_UNACCEPTABLE));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::NOT_AUTHORIZED_FOR_THIS_CSG ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              NOT_AUTHORIZED_FOR_THIS_CSG));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::
-                      SMS_PROVIDED_BY_GPRS_IN_ROUTING_AREA ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              SMS_PROVIDED_BY_GPRS_IN_ROUTING_AREA));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::SERVICE_OPTION_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              SERVICE_OPTION_NOT_SUPPORTED));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::SERVICE_OPTION_NOT_SUBSCRIBED ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        SERVICE_OPTION_NOT_SUBSCRIBED));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::
-                      SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::CALL_CANNOT_BE_IDENTIFIED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              CALL_CANNOT_BE_IDENTIFIED));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::NO_PDP_CONTEXT_ACTIVATED ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::NO_PDP_CONTEXT_ACTIVATED));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_1 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_1));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_2 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_2));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_3 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_3));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_4 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_4));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_5 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_5));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_6 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_6));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_7 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_7));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_8 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_8));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_9 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_9));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_10 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_10));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_11 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_11));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_12 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_12));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_13 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_13));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_14 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_14));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_15 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_15));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::RETRY_UPON_ENTRY_INTO_NEW_CELL_16 ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        RETRY_UPON_ENTRY_INTO_NEW_CELL_16));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::SEMANTICALLY_INCORRECT_MESSAGE ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        SEMANTICALLY_INCORRECT_MESSAGE));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::INVALID_MANDATORY_INFORMATION ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::
-                        INVALID_MANDATORY_INFORMATION));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::
-                      MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::
-                      MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::
-                      INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED));
-static_assert(
-        aidl::android::hardware::radio::RegistrationFailCause::CONDITIONAL_IE_ERROR ==
-        static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                ::android::hardware::radio::V1_5::RegistrationFailCause::CONDITIONAL_IE_ERROR));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::
-                      MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE));
-static_assert(aidl::android::hardware::radio::RegistrationFailCause::PROTOCOL_ERROR_UNSPECIFIED ==
-              static_cast<aidl::android::hardware::radio::RegistrationFailCause>(
-                      ::android::hardware::radio::V1_5::RegistrationFailCause::
-                              PROTOCOL_ERROR_UNSPECIFIED));
-
-static_assert(aidl::android::hardware::radio::PrlIndicator::NOT_REGISTERED ==
-              static_cast<aidl::android::hardware::radio::PrlIndicator>(
-                      ::android::hardware::radio::V1_5::PrlIndicator::NOT_REGISTERED));
-static_assert(aidl::android::hardware::radio::PrlIndicator::NOT_IN_PRL ==
-              static_cast<aidl::android::hardware::radio::PrlIndicator>(
-                      ::android::hardware::radio::V1_5::PrlIndicator::NOT_IN_PRL));
-static_assert(aidl::android::hardware::radio::PrlIndicator::IN_PRL ==
-              static_cast<aidl::android::hardware::radio::PrlIndicator>(
-                      ::android::hardware::radio::V1_5::PrlIndicator::IN_PRL));
-
-static_assert(aidl::android::hardware::radio::PersoSubstate::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::UNKNOWN));
-static_assert(aidl::android::hardware::radio::PersoSubstate::IN_PROGRESS ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::IN_PROGRESS));
-static_assert(aidl::android::hardware::radio::PersoSubstate::READY ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::READY));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_NETWORK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_NETWORK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_NETWORK_SUBSET ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_NETWORK_SUBSET));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_CORPORATE ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_CORPORATE));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_SERVICE_PROVIDER ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_SERVICE_PROVIDER));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_SIM ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_SIM));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_NETWORK_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_NETWORK_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_NETWORK_SUBSET_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_NETWORK_SUBSET_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_CORPORATE_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_CORPORATE_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_SERVICE_PROVIDER_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_SERVICE_PROVIDER_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_SIM_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_SIM_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_NETWORK1 ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_NETWORK1));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_NETWORK2 ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_NETWORK2));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_HRPD ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_HRPD));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_CORPORATE ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_CORPORATE));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_SERVICE_PROVIDER ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_SERVICE_PROVIDER));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_RUIM ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_RUIM));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_NETWORK1_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_NETWORK1_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_NETWORK2_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_NETWORK2_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_HRPD_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_HRPD_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_CORPORATE_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_CORPORATE_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_SERVICE_PROVIDER_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_SERVICE_PROVIDER_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::RUIM_RUIM_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::RUIM_RUIM_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_SPN ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_SPN));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_SPN_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_SPN_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_SP_EHPLMN ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_SP_EHPLMN));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_SP_EHPLMN_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_SP_EHPLMN_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_ICCID ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_ICCID));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_ICCID_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_ICCID_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_IMPI ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_IMPI));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_IMPI_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_IMPI_PUK));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_NS_SP ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_NS_SP));
-static_assert(aidl::android::hardware::radio::PersoSubstate::SIM_NS_SP_PUK ==
-              static_cast<aidl::android::hardware::radio::PersoSubstate>(
-                      ::android::hardware::radio::V1_5::PersoSubstate::SIM_NS_SP_PUK));
-
-static_assert(aidl::android::hardware::radio::QosFlowIdRange::MIN ==
-              static_cast<aidl::android::hardware::radio::QosFlowIdRange>(
-                      ::android::hardware::radio::V1_6::QosFlowIdRange::MIN));
-static_assert(aidl::android::hardware::radio::QosFlowIdRange::MAX ==
-              static_cast<aidl::android::hardware::radio::QosFlowIdRange>(
-                      ::android::hardware::radio::V1_6::QosFlowIdRange::MAX));
-
-static_assert(aidl::android::hardware::radio::QosProtocol::UNSPECIFIED ==
-              static_cast<aidl::android::hardware::radio::QosProtocol>(
-                      ::android::hardware::radio::V1_6::QosProtocol::UNSPECIFIED));
-static_assert(aidl::android::hardware::radio::QosProtocol::TCP ==
-              static_cast<aidl::android::hardware::radio::QosProtocol>(
-                      ::android::hardware::radio::V1_6::QosProtocol::TCP));
-static_assert(aidl::android::hardware::radio::QosProtocol::UDP ==
-              static_cast<aidl::android::hardware::radio::QosProtocol>(
-                      ::android::hardware::radio::V1_6::QosProtocol::UDP));
-static_assert(aidl::android::hardware::radio::QosProtocol::ESP ==
-              static_cast<aidl::android::hardware::radio::QosProtocol>(
-                      ::android::hardware::radio::V1_6::QosProtocol::ESP));
-static_assert(aidl::android::hardware::radio::QosProtocol::AH ==
-              static_cast<aidl::android::hardware::radio::QosProtocol>(
-                      ::android::hardware::radio::V1_6::QosProtocol::AH));
-
-static_assert(aidl::android::hardware::radio::QosFilterDirection::DOWNLINK ==
-              static_cast<aidl::android::hardware::radio::QosFilterDirection>(
-                      ::android::hardware::radio::V1_6::QosFilterDirection::DOWNLINK));
-static_assert(aidl::android::hardware::radio::QosFilterDirection::UPLINK ==
-              static_cast<aidl::android::hardware::radio::QosFilterDirection>(
-                      ::android::hardware::radio::V1_6::QosFilterDirection::UPLINK));
-static_assert(aidl::android::hardware::radio::QosFilterDirection::BIDIRECTIONAL ==
-              static_cast<aidl::android::hardware::radio::QosFilterDirection>(
-                      ::android::hardware::radio::V1_6::QosFilterDirection::BIDIRECTIONAL));
-
-static_assert(aidl::android::hardware::radio::QosPortRange::MIN ==
-              static_cast<aidl::android::hardware::radio::QosPortRange>(
-                      ::android::hardware::radio::V1_6::QosPortRange::MIN));
-static_assert(aidl::android::hardware::radio::QosPortRange::MAX ==
-              static_cast<aidl::android::hardware::radio::QosPortRange>(
-                      ::android::hardware::radio::V1_6::QosPortRange::MAX));
-
-static_assert(aidl::android::hardware::radio::RadioError::NONE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NONE));
-static_assert(aidl::android::hardware::radio::RadioError::RADIO_NOT_AVAILABLE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE));
-static_assert(aidl::android::hardware::radio::RadioError::GENERIC_FAILURE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::GENERIC_FAILURE));
-static_assert(aidl::android::hardware::radio::RadioError::PASSWORD_INCORRECT ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::PASSWORD_INCORRECT));
-static_assert(aidl::android::hardware::radio::RadioError::SIM_PIN2 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SIM_PIN2));
-static_assert(aidl::android::hardware::radio::RadioError::SIM_PUK2 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SIM_PUK2));
-static_assert(aidl::android::hardware::radio::RadioError::REQUEST_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::RadioError::CANCELLED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::CANCELLED));
-static_assert(
-        aidl::android::hardware::radio::RadioError::OP_NOT_ALLOWED_DURING_VOICE_CALL ==
-        static_cast<aidl::android::hardware::radio::RadioError>(
-                ::android::hardware::radio::V1_6::RadioError::OP_NOT_ALLOWED_DURING_VOICE_CALL));
-static_assert(
-        aidl::android::hardware::radio::RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW ==
-        static_cast<aidl::android::hardware::radio::RadioError>(
-                ::android::hardware::radio::V1_6::RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW));
-static_assert(aidl::android::hardware::radio::RadioError::SMS_SEND_FAIL_RETRY ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SMS_SEND_FAIL_RETRY));
-static_assert(aidl::android::hardware::radio::RadioError::SIM_ABSENT ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SIM_ABSENT));
-static_assert(aidl::android::hardware::radio::RadioError::SUBSCRIPTION_NOT_AVAILABLE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SUBSCRIPTION_NOT_AVAILABLE));
-static_assert(aidl::android::hardware::radio::RadioError::MODE_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::MODE_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::RadioError::FDN_CHECK_FAILURE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::FDN_CHECK_FAILURE));
-static_assert(aidl::android::hardware::radio::RadioError::ILLEGAL_SIM_OR_ME ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::ILLEGAL_SIM_OR_ME));
-static_assert(aidl::android::hardware::radio::RadioError::MISSING_RESOURCE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::MISSING_RESOURCE));
-static_assert(aidl::android::hardware::radio::RadioError::NO_SUCH_ELEMENT ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NO_SUCH_ELEMENT));
-static_assert(aidl::android::hardware::radio::RadioError::DIAL_MODIFIED_TO_USSD ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::DIAL_MODIFIED_TO_USSD));
-static_assert(aidl::android::hardware::radio::RadioError::DIAL_MODIFIED_TO_SS ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::DIAL_MODIFIED_TO_SS));
-static_assert(aidl::android::hardware::radio::RadioError::DIAL_MODIFIED_TO_DIAL ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::DIAL_MODIFIED_TO_DIAL));
-static_assert(aidl::android::hardware::radio::RadioError::USSD_MODIFIED_TO_DIAL ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::USSD_MODIFIED_TO_DIAL));
-static_assert(aidl::android::hardware::radio::RadioError::USSD_MODIFIED_TO_SS ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::USSD_MODIFIED_TO_SS));
-static_assert(aidl::android::hardware::radio::RadioError::USSD_MODIFIED_TO_USSD ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::USSD_MODIFIED_TO_USSD));
-static_assert(aidl::android::hardware::radio::RadioError::SS_MODIFIED_TO_DIAL ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SS_MODIFIED_TO_DIAL));
-static_assert(aidl::android::hardware::radio::RadioError::SS_MODIFIED_TO_USSD ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SS_MODIFIED_TO_USSD));
-static_assert(aidl::android::hardware::radio::RadioError::SUBSCRIPTION_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SUBSCRIPTION_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::RadioError::SS_MODIFIED_TO_SS ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SS_MODIFIED_TO_SS));
-static_assert(aidl::android::hardware::radio::RadioError::LCE_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::LCE_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::RadioError::NO_MEMORY ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NO_MEMORY));
-static_assert(aidl::android::hardware::radio::RadioError::INTERNAL_ERR ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::INTERNAL_ERR));
-static_assert(aidl::android::hardware::radio::RadioError::SYSTEM_ERR ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SYSTEM_ERR));
-static_assert(aidl::android::hardware::radio::RadioError::MODEM_ERR ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::MODEM_ERR));
-static_assert(aidl::android::hardware::radio::RadioError::INVALID_STATE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::INVALID_STATE));
-static_assert(aidl::android::hardware::radio::RadioError::NO_RESOURCES ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NO_RESOURCES));
-static_assert(aidl::android::hardware::radio::RadioError::SIM_ERR ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SIM_ERR));
-static_assert(aidl::android::hardware::radio::RadioError::INVALID_ARGUMENTS ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS));
-static_assert(aidl::android::hardware::radio::RadioError::INVALID_SIM_STATE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::INVALID_SIM_STATE));
-static_assert(aidl::android::hardware::radio::RadioError::INVALID_MODEM_STATE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::INVALID_MODEM_STATE));
-static_assert(aidl::android::hardware::radio::RadioError::INVALID_CALL_ID ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::INVALID_CALL_ID));
-static_assert(aidl::android::hardware::radio::RadioError::NO_SMS_TO_ACK ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NO_SMS_TO_ACK));
-static_assert(aidl::android::hardware::radio::RadioError::NETWORK_ERR ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NETWORK_ERR));
-static_assert(aidl::android::hardware::radio::RadioError::REQUEST_RATE_LIMITED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::REQUEST_RATE_LIMITED));
-static_assert(aidl::android::hardware::radio::RadioError::SIM_BUSY ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SIM_BUSY));
-static_assert(aidl::android::hardware::radio::RadioError::SIM_FULL ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::SIM_FULL));
-static_assert(aidl::android::hardware::radio::RadioError::NETWORK_REJECT ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NETWORK_REJECT));
-static_assert(aidl::android::hardware::radio::RadioError::OPERATION_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OPERATION_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::RadioError::EMPTY_RECORD ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::EMPTY_RECORD));
-static_assert(aidl::android::hardware::radio::RadioError::INVALID_SMS_FORMAT ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::INVALID_SMS_FORMAT));
-static_assert(aidl::android::hardware::radio::RadioError::ENCODING_ERR ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::ENCODING_ERR));
-static_assert(aidl::android::hardware::radio::RadioError::INVALID_SMSC_ADDRESS ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::INVALID_SMSC_ADDRESS));
-static_assert(aidl::android::hardware::radio::RadioError::NO_SUCH_ENTRY ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NO_SUCH_ENTRY));
-static_assert(aidl::android::hardware::radio::RadioError::NETWORK_NOT_READY ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NETWORK_NOT_READY));
-static_assert(aidl::android::hardware::radio::RadioError::NOT_PROVISIONED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NOT_PROVISIONED));
-static_assert(aidl::android::hardware::radio::RadioError::NO_SUBSCRIPTION ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NO_SUBSCRIPTION));
-static_assert(aidl::android::hardware::radio::RadioError::NO_NETWORK_FOUND ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NO_NETWORK_FOUND));
-static_assert(aidl::android::hardware::radio::RadioError::DEVICE_IN_USE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::DEVICE_IN_USE));
-static_assert(aidl::android::hardware::radio::RadioError::ABORTED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::ABORTED));
-static_assert(aidl::android::hardware::radio::RadioError::INVALID_RESPONSE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::INVALID_RESPONSE));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_1 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_1));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_2 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_2));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_3 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_3));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_4 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_4));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_5 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_5));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_6 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_6));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_7 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_7));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_8 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_8));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_9 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_9));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_10 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_10));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_11 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_11));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_12 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_12));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_13 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_13));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_14 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_14));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_15 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_15));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_16 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_16));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_17 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_17));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_18 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_18));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_19 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_19));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_20 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_20));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_21 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_21));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_22 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_22));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_23 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_23));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_24 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_24));
-static_assert(aidl::android::hardware::radio::RadioError::OEM_ERROR_25 ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::OEM_ERROR_25));
-static_assert(aidl::android::hardware::radio::RadioError::SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::
-                              SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::RadioError::ACCESS_BARRED ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::ACCESS_BARRED));
-static_assert(aidl::android::hardware::radio::RadioError::BLOCKED_DUE_TO_CALL ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::BLOCKED_DUE_TO_CALL));
-static_assert(aidl::android::hardware::radio::RadioError::RF_HARDWARE_ISSUE ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::RF_HARDWARE_ISSUE));
-static_assert(aidl::android::hardware::radio::RadioError::NO_RF_CALIBRATION_INFO ==
-              static_cast<aidl::android::hardware::radio::RadioError>(
-                      ::android::hardware::radio::V1_6::RadioError::NO_RF_CALIBRATION_INFO));
-
-static_assert(aidl::android::hardware::radio::HandoverFailureMode::LEGACY ==
-              static_cast<aidl::android::hardware::radio::HandoverFailureMode>(
-                      ::android::hardware::radio::V1_6::HandoverFailureMode::LEGACY));
-static_assert(aidl::android::hardware::radio::HandoverFailureMode::DO_FALLBACK ==
-              static_cast<aidl::android::hardware::radio::HandoverFailureMode>(
-                      ::android::hardware::radio::V1_6::HandoverFailureMode::DO_FALLBACK));
-static_assert(
-        aidl::android::hardware::radio::HandoverFailureMode::NO_FALLBACK_RETRY_HANDOVER ==
-        static_cast<aidl::android::hardware::radio::HandoverFailureMode>(
-                ::android::hardware::radio::V1_6::HandoverFailureMode::NO_FALLBACK_RETRY_HANDOVER));
-static_assert(aidl::android::hardware::radio::HandoverFailureMode::NO_FALLBACK_RETRY_SETUP_NORMAL ==
-              static_cast<aidl::android::hardware::radio::HandoverFailureMode>(
-                      ::android::hardware::radio::V1_6::HandoverFailureMode::
-                              NO_FALLBACK_RETRY_SETUP_NORMAL));
-
-static_assert(aidl::android::hardware::radio::NrDualConnectivityState::ENABLE ==
-              static_cast<aidl::android::hardware::radio::NrDualConnectivityState>(
-                      ::android::hardware::radio::V1_6::NrDualConnectivityState::ENABLE));
-static_assert(aidl::android::hardware::radio::NrDualConnectivityState::DISABLE ==
-              static_cast<aidl::android::hardware::radio::NrDualConnectivityState>(
-                      ::android::hardware::radio::V1_6::NrDualConnectivityState::DISABLE));
-static_assert(
-        aidl::android::hardware::radio::NrDualConnectivityState::DISABLE_IMMEDIATE ==
-        static_cast<aidl::android::hardware::radio::NrDualConnectivityState>(
-                ::android::hardware::radio::V1_6::NrDualConnectivityState::DISABLE_IMMEDIATE));
-
-static_assert(aidl::android::hardware::radio::DataThrottlingAction::NO_DATA_THROTTLING ==
-              static_cast<aidl::android::hardware::radio::DataThrottlingAction>(
-                      ::android::hardware::radio::V1_6::DataThrottlingAction::NO_DATA_THROTTLING));
-static_assert(aidl::android::hardware::radio::DataThrottlingAction::THROTTLE_SECONDARY_CARRIER ==
-              static_cast<aidl::android::hardware::radio::DataThrottlingAction>(
-                      ::android::hardware::radio::V1_6::DataThrottlingAction::
-                              THROTTLE_SECONDARY_CARRIER));
-static_assert(
-        aidl::android::hardware::radio::DataThrottlingAction::THROTTLE_ANCHOR_CARRIER ==
-        static_cast<aidl::android::hardware::radio::DataThrottlingAction>(
-                ::android::hardware::radio::V1_6::DataThrottlingAction::THROTTLE_ANCHOR_CARRIER));
-static_assert(aidl::android::hardware::radio::DataThrottlingAction::HOLD ==
-              static_cast<aidl::android::hardware::radio::DataThrottlingAction>(
-                      ::android::hardware::radio::V1_6::DataThrottlingAction::HOLD));
-
-static_assert(aidl::android::hardware::radio::VopsIndicator::VOPS_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::VopsIndicator>(
-                      ::android::hardware::radio::V1_6::VopsIndicator::VOPS_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::VopsIndicator::VOPS_OVER_3GPP ==
-              static_cast<aidl::android::hardware::radio::VopsIndicator>(
-                      ::android::hardware::radio::V1_6::VopsIndicator::VOPS_OVER_3GPP));
-static_assert(aidl::android::hardware::radio::VopsIndicator::VOPS_OVER_NON_3GPP ==
-              static_cast<aidl::android::hardware::radio::VopsIndicator>(
-                      ::android::hardware::radio::V1_6::VopsIndicator::VOPS_OVER_NON_3GPP));
-
-static_assert(aidl::android::hardware::radio::EmcIndicator::EMC_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::EmcIndicator>(
-                      ::android::hardware::radio::V1_6::EmcIndicator::EMC_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::EmcIndicator::EMC_NR_CONNECTED_TO_5GCN ==
-              static_cast<aidl::android::hardware::radio::EmcIndicator>(
-                      ::android::hardware::radio::V1_6::EmcIndicator::EMC_NR_CONNECTED_TO_5GCN));
-static_assert(aidl::android::hardware::radio::EmcIndicator::EMC_EUTRA_CONNECTED_TO_5GCN ==
-              static_cast<aidl::android::hardware::radio::EmcIndicator>(
-                      ::android::hardware::radio::V1_6::EmcIndicator::EMC_EUTRA_CONNECTED_TO_5GCN));
-static_assert(aidl::android::hardware::radio::EmcIndicator::EMC_BOTH_NR_EUTRA_CONNECTED_TO_5GCN ==
-              static_cast<aidl::android::hardware::radio::EmcIndicator>(
-                      ::android::hardware::radio::V1_6::EmcIndicator::
-                              EMC_BOTH_NR_EUTRA_CONNECTED_TO_5GCN));
-
-static_assert(aidl::android::hardware::radio::EmfIndicator::EMF_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::EmfIndicator>(
-                      ::android::hardware::radio::V1_6::EmfIndicator::EMF_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::EmfIndicator::EMF_NR_CONNECTED_TO_5GCN ==
-              static_cast<aidl::android::hardware::radio::EmfIndicator>(
-                      ::android::hardware::radio::V1_6::EmfIndicator::EMF_NR_CONNECTED_TO_5GCN));
-static_assert(aidl::android::hardware::radio::EmfIndicator::EMF_EUTRA_CONNECTED_TO_5GCN ==
-              static_cast<aidl::android::hardware::radio::EmfIndicator>(
-                      ::android::hardware::radio::V1_6::EmfIndicator::EMF_EUTRA_CONNECTED_TO_5GCN));
-static_assert(aidl::android::hardware::radio::EmfIndicator::EMF_BOTH_NR_EUTRA_CONNECTED_TO_5GCN ==
-              static_cast<aidl::android::hardware::radio::EmfIndicator>(
-                      ::android::hardware::radio::V1_6::EmfIndicator::
-                              EMF_BOTH_NR_EUTRA_CONNECTED_TO_5GCN));
-
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_1 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_1));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_2 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_2));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_3 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_3));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_5 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_5));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_7 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_7));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_8 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_8));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_12 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_12));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_14 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_14));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_18 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_18));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_20 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_20));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_25 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_25));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_28 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_28));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_29 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_29));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_30 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_30));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_34 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_34));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_38 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_38));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_39 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_39));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_40 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_40));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_41 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_41));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_48 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_48));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_50 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_50));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_51 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_51));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_65 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_65));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_66 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_66));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_70 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_70));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_71 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_71));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_74 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_74));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_75 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_75));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_76 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_76));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_77 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_77));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_78 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_78));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_79 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_79));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_80 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_80));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_81 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_81));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_82 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_82));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_83 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_83));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_84 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_84));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_86 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_86));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_89 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_89));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_90 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_90));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_91 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_91));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_92 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_92));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_93 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_93));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_94 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_94));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_95 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_95));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_257 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_257));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_258 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_258));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_260 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_260));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_261 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_261));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_26 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_26));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_46 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_46));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_53 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_53));
-static_assert(aidl::android::hardware::radio::NgranBands::BAND_96 ==
-              static_cast<aidl::android::hardware::radio::NgranBands>(
-                      ::android::hardware::radio::V1_6::NgranBands::BAND_96));
-
-static_assert(aidl::android::hardware::radio::SliceServiceType::NONE ==
-              static_cast<aidl::android::hardware::radio::SliceServiceType>(
-                      ::android::hardware::radio::V1_6::SliceServiceType::NONE));
-static_assert(aidl::android::hardware::radio::SliceServiceType::EMBB ==
-              static_cast<aidl::android::hardware::radio::SliceServiceType>(
-                      ::android::hardware::radio::V1_6::SliceServiceType::EMBB));
-static_assert(aidl::android::hardware::radio::SliceServiceType::URLLC ==
-              static_cast<aidl::android::hardware::radio::SliceServiceType>(
-                      ::android::hardware::radio::V1_6::SliceServiceType::URLLC));
-static_assert(aidl::android::hardware::radio::SliceServiceType::MIOT ==
-              static_cast<aidl::android::hardware::radio::SliceServiceType>(
-                      ::android::hardware::radio::V1_6::SliceServiceType::MIOT));
-
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NONE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NONE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OPERATOR_BARRED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OPERATOR_BARRED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NAS_SIGNALLING ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NAS_SIGNALLING));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INSUFFICIENT_RESOURCES ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INSUFFICIENT_RESOURCES));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MISSING_UNKNOWN_APN ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MISSING_UKNOWN_APN));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::UNKNOWN_PDP_ADDRESS_TYPE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::UNKNOWN_PDP_ADDRESS_TYPE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::USER_AUTHENTICATION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::USER_AUTHENTICATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ACTIVATION_REJECT_GGSN ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ACTIVATION_REJECT_GGSN));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ACTIVATION_REJECT_UNSPECIFIED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              ACTIVATION_REJECT_UNSPECIFIED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::SERVICE_OPTION_NOT_SUPPORTED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::SERVICE_OPTION_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::SERVICE_OPTION_NOT_SUBSCRIBED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              SERVICE_OPTION_NOT_SUBSCRIBED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::SERVICE_OPTION_OUT_OF_ORDER ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::SERVICE_OPTION_OUT_OF_ORDER));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NSAPI_IN_USE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NSAPI_IN_USE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::REGULAR_DEACTIVATION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::REGULAR_DEACTIVATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::QOS_NOT_ACCEPTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::QOS_NOT_ACCEPTED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NETWORK_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NETWORK_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UMTS_REACTIVATION_REQ ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::UMTS_REACTIVATION_REQ));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::FEATURE_NOT_SUPP ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::FEATURE_NOT_SUPP));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::TFT_SEMANTIC_ERROR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::TFT_SEMANTIC_ERROR));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::TFT_SYTAX_ERROR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::TFT_SYTAX_ERROR));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UNKNOWN_PDP_CONTEXT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::UNKNOWN_PDP_CONTEXT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::FILTER_SEMANTIC_ERROR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::FILTER_SEMANTIC_ERROR));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::FILTER_SYTAX_ERROR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::FILTER_SYTAX_ERROR));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PDP_WITHOUT_ACTIVE_TFT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PDP_WITHOUT_ACTIVE_TFT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ONLY_IPV4_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ONLY_IPV4_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ONLY_IPV6_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ONLY_IPV6_ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::ONLY_SINGLE_BEARER_ALLOWED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::ONLY_SINGLE_BEARER_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ESM_INFO_NOT_RECEIVED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ESM_INFO_NOT_RECEIVED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDN_CONN_DOES_NOT_EXIST ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDN_CONN_DOES_NOT_EXIST));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MAX_ACTIVE_PDP_CONTEXT_REACHED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MAX_ACTIVE_PDP_CONTEXT_REACHED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UNSUPPORTED_APN_IN_CURRENT_PLMN ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              UNSUPPORTED_APN_IN_CURRENT_PLMN));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INVALID_TRANSACTION_ID ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_TRANSACTION_ID));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MESSAGE_INCORRECT_SEMANTIC ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MESSAGE_INCORRECT_SEMANTIC));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INVALID_MANDATORY_INFO ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_MANDATORY_INFO));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MESSAGE_TYPE_UNSUPPORTED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MESSAGE_TYPE_UNSUPPORTED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MSG_TYPE_NONCOMPATIBLE_STATE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MSG_TYPE_NONCOMPATIBLE_STATE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UNKNOWN_INFO_ELEMENT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::UNKNOWN_INFO_ELEMENT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CONDITIONAL_IE_ERROR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CONDITIONAL_IE_ERROR));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PROTOCOL_ERRORS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PROTOCOL_ERRORS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::APN_TYPE_CONFLICT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::APN_TYPE_CONFLICT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INVALID_PCSCF_ADDR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_PCSCF_ADDR));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMM_ACCESS_BARRED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EMM_ACCESS_BARRED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMERGENCY_IFACE_ONLY ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EMERGENCY_IFACE_ONLY));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::IFACE_MISMATCH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::IFACE_MISMATCH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::COMPANION_IFACE_IN_USE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::COMPANION_IFACE_IN_USE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::IP_ADDRESS_MISMATCH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::IP_ADDRESS_MISMATCH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::IFACE_AND_POL_FAMILY_MISMATCH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              IFACE_AND_POL_FAMILY_MISMATCH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMM_ACCESS_BARRED_INFINITE_RETRY ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              EMM_ACCESS_BARRED_INFINITE_RETRY));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::AUTH_FAILURE_ON_EMERGENCY_CALL ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              AUTH_FAILURE_ON_EMERGENCY_CALL));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_1 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_1));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_2 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_2));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_3 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_3));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_4 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_4));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_5 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_5));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_6 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_6));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_7 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_7));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_8 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_8));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_9 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_9));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_10 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_10));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_11 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_11));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_12 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_12));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_13 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_13));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_14 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_14));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::OEM_DCFAILCAUSE_15 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::OEM_DCFAILCAUSE_15));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::VOICE_REGISTRATION_FAIL ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::VOICE_REGISTRATION_FAIL));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DATA_REGISTRATION_FAIL ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DATA_REGISTRATION_FAIL));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::SIGNAL_LOST ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::SIGNAL_LOST));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PREF_RADIO_TECH_CHANGED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PREF_RADIO_TECH_CHANGED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RADIO_POWER_OFF ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::RADIO_POWER_OFF));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::TETHERED_CALL_ACTIVE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::TETHERED_CALL_ACTIVE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ERROR_UNSPECIFIED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ERROR_UNSPECIFIED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::LLC_SNDCP ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::LLC_SNDCP));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::ACTIVATION_REJECTED_BCM_VIOLATION ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        ACTIVATION_REJECTED_BCM_VIOLATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      COLLISION_WITH_NETWORK_INITIATED_REQUEST ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              COLLISION_WITH_NETWORK_INITIATED_REQUEST));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ONLY_IPV4V6_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ONLY_IPV4V6_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ONLY_NON_IP_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ONLY_NON_IP_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UNSUPPORTED_QCI_VALUE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::UNSUPPORTED_QCI_VALUE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::BEARER_HANDLING_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              BEARER_HANDLING_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INVALID_DNS_ADDR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_DNS_ADDR));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::INVALID_PCSCF_OR_DNS_ADDRESS ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_PCSCF_OR_DNS_ADDRESS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CALL_PREEMPT_BY_EMERGENCY_APN ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              CALL_PREEMPT_BY_EMERGENCY_APN));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::UE_INITIATED_DETACH_OR_DISCONNECT ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        UE_INITIATED_DETACH_OR_DISCONNECT));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_REASON_UNSPECIFIED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_REASON_UNSPECIFIED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_ADMIN_PROHIBITED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_ADMIN_PROHIBITED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MIP_FA_INSUFFICIENT_RESOURCES ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_FA_INSUFFICIENT_RESOURCES));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_REQUESTED_LIFETIME_TOO_LONG ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MIP_FA_REQUESTED_LIFETIME_TOO_LONG));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_MALFORMED_REQUEST ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_MALFORMED_REQUEST));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MIP_FA_MALFORMED_REPLY ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_MALFORMED_REPLY));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MIP_FA_ENCAPSULATION_UNAVAILABLE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_FA_ENCAPSULATION_UNAVAILABLE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_REVERSE_TUNNEL_UNAVAILABLE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MIP_FA_REVERSE_TUNNEL_UNAVAILABLE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_REVERSE_TUNNEL_IS_MANDATORY ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MIP_FA_REVERSE_TUNNEL_IS_MANDATORY));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MIP_FA_MISSING_NAI ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_MISSING_NAI));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_MISSING_HOME_AGENT ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_MISSING_HOME_AGENT));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_MISSING_HOME_ADDRESS ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_MISSING_HOME_ADDRESS));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_UNKNOWN_CHALLENGE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_UNKNOWN_CHALLENGE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_FA_MISSING_CHALLENGE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_MISSING_CHALLENGE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MIP_FA_STALE_CHALLENGE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MIP_FA_STALE_CHALLENGE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_HA_REASON_UNSPECIFIED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_HA_REASON_UNSPECIFIED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_HA_ADMIN_PROHIBITED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_HA_ADMIN_PROHIBITED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MIP_HA_INSUFFICIENT_RESOURCES ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_HA_INSUFFICIENT_RESOURCES));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MIP_HA_REGISTRATION_ID_MISMATCH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_HA_REGISTRATION_ID_MISMATCH));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_HA_MALFORMED_REQUEST ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MIP_HA_MALFORMED_REQUEST));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_HA_REVERSE_TUNNEL_UNAVAILABLE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MIP_HA_REVERSE_TUNNEL_UNAVAILABLE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MIP_HA_REVERSE_TUNNEL_IS_MANDATORY ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MIP_HA_REVERSE_TUNNEL_IS_MANDATORY));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MIP_HA_ENCAPSULATION_UNAVAILABLE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MIP_HA_ENCAPSULATION_UNAVAILABLE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CLOSE_IN_PROGRESS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CLOSE_IN_PROGRESS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NETWORK_INITIATED_TERMINATION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              NETWORK_INITIATED_TERMINATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MODEM_APP_PREEMPTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MODEM_APP_PREEMPTED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDN_IPV4_CALL_DISALLOWED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDN_IPV4_CALL_DISALLOWED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDN_IPV4_CALL_THROTTLED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDN_IPV4_CALL_THROTTLED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDN_IPV6_CALL_DISALLOWED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDN_IPV6_CALL_DISALLOWED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDN_IPV6_CALL_THROTTLED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDN_IPV6_CALL_THROTTLED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MODEM_RESTART ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MODEM_RESTART));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PDP_PPP_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PDP_PPP_NOT_SUPPORTED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UNPREFERRED_RAT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::UNPREFERRED_RAT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PHYSICAL_LINK_CLOSE_IN_PROGRESS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              PHYSICAL_LINK_CLOSE_IN_PROGRESS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::APN_PENDING_HANDOVER ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::APN_PENDING_HANDOVER));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PROFILE_BEARER_INCOMPATIBLE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PROFILE_BEARER_INCOMPATIBLE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::SIM_CARD_CHANGED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::SIM_CARD_CHANGED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::LOW_POWER_MODE_OR_POWERING_DOWN ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              LOW_POWER_MODE_OR_POWERING_DOWN));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::APN_DISABLED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::APN_DISABLED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MAX_PPP_INACTIVITY_TIMER_EXPIRED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MAX_PPP_INACTIVITY_TIMER_EXPIRED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::IPV6_ADDRESS_TRANSFER_FAILED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::IPV6_ADDRESS_TRANSFER_FAILED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::TRAT_SWAP_FAILED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::TRAT_SWAP_FAILED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EHRPD_TO_HRPD_FALLBACK ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EHRPD_TO_HRPD_FALLBACK));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MIP_CONFIG_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MIP_CONFIG_FAILURE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDN_INACTIVITY_TIMER_EXPIRED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDN_INACTIVITY_TIMER_EXPIRED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MAX_IPV4_CONNECTIONS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MAX_IPV4_CONNECTIONS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MAX_IPV6_CONNECTIONS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MAX_IPV6_CONNECTIONS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::APN_MISMATCH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::APN_MISMATCH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::IP_VERSION_MISMATCH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::IP_VERSION_MISMATCH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DUN_CALL_DISALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DUN_CALL_DISALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INTERNAL_EPC_NONEPC_TRANSITION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              INTERNAL_EPC_NONEPC_TRANSITION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INTERFACE_IN_USE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INTERFACE_IN_USE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::APN_DISALLOWED_ON_ROAMING ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::APN_DISALLOWED_ON_ROAMING));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::APN_PARAMETERS_CHANGED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::APN_PARAMETERS_CHANGED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NULL_APN_DISALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NULL_APN_DISALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::THERMAL_MITIGATION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::THERMAL_MITIGATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DATA_SETTINGS_DISABLED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DATA_SETTINGS_DISABLED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DATA_ROAMING_SETTINGS_DISABLED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              DATA_ROAMING_SETTINGS_DISABLED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DDS_SWITCHED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DDS_SWITCHED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::FORBIDDEN_APN_NAME ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::FORBIDDEN_APN_NAME));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DDS_SWITCH_IN_PROGRESS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DDS_SWITCH_IN_PROGRESS));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::CALL_DISALLOWED_IN_ROAMING ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::CALL_DISALLOWED_IN_ROAMING));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NON_IP_NOT_SUPPORTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NON_IP_NOT_SUPPORTED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDN_NON_IP_CALL_THROTTLED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDN_NON_IP_CALL_THROTTLED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDN_NON_IP_CALL_DISALLOWED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDN_NON_IP_CALL_DISALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CDMA_LOCK ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CDMA_LOCK));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CDMA_INTERCEPT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CDMA_INTERCEPT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CDMA_REORDER ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CDMA_REORDER));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CDMA_RELEASE_DUE_TO_SO_REJECTION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              CDMA_RELEASE_DUE_TO_SO_REJECTION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CDMA_INCOMING_CALL ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CDMA_INCOMING_CALL));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CDMA_ALERT_STOP ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CDMA_ALERT_STOP));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::CHANNEL_ACQUISITION_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::CHANNEL_ACQUISITION_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MAX_ACCESS_PROBE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MAX_ACCESS_PROBE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NO_RESPONSE_FROM_BASE_STATION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              NO_RESPONSE_FROM_BASE_STATION));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::REJECTED_BY_BASE_STATION ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::REJECTED_BY_BASE_STATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CONCURRENT_SERVICES_INCOMPATIBLE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              CONCURRENT_SERVICES_INCOMPATIBLE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NO_CDMA_SERVICE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NO_CDMA_SERVICE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RUIM_NOT_PRESENT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::RUIM_NOT_PRESENT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CDMA_RETRY_ORDER ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CDMA_RETRY_ORDER));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ACCESS_BLOCK ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ACCESS_BLOCK));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ACCESS_BLOCK_ALL ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ACCESS_BLOCK_ALL));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::IS707B_MAX_ACCESS_PROBES ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::IS707B_MAX_ACCESS_PROBES));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::THERMAL_EMERGENCY ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::THERMAL_EMERGENCY));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CONCURRENT_SERVICES_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              CONCURRENT_SERVICES_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INCOMING_CALL_REJECTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INCOMING_CALL_REJECTED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NO_SERVICE_ON_GATEWAY ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NO_SERVICE_ON_GATEWAY));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NO_GPRS_CONTEXT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NO_GPRS_CONTEXT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ILLEGAL_MS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ILLEGAL_MS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ILLEGAL_ME ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ILLEGAL_ME));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::GPRS_SERVICES_NOT_ALLOWED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::GPRS_SERVICES_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::IMPLICITLY_DETACHED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::IMPLICITLY_DETACHED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PLMN_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PLMN_NOT_ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::LOCATION_AREA_NOT_ALLOWED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::LOCATION_AREA_NOT_ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PDP_DUPLICATE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PDP_DUPLICATE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UE_RAT_CHANGE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::UE_RAT_CHANGE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CONGESTION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CONGESTION));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::NO_PDP_CONTEXT_ACTIVATED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::NO_PDP_CONTEXT_ACTIVATED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::ACCESS_CLASS_DSAC_REJECTION ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::ACCESS_CLASS_DSAC_REJECTION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PDP_ACTIVATE_MAX_RETRY_FAILED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              PDP_ACTIVATE_MAX_RETRY_FAILED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RADIO_ACCESS_BEARER_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::RADIO_ACCESS_BEARER_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ESM_UNKNOWN_EPS_BEARER_CONTEXT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              ESM_UNKNOWN_EPS_BEARER_CONTEXT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DRB_RELEASED_BY_RRC ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DRB_RELEASED_BY_RRC));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::CONNECTION_RELEASED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::CONNECTION_RELEASED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMM_DETACHED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EMM_DETACHED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMM_ATTACH_FAILED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EMM_ATTACH_FAILED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMM_ATTACH_STARTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EMM_ATTACH_STARTED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::LTE_NAS_SERVICE_REQUEST_FAILED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              LTE_NAS_SERVICE_REQUEST_FAILED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DUPLICATE_BEARER_ID ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DUPLICATE_BEARER_ID));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::ESM_COLLISION_SCENARIOS ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::ESM_COLLISION_SCENARIOS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ESM_BAD_OTA_MESSAGE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ESM_BAD_OTA_MESSAGE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::DS_EXPLICIT_DEACTIVATION ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::DS_EXPLICIT_DEACTIVATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ESM_LOCAL_CAUSE_NONE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ESM_LOCAL_CAUSE_NONE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::LTE_THROTTLING_NOT_REQUIRED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::LTE_THROTTLING_NOT_REQUIRED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::ACCESS_CONTROL_LIST_CHECK_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        ACCESS_CONTROL_LIST_CHECK_FAILURE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::SERVICE_NOT_ALLOWED_ON_PLMN ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::SERVICE_NOT_ALLOWED_ON_PLMN));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMM_T3417_EXPIRED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EMM_T3417_EXPIRED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMM_T3417_EXT_EXPIRED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EMM_T3417_EXT_EXPIRED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_UPLINK_DATA_TRANSMISSION_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        RRC_UPLINK_DATA_TRANSMISSION_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RRC_UPLINK_CONNECTION_RELEASE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_UPLINK_CONNECTION_RELEASE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RRC_UPLINK_RADIO_LINK_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_UPLINK_RADIO_LINK_FAILURE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_UPLINK_ERROR_REQUEST_FROM_NAS ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        RRC_UPLINK_ERROR_REQUEST_FROM_NAS));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_ACCESS_STRATUM_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        RRC_CONNECTION_ACCESS_STRATUM_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_ACCESS_BARRED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::RRC_CONNECTION_ACCESS_BARRED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_CELL_RESELECTION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_CELL_RESELECTION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_CONFIG_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_CONFIG_FAILURE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_TIMER_EXPIRED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::RRC_CONNECTION_TIMER_EXPIRED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_LINK_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::RRC_CONNECTION_LINK_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_CELL_NOT_CAMPED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_CELL_NOT_CAMPED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_REJECT_BY_NETWORK ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_REJECT_BY_NETWORK));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_NORMAL_RELEASE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_NORMAL_RELEASE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_RADIO_LINK_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        RRC_CONNECTION_RADIO_LINK_FAILURE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_REESTABLISHMENT_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        RRC_CONNECTION_REESTABLISHMENT_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_ABORT_REQUEST ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::RRC_CONNECTION_ABORT_REQUEST));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ESM_PROCEDURE_TIME_OUT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ESM_PROCEDURE_TIME_OUT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INVALID_CONNECTION_ID ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_CONNECTION_ID));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MAXIMIUM_NSAPIS_EXCEEDED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MAXIMIUM_NSAPIS_EXCEEDED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INVALID_PRIMARY_NSAPI ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_PRIMARY_NSAPI));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::CANNOT_ENCODE_OTA_MESSAGE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::CANNOT_ENCODE_OTA_MESSAGE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RADIO_ACCESS_BEARER_SETUP_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        RADIO_ACCESS_BEARER_SETUP_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PDP_ESTABLISH_TIMEOUT_EXPIRED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              PDP_ESTABLISH_TIMEOUT_EXPIRED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDP_MODIFY_TIMEOUT_EXPIRED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDP_MODIFY_TIMEOUT_EXPIRED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::PDP_INACTIVE_TIMEOUT_EXPIRED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::PDP_INACTIVE_TIMEOUT_EXPIRED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PDP_LOWERLAYER_ERROR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PDP_LOWERLAYER_ERROR));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PDP_MODIFY_COLLISION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PDP_MODIFY_COLLISION));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NAS_REQUEST_REJECTED_BY_NETWORK ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              NAS_REQUEST_REJECTED_BY_NETWORK));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_INVALID_REQUEST ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_INVALID_REQUEST));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      RRC_CONNECTION_TRACKING_AREA_ID_CHANGED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_TRACKING_AREA_ID_CHANGED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_RF_UNAVAILABLE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_RF_UNAVAILABLE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::RRC_CONNECTION_ABORTED_AFTER_HANDOVER ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        RRC_CONNECTION_ABORTED_AFTER_HANDOVER));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::IMEI_NOT_ACCEPTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::IMEI_NOT_ACCEPTED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EPS_SERVICES_NOT_ALLOWED_IN_PLMN ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              EPS_SERVICES_NOT_ALLOWED_IN_PLMN));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MSC_TEMPORARILY_NOT_REACHABLE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MSC_TEMPORARILY_NOT_REACHABLE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::CS_DOMAIN_NOT_AVAILABLE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::CS_DOMAIN_NOT_AVAILABLE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::ESM_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::ESM_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MAC_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::MAC_FAILURE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::SYNCHRONIZATION_FAILURE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::SYNCHRONIZATION_FAILURE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::UE_SECURITY_CAPABILITIES_MISMATCH ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        UE_SECURITY_CAPABILITIES_MISMATCH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::SECURITY_MODE_REJECTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::SECURITY_MODE_REJECTED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::UNACCEPTABLE_NON_EPS_AUTHENTICATION ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        UNACCEPTABLE_NON_EPS_AUTHENTICATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NO_EPS_BEARER_CONTEXT_ACTIVATED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              NO_EPS_BEARER_CONTEXT_ACTIVATED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INVALID_EMM_STATE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_EMM_STATE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NAS_LAYER_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NAS_LAYER_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::MULTIPLE_PDP_CALL_NOT_ALLOWED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              MULTIPLE_PDP_CALL_NOT_ALLOWED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMBMS_NOT_ENABLED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EMBMS_NOT_ENABLED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::IRAT_HANDOVER_FAILED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::IRAT_HANDOVER_FAILED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::EMBMS_REGULAR_DEACTIVATION ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::EMBMS_REGULAR_DEACTIVATION));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::TEST_LOOPBACK_REGULAR_DEACTIVATION ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        TEST_LOOPBACK_REGULAR_DEACTIVATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::LOWER_LAYER_REGISTRATION_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              LOWER_LAYER_REGISTRATION_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DATA_PLAN_EXPIRED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DATA_PLAN_EXPIRED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UMTS_HANDOVER_TO_IWLAN ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::UMTS_HANDOVER_TO_IWLAN));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::
-                      EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EVDO_HDR_CHANGED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EVDO_HDR_CHANGED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EVDO_HDR_EXITED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EVDO_HDR_EXITED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EVDO_HDR_NO_SESSION ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EVDO_HDR_NO_SESSION));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::EVDO_HDR_CONNECTION_SETUP_TIMEOUT ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        EVDO_HDR_CONNECTION_SETUP_TIMEOUT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::FAILED_TO_ACQUIRE_COLOCATED_HDR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              FAILED_TO_ACQUIRE_COLOCATED_HDR));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::OTASP_COMMIT_IN_PROGRESS ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::OTASP_COMMIT_IN_PROGRESS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NO_HYBRID_HDR_SERVICE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NO_HYBRID_HDR_SERVICE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::HDR_NO_LOCK_GRANTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::HDR_NO_LOCK_GRANTED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DBM_OR_SMS_IN_PROGRESS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DBM_OR_SMS_IN_PROGRESS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::HDR_FADE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::HDR_FADE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::HDR_ACCESS_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::HDR_ACCESS_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UNSUPPORTED_1X_PREV ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::UNSUPPORTED_1X_PREV));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::LOCAL_END ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::LOCAL_END));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NO_SERVICE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NO_SERVICE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::FADE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::FADE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NORMAL_RELEASE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NORMAL_RELEASE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::ACCESS_ATTEMPT_ALREADY_IN_PROGRESS ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        ACCESS_ATTEMPT_ALREADY_IN_PROGRESS));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::REDIRECTION_OR_HANDOFF_IN_PROGRESS ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        REDIRECTION_OR_HANDOFF_IN_PROGRESS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::EMERGENCY_MODE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::EMERGENCY_MODE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PHONE_IN_USE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PHONE_IN_USE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INVALID_MODE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_MODE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::INVALID_SIM_STATE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::INVALID_SIM_STATE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::NO_COLLOCATED_HDR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::NO_COLLOCATED_HDR));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::UE_IS_ENTERING_POWERSAVE_MODE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              UE_IS_ENTERING_POWERSAVE_MODE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::DUAL_SWITCH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::DUAL_SWITCH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PPP_TIMEOUT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PPP_TIMEOUT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PPP_AUTH_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PPP_AUTH_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PPP_OPTION_MISMATCH ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PPP_OPTION_MISMATCH));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PPP_PAP_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PPP_PAP_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PPP_CHAP_FAILURE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PPP_CHAP_FAILURE));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::PPP_CLOSE_IN_PROGRESS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::PPP_CLOSE_IN_PROGRESS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::LIMITED_TO_IPV4 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::LIMITED_TO_IPV4));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::LIMITED_TO_IPV6 ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::LIMITED_TO_IPV6));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::VSNCP_TIMEOUT ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_TIMEOUT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::VSNCP_GEN_ERROR ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_GEN_ERROR));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::VSNCP_APN_UNAUTHORIZED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_APN_UNATHORIZED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::VSNCP_PDN_LIMIT_EXCEEDED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_PDN_LIMIT_EXCEEDED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::VSNCP_NO_PDN_GATEWAY_ADDRESS ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_NO_PDN_GATEWAY_ADDRESS));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::VSNCP_PDN_GATEWAY_UNREACHABLE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              VSNCP_PDN_GATEWAY_UNREACHABLE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::VSNCP_PDN_GATEWAY_REJECT ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_PDN_GATEWAY_REJECT));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::VSNCP_INSUFFICIENT_PARAMETERS ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              VSNCP_INSUFFICIENT_PARAMETERS));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::VSNCP_RESOURCE_UNAVAILABLE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_RESOURCE_UNAVAILABLE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::VSNCP_ADMINISTRATIVELY_PROHIBITED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::
-                        VSNCP_ADMINISTRATIVELY_PROHIBITED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::VSNCP_PDN_ID_IN_USE ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_PDN_ID_IN_USE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::VSNCP_SUBSCRIBER_LIMITATION ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_SUBSCRIBER_LIMITATION));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::VSNCP_PDN_EXISTS_FOR_THIS_APN ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::
-                              VSNCP_PDN_EXISTS_FOR_THIS_APN));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::VSNCP_RECONNECT_NOT_ALLOWED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::VSNCP_RECONNECT_NOT_ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::IPV6_PREFIX_UNAVAILABLE ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::IPV6_PREFIX_UNAVAILABLE));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::HANDOFF_PREFERENCE_CHANGED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::HANDOFF_PREFERENCE_CHANGED));
-static_assert(aidl::android::hardware::radio::DataCallFailCause::SLICE_REJECTED ==
-              static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                      ::android::hardware::radio::V1_6::DataCallFailCause::SLICE_REJECTED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::MATCH_ALL_RULE_NOT_ALLOWED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::MATCH_ALL_RULE_NOT_ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::DataCallFailCause::ALL_MATCHING_RULES_FAILED ==
-        static_cast<aidl::android::hardware::radio::DataCallFailCause>(
-                ::android::hardware::radio::V1_6::DataCallFailCause::ALL_MATCHING_RULES_FAILED));
-
-static_assert(aidl::android::hardware::radio::SliceStatus::UNKNOWN ==
-              static_cast<aidl::android::hardware::radio::SliceStatus>(
-                      ::android::hardware::radio::V1_6::SliceStatus::UNKNOWN));
-static_assert(aidl::android::hardware::radio::SliceStatus::CONFIGURED ==
-              static_cast<aidl::android::hardware::radio::SliceStatus>(
-                      ::android::hardware::radio::V1_6::SliceStatus::CONFIGURED));
-static_assert(aidl::android::hardware::radio::SliceStatus::ALLOWED ==
-              static_cast<aidl::android::hardware::radio::SliceStatus>(
-                      ::android::hardware::radio::V1_6::SliceStatus::ALLOWED));
-static_assert(
-        aidl::android::hardware::radio::SliceStatus::REJECTED_NOT_AVAILABLE_IN_PLMN ==
-        static_cast<aidl::android::hardware::radio::SliceStatus>(
-                ::android::hardware::radio::V1_6::SliceStatus::REJECTED_NOT_AVAILABLE_IN_PLMN));
-static_assert(
-        aidl::android::hardware::radio::SliceStatus::REJECTED_NOT_AVAILABLE_IN_REG_AREA ==
-        static_cast<aidl::android::hardware::radio::SliceStatus>(
-                ::android::hardware::radio::V1_6::SliceStatus::REJECTED_NOT_AVAILABLE_IN_REG_AREA));
-static_assert(aidl::android::hardware::radio::SliceStatus::DEFAULT_CONFIGURED ==
-              static_cast<aidl::android::hardware::radio::SliceStatus>(
-                      ::android::hardware::radio::V1_6::SliceStatus::DEFAULT_CONFIGURED));
-
-static_assert(aidl::android::hardware::radio::SscMode::MODE_1 ==
-              static_cast<aidl::android::hardware::radio::SscMode>(
-                      ::android::hardware::radio::V1_6::SscMode::MODE_1));
-static_assert(aidl::android::hardware::radio::SscMode::MODE_2 ==
-              static_cast<aidl::android::hardware::radio::SscMode>(
-                      ::android::hardware::radio::V1_6::SscMode::MODE_2));
-static_assert(aidl::android::hardware::radio::SscMode::MODE_3 ==
-              static_cast<aidl::android::hardware::radio::SscMode>(
-                      ::android::hardware::radio::V1_6::SscMode::MODE_3));
-
-static_assert(aidl::android::hardware::radio::PublicKeyType::EPDG ==
-              static_cast<aidl::android::hardware::radio::PublicKeyType>(
-                      ::android::hardware::radio::V1_6::PublicKeyType::EPDG));
-static_assert(aidl::android::hardware::radio::PublicKeyType::WLAN ==
-              static_cast<aidl::android::hardware::radio::PublicKeyType>(
-                      ::android::hardware::radio::V1_6::PublicKeyType::WLAN));
-
-static_assert(aidl::android::hardware::radio::PbReceivedStatus::PB_RECEIVED_OK ==
-              static_cast<aidl::android::hardware::radio::PbReceivedStatus>(
-                      ::android::hardware::radio::V1_6::PbReceivedStatus::PB_RECEIVED_OK));
-static_assert(aidl::android::hardware::radio::PbReceivedStatus::PB_RECEIVED_ERROR ==
-              static_cast<aidl::android::hardware::radio::PbReceivedStatus>(
-                      ::android::hardware::radio::V1_6::PbReceivedStatus::PB_RECEIVED_ERROR));
-static_assert(aidl::android::hardware::radio::PbReceivedStatus::PB_RECEIVED_ABORT ==
-              static_cast<aidl::android::hardware::radio::PbReceivedStatus>(
-                      ::android::hardware::radio::V1_6::PbReceivedStatus::PB_RECEIVED_ABORT));
-static_assert(aidl::android::hardware::radio::PbReceivedStatus::PB_RECEIVED_FINAL ==
-              static_cast<aidl::android::hardware::radio::PbReceivedStatus>(
-                      ::android::hardware::radio::V1_6::PbReceivedStatus::PB_RECEIVED_FINAL));
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::IccIo& in,
-        aidl::android::hardware::radio::IccIo* out) {
-    out->command = static_cast<int32_t>(in.command);
-    out->fileId = static_cast<int32_t>(in.fileId);
-    out->path = in.path;
-    out->p1 = static_cast<int32_t>(in.p1);
-    out->p2 = static_cast<int32_t>(in.p2);
-    out->p3 = static_cast<int32_t>(in.p3);
-    out->data = in.data;
-    out->pin2 = in.pin2;
-    out->aid = in.aid;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::NeighboringCell& in,
-        aidl::android::hardware::radio::NeighboringCell* out) {
-    out->cid = in.cid;
-    out->rssi = static_cast<int32_t>(in.rssi);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::UusInfo& in,
-        aidl::android::hardware::radio::UusInfo* out) {
-    out->uusType = static_cast<aidl::android::hardware::radio::UusType>(in.uusType);
-    out->uusDcs = static_cast<aidl::android::hardware::radio::UusDcs>(in.uusDcs);
-    out->uusData = in.uusData;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(const ::android::hardware::radio::V1_0::Dial& in,
-                                                   aidl::android::hardware::radio::Dial* out) {
-    out->address = in.address;
-    out->clir = static_cast<aidl::android::hardware::radio::Clir>(in.clir);
-    {
-        size_t size = in.uusInfo.size();
-        aidl::android::hardware::radio::UusInfo uusInfo;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.uusInfo[i], &uusInfo)) return false;
-            out->uusInfo.push_back(uusInfo);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::LastCallFailCauseInfo& in,
-        aidl::android::hardware::radio::LastCallFailCauseInfo* out) {
-    out->causeCode = static_cast<aidl::android::hardware::radio::LastCallFailCause>(in.causeCode);
-    out->vendorCause = in.vendorCause;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::GsmSignalStrength& in,
-        aidl::android::hardware::radio::GsmSignalStrength* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.signalStrength > std::numeric_limits<int32_t>::max() || in.signalStrength < 0) {
-        return false;
-    }
-    out->signalStrength = static_cast<int32_t>(in.signalStrength);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.bitErrorRate > std::numeric_limits<int32_t>::max() || in.bitErrorRate < 0) {
-        return false;
-    }
-    out->bitErrorRate = static_cast<int32_t>(in.bitErrorRate);
-    out->timingAdvance = static_cast<int32_t>(in.timingAdvance);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSignalStrength& in,
-        aidl::android::hardware::radio::CdmaSignalStrength* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.dbm > std::numeric_limits<int32_t>::max() || in.dbm < 0) {
-        return false;
-    }
-    out->dbm = static_cast<int32_t>(in.dbm);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.ecio > std::numeric_limits<int32_t>::max() || in.ecio < 0) {
-        return false;
-    }
-    out->ecio = static_cast<int32_t>(in.ecio);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::EvdoSignalStrength& in,
-        aidl::android::hardware::radio::EvdoSignalStrength* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.dbm > std::numeric_limits<int32_t>::max() || in.dbm < 0) {
-        return false;
-    }
-    out->dbm = static_cast<int32_t>(in.dbm);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.ecio > std::numeric_limits<int32_t>::max() || in.ecio < 0) {
-        return false;
-    }
-    out->ecio = static_cast<int32_t>(in.ecio);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.signalNoiseRatio > std::numeric_limits<int32_t>::max() || in.signalNoiseRatio < 0) {
-        return false;
-    }
-    out->signalNoiseRatio = static_cast<int32_t>(in.signalNoiseRatio);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SendSmsResult& in,
-        aidl::android::hardware::radio::SendSmsResult* out) {
-    out->messageRef = static_cast<int32_t>(in.messageRef);
-    out->ackPDU = in.ackPDU;
-    out->errorCode = static_cast<int32_t>(in.errorCode);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::IccIoResult& in,
-        aidl::android::hardware::radio::IccIoResult* out) {
-    out->sw1 = static_cast<int32_t>(in.sw1);
-    out->sw2 = static_cast<int32_t>(in.sw2);
-    out->simResponse = in.simResponse;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CallForwardInfo& in,
-        aidl::android::hardware::radio::CallForwardInfo* out) {
-    out->status = static_cast<aidl::android::hardware::radio::CallForwardInfoStatus>(in.status);
-    out->reason = static_cast<int32_t>(in.reason);
-    out->serviceClass = static_cast<int32_t>(in.serviceClass);
-    out->toa = static_cast<int32_t>(in.toa);
-    out->number = in.number;
-    out->timeSeconds = static_cast<int32_t>(in.timeSeconds);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::OperatorInfo& in,
-        aidl::android::hardware::radio::OperatorInfo* out) {
-    out->alphaLong = in.alphaLong;
-    out->alphaShort = in.alphaShort;
-    out->operatorNumeric = in.operatorNumeric;
-    out->status = static_cast<aidl::android::hardware::radio::OperatorStatus>(in.status);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SmsWriteArgs& in,
-        aidl::android::hardware::radio::SmsWriteArgs* out) {
-    out->status = static_cast<aidl::android::hardware::radio::SmsWriteArgsStatus>(in.status);
-    out->pdu = in.pdu;
-    out->smsc = in.smsc;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsAddress& in,
-        aidl::android::hardware::radio::CdmaSmsAddress* out) {
-    out->digitMode = static_cast<aidl::android::hardware::radio::CdmaSmsDigitMode>(in.digitMode);
-    out->numberMode = static_cast<aidl::android::hardware::radio::CdmaSmsNumberMode>(in.numberMode);
-    out->numberType = static_cast<aidl::android::hardware::radio::CdmaSmsNumberType>(in.numberType);
-    out->numberPlan = static_cast<aidl::android::hardware::radio::CdmaSmsNumberPlan>(in.numberPlan);
-    {
-        size_t size = in.digits.size();
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.digits[i] > std::numeric_limits<int8_t>::max() || in.digits[i] < 0) {
-                return false;
-            }
-            out->digits.push_back(static_cast<int8_t>(in.digits[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsSubaddress& in,
-        aidl::android::hardware::radio::CdmaSmsSubaddress* out) {
-    out->subaddressType =
-            static_cast<aidl::android::hardware::radio::CdmaSmsSubaddressType>(in.subaddressType);
-    out->odd = static_cast<bool>(in.odd);
-    {
-        size_t size = in.digits.size();
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.digits[i] > std::numeric_limits<int8_t>::max() || in.digits[i] < 0) {
-                return false;
-            }
-            out->digits.push_back(static_cast<int8_t>(in.digits[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsMessage& in,
-        aidl::android::hardware::radio::CdmaSmsMessage* out) {
-    out->teleserviceId = static_cast<int32_t>(in.teleserviceId);
-    out->isServicePresent = static_cast<bool>(in.isServicePresent);
-    out->serviceCategory = static_cast<int32_t>(in.serviceCategory);
-    if (!translate(in.address, &out->address)) return false;
-    if (!translate(in.subAddress, &out->subAddress)) return false;
-    {
-        size_t size = in.bearerData.size();
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.bearerData[i] > std::numeric_limits<int8_t>::max() || in.bearerData[i] < 0) {
-                return false;
-            }
-            out->bearerData.push_back(static_cast<int8_t>(in.bearerData[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsAck& in,
-        aidl::android::hardware::radio::CdmaSmsAck* out) {
-    out->errorClass = static_cast<aidl::android::hardware::radio::CdmaSmsErrorClass>(in.errorClass);
-    out->smsCauseCode = static_cast<int32_t>(in.smsCauseCode);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaBroadcastSmsConfigInfo& in,
-        aidl::android::hardware::radio::CdmaBroadcastSmsConfigInfo* out) {
-    out->serviceCategory = static_cast<int32_t>(in.serviceCategory);
-    out->language = static_cast<int32_t>(in.language);
-    out->selected = static_cast<bool>(in.selected);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsWriteArgs& in,
-        aidl::android::hardware::radio::CdmaSmsWriteArgs* out) {
-    out->status = static_cast<aidl::android::hardware::radio::CdmaSmsWriteArgsStatus>(in.status);
-    if (!translate(in.message, &out->message)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::GsmBroadcastSmsConfigInfo& in,
-        aidl::android::hardware::radio::GsmBroadcastSmsConfigInfo* out) {
-    out->fromServiceId = static_cast<int32_t>(in.fromServiceId);
-    out->toServiceId = static_cast<int32_t>(in.toServiceId);
-    out->fromCodeScheme = static_cast<int32_t>(in.fromCodeScheme);
-    out->toCodeScheme = static_cast<int32_t>(in.toCodeScheme);
-    out->selected = static_cast<bool>(in.selected);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::GsmSmsMessage& in,
-        aidl::android::hardware::radio::GsmSmsMessage* out) {
-    out->smscPdu = in.smscPdu;
-    out->pdu = in.pdu;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::ImsSmsMessage& in,
-        aidl::android::hardware::radio::ImsSmsMessage* out) {
-    out->tech = static_cast<aidl::android::hardware::radio::RadioTechnologyFamily>(in.tech);
-    out->retry = static_cast<bool>(in.retry);
-    out->messageRef = static_cast<int32_t>(in.messageRef);
-    {
-        size_t size = in.cdmaMessage.size();
-        aidl::android::hardware::radio::CdmaSmsMessage cdmaMessage;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.cdmaMessage[i], &cdmaMessage)) return false;
-            out->cdmaMessage.push_back(cdmaMessage);
-        }
-    }
-    {
-        size_t size = in.gsmMessage.size();
-        aidl::android::hardware::radio::GsmSmsMessage gsmMessage;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.gsmMessage[i], &gsmMessage)) return false;
-            out->gsmMessage.push_back(gsmMessage);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SimApdu& in,
-        aidl::android::hardware::radio::SimApdu* out) {
-    out->sessionId = static_cast<int32_t>(in.sessionId);
-    out->cla = static_cast<int32_t>(in.cla);
-    out->instruction = static_cast<int32_t>(in.instruction);
-    out->p1 = static_cast<int32_t>(in.p1);
-    out->p2 = static_cast<int32_t>(in.p2);
-    out->p3 = static_cast<int32_t>(in.p3);
-    out->data = in.data;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::NvWriteItem& in,
-        aidl::android::hardware::radio::NvWriteItem* out) {
-    out->itemId = static_cast<aidl::android::hardware::radio::NvItem>(in.itemId);
-    out->value = in.value;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SelectUiccSub& in,
-        aidl::android::hardware::radio::SelectUiccSub* out) {
-    out->slot = static_cast<int32_t>(in.slot);
-    out->appIndex = static_cast<int32_t>(in.appIndex);
-    out->subType = static_cast<aidl::android::hardware::radio::SubscriptionType>(in.subType);
-    out->actStatus = static_cast<aidl::android::hardware::radio::UiccSubActStatus>(in.actStatus);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::HardwareConfigModem& in,
-        aidl::android::hardware::radio::HardwareConfigModem* out) {
-    out->rilModel = static_cast<int32_t>(in.rilModel);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.rat > std::numeric_limits<int32_t>::max() || in.rat < 0) {
-        return false;
-    }
-    out->rat = static_cast<int32_t>(in.rat);
-    out->maxVoice = static_cast<int32_t>(in.maxVoice);
-    out->maxData = static_cast<int32_t>(in.maxData);
-    out->maxStandby = static_cast<int32_t>(in.maxStandby);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::HardwareConfigSim& in,
-        aidl::android::hardware::radio::HardwareConfigSim* out) {
-    out->modemUuid = in.modemUuid;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::HardwareConfig& in,
-        aidl::android::hardware::radio::HardwareConfig* out) {
-    out->type = static_cast<aidl::android::hardware::radio::HardwareConfigType>(in.type);
-    out->uuid = in.uuid;
-    out->state = static_cast<aidl::android::hardware::radio::HardwareConfigState>(in.state);
-    {
-        size_t size = in.modem.size();
-        aidl::android::hardware::radio::HardwareConfigModem modem;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.modem[i], &modem)) return false;
-            out->modem.push_back(modem);
-        }
-    }
-    {
-        size_t size = in.sim.size();
-        aidl::android::hardware::radio::HardwareConfigSim sim;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.sim[i], &sim)) return false;
-            out->sim.push_back(sim);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::LceStatusInfo& in,
-        aidl::android::hardware::radio::LceStatusInfo* out) {
-    out->lceStatus = static_cast<aidl::android::hardware::radio::LceStatus>(in.lceStatus);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.actualIntervalMs > std::numeric_limits<int8_t>::max() || in.actualIntervalMs < 0) {
-        return false;
-    }
-    out->actualIntervalMs = static_cast<int8_t>(in.actualIntervalMs);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::LceDataInfo& in,
-        aidl::android::hardware::radio::LceDataInfo* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.lastHopCapacityKbps > std::numeric_limits<int32_t>::max() ||
-        in.lastHopCapacityKbps < 0) {
-        return false;
-    }
-    out->lastHopCapacityKbps = static_cast<int32_t>(in.lastHopCapacityKbps);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.confidenceLevel > std::numeric_limits<int8_t>::max() || in.confidenceLevel < 0) {
-        return false;
-    }
-    out->confidenceLevel = static_cast<int8_t>(in.confidenceLevel);
-    out->lceSuspended = static_cast<bool>(in.lceSuspended);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::ActivityStatsInfo& in,
-        aidl::android::hardware::radio::ActivityStatsInfo* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.sleepModeTimeMs > std::numeric_limits<int32_t>::max() || in.sleepModeTimeMs < 0) {
-        return false;
-    }
-    out->sleepModeTimeMs = static_cast<int32_t>(in.sleepModeTimeMs);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.idleModeTimeMs > std::numeric_limits<int32_t>::max() || in.idleModeTimeMs < 0) {
-        return false;
-    }
-    out->idleModeTimeMs = static_cast<int32_t>(in.idleModeTimeMs);
-    {
-        size_t size = sizeof(in.txmModetimeMs) / sizeof(in.txmModetimeMs[0]);
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.txmModetimeMs[i] > std::numeric_limits<int32_t>::max() ||
-                in.txmModetimeMs[i] < 0) {
-                return false;
-            }
-            out->txmModetimeMs.push_back(static_cast<int32_t>(in.txmModetimeMs[i]));
-        }
-    }
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.rxModeTimeMs > std::numeric_limits<int32_t>::max() || in.rxModeTimeMs < 0) {
-        return false;
-    }
-    out->rxModeTimeMs = static_cast<int32_t>(in.rxModeTimeMs);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::Carrier& in,
-        aidl::android::hardware::radio::Carrier* out) {
-    out->mcc = in.mcc;
-    out->mnc = in.mnc;
-    out->matchType = static_cast<aidl::android::hardware::radio::CarrierMatchType>(in.matchType);
-    out->matchData = in.matchData;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CarrierRestrictions& in,
-        aidl::android::hardware::radio::CarrierRestrictions* out) {
-    {
-        size_t size = in.allowedCarriers.size();
-        aidl::android::hardware::radio::Carrier allowedCarriers;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.allowedCarriers[i], &allowedCarriers)) return false;
-            out->allowedCarriers.push_back(allowedCarriers);
-        }
-    }
-    {
-        size_t size = in.excludedCarriers.size();
-        aidl::android::hardware::radio::Carrier excludedCarriers;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.excludedCarriers[i], &excludedCarriers)) return false;
-            out->excludedCarriers.push_back(excludedCarriers);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SuppSvcNotification& in,
-        aidl::android::hardware::radio::SuppSvcNotification* out) {
-    out->isMT = static_cast<bool>(in.isMT);
-    out->code = static_cast<int32_t>(in.code);
-    out->index = static_cast<int32_t>(in.index);
-    out->type = static_cast<int32_t>(in.type);
-    out->number = in.number;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SimRefreshResult& in,
-        aidl::android::hardware::radio::SimRefreshResult* out) {
-    out->type = static_cast<aidl::android::hardware::radio::SimRefreshType>(in.type);
-    out->efId = static_cast<int32_t>(in.efId);
-    out->aid = in.aid;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSignalInfoRecord& in,
-        aidl::android::hardware::radio::CdmaSignalInfoRecord* out) {
-    out->isPresent = static_cast<bool>(in.isPresent);
-    out->signalType = static_cast<int8_t>(in.signalType);
-    out->alertPitch = static_cast<int8_t>(in.alertPitch);
-    out->signal = static_cast<int8_t>(in.signal);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaCallWaiting& in,
-        aidl::android::hardware::radio::CdmaCallWaiting* out) {
-    out->number = in.number;
-    out->numberPresentation =
-            static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPresentation>(
-                    in.numberPresentation);
-    out->name = in.name;
-    if (!translate(in.signalInfoRecord, &out->signalInfoRecord)) return false;
-    out->numberType =
-            static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberType>(in.numberType);
-    out->numberPlan =
-            static_cast<aidl::android::hardware::radio::CdmaCallWaitingNumberPlan>(in.numberPlan);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaDisplayInfoRecord& in,
-        aidl::android::hardware::radio::CdmaDisplayInfoRecord* out) {
-    out->alphaBuf = in.alphaBuf;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaNumberInfoRecord& in,
-        aidl::android::hardware::radio::CdmaNumberInfoRecord* out) {
-    out->number = in.number;
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.numberType > std::numeric_limits<int8_t>::max() || in.numberType < 0) {
-        return false;
-    }
-    out->numberType = static_cast<int8_t>(in.numberType);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.numberPlan > std::numeric_limits<int8_t>::max() || in.numberPlan < 0) {
-        return false;
-    }
-    out->numberPlan = static_cast<int8_t>(in.numberPlan);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.pi > std::numeric_limits<int8_t>::max() || in.pi < 0) {
-        return false;
-    }
-    out->pi = static_cast<int8_t>(in.pi);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.si > std::numeric_limits<int8_t>::max() || in.si < 0) {
-        return false;
-    }
-    out->si = static_cast<int8_t>(in.si);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaRedirectingNumberInfoRecord& in,
-        aidl::android::hardware::radio::CdmaRedirectingNumberInfoRecord* out) {
-    if (!translate(in.redirectingNumber, &out->redirectingNumber)) return false;
-    out->redirectingReason = static_cast<aidl::android::hardware::radio::CdmaRedirectingReason>(
-            in.redirectingReason);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaLineControlInfoRecord& in,
-        aidl::android::hardware::radio::CdmaLineControlInfoRecord* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.lineCtrlPolarityIncluded > std::numeric_limits<int8_t>::max() ||
-        in.lineCtrlPolarityIncluded < 0) {
-        return false;
-    }
-    out->lineCtrlPolarityIncluded = static_cast<int8_t>(in.lineCtrlPolarityIncluded);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.lineCtrlToggle > std::numeric_limits<int8_t>::max() || in.lineCtrlToggle < 0) {
-        return false;
-    }
-    out->lineCtrlToggle = static_cast<int8_t>(in.lineCtrlToggle);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.lineCtrlReverse > std::numeric_limits<int8_t>::max() || in.lineCtrlReverse < 0) {
-        return false;
-    }
-    out->lineCtrlReverse = static_cast<int8_t>(in.lineCtrlReverse);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.lineCtrlPowerDenial > std::numeric_limits<int8_t>::max() || in.lineCtrlPowerDenial < 0) {
-        return false;
-    }
-    out->lineCtrlPowerDenial = static_cast<int8_t>(in.lineCtrlPowerDenial);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaT53ClirInfoRecord& in,
-        aidl::android::hardware::radio::CdmaT53ClirInfoRecord* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.cause > std::numeric_limits<int8_t>::max() || in.cause < 0) {
-        return false;
-    }
-    out->cause = static_cast<int8_t>(in.cause);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaT53AudioControlInfoRecord& in,
-        aidl::android::hardware::radio::CdmaT53AudioControlInfoRecord* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.upLink > std::numeric_limits<int8_t>::max() || in.upLink < 0) {
-        return false;
-    }
-    out->upLink = static_cast<int8_t>(in.upLink);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.downLink > std::numeric_limits<int8_t>::max() || in.downLink < 0) {
-        return false;
-    }
-    out->downLink = static_cast<int8_t>(in.downLink);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaInformationRecord& in,
-        aidl::android::hardware::radio::CdmaInformationRecord* out) {
-    out->name = static_cast<aidl::android::hardware::radio::CdmaInfoRecName>(in.name);
-    {
-        size_t size = in.display.size();
-        aidl::android::hardware::radio::CdmaDisplayInfoRecord display;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.display[i], &display)) return false;
-            out->display.push_back(display);
-        }
-    }
-    {
-        size_t size = in.number.size();
-        aidl::android::hardware::radio::CdmaNumberInfoRecord number;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.number[i], &number)) return false;
-            out->number.push_back(number);
-        }
-    }
-    {
-        size_t size = in.signal.size();
-        aidl::android::hardware::radio::CdmaSignalInfoRecord signal;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.signal[i], &signal)) return false;
-            out->signal.push_back(signal);
-        }
-    }
-    {
-        size_t size = in.redir.size();
-        aidl::android::hardware::radio::CdmaRedirectingNumberInfoRecord redir;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.redir[i], &redir)) return false;
-            out->redir.push_back(redir);
-        }
-    }
-    {
-        size_t size = in.lineCtrl.size();
-        aidl::android::hardware::radio::CdmaLineControlInfoRecord lineCtrl;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.lineCtrl[i], &lineCtrl)) return false;
-            out->lineCtrl.push_back(lineCtrl);
-        }
-    }
-    {
-        size_t size = in.clir.size();
-        aidl::android::hardware::radio::CdmaT53ClirInfoRecord clir;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.clir[i], &clir)) return false;
-            out->clir.push_back(clir);
-        }
-    }
-    {
-        size_t size = in.audioCtrl.size();
-        aidl::android::hardware::radio::CdmaT53AudioControlInfoRecord audioCtrl;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.audioCtrl[i], &audioCtrl)) return false;
-            out->audioCtrl.push_back(audioCtrl);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaInformationRecords& in,
-        aidl::android::hardware::radio::CdmaInformationRecords* out) {
-    {
-        size_t size = in.infoRec.size();
-        aidl::android::hardware::radio::CdmaInformationRecord infoRec;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.infoRec[i], &infoRec)) return false;
-            out->infoRec.push_back(infoRec);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CfData& in,
-        aidl::android::hardware::radio::CfData* out) {
-    {
-        size_t size = in.cfInfo.size();
-        aidl::android::hardware::radio::CallForwardInfo cfInfo;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.cfInfo[i], &cfInfo)) return false;
-            out->cfInfo.push_back(cfInfo);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SsInfoData& in,
-        aidl::android::hardware::radio::SsInfoData* out) {
-    {
-        size_t size = in.ssInfo.size();
-        for (size_t i = 0; i < size; i++) {
-            out->ssInfo.push_back(static_cast<int32_t>(in.ssInfo[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::StkCcUnsolSsResult& in,
-        aidl::android::hardware::radio::StkCcUnsolSsResult* out) {
-    out->serviceType = static_cast<aidl::android::hardware::radio::SsServiceType>(in.serviceType);
-    out->requestType = static_cast<aidl::android::hardware::radio::SsRequestType>(in.requestType);
-    out->teleserviceType =
-            static_cast<aidl::android::hardware::radio::SsTeleserviceType>(in.teleserviceType);
-    out->serviceClass =
-            static_cast<aidl::android::hardware::radio::SuppServiceClass>(in.serviceClass);
-    out->result = static_cast<aidl::android::hardware::radio::RadioError>(in.result);
-    {
-        size_t size = in.ssInfo.size();
-        aidl::android::hardware::radio::SsInfoData ssInfo;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.ssInfo[i], &ssInfo)) return false;
-            out->ssInfo.push_back(ssInfo);
-        }
-    }
-    {
-        size_t size = in.cfData.size();
-        aidl::android::hardware::radio::CfData cfData;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.cfData[i], &cfData)) return false;
-            out->cfData.push_back(cfData);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::PcoDataInfo& in,
-        aidl::android::hardware::radio::PcoDataInfo* out) {
-    out->cid = static_cast<int32_t>(in.cid);
-    out->bearerProto = in.bearerProto;
-    out->pcoId = static_cast<int32_t>(in.pcoId);
-    {
-        size_t size = in.contents.size();
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.contents[i] > std::numeric_limits<int8_t>::max() || in.contents[i] < 0) {
-                return false;
-            }
-            out->contents.push_back(static_cast<int8_t>(in.contents[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_1::KeepaliveRequest& in,
-        aidl::android::hardware::radio::KeepaliveRequest* out) {
-    out->type = static_cast<aidl::android::hardware::radio::KeepaliveType>(in.type);
-    {
-        size_t size = in.sourceAddress.size();
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.sourceAddress[i] > std::numeric_limits<int8_t>::max() ||
-                in.sourceAddress[i] < 0) {
-                return false;
-            }
-            out->sourceAddress.push_back(static_cast<int8_t>(in.sourceAddress[i]));
-        }
-    }
-    out->sourcePort = static_cast<int32_t>(in.sourcePort);
-    {
-        size_t size = in.destinationAddress.size();
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.destinationAddress[i] > std::numeric_limits<int8_t>::max() ||
-                in.destinationAddress[i] < 0) {
-                return false;
-            }
-            out->destinationAddress.push_back(static_cast<int8_t>(in.destinationAddress[i]));
-        }
-    }
-    out->destinationPort = static_cast<int32_t>(in.destinationPort);
-    out->maxKeepaliveIntervalMillis = static_cast<int32_t>(in.maxKeepaliveIntervalMillis);
-    out->cid = static_cast<int32_t>(in.cid);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_1::KeepaliveStatus& in,
-        aidl::android::hardware::radio::KeepaliveStatus* out) {
-    out->sessionHandle = static_cast<int32_t>(in.sessionHandle);
-    out->code = static_cast<aidl::android::hardware::radio::KeepaliveStatusCode>(in.code);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::CellIdentityOperatorNames& in,
-        aidl::android::hardware::radio::CellIdentityOperatorNames* out) {
-    out->alphaLong = in.alphaLong;
-    out->alphaShort = in.alphaShort;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::CellIdentityCdma& in,
-        aidl::android::hardware::radio::CellIdentityCdma* out) {
-    out->networkId = static_cast<int32_t>(in.base.networkId);
-    out->systemId = static_cast<int32_t>(in.base.systemId);
-    out->baseStationId = static_cast<int32_t>(in.base.baseStationId);
-    out->longitude = static_cast<int32_t>(in.base.longitude);
-    out->latitude = static_cast<int32_t>(in.base.latitude);
-    if (!translate(in.operatorNames, &out->operatorNames)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::CellInfoCdma& in,
-        aidl::android::hardware::radio::CellInfoCdma* out) {
-    if (!translate(in.cellIdentityCdma, &out->cellIdentityCdma)) return false;
-    if (!translate(in.signalStrengthCdma, &out->signalStrengthCdma)) return false;
-    if (!translate(in.signalStrengthEvdo, &out->signalStrengthEvdo)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::WcdmaSignalStrength& in,
-        aidl::android::hardware::radio::WcdmaSignalStrength* out) {
-    out->signalStrength = static_cast<int32_t>(in.base.signalStrength);
-    out->bitErrorRate = static_cast<int32_t>(in.base.bitErrorRate);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.rscp > std::numeric_limits<int32_t>::max() || in.rscp < 0) {
-        return false;
-    }
-    out->rscp = static_cast<int32_t>(in.rscp);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.ecno > std::numeric_limits<int32_t>::max() || in.ecno < 0) {
-        return false;
-    }
-    out->ecno = static_cast<int32_t>(in.ecno);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::TdscdmaSignalStrength& in,
-        aidl::android::hardware::radio::TdscdmaSignalStrength* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.signalStrength > std::numeric_limits<int32_t>::max() || in.signalStrength < 0) {
-        return false;
-    }
-    out->signalStrength = static_cast<int32_t>(in.signalStrength);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.bitErrorRate > std::numeric_limits<int32_t>::max() || in.bitErrorRate < 0) {
-        return false;
-    }
-    out->bitErrorRate = static_cast<int32_t>(in.bitErrorRate);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.rscp > std::numeric_limits<int32_t>::max() || in.rscp < 0) {
-        return false;
-    }
-    out->rscp = static_cast<int32_t>(in.rscp);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::VoiceRegStateResult& in,
-        aidl::android::hardware::radio::VoiceRegStateResult* out) {
-    out->regState = static_cast<aidl::android::hardware::radio::RegState>(in.regState);
-    out->rat = static_cast<int32_t>(in.rat);
-    out->cssSupported = static_cast<bool>(in.cssSupported);
-    out->roamingIndicator = static_cast<int32_t>(in.roamingIndicator);
-    out->systemIsInPrl = static_cast<int32_t>(in.systemIsInPrl);
-    out->defaultRoamingIndicator = static_cast<int32_t>(in.defaultRoamingIndicator);
-    out->reasonForDenial = static_cast<int32_t>(in.reasonForDenial);
-    // FIXME Unknown type: android.hardware.radio@1.2::CellIdentity
-    // That type's package needs to be converted separately and the corresponding translate function
-    // should be added here.
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_3::RadioResponseInfoModem& in,
-        aidl::android::hardware::radio::RadioResponseInfoModem* out) {
-    out->type = static_cast<aidl::android::hardware::radio::RadioResponseType>(in.type);
-    out->serial = static_cast<int32_t>(in.serial);
-    out->error = static_cast<aidl::android::hardware::radio::RadioError>(in.error);
-    out->isEnabled = static_cast<bool>(in.isEnabled);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::EmergencyNumber& in,
-        aidl::android::hardware::radio::EmergencyNumber* out) {
-    out->number = in.number;
-    out->mcc = in.mcc;
-    out->mnc = in.mnc;
-    out->categories =
-            static_cast<aidl::android::hardware::radio::EmergencyServiceCategory>(in.categories);
-    {
-        size_t size = in.urns.size();
-        for (size_t i = 0; i < size; i++) {
-            out->urns.push_back(in.urns[i]);
-        }
-    }
-    out->sources = static_cast<aidl::android::hardware::radio::EmergencyNumberSource>(in.sources);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::RadioFrequencyInfo& in,
-        aidl::android::hardware::radio::RadioFrequencyInfo* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_4::RadioFrequencyInfo::hidl_discriminator::range:
-            *out = static_cast<aidl::android::hardware::radio::FrequencyRange>(in.range());
-            break;
-        case ::android::hardware::radio::V1_4::RadioFrequencyInfo::hidl_discriminator::
-                channelNumber:
-            *out = static_cast<int32_t>(in.channelNumber());
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::LteVopsInfo& in,
-        aidl::android::hardware::radio::LteVopsInfo* out) {
-    out->isVopsSupported = static_cast<bool>(in.isVopsSupported);
-    out->isEmcBearerSupported = static_cast<bool>(in.isEmcBearerSupported);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::NrIndicators& in,
-        aidl::android::hardware::radio::NrIndicators* out) {
-    out->isEndcAvailable = static_cast<bool>(in.isEndcAvailable);
-    out->isDcNrRestricted = static_cast<bool>(in.isDcNrRestricted);
-    out->isNrAvailable = static_cast<bool>(in.isNrAvailable);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::DataRegStateResult& in,
-        aidl::android::hardware::radio::DataRegStateResult* out) {
-    out->regState = static_cast<aidl::android::hardware::radio::RegState>(in.base.regState);
-    out->rat = static_cast<int32_t>(in.base.rat);
-    out->reasonDataDenied = static_cast<int32_t>(in.base.reasonDataDenied);
-    out->maxDataCalls = static_cast<int32_t>(in.base.maxDataCalls);
-    // FIXME Unknown type: android.hardware.radio@1.2::CellIdentity
-    // That type's package needs to be converted separately and the corresponding translate function
-    // should be added here.
-    if (!translate(in.vopsInfo, &out->vopsInfo)) return false;
-    if (!translate(in.nrIndicators, &out->nrIndicators)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::DataRegStateResult::VopsInfo& in,
-        aidl::android::hardware::radio::DataRegStateResultVopsInfo* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_4::DataRegStateResult::VopsInfo::hidl_discriminator::
-                noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_4::DataRegStateResult::VopsInfo::hidl_discriminator::
-                lteVopsInfo: {
-            aidl::android::hardware::radio::LteVopsInfo lteVopsInfo;
-            if (!translate(in.lteVopsInfo(), &lteVopsInfo)) return false;
-            out->set<aidl::android::hardware::radio::DataRegStateResultVopsInfo::lteVopsInfo>(
-                    lteVopsInfo);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::CellConfigLte& in,
-        aidl::android::hardware::radio::CellConfigLte* out) {
-    out->isEndcAvailable = static_cast<bool>(in.isEndcAvailable);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::CellInfo::Info& in,
-        aidl::android::hardware::radio::CellInfoInfo* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_4::CellInfo::Info::hidl_discriminator::gsm:
-            // FIXME Unknown type: android.hardware.radio@1.2::CellInfoGsm
-            // That type's package needs to be converted separately and the corresponding translate
-            // function should be added here.
-            break;
-        case ::android::hardware::radio::V1_4::CellInfo::Info::hidl_discriminator::cdma: {
-            aidl::android::hardware::radio::CellInfoCdma cdma;
-            if (!translate(in.cdma(), &cdma)) return false;
-            out->set<aidl::android::hardware::radio::CellInfoInfo::cdma>(cdma);
-        } break;
-        case ::android::hardware::radio::V1_4::CellInfo::Info::hidl_discriminator::wcdma:
-            // FIXME Unknown type: android.hardware.radio@1.2::CellInfoWcdma
-            // That type's package needs to be converted separately and the corresponding translate
-            // function should be added here.
-            break;
-        case ::android::hardware::radio::V1_4::CellInfo::Info::hidl_discriminator::tdscdma:
-            // FIXME Unknown type: android.hardware.radio@1.2::CellInfoTdscdma
-            // That type's package needs to be converted separately and the corresponding translate
-            // function should be added here.
-            break;
-        case ::android::hardware::radio::V1_4::CellInfo::Info::hidl_discriminator::lte:
-            // FIXME Unknown type: android.hardware.radio@1.4::CellInfoLte
-            // That type's package needs to be converted separately and the corresponding translate
-            // function should be added here.
-            break;
-        case ::android::hardware::radio::V1_4::CellInfo::Info::hidl_discriminator::nr:
-            // FIXME Unknown type: android.hardware.radio@1.4::CellInfoNr
-            // That type's package needs to be converted separately and the corresponding translate
-            // function should be added here.
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::RadioCapability& in,
-        aidl::android::hardware::radio::RadioCapability* out) {
-    out->session = static_cast<int32_t>(in.session);
-    out->phase = static_cast<aidl::android::hardware::radio::RadioCapabilityPhase>(in.phase);
-    out->raf = static_cast<aidl::android::hardware::radio::RadioAccessFamily>(in.raf);
-    out->logicalModemUuid = in.logicalModemUuid;
-    out->status = static_cast<aidl::android::hardware::radio::RadioCapabilityStatus>(in.status);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::CarrierRestrictionsWithPriority& in,
-        aidl::android::hardware::radio::CarrierRestrictionsWithPriority* out) {
-    {
-        size_t size = in.allowedCarriers.size();
-        aidl::android::hardware::radio::Carrier allowedCarriers;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.allowedCarriers[i], &allowedCarriers)) return false;
-            out->allowedCarriers.push_back(allowedCarriers);
-        }
-    }
-    {
-        size_t size = in.excludedCarriers.size();
-        aidl::android::hardware::radio::Carrier excludedCarriers;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.excludedCarriers[i], &excludedCarriers)) return false;
-            out->excludedCarriers.push_back(excludedCarriers);
-        }
-    }
-    out->allowedCarriersPrioritized = static_cast<bool>(in.allowedCarriersPrioritized);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::RadioAccessSpecifier& in,
-        aidl::android::hardware::radio::RadioAccessSpecifier* out) {
-    out->radioAccessNetwork =
-            static_cast<aidl::android::hardware::radio::RadioAccessNetworks>(in.radioAccessNetwork);
-    if (!translate(in.bands, &out->bands)) return false;
-    {
-        size_t size = in.channels.size();
-        for (size_t i = 0; i < size; i++) {
-            out->channels.push_back(static_cast<int32_t>(in.channels[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands& in,
-        aidl::android::hardware::radio::RadioAccessSpecifierBands* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands::hidl_discriminator::
-                geranBands: {
-            ::android::hardware::hidl_vec<::android::hardware::radio::V1_1::GeranBands> geranBands =
-                    in.geranBands();
-            size_t size = geranBands.size();
-            for (size_t i = 0; i < size; i++) {
-                out->get<aidl::android::hardware::radio::RadioAccessSpecifierBands::Tag::
-                                 geranBands>()
-                        .push_back(static_cast<aidl::android::hardware::radio::GeranBands>(
-                                geranBands[i]));
-            }
-        } break;
-        case ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands::hidl_discriminator::
-                utranBands: {
-            ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::UtranBands> utranBands =
-                    in.utranBands();
-            size_t size = utranBands.size();
-            for (size_t i = 0; i < size; i++) {
-                out->get<aidl::android::hardware::radio::RadioAccessSpecifierBands::Tag::
-                                 utranBands>()
-                        .push_back(static_cast<aidl::android::hardware::radio::UtranBands>(
-                                utranBands[i]));
-            }
-        } break;
-        case ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands::hidl_discriminator::
-                eutranBands: {
-            ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::EutranBands>
-                    eutranBands = in.eutranBands();
-            size_t size = eutranBands.size();
-            for (size_t i = 0; i < size; i++) {
-                out->get<aidl::android::hardware::radio::RadioAccessSpecifierBands::Tag::
-                                 eutranBands>()
-                        .push_back(static_cast<aidl::android::hardware::radio::EutranBands>(
-                                eutranBands[i]));
-            }
-        } break;
-        case ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands::hidl_discriminator::
-                ngranBands: {
-            ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::NgranBands> ngranBands =
-                    in.ngranBands();
-            size_t size = ngranBands.size();
-            for (size_t i = 0; i < size; i++) {
-                out->get<aidl::android::hardware::radio::RadioAccessSpecifierBands::Tag::
-                                 ngranBands>()
-                        .push_back(static_cast<aidl::android::hardware::radio::NgranBands>(
-                                ngranBands[i]));
-            }
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::SignalThresholdInfo& in,
-        aidl::android::hardware::radio::SignalThresholdInfo* out) {
-    out->signalMeasurement = static_cast<aidl::android::hardware::radio::SignalMeasurementType>(
-            in.signalMeasurement);
-    out->hysteresisMs = static_cast<int32_t>(in.hysteresisMs);
-    out->hysteresisDb = static_cast<int32_t>(in.hysteresisDb);
-    {
-        size_t size = in.thresholds.size();
-        for (size_t i = 0; i < size; i++) {
-            out->thresholds.push_back(static_cast<int32_t>(in.thresholds[i]));
-        }
-    }
-    out->isEnabled = static_cast<bool>(in.isEnabled);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::NetworkScanRequest& in,
-        aidl::android::hardware::radio::NetworkScanRequest* out) {
-    out->type = static_cast<aidl::android::hardware::radio::ScanType>(in.type);
-    out->interval = static_cast<int32_t>(in.interval);
-    {
-        size_t size = in.specifiers.size();
-        aidl::android::hardware::radio::RadioAccessSpecifier specifiers;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.specifiers[i], &specifiers)) return false;
-            out->specifiers.push_back(specifiers);
-        }
-    }
-    out->maxSearchTime = static_cast<int32_t>(in.maxSearchTime);
-    out->incrementalResults = static_cast<bool>(in.incrementalResults);
-    out->incrementalResultsPeriodicity = static_cast<int32_t>(in.incrementalResultsPeriodicity);
-    {
-        size_t size = in.mccMncs.size();
-        for (size_t i = 0; i < size; i++) {
-            out->mccMncs.push_back(in.mccMncs[i]);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::DataProfileInfo& in,
-        aidl::android::hardware::radio::DataProfileInfo* out) {
-    out->profileId = static_cast<aidl::android::hardware::radio::DataProfileId>(in.profileId);
-    out->apn = in.apn;
-    out->protocol = static_cast<aidl::android::hardware::radio::PdpProtocolType>(in.protocol);
-    out->roamingProtocol =
-            static_cast<aidl::android::hardware::radio::PdpProtocolType>(in.roamingProtocol);
-    out->authType = static_cast<aidl::android::hardware::radio::ApnAuthType>(in.authType);
-    out->user = in.user;
-    out->password = in.password;
-    out->type = static_cast<aidl::android::hardware::radio::DataProfileInfoType>(in.type);
-    out->maxConnsTime = static_cast<int32_t>(in.maxConnsTime);
-    out->maxConns = static_cast<int32_t>(in.maxConns);
-    out->waitTime = static_cast<int32_t>(in.waitTime);
-    out->enabled = static_cast<bool>(in.enabled);
-    out->supportedApnTypesBitmap =
-            static_cast<aidl::android::hardware::radio::ApnTypes>(in.supportedApnTypesBitmap);
-    out->bearerBitmap =
-            static_cast<aidl::android::hardware::radio::RadioAccessFamily>(in.bearerBitmap);
-    out->mtuV4 = static_cast<int32_t>(in.mtuV4);
-    out->mtuV6 = static_cast<int32_t>(in.mtuV6);
-    out->preferred = static_cast<bool>(in.preferred);
-    out->persistent = static_cast<bool>(in.persistent);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::LinkAddress& in,
-        aidl::android::hardware::radio::LinkAddress* out) {
-    out->address = in.address;
-    out->properties = static_cast<aidl::android::hardware::radio::AddressProperty>(in.properties);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.deprecationTime > std::numeric_limits<int64_t>::max() || in.deprecationTime < 0) {
-        return false;
-    }
-    out->deprecationTime = static_cast<int64_t>(in.deprecationTime);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.expirationTime > std::numeric_limits<int64_t>::max() || in.expirationTime < 0) {
-        return false;
-    }
-    out->expirationTime = static_cast<int64_t>(in.expirationTime);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::ClosedSubscriberGroupInfo& in,
-        aidl::android::hardware::radio::ClosedSubscriberGroupInfo* out) {
-    out->csgIndication = static_cast<bool>(in.csgIndication);
-    out->homeNodebName = in.homeNodebName;
-    out->csgIdentity = static_cast<int32_t>(in.csgIdentity);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::OptionalCsgInfo& in,
-        aidl::android::hardware::radio::OptionalCsgInfo* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_5::OptionalCsgInfo::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_5::OptionalCsgInfo::hidl_discriminator::csgInfo: {
-            aidl::android::hardware::radio::ClosedSubscriberGroupInfo csgInfo;
-            if (!translate(in.csgInfo(), &csgInfo)) return false;
-            out->set<aidl::android::hardware::radio::OptionalCsgInfo::csgInfo>(csgInfo);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityGsm& in,
-        aidl::android::hardware::radio::CellIdentityGsm* out) {
-    out->mcc = in.base.base.mcc;
-    out->mnc = in.base.base.mnc;
-    out->lac = static_cast<int32_t>(in.base.base.lac);
-    out->cid = static_cast<int32_t>(in.base.base.cid);
-    out->arfcn = static_cast<int32_t>(in.base.base.arfcn);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.base.bsic > std::numeric_limits<int8_t>::max() || in.base.base.bsic < 0) {
-        return false;
-    }
-    out->bsic = static_cast<int8_t>(in.base.base.bsic);
-    if (!translate(in.base.operatorNames, &out->operatorNames)) return false;
-    {
-        size_t size = in.additionalPlmns.size();
-        for (size_t i = 0; i < size; i++) {
-            out->additionalPlmns.push_back(in.additionalPlmns[i]);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityWcdma& in,
-        aidl::android::hardware::radio::CellIdentityWcdma* out) {
-    out->mcc = in.base.base.mcc;
-    out->mnc = in.base.base.mnc;
-    out->lac = static_cast<int32_t>(in.base.base.lac);
-    out->cid = static_cast<int32_t>(in.base.base.cid);
-    out->psc = static_cast<int32_t>(in.base.base.psc);
-    out->uarfcn = static_cast<int32_t>(in.base.base.uarfcn);
-    if (!translate(in.base.operatorNames, &out->operatorNames)) return false;
-    {
-        size_t size = in.additionalPlmns.size();
-        for (size_t i = 0; i < size; i++) {
-            out->additionalPlmns.push_back(in.additionalPlmns[i]);
-        }
-    }
-    if (!translate(in.optionalCsgInfo, &out->optionalCsgInfo)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityTdscdma& in,
-        aidl::android::hardware::radio::CellIdentityTdscdma* out) {
-    out->mcc = in.base.base.mcc;
-    out->mnc = in.base.base.mnc;
-    out->lac = static_cast<int32_t>(in.base.base.lac);
-    out->cid = static_cast<int32_t>(in.base.base.cid);
-    out->cpid = static_cast<int32_t>(in.base.base.cpid);
-    out->uarfcn = static_cast<int32_t>(in.base.uarfcn);
-    if (!translate(in.base.operatorNames, &out->operatorNames)) return false;
-    {
-        size_t size = in.additionalPlmns.size();
-        for (size_t i = 0; i < size; i++) {
-            out->additionalPlmns.push_back(in.additionalPlmns[i]);
-        }
-    }
-    if (!translate(in.optionalCsgInfo, &out->optionalCsgInfo)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityLte& in,
-        aidl::android::hardware::radio::CellIdentityLte* out) {
-    out->mcc = in.base.base.mcc;
-    out->mnc = in.base.base.mnc;
-    out->ci = static_cast<int32_t>(in.base.base.ci);
-    out->pci = static_cast<int32_t>(in.base.base.pci);
-    out->tac = static_cast<int32_t>(in.base.base.tac);
-    out->earfcn = static_cast<int32_t>(in.base.base.earfcn);
-    if (!translate(in.base.operatorNames, &out->operatorNames)) return false;
-    out->bandwidth = static_cast<int32_t>(in.base.bandwidth);
-    {
-        size_t size = in.additionalPlmns.size();
-        for (size_t i = 0; i < size; i++) {
-            out->additionalPlmns.push_back(in.additionalPlmns[i]);
-        }
-    }
-    if (!translate(in.optionalCsgInfo, &out->optionalCsgInfo)) return false;
-    {
-        size_t size = in.bands.size();
-        for (size_t i = 0; i < size; i++) {
-            out->bands.push_back(
-                    static_cast<aidl::android::hardware::radio::EutranBands>(in.bands[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityNr& in,
-        aidl::android::hardware::radio::CellIdentityNr* out) {
-    out->mcc = in.base.mcc;
-    out->mnc = in.base.mnc;
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.nci > std::numeric_limits<int64_t>::max() || in.base.nci < 0) {
-        return false;
-    }
-    out->nci = static_cast<int64_t>(in.base.nci);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.pci > std::numeric_limits<int32_t>::max() || in.base.pci < 0) {
-        return false;
-    }
-    out->pci = static_cast<int32_t>(in.base.pci);
-    out->tac = static_cast<int32_t>(in.base.tac);
-    out->nrarfcn = static_cast<int32_t>(in.base.nrarfcn);
-    if (!translate(in.base.operatorNames, &out->operatorNames)) return false;
-    {
-        size_t size = in.additionalPlmns.size();
-        for (size_t i = 0; i < size; i++) {
-            out->additionalPlmns.push_back(in.additionalPlmns[i]);
-        }
-    }
-    {
-        size_t size = in.bands.size();
-        for (size_t i = 0; i < size; i++) {
-            out->bands.push_back(
-                    static_cast<aidl::android::hardware::radio::NgranBands>(in.bands[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellInfoGsm& in,
-        aidl::android::hardware::radio::CellInfoGsm* out) {
-    if (!translate(in.cellIdentityGsm, &out->cellIdentityGsm)) return false;
-    if (!translate(in.signalStrengthGsm, &out->signalStrengthGsm)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellInfoWcdma& in,
-        aidl::android::hardware::radio::CellInfoWcdma* out) {
-    if (!translate(in.cellIdentityWcdma, &out->cellIdentityWcdma)) return false;
-    if (!translate(in.signalStrengthWcdma, &out->signalStrengthWcdma)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellInfoTdscdma& in,
-        aidl::android::hardware::radio::CellInfoTdscdma* out) {
-    if (!translate(in.cellIdentityTdscdma, &out->cellIdentityTdscdma)) return false;
-    if (!translate(in.signalStrengthTdscdma, &out->signalStrengthTdscdma)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentity& in,
-        aidl::android::hardware::radio::CellIdentity* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::gsm: {
-            aidl::android::hardware::radio::CellIdentityGsm gsm;
-            if (!translate(in.gsm(), &gsm)) return false;
-            out->set<aidl::android::hardware::radio::CellIdentity::gsm>(gsm);
-        } break;
-        case ::android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::wcdma: {
-            aidl::android::hardware::radio::CellIdentityWcdma wcdma;
-            if (!translate(in.wcdma(), &wcdma)) return false;
-            out->set<aidl::android::hardware::radio::CellIdentity::wcdma>(wcdma);
-        } break;
-        case ::android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::tdscdma: {
-            aidl::android::hardware::radio::CellIdentityTdscdma tdscdma;
-            if (!translate(in.tdscdma(), &tdscdma)) return false;
-            out->set<aidl::android::hardware::radio::CellIdentity::tdscdma>(tdscdma);
-        } break;
-        case ::android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::cdma: {
-            aidl::android::hardware::radio::CellIdentityCdma cdma;
-            if (!translate(in.cdma(), &cdma)) return false;
-            out->set<aidl::android::hardware::radio::CellIdentity::cdma>(cdma);
-        } break;
-        case ::android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::lte: {
-            aidl::android::hardware::radio::CellIdentityLte lte;
-            if (!translate(in.lte(), &lte)) return false;
-            out->set<aidl::android::hardware::radio::CellIdentity::lte>(lte);
-        } break;
-        case ::android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::nr: {
-            aidl::android::hardware::radio::CellIdentityNr nr;
-            if (!translate(in.nr(), &nr)) return false;
-            out->set<aidl::android::hardware::radio::CellIdentity::nr>(nr);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::BarringInfo& in,
-        aidl::android::hardware::radio::BarringInfo* out) {
-    out->serviceType =
-            static_cast<aidl::android::hardware::radio::BarringInfoServiceType>(in.serviceType);
-    out->barringType =
-            static_cast<aidl::android::hardware::radio::BarringInfoBarringType>(in.barringType);
-    if (!translate(in.barringTypeSpecificInfo, &out->barringTypeSpecificInfo)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::BarringInfo::BarringTypeSpecificInfo::Conditional&
-                in,
-        aidl::android::hardware::radio::BarringInfoBarringTypeSpecificInfoConditional* out) {
-    out->factor = static_cast<int32_t>(in.factor);
-    out->timeSeconds = static_cast<int32_t>(in.timeSeconds);
-    out->isBarred = static_cast<bool>(in.isBarred);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::BarringInfo::BarringTypeSpecificInfo& in,
-        aidl::android::hardware::radio::BarringInfoBarringTypeSpecificInfo* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_5::BarringInfo::BarringTypeSpecificInfo::
-                hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_5::BarringInfo::BarringTypeSpecificInfo::
-                hidl_discriminator::conditional: {
-            aidl::android::hardware::radio::BarringInfoBarringTypeSpecificInfoConditional
-                    conditional;
-            if (!translate(in.conditional(), &conditional)) return false;
-            out->set<aidl::android::hardware::radio::BarringInfoBarringTypeSpecificInfo::
-                             conditional>(conditional);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::RegStateResult::AccessTechnologySpecificInfo::
-                Cdma2000RegistrationInfo& in,
-        aidl::android::hardware::radio::
-                RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo* out) {
-    out->cssSupported = static_cast<bool>(in.cssSupported);
-    out->roamingIndicator = static_cast<int32_t>(in.roamingIndicator);
-    out->systemIsInPrl =
-            static_cast<aidl::android::hardware::radio::PrlIndicator>(in.systemIsInPrl);
-    out->defaultRoamingIndicator = static_cast<int32_t>(in.defaultRoamingIndicator);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::RegStateResult::AccessTechnologySpecificInfo::
-                EutranRegistrationInfo& in,
-        aidl::android::hardware::radio::
-                RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo* out) {
-    if (!translate(in.lteVopsInfo, &out->lteVopsInfo)) return false;
-    if (!translate(in.nrIndicators, &out->nrIndicators)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::AppStatus& in,
-        aidl::android::hardware::radio::AppStatus* out) {
-    out->appType = static_cast<aidl::android::hardware::radio::AppType>(in.base.appType);
-    out->appState = static_cast<aidl::android::hardware::radio::AppState>(in.base.appState);
-    out->persoSubstate =
-            static_cast<aidl::android::hardware::radio::PersoSubstate>(in.persoSubstate);
-    out->aidPtr = in.base.aidPtr;
-    out->appLabelPtr = in.base.appLabelPtr;
-    out->pin1Replaced = static_cast<int32_t>(in.base.pin1Replaced);
-    out->pin1 = static_cast<aidl::android::hardware::radio::PinState>(in.base.pin1);
-    out->pin2 = static_cast<aidl::android::hardware::radio::PinState>(in.base.pin2);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CardStatus& in,
-        aidl::android::hardware::radio::CardStatus* out) {
-    out->cardState =
-            static_cast<aidl::android::hardware::radio::CardState>(in.base.base.base.cardState);
-    out->universalPinState = static_cast<aidl::android::hardware::radio::PinState>(
-            in.base.base.base.universalPinState);
-    out->gsmUmtsSubscriptionAppIndex =
-            static_cast<int32_t>(in.base.base.base.gsmUmtsSubscriptionAppIndex);
-    out->cdmaSubscriptionAppIndex =
-            static_cast<int32_t>(in.base.base.base.cdmaSubscriptionAppIndex);
-    out->imsSubscriptionAppIndex = static_cast<int32_t>(in.base.base.base.imsSubscriptionAppIndex);
-    {
-        size_t size = in.applications.size();
-        aidl::android::hardware::radio::AppStatus applications;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.applications[i], &applications)) return false;
-            out->applications.push_back(applications);
-        }
-    }
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.base.physicalSlotId > std::numeric_limits<int32_t>::max() ||
-        in.base.base.physicalSlotId < 0) {
-        return false;
-    }
-    out->physicalSlotId = static_cast<int32_t>(in.base.base.physicalSlotId);
-    out->atr = in.base.base.atr;
-    out->iccid = in.base.base.iccid;
-    out->eid = in.base.eid;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosBandwidth& in,
-        aidl::android::hardware::radio::QosBandwidth* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.maxBitrateKbps > std::numeric_limits<int32_t>::max() || in.maxBitrateKbps < 0) {
-        return false;
-    }
-    out->maxBitrateKbps = static_cast<int32_t>(in.maxBitrateKbps);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.guaranteedBitrateKbps > std::numeric_limits<int32_t>::max() ||
-        in.guaranteedBitrateKbps < 0) {
-        return false;
-    }
-    out->guaranteedBitrateKbps = static_cast<int32_t>(in.guaranteedBitrateKbps);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::EpsQos& in,
-        aidl::android::hardware::radio::EpsQos* out) {
-    out->qci = static_cast<char16_t>(in.qci);
-    if (!translate(in.downlink, &out->downlink)) return false;
-    if (!translate(in.uplink, &out->uplink)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::NrQos& in,
-        aidl::android::hardware::radio::NrQos* out) {
-    out->fiveQi = static_cast<char16_t>(in.fiveQi);
-    if (!translate(in.downlink, &out->downlink)) return false;
-    if (!translate(in.uplink, &out->uplink)) return false;
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.qfi > std::numeric_limits<int8_t>::max() || in.qfi < 0) {
-        return false;
-    }
-    out->qfi = static_cast<int8_t>(in.qfi);
-    out->averagingWindowMs = static_cast<char16_t>(in.averagingWindowMs);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(const ::android::hardware::radio::V1_6::Qos& in,
-                                                   aidl::android::hardware::radio::Qos* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::Qos::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::Qos::hidl_discriminator::eps: {
-            aidl::android::hardware::radio::EpsQos eps;
-            if (!translate(in.eps(), &eps)) return false;
-            out->set<aidl::android::hardware::radio::Qos::eps>(eps);
-        } break;
-        case ::android::hardware::radio::V1_6::Qos::hidl_discriminator::nr: {
-            aidl::android::hardware::radio::NrQos nr;
-            if (!translate(in.nr(), &nr)) return false;
-            out->set<aidl::android::hardware::radio::Qos::nr>(nr);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::RadioResponseInfo& in,
-        aidl::android::hardware::radio::RadioResponseInfo* out) {
-    out->type = static_cast<aidl::android::hardware::radio::RadioResponseType>(in.type);
-    out->serial = static_cast<int32_t>(in.serial);
-    out->error = static_cast<aidl::android::hardware::radio::RadioError>(in.error);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PortRange& in,
-        aidl::android::hardware::radio::PortRange* out) {
-    out->start = static_cast<int32_t>(in.start);
-    out->end = static_cast<int32_t>(in.end);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::MaybePort& in,
-        aidl::android::hardware::radio::MaybePort* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::MaybePort::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::MaybePort::hidl_discriminator::range: {
-            aidl::android::hardware::radio::PortRange range;
-            if (!translate(in.range(), &range)) return false;
-            out->set<aidl::android::hardware::radio::MaybePort::range>(range);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosFilter& in,
-        aidl::android::hardware::radio::QosFilter* out) {
-    {
-        size_t size = in.localAddresses.size();
-        for (size_t i = 0; i < size; i++) {
-            out->localAddresses.push_back(in.localAddresses[i]);
-        }
-    }
-    {
-        size_t size = in.remoteAddresses.size();
-        for (size_t i = 0; i < size; i++) {
-            out->remoteAddresses.push_back(in.remoteAddresses[i]);
-        }
-    }
-    if (!translate(in.localPort, &out->localPort)) return false;
-    if (!translate(in.remotePort, &out->remotePort)) return false;
-    out->protocol = static_cast<aidl::android::hardware::radio::QosProtocol>(in.protocol);
-    if (!translate(in.tos, &out->tos)) return false;
-    if (!translate(in.flowLabel, &out->flowLabel)) return false;
-    if (!translate(in.spi, &out->spi)) return false;
-    out->direction = static_cast<aidl::android::hardware::radio::QosFilterDirection>(in.direction);
-    out->precedence = static_cast<int32_t>(in.precedence);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosFilter::TypeOfService& in,
-        aidl::android::hardware::radio::QosFilterTypeOfService* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::QosFilter::TypeOfService::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::QosFilter::TypeOfService::hidl_discriminator::value:
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.value() > std::numeric_limits<int8_t>::max() || in.value() < 0) {
-                return false;
-            }
-            *out = static_cast<int8_t>(in.value());
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosFilter::Ipv6FlowLabel& in,
-        aidl::android::hardware::radio::QosFilterIpv6FlowLabel* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::QosFilter::Ipv6FlowLabel::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::QosFilter::Ipv6FlowLabel::hidl_discriminator::value:
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.value() > std::numeric_limits<int32_t>::max() || in.value() < 0) {
-                return false;
-            }
-            *out = static_cast<int32_t>(in.value());
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosFilter::IpsecSpi& in,
-        aidl::android::hardware::radio::QosFilterIpsecSpi* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::QosFilter::IpsecSpi::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::QosFilter::IpsecSpi::hidl_discriminator::value:
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.value() > std::numeric_limits<int32_t>::max() || in.value() < 0) {
-                return false;
-            }
-            *out = static_cast<int32_t>(in.value());
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosSession& in,
-        aidl::android::hardware::radio::QosSession* out) {
-    out->qosSessionId = static_cast<int32_t>(in.qosSessionId);
-    if (!translate(in.qos, &out->qos)) return false;
-    {
-        size_t size = in.qosFilters.size();
-        aidl::android::hardware::radio::QosFilter qosFilters;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.qosFilters[i], &qosFilters)) return false;
-            out->qosFilters.push_back(qosFilters);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::SetupDataCallResult& in,
-        aidl::android::hardware::radio::SetupDataCallResult* out) {
-    out->cause = static_cast<aidl::android::hardware::radio::DataCallFailCause>(in.cause);
-    out->suggestedRetryTime = static_cast<int64_t>(in.suggestedRetryTime);
-    out->cid = static_cast<int32_t>(in.cid);
-    out->active = static_cast<aidl::android::hardware::radio::DataConnActiveStatus>(in.active);
-    out->type = static_cast<aidl::android::hardware::radio::PdpProtocolType>(in.type);
-    out->ifname = in.ifname;
-    {
-        size_t size = in.addresses.size();
-        aidl::android::hardware::radio::LinkAddress addresses;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.addresses[i], &addresses)) return false;
-            out->addresses.push_back(addresses);
-        }
-    }
-    {
-        size_t size = in.dnses.size();
-        for (size_t i = 0; i < size; i++) {
-            out->dnses.push_back(in.dnses[i]);
-        }
-    }
-    {
-        size_t size = in.gateways.size();
-        for (size_t i = 0; i < size; i++) {
-            out->gateways.push_back(in.gateways[i]);
-        }
-    }
-    {
-        size_t size = in.pcscf.size();
-        for (size_t i = 0; i < size; i++) {
-            out->pcscf.push_back(in.pcscf[i]);
-        }
-    }
-    out->mtuV4 = static_cast<int32_t>(in.mtuV4);
-    out->mtuV6 = static_cast<int32_t>(in.mtuV6);
-    if (!translate(in.defaultQos, &out->defaultQos)) return false;
-    {
-        size_t size = in.qosSessions.size();
-        aidl::android::hardware::radio::QosSession qosSessions;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.qosSessions[i], &qosSessions)) return false;
-            out->qosSessions.push_back(qosSessions);
-        }
-    }
-    out->handoverFailureMode = static_cast<aidl::android::hardware::radio::HandoverFailureMode>(
-            in.handoverFailureMode);
-    out->pduSessionId = static_cast<int32_t>(in.pduSessionId);
-    if (!translate(in.sliceInfo, &out->sliceInfo)) return false;
-    {
-        size_t size = in.trafficDescriptors.size();
-        aidl::android::hardware::radio::TrafficDescriptor trafficDescriptors;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.trafficDescriptors[i], &trafficDescriptors)) return false;
-            out->trafficDescriptors.push_back(trafficDescriptors);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::LinkCapacityEstimate& in,
-        aidl::android::hardware::radio::LinkCapacityEstimate* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.downlinkCapacityKbps > std::numeric_limits<int32_t>::max() ||
-        in.downlinkCapacityKbps < 0) {
-        return false;
-    }
-    out->downlinkCapacityKbps = static_cast<int32_t>(in.downlinkCapacityKbps);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.uplinkCapacityKbps > std::numeric_limits<int32_t>::max() || in.uplinkCapacityKbps < 0) {
-        return false;
-    }
-    out->uplinkCapacityKbps = static_cast<int32_t>(in.uplinkCapacityKbps);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.secondaryDownlinkCapacityKbps > std::numeric_limits<int32_t>::max() ||
-        in.secondaryDownlinkCapacityKbps < 0) {
-        return false;
-    }
-    out->secondaryDownlinkCapacityKbps = static_cast<int32_t>(in.secondaryDownlinkCapacityKbps);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.secondaryUplinkCapacityKbps > std::numeric_limits<int32_t>::max() ||
-        in.secondaryUplinkCapacityKbps < 0) {
-        return false;
-    }
-    out->secondaryUplinkCapacityKbps = static_cast<int32_t>(in.secondaryUplinkCapacityKbps);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::NrVopsInfo& in,
-        aidl::android::hardware::radio::NrVopsInfo* out) {
-    out->vopsSupported =
-            static_cast<aidl::android::hardware::radio::VopsIndicator>(in.vopsSupported);
-    out->emcSupported = static_cast<aidl::android::hardware::radio::EmcIndicator>(in.emcSupported);
-    out->emfSupported = static_cast<aidl::android::hardware::radio::EmfIndicator>(in.emfSupported);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::LteSignalStrength& in,
-        aidl::android::hardware::radio::LteSignalStrength* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.signalStrength > std::numeric_limits<int32_t>::max() ||
-        in.base.signalStrength < 0) {
-        return false;
-    }
-    out->signalStrength = static_cast<int32_t>(in.base.signalStrength);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.rsrp > std::numeric_limits<int32_t>::max() || in.base.rsrp < 0) {
-        return false;
-    }
-    out->rsrp = static_cast<int32_t>(in.base.rsrp);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.rsrq > std::numeric_limits<int32_t>::max() || in.base.rsrq < 0) {
-        return false;
-    }
-    out->rsrq = static_cast<int32_t>(in.base.rsrq);
-    out->rssnr = static_cast<int32_t>(in.base.rssnr);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.cqi > std::numeric_limits<int32_t>::max() || in.base.cqi < 0) {
-        return false;
-    }
-    out->cqi = static_cast<int32_t>(in.base.cqi);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.timingAdvance > std::numeric_limits<int32_t>::max() || in.base.timingAdvance < 0) {
-        return false;
-    }
-    out->timingAdvance = static_cast<int32_t>(in.base.timingAdvance);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.cqiTableIndex > std::numeric_limits<int32_t>::max() || in.cqiTableIndex < 0) {
-        return false;
-    }
-    out->cqiTableIndex = static_cast<int32_t>(in.cqiTableIndex);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::NrSignalStrength& in,
-        aidl::android::hardware::radio::NrSignalStrength* out) {
-    out->ssRsrp = static_cast<int32_t>(in.base.ssRsrp);
-    out->ssRsrq = static_cast<int32_t>(in.base.ssRsrq);
-    out->ssSinr = static_cast<int32_t>(in.base.ssSinr);
-    out->csiRsrp = static_cast<int32_t>(in.base.csiRsrp);
-    out->csiRsrq = static_cast<int32_t>(in.base.csiRsrq);
-    out->csiSinr = static_cast<int32_t>(in.base.csiSinr);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.csiCqiTableIndex > std::numeric_limits<int32_t>::max() || in.csiCqiTableIndex < 0) {
-        return false;
-    }
-    out->csiCqiTableIndex = static_cast<int32_t>(in.csiCqiTableIndex);
-    {
-        size_t size = in.csiCqiReport.size();
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.csiCqiReport[i] > std::numeric_limits<int8_t>::max() || in.csiCqiReport[i] < 0) {
-                return false;
-            }
-            out->csiCqiReport.push_back(static_cast<int8_t>(in.csiCqiReport[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::SignalStrength& in,
-        aidl::android::hardware::radio::SignalStrength* out) {
-    if (!translate(in.gsm, &out->gsm)) return false;
-    if (!translate(in.cdma, &out->cdma)) return false;
-    if (!translate(in.evdo, &out->evdo)) return false;
-    if (!translate(in.lte, &out->lte)) return false;
-    if (!translate(in.tdscdma, &out->tdscdma)) return false;
-    if (!translate(in.wcdma, &out->wcdma)) return false;
-    if (!translate(in.nr, &out->nr)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::CellInfoLte& in,
-        aidl::android::hardware::radio::CellInfoLte* out) {
-    if (!translate(in.cellIdentityLte, &out->cellIdentityLte)) return false;
-    if (!translate(in.signalStrengthLte, &out->signalStrengthLte)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::CellInfoNr& in,
-        aidl::android::hardware::radio::CellInfoNr* out) {
-    if (!translate(in.cellIdentityNr, &out->cellIdentityNr)) return false;
-    if (!translate(in.signalStrengthNr, &out->signalStrengthNr)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::CellInfo& in,
-        aidl::android::hardware::radio::CellInfo* out) {
-    out->registered = static_cast<bool>(in.registered);
-    out->connectionStatus =
-            static_cast<aidl::android::hardware::radio::CellConnectionStatus>(in.connectionStatus);
-    if (!translate(in.ratSpecificInfo, &out->ratSpecificInfo)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::CellInfo::CellInfoRatSpecificInfo& in,
-        aidl::android::hardware::radio::CellInfoCellInfoRatSpecificInfo* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::CellInfo::CellInfoRatSpecificInfo::
-                hidl_discriminator::gsm: {
-            aidl::android::hardware::radio::CellInfoGsm gsm;
-            if (!translate(in.gsm(), &gsm)) return false;
-            out->set<aidl::android::hardware::radio::CellInfoCellInfoRatSpecificInfo::gsm>(gsm);
-        } break;
-        case ::android::hardware::radio::V1_6::CellInfo::CellInfoRatSpecificInfo::
-                hidl_discriminator::wcdma: {
-            aidl::android::hardware::radio::CellInfoWcdma wcdma;
-            if (!translate(in.wcdma(), &wcdma)) return false;
-            out->set<aidl::android::hardware::radio::CellInfoCellInfoRatSpecificInfo::wcdma>(wcdma);
-        } break;
-        case ::android::hardware::radio::V1_6::CellInfo::CellInfoRatSpecificInfo::
-                hidl_discriminator::tdscdma: {
-            aidl::android::hardware::radio::CellInfoTdscdma tdscdma;
-            if (!translate(in.tdscdma(), &tdscdma)) return false;
-            out->set<aidl::android::hardware::radio::CellInfoCellInfoRatSpecificInfo::tdscdma>(
-                    tdscdma);
-        } break;
-        case ::android::hardware::radio::V1_6::CellInfo::CellInfoRatSpecificInfo::
-                hidl_discriminator::lte: {
-            aidl::android::hardware::radio::CellInfoLte lte;
-            if (!translate(in.lte(), &lte)) return false;
-            out->set<aidl::android::hardware::radio::CellInfoCellInfoRatSpecificInfo::lte>(lte);
-        } break;
-        case ::android::hardware::radio::V1_6::CellInfo::CellInfoRatSpecificInfo::
-                hidl_discriminator::nr: {
-            aidl::android::hardware::radio::CellInfoNr nr;
-            if (!translate(in.nr(), &nr)) return false;
-            out->set<aidl::android::hardware::radio::CellInfoCellInfoRatSpecificInfo::nr>(nr);
-        } break;
-        case ::android::hardware::radio::V1_6::CellInfo::CellInfoRatSpecificInfo::
-                hidl_discriminator::cdma: {
-            aidl::android::hardware::radio::CellInfoCdma cdma;
-            if (!translate(in.cdma(), &cdma)) return false;
-            out->set<aidl::android::hardware::radio::CellInfoCellInfoRatSpecificInfo::cdma>(cdma);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::NetworkScanResult& in,
-        aidl::android::hardware::radio::NetworkScanResult* out) {
-    out->status = static_cast<aidl::android::hardware::radio::ScanStatus>(in.status);
-    out->error = static_cast<aidl::android::hardware::radio::RadioError>(in.error);
-    {
-        size_t size = in.networkInfos.size();
-        aidl::android::hardware::radio::CellInfo networkInfos;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.networkInfos[i], &networkInfos)) return false;
-            out->networkInfos.push_back(networkInfos);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::RegStateResult& in,
-        aidl::android::hardware::radio::RegStateResult* out) {
-    out->regState = static_cast<aidl::android::hardware::radio::RegState>(in.regState);
-    out->rat = static_cast<aidl::android::hardware::radio::RadioTechnology>(in.rat);
-    out->reasonForDenial =
-            static_cast<aidl::android::hardware::radio::RegistrationFailCause>(in.reasonForDenial);
-    if (!translate(in.cellIdentity, &out->cellIdentity)) return false;
-    out->registeredPlmn = in.registeredPlmn;
-    if (!translate(in.accessTechnologySpecificInfo, &out->accessTechnologySpecificInfo))
-        return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::RegStateResult::AccessTechnologySpecificInfo& in,
-        aidl::android::hardware::radio::RegStateResultAccessTechnologySpecificInfo* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::RegStateResult::AccessTechnologySpecificInfo::
-                hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::RegStateResult::AccessTechnologySpecificInfo::
-                hidl_discriminator::cdmaInfo: {
-            aidl::android::hardware::radio::
-                    RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo cdmaInfo;
-            if (!translate(in.cdmaInfo(), &cdmaInfo)) return false;
-            out->set<aidl::android::hardware::radio::RegStateResultAccessTechnologySpecificInfo::
-                             cdmaInfo>(cdmaInfo);
-        } break;
-        case ::android::hardware::radio::V1_6::RegStateResult::AccessTechnologySpecificInfo::
-                hidl_discriminator::eutranInfo: {
-            aidl::android::hardware::radio::
-                    RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo eutranInfo;
-            if (!translate(in.eutranInfo(), &eutranInfo)) return false;
-            out->set<aidl::android::hardware::radio::RegStateResultAccessTechnologySpecificInfo::
-                             eutranInfo>(eutranInfo);
-        } break;
-        case ::android::hardware::radio::V1_6::RegStateResult::AccessTechnologySpecificInfo::
-                hidl_discriminator::ngranNrVopsInfo: {
-            aidl::android::hardware::radio::NrVopsInfo ngranNrVopsInfo;
-            if (!translate(in.ngranNrVopsInfo(), &ngranNrVopsInfo)) return false;
-            out->set<aidl::android::hardware::radio::RegStateResultAccessTechnologySpecificInfo::
-                             ngranNrVopsInfo>(ngranNrVopsInfo);
-        } break;
-        case ::android::hardware::radio::V1_6::RegStateResult::AccessTechnologySpecificInfo::
-                hidl_discriminator::geranDtmSupported:
-            out->set<aidl::android::hardware::radio::RegStateResultAccessTechnologySpecificInfo::
-                             geranDtmSupported>(static_cast<bool>(in.geranDtmSupported()));
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(const ::android::hardware::radio::V1_6::Call& in,
-                                                   aidl::android::hardware::radio::Call* out) {
-    out->state = static_cast<aidl::android::hardware::radio::CallState>(in.base.base.state);
-    out->index = static_cast<int32_t>(in.base.base.index);
-    out->toa = static_cast<int32_t>(in.base.base.toa);
-    out->isMpty = static_cast<bool>(in.base.base.isMpty);
-    out->isMT = static_cast<bool>(in.base.base.isMT);
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.base.base.als > std::numeric_limits<int8_t>::max() || in.base.base.als < 0) {
-        return false;
-    }
-    out->als = static_cast<int8_t>(in.base.base.als);
-    out->isVoice = static_cast<bool>(in.base.base.isVoice);
-    out->isVoicePrivacy = static_cast<bool>(in.base.base.isVoicePrivacy);
-    out->number = in.base.base.number;
-    out->numberPresentation = static_cast<aidl::android::hardware::radio::CallPresentation>(
-            in.base.base.numberPresentation);
-    out->name = in.base.base.name;
-    out->namePresentation = static_cast<aidl::android::hardware::radio::CallPresentation>(
-            in.base.base.namePresentation);
-    {
-        size_t size = in.base.base.uusInfo.size();
-        aidl::android::hardware::radio::UusInfo uusInfo;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.base.base.uusInfo[i], &uusInfo)) return false;
-            out->uusInfo.push_back(uusInfo);
-        }
-    }
-    out->audioQuality =
-            static_cast<aidl::android::hardware::radio::AudioQuality>(in.base.audioQuality);
-    out->forwardedNumber = in.forwardedNumber;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PhysicalChannelConfig& in,
-        aidl::android::hardware::radio::PhysicalChannelConfig* out) {
-    out->status = static_cast<aidl::android::hardware::radio::CellConnectionStatus>(in.status);
-    out->rat = static_cast<aidl::android::hardware::radio::RadioTechnology>(in.rat);
-    out->downlinkChannelNumber = static_cast<int32_t>(in.downlinkChannelNumber);
-    out->uplinkChannelNumber = static_cast<int32_t>(in.uplinkChannelNumber);
-    out->cellBandwidthDownlinkKhz = static_cast<int32_t>(in.cellBandwidthDownlinkKhz);
-    out->cellBandwidthUplinkKhz = static_cast<int32_t>(in.cellBandwidthUplinkKhz);
-    {
-        size_t size = in.contextIds.size();
-        for (size_t i = 0; i < size; i++) {
-            out->contextIds.push_back(static_cast<int32_t>(in.contextIds[i]));
-        }
-    }
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.physicalCellId > std::numeric_limits<int32_t>::max() || in.physicalCellId < 0) {
-        return false;
-    }
-    out->physicalCellId = static_cast<int32_t>(in.physicalCellId);
-    if (!translate(in.band, &out->band)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PhysicalChannelConfig::Band& in,
-        aidl::android::hardware::radio::PhysicalChannelConfigBand* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::PhysicalChannelConfig::Band::hidl_discriminator::
-                geranBand:
-            *out = static_cast<aidl::android::hardware::radio::GeranBands>(in.geranBand());
-            break;
-        case ::android::hardware::radio::V1_6::PhysicalChannelConfig::Band::hidl_discriminator::
-                utranBand:
-            *out = static_cast<aidl::android::hardware::radio::UtranBands>(in.utranBand());
-            break;
-        case ::android::hardware::radio::V1_6::PhysicalChannelConfig::Band::hidl_discriminator::
-                eutranBand:
-            *out = static_cast<aidl::android::hardware::radio::EutranBands>(in.eutranBand());
-            break;
-        case ::android::hardware::radio::V1_6::PhysicalChannelConfig::Band::hidl_discriminator::
-                ngranBand:
-            *out = static_cast<aidl::android::hardware::radio::NgranBands>(in.ngranBand());
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalSliceInfo& in,
-        aidl::android::hardware::radio::OptionalSliceInfo* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::OptionalSliceInfo::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::OptionalSliceInfo::hidl_discriminator::value: {
-            aidl::android::hardware::radio::SliceInfo value;
-            if (!translate(in.value(), &value)) return false;
-            out->set<aidl::android::hardware::radio::OptionalSliceInfo::value>(value);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::SliceInfo& in,
-        aidl::android::hardware::radio::SliceInfo* out) {
-    out->sst = static_cast<aidl::android::hardware::radio::SliceServiceType>(in.sst);
-    out->sliceDifferentiator = static_cast<int32_t>(in.sliceDifferentiator);
-    out->mappedHplmnSst =
-            static_cast<aidl::android::hardware::radio::SliceServiceType>(in.mappedHplmnSst);
-    out->mappedHplmnSD = static_cast<int32_t>(in.mappedHplmnSD);
-    out->status = static_cast<aidl::android::hardware::radio::SliceStatus>(in.status);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalDnn& in,
-        aidl::android::hardware::radio::OptionalDnn* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::OptionalDnn::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::OptionalDnn::hidl_discriminator::value:
-            *out = in.value();
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalOsAppId& in,
-        aidl::android::hardware::radio::OptionalOsAppId* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::OptionalOsAppId::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::OptionalOsAppId::hidl_discriminator::value: {
-            aidl::android::hardware::radio::OsAppId value;
-            if (!translate(in.value(), &value)) return false;
-            out->set<aidl::android::hardware::radio::OptionalOsAppId::value>(value);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalTrafficDescriptor& in,
-        aidl::android::hardware::radio::OptionalTrafficDescriptor* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::OptionalTrafficDescriptor::hidl_discriminator::
-                noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::OptionalTrafficDescriptor::hidl_discriminator::
-                value: {
-            aidl::android::hardware::radio::TrafficDescriptor value;
-            if (!translate(in.value(), &value)) return false;
-            out->set<aidl::android::hardware::radio::OptionalTrafficDescriptor::value>(value);
-        } break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::TrafficDescriptor& in,
-        aidl::android::hardware::radio::TrafficDescriptor* out) {
-    if (!translate(in.dnn, &out->dnn)) return false;
-    if (!translate(in.osAppId, &out->osAppId)) return false;
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OsAppId& in,
-        aidl::android::hardware::radio::OsAppId* out) {
-    {
-        size_t size = in.osAppId.size();
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.osAppId[i] > std::numeric_limits<int8_t>::max() || in.osAppId[i] < 0) {
-                return false;
-            }
-            out->osAppId.push_back(static_cast<int8_t>(in.osAppId[i]));
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::SlicingConfig& in,
-        aidl::android::hardware::radio::SlicingConfig* out) {
-    {
-        size_t size = in.urspRules.size();
-        aidl::android::hardware::radio::UrspRule urspRules;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.urspRules[i], &urspRules)) return false;
-            out->urspRules.push_back(urspRules);
-        }
-    }
-    {
-        size_t size = in.sliceInfo.size();
-        aidl::android::hardware::radio::SliceInfo sliceInfo;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.sliceInfo[i], &sliceInfo)) return false;
-            out->sliceInfo.push_back(sliceInfo);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::UrspRule& in,
-        aidl::android::hardware::radio::UrspRule* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.precedence > std::numeric_limits<int8_t>::max() || in.precedence < 0) {
-        return false;
-    }
-    out->precedence = static_cast<int8_t>(in.precedence);
-    {
-        size_t size = in.trafficDescriptors.size();
-        aidl::android::hardware::radio::TrafficDescriptor trafficDescriptors;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.trafficDescriptors[i], &trafficDescriptors)) return false;
-            out->trafficDescriptors.push_back(trafficDescriptors);
-        }
-    }
-    {
-        size_t size = in.routeSelectionDescriptor.size();
-        aidl::android::hardware::radio::RouteSelectionDescriptor routeSelectionDescriptor;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.routeSelectionDescriptor[i], &routeSelectionDescriptor)) return false;
-            out->routeSelectionDescriptor.push_back(routeSelectionDescriptor);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::RouteSelectionDescriptor& in,
-        aidl::android::hardware::radio::RouteSelectionDescriptor* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.precedence > std::numeric_limits<int8_t>::max() || in.precedence < 0) {
-        return false;
-    }
-    out->precedence = static_cast<int8_t>(in.precedence);
-    if (!translate(in.sessionType, &out->sessionType)) return false;
-    if (!translate(in.sscMode, &out->sscMode)) return false;
-    {
-        size_t size = in.sliceInfo.size();
-        aidl::android::hardware::radio::SliceInfo sliceInfo;
-        for (size_t i = 0; i < size; i++) {
-            if (!translate(in.sliceInfo[i], &sliceInfo)) return false;
-            out->sliceInfo.push_back(sliceInfo);
-        }
-    }
-    {
-        size_t size = in.dnn.size();
-        for (size_t i = 0; i < size; i++) {
-            out->dnn.push_back(in.dnn[i]);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalPdpProtocolType& in,
-        aidl::android::hardware::radio::OptionalPdpProtocolType* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::OptionalPdpProtocolType::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::OptionalPdpProtocolType::hidl_discriminator::value:
-            *out = static_cast<aidl::android::hardware::radio::PdpProtocolType>(in.value());
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalSscMode& in,
-        aidl::android::hardware::radio::OptionalSscMode* out) {
-    switch (in.getDiscriminator()) {
-        case ::android::hardware::radio::V1_6::OptionalSscMode::hidl_discriminator::noinit:
-            // Nothing to translate for Monostate.
-            break;
-        case ::android::hardware::radio::V1_6::OptionalSscMode::hidl_discriminator::value:
-            *out = static_cast<aidl::android::hardware::radio::SscMode>(in.value());
-            break;
-        default:
-            return false;
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::ImsiEncryptionInfo& in,
-        aidl::android::hardware::radio::ImsiEncryptionInfo* out) {
-    out->mcc = in.base.mcc;
-    out->mnc = in.base.mnc;
-    {
-        size_t size = in.base.carrierKey.size();
-        for (size_t i = 0; i < size; i++) {
-            // FIXME This requires conversion between signed and unsigned. Change this if it doesn't
-            // suit your needs.
-            if (in.base.carrierKey[i] > std::numeric_limits<int8_t>::max() ||
-                in.base.carrierKey[i] < 0) {
-                return false;
-            }
-            out->carrierKey.push_back(static_cast<int8_t>(in.base.carrierKey[i]));
-        }
-    }
-    out->keyIdentifier = in.base.keyIdentifier;
-    out->expirationTime = static_cast<int64_t>(in.base.expirationTime);
-    out->keyType = static_cast<aidl::android::hardware::radio::PublicKeyType>(in.keyType);
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PhonebookRecordInfo& in,
-        aidl::android::hardware::radio::PhonebookRecordInfo* out) {
-    // FIXME This requires conversion between signed and unsigned. Change this if it doesn't suit
-    // your needs.
-    if (in.recordId > std::numeric_limits<int32_t>::max() || in.recordId < 0) {
-        return false;
-    }
-    out->recordId = static_cast<int32_t>(in.recordId);
-    out->name = in.name;
-    out->number = in.number;
-    {
-        size_t size = in.emails.size();
-        for (size_t i = 0; i < size; i++) {
-            out->emails.push_back(in.emails[i]);
-        }
-    }
-    {
-        size_t size = in.additionalNumbers.size();
-        for (size_t i = 0; i < size; i++) {
-            out->additionalNumbers.push_back(in.additionalNumbers[i]);
-        }
-    }
-    return true;
-}
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PhonebookCapacity& in,
-        aidl::android::hardware::radio::PhonebookCapacity* out) {
-    out->maxAdnRecords = static_cast<int32_t>(in.maxAdnRecords);
-    out->usedAdnRecords = static_cast<int32_t>(in.usedAdnRecords);
-    out->maxEmailRecords = static_cast<int32_t>(in.maxEmailRecords);
-    out->usedEmailRecords = static_cast<int32_t>(in.usedEmailRecords);
-    out->maxAdditionalNumberRecords = static_cast<int32_t>(in.maxAdditionalNumberRecords);
-    out->usedAdditionalNumberRecords = static_cast<int32_t>(in.usedAdditionalNumberRecords);
-    out->maxNameLen = static_cast<int32_t>(in.maxNameLen);
-    out->maxNumberLen = static_cast<int32_t>(in.maxNumberLen);
-    out->maxEmailLen = static_cast<int32_t>(in.maxEmailLen);
-    out->maxAdditionalNumberLen = static_cast<int32_t>(in.maxAdditionalNumberLen);
-    return true;
-}
-
-}  // namespace android::h2a
diff --git a/radio/aidl/include/android/hardware/radio/translate-ndk.h b/radio/aidl/include/android/hardware/radio/translate-ndk.h
deleted file mode 100644
index b136029..0000000
--- a/radio/aidl/include/android/hardware/radio/translate-ndk.h
+++ /dev/null
@@ -1,699 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-
-#include <limits>
-#include "aidl/android/hardware/radio/AccessNetwork.h"
-#include "aidl/android/hardware/radio/ActivityStatsInfo.h"
-#include "aidl/android/hardware/radio/AddressProperty.h"
-#include "aidl/android/hardware/radio/ApnAuthType.h"
-#include "aidl/android/hardware/radio/ApnTypes.h"
-#include "aidl/android/hardware/radio/AppState.h"
-#include "aidl/android/hardware/radio/AppStatus.h"
-#include "aidl/android/hardware/radio/AppType.h"
-#include "aidl/android/hardware/radio/AudioQuality.h"
-#include "aidl/android/hardware/radio/BarringInfo.h"
-#include "aidl/android/hardware/radio/BarringInfoBarringType.h"
-#include "aidl/android/hardware/radio/BarringInfoBarringTypeSpecificInfo.h"
-#include "aidl/android/hardware/radio/BarringInfoBarringTypeSpecificInfoConditional.h"
-#include "aidl/android/hardware/radio/BarringInfoServiceType.h"
-#include "aidl/android/hardware/radio/Call.h"
-#include "aidl/android/hardware/radio/CallForwardInfo.h"
-#include "aidl/android/hardware/radio/CallForwardInfoStatus.h"
-#include "aidl/android/hardware/radio/CallPresentation.h"
-#include "aidl/android/hardware/radio/CallState.h"
-#include "aidl/android/hardware/radio/CardPowerState.h"
-#include "aidl/android/hardware/radio/CardState.h"
-#include "aidl/android/hardware/radio/CardStatus.h"
-#include "aidl/android/hardware/radio/Carrier.h"
-#include "aidl/android/hardware/radio/CarrierMatchType.h"
-#include "aidl/android/hardware/radio/CarrierRestrictions.h"
-#include "aidl/android/hardware/radio/CarrierRestrictionsWithPriority.h"
-#include "aidl/android/hardware/radio/CdmaBroadcastSmsConfigInfo.h"
-#include "aidl/android/hardware/radio/CdmaCallWaiting.h"
-#include "aidl/android/hardware/radio/CdmaCallWaitingNumberPlan.h"
-#include "aidl/android/hardware/radio/CdmaCallWaitingNumberPresentation.h"
-#include "aidl/android/hardware/radio/CdmaCallWaitingNumberType.h"
-#include "aidl/android/hardware/radio/CdmaDisplayInfoRecord.h"
-#include "aidl/android/hardware/radio/CdmaInfoRecName.h"
-#include "aidl/android/hardware/radio/CdmaInformationRecord.h"
-#include "aidl/android/hardware/radio/CdmaInformationRecords.h"
-#include "aidl/android/hardware/radio/CdmaLineControlInfoRecord.h"
-#include "aidl/android/hardware/radio/CdmaNumberInfoRecord.h"
-#include "aidl/android/hardware/radio/CdmaOtaProvisionStatus.h"
-#include "aidl/android/hardware/radio/CdmaRedirectingNumberInfoRecord.h"
-#include "aidl/android/hardware/radio/CdmaRedirectingReason.h"
-#include "aidl/android/hardware/radio/CdmaRoamingType.h"
-#include "aidl/android/hardware/radio/CdmaSignalInfoRecord.h"
-#include "aidl/android/hardware/radio/CdmaSignalStrength.h"
-#include "aidl/android/hardware/radio/CdmaSmsAck.h"
-#include "aidl/android/hardware/radio/CdmaSmsAddress.h"
-#include "aidl/android/hardware/radio/CdmaSmsDigitMode.h"
-#include "aidl/android/hardware/radio/CdmaSmsErrorClass.h"
-#include "aidl/android/hardware/radio/CdmaSmsMessage.h"
-#include "aidl/android/hardware/radio/CdmaSmsNumberMode.h"
-#include "aidl/android/hardware/radio/CdmaSmsNumberPlan.h"
-#include "aidl/android/hardware/radio/CdmaSmsNumberType.h"
-#include "aidl/android/hardware/radio/CdmaSmsSubaddress.h"
-#include "aidl/android/hardware/radio/CdmaSmsSubaddressType.h"
-#include "aidl/android/hardware/radio/CdmaSmsWriteArgs.h"
-#include "aidl/android/hardware/radio/CdmaSmsWriteArgsStatus.h"
-#include "aidl/android/hardware/radio/CdmaSubscriptionSource.h"
-#include "aidl/android/hardware/radio/CdmaT53AudioControlInfoRecord.h"
-#include "aidl/android/hardware/radio/CdmaT53ClirInfoRecord.h"
-#include "aidl/android/hardware/radio/CellConfigLte.h"
-#include "aidl/android/hardware/radio/CellConnectionStatus.h"
-#include "aidl/android/hardware/radio/CellIdentity.h"
-#include "aidl/android/hardware/radio/CellIdentityCdma.h"
-#include "aidl/android/hardware/radio/CellIdentityGsm.h"
-#include "aidl/android/hardware/radio/CellIdentityLte.h"
-#include "aidl/android/hardware/radio/CellIdentityNr.h"
-#include "aidl/android/hardware/radio/CellIdentityOperatorNames.h"
-#include "aidl/android/hardware/radio/CellIdentityTdscdma.h"
-#include "aidl/android/hardware/radio/CellIdentityWcdma.h"
-#include "aidl/android/hardware/radio/CellInfo.h"
-#include "aidl/android/hardware/radio/CellInfoCdma.h"
-#include "aidl/android/hardware/radio/CellInfoCellInfoRatSpecificInfo.h"
-#include "aidl/android/hardware/radio/CellInfoGsm.h"
-#include "aidl/android/hardware/radio/CellInfoInfo.h"
-#include "aidl/android/hardware/radio/CellInfoLte.h"
-#include "aidl/android/hardware/radio/CellInfoNr.h"
-#include "aidl/android/hardware/radio/CellInfoTdscdma.h"
-#include "aidl/android/hardware/radio/CellInfoType.h"
-#include "aidl/android/hardware/radio/CellInfoWcdma.h"
-#include "aidl/android/hardware/radio/CfData.h"
-#include "aidl/android/hardware/radio/ClipStatus.h"
-#include "aidl/android/hardware/radio/Clir.h"
-#include "aidl/android/hardware/radio/ClosedSubscriberGroupInfo.h"
-#include "aidl/android/hardware/radio/DataCallFailCause.h"
-#include "aidl/android/hardware/radio/DataConnActiveStatus.h"
-#include "aidl/android/hardware/radio/DataProfileId.h"
-#include "aidl/android/hardware/radio/DataProfileInfo.h"
-#include "aidl/android/hardware/radio/DataProfileInfoType.h"
-#include "aidl/android/hardware/radio/DataRegStateResult.h"
-#include "aidl/android/hardware/radio/DataRegStateResultVopsInfo.h"
-#include "aidl/android/hardware/radio/DataRequestReason.h"
-#include "aidl/android/hardware/radio/DataThrottlingAction.h"
-#include "aidl/android/hardware/radio/DeviceStateType.h"
-#include "aidl/android/hardware/radio/Dial.h"
-#include "aidl/android/hardware/radio/Domain.h"
-#include "aidl/android/hardware/radio/EmcIndicator.h"
-#include "aidl/android/hardware/radio/EmergencyCallRouting.h"
-#include "aidl/android/hardware/radio/EmergencyNumber.h"
-#include "aidl/android/hardware/radio/EmergencyNumberSource.h"
-#include "aidl/android/hardware/radio/EmergencyServiceCategory.h"
-#include "aidl/android/hardware/radio/EmfIndicator.h"
-#include "aidl/android/hardware/radio/EpsQos.h"
-#include "aidl/android/hardware/radio/EutranBands.h"
-#include "aidl/android/hardware/radio/EvdoSignalStrength.h"
-#include "aidl/android/hardware/radio/FrequencyRange.h"
-#include "aidl/android/hardware/radio/GeranBands.h"
-#include "aidl/android/hardware/radio/GsmBroadcastSmsConfigInfo.h"
-#include "aidl/android/hardware/radio/GsmSignalStrength.h"
-#include "aidl/android/hardware/radio/GsmSmsMessage.h"
-#include "aidl/android/hardware/radio/HandoverFailureMode.h"
-#include "aidl/android/hardware/radio/HardwareConfig.h"
-#include "aidl/android/hardware/radio/HardwareConfigModem.h"
-#include "aidl/android/hardware/radio/HardwareConfigSim.h"
-#include "aidl/android/hardware/radio/HardwareConfigState.h"
-#include "aidl/android/hardware/radio/HardwareConfigType.h"
-#include "aidl/android/hardware/radio/IccIo.h"
-#include "aidl/android/hardware/radio/IccIoResult.h"
-#include "aidl/android/hardware/radio/ImsSmsMessage.h"
-#include "aidl/android/hardware/radio/ImsiEncryptionInfo.h"
-#include "aidl/android/hardware/radio/IncrementalResultsPeriodicityRange.h"
-#include "aidl/android/hardware/radio/IndicationFilter.h"
-#include "aidl/android/hardware/radio/KeepaliveRequest.h"
-#include "aidl/android/hardware/radio/KeepaliveStatus.h"
-#include "aidl/android/hardware/radio/KeepaliveStatusCode.h"
-#include "aidl/android/hardware/radio/KeepaliveType.h"
-#include "aidl/android/hardware/radio/LastCallFailCause.h"
-#include "aidl/android/hardware/radio/LastCallFailCauseInfo.h"
-#include "aidl/android/hardware/radio/LceDataInfo.h"
-#include "aidl/android/hardware/radio/LceStatus.h"
-#include "aidl/android/hardware/radio/LceStatusInfo.h"
-#include "aidl/android/hardware/radio/LinkAddress.h"
-#include "aidl/android/hardware/radio/LinkCapacityEstimate.h"
-#include "aidl/android/hardware/radio/LteSignalStrength.h"
-#include "aidl/android/hardware/radio/LteVopsInfo.h"
-#include "aidl/android/hardware/radio/MaxSearchTimeRange.h"
-#include "aidl/android/hardware/radio/MaybePort.h"
-#include "aidl/android/hardware/radio/MvnoType.h"
-#include "aidl/android/hardware/radio/NeighboringCell.h"
-#include "aidl/android/hardware/radio/NetworkScanRequest.h"
-#include "aidl/android/hardware/radio/NetworkScanResult.h"
-#include "aidl/android/hardware/radio/NgranBands.h"
-#include "aidl/android/hardware/radio/NrDualConnectivityState.h"
-#include "aidl/android/hardware/radio/NrIndicators.h"
-#include "aidl/android/hardware/radio/NrQos.h"
-#include "aidl/android/hardware/radio/NrSignalStrength.h"
-#include "aidl/android/hardware/radio/NrVopsInfo.h"
-#include "aidl/android/hardware/radio/NvItem.h"
-#include "aidl/android/hardware/radio/NvWriteItem.h"
-#include "aidl/android/hardware/radio/OperatorInfo.h"
-#include "aidl/android/hardware/radio/OperatorStatus.h"
-#include "aidl/android/hardware/radio/OptionalCsgInfo.h"
-#include "aidl/android/hardware/radio/OptionalDnn.h"
-#include "aidl/android/hardware/radio/OptionalOsAppId.h"
-#include "aidl/android/hardware/radio/OptionalPdpProtocolType.h"
-#include "aidl/android/hardware/radio/OptionalSliceInfo.h"
-#include "aidl/android/hardware/radio/OptionalSscMode.h"
-#include "aidl/android/hardware/radio/OptionalTrafficDescriptor.h"
-#include "aidl/android/hardware/radio/OsAppId.h"
-#include "aidl/android/hardware/radio/P2Constant.h"
-#include "aidl/android/hardware/radio/PbReceivedStatus.h"
-#include "aidl/android/hardware/radio/PcoDataInfo.h"
-#include "aidl/android/hardware/radio/PdpProtocolType.h"
-#include "aidl/android/hardware/radio/PersoSubstate.h"
-#include "aidl/android/hardware/radio/PhoneRestrictedState.h"
-#include "aidl/android/hardware/radio/PhonebookCapacity.h"
-#include "aidl/android/hardware/radio/PhonebookRecordInfo.h"
-#include "aidl/android/hardware/radio/PhysicalChannelConfig.h"
-#include "aidl/android/hardware/radio/PhysicalChannelConfigBand.h"
-#include "aidl/android/hardware/radio/PinState.h"
-#include "aidl/android/hardware/radio/PortRange.h"
-#include "aidl/android/hardware/radio/PreferredNetworkType.h"
-#include "aidl/android/hardware/radio/PrlIndicator.h"
-#include "aidl/android/hardware/radio/PublicKeyType.h"
-#include "aidl/android/hardware/radio/Qos.h"
-#include "aidl/android/hardware/radio/QosBandwidth.h"
-#include "aidl/android/hardware/radio/QosFilter.h"
-#include "aidl/android/hardware/radio/QosFilterDirection.h"
-#include "aidl/android/hardware/radio/QosFilterIpsecSpi.h"
-#include "aidl/android/hardware/radio/QosFilterIpv6FlowLabel.h"
-#include "aidl/android/hardware/radio/QosFilterTypeOfService.h"
-#include "aidl/android/hardware/radio/QosFlowIdRange.h"
-#include "aidl/android/hardware/radio/QosPortRange.h"
-#include "aidl/android/hardware/radio/QosProtocol.h"
-#include "aidl/android/hardware/radio/QosSession.h"
-#include "aidl/android/hardware/radio/RadioAccessFamily.h"
-#include "aidl/android/hardware/radio/RadioAccessNetworks.h"
-#include "aidl/android/hardware/radio/RadioAccessSpecifier.h"
-#include "aidl/android/hardware/radio/RadioAccessSpecifierBands.h"
-#include "aidl/android/hardware/radio/RadioBandMode.h"
-#include "aidl/android/hardware/radio/RadioCapability.h"
-#include "aidl/android/hardware/radio/RadioCapabilityPhase.h"
-#include "aidl/android/hardware/radio/RadioCapabilityStatus.h"
-#include "aidl/android/hardware/radio/RadioCdmaSmsConst.h"
-#include "aidl/android/hardware/radio/RadioConst.h"
-#include "aidl/android/hardware/radio/RadioError.h"
-#include "aidl/android/hardware/radio/RadioFrequencyInfo.h"
-#include "aidl/android/hardware/radio/RadioIndicationType.h"
-#include "aidl/android/hardware/radio/RadioResponseInfo.h"
-#include "aidl/android/hardware/radio/RadioResponseInfoModem.h"
-#include "aidl/android/hardware/radio/RadioResponseType.h"
-#include "aidl/android/hardware/radio/RadioState.h"
-#include "aidl/android/hardware/radio/RadioTechnology.h"
-#include "aidl/android/hardware/radio/RadioTechnologyFamily.h"
-#include "aidl/android/hardware/radio/RegState.h"
-#include "aidl/android/hardware/radio/RegStateResult.h"
-#include "aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfo.h"
-#include "aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo.h"
-#include "aidl/android/hardware/radio/RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo.h"
-#include "aidl/android/hardware/radio/RegistrationFailCause.h"
-#include "aidl/android/hardware/radio/ResetNvType.h"
-#include "aidl/android/hardware/radio/RestrictedState.h"
-#include "aidl/android/hardware/radio/RouteSelectionDescriptor.h"
-#include "aidl/android/hardware/radio/SapApduType.h"
-#include "aidl/android/hardware/radio/SapConnectRsp.h"
-#include "aidl/android/hardware/radio/SapDisconnectType.h"
-#include "aidl/android/hardware/radio/SapResultCode.h"
-#include "aidl/android/hardware/radio/SapStatus.h"
-#include "aidl/android/hardware/radio/SapTransferProtocol.h"
-#include "aidl/android/hardware/radio/ScanIntervalRange.h"
-#include "aidl/android/hardware/radio/ScanStatus.h"
-#include "aidl/android/hardware/radio/ScanType.h"
-#include "aidl/android/hardware/radio/SelectUiccSub.h"
-#include "aidl/android/hardware/radio/SendSmsResult.h"
-#include "aidl/android/hardware/radio/SetupDataCallResult.h"
-#include "aidl/android/hardware/radio/SignalMeasurementType.h"
-#include "aidl/android/hardware/radio/SignalStrength.h"
-#include "aidl/android/hardware/radio/SignalThresholdInfo.h"
-#include "aidl/android/hardware/radio/SimApdu.h"
-#include "aidl/android/hardware/radio/SimLockMultiSimPolicy.h"
-#include "aidl/android/hardware/radio/SimRefreshResult.h"
-#include "aidl/android/hardware/radio/SimRefreshType.h"
-#include "aidl/android/hardware/radio/SliceInfo.h"
-#include "aidl/android/hardware/radio/SliceServiceType.h"
-#include "aidl/android/hardware/radio/SliceStatus.h"
-#include "aidl/android/hardware/radio/SlicingConfig.h"
-#include "aidl/android/hardware/radio/SmsAcknowledgeFailCause.h"
-#include "aidl/android/hardware/radio/SmsWriteArgs.h"
-#include "aidl/android/hardware/radio/SmsWriteArgsStatus.h"
-#include "aidl/android/hardware/radio/SrvccState.h"
-#include "aidl/android/hardware/radio/SsInfoData.h"
-#include "aidl/android/hardware/radio/SsRequestType.h"
-#include "aidl/android/hardware/radio/SsServiceType.h"
-#include "aidl/android/hardware/radio/SsTeleserviceType.h"
-#include "aidl/android/hardware/radio/SscMode.h"
-#include "aidl/android/hardware/radio/StkCcUnsolSsResult.h"
-#include "aidl/android/hardware/radio/SubscriptionType.h"
-#include "aidl/android/hardware/radio/SuppServiceClass.h"
-#include "aidl/android/hardware/radio/SuppSvcNotification.h"
-#include "aidl/android/hardware/radio/TdscdmaSignalStrength.h"
-#include "aidl/android/hardware/radio/TimeStampType.h"
-#include "aidl/android/hardware/radio/TrafficDescriptor.h"
-#include "aidl/android/hardware/radio/TtyMode.h"
-#include "aidl/android/hardware/radio/UiccSubActStatus.h"
-#include "aidl/android/hardware/radio/UrspRule.h"
-#include "aidl/android/hardware/radio/UssdModeType.h"
-#include "aidl/android/hardware/radio/UtranBands.h"
-#include "aidl/android/hardware/radio/UusDcs.h"
-#include "aidl/android/hardware/radio/UusInfo.h"
-#include "aidl/android/hardware/radio/UusType.h"
-#include "aidl/android/hardware/radio/VoiceRegStateResult.h"
-#include "aidl/android/hardware/radio/VopsIndicator.h"
-#include "aidl/android/hardware/radio/WcdmaSignalStrength.h"
-#include "android/hardware/radio/1.0/types.h"
-#include "android/hardware/radio/1.1/types.h"
-#include "android/hardware/radio/1.2/types.h"
-#include "android/hardware/radio/1.3/types.h"
-#include "android/hardware/radio/1.4/types.h"
-#include "android/hardware/radio/1.5/types.h"
-#include "android/hardware/radio/1.6/types.h"
-
-namespace android::h2a {
-
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::IccIo& in,
-        aidl::android::hardware::radio::IccIo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::NeighboringCell& in,
-        aidl::android::hardware::radio::NeighboringCell* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::UusInfo& in,
-        aidl::android::hardware::radio::UusInfo* out);
-__attribute__((warn_unused_result)) bool translate(const ::android::hardware::radio::V1_0::Dial& in,
-                                                   aidl::android::hardware::radio::Dial* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::LastCallFailCauseInfo& in,
-        aidl::android::hardware::radio::LastCallFailCauseInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::GsmSignalStrength& in,
-        aidl::android::hardware::radio::GsmSignalStrength* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSignalStrength& in,
-        aidl::android::hardware::radio::CdmaSignalStrength* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::EvdoSignalStrength& in,
-        aidl::android::hardware::radio::EvdoSignalStrength* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SendSmsResult& in,
-        aidl::android::hardware::radio::SendSmsResult* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::IccIoResult& in,
-        aidl::android::hardware::radio::IccIoResult* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CallForwardInfo& in,
-        aidl::android::hardware::radio::CallForwardInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::OperatorInfo& in,
-        aidl::android::hardware::radio::OperatorInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SmsWriteArgs& in,
-        aidl::android::hardware::radio::SmsWriteArgs* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsAddress& in,
-        aidl::android::hardware::radio::CdmaSmsAddress* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsSubaddress& in,
-        aidl::android::hardware::radio::CdmaSmsSubaddress* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsMessage& in,
-        aidl::android::hardware::radio::CdmaSmsMessage* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsAck& in,
-        aidl::android::hardware::radio::CdmaSmsAck* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaBroadcastSmsConfigInfo& in,
-        aidl::android::hardware::radio::CdmaBroadcastSmsConfigInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSmsWriteArgs& in,
-        aidl::android::hardware::radio::CdmaSmsWriteArgs* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::GsmBroadcastSmsConfigInfo& in,
-        aidl::android::hardware::radio::GsmBroadcastSmsConfigInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::GsmSmsMessage& in,
-        aidl::android::hardware::radio::GsmSmsMessage* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::ImsSmsMessage& in,
-        aidl::android::hardware::radio::ImsSmsMessage* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SimApdu& in,
-        aidl::android::hardware::radio::SimApdu* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::NvWriteItem& in,
-        aidl::android::hardware::radio::NvWriteItem* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SelectUiccSub& in,
-        aidl::android::hardware::radio::SelectUiccSub* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::HardwareConfigModem& in,
-        aidl::android::hardware::radio::HardwareConfigModem* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::HardwareConfigSim& in,
-        aidl::android::hardware::radio::HardwareConfigSim* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::HardwareConfig& in,
-        aidl::android::hardware::radio::HardwareConfig* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::LceStatusInfo& in,
-        aidl::android::hardware::radio::LceStatusInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::LceDataInfo& in,
-        aidl::android::hardware::radio::LceDataInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::ActivityStatsInfo& in,
-        aidl::android::hardware::radio::ActivityStatsInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::Carrier& in,
-        aidl::android::hardware::radio::Carrier* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CarrierRestrictions& in,
-        aidl::android::hardware::radio::CarrierRestrictions* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SuppSvcNotification& in,
-        aidl::android::hardware::radio::SuppSvcNotification* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SimRefreshResult& in,
-        aidl::android::hardware::radio::SimRefreshResult* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaSignalInfoRecord& in,
-        aidl::android::hardware::radio::CdmaSignalInfoRecord* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaCallWaiting& in,
-        aidl::android::hardware::radio::CdmaCallWaiting* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaDisplayInfoRecord& in,
-        aidl::android::hardware::radio::CdmaDisplayInfoRecord* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaNumberInfoRecord& in,
-        aidl::android::hardware::radio::CdmaNumberInfoRecord* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaRedirectingNumberInfoRecord& in,
-        aidl::android::hardware::radio::CdmaRedirectingNumberInfoRecord* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaLineControlInfoRecord& in,
-        aidl::android::hardware::radio::CdmaLineControlInfoRecord* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaT53ClirInfoRecord& in,
-        aidl::android::hardware::radio::CdmaT53ClirInfoRecord* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaT53AudioControlInfoRecord& in,
-        aidl::android::hardware::radio::CdmaT53AudioControlInfoRecord* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaInformationRecord& in,
-        aidl::android::hardware::radio::CdmaInformationRecord* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CdmaInformationRecords& in,
-        aidl::android::hardware::radio::CdmaInformationRecords* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::CfData& in,
-        aidl::android::hardware::radio::CfData* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::SsInfoData& in,
-        aidl::android::hardware::radio::SsInfoData* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::StkCcUnsolSsResult& in,
-        aidl::android::hardware::radio::StkCcUnsolSsResult* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_0::PcoDataInfo& in,
-        aidl::android::hardware::radio::PcoDataInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_1::KeepaliveRequest& in,
-        aidl::android::hardware::radio::KeepaliveRequest* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_1::KeepaliveStatus& in,
-        aidl::android::hardware::radio::KeepaliveStatus* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::CellIdentityOperatorNames& in,
-        aidl::android::hardware::radio::CellIdentityOperatorNames* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::CellIdentityCdma& in,
-        aidl::android::hardware::radio::CellIdentityCdma* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::CellInfoCdma& in,
-        aidl::android::hardware::radio::CellInfoCdma* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::WcdmaSignalStrength& in,
-        aidl::android::hardware::radio::WcdmaSignalStrength* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::TdscdmaSignalStrength& in,
-        aidl::android::hardware::radio::TdscdmaSignalStrength* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_2::VoiceRegStateResult& in,
-        aidl::android::hardware::radio::VoiceRegStateResult* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_3::RadioResponseInfoModem& in,
-        aidl::android::hardware::radio::RadioResponseInfoModem* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::EmergencyNumber& in,
-        aidl::android::hardware::radio::EmergencyNumber* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::RadioFrequencyInfo& in,
-        aidl::android::hardware::radio::RadioFrequencyInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::LteVopsInfo& in,
-        aidl::android::hardware::radio::LteVopsInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::NrIndicators& in,
-        aidl::android::hardware::radio::NrIndicators* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::DataRegStateResult& in,
-        aidl::android::hardware::radio::DataRegStateResult* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::DataRegStateResult::VopsInfo& in,
-        aidl::android::hardware::radio::DataRegStateResultVopsInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::CellConfigLte& in,
-        aidl::android::hardware::radio::CellConfigLte* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::CellInfo::Info& in,
-        aidl::android::hardware::radio::CellInfoInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::RadioCapability& in,
-        aidl::android::hardware::radio::RadioCapability* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_4::CarrierRestrictionsWithPriority& in,
-        aidl::android::hardware::radio::CarrierRestrictionsWithPriority* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::RadioAccessSpecifier& in,
-        aidl::android::hardware::radio::RadioAccessSpecifier* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands& in,
-        aidl::android::hardware::radio::RadioAccessSpecifierBands* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::SignalThresholdInfo& in,
-        aidl::android::hardware::radio::SignalThresholdInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::NetworkScanRequest& in,
-        aidl::android::hardware::radio::NetworkScanRequest* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::DataProfileInfo& in,
-        aidl::android::hardware::radio::DataProfileInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::LinkAddress& in,
-        aidl::android::hardware::radio::LinkAddress* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::ClosedSubscriberGroupInfo& in,
-        aidl::android::hardware::radio::ClosedSubscriberGroupInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::OptionalCsgInfo& in,
-        aidl::android::hardware::radio::OptionalCsgInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityGsm& in,
-        aidl::android::hardware::radio::CellIdentityGsm* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityWcdma& in,
-        aidl::android::hardware::radio::CellIdentityWcdma* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityTdscdma& in,
-        aidl::android::hardware::radio::CellIdentityTdscdma* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityLte& in,
-        aidl::android::hardware::radio::CellIdentityLte* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentityNr& in,
-        aidl::android::hardware::radio::CellIdentityNr* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellInfoGsm& in,
-        aidl::android::hardware::radio::CellInfoGsm* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellInfoWcdma& in,
-        aidl::android::hardware::radio::CellInfoWcdma* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellInfoTdscdma& in,
-        aidl::android::hardware::radio::CellInfoTdscdma* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CellIdentity& in,
-        aidl::android::hardware::radio::CellIdentity* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::BarringInfo& in,
-        aidl::android::hardware::radio::BarringInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::BarringInfo::BarringTypeSpecificInfo::Conditional&
-                in,
-        aidl::android::hardware::radio::BarringInfoBarringTypeSpecificInfoConditional* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::BarringInfo::BarringTypeSpecificInfo& in,
-        aidl::android::hardware::radio::BarringInfoBarringTypeSpecificInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::RegStateResult::AccessTechnologySpecificInfo::
-                Cdma2000RegistrationInfo& in,
-        aidl::android::hardware::radio::
-                RegStateResultAccessTechnologySpecificInfoCdma2000RegistrationInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::RegStateResult::AccessTechnologySpecificInfo::
-                EutranRegistrationInfo& in,
-        aidl::android::hardware::radio::
-                RegStateResultAccessTechnologySpecificInfoEutranRegistrationInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::AppStatus& in,
-        aidl::android::hardware::radio::AppStatus* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_5::CardStatus& in,
-        aidl::android::hardware::radio::CardStatus* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosBandwidth& in,
-        aidl::android::hardware::radio::QosBandwidth* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::EpsQos& in,
-        aidl::android::hardware::radio::EpsQos* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::NrQos& in,
-        aidl::android::hardware::radio::NrQos* out);
-__attribute__((warn_unused_result)) bool translate(const ::android::hardware::radio::V1_6::Qos& in,
-                                                   aidl::android::hardware::radio::Qos* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::RadioResponseInfo& in,
-        aidl::android::hardware::radio::RadioResponseInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PortRange& in,
-        aidl::android::hardware::radio::PortRange* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::MaybePort& in,
-        aidl::android::hardware::radio::MaybePort* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosFilter& in,
-        aidl::android::hardware::radio::QosFilter* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosFilter::TypeOfService& in,
-        aidl::android::hardware::radio::QosFilterTypeOfService* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosFilter::Ipv6FlowLabel& in,
-        aidl::android::hardware::radio::QosFilterIpv6FlowLabel* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosFilter::IpsecSpi& in,
-        aidl::android::hardware::radio::QosFilterIpsecSpi* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::QosSession& in,
-        aidl::android::hardware::radio::QosSession* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::SetupDataCallResult& in,
-        aidl::android::hardware::radio::SetupDataCallResult* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::LinkCapacityEstimate& in,
-        aidl::android::hardware::radio::LinkCapacityEstimate* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::NrVopsInfo& in,
-        aidl::android::hardware::radio::NrVopsInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::LteSignalStrength& in,
-        aidl::android::hardware::radio::LteSignalStrength* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::NrSignalStrength& in,
-        aidl::android::hardware::radio::NrSignalStrength* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::SignalStrength& in,
-        aidl::android::hardware::radio::SignalStrength* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::CellInfoLte& in,
-        aidl::android::hardware::radio::CellInfoLte* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::CellInfoNr& in,
-        aidl::android::hardware::radio::CellInfoNr* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::CellInfo& in,
-        aidl::android::hardware::radio::CellInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::CellInfo::CellInfoRatSpecificInfo& in,
-        aidl::android::hardware::radio::CellInfoCellInfoRatSpecificInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::NetworkScanResult& in,
-        aidl::android::hardware::radio::NetworkScanResult* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::RegStateResult& in,
-        aidl::android::hardware::radio::RegStateResult* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::RegStateResult::AccessTechnologySpecificInfo& in,
-        aidl::android::hardware::radio::RegStateResultAccessTechnologySpecificInfo* out);
-__attribute__((warn_unused_result)) bool translate(const ::android::hardware::radio::V1_6::Call& in,
-                                                   aidl::android::hardware::radio::Call* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PhysicalChannelConfig& in,
-        aidl::android::hardware::radio::PhysicalChannelConfig* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PhysicalChannelConfig::Band& in,
-        aidl::android::hardware::radio::PhysicalChannelConfigBand* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalSliceInfo& in,
-        aidl::android::hardware::radio::OptionalSliceInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::SliceInfo& in,
-        aidl::android::hardware::radio::SliceInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalDnn& in,
-        aidl::android::hardware::radio::OptionalDnn* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalOsAppId& in,
-        aidl::android::hardware::radio::OptionalOsAppId* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalTrafficDescriptor& in,
-        aidl::android::hardware::radio::OptionalTrafficDescriptor* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::TrafficDescriptor& in,
-        aidl::android::hardware::radio::TrafficDescriptor* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OsAppId& in,
-        aidl::android::hardware::radio::OsAppId* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::SlicingConfig& in,
-        aidl::android::hardware::radio::SlicingConfig* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::UrspRule& in,
-        aidl::android::hardware::radio::UrspRule* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::RouteSelectionDescriptor& in,
-        aidl::android::hardware::radio::RouteSelectionDescriptor* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalPdpProtocolType& in,
-        aidl::android::hardware::radio::OptionalPdpProtocolType* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::OptionalSscMode& in,
-        aidl::android::hardware::radio::OptionalSscMode* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::ImsiEncryptionInfo& in,
-        aidl::android::hardware::radio::ImsiEncryptionInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PhonebookRecordInfo& in,
-        aidl::android::hardware::radio::PhonebookRecordInfo* out);
-__attribute__((warn_unused_result)) bool translate(
-        const ::android::hardware::radio::V1_6::PhonebookCapacity& in,
-        aidl::android::hardware::radio::PhonebookCapacity* out);
-
-}  // namespace android::h2a
diff --git a/secure_element/1.1/vts/functional/OWNERS b/secure_element/1.1/vts/functional/OWNERS
new file mode 100644
index 0000000..a7ee7e9
--- /dev/null
+++ b/secure_element/1.1/vts/functional/OWNERS
@@ -0,0 +1,2 @@
+# Bug component: 456592
+jackcwyu@google.com
diff --git a/sensors/2.1/default/Android.bp b/sensors/2.1/default/Android.bp
index 0be81e1..e11316b 100644
--- a/sensors/2.1/default/Android.bp
+++ b/sensors/2.1/default/Android.bp
@@ -22,6 +22,11 @@
     default_applicable_licenses: ["hardware_interfaces_license"],
 }
 
+filegroup {
+    name: "android.hardware.sensors@2.1.xml",
+    srcs: ["android.hardware.sensors@2.1.xml"],
+}
+
 cc_binary {
     name: "android.hardware.sensors@2.1-service.mock",
     defaults: ["hidl_defaults"],
@@ -50,5 +55,5 @@
         "android.hardware.sensors@1.0-convert",
         "android.hardware.sensors@2.X-shared-impl",
     ],
-    vintf_fragments: ["android.hardware.sensors@2.1.xml"],
+    vintf_fragments: [":android.hardware.sensors@2.1.xml"],
 }
diff --git a/sensors/2.1/default/apex/Android.bp b/sensors/2.1/default/apex/Android.bp
new file mode 100644
index 0000000..3345b92
--- /dev/null
+++ b/sensors/2.1/default/apex/Android.bp
@@ -0,0 +1,46 @@
+package {
+    default_applicable_licenses: ["hardware_interfaces_license"],
+}
+
+apex_key {
+    name: "com.android.hardware.sensors.key",
+    public_key: "com.android.hardware.sensors.avbpubkey",
+    private_key: "com.android.hardware.sensors.pem",
+}
+
+android_app_certificate {
+    name: "com.android.hardware.sensors.certificate",
+    certificate: "com.android.hardware.sensors",
+}
+
+prebuilt_etc {
+    name: "com.android.hardware.sensors.rc",
+    src: "com.android.hardware.sensors.rc",
+    installable: false,
+}
+
+// Default vendor APEX for android.hardware.sensors.
+// Custom implementations may use override_apex based on this APEX.
+apex {
+    name: "com.android.hardware.sensors",
+    manifest: "apex_manifest.json",
+    key: "com.android.hardware.sensors.key",
+    certificate: ":com.android.hardware.sensors.certificate",
+    file_contexts: "file_contexts",
+    use_vndk_as_stable: true,
+    updatable: false,
+    // Install the apex in /vendor/apex
+    soc_specific: true,
+    binaries: ["android.hardware.sensors@2.1-service.mock"],
+    prebuilts: [
+        "com.android.hardware.sensors.rc",
+        "android.hardware.sensor.ambient_temperature.prebuilt.xml",
+        "android.hardware.sensor.barometer.prebuilt.xml",
+        "android.hardware.sensor.gyroscope.prebuilt.xml",
+        "android.hardware.sensor.hinge_angle.prebuilt.xml",
+        "android.hardware.sensor.light.prebuilt.xml",
+        "android.hardware.sensor.proximity.prebuilt.xml",
+        "android.hardware.sensor.relative_humidity.prebuilt.xml",
+    ],
+    vintf_fragments: [":android.hardware.sensors@2.1.xml"],
+}
diff --git a/sensors/2.1/default/apex/apex_manifest.json b/sensors/2.1/default/apex/apex_manifest.json
new file mode 100644
index 0000000..47e45ee
--- /dev/null
+++ b/sensors/2.1/default/apex/apex_manifest.json
@@ -0,0 +1,4 @@
+{
+  "name": "com.android.hardware.sensors",
+  "version": 1
+}
diff --git a/sensors/2.1/default/apex/com.android.hardware.sensors.avbpubkey b/sensors/2.1/default/apex/com.android.hardware.sensors.avbpubkey
new file mode 100644
index 0000000..98dfb71
--- /dev/null
+++ b/sensors/2.1/default/apex/com.android.hardware.sensors.avbpubkey
Binary files differ
diff --git a/sensors/2.1/default/apex/com.android.hardware.sensors.pem b/sensors/2.1/default/apex/com.android.hardware.sensors.pem
new file mode 100644
index 0000000..a2f1833
--- /dev/null
+++ b/sensors/2.1/default/apex/com.android.hardware.sensors.pem
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIJKAIBAAKCAgEArUwl9rjXtNrSqJ2rfEryTnVEte7uhZlsn42rXRHFZtuV8N03
+AKAFDDkhJIT+FqmVJLW1Whrno+goaKzA23BodZcSo/xOJuTopgQ/TVqIO2QZ2WUS
+1NiYT3+kydZgtBHhfS+ek9h6aTLgJUn/XBX2xgEA6kp/NkcLpGkqj9Xs7XUpG+n/
+KnyYg+/YFqooEKHTTi4dT9YgRblgzv5zhCKxjB9gqy8dmhwDTpbPGavNiMIZvnSs
+aQzXh7+UMwte+V4QdaEqonoVWm85vEh6rsPpvvmxvlkVnUstRWRwsvbA183gvwZg
+f7OmAgpVu0kEkSHpoJJWpDUhzxmTdxmwvmL92eCJqQUjvxLqak4uBt+epUgbgxcA
+nS7rNg6PsNlHhYl5wRArPP17iW/QK3qnoz8rKgJCtdxPPD13byA13eY9q+Fdwb2H
+uHxGu1iYlRxUAzptvb6pIED/v9MMw/g3yMJkR89WG+pBLbUXHko6H0qOVchYrd8C
+OtcGo7GBBPbJmj9ZGZDX7p5YBSdTZs8f9wWqJmXkfVR60zZE0dOnOchzL44c8oUh
+uwEZMee7Ae/2LfWnfIe5KBNTvvH1CzU8KbQUJJVbATbb3j/eYExgsbnk0WgFi6i4
+osuJZZmfC44tAg18gXozcji+xYuW3MIMV2+drdc3xXn7LXKn5JZCLVJ6n+cCAwEA
+AQKCAgATT6P/XVO0NJo67e75F8Tul0TD3U85FgKzuO66nUtZDekkgRIrAKnvVcJq
+tmM2FUmoYJNH6i2b5zfxiianjVwmlmIeYfQ3g1Slg12megsqSxpSTmAN1eELItcz
+Iq9+AWwWLiNGqF3jsSanIRrSoSPxppT6hrisTLhwZsO2aYlQYLjnAmlLy7yXHzf+
+NpHmYJISaTMc/Wh1PJYcGuC2fcM5MRntmX9799kqfcWwP6PUtIR347p+rk6qMuAJ
+3B+GPEQrR31fw6jzfed6Ir2BEhXPETYMVxMAhysRS4L/fl247pk30Dcao+NA4PPy
+vc1Devr0yLnc7IrK8DetkvBOFuvgl53gHPZ4f7ge2PQMPghwjBaFuXklcfY96PVw
+Yo/CyAN+VEANThFFcKUzovtHI6m3sNTlxE6F+AYvx5dE/WZKmE5/cYCSJ8bhLPJl
+G68VkdeNv0LMZ/7rf1OEWP/YWw/5/tQ7MJ0IO5GShjE2EAGG0SZgK8/fwHZZJFES
+oYVWlriGtGDfiYjPLqVIjdZI6iOo6BMQh6pl0TPIJpn3ODqtRy8gN3TMvG6VcTJy
+QE3Z+br7UsK4gXSw0+MNLC3VKhX2bjT5q9lVpVnLv4L7q1ad4kwHblFAo686ZbWt
+eKTUv7QTI3fFqYeZEgCqRBQZ3UoKyWOBg0MAbf26hZFTFFpbEQKCAQEA2JdW6wDM
+iO1haR168l497nUC382/f/fJA8vzFdJ7cHVM95Tx/5JNYNJSL30XDyux9RJNqnFu
+tByec4c5CVuX/Gv/B4Q++xaaI7OVT9hTl/aoTShObGRJGbVh8xZagb7on7dAfD6G
+1SzTaahxQT5neoiki13GvJ6teL+0ZbCxRDMfPyy79lRzH5d0mw+EQvtc0Vvkweyj
+zf/Mn0yMZHO19oCKjJo8QkciseOqaS2mpgtOiRDc01uuaFAcw6taiERrR86xK2Yl
+OowIx6Yu8n7jRyTGUfr2Oz97a/zDVMVRi3BuyePOyCD9PfUmoj9JyCFbQSS1Lq3N
+AWacnNwQpkDDiQKCAQEAzNQ3/hKhjrLyEm2ktQk1Tzyk4eGu/NElxSKM7uJTeU0k
+xxKuMNMQCJbZmklJKojVYZ0fsh6AyLEpBMV6mWTmVo0qA/A09jKD2tsKu52KGCMt
+vgrN4Gi5JJJACNbtpG7uSJstAYuUGYQSTuS/xCE+urgMVbWBTocsf0bEeEe0FRWX
+txhS/zdj6wspTd6lJ0SSahWG/BsV7990zaRDGYv0N1+SwF8/C0Ml99WbyRof6oP9
+jx0esKA+giWc5lSk+Ag2gpsTIH36aF53lQnDBZL3hqSgqP0ollKa9Uyjfmp65D1m
+TwoENrKnVNO5ZKteTM3SGQ+zsHxBPpinK7T2BPe77wKCAQBdS+Nu2ys/mDErnD1H
+hXzb6J9SVEg3ET8PWZzeO4pciMqcoxYS5qxaFn68Yf+60zGWxUmbL71l7CX80bSp
+6UBwxPxX+ok+kx/WXRbmC+MGRIN+qOwPGKu8XTtSAMD/voJpugAXBMADt4lhq+MN
+HZppV865Ea33tco3hyxn2VKic/rztYtJslrcstrRqD9qsufqbtD9D7gHljZIMCsR
+Yh5xjjEgG5f1XLr/MXhIUhfE0n4D4LWefZGE8W1Sg889f2tOxSPf8+H5dDSb+2Oh
+pTK1hIvA6H+ESfYaMAjbzRsxGz89y9lYr40mUSFRJj3b7TJnvy4ka00xW0f+8XRi
+iOcxAoIBAB0o8Te4i0t3akL5XQNw5if7qDWIHZNcaxYfjxTLH7sbIms825OT2KqA
+X0Y5vLLTfB1Dcym2cfsgTYiiXIvN84TK3/pjjgamtmLH4EVJbkl1aKOvghO6lPEB
+6R/ZCUfpiv7HKKcZqeHgDYMxyaMwYG/Ql+Dz0A7P66PK/VlqS9bclha43cf7qLvj
+gOPXGIf4mSeFHQxzBrJ5i3VjNzJB3GitsIS2ipEd5B/eRylgEL8gP07KhH38silx
+FV8tGbc95BS/4v8zMBz/peKP2zXF8Hs4oK6uK8MKy4i0emoa2pf3rcL+2A65bF0F
+L1WHmAszGf/7Xkd3yQoSTWpJfuTCJ/0CggEBAJjkBaEoiRYp0RBq1Ty0wa+xbPHp
+gAcpco+VC3T8uqniKBDrf5QsMDm7+P9IZRYrfgyy0KFeG4mHrTt61JgOLnhSTOyz
+EEChc8SOn6+vqMB36FmSSqVb6CdLEZhv5dtTzzHgyd3xS3cwga9Mf2SCoG/l34HJ
+XzfoQyLKvqF0kWOq/76k+kBM5QwWIGc2fVXcpJpWaAuPWKDQJnkvTcPp8XPyEADv
+z2YbSDDqqcwczX2DWepf2t2RU1fdyjS5wS6pNDvsuyd6gwUTQT1P5ODHbIdAwcdi
+5Gxui8voJmzvrfabIsN6H73ZS4Lw20ZB+ejYyiwxZcb0os45C1coicMJ9wQ=
+-----END RSA PRIVATE KEY-----
diff --git a/sensors/2.1/default/apex/com.android.hardware.sensors.pk8 b/sensors/2.1/default/apex/com.android.hardware.sensors.pk8
new file mode 100644
index 0000000..7a1cca0
--- /dev/null
+++ b/sensors/2.1/default/apex/com.android.hardware.sensors.pk8
Binary files differ
diff --git a/sensors/2.1/default/apex/com.android.hardware.sensors.rc b/sensors/2.1/default/apex/com.android.hardware.sensors.rc
new file mode 100644
index 0000000..bd245b4
--- /dev/null
+++ b/sensors/2.1/default/apex/com.android.hardware.sensors.rc
@@ -0,0 +1,7 @@
+service vendor.sensors-hal-2-1-mock /apex/com.android.hardware.sensors/bin/hw/android.hardware.sensors@2.1-service.mock
+    interface android.hardware.sensors@2.0::ISensors default
+    interface android.hardware.sensors@2.1::ISensors default
+    class hal
+    user system
+    group system
+    rlimit rtprio 10 10
diff --git a/sensors/2.1/default/apex/com.android.hardware.sensors.x509.pem b/sensors/2.1/default/apex/com.android.hardware.sensors.x509.pem
new file mode 100644
index 0000000..20a06f9
--- /dev/null
+++ b/sensors/2.1/default/apex/com.android.hardware.sensors.x509.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF3TCCA8UCFAbIl4RS714WSLo4k64MHsINz4VEMA0GCSqGSIb3DQEBCwUAMIGp
+MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91
+bnRhaW4gVmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEi
+MCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTElMCMGA1UEAwwcY29t
+LmFuZHJvaWQuaGFyZHdhcmUuc2Vuc29yczAgFw0yMTA5MDMxNjEyNDNaGA80NzU5
+MDczMTE2MTI0M1owgakxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
+MRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lkMRAwDgYD
+VQQLDAdBbmRyb2lkMSIwIAYJKoZIhvcNAQkBFhNhbmRyb2lkQGFuZHJvaWQuY29t
+MSUwIwYDVQQDDBxjb20uYW5kcm9pZC5oYXJkd2FyZS5zZW5zb3JzMIICIjANBgkq
+hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnluNTPcq4pDEeb5gEYszRYQCawq8czUY
+J+x2b0i7qO2wLidX45CX6BLZ9N7c5veoV3FvC1wMTRR6lGAyg7UbD80vVmPdmr6R
+vw2AdIqrghXinvAEv6gxQQPVQa8UHkCL4lULLXo2gdmoCBM8VJHihjO/2F8ZLsP/
+nKhYx9Nr6w9LEyalmHTkXOgNyrNprpbJwugdk3hDXbAK+j5nF9fsz/iWFoXnPuNe
+oqdWj21YhXKDAbewBXaM6l3qmTdGsVVJL4HmVURGUY2f2UZwMWTEjpy9UDzyfqqg
+CSdH1RLmGVAINyfNI3Zswo0CjnOCf0jW6mq9/6mfGYu8hBCrky/rOH8reDwYZTGe
+H6JbNj0dhEN5HzQcxGEQQ43L1nmH7XlnuPO0xPSsw5binPVuUvURivR3PSsFgpPl
+0Uche62XgLAXCXhNV2uUQtZLVFGug7JcGgS4O3GoKr6w35Q+W9SEXanXFMW6X+wN
+hkbhB4MDSuKTZrjEnZEyxMOLG8ILN9i7osa+yjWONTn9bZc6q3Y9jyu3u84o8kC8
+KDcvr8YZEL63nQsQXO44GiQmqBptuB+ehcAC6uRCKkY9tQ95EQ7laGQ3C85d3gPj
+NcGjT7SSuUir7n+LI9pZsotedd9+rGhiiyT8CM4sVWiYJFnA2UX/bsnkZyAOq9Po
+jz1aMdHc4wUCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEATEPN2SZk8pJc4DaWmhyR
+MUklzVeuN0J0Mij1mHuVmID7Q5IhBBXxtVmwRIo208rHSvFLAo7Z4FnuZCV3A/c9
+TlXT3S2t+iYG5eOyXSsoSc/uerJ7kIBcOe27qIrO9GwcK5CQlTaXP+CG1gbLp1nl
+IaqKAT+eb/ji5wmFxMI77wo3uKLPTCfpaptFNaYlRqvxiXdJsCZwCPgmCtXJUeeZ
+R/HKOA4PcS2QB+HwhYePY5kUJPwt6MwJEyno72oenfl49FrGHj0BzVmQ7KMfiYjZ
+eRSB2Wbo50xfiICkPlUcvWD8rRNg7N9CM/Q5O0MW3ivAe42aGap/8qfXUa+L5vu4
+9vaxgQvBVcPXE/pyeCYM8beB84Us+FOYPC7gIUhcctBqGYAQmHzp3sXvIg0DVxz7
+0aqolFGpjRFqbgheS9WRkDHFpYrhR1XMVOQjussHqWEyRcvliqeFlZr8+JNkJNi+
+lmGMdnEAWZs8PL0/AEf+8y0Nr/w0k3Y6IZCDcwpxbpJQOU5pAbkfUzEJHkxMfuvW
+ZshvqIMOaLWCGxZaxlbLRxWGuarWYzfmDY3n9TwJmAIUdMLiswv3UsCmLBJO1XGX
+SUWfgi4fyG1/phfzhdU3efMvmN+XT16/ykMrY8P5S+ghwK12IZ3DgTl0ooLFABUj
+zYeQ8LLz3SP9LNgeLnPP/po=
+-----END CERTIFICATE-----
diff --git a/sensors/2.1/default/apex/file_contexts b/sensors/2.1/default/apex/file_contexts
new file mode 100644
index 0000000..d0095c0
--- /dev/null
+++ b/sensors/2.1/default/apex/file_contexts
@@ -0,0 +1,5 @@
+(/.*)?							u:object_r:vendor_file:s0
+# Permission XMLs
+/etc/permissions(/.*)?					u:object_r:vendor_configs_file:s0
+# Service binary
+/bin/hw/android\.hardware\.sensors@2\.1-service\.mock	u:object_r:hal_sensors_default_exec:s0
