Merge "Vehicle HAL reference impl Part I"
diff --git a/Android.bp b/Android.bp
index 3c441bb..7aef46b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,53 +1,3 @@
-// This is an autogenerated file, do not edit.
 subdirs = [
-    "audio/2.0",
-    "audio/2.0/default",
-    "audio/common/2.0",
-    "audio/effect/2.0",
-    "benchmarks/msgq/1.0",
-    "biometrics/fingerprint/2.1",
-    "bluetooth/1.0",
-    "boot/1.0",
-    "broadcastradio/1.0",
-    "example/extension/light/2.0",
-    "gnss/1.0",
-    "graphics/allocator/2.0",
-    "graphics/allocator/2.0/default",
-    "graphics/composer/2.1",
-    "graphics/composer/2.1/default",
-    "graphics/mapper/2.0",
-    "graphics/mapper/2.0/default",
-    "light/2.0",
-    "memtrack/1.0",
-    "memtrack/1.0/default",
-    "nfc/1.0",
-    "nfc/1.0/default",
-    "power/1.0",
-    "power/1.0/default",
-    "radio/1.0",
-    "sensors/1.0",
-    "sensors/1.0/default",
-    "soundtrigger/2.0",
-    "tests/bar/1.0",
-    "tests/bar/1.0/default",
-    "tests/baz/1.0",
-    "tests/expression/1.0",
-    "tests/foo/1.0",
-    "tests/foo/1.0/default",
-    "tests/foo/1.0/default/lib",
-    "tests/libhwbinder/1.0",
-    "tests/libhwbinder/1.0/default",
-    "tests/msgq/1.0",
-    "tests/pointer/1.0",
-    "tests/pointer/1.0/default",
-    "tests/pointer/1.0/default/lib",
-    "thermal/1.0",
-    "thermal/1.0/default",
-    "vehicle/2.0",
-    "vibrator/1.0",
-    "vibrator/1.0/default",
-    "vr/1.0",
-    "vr/1.0/default",
-    "wifi/1.0",
-    "wifi/supplicant/1.0",
+    "*"
 ]
diff --git a/audio/2.0/Android.bp b/audio/2.0/Android.bp
index 5edb042..2fd2d67 100644
--- a/audio/2.0/Android.bp
+++ b/audio/2.0/Android.bp
@@ -93,4 +93,9 @@
         "android.hardware.audio.common@2.0",
         "android.hardware.audio.effect@2.0",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/audio/2.0/Android.mk b/audio/2.0/Android.mk
new file mode 100644
index 0000000..8557ea2
--- /dev/null
+++ b/audio/2.0/Android.mk
@@ -0,0 +1,44 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.audio@2.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/audio/2.0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/IDevice.hal
+$(GEN): $(LOCAL_PATH)/IDevicesFactory.hal
+$(GEN): $(LOCAL_PATH)/IPrimaryDevice.hal
+$(GEN): $(LOCAL_PATH)/IStream.hal
+$(GEN): $(LOCAL_PATH)/IStreamIn.hal
+$(GEN): $(LOCAL_PATH)/IStreamOut.hal
+$(GEN): $(LOCAL_PATH)/IStreamOutCallback.hal
+
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava-constants -randroid.hardware:hardware/interfaces \
+        android.hardware.audio@2.0
+
+$(GEN):
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+# Avoid dependency cycle of framework.jar -> this-library -> framework.jar
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/audio/Android.bp b/audio/Android.bp
new file mode 100644
index 0000000..4117288
--- /dev/null
+++ b/audio/Android.bp
@@ -0,0 +1,6 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "2.0",
+    "common/2.0",
+    "effect/2.0",
+]
diff --git a/audio/common/2.0/Android.bp b/audio/common/2.0/Android.bp
index 655c0c9..783623a 100644
--- a/audio/common/2.0/Android.bp
+++ b/audio/common/2.0/Android.bp
@@ -35,4 +35,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/audio/common/2.0/Android.mk b/audio/common/2.0/Android.mk
new file mode 100644
index 0000000..f8346b1
--- /dev/null
+++ b/audio/common/2.0/Android.mk
@@ -0,0 +1,37 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.audio.common@2.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/audio/common/2.0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava-constants -randroid.hardware:hardware/interfaces \
+        android.hardware.audio.common@2.0
+
+$(GEN):
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+# Avoid dependency cycle of framework.jar -> this-library -> framework.jar
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/audio/effect/2.0/Android.bp b/audio/effect/2.0/Android.bp
index 4dd2b1e..31c1b90 100644
--- a/audio/effect/2.0/Android.bp
+++ b/audio/effect/2.0/Android.bp
@@ -148,4 +148,9 @@
         "libcutils",
         "android.hardware.audio.common@2.0",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/audio/effect/2.0/Android.mk b/audio/effect/2.0/Android.mk
new file mode 100644
index 0000000..a30de1c
--- /dev/null
+++ b/audio/effect/2.0/Android.mk
@@ -0,0 +1,51 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.audio.effect@2.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/audio/effect/2.0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/IAcousticEchoCancelerEffect.hal
+$(GEN): $(LOCAL_PATH)/IAutomaticGainControlEffect.hal
+$(GEN): $(LOCAL_PATH)/IBassBoostEffect.hal
+$(GEN): $(LOCAL_PATH)/IDownmixEffect.hal
+$(GEN): $(LOCAL_PATH)/IEffect.hal
+$(GEN): $(LOCAL_PATH)/IEffectBufferProviderCallback.hal
+$(GEN): $(LOCAL_PATH)/IEffectsFactory.hal
+$(GEN): $(LOCAL_PATH)/IEnvironmentalReverbEffect.hal
+$(GEN): $(LOCAL_PATH)/IEqualizerEffect.hal
+$(GEN): $(LOCAL_PATH)/ILoudnessEnhancerEffect.hal
+$(GEN): $(LOCAL_PATH)/INoiseSuppressionEffect.hal
+$(GEN): $(LOCAL_PATH)/IPresetReverbEffect.hal
+$(GEN): $(LOCAL_PATH)/IVirtualizerEffect.hal
+$(GEN): $(LOCAL_PATH)/IVisualizerEffect.hal
+
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava-constants -randroid.hardware:hardware/interfaces \
+        android.hardware.audio.effect@2.0
+
+$(GEN):
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+# Avoid dependency cycle of framework.jar -> this-library -> framework.jar
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/benchmarks/Android.bp b/benchmarks/Android.bp
new file mode 100644
index 0000000..ab0f308
--- /dev/null
+++ b/benchmarks/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "msgq/1.0",
+]
diff --git a/biometrics/Android.bp b/biometrics/Android.bp
new file mode 100644
index 0000000..eea4604
--- /dev/null
+++ b/biometrics/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "fingerprint/2.1",
+]
diff --git a/biometrics/fingerprint/2.1/Android.bp b/biometrics/fingerprint/2.1/Android.bp
index 77b41b8..e1fd755 100644
--- a/biometrics/fingerprint/2.1/Android.bp
+++ b/biometrics/fingerprint/2.1/Android.bp
@@ -51,4 +51,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/bluetooth/Android.bp b/bluetooth/Android.bp
new file mode 100644
index 0000000..bbb3e4b
--- /dev/null
+++ b/bluetooth/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+]
diff --git a/boot/Android.bp b/boot/Android.bp
new file mode 100644
index 0000000..bbb3e4b
--- /dev/null
+++ b/boot/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+]
diff --git a/broadcastradio/1.0/Android.bp b/broadcastradio/1.0/Android.bp
index 44af4aa..7883d67 100644
--- a/broadcastradio/1.0/Android.bp
+++ b/broadcastradio/1.0/Android.bp
@@ -67,4 +67,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/broadcastradio/Android.bp b/broadcastradio/Android.bp
new file mode 100644
index 0000000..bbb3e4b
--- /dev/null
+++ b/broadcastradio/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+]
diff --git a/example/Android.bp b/example/Android.bp
new file mode 100644
index 0000000..ea6dbb5
--- /dev/null
+++ b/example/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "extension/light/2.0",
+]
diff --git a/example/extension/light/2.0/Android.bp b/example/extension/light/2.0/Android.bp
index 42f34f2..3e6d2b1 100644
--- a/example/extension/light/2.0/Android.bp
+++ b/example/extension/light/2.0/Android.bp
@@ -44,4 +44,9 @@
         "libcutils",
         "android.hardware.light@2.0",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/gnss/1.0/Android.bp b/gnss/1.0/Android.bp
index a97531d..fe90f1e 100644
--- a/gnss/1.0/Android.bp
+++ b/gnss/1.0/Android.bp
@@ -171,4 +171,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/gnss/Android.bp b/gnss/Android.bp
new file mode 100644
index 0000000..bbb3e4b
--- /dev/null
+++ b/gnss/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+]
diff --git a/graphics/Android.bp b/graphics/Android.bp
new file mode 100644
index 0000000..92bcb2a
--- /dev/null
+++ b/graphics/Android.bp
@@ -0,0 +1,9 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "allocator/2.0",
+    "allocator/2.0/default",
+    "composer/2.1",
+    "composer/2.1/default",
+    "mapper/2.0",
+    "mapper/2.0/default",
+]
diff --git a/graphics/allocator/2.0/Android.bp b/graphics/allocator/2.0/Android.bp
index f29c50b..1e9edac 100644
--- a/graphics/allocator/2.0/Android.bp
+++ b/graphics/allocator/2.0/Android.bp
@@ -43,4 +43,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/graphics/allocator/2.0/Android.mk b/graphics/allocator/2.0/Android.mk
new file mode 100644
index 0000000..3165fed
--- /dev/null
+++ b/graphics/allocator/2.0/Android.mk
@@ -0,0 +1,38 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.graphics.allocator@2.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/graphics/allocator/2.0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/IAllocator.hal
+
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava-constants -randroid.hardware:hardware/interfaces \
+        android.hardware.graphics.allocator@2.0
+
+$(GEN):
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+# Avoid dependency cycle of framework.jar -> this-library -> framework.jar
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/graphics/composer/2.1/Android.bp b/graphics/composer/2.1/Android.bp
index 3c63a68..094d09e 100644
--- a/graphics/composer/2.1/Android.bp
+++ b/graphics/composer/2.1/Android.bp
@@ -52,4 +52,9 @@
         "libcutils",
         "android.hardware.graphics.allocator@2.0",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/light/2.0/Android.bp b/light/2.0/Android.bp
index a3b03a7..33b4af2 100644
--- a/light/2.0/Android.bp
+++ b/light/2.0/Android.bp
@@ -43,4 +43,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/light/Android.bp b/light/Android.bp
new file mode 100644
index 0000000..c12cd4f
--- /dev/null
+++ b/light/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "2.0",
+]
diff --git a/memtrack/1.0/Android.bp b/memtrack/1.0/Android.bp
index 3696aea..996dbb6 100644
--- a/memtrack/1.0/Android.bp
+++ b/memtrack/1.0/Android.bp
@@ -43,4 +43,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/memtrack/Android.bp b/memtrack/Android.bp
new file mode 100644
index 0000000..ba90f2c
--- /dev/null
+++ b/memtrack/Android.bp
@@ -0,0 +1,5 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+    "1.0/default",
+]
diff --git a/nfc/1.0/default/android.hardware.nfc@1.0-service.rc b/nfc/1.0/default/android.hardware.nfc@1.0-service.rc
index 1d42718..7b67577 100644
--- a/nfc/1.0/default/android.hardware.nfc@1.0-service.rc
+++ b/nfc/1.0/default/android.hardware.nfc@1.0-service.rc
@@ -1,4 +1,4 @@
 service nfc_hal_service /system/bin/hw/android.hardware.nfc@1.0-service
     class hal
     user nfc
-    group nfc readproc
+    group nfc
diff --git a/nfc/1.0/vts/functional/Android.bp b/nfc/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..0f1afbd
--- /dev/null
+++ b/nfc/1.0/vts/functional/Android.bp
@@ -0,0 +1,36 @@
+//
+// Copyright (C) 2016 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.
+//
+
+cc_test {
+    name: "nfc_hidl_hal_test",
+    gtest: true,
+    srcs: ["nfc_hidl_hal_test.cpp"],
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libcutils",
+        "libhidl",
+        "libhwbinder",
+        "libnativehelper",
+        "libutils",
+        "android.hardware.nfc@1.0",
+    ],
+    static_libs: ["libgtest"],
+    cflags: [
+        "-O0",
+        "-g",
+    ],
+}
\ No newline at end of file
diff --git a/nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp b/nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp
new file mode 100644
index 0000000..e215704
--- /dev/null
+++ b/nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#define LOG_TAG "nfc_hidl_hal_test"
+#include <android-base/logging.h>
+
+#include <hardware/nfc.h>
+#include <android/hardware/nfc/1.0/types.h>
+#include <android/hardware/nfc/1.0/INfc.h>
+#include <android/hardware/nfc/1.0/INfcClientCallback.h>
+
+#include <gtest/gtest.h>
+
+using ::android::hardware::nfc::V1_0::INfc;
+using ::android::hardware::nfc::V1_0::INfcClientCallback;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+#define NFC_NCI_SERVICE_NAME "nfc_nci"
+
+
+// Simple NfcClientCallback used as part of testing.
+class NfcClientCallback : public INfcClientCallback {
+  public:
+   NfcClientCallback() {};
+
+   virtual ~NfcClientCallback() = default;
+
+   // sendEvent callback function - currently no-op.
+   Return<void> sendEvent(
+           ::android::hardware::nfc::V1_0::NfcEvent event,
+           ::android::hardware::nfc::V1_0::NfcStatus event_status) override {
+     return Void();
+   };
+
+   // sendData callback function - currently no-op.
+   Return<void> sendData(const ::android::hardware::nfc::V1_0::NfcData &data ) override {
+     ::android::hardware::nfc::V1_0::NfcData copy = data;
+     return Void();
+   };
+};
+
+
+// The main test class for NFC HIDL HAL.
+class NfcHidlTest : public ::testing::Test {
+ public:
+  virtual void SetUp() override {
+    // currently test passthrough mode only
+    nfc = INfc::getService(NFC_NCI_SERVICE_NAME, true);
+    ASSERT_NE(nfc, nullptr);
+
+    nfc_cb = new NfcClientCallback();
+    ASSERT_NE(nfc_cb, nullptr);
+  }
+
+  virtual void TearDown() override {}
+
+  sp<INfc> nfc;
+  sp<INfcClientCallback> nfc_cb;
+};
+
+
+// A class for test environment setup (kept since this file is a template).
+class NfcHidlEnvironment : public ::testing::Environment {
+ public:
+  virtual void SetUp() {}
+  virtual void TearDown() {}
+
+ private:
+};
+
+TEST_F(NfcHidlTest, OpenAndClose) {
+  EXPECT_EQ(0, (int)nfc->open(nfc_cb));
+  EXPECT_EQ(0, (int)nfc->close());
+}
+
+int main(int argc, char **argv) {
+  ::testing::AddGlobalTestEnvironment(new NfcHidlEnvironment);
+  ::testing::InitGoogleTest(&argc, argv);
+  int status = RUN_ALL_TESTS();
+  ALOGI("Test result = %d", status);
+  return status;
+}
diff --git a/nfc/Android.bp b/nfc/Android.bp
new file mode 100644
index 0000000..ed19a37
--- /dev/null
+++ b/nfc/Android.bp
@@ -0,0 +1,6 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+    "1.0/default",
+    "1.0/vts/functional",
+]
diff --git a/power/1.0/Android.bp b/power/1.0/Android.bp
index 9b4d81e..4b6d34b 100644
--- a/power/1.0/Android.bp
+++ b/power/1.0/Android.bp
@@ -43,4 +43,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/power/Android.bp b/power/Android.bp
new file mode 100644
index 0000000..ba90f2c
--- /dev/null
+++ b/power/Android.bp
@@ -0,0 +1,5 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+    "1.0/default",
+]
diff --git a/radio/1.0/Android.bp b/radio/1.0/Android.bp
index 34eaf33..65a5d79 100644
--- a/radio/1.0/Android.bp
+++ b/radio/1.0/Android.bp
@@ -7,12 +7,18 @@
     srcs: [
         "types.hal",
         "IRadio.hal",
-        "IRadioCallback.hal",
+        "IRadioIndication.hal",
+        "IRadioResponse.hal",
+        "ISap.hal",
+        "ISapCallback.hal",
     ],
     out: [
         "android/hardware/radio/1.0/types.cpp",
         "android/hardware/radio/1.0/RadioAll.cpp",
-        "android/hardware/radio/1.0/RadioCallbackAll.cpp",
+        "android/hardware/radio/1.0/RadioIndicationAll.cpp",
+        "android/hardware/radio/1.0/RadioResponseAll.cpp",
+        "android/hardware/radio/1.0/SapAll.cpp",
+        "android/hardware/radio/1.0/SapCallbackAll.cpp",
     ],
 }
 
@@ -23,7 +29,10 @@
     srcs: [
         "types.hal",
         "IRadio.hal",
-        "IRadioCallback.hal",
+        "IRadioIndication.hal",
+        "IRadioResponse.hal",
+        "ISap.hal",
+        "ISapCallback.hal",
     ],
     out: [
         "android/hardware/radio/1.0/types.h",
@@ -32,11 +41,26 @@
         "android/hardware/radio/1.0/BnRadio.h",
         "android/hardware/radio/1.0/BpRadio.h",
         "android/hardware/radio/1.0/BsRadio.h",
-        "android/hardware/radio/1.0/IRadioCallback.h",
-        "android/hardware/radio/1.0/IHwRadioCallback.h",
-        "android/hardware/radio/1.0/BnRadioCallback.h",
-        "android/hardware/radio/1.0/BpRadioCallback.h",
-        "android/hardware/radio/1.0/BsRadioCallback.h",
+        "android/hardware/radio/1.0/IRadioIndication.h",
+        "android/hardware/radio/1.0/IHwRadioIndication.h",
+        "android/hardware/radio/1.0/BnRadioIndication.h",
+        "android/hardware/radio/1.0/BpRadioIndication.h",
+        "android/hardware/radio/1.0/BsRadioIndication.h",
+        "android/hardware/radio/1.0/IRadioResponse.h",
+        "android/hardware/radio/1.0/IHwRadioResponse.h",
+        "android/hardware/radio/1.0/BnRadioResponse.h",
+        "android/hardware/radio/1.0/BpRadioResponse.h",
+        "android/hardware/radio/1.0/BsRadioResponse.h",
+        "android/hardware/radio/1.0/ISap.h",
+        "android/hardware/radio/1.0/IHwSap.h",
+        "android/hardware/radio/1.0/BnSap.h",
+        "android/hardware/radio/1.0/BpSap.h",
+        "android/hardware/radio/1.0/BsSap.h",
+        "android/hardware/radio/1.0/ISapCallback.h",
+        "android/hardware/radio/1.0/IHwSapCallback.h",
+        "android/hardware/radio/1.0/BnSapCallback.h",
+        "android/hardware/radio/1.0/BpSapCallback.h",
+        "android/hardware/radio/1.0/BsSapCallback.h",
     ],
 }
 
diff --git a/radio/1.0/Android.mk b/radio/1.0/Android.mk
index b8365bf..dd3744b 100644
--- a/radio/1.0/Android.mk
+++ b/radio/1.0/Android.mk
@@ -13,9 +13,9 @@
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
 #
-# Build types.hal (RadioAppState)
+# Build types.hal (AppState)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioAppState.java
+GEN := $(intermediates)/android/hardware/radio/1.0/AppState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -23,16 +23,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioAppState
+        android.hardware.radio@1.0::types.AppState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioAppStatus)
+# Build types.hal (AppStatus)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioAppStatus.java
+GEN := $(intermediates)/android/hardware/radio/1.0/AppStatus.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -40,16 +40,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioAppStatus
+        android.hardware.radio@1.0::types.AppStatus
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioAppType)
+# Build types.hal (AppType)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioAppType.java
+GEN := $(intermediates)/android/hardware/radio/1.0/AppType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -57,16 +57,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioAppType
+        android.hardware.radio@1.0::types.AppType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioCardState)
+# Build types.hal (Call)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioCardState.java
+GEN := $(intermediates)/android/hardware/radio/1.0/Call.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -74,16 +74,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioCardState
+        android.hardware.radio@1.0::types.Call
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioCardStatus)
+# Build types.hal (CallForwardInfo)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioCardStatus.java
+GEN := $(intermediates)/android/hardware/radio/1.0/CallForwardInfo.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -91,7 +91,398 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioCardStatus
+        android.hardware.radio@1.0::types.CallForwardInfo
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CallForwardInfoStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CallForwardInfoStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CallForwardInfoStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CallPresentation)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CallPresentation.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CallPresentation
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CallState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CallState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CallState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CardState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CardState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CardState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CardStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CardStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CardStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CdmaSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CdmaSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CdmaSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (ClipStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/ClipStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.ClipStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Clir)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/Clir.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.Clir
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (DataCallFailCause)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/DataCallFailCause.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.DataCallFailCause
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (DataProfile)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/DataProfile.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.DataProfile
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (DataRegStateResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/DataRegStateResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.DataRegStateResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Dial)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/Dial.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.Dial
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (EvdoSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/EvdoSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.EvdoSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (GwSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/GwSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.GwSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (IccIo)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/IccIo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.IccIo
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (IccIoResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/IccIoResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.IccIoResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (LastCallFailCause)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/LastCallFailCause.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.LastCallFailCause
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (LteSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/LteSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.LteSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OperatorInfo)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/OperatorInfo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.OperatorInfo
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OperatorStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/OperatorStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.OperatorStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PersoSubstate)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/PersoSubstate.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.PersoSubstate
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PinState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/PinState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.PinState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (RadioBandMode)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioBandMode.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.RadioBandMode
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -132,9 +523,9 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioPersoSubstate)
+# Build types.hal (RadioError)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioPersoSubstate.java
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioError.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -142,16 +533,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioPersoSubstate
+        android.hardware.radio@1.0::types.RadioError
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioPinState)
+# Build types.hal (RadioResponseInfo)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioPinState.java
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioResponseInfo.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -159,16 +550,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioPinState
+        android.hardware.radio@1.0::types.RadioResponseInfo
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioRestrictedState)
+# Build types.hal (RadioResponseType)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioRestrictedState.java
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioResponseType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -176,7 +567,7 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioRestrictedState
+        android.hardware.radio@1.0::types.RadioResponseType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -200,14 +591,358 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (RadioTechnology)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioTechnology.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.RadioTechnology
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (RegState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/RegState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.RegState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (RestrictedState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/RestrictedState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.RestrictedState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapApduType)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapApduType.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapApduType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapConnectRsp)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapConnectRsp.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapConnectRsp
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapDisconnectType)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapDisconnectType.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapDisconnectType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapResultCode)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapResultCode.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapResultCode
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapTransferProtocol)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapTransferProtocol.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapTransferProtocol
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SendSmsResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SendSmsResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SendSmsResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SetupDataCallResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SetupDataCallResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SetupDataCallResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SmsAcknowledgeFailCause)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SmsAcknowledgeFailCause.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SmsAcknowledgeFailCause
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SmsWriteArgs)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SmsWriteArgs.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SmsWriteArgs
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SmsWriteArgsStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SmsWriteArgsStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SmsWriteArgsStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (TdScdmaSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/TdScdmaSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.TdScdmaSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (UusDcs)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/UusDcs.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.UusDcs
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (UusInfo)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/UusInfo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.UusInfo
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (UusType)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/UusType.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.UusType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (VoiceRegStateResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/VoiceRegStateResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.VoiceRegStateResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build IRadio.hal
 #
 GEN := $(intermediates)/android/hardware/radio/1.0/IRadio.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IRadio.hal
-$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IRadioCallback.hal
-$(GEN): $(LOCAL_PATH)/IRadioCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IRadioIndication.hal
+$(GEN): $(LOCAL_PATH)/IRadioIndication.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IRadioResponse.hal
+$(GEN): $(LOCAL_PATH)/IRadioResponse.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
 $(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
@@ -219,21 +954,80 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build IRadioCallback.hal
+# Build IRadioIndication.hal
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/IRadioCallback.java
+GEN := $(intermediates)/android/hardware/radio/1.0/IRadioIndication.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IRadioCallback.hal
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IRadioIndication.hal
 $(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
 $(GEN): $(LOCAL_PATH)/types.hal
 $(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::IRadioCallback
+        android.hardware.radio@1.0::IRadioIndication
 
-$(GEN): $(LOCAL_PATH)/IRadioCallback.hal
+$(GEN): $(LOCAL_PATH)/IRadioIndication.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IRadioResponse.hal
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/IRadioResponse.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IRadioResponse.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::IRadioResponse
+
+$(GEN): $(LOCAL_PATH)/IRadioResponse.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build ISap.hal
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/ISap.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISap.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/ISapCallback.hal
+$(GEN): $(LOCAL_PATH)/ISapCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::ISap
+
+$(GEN): $(LOCAL_PATH)/ISap.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build ISapCallback.hal
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/ISapCallback.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISapCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::ISapCallback
+
+$(GEN): $(LOCAL_PATH)/ISapCallback.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 include $(BUILD_JAVA_LIBRARY)
@@ -250,9 +1044,9 @@
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
 #
-# Build types.hal (RadioAppState)
+# Build types.hal (AppState)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioAppState.java
+GEN := $(intermediates)/android/hardware/radio/1.0/AppState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -260,16 +1054,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioAppState
+        android.hardware.radio@1.0::types.AppState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioAppStatus)
+# Build types.hal (AppStatus)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioAppStatus.java
+GEN := $(intermediates)/android/hardware/radio/1.0/AppStatus.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -277,16 +1071,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioAppStatus
+        android.hardware.radio@1.0::types.AppStatus
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioAppType)
+# Build types.hal (AppType)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioAppType.java
+GEN := $(intermediates)/android/hardware/radio/1.0/AppType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -294,16 +1088,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioAppType
+        android.hardware.radio@1.0::types.AppType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioCardState)
+# Build types.hal (Call)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioCardState.java
+GEN := $(intermediates)/android/hardware/radio/1.0/Call.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -311,16 +1105,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioCardState
+        android.hardware.radio@1.0::types.Call
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioCardStatus)
+# Build types.hal (CallForwardInfo)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioCardStatus.java
+GEN := $(intermediates)/android/hardware/radio/1.0/CallForwardInfo.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -328,7 +1122,398 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioCardStatus
+        android.hardware.radio@1.0::types.CallForwardInfo
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CallForwardInfoStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CallForwardInfoStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CallForwardInfoStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CallPresentation)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CallPresentation.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CallPresentation
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CallState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CallState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CallState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CardState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CardState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CardState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CardStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CardStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CardStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (CdmaSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/CdmaSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.CdmaSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (ClipStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/ClipStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.ClipStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Clir)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/Clir.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.Clir
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (DataCallFailCause)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/DataCallFailCause.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.DataCallFailCause
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (DataProfile)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/DataProfile.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.DataProfile
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (DataRegStateResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/DataRegStateResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.DataRegStateResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Dial)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/Dial.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.Dial
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (EvdoSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/EvdoSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.EvdoSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (GwSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/GwSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.GwSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (IccIo)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/IccIo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.IccIo
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (IccIoResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/IccIoResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.IccIoResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (LastCallFailCause)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/LastCallFailCause.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.LastCallFailCause
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (LteSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/LteSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.LteSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OperatorInfo)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/OperatorInfo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.OperatorInfo
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OperatorStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/OperatorStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.OperatorStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PersoSubstate)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/PersoSubstate.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.PersoSubstate
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PinState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/PinState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.PinState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (RadioBandMode)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioBandMode.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.RadioBandMode
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -369,9 +1554,9 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioPersoSubstate)
+# Build types.hal (RadioError)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioPersoSubstate.java
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioError.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -379,16 +1564,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioPersoSubstate
+        android.hardware.radio@1.0::types.RadioError
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioPinState)
+# Build types.hal (RadioResponseInfo)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioPinState.java
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioResponseInfo.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -396,16 +1581,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioPinState
+        android.hardware.radio@1.0::types.RadioResponseInfo
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (RadioRestrictedState)
+# Build types.hal (RadioResponseType)
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/RadioRestrictedState.java
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioResponseType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -413,7 +1598,7 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::types.RadioRestrictedState
+        android.hardware.radio@1.0::types.RadioResponseType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -437,14 +1622,358 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (RadioTechnology)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/RadioTechnology.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.RadioTechnology
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (RegState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/RegState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.RegState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (RestrictedState)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/RestrictedState.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.RestrictedState
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapApduType)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapApduType.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapApduType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapConnectRsp)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapConnectRsp.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapConnectRsp
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapDisconnectType)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapDisconnectType.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapDisconnectType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapResultCode)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapResultCode.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapResultCode
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SapTransferProtocol)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SapTransferProtocol.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SapTransferProtocol
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SendSmsResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SendSmsResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SendSmsResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SetupDataCallResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SetupDataCallResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SetupDataCallResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SmsAcknowledgeFailCause)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SmsAcknowledgeFailCause.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SmsAcknowledgeFailCause
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SmsWriteArgs)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SmsWriteArgs.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SmsWriteArgs
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (SmsWriteArgsStatus)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/SmsWriteArgsStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.SmsWriteArgsStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (TdScdmaSignalStrength)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/TdScdmaSignalStrength.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.TdScdmaSignalStrength
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (UusDcs)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/UusDcs.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.UusDcs
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (UusInfo)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/UusInfo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.UusInfo
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (UusType)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/UusType.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.UusType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (VoiceRegStateResult)
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/VoiceRegStateResult.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::types.VoiceRegStateResult
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build IRadio.hal
 #
 GEN := $(intermediates)/android/hardware/radio/1.0/IRadio.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IRadio.hal
-$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IRadioCallback.hal
-$(GEN): $(LOCAL_PATH)/IRadioCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IRadioIndication.hal
+$(GEN): $(LOCAL_PATH)/IRadioIndication.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IRadioResponse.hal
+$(GEN): $(LOCAL_PATH)/IRadioResponse.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
 $(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
@@ -456,21 +1985,80 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build IRadioCallback.hal
+# Build IRadioIndication.hal
 #
-GEN := $(intermediates)/android/hardware/radio/1.0/IRadioCallback.java
+GEN := $(intermediates)/android/hardware/radio/1.0/IRadioIndication.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IRadioCallback.hal
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IRadioIndication.hal
 $(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
 $(GEN): $(LOCAL_PATH)/types.hal
 $(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.radio@1.0::IRadioCallback
+        android.hardware.radio@1.0::IRadioIndication
 
-$(GEN): $(LOCAL_PATH)/IRadioCallback.hal
+$(GEN): $(LOCAL_PATH)/IRadioIndication.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IRadioResponse.hal
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/IRadioResponse.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IRadioResponse.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::IRadioResponse
+
+$(GEN): $(LOCAL_PATH)/IRadioResponse.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build ISap.hal
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/ISap.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISap.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/ISapCallback.hal
+$(GEN): $(LOCAL_PATH)/ISapCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::ISap
+
+$(GEN): $(LOCAL_PATH)/ISap.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build ISapCallback.hal
+#
+GEN := $(intermediates)/android/hardware/radio/1.0/ISapCallback.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISapCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.radio@1.0::ISapCallback
+
+$(GEN): $(LOCAL_PATH)/ISapCallback.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/radio/1.0/IRadio.hal b/radio/1.0/IRadio.hal
index 7725e63..38c36e8 100644
--- a/radio/1.0/IRadio.hal
+++ b/radio/1.0/IRadio.hal
@@ -16,27 +16,901 @@
 
 package android.hardware.radio@1.0;
 
-import IRadioCallback;
+import IRadioResponse;
+import IRadioIndication;
 
+/*
+ * This interface is used by telephony & telecom to talk to cellular radio.
+ * All the functions have minimum two parameters:
+ * slotId: which corresponds to sim slot id.
+ * serial: which corresponds to serial no. of request. Serial numbers must only be memorized for the
+ * duration of a method call. If clients provide colliding serials (including passing the same
+ * serial to different methods), multiple responses (one for each method call) must still be served.
+ */
 interface IRadio {
-    /**
-     * Set callback that has response functions for requests
+    /*
+     * Set response functions for radio requests & radio indications.
      *
      * @param slotId SIM slot id for which the function is called; needed for multi-sim
-     * @param radioCallback Object containing response callbacks
+     * @param radioResponse Object containing response functions
+     * @param radioIndication Object containing radio indications
      */
-    setCallback(int32_t slotId, IRadioCallback radioCallback);
+    setResponseFunctions(int32_t slotId, IRadioResponse radioResponse,
+            IRadioIndication radioIndication);
 
-    /**
+    /*
      * Requests status of the ICC card
      *
-     * Response callback is IRadioCallback.responseGetSimStatus()
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
      *
-     * Valid errors:
-     * Must never fail for a valid slot id
+     * Response function is IRadioResponse.getIccCardStatusResponse()
+     *
+     */
+    oneway getIccCardStatus(int32_t slotId, int32_t serial);
+
+    /*
+     * Supplies ICC PIN. Only called if CardStatus has AppState.PIN state
      *
      * @param slotId SIM slot id for which the function is called; needed for multi-sim
-     * @param serial Serial number of request
+     * @param serial Serial number of request.
+     * @param pin PIN value
+     * @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
+     *
+     * Response function is IRadioResponse.supplyIccPinForAppResponse()
+     *
      */
-    oneway requestGetSimStatus(int32_t slotId, int32_t serial);
-};
+    oneway supplyIccPinForApp(int32_t slotId, int32_t serial, string pin, string aid);
+
+    /*
+     * Supplies ICC PUK and new PIN.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param puk PUK value
+     * @param pin New PIN value
+     * @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
+     *
+     * Response function is IRadioResponse.supplyIccPukForAppResponse()
+     *
+     */
+    oneway supplyIccPukForApp(int32_t slotId, int32_t serial, string puk, string pin, string aid);
+
+    /*
+     * Supplies ICC PIN2. Only called following operation where SIM_PIN2 was
+     * returned as a a failure from a previous operation.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param pin2 PIN2 value
+     * @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
+     *
+     * Response function is IRadioResponse.supplyIccPin2ForAppResponse()
+     *
+     */
+    oneway supplyIccPin2ForApp(int32_t slotId, int32_t serial, string pin2, string aid);
+
+    /*
+     * Supplies ICC PUK2 and new PIN2.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param puk2 PUK2 value
+     * @param pin2 New PIN2 value
+     * @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
+     *
+     * Response function is IRadioResponse.supplyIccPuk2ForAppResponse()
+     *
+     */
+    oneway supplyIccPuk2ForApp(int32_t slotId, int32_t serial, string puk2, string pin2,
+            string aid);
+
+    /*
+     * Supplies old ICC PIN and new PIN.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param oldPin Old pin value
+     * @param newPin New pin value
+     * @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
+     *
+     * Response function is IRadioResponse.changeIccPinForAppResponse()
+     *
+     */
+    oneway changeIccPinForApp(int32_t slotId, int32_t serial, string oldPin, string newPin,
+            string aid);
+
+    /*
+     * Supplies old ICC PIN2 and new PIN2.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param oldPin2 Old pin2 value
+     * @param newPin2 New pin2 value
+     * @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
+     *
+     * Response function is IRadioResponse.changeIccPin2ForAppResponse()
+     *
+     */
+    oneway changeIccPin2ForApp(int32_t slotId, int32_t serial, string oldPin2, string newPin2,
+            string aid);
+
+    /*
+     * Requests that network personalization be deactivated
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param netPin Network depersonlization code
+     *
+     * Response function is IRadioResponse.supplyNetworkDepersonalizationResponse()
+     *
+     */
+    oneway supplyNetworkDepersonalization(int32_t slotId, int32_t serial, string netPin);
+
+    /*
+     * Requests current call list
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getCurrentCallsResponse()
+     *
+     */
+    oneway getCurrentCalls(int32_t slotId, int32_t serial);
+
+    /*
+     * Initiate voice call.
+     * This method is never used for supplementary service codes
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param dialInfo Dial struct
+     *
+     * Response function is IRadioResponse.dialResponse()
+     *
+     */
+    oneway dial(int32_t slotId, int32_t serial, Dial dialInfo);
+
+    /*
+     * Get the SIM IMSI
+     * Only valid when radio state is "RADIO_STATE_ON"
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
+     *
+     * Response function is IRadioResponse.getImsiForAppResponse()
+     *
+     */
+    oneway getImsiForApp(int32_t slotId, int32_t serial, string aid);
+
+    /*
+     * Hang up a specific line (like AT+CHLD=1x)
+     * After this HANGUP request returns, Radio must show the connection is NOT
+     * active anymore in next requestGetCurrentCalls query.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param gsmIndex Connection index (value of 'x' in CHLD above)
+     *
+     * Response function is IRadioResponse.hangupResponse()
+     *
+     */
+    oneway hangup(int32_t slotId, int32_t serial, int32_t gsmIndex);
+
+    /*
+     * Hang up waiting or held (like AT+CHLD=0)
+     * After this HANGUP request returns, Radio must show the connection is NOT
+     * active anymore in next getCurrentCalls() query.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.hangupWaitingOrBackgroundResponse()
+     *
+     */
+    oneway hangupWaitingOrBackground(int32_t slotId, int32_t serial);
+
+    /*
+     * Hang up waiting or held (like AT+CHLD=1)
+     * After this HANGUP request returns, Radio must show the connection is NOT
+     * active anymore in next getCurrentCalls query.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.hangupForegroundResumeBackgroundResponse()
+     *
+     */
+    oneway hangupForegroundResumeBackground(int32_t slotId, int32_t serial);
+
+    /*
+     * Switch waiting or holding call and active call (like AT+CHLD=2)
+     * State transitions must be as follows:
+     *
+     * Call transitions must happen as shown below.
+     *
+     *   BEFORE                               AFTER
+     * Call 1   Call 2                 Call 1       Call 2
+     * ACTIVE   HOLDING                HOLDING     ACTIVE
+     * ACTIVE   WAITING                HOLDING     ACTIVE
+     * HOLDING  WAITING                HOLDING     ACTIVE
+     * ACTIVE   IDLE                   HOLDING     IDLE
+     * IDLE     IDLE                   IDLE        IDLE
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.switchWaitingOrHoldingAndActiveResponse()
+     *
+     */
+    oneway switchWaitingOrHoldingAndActive(int32_t slotId, int32_t serial);
+
+    /*
+     * Conference holding and active (like AT+CHLD=3)
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.conferenceResponse()
+     *
+     */
+    oneway conference(int32_t slotId, int32_t serial);
+
+    /*
+     * Send UDUB (user determined user busy) to ringing or
+     * waiting call answer)
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.rejectCallResponse()
+     *
+     */
+    oneway rejectCall(int32_t slotId, int32_t serial);
+
+    /*
+     * Requests the failure cause code for the most recently terminated call.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getLastCallFailCauseResponse()
+     *
+     */
+    oneway getLastCallFailCause(int32_t slotId, int32_t serial);
+
+    /*
+     * Requests current signal strength and associated information.
+     * Must succeed if radio is on.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getSignalStrengthResponse()
+     */
+    oneway getSignalStrength(int32_t slotId, int32_t serial);
+
+    /*
+     * Request current voice registration state
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getVoiceRegistrationStateResponse()
+     */
+    oneway getVoiceRegistrationState(int32_t slotId, int32_t serial);
+
+    /*
+     * Request current data registration state
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getDataRegistrationStateResponse()
+     */
+    oneway getDataRegistrationState(int32_t slotId, int32_t serial);
+
+    /*
+     * Request current operator ONS or EONS
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getOperatorResponse()
+     */
+    oneway getOperator(int32_t slotId, int32_t serial);
+
+    /*
+     * Toggle radio on and off (for "airplane" mode)
+     * If the radio is turned off/on the radio modem subsystem
+     * is expected return to an initialized state. For instance,
+     * any voice and data calls must be terminated and all associated
+     * lists emptied.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param on To turn on radio -> on = true, to turn off radio -> on = false.
+     *
+     * Response function is IRadioResponse.setRadioPowerResponse()
+     */
+    oneway setRadioPower(int32_t slotId, int32_t serial, bool on);
+
+    /*
+     * Send a DTMF tone
+     *
+     * If the implementation is currently playing a tone requested via
+     * startDtmf(), that tone must be cancelled and the new tone
+     * must be played instead
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param s string with single char having one of 12 values: 0-9, *, #
+     *
+     * Response function is IRadioResponse.sendDtmfResponse()
+     */
+    oneway sendDtmf(int32_t slotId, int32_t serial, string s);
+
+    /*
+     * Send an SMS message
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param smscPDU is SMSC address in GSM BCD format prefixed by a length byte
+     *        (as expected by TS 27.005) or empty string for default SMSC
+     * @param pdu is SMS in PDU format as an ASCII hex string less the SMSC address
+     *        TP-Layer-Length is be "strlen(pdu)/2"
+     *
+     * Response function is IRadioResponse.sendSmsResponse()
+     *
+     * Based on the return 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)
+     */
+    oneway sendSms(int32_t slotId, int32_t serial, string smscPDU, string pdu);
+
+    /*
+     * 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)
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param smscPDU is SMSC address in GSM BCD format prefixed by a length byte
+     *        (as expected by TS 27.005) or empty string for default SMSC
+     * @param pdu is SMS in PDU format as an ASCII hex string less the SMSC address
+     *        TP-Layer-Length is be "strlen(pdu)/2"
+     *
+     * Response function is IRadioResponse.sendSMSExpectMoreResponse()
+     *
+     * Based on the return 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)
+     */
+    oneway sendSMSExpectMore(int32_t slotId, int32_t serial, string smscPDU, string pdu);
+
+    /*
+     * Setup a packet data connection. If DataCallResponse.status
+     * return DataCallFailCause:NONE it is added to the list of data calls and a
+     * unsolDataCallListChanged() is sent. The call remains in the
+     * list until deactivateDataCall() is issued or the
+     * radio is powered off/on. This list is returned by getDataCallList()
+     * and dataCallListChanged().
+     *
+     * The RIL is expected to:
+     *  - Create one data call context.
+     *  - Create and configure a dedicated interface for the context
+     *  - The interface must be point to point.
+     *  - The interface is configured with one or more addresses and
+     *    is capable of sending and receiving packets. The prefix length
+     *    of the addresses must be /32 for IPv4 and /128 for IPv6.
+     *  - Must NOT change the linux routing table.
+     *  - Support up to getDataRegistrationState response[5]
+     *    number of simultaneous data call contexts.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param radioTechnology Radio technology to use: 0-CDMA, 1-GSM/UMTS, 2...
+     *        for values above 2 this is RadioTechnology + 2.
+     * @param profile is a RadioDataProfile (support is optional)
+     * @param apn is the APN to connect to if radio technology is GSM/UMTS. This APN must
+     *        override the one in the profile. empty string indicates no APN overrride.
+     * @param user is the username for APN, or empty string
+     * @param password is the password for APN, or empty string
+     * @param authType is the PAP / CHAP auth type. Values:
+     *        0 => PAP and CHAP is never performed.
+     *        1 => PAP may be performed; CHAP is never performed.
+     *        2 => CHAP may be performed; PAP is never performed.
+     *        3 => PAP / CHAP may be performed - baseband dependent.
+     * @param protocol is the connection type to request must be one of the
+     *        PDP_type values in TS 27.007 section 10.1.1.
+     *        For example, "IP", "IPV6", "IPV4V6", or "PPP".
+     *
+     * Response function is IRadioResponse.setupDataCallResponse()
+     */
+    oneway setupDataCall(int32_t slotId, int32_t serial, int32_t radioTechnology,
+            int32_t profile, string apn, string user, string password, int32_t authType,
+            string protocol);
+
+    /*
+     * Request ICC I/O operation.
+     * This is similar to the TS 27.007 "restricted SIM" operation
+     * where it assumes all of the EF selection must be done by the
+     * callee
+     *
+     * Arguments and responses that are unused for certain
+     * values of "command" must be ignored or set to empty string
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param iccIo IccIo
+     *
+     * Please note that IccIo has a "PIN2" field which may be empty string,
+     * or may specify a PIN2 for operations that require a PIN2 (eg
+     * updating FDN records)
+     *
+     * Response function is IRadioResponse.iccIOForAppResponse()
+     */
+    oneway iccIOForApp(int32_t slotId, int32_t serial, IccIo iccIo);
+
+    /*
+     * Send a USSD message.
+     *
+     * If a USSD session already exists, the message must be sent in the
+     * context of that session. Otherwise, a new session must be created.
+     *
+     * The network reply must be reported via unsolOnUssd
+     *
+     * Only one USSD session must exist at a time, and the session is assumed
+     * to exist until:
+     * a) The android system invokes cancelUssd()
+     * b) The implementation sends a unsolOnUssd() with a type code
+     * of "0" (USSD-Notify/no further action) or "2" (session terminated)
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param ussd string containing the USSD request in UTF-8 format
+     *
+     * Response function is IRadioResponse.sendUssdResponse()
+     *
+     * See also requestCancelUssd, unsolOnUssd
+     */
+    oneway sendUssd(int32_t slotId, int32_t serial, string ussd);
+
+    /*
+     * Cancel the current USSD session if one exists.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.cancelPendingUssdResponse()
+     */
+    oneway cancelPendingUssd(int32_t slotId, int32_t serial);
+
+    /*
+     * Gets current CLIR status
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getClirResponse()
+     */
+    oneway getClir(int32_t slotId, int32_t serial);
+
+    /*
+     * Set current CLIR status
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param status "n" parameter from TS 27.007 7.7
+     *
+     * Response function is IRadioResponse.setClirResponse()
+     */
+    oneway setClir(int32_t slotId, int32_t serial, int32_t status);
+
+    /*
+     * Request call forward status.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param callInfo CallForwardInfo
+     *
+     * Response function is IRadioResponse.getCallForwardStatusResponse()
+     */
+    oneway getCallForwardStatus(int32_t slotId, int32_t serial,
+            CallForwardInfo callInfo);
+
+    /*
+     * Configure call forward rule
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param callInfo CallForwardInfo
+     *
+     * Response function is IRadioResponse.setCallForwardResponse()
+     */
+    oneway setCallForward(int32_t slotId, int32_t serial, CallForwardInfo callInfo);
+
+    /*
+     * Query current call waiting state
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param serviceClass Service class is the TS 27.007 service class to query
+     *
+     * Response function is IRadioResponse.getCallWaitingResponse()
+     */
+    oneway getCallWaiting(int32_t slotId, int32_t serial, int32_t serviceClass);
+
+    /*
+     * Configure current call waiting state
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param enable is false for "disabled" and true for "enabled"
+     * @param serviceClass is the TS 27.007 service class bit vector of services to modify
+     *
+     * Response function is IRadioResponse.setCallWaitingResponse()
+     */
+    oneway setCallWaiting(int32_t slotId, int32_t serial, bool enable,
+            int32_t serviceClass);
+
+    /*
+     * Acknowledge successful or failed receipt of SMS previously indicated
+     * via unsolResponseNewSms
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param success is true on successful receipt
+     *        (basically, AT+CNMA=1 from TS 27.005 is 0 on failed receipt
+     *        (basically, AT+CNMA=2 from TS 27.005)
+     * @param cause: if success is false, this contains the failure cause as defined
+     *        in TS 23.040, 9.2.3.22.
+     *
+     * Response function is IRadioResponse.acknowledgeLastIncomingGsmSmsResponse()
+     */
+    oneway acknowledgeLastIncomingGsmSms(int32_t slotId, int32_t serial, bool success,
+            SmsAcknowledgeFailCause cause);
+
+    /*
+     * Answer incoming call
+     * Must not be called for WAITING calls.
+     * switchWaitingOrHoldingAndActive() must be used in this case
+     * instead
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.acceptCallResponse()
+     */
+    oneway acceptCall(int32_t slotId, int32_t serial);
+
+    /*
+     * Deactivate packet data connection and remove from the
+     * data call list if RadioError:NONE is returned. Any other return
+     * values must also try to remove the call from the list. An
+     * unsolDataCallListChanged must be
+     * issued because of an deactivateDataCall.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param cid Indicates CID
+     * @param reasonRadioShutDown Indicates Disconnect Reason
+     *        false => No specific reason specified
+     *        true => Radio shutdown requested
+     *
+     * Response function is IRadioResponse.deactivateDataCallResponse()
+     */
+    oneway deactivateDataCall(int32_t slotId, int32_t serial, int32_t cid,
+            bool reasonRadioShutDown);
+
+    /*
+     * Query the status of a facility lock state
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param facility is the facility string code from TS 27.007 7.4
+     *        (eg "AO" for BAOC, "SC" for SIM lock)
+     * @param password is the password, or "" if not required
+     * @param serviceClass is the TS 27.007 service class bit vector of services to query
+     * @param appId is AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
+     *        This is only applicable in the case of Fixed Dialing Numbers (FDN) requests.
+     *
+     * Response function is IRadioResponse.getFacilityLockForAppResponse()
+     */
+    oneway getFacilityLockForApp(int32_t slotId, int32_t serial, string facility,
+            string password, int32_t serviceClass, string appId);
+
+    /*
+     * Enable/disable one facility lock
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param facility is the facility string code from TS 27.007 7.4 (eg "AO" for BAOC)
+     * @param lockState false for "unlock" and true for "lock"
+     * @param password is the password
+     * @param serviceClass is string representation of decimal TS 27.007
+     *        service class bit vector. Eg, the string
+     *        "1" means "set this facility for voice services"
+     * @param appId is AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
+     *        This is only applicable in the case of Fixed Dialing Numbers (FDN) requests.
+     *
+     * Response function is IRadioResponse.setFacilityLockForAppResponse()
+     */
+    oneway setFacilityLockForApp(int32_t slotId, int32_t serial, string facility, bool lockState,
+            string password, int32_t serviceClass, string appId);
+
+    /*
+     * Change call barring facility password
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param facility facility string code from TS 27.007 7.4 (eg "AO" for BAOC)
+     * @param oldPassword old password
+     * @param newPassword new password
+     *
+     * Response function is IRadioResponse.setBarringPasswordResponse()
+     */
+    oneway setBarringPassword(int32_t slotId, int32_t serial, string facility,
+            string oldPassword, string newPassword);
+
+    /*
+     * Query current network selection mode
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getNetworkSelectionModeResponse()
+     */
+    oneway getNetworkSelectionMode(int32_t slotId, int32_t serial);
+
+    /*
+     * Specify that the network must be selected automatically.
+     * This request must not respond until the new operator is selected and registered.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.setNetworkSelectionModeAutomaticResponse()
+     */
+    oneway setNetworkSelectionModeAutomatic(int32_t slotId, int32_t serial);
+
+    /*
+     * Manually select a specified network.
+     * This request must not respond until the new operator is selected and registered.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param operatorNumeric string specifying MCCMNC of network to select (eg "310170")
+     *
+     * Response function is IRadioResponse.setNetworkSelectionModeManualResponse()
+     */
+    oneway setNetworkSelectionModeManual(int32_t slotId, int32_t serial, string operatorNumeric);
+
+    /*
+     * Scans for available networks
+     * This request must not respond until the new operator is selected and registered.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getAvailableNetworksResponse()
+     */
+    oneway getAvailableNetworks(int32_t slotId, int32_t serial);
+
+    /*
+     * Start playing a DTMF tone. Continue playing DTMF tone until
+     * stopDtmf is received.
+     * If a startDtmf() is received while a tone is currently playing,
+     * it must cancel the previous tone and play the new one.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param s string having a single character with one of 12 values: 0-9,*,#
+     *
+     * Response function is IRadioResponse.startDtmfResponse()
+     */
+    oneway startDtmf(int32_t slotId, int32_t serial, string s);
+
+    /*
+     * Stop playing a currently playing DTMF tone.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.stopDtmfResponse()
+     */
+    oneway stopDtmf(int32_t slotId, int32_t serial);
+
+    /*
+     * Return string value indicating baseband version, eg response from AT+CGMR
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getBasebandVersionResponse()
+     */
+    oneway getBasebandVersion(int32_t slotId, int32_t serial);
+
+    /*
+     * Separate a party from a multiparty call placing the multiparty call
+     * (less the specified party) on hold and leaving the specified party
+     * as the only other member of the current (active) call
+     *
+     * Like AT+CHLD=2x
+     *
+     * See TS 22.084 1.3.8.2 (iii)
+     * TS 22.030 6.5.5 "Entering "2X followed by send"
+     * TS 27.007 "AT+CHLD=2x"
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param gsmIndex contains Connection index (value of 'x' in CHLD above)
+     *
+     * Response function is IRadioResponse.separateConnectionResponse()
+     */
+    oneway separateConnection(int32_t slotId, int32_t serial, int32_t gsmIndex);
+
+    /*
+     * Turn on or off uplink (microphone) mute.
+     * Must only be sent while voice call is active.
+     * Must always be reset to "disable mute" when a new voice call is initiated
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param enable true for "enable mute" and false for "disable mute"
+     *
+     * Response function is IRadioResponse.setMuteResponse()
+     */
+    oneway setMute(int32_t slotId, int32_t serial, bool enable);
+
+    /*
+     * Queries the current state of the uplink mute setting
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getMuteResponse()
+     */
+    oneway getMute(int32_t slotId, int32_t serial);
+
+    /*
+     * Queries the status of the CLIP supplementary service
+     * (for MMI code "*#30#")
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getClipResponse()
+     */
+    oneway getClip(int32_t slotId, int32_t serial);
+
+    /*
+     * Returns the data call list. An entry is added when a
+     * setupDataCall() is issued and removed on a
+     * deactivateDataCall(). The list is emptied when
+     * setRadioPower() off/on is issued.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getDataCallListResponse()
+     */
+    oneway getDataCallList(int32_t slotId, int32_t serial);
+
+    /*
+     * This request is reserved for OEM-specific uses. It passes raw byte arrays back and forth.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param data data passed as raw bytes to oem
+     *
+     * Response function is IRadioResponse.sendOemRilRequestRawResponse()
+     */
+    oneway sendOemRilRequestRaw(int32_t slotId, int32_t serial, vec<uint8_t> data);
+
+    /*
+     * This request is reserved for OEM-specific uses. It passes strings back and forth.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param data data passed as strings to oem
+     *
+     * Response function is IRadioResponse.sendOemRilRequestStringsResponse()
+     */
+    oneway sendOemRilRequestStrings(int32_t slotId, int32_t serial, vec<string> data);
+
+    /*
+     * Indicates the current state of the screen. When the screen is off, the
+     * Radio must notify the baseband to suppress certain notifications (eg,
+     * signal strength and changes in LAC/CID or BID/SID/NID/latitude/longitude)
+     * in an effort to conserve power. These notifications must resume when the
+     * screen is on.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param enable true = screen on, false = screen off.
+     *
+     * Response function is IRadioResponse.sendScreenStateResponse()
+     */
+    oneway sendScreenState(int32_t slotId, int32_t serial, bool enable);
+
+    /*
+     * Enables/disables supplementary service related notifications from the network.
+     * Notifications are reported via unsolSuppSvcNotification().
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param enable true = notifications enabled, false = notifications disabled.
+     *
+     * Response function is IRadioResponse.setSuppServiceNotificationsResponse()
+     */
+    oneway setSuppServiceNotifications(int32_t slotId, int32_t serial, bool enable);
+
+    /*
+     * Stores a SMS message to SIM memory.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param smsWriteArgs SmsWriteArgs defined in types.hal
+     *
+     * Response function is IRadioResponse.writeSmsToSimResponse()
+     */
+    oneway writeSmsToSim(int32_t slotId, int32_t serial, SmsWriteArgs smsWriteArgs);
+
+    /*
+     * Deletes a SMS message from SIM memory.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param index Record index of the message to delete.
+     *
+     * Response function is IRadioResponse.deleteSmsOnSimResponse()
+     */
+    oneway deleteSmsOnSim(int32_t slotId, int32_t serial, int32_t index);
+
+    /*
+     * Assign a specified band for RF configuration.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param mode RadioBandMode defined in types.hal
+     *
+     * Response function is IRadioResponse.setBandModeResponse()
+     */
+    oneway setBandMode(int32_t slotId, int32_t serial, RadioBandMode mode);
+
+    /*
+     * Get the list of band modes supported by RF.
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     *
+     * Response function is IRadioResponse.getAvailableBandModesResponse()
+     */
+    oneway getAvailableBandModes(int32_t slotId, int32_t serial);
+
+    /*
+     * Requests to send a SAT/USAT envelope command to SIM.
+     * The SAT/USAT envelope command refers to 3GPP TS 11.14 and 3GPP TS 31.111
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param command SAT/USAT command in hexadecimal format string starting with command tag
+     *
+     * Response function is IRadioResponse.sendEnvelopeResponse()
+     */
+    oneway sendEnvelope(int32_t slotId, int32_t serial, string command);
+
+    /*
+     * Requests to send a terminal response to SIM for a received proactive command
+     *
+     * @param slotId SIM slot id for which the function is called; needed for multi-sim
+     * @param serial Serial number of request.
+     * @param commandResponse SAT/USAT response in hexadecimal format string starting with
+     *        first byte of response data
+     *
+     * Response function is IRadioResponse.sendTerminalResponseResponseToSim()
+     */
+    oneway sendTerminalResponseToSim(int32_t slotId, int32_t serial, string commandResponse);
+};
\ No newline at end of file
diff --git a/radio/1.0/IRadioCallback.hal b/radio/1.0/IRadioIndication.hal
similarity index 66%
rename from radio/1.0/IRadioCallback.hal
rename to radio/1.0/IRadioIndication.hal
index c27d168..8f28e3f 100644
--- a/radio/1.0/IRadioCallback.hal
+++ b/radio/1.0/IRadioIndication.hal
@@ -16,20 +16,14 @@
 
 package android.hardware.radio@1.0;
 
-interface IRadioCallback {
-    /**
-     * Response callback for IRadio.requestGetSimStatus()
-     *
-     * @param serial Serial number of request
-     * @param cardStatus ICC card status
-     */
-    responseGetSimStatus(int32_t serial, RadioCardStatus cardStatus);
-
-    // ONLY UNSOLICITED CALLBACKS BELOW
-    /**
+/*
+ * Interface declaring unsolicited radio indications.
+ */
+interface IRadioIndication {
+    /*
      * Called when radio state changes.
      *
      * @param radioState Current radio state
      */
-    oneway unsolRadioStateChanged(RadioState radioState);
-};
+    oneway radioStateChanged(RadioState radioState);
+};
\ No newline at end of file
diff --git a/radio/1.0/IRadioResponse.hal b/radio/1.0/IRadioResponse.hal
new file mode 100644
index 0000000..9efd028
--- /dev/null
+++ b/radio/1.0/IRadioResponse.hal
@@ -0,0 +1,1061 @@
+/*
+ * Copyright (C) 2016 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@1.0;
+
+/*
+ * Interface declaring response functions to solicited radio requests.
+ * Response functions defined in this interface are as per following convention:
+ * <xyz>Response is response to IRadio.<xyz>
+ */
+interface IRadioResponse {
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param cardStatus ICC card status as defined by CardStatus in types.hal
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     */
+    oneway iccCardStatusResponse(RadioResponseInfo info, CardStatus cardStatus);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param remainingRetries Number of retries remaining, must be equal to -1 if unknown.
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE
+     *   RadioError:PASSWORD_INCORRECT
+     */
+    oneway supplyIccPinForAppResponse(RadioResponseInfo info, int32_t remainingRetries);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param remainingRetries Number of retries remaining, must be equal to -1 if unknown.
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE
+     *   RadioError:PASSWORD_INCORRECT (PUK is invalid)
+     */
+    oneway supplyIccPukForAppResponse(RadioResponseInfo info, int32_t remainingRetries);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param remainingRetries Number of retries remaining, must be equal to -1 if unknown.
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE
+     *   RadioError:PASSWORD_INCORRECT
+     */
+    oneway supplyIccPin2ForAppResponse(RadioResponseInfo info, int32_t remainingRetries);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param remainingRetries Number of retries remaining, must be equal to -1 if unknown.
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE
+     *   RadioError:PASSWORD_INCORRECT (PUK is invalid)
+     */
+    oneway supplyIccPuk2ForAppResponse(RadioResponseInfo info, int32_t remainingRetries);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param remainingRetries Number of retries remaining, must be equal to -1 if unknown.
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE
+     *   RadioError:PASSWORD_INCORRECT
+     */
+    oneway changeIccPinForAppResponse(RadioResponseInfo info, int32_t remainingRetries);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param remainingRetries Number of retries remaining, must be equal to -1 if unknown.
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE
+     *   RadioError:PASSWORD_INCORRECT (old PIN2 is invalid)
+     */
+    oneway changeIccPin2ForAppResponse(RadioResponseInfo info, int32_t remainingRetries);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param remainingRetries Number of retries remaining, must be equal to -1 if unknown.
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE
+     *   RadioError:PASSWORD_INCORRECT (code is invalid)
+     */
+    oneway supplyNetworkDepersonalizationResponse(RadioResponseInfo info, int32_t remainingRetries);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param calls Current call list
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE (request will be made again in a few hundred msec)
+     *   RadioError:NO_MEMORY
+     */
+    oneway getCurrentCallsResponse(RadioResponseInfo info, vec<Call> calls);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE
+     *   RadioError:DIAL_MODIFIED_TO_USSD
+     *   RadioError:DIAL_MODIFIED_TO_SS
+     *   RadioError:DIAL_MODIFIED_TO_DIAL
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:INVALID_STATE
+     *   RadioError:NO_RESOURCES
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:MODEM_ERR
+     *   RadioError:NO_SUBSCRIPTION
+     *   RadioError:NO_NETWORK_FOUND
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:DEVICE_IN_USE
+     *   RadioError:MODE_NOT_SUPPORTED
+     *   RadioError:ABORTED
+     */
+    oneway dialResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param imsi String containing the IMSI
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getIMSIForAppResponse(RadioResponseInfo info, string imsi);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:INVALID_STATE
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway hangupConnectionResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:INVALID_STATE
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:NO_RESOURCES
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway hangupWaitingOrBackgroundResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:INVALID_STATE
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:NO_RESOURCES
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway hangupForegroundResumeBackgroundResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:INVALID_STATE
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_STATE
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway switchWaitingOrHoldingAndActiveResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_STATE
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway conferenceResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE (radio resetting)
+     *   RadioError:INVALID_STATE
+     *   RadioError:NO_RESOURCES
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway rejectCallResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param failCause failCause is LastCallFailCause. GSM failure reasons are
+     *        mapped to cause codes defined in TS 24.008 Annex H where possible. CDMA
+     *        failure reasons are derived from the possible call failure scenarios
+     *        described in the "CDMA IS-2000 Release A (C.S0005-A v6.0)" standard.
+     *
+     * The implementation must return LastCallFailCause:ERROR_UNSPECIFIED for blocked
+     * MO calls by restricted state (See unsolRestrictedStateChanged)
+     *
+     * If the implementation does not have access to the exact cause codes,
+     * then it must return one of the values listed in LastCallFailCause,
+     * as the UI layer needs to distinguish these cases for tone generation or
+     * error notification.
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:NO_MEMORY
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getLastCallFailCauseResponse(RadioResponseInfo info, LastCallFailCause failCause);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param sigStrength Current signal strength
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     */
+    oneway getSignalStrengthResponse(RadioResponseInfo info, SignalStrength sigStrength);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param voiceRegResponse Current Voice registration response as defined by VoiceRegStateResult
+     *        in types.hal
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getVoiceRegistrationStateResponse(RadioResponseInfo info,
+            VoiceRegStateResult voiceRegResponse);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param dataRegResponse Current Data registration response as defined by DataRegStateResult in
+     *        types.hal
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getDataRegistrationStateResponse(RadioResponseInfo info,
+            DataRegStateResult dataRegResponse);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param longName is long alpha ONS or EONS or empty string if unregistered
+     * @param shortName is short alpha ONS or EONS or empty string if unregistered
+     * @param numeric is 5 or 6 digit numeric code (MCC + MNC) or empty string if unregistered
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getOperatorResponse(RadioResponseInfo info, string longName, string shortName,
+            string numeric);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:GENERIC_FAILURE
+     *   RadioError:OPERATION_NOT_ALLOWED
+     */
+    oneway setRadioPowerResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_RESOURCES
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway sendDtmfResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param sms Response to sms sent as defined by SendSmsResult in types.hal
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SMS_SEND_FAIL_RETRY
+     *   RadioError:NETWORK_REJECT
+     *   RadioError:INVALID_STATE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:REQUEST_RATE_LIMITED
+     *   RadioError:INVALID_SMS_FORMAT
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:ENCODING_ERR
+     *   RadioError:INVALID_SMSC_ADDRESS
+     *   RadioError:MODEM_ERR
+     *   RadioError:NETWORK_ERR
+     *   RadioError:MODE_NOT_SUPPORTED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway sendSmsResponse(RadioResponseInfo info, SendSmsResult sms);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param sms Response to sms sent as defined by SendSmsResult in types.hal
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SMS_SEND_FAIL_RETRY
+     *   RadioError:NETWORK_REJECT
+     *   RadioError:INVALID_STATE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:REQUEST_RATE_LIMITED
+     *   RadioError:INVALID_SMS_FORMAT
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:ENCODING_ERR
+     *   RadioError:INVALID_SMSC_ADDRESS
+     *   RadioError:MODEM_ERR
+     *   RadioError:NETWORK_ERR
+     *   RadioError:MODE_NOT_SUPPORTED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway sendSMSExpectMoreResponse(RadioResponseInfo info, SendSmsResult sms);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param dcResponse SetupDataCallResult defined in types.hal
+     *
+     * Valid errors returned:
+     *   RadioError:NONE must be returned on both success and failure of setup with the
+     *              DataCallResponse.status containing the actual status
+     *              For all other errors the DataCallResponse is ignored.
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:OP_NOT_ALLOWED_BEFORE_REG_TO_NW
+     *   RadioError:OP_NOT_ALLOWED_DURING_VOICE_CALL
+     *   RadioError:REQUEST_NOT_SUPPORTED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway setupDataCallResponse(RadioResponseInfo info, SetupDataCallResult dcResponse);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param iccIo ICC io operation response  as defined by IccIoResult in types.hal
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SIM_PIN2
+     *   RadioError:SIM_PUK2
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway iccIOForApp(RadioResponseInfo info, IccIoResult iccIo);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:USSD_MODIFIED_TO_DIAL
+     *   RadioError:USSD_MODIFIED_TO_SS
+     *   RadioError:USSD_MODIFIED_TO_USSD
+     *   RadioError:SIM_BUSY
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:ABORTED
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:INVALID_STATE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway sendUssdResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SIM_BUSY
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:NO_MEMORY
+     *   RadioError:INVALID_STATE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway cancelPendingUssdResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param n is "n" parameter from TS 27.007 7.7
+     * @param m is "m" parameter from TS 27.007 7.7
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getClirResponse(RadioResponseInfo info, int32_t n, int32_t m);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway setClirResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param callForwardInfos points to a vector of CallForwardInfo, one for
+     *        each distinct registered phone number.
+     *
+     * For example, if data is forwarded to +18005551212 and voice is forwarded
+     * to +18005559999, then two separate CallForwardInfo's must be returned
+     *
+     * If, however, both data and voice are forwarded to +18005551212, then
+     * a single CallForwardInfo must be returned with the service class
+     * set to "data + voice = 3")
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getCallForwardStatusResponse(RadioResponseInfo info,
+            vec<CallForwardInfo> callForwardInfos);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_STATE
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway setCallForwardResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param enable If current call waiting state is disabled, enable = false else true
+     * @param serviceClass If enable, then callWaitingResp[1]
+     *        must follow, with the TS 27.007 service class bit vector of services
+     *        for which call waiting is enabled.
+     *        For example, if callWaitingResp[0] is 1 and
+     *        callWaitingResp[1] is 3, then call waiting is enabled for data
+     *        and voice and disabled for everything else.
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getCallWaitingResponse(RadioResponseInfo info, bool enable, int32_t serviceClass);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_STATE
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway setCallWaitingResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway acknowledgeLastIncomingGsmSmsResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_STATE
+     *   RadioError:NO_MEMORY
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway acceptCallResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway deactivateDataCallResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param response 0 is the TS 27.007 service class bit vector of
+     *        services for which the specified barring facility
+     *        is active. "0" means "disabled for all"
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getFacilityLockForAppResponse(RadioResponseInfo info, int32_t response);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param retry 0 is the number of retries remaining, or -1 if unknown
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_STATE
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway setFacilityLockForAppResponse(RadioResponseInfo info, int32_t retry);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway setBarringPasswordResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param selection false for automatic selection, true for manual selection
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getNetworkSelectionModeResponse(RadioResponseInfo info, bool manual);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:ILLEGAL_SIM_OR_ME
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:GENERIC_FAILURE
+     *
+     * Returns RadioError:ILLEGAL_SIM_OR_ME when the failure is permanent and
+     * no retries needed, such as illegal SIM or ME.
+     * Returns RadioError:GENERIC_FAILURE for all other causes that might be fixed by retries.
+     */
+    oneway setNetworkSelectionModeAutomaticResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:ILLEGAL_SIM_OR_ME
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:GENERIC_FAILURE
+     *
+     * Returns RadioError:ILLEGAL_SIM_OR_ME when the failure is permanent and
+     * no retries needed, such as illegal SIM or ME.
+     * Returns RadioError:GENERIC_FAILURE for all other causes that might be fixed by retries.
+     */
+    oneway setNetworkSelectionModeManualResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param networkInfos List of network operator information as OperatorInfos defined in
+     *         types.hal
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getAvailableNetworksResponse(RadioResponseInfo info,
+            vec<OperatorInfo> networkInfos);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_RESOURCES
+     *   RadioError:NO_MEMORY
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway startDtmfResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_RESOURCES
+     *   RadioError:NO_MEMORY
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway stopDtmfResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param version string containing version string for log reporting
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:EMPTY_RECORD
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getBasebandVersionResponse(RadioResponseInfo info, string version);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:INVALID_STATE
+     *   RadioError:NO_RESOURCES
+     *   RadioError:NO_MEMORY
+     *   RadioError:MODEM_ERR
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:INVALID_CALL_ID
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway separateConnectionResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:REQUEST_RATE_LIMITED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway setMuteResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param enable true for "mute enabled" & false for "mute disabled"
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:SS_MODIFIED_TO_DIAL
+     *   RadioError:SS_MODIFIED_TO_USSD
+     *   RadioError:SS_MODIFIED_TO_SS
+     *   RadioError:NO_MEMORY
+     *   RadioError:REQUEST_RATE_LIMITED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getMuteResponse(RadioResponseInfo info, bool enable);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param status indicates CLIP status
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:FDN_CHECK_FAILURE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getClipResponse(RadioResponseInfo info, ClipStatus status);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param dcResponse List of DataCallResult as defined in types.hal
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getDataCallListResponse(RadioResponseInfo info, vec<SetupDataCallResult> dcResponse);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param data data returned by oem
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:OEM_ERROR_X
+     */
+    oneway sendOemRilRequestRawResponse(RadioResponseInfo info, vec<uint8_t> data);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param data data returned by oem
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:OEM_ERROR_X
+     */
+    oneway sendOemRilRequestStringsResponse(RadioResponseInfo info, vec<string> data);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway sendScreenStateResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:SIM_BUSY
+     *   RadioError:NO_MEMORY
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:MODEM_ERR
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway setSuppServiceNotificationsResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param index record index where the message is stored
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:SIM_FULL
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:INVALID_SMS_FORMAT
+     *   RadioError:INTERNAL_ERR
+     *   RadioError:MODEM_ERR
+     *   RadioError:ENCODING_ERR
+     *   RadioError:NO_MEMORY
+     *   RadioError:NO_RESOURCES
+     *   RadioError:INVALID_MODEM_STATE
+     *   RadioError:MODE_NOT_SUPPORTED
+     *   RadioError:INVALID_SMSC_ADDRESS
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway writeSmsToSimResponse(RadioResponseInfo info, int32_t index);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:SIM_FULL
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:NO_MEMORY
+     *   RadioError:REQUEST_RATE_LIMITED
+     *   RadioError:SYSTEM_ERR
+     *   RadioError:MODEM_ERR
+     *   RadioError:NO_SUCH_ENTRY
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway deleteSmsOnSimResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway setBandModeResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param bandModes List of RadioBandMode listing supported modes
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway getAvailableBandModesResponse(RadioResponseInfo info, vec<RadioBandMode> bandModes);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     * @param commandResponse SAT/USAT response in hexadecimal format
+     *        string starting with first byte of response
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:SIM_BUSY
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway sendEnvelopeResponse(RadioResponseInfo info, string commandResponse);
+
+    /*
+     * @param info Response info struct containing response type, serial no. & error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:OPERATION_NOT_ALLOWED
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway sendTerminalResponseToSimResponse(RadioResponseInfo info);
+};
diff --git a/radio/1.0/ISap.hal b/radio/1.0/ISap.hal
new file mode 100644
index 0000000..0351130
--- /dev/null
+++ b/radio/1.0/ISap.hal
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2016 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@1.0;
+
+import ISapCallback;
+
+interface ISap {
+    /**
+     * Set callback that has response and unsolicited indication functions
+     *
+     * @param sapCallback Object containing response and unosolicited indication callbacks
+     */
+    setCallback(ISapCallback sapCallback);
+
+    /**
+     * CONNECT_REQ from SAP 1.1 spec 5.1.1
+     *
+     * @param token Id to match req-resp. Resp must include same token.
+     * @param maxMsgSize MaxMsgSize to be used for SIM Access Profile connection
+     */
+    oneway connectReq(int32_t token, int32_t maxMsgSize);
+
+    /**
+     * DISCONNECT_REQ from SAP 1.1 spec 5.1.3
+     *
+     * @param token Id to match req-resp. Resp must include same token.
+     */
+    oneway disconnectReq(int32_t token);
+
+    /**
+     * TRANSFER_APDU_REQ from SAP 1.1 spec 5.1.6
+     *
+     * @param token Id to match req-resp. Resp must include same token.
+     * @param type APDU command type
+     * @param command CommandAPDU/CommandAPDU7816 parameter depending on type
+     */
+    oneway apduReq(int32_t token, SapApduType type, vec<uint8_t> command);
+
+    /**
+     * TRANSFER_ATR_REQ from SAP 1.1 spec 5.1.8
+     *
+     * @param token Id to match req-resp. Resp must include same token.
+     */
+    oneway transferAtrReq(int32_t token);
+
+    /**
+     * POWER_SIM_OFF_REQ and POWER_SIM_ON_REQ from SAP 1.1 spec 5.1.10 + 5.1.12
+     *
+     * @param token Id to match req-resp. Resp must include same token.
+     * @param state true for on, false for off
+     */
+    oneway powerReq(int32_t token, bool 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 resetSimReq(int32_t 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 transferCardReaderStatusReq(int32_t token);
+
+    /**
+     * SET_TRANSPORT_PROTOCOL_REQ from SAP 1.1 spec 5.1.20
+     *
+     * @param token Id to match req-resp. Resp must include same token.
+     * @param transferProtocol Transport Protocol
+     */
+    oneway setTransferProtocolReq(int32_t token, SapTransferProtocol transferProtocol);
+};
\ No newline at end of file
diff --git a/radio/1.0/ISapCallback.hal b/radio/1.0/ISapCallback.hal
new file mode 100644
index 0000000..5129648
--- /dev/null
+++ b/radio/1.0/ISapCallback.hal
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2016 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@1.0;
+
+interface ISapCallback {
+    /**
+     * CONNECT_RESP from SAP 1.1 spec 5.1.2
+     *
+     * @param token Id to match req-resp. Value must match the one in req.
+     * @param sapConnectRsp Connection Status
+     * @param maxMsgSize MaxMsgSize supported by server if request cannot be fulfilled.
+     *        Valid only if connectResponse is SapConnectResponse:MSG_SIZE_TOO_LARGE.
+     */
+    oneway connectResponse(int32_t token, SapConnectRsp sapConnectRsp, int32_t maxMsgSize);
+
+    /**
+     * 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 disconnectResponse(int32_t token);
+
+    /**
+     * DISCONNECT_IND from SAP 1.1 spec 5.1.5
+     *
+     * @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 disconnectIndication(int32_t token, SapDisconnectType disconnectType);
+
+    /**
+     * TRANSFER_APDU_RESP from SAP 1.1 spec 5.1.7
+     *
+     * @param token Id to match req-resp. Value must match the one in req.
+     * @param type APDU command type
+     * @param resultCode ResultCode to indicate if command was processed correctly
+     *        Possible values:
+     *        SapResultCode:SUCCESS,
+     *        SapResultCode:GENERIC_FAILURE,
+     *        SapResultCode:CARD_NOT_ACCESSSIBLE,
+     *        SapResultCode:CARD_ALREADY_POWERED_OFF,
+     *        SapResultCode:CARD_REMOVED
+     * @param apduRsp APDU Response. Valid only if command was processed correctly and no error
+     *        occurred.
+     */
+    oneway apduResponse(int32_t token,
+                        SapApduType type,
+                        SapResultCode resultCode,
+                        vec<uint8_t> apduRsp);
+
+    /**
+     * TRANSFER_ATR_RESP from SAP 1.1 spec 5.1.9
+     *
+     * @param token Id to match req-resp. Value must match the one in req.
+     * @param resultCode ResultCode to indicate if command was processed correctly
+     *        Possible values:
+     *        SapResultCode:SUCCESS,
+     *        SapResultCode:GENERIC_FAILURE,
+     *        SapResultCode:CARD_ALREADY_POWERED_OFF,
+     *        SapResultCode:CARD_REMOVED,
+     *        SapResultCode:DATA_NOT_AVAILABLE
+     * @param atr Answer to Reset from the subscription module. Included only if no error occurred,
+     *        otherwise empty.
+     */
+    oneway transferAtrResponse(int32_t token, SapResultCode resultCode, vec<uint8_t> atr);
+
+    /**
+     * POWER_SIM_OFF_RESP and POWER_SIM_ON_RESP from SAP 1.1 spec 5.1.11 + 5.1.13
+     *
+     * @param token Id to match req-resp. Value must match the one in req.
+     * @param resultCode ResultCode to indicate if command was processed correctly
+     *        Possible values:
+     *        SapResultCode:SUCCESS,
+     *        SapResultCode:GENERIC_FAILURE,
+     *        SapResultCode:CARD_NOT_ACCESSSIBLE, (possible only for power on req)
+     *        SapResultCode:CARD_ALREADY_POWERED_OFF, (possible only for power off req)
+     *        SapResultCode:CARD_REMOVED,
+     *        SapResultCode:CARD_ALREADY_POWERED_ON (possible only for power on req)
+     */
+    oneway powerResponse(int32_t token, SapResultCode resultCode);
+
+    /**
+     * RESET_SIM_RESP from SAP 1.1 spec 5.1.15
+     *
+     * @param token Id to match req-resp. Value must match the one in req.
+     * @param resultCode ResultCode to indicate if command was processed correctly
+     *        Possible values:
+     *        SapResultCode:SUCCESS,
+     *        SapResultCode:GENERIC_FAILURE,
+     *        SapResultCode:CARD_NOT_ACCESSSIBLE,
+     *        SapResultCode:CARD_ALREADY_POWERED_OFF,
+     *        SapResultCode:CARD_REMOVED
+     */
+    oneway resetSimResponse(int32_t token, SapResultCode resultCode);
+
+    /**
+     * STATUS_IND from SAP 1.1 spec 5.1.16
+     *
+     * @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 statusIndication(int32_t token, SapStatus status);
+
+    /**
+     * TRANSFER_CARD_READER_STATUS_REQ from SAP 1.1 spec 5.1.18
+     *
+     * @param token Id to match req-resp. Value must match the one in req.
+     * @param resultCode ResultCode to indicate if command was processed correctly
+     *        Possible values:
+     *        SapResultCode:SUCCESS,
+     *        SapResultCode:GENERIC_FAILURE
+     *        SapResultCode:CARD_ALREADY_POWERED_ON
+     * @param cardReaderStatus Card Reader Status coded as described in 3GPP TS 11.14 Section 12.33
+     *        and TS 31.111 Section 8.33
+     */
+    oneway transferCardReaderStatusResponse(int32_t token,
+                                            SapResultCode resultCode,
+                                            int32_t cardReaderStatus);
+
+    /**
+     * 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 errorResponse(int32_t token);
+
+    /**
+     * SET_TRANSPORT_PROTOCOL_RESP from SAP 1.1 spec 5.1.21
+     *
+     * @param token Id to match req-resp. Value must match the one in req.
+     * @param resultCode ResultCode to indicate if command was processed correctly
+     *        Possible values:
+     *        SapResultCode:SUCCESS
+     *        SapResultCode:NOT_SUPPORTED
+     */
+    oneway transferProtocolResponse(int32_t token, SapResultCode resultCode);
+};
\ No newline at end of file
diff --git a/radio/1.0/types.hal b/radio/1.0/types.hal
index e5bbe15..1ecc5a9 100644
--- a/radio/1.0/types.hal
+++ b/radio/1.0/types.hal
@@ -54,7 +54,111 @@
     IP_ADDRESS_SIZE = 4,
 };
 
-enum RadioRestrictedState : int32_t {
+enum RadioError : int32_t {
+    NONE = 0,                             // Success
+    RADIO_NOT_AVAILABLE = 1,              // If radio did not start or is resetting
+    GENERIC_FAILURE = 2,
+    PASSWORD_INCORRECT = 3,               // for PIN/PIN2 methods only
+    SIM_PIN2 = 4,                         // Operation requires SIM PIN2 to be entered
+    SIM_PUK2 = 5,                         // Operation requires SIM PIN2 to be entered
+    REQUEST_NOT_SUPPORTED = 6,
+    CANCELLED = 7,
+    OP_NOT_ALLOWED_DURING_VOICE_CALL = 8, // data ops are not allowed during voice
+                                          // call on a Class C GPRS device
+    OP_NOT_ALLOWED_BEFORE_REG_TO_NW = 9,  // data ops are not allowed before device
+                                          // registers in network
+    SMS_SEND_FAIL_RETRY = 10,             // fail to send sms and need retry
+    SIM_ABSENT = 11,                      // fail to set the location where CDMA subscription
+                                          // shall be retrieved because of SIM or RUIM
+                                          // card absent
+    SUBSCRIPTION_NOT_AVAILABLE = 12,      // fail to find CDMA subscription from specified
+                                          // location
+    MODE_NOT_SUPPORTED = 13,              // HW does not support preferred network type
+    FDN_CHECK_FAILURE = 14,               // command failed because recipient is not on FDN list
+    ILLEGAL_SIM_OR_ME = 15,               // network selection failed due to illegal SIM or ME
+    MISSING_RESOURCE = 16,                // no logical channel available
+    NO_SUCH_ELEMENT = 17,                 // application not found on SIM
+    DIAL_MODIFIED_TO_USSD = 18,           // DIAL request modified to USSD
+    DIAL_MODIFIED_TO_SS = 19,             // DIAL request modified to SS
+    DIAL_MODIFIED_TO_DIAL = 20,           // DIAL request modified to DIAL with different data
+    USSD_MODIFIED_TO_DIAL = 21,           // USSD request modified to DIAL
+    USSD_MODIFIED_TO_SS = 22,             // USSD request modified to SS
+    USSD_MODIFIED_TO_USSD = 23,           // USSD request modified to different USSD request
+    SS_MODIFIED_TO_DIAL = 24,             // SS request modified to DIAL
+    SS_MODIFIED_TO_USSD = 25,             // SS request modified to USSD
+    SUBSCRIPTION_NOT_SUPPORTED = 26,      // Subscription not supported by RIL
+    SS_MODIFIED_TO_SS = 27,               // SS request modified to different SS request
+    LCE_NOT_SUPPORTED = 36,               // LCE service not supported(36 in RILConstants.java)
+    NO_MEMORY = 37,                       // Not sufficient memory to process the request
+    INTERNAL_ERR = 38,                    // Hit unexpected vendor internal error scenario
+    SYSTEM_ERR = 39,                      // Hit platform or system error
+    MODEM_ERR = 40,                       // Hit unexpected modem error
+    INVALID_STATE = 41,                   // Unexpected request for the current state
+    NO_RESOURCES = 42,                    // Not sufficient resource to process the request
+    SIM_ERR = 43,                         // Received error from SIM card
+    INVALID_ARGUMENTS = 44,               // Received invalid arguments in request
+    INVALID_SIM_STATE = 45,               // Cannot process the request in current SIM state
+    INVALID_MODEM_STATE = 46,             // Cannot process the request in current Modem state
+    INVALID_CALL_ID = 47,                 // Received invalid call id in request
+    NO_SMS_TO_ACK = 48,                   // ACK received when there is no SMS to ack
+    NETWORK_ERR = 49,                     // Received error from network
+    REQUEST_RATE_LIMITED = 50,            // Operation denied due to overly-frequent requests
+    SIM_BUSY = 51,                        // SIM is busy
+    SIM_FULL = 52,                        // The target EF is full
+    NETWORK_REJECT = 53,                  // Request is rejected by network
+    OPERATION_NOT_ALLOWED = 54,           // Not allowed the request now
+    EMPTY_RECORD = 55,                    // The request record is empty
+    INVALID_SMS_FORMAT = 56,              // Invalid sms format
+    ENCODING_ERR = 57,                    // Message not encoded properly
+    INVALID_SMSC_ADDRESS = 58,            // SMSC address specified is invalid
+    NO_SUCH_ENTRY = 59,                   // No such entry present to perform the request
+    NETWORK_NOT_READY = 60,               // Network is not ready to perform the request
+    NOT_PROVISIONED = 61,                 // Device doesnot have this value provisioned
+    NO_SUBSCRIPTION = 62,                 // Device doesnot have subscription
+    NO_NETWORK_FOUND = 63,                // Network cannot be found
+    DEVICE_IN_USE = 64,                   // Operation cannot be performed because the device
+                                          // is currently in use
+    RIL_E_ABORTED = 65,                   // Operation aborted
+
+    // TODO(May be moved to vendor HAL extension)
+    // OEM specific error codes. To be used by OEM when they don't want to reveal
+    // specific error codes which would be replaced by Generic failure.
+    OEM_ERROR_1 = 501,
+    OEM_ERROR_2 = 502,
+    OEM_ERROR_3 = 503,
+    OEM_ERROR_4 = 504,
+    OEM_ERROR_5 = 505,
+    OEM_ERROR_6 = 506,
+    OEM_ERROR_7 = 507,
+    OEM_ERROR_8 = 508,
+    OEM_ERROR_9 = 509,
+    OEM_ERROR_10 = 510,
+    OEM_ERROR_11 = 511,
+    OEM_ERROR_12 = 512,
+    OEM_ERROR_13 = 513,
+    OEM_ERROR_14 = 514,
+    OEM_ERROR_15 = 515,
+    OEM_ERROR_16 = 516,
+    OEM_ERROR_17 = 517,
+    OEM_ERROR_18 = 518,
+    OEM_ERROR_19 = 519,
+    OEM_ERROR_20 = 520,
+    OEM_ERROR_21 = 521,
+    OEM_ERROR_22 = 522,
+    OEM_ERROR_23 = 523,
+    OEM_ERROR_24 = 524,
+    OEM_ERROR_25 = 525,
+};
+
+enum RadioResponseType : int32_t {
+    RESPONSE_SOLICITED,
+    RESPONSE_UNSOLICITED,
+    RESPONSE_SOLICITED_ACK,
+    RESPONSE_SOLICITED_ACK_EXP,
+    RESPONSE_UNSOLICITED_ACK_EXP,
+};
+
+enum RestrictedState : int32_t {
     NONE = 0x00,
     CS_EMERGENCY = 0x01,
     CS_NORMAL = 0x02,
@@ -62,130 +166,814 @@
     PS_ALL = 0x10,
 };
 
-enum RadioCardState : int32_t {
-    ABSENT = 0,
-    PRESENT = 1,
-    ERROR = 2,
-    /* card is present but not usable due to carrier restrictions.*/
-    RESTRICTED = 3,
+enum CardState : int32_t {
+    ABSENT,
+    PRESENT,
+    ERROR,
+    RESTRICTED,                           // card is present but not usable due to carrier
+                                          // restrictions
 };
 
-enum RadioPinState : int32_t {
-    UNKNOWN = 0,
-    ENABLED_NOT_VERIFIED = 1,
-    ENABLED_VERIFIED = 2,
-    DISABLED = 3,
-    ENABLED_BLOCKED = 4,
-    ENABLED_PERM_BLOCKED = 5,
+enum PinState : int32_t {
+    UNKNOWN,
+    ENABLED_NOT_VERIFIED,
+    ENABLED_VERIFIED,
+    DISABLED,
+    ENABLED_BLOCKED,
+    ENABLED_PERM_BLOCKED,
 };
 
-enum RadioAppType : int32_t {
-    UNKNOWN = 0,
-    SIM = 1,
-    USIM = 2,
-    RUIM = 3,
-    CSIM = 4,
-    ISIM = 5,
+enum AppType : int32_t {
+    UNKNOWN,
+    SIM,
+    USIM,
+    RUIM,
+    CSIM,
+    ISIM,
 };
 
-enum RadioAppState : int32_t {
-    UNKNOWN = 0,
-    DETECTED = 1,
-    PIN = 2,
-    /* If PIN1 or UPin is required */
-    PUK = 3,
-    /* If PUK1 or Puk for UPin is required */
-    SUBSCRIPTION_PERSO = 4,
-    /* perso_substate should be look at when app_state is assigned to this value */
-    READY = 5,
+enum AppState : int32_t {
+    UNKNOWN,
+    DETECTED,
+    PIN,                                  // If PIN1 or UPin is required
+    PUK,                                  // If PUK1 or Puk for UPin is required
+    SUBSCRIPTION_PERSO,                   // perso_substate must be look at when app_state is
+                                          // assigned to this value
+    READY,
 };
 
-enum RadioPersoSubstate : int32_t {
-    UNKNOWN = 0,
-    /* initial state */
-    IN_PROGRESS = 1,
-    /* in between each lock transition */
-    READY = 2,
-    /* when either SIM or RUIM Perso is finished since each app can only have 1 active perso
-    involved */
-    SIM_NETWORK = 3,
-    SIM_NETWORK_SUBSET = 4,
-    SIM_CORPORATE = 5,
-    SIM_SERVICE_PROVIDER = 6,
-    SIM_SIM = 7,
-    SIM_NETWORK_PUK = 8,
-    /* The corresponding perso lock is blocked */
-    SIM_NETWORK_SUBSET_PUK = 9,
-    SIM_CORPORATE_PUK = 10,
-    SIM_SERVICE_PROVIDER_PUK = 11,
-    SIM_SIM_PUK = 12,
-    RUIM_NETWORK1 = 13,
-    RUIM_NETWORK2 = 14,
-    RUIM_HRPD = 15,
-    RUIM_CORPORATE = 16,
-    RUIM_SERVICE_PROVIDER = 17,
-    RUIM_RUIM = 18,
-    RUIM_NETWORK1_PUK = 19,
-    /* The corresponding perso lock is blocked */
-    RUIM_NETWORK2_PUK = 20,
-    RUIM_HRPD_PUK = 21,
-    RUIM_CORPORATE_PUK = 22,
-    RUIM_SERVICE_PROVIDER_PUK = 23,
-    RUIM_RUIM_PUK = 24,
+enum PersoSubstate : int32_t {
+    UNKNOWN,                              // initial state
+    IN_PROGRESS,                          // in between each lock transition
+    READY,                                // when either SIM or RUIM Perso is finished since each
+                                          // app must only have 1 active perso involved
+    SIM_NETWORK,
+    SIM_NETWORK_SUBSET,
+    SIM_CORPORATE,
+    SIM_SERVICE_PROVIDER,
+    SIM_SIM,
+    SIM_NETWORK_PUK,                      // The corresponding perso lock is blocked
+    SIM_NETWORK_SUBSET_PUK,
+    SIM_CORPORATE_PUK,
+    SIM_SERVICE_PROVIDER_PUK,
+    SIM_SIM_PUK,
+    RUIM_NETWORK1,
+    RUIM_NETWORK2,
+    RUIM_HRPD,
+    RUIM_CORPORATE,
+    RUIM_SERVICE_PROVIDER,
+    RUIM_RUIM,
+    RUIM_NETWORK1_PUK,                   // The corresponding perso lock is blocked
+    RUIM_NETWORK2_PUK,
+    RUIM_HRPD_PUK,
+    RUIM_CORPORATE_PUK,
+    RUIM_SERVICE_PROVIDER_PUK,
+    RUIM_RUIM_PUK,
 };
 
-enum RadioState : int32_t  {
-  OFF = 0,
-  /* Radio explictly powered off (eg CFUN=0) */
-  UNAVAILABLE = 1,
-  /* States 2-9 below are deprecated. Just leaving them here for backward compatibility. */
-  SIM_NOT_READY = 2,
-  /* Radio is on, but the SIM interface is not ready */
-  SIM_LOCKED_OR_ABSENT = 3,
-  /* SIM PIN locked, PUK required, network
-   personalization locked, or SIM absent */
-  SIM_READY = 4,
-  /* Radio is on and SIM interface is available */
-  RUIM_NOT_READY = 5,
-  /* Radio is on, but the RUIM interface is not ready */
-  RUIM_READY = 6,
-  /* Radio is on and the RUIM interface is available */
-  RUIM_LOCKED_OR_ABSENT = 7,
-  /* RUIM PIN locked, PUK required, network
-   personalization locked, or RUIM absent */
-  NV_NOT_READY = 8,
-  /* Radio is on, but the NV interface is not available */
-  NV_READY = 9,
-  /* Radio is on */
-  ON = 10,
+enum RadioState : int32_t {
+    OFF,                                  // Radio explictly powered off (eg CFUN=0)
+    UNAVAILABLE,                          // Radio unavailable (eg, resetting or not booted)
 };
 
-struct RadioAppStatus {
-    RadioAppType appType;
-    RadioAppState appState;
-    RadioPersoSubstate persoSubstate;
-    /* applicable only if app_state == SUBSCRIPTION_PERSO */
-    string aidPtr;
-    /* null terminated string, e.g., from 0xA0, 0x00 -> 0x41, 0x30, 0x30, 0x30 */
+enum SapConnectRsp : int32_t {
+    SUCCESS,
+    CONNECT_FAILURE,
+    MSG_SIZE_TOO_LARGE,
+    MSG_SIZE_TOO_SMALL,
+    CONNECT_OK_CALL_ONGOING
+};
+
+enum SapDisconnectType : int32_t {
+    GRACEFUL,
+    IMMEDIATE
+};
+
+enum SapApduType : int32_t {
+    APDU,
+    APDU7816
+};
+
+enum SapResultCode : int32_t {
+    SUCCESS,
+    GENERIC_FAILURE,
+    CARD_NOT_ACCESSSIBLE,
+    CARD_ALREADY_POWERED_OFF,
+    CARD_REMOVED,
+    CARD_ALREADY_POWERED_ON,
+    DATA_NOT_AVAILABLE,
+    NOT_SUPPORTED
+};
+
+enum SapStatus : int32_t {
+    UNKNOWN_ERROR,
+    CARD_RESET,
+    CARD_NOT_ACCESSIBLE,
+    CARD_REMOVED,
+    CARD_INSERTED,
+    RECOVERED
+};
+
+enum SapTransferProtocol : int32_t {
+    T0,
+    T1
+};
+
+enum CallState : int32_t {
+    ACTIVE,
+    HOLDING,
+    DIALING,                             // MO call only
+    ALERTING,                            // MO call only
+    INCOMING,                            // MT call only
+    WAITING,                             // MT call only
+};
+
+/*
+ * User-to-User signaling Info activation types derived from 3GPP 23.087 v8.0
+ */
+enum UusType : int32_t {
+    TYPE1_IMPLICIT,
+    TYPE1_REQUIRED,
+    TYPE1_NOT_REQUIRED,
+    TYPE2_REQUIRED,
+    TYPE2_NOT_REQUIRED,
+    TYPE3_REQUIRED,
+    TYPE3_NOT_REQUIRED,
+};
+
+/*
+ * 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
+ */
+enum UusDcs : int32_t {
+    USP,                                  // User specified protocol
+    OSIHLP,                               // OSI higher layer protocol
+    X244,                                 // X.244
+    RMCF,                                 // Reserved for system mangement convergence function
+    IA5C,                                 // IA5 characters
+};
+
+enum CallPresentation : int32_t {
+    ALLOWED,
+    RESTRICTED,
+    UNKNOWN,
+    PAYPHONE,
+};
+
+enum Clir : int32_t {
+    DEFAULT,                               // "use subscription default value"
+    INVOCATION,                            // restrict CLI presentation
+    SUPPRESSION,                           // allow CLI presentation
+};
+
+enum LastCallFailCause : int32_t {
+    UNOBTAINABLE_NUMBER = 1,
+    NO_ROUTE_TO_DESTINATION = 3,
+    CHANNEL_UNACCEPTABLE = 6,
+    OPERATOR_DETERMINED_BARRING = 8,
+    NORMAL = 16,
+    BUSY = 17,
+    NO_USER_RESPONDING = 18,
+    NO_ANSWER_FROM_USER = 19,
+    CALL_REJECTED = 21,
+    NUMBER_CHANGED = 22,
+    PREEMPTION = 25,
+    DESTINATION_OUT_OF_ORDER = 27,
+    INVALID_NUMBER_FORMAT = 28,
+    FACILITY_REJECTED = 29,
+    RESP_TO_STATUS_ENQUIRY = 30,
+    NORMAL_UNSPECIFIED = 31,
+    CONGESTION = 34,
+    NETWORK_OUT_OF_ORDER = 38,
+    TEMPORARY_FAILURE = 41,
+    SWITCHING_EQUIPMENT_CONGESTION = 42,
+    ACCESS_INFORMATION_DISCARDED = 43,
+    REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE = 44,
+    RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 47,
+    QOS_UNAVAILABLE = 49,
+    REQUESTED_FACILITY_NOT_SUBSCRIBED = 50,
+    INCOMING_CALLS_BARRED_WITHIN_CUG = 55,
+    BEARER_CAPABILITY_NOT_AUTHORIZED = 57,
+    BEARER_CAPABILITY_UNAVAILABLE = 58,
+    SERVICE_OPTION_NOT_AVAILABLE = 63,
+    BEARER_SERVICE_NOT_IMPLEMENTED = 65,
+    ACM_LIMIT_EXCEEDED = 68,
+    REQUESTED_FACILITY_NOT_IMPLEMENTED = 69,
+    ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 70,
+    SERVICE_OR_OPTION_NOT_IMPLEMENTED = 79,
+    INVALID_TRANSACTION_IDENTIFIER = 81,
+    USER_NOT_MEMBER_OF_CUG = 87,
+    INCOMPATIBLE_DESTINATION = 88,
+    INVALID_TRANSIT_NW_SELECTION = 91,
+    SEMANTICALLY_INCORRECT_MESSAGE = 95,
+    INVALID_MANDATORY_INFORMATION = 96,
+    MESSAGE_TYPE_NON_IMPLEMENTED = 97,
+    MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98,
+    INFORMATION_ELEMENT_NON_EXISTENT = 99,
+    CONDITIONAL_IE_ERROR = 100,
+    MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101,
+    RECOVERY_ON_TIMER_EXPIRED = 102,
+    PROTOCOL_ERROR_UNSPECIFIED = 111,
+    INTERWORKING_UNSPECIFIED = 127,
+    CALL_BARRED = 240,
+    FDN_BLOCKED = 241,
+    IMSI_UNKNOWN_IN_VLR = 242,
+    IMEI_NOT_ACCEPTED = 243,
+    DIAL_MODIFIED_TO_USSD = 244,          // STK Call Control
+    DIAL_MODIFIED_TO_SS = 245,
+    DIAL_MODIFIED_TO_DIAL = 246,
+    CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000,
+    CDMA_DROP = 1001,
+    CDMA_INTERCEPT = 1002,
+    CDMA_REORDER = 1003,
+    CDMA_SO_REJECT = 1004,
+    CDMA_RETRY_ORDER = 1005,
+    CDMA_ACCESS_FAILURE = 1006,
+    CDMA_PREEMPTED = 1007,
+    CDMA_NOT_EMERGENCY = 1008,            // For non-emergency number dialed during emergency
+                                          // callback mode
+    CDMA_ACCESS_BLOCKED = 1009,           // This error will be deprecated soon,
+                                          // vendor code must make sure to map error
+                                          // code to specific error
+    ERROR_UNSPECIFIED = 0xffff,
+};
+
+enum DataCallFailCause : int32_t {
+    NONE = 0,                             // an integer cause code defined in TS 24.008
+                                          // section 6.1.3.1.3 or TS 24.301 Release 8+ Annex B.
+                                          // If the implementation does not have access to the exact
+                                          // cause codes, then it must return one of the
+                                          // following values, as the UI layer needs to distinguish
+                                          // these cases for error notification and potential
+                                          // retries.
+    OPERATOR_BARRED = 0x08,               // no retry
+    NAS_SIGNALLING = 0x0E,                // PDP_FAIL_LLC_SNDCP = 0x19,
+    INSUFFICIENT_RESOURCES = 0x1A,
+    MISSING_UKNOWN_APN = 0x1B,            // no retry
+    UNKNOWN_PDP_ADDRESS_TYPE = 0x1C,      // no retry
+    USER_AUTHENTICATION = 0x1D,           // no retry
+    ACTIVATION_REJECT_GGSN = 0x1E,        // no retry
+    ACTIVATION_REJECT_UNSPECIFIED = 0x1F,
+    SERVICE_OPTION_NOT_SUPPORTED = 0x20,  // no retry
+    SERVICE_OPTION_NOT_SUBSCRIBED = 0x21, // no retry
+    SERVICE_OPTION_OUT_OF_ORDER = 0x22,
+    NSAPI_IN_USE = 0x23,                  // no retry
+    REGULAR_DEACTIVATION = 0x24,          // possibly restart radio,
+                                          // based on framework config
+    QOS_NOT_ACCEPTED = 0x25,
+    NETWORK_FAILURE = 0x26,
+    UMTS_REACTIVATION_REQ = 0x27,
+    FEATURE_NOT_SUPP = 0x28,
+    TFT_SEMANTIC_ERROR = 0x29,
+    TFT_SYTAX_ERROR = 0x2A,
+    UNKNOWN_PDP_CONTEXT = 0x2B,
+    FILTER_SEMANTIC_ERROR = 0x2C,
+    FILTER_SYTAX_ERROR = 0x2D,
+    PDP_WITHOUT_ACTIVE_TFT = 0x2E,
+    ONLY_IPV4_ALLOWED = 0x32,             // no retry
+    ONLY_IPV6_ALLOWED = 0x33,             // no retry
+    ONLY_SINGLE_BEARER_ALLOWED = 0x34,
+    ESM_INFO_NOT_RECEIVED = 0x35,
+    PDN_CONN_DOES_NOT_EXIST = 0x36,
+    MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED = 0x37,
+    MAX_ACTIVE_PDP_CONTEXT_REACHED = 0x41,
+    UNSUPPORTED_APN_IN_CURRENT_PLMN = 0x42,
+    INVALID_TRANSACTION_ID = 0x51,
+    MESSAGE_INCORRECT_SEMANTIC = 0x5F,
+    INVALID_MANDATORY_INFO = 0x60,
+    MESSAGE_TYPE_UNSUPPORTED = 0x61,
+    MSG_TYPE_NONCOMPATIBLE_STATE = 0x62,
+    UNKNOWN_INFO_ELEMENT = 0x63,
+    CONDITIONAL_IE_ERROR = 0x64,
+    MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE = 0x65,
+    PROTOCOL_ERRORS = 0x6F,               // no retry
+    APN_TYPE_CONFLICT = 0x70,
+    INVALID_PCSCF_ADDR = 0x71,
+    INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN = 0x72,
+    EMM_ACCESS_BARRED = 0x73,
+    EMERGENCY_IFACE_ONLY = 0x74,
+    IFACE_MISMATCH = 0x75,
+    COMPANION_IFACE_IN_USE = 0x76,
+    IP_ADDRESS_MISMATCH = 0x77,
+    IFACE_AND_POL_FAMILY_MISMATCH = 0x78,
+    EMM_ACCESS_BARRED_INFINITE_RETRY = 0x79,
+    AUTH_FAILURE_ON_EMERGENCY_CALL = 0x7A,
+    OEM_DCFAILCAUSE_1 = 0x1001,
+
+    // OEM specific error codes. To be used by OEMs when they don't want to
+    // reveal error code which would be replaced by PDP_FAIL_ERROR_UNSPECIFIED
+    // TODO(May be moved to vendor HAL extension)
+    OEM_DCFAILCAUSE_2 = 0x1002,
+    OEM_DCFAILCAUSE_3 = 0x1003,
+    OEM_DCFAILCAUSE_4 = 0x1004,
+    OEM_DCFAILCAUSE_5 = 0x1005,
+    OEM_DCFAILCAUSE_6 = 0x1006,
+    OEM_DCFAILCAUSE_7 = 0x1007,
+    OEM_DCFAILCAUSE_8 = 0x1008,
+    OEM_DCFAILCAUSE_9 = 0x1009,
+    OEM_DCFAILCAUSE_10 = 0x100A,
+    OEM_DCFAILCAUSE_11 = 0x100B,
+    OEM_DCFAILCAUSE_12 = 0x100C,
+    OEM_DCFAILCAUSE_13 = 0x100D,
+    OEM_DCFAILCAUSE_14 = 0x100E,
+    OEM_DCFAILCAUSE_15 = 0x100F,
+
+    // Not mentioned in the specification
+    VOICE_REGISTRATION_FAIL = -1,
+    DATA_REGISTRATION_FAIL = -2,
+
+    // reasons for data call drop - network/modem disconnect
+    SIGNAL_LOST = -3,
+    PREF_RADIO_TECH_CHANGED = -4,         // preferred technology has changed, must retry
+                                          // with parameters appropriate for new technology
+    RADIO_POWER_OFF = -5,                 // data call was disconnected because radio was resetting,
+                                          // powered off - no retry
+    TETHERED_CALL_ACTIVE = -6,            // data call was disconnected by modem because tethered
+                                          // mode was up on same APN/data profile - no retry until
+                                          // tethered call is off
+    ERROR_UNSPECIFIED = 0xffff,
+};
+
+/*
+ * Please note that registration state UNKNOWN is
+ * treated as "out of service" in the Android telephony.
+ * Registration state REG_DENIED must be returned if Location Update
+ * Reject (with cause 17 - Network Failure) is received
+ * repeatedly from the network, to facilitate
+ * "managed roaming"
+ */
+enum RegState : int32_t {
+    NOT_REG_MT_NOT_SEARCHING_OP,          // Not registered, MT is not currently searching
+                                          // a new operator to register
+    REG_HOME,                             // Registered, home network
+    NOT_REG_MT_SEARCHING_OP,              // Not registered, but MT is currently searching
+                                          // a new operator to register
+    REG_DENIED,                           // Registration denied
+    UNKNOWN,                              // Unknown
+    REG_ROAMING,                          // Registered, roaming
+    NOT_REG_MT_NOT_SEARCHING_OP_EM,       // Same as NOT_REG_MT_NOT_SEARCHING_OP but indicates that
+                                          // emergency calls are enabled.
+    NOT_REG_MT_SEARCHING_OP_EM,           // Same as NOT_REG_MT_SEARCHING_OP but indicates that
+                                          // emergency calls are enabled.
+    REG_DENIED_EM,                        // Same as REG_DENIED but indicates that
+                                          // emergency calls are enabled.
+    UNKNOWN_EM                            // Same as UNKNOWN but indicates that
+                                          // emergency calls are enabled.
+};
+
+enum RadioTechnology : int32_t {
+    UNKNOWN,
+    GPRS,
+    EDGE,
+    UMTS,
+    IS95A,
+    IS95B,
+    ONE_X_RTT,
+    EVDO_0,
+    EVDO_A,
+    HSDPA,
+    HSUPA,
+    HSPA,
+    EVDO_B,
+    EHRPD,
+    LTE,
+    HSPAP,                                // HSPA+
+    GSM,                                  // Only supports voice
+    TD_SCDMA,
+    IWLAN,
+    LTE_CA,
+};
+
+enum DataProfile : int32_t {
+    DEFAULT = 0,
+    TETHERED = 1,
+    IMS = 2,
+    FOTA = 3,
+    CBS = 4,
+    OEM_BASE = 1000,                      // Start of OEM-specific profiles
+    INVALID = 0xFFFFFFFF,
+};
+
+enum SmsAcknowledgeFailCause : int32_t {
+    MEMORY_CAPAPCITY_EXCEEDED = 0xD3,
+    UNSPECIFIED_ERROR = 0XFF,
+};
+
+enum CallForwardInfoStatus : int32_t {
+    ACTIVE,
+    INACTIVE,
+    DISABLE,
+    ENABLE,
+    INTERROGATE,
+    REGISTRATION,
+    ERASURE,
+};
+
+enum ClipStatus : int32_t {
+    CLIP_PROVISIONED,                     // CLIP provisioned
+    CLIP_UNPROVISIONED,                   // CLIP not provisioned
+    UNKOWN,                               // unknown, e.g. no network etc
+};
+
+enum SmsWriteArgsStatus : int32_t {
+    REC_UNREAD,
+    REC_READ,
+    STO_UNSENT,
+    STO_SENT,
+};
+
+enum RadioBandMode : int32_t  {
+    BAND_MODE_UNSPECIFIED,                // "unspecified" (selected by baseband automatically)
+    BAND_MODE_EURO,                       // "EURO band" (GSM-900 / DCS-1800 / WCDMA-IMT-2000)
+    BAND_MODE_USA,                        // "US band"
+                                          // (GSM-850 / PCS-1900 / WCDMA-850 / WCDMA-PCS-1900)
+    BAND_MODE_JPN,                        // "JPN band" (WCDMA-800 / WCDMA-IMT-2000)
+    BAND_MODE_AUS,                        // "AUS band"
+                                          // (GSM-900 / DCS-1800 / WCDMA-850 / WCDMA-IMT-2000)
+    BAND_MODE_AUS_2,                      // "AUS band 2" (GSM-900 / DCS-1800 / WCDMA-850)
+    BAND_MODE_CELL_800,                   // "Cellular" (800-MHz Band)
+    BAND_MODE_PCS,                        // "PCS" (1900-MHz Band)
+    BAND_MODE_JTACS,                      // "Band Class 3" (JTACS Band)
+    BAND_MODE_KOREA_PCS,                  // "Band Class 4" (Korean PCS Band)
+    BAND_MODE_5_450M,                     // "Band Class 5" (450-MHz Band)
+    BAND_MODE_IMT2000,                    // "Band Class 6" (2-GMHz IMT2000 Band)
+    BAND_MODE_7_700M_2,                   // "Band Class 7" (Upper 700-MHz Band)
+    BAND_MODE_8_1800M,                    // "Band Class 8" (1800-MHz Band)
+    BAND_MODE_9_900M,                     // "Band Class 9" (900-MHz Band)
+    BAND_MODE_10_800M_2,                  // "Band Class 10" (Secondary 800-MHz Band)
+    BAND_MODE_EURO_PAMR_400M,             // "Band Class 11" (400-MHz European PAMR Band)
+    BAND_MODE_AWS,                        // "Band Class 15" (AWS Band)
+    BAND_MODE_USA_2500M,                  // "Band Class 16" (US 2.5-GHz Band)
+};
+
+enum OperatorStatus : int32_t {
+    UNKNOWN,
+    AVAILABLE,
+    CURRENT,
+    FORBIDDEN,
+};
+
+struct RadioResponseInfo {
+    RadioResponseType type;               // Response type
+    int32_t serial;                       // Serial number of the request
+    RadioError error;                     // Response error
+};
+
+struct AppStatus {
+    AppType appType;
+    AppState appState;
+    PersoSubstate persoSubstate;          // applicable only if app_state == SUBSCRIPTION_PERSO
+    string aidPtr;                        // e.g., from 0xA0, 0x00 -> 0x41,
+                                          // 0x30, 0x30, 0x30
     string appLabelPtr;
-    /* null terminated string */
-    int32_t pin1Replaced;
-    /* applicable to USIM, CSIM & ISIM */
-    RadioPinState pin1;
-    RadioPinState pin2;
+    int32_t pin1Replaced;                 // applicable to USIM, CSIM & ISIM
+    PinState pin1;
+    PinState pin2;
 };
 
-struct RadioCardStatus {
-    RadioCardState cardState;
-    RadioPinState universalPinState;
-    /* applicable to USIM and CSIM */
-    int32_t gsmUmtsSubscriptionAppIndex;
-    /* value < RADIO_CARD_MAX_APPS, -1 if none */
-    int32_t cdmaSubscriptionAppIndex;
-    /* value < RADIO_CARD_MAX_APPS, -1 if none */
-    int32_t imsSubscriptionAppIndex;
-    /* value < RADIO_CARD_MAX_APPS, -1 if none */
-    int32_t numApplications;
-    /* value <= RADIO_CARD_MAX_APPS */
-    RadioAppStatus[RadioConst:RADIO_CARD_MAX_APPS] applications;
+struct CardStatus {
+    CardState cardState;
+    PinState universalPinState;           // applicable to USIM and CSIM
+    int32_t gsmUmtsSubscriptionAppIndex;  // value < RADIO_CARD_MAX_APPS, -1 if none
+    int32_t cdmaSubscriptionAppIndex;     // value < RADIO_CARD_MAX_APPS, -1 if none
+    int32_t imsSubscriptionAppIndex;      // value < RADIO_CARD_MAX_APPS, -1 if none
+    int32_t numApplications;              // value <= RADIO_CARD_MAX_APPS
+    AppStatus[RadioConst:RADIO_CARD_MAX_APPS] applications;
+};
+
+/*
+ * User-to-User Signaling Information defined in 3GPP 23.087 v8.0
+ * This data is passed in RADIO_ExtensionRecord and rec contains this
+ * structure when type is RADIO_UUS_INFO_EXT_REC
+ */
+struct UusInfo {
+    UusType uusType;                      // UUS Type
+    UusDcs uusDcs;                        // UUS Data Coding Scheme
+    int32_t uusLength;                    // Length of UUS Data
+    string uusData;                       // UUS data
+};
+
+struct Call {
+    CallState state;
+    int32_t index;                        // Connection Index for use with, eg, AT+CHLD
+    int32_t toa;                          // type of address, eg 145 = intl
+    bool isMpty;                          // true if is mpty call
+    bool isMT;                            // true if call is mobile terminated
+    uint8_t als;                          // ALS line indicator if available (0 = line 1)
+    bool isVoice;                         // true if this is is a voice call
+    bool isVoicePrivacy;                  // true if CDMA voice privacy mode is active
+    string number;                        // Remote party number
+    CallPresentation numberPresentation;
+    string name;                          // Remote party name
+    CallPresentation namePresentation;
+    vec<UusInfo> uusInfo;                 // Vector of User-User Signaling Information
+};
+
+struct Dial {
+    string address;
+    Clir clir;
+    vec<UusInfo> uusInfo;                 // Vector of User-User Signaling Information
+};
+
+struct GwSignalStrength {
+    uint32_t signalStrength;              // Valid values are (0-31, 99) as defined in
+                                          // TS 27.007 8.5
+    uint32_t bitErrorRate;                // bit error rate (0-7, 99) as defined in TS 27.007 8.5
+};
+
+struct CdmaSignalStrength {
+    uint32_t dbm;                         // This value is the actual RSSI
+                                          // value multiplied by -1. Example: If the
+                                          // actual RSSI is -75, then this response value will
+                                          // be 75.
+    uint32_t ecio;                        // This value is the actual
+                                          // Ec/Io multiplied by -10. Example: If the
+                                          // actual Ec/Io is -12.5 dB, then this response value
+                                          // will be 125.
+};
+
+struct EvdoSignalStrength {
+    uint32_t dbm;                         // This value is the actual
+                                          // RSSI value multiplied by -1.
+                                          // Example: If the actual RSSI is -75,
+                                          // then this response value will be 75.
+    uint32_t ecio;                        // This value is the actual
+                                          // Ec/Io multiplied by -10. Example: If the
+                                          // actual Ec/Io is -12.5 dB, then this response value
+                                          // will be 125.
+    uint32_t signalNoiseRatio;            // Valid values are 0-8. 8 is the highest signal to
+                                          // noise ratio.
+};
+
+struct LteSignalStrength {
+    uint32_t signalStrength;              // Valid values are (0-31, 99) as defined in
+                                          // TS 27.007 8.5
+    uint32_t rsrp;                        // The current Reference Signal Receive Power in dBm
+                                          // multipled by -1.
+                                          // Range: 44 to 140 dBm
+                                          // INT_MAX: 0x7FFFFFFF denotes invalid value.
+                                          // Reference: 3GPP TS 36.133 9.1.4
+    uint32_t rsrq;                        // The current Reference Signal Receive Quality in dB
+                                          // multiplied by -1.
+                                          // Range: 20 to 3 dB.
+                                          // INT_MAX: 0x7FFFFFFF denotes invalid value.
+                                          // Reference: 3GPP TS 36.133 9.1.7
+    int32_t rssnr;                        // The current reference signal signal-to-noise ratio in
+                                          // 0.1 dB units.
+                                          // Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
+                                          // INT_MAX : 0x7FFFFFFF denotes invalid value.
+                                          // Reference: 3GPP TS 36.101 8.1.1
+    uint32_t cqi;                         // The current Channel Quality Indicator.
+                                          // Range: 0 to 15.
+                                          // INT_MAX : 0x7FFFFFFF denotes invalid value.
+                                          // Reference: 3GPP TS 36.101 9.2, 9.3, A.4
+    uint32_t timingAdvance;               // timing advance in micro seconds for a one way trip
+                                          // from cell to device.
+                                          // Approximate distance is calculated using
+                                          // 300m/us * timingAdvance.
+                                          // Range: 0 to 0x7FFFFFFE
+                                          // INT_MAX : 0x7FFFFFFF denotes invalid value.
+                                          // Reference: 3GPP 36.321 section 6.1.3.5
+                                          // also: http://www.cellular-planningoptimization.com/2010/02/timing-advance-with-calculation.html
+};
+
+struct TdScdmaSignalStrength {
+    uint32_t rscp;                        // The Received Signal Code Power in dBm multipled by -1.
+                                          // Range : 25 to 120
+                                          // INT_MAX: 0x7FFFFFFF denotes invalid value.
+                                          // Reference: 3GPP TS 25.123, section 9.1.1.1
+};
+
+struct SignalStrength {
+    GwSignalStrength gw;
+    CdmaSignalStrength cdma;
+    EvdoSignalStrength evdo;
+    LteSignalStrength lte;
+    TdScdmaSignalStrength tdScdma;
+};
+
+struct SendSmsResult {
+    int32_t messageRef;                   // TP-Message-Reference for GSM, and BearerData MessageId
+                                          // for CDMA (See 3GPP2 C.S0015-B, v2.0, table 4.5-1)
+    string ackPDU;                        // or empty string if n/a
+    int32_t errorCode;                    // See 3GPP 27.005, 3.2.5 for GSM/UMTS,
+                                          // 3GPP2 N.S0005 (IS-41C) Table 171 for CDMA,
+                                          // -1 if unknown or not applicable
+};
+
+struct SetupDataCallResult {
+    int32_t status;                       // A RadioDataCallFailCause, 0 which is
+                                          // RadioDataCallFailCause:NONE if no error
+    int32_t suggestedRetryTime;           // If status != 0, this fields indicates the suggested
+                                          // retry back-off timer value RIL wants to override the
+                                          // one pre-configured in FW.
+                                          // The unit is miliseconds.
+                                          // The value < 0 means no value is suggested.
+                                          // The value 0 means retry must be done ASAP.
+                                          // The value of INT_MAX(0x7fffffff) means no retry.
+    int32_t cid;                          // Context ID, uniquely identifies this call
+    int32_t active;                       // 0=inactive, 1=active/physical link down,
+                                          // 2=active/physical link up */
+    string type;                          // One of the PDP_type values in TS 27.007 section 10.1.1.
+                                          // For example, "IP", "IPV6", "IPV4V6", or "PPP". If
+                                          // status is
+                                          // RadioDataCallFailCause:ONLY_SINGLE_BEARER_ALLOWED this
+                                          // is the type supported such as "IP" or "IPV6"
+    string ifname;                        // The network interface name
+    string addresses;                     // A space-delimited list of addresses with optional "/"
+                                          // prefix length, e.g., "192.0.1.3" or
+                                          // "192.0.1.11/16 2001:db8::1/64".
+                                          // Typically 1 IPv4 or 1 IPv6 or
+                                          // one of each. If the prefix length is absent the
+                                          // addresses are assumed to be point to point with IPv4
+                                          // having a prefix length of 32 and IPv6 128.
+    string dnses;                         // A space-delimited list of DNS server addresses,
+                                          // e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1".
+                                          // Empty if no dns server addresses returned.
+    string gateways;                      // A space-delimited list of default gateway addresses,
+                                          // e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1".
+                                          // When empty, the addresses represent
+                                          // point to point connections.
+    string pcscf;                         // the Proxy Call State Control Function address
+                                          // via PCO(Protocol Configuration Option) for IMS client.
+    int32_t mtu;                          // MTU received from network
+                                          // Value <= 0 means network has either not sent a
+                                          // value or sent an invalid value
+};
+
+struct IccIo {
+    int32_t command;                      // one of the commands listed for TS 27.007 +CRSM
+    int32_t fileid;                       // EF id
+    string path;                          // "pathid" from TS 27.007 +CRSM command.
+                                          // Path is in hex asciii format eg "7f205f70"
+                                          // Path must always be provided.
+    int32_t p1;                           // Values of p1, p2 & p3 defined as per 3GPP TS 51.011
+    int32_t p2;
+    int32_t p3;
+    string data;                          // information to be written to the SIM
+    string pin2;
+    string aidPtr;                        // AID value, See ETSI 102.221 8.1 and 101.220 4, empty
+                                          // string if no value.
+};
+
+struct IccIoResult {
+    int32_t sw1;
+    int32_t sw2;
+    string simResponse;                   // In hex string format ([a-fA-F0-9]*), except for
+                                          // SIM_AUTHENTICATION response for which it is in
+                                          // Base64 format, see 3GPP TS 31.102 7.1.2
+};
+
+struct VoiceRegStateResult {
+    RegState regState;
+    int32_t lac;                          // LAC if registered on a GSM/WCDMA system or
+                                          // -1 if not.Valid LAC are 0x0000 - 0xffff
+    int32_t cid;                          // CID. if registered on a * GSM/WCDMA or -1 if not
+                                          // Valid CID are 0x00000000 - 0xffffffff
+                                          // In GSM, CID is Cell ID (see TS 27.007) in 16 bits
+                                          // In UMTS, CID is UMTS Cell Identity (see TS 25.331)
+                                          // in 28 bits
+    int32_t rat;                          // indicates the available voice radio technology,
+                                          // valid values as defined by RIL_RadioTechnology.
+    int32_t baseStationId;                // Base Station ID. if registered on a CDMA
+                                          // system or -1 if not. Base Station ID in decimal format
+    int32_t baseStationLatitude;          // Base Station latitude. if registered on a
+                                          // CDMA system or -1 if not. Base Station latitude is a
+                                          // decimal number as specified in 3GPP2 C.S0005-A v6.0.
+                                          // It is represented in units of 0.25 seconds and ranges
+                                          // from -1296000 to 1296000, both values inclusive
+                                          // (corresponding to a range of -90 to +90 degrees).
+    int32_t baseStationLongitude;         // Base Station longitude. if registered on a
+                                          // CDMA system or -1 if not. Base Station
+                                          // longitude is a decimal number as specified in
+                                          // 3GPP2 C.S0005-A v6.0. It is represented in
+                                          // units of 0.25 seconds and ranges from -2592000
+                                          // to 2592000, both values inclusive (corresponding
+                                          // to a range of -180 to +180 degrees).
+    bool cssSupported;                    // concurrent services support indicator. if
+                                          // registered on a CDMA system.
+                                          // false - Concurrent services not supported,
+                                          // true - Concurrent services supported
+    int32_t systemId;                     // System ID. if registered on a CDMA system or
+                                          // -1 if not. Valid System ID are 0 - 32767
+    int32_t networkId;                    // Network ID. if registered on a CDMA system or
+                                          // -1 if not. Valid System ID are 0 - 65535
+    int32_t roamingIndicator;             // TSB-58 Roaming Indicator if registered
+                                          // on a CDMA or EVDO system or -1 if not.
+                                          // Valid values are 0-255.
+    int32_t systemIsInPrl;                // 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
+    int32_t defaultRoamingIndicator;      // default Roaming Indicator from the PRL,
+                                          // if registered on a CDMA or EVDO system or -1 if not.
+                                          // Valid values are 0-255.
+    int32_t reasonForDenial;              // reasonForDenial if registration state is 3
+                                          // (Registration denied) this is an enumerated reason why
+                                          // registration was denied. See 3GPP TS 24.008,
+                                          // 10.5.3.6 and Annex G.
+                                          // 0 - General
+                                          // 1 - Authentication Failure
+                                          // 2 - IMSI unknown in HLR
+                                          // 3 - Illegal MS
+                                          // 4 - Illegal ME
+                                          // 5 - PLMN not allowed
+                                          // 6 - Location area not allowed
+                                          // 7 - Roaming not allowed
+                                          // 8 - No Suitable Cells in this Location Area
+                                          // 9 - Network failure
+                                          // 10 - Persistent location update reject
+                                          // 11 - PLMN not allowed
+                                          // 12 - Location area not allowed
+                                          // 13 - Roaming not allowed in this Location Area
+                                          // 15 - No Suitable Cells in this Location Area
+                                          // 17 - Network Failure
+                                          // 20 - MAC Failure
+                                          // 21 - Sync Failure
+                                          // 22 - Congestion
+                                          // 23 - GSM Authentication unacceptable
+                                          // 25 - Not Authorized for this CSG
+                                          // 32 - Service option not supported
+                                          // 33 - Requested service option not subscribed
+                                          // 34 - Service option temporarily out of order
+                                          // 38 - Call cannot be identified
+                                          // 48-63 - Retry upon entry into a new cell
+                                          // 95 - Semantically incorrect message
+                                          // 96 - Invalid mandatory information
+                                          // 97 - Message type non-existent or not implemented
+                                          // 98 - Message type not compatible with protocol state
+                                          // 99 - Information element non-existent or not implemented
+                                          // 100 - Conditional IE error
+                                          // 101 - Message not compatible with protocol state
+                                          // 111 - Protocol error, unspecified
+    int32_t psc;                          // Primary Scrambling Code of the current
+                                          // cell as described in TS 25.331, in hexadecimal
+                                          // format, or -1 if unknown or not registered
+                                          // to a UMTS network.
+};
+
+struct DataRegStateResult {
+    RegState regState;                    // Valid reg states are NOT_REG_MT_NOT_SEARCHING_OP,
+                                          // REG_HOME, NOT_REG_MT_SEARCHING_OP, REG_DENIED,
+                                          // UNKNOWN, REG_ROAMING defined in RegState
+    int32_t lac;                          // LAC if registered or -1 if not
+                                          // valid LAC are 0x0000 - 0xffff
+    int32_t cid;                          // CID if registered or -1 if not
+                                          // valid CID are 0x00000000 - 0x0fffffff
+    int32_t rat;                          // indicates the available data radio technology,
+                                          // valid values as defined by RIL_RadioTechnology.
+    int32_t reasonDataDenied;             // if registration state is 3 (Registration
+                                          // denied) this is an enumerated reason why
+                                          // registration was denied. See 3GPP TS 24.008,
+                                          // Annex G.6 "Additonal cause codes for GMM".
+                                          // 7 == GPRS services not allowed
+                                          // 8 == GPRS services and non-GPRS services not allowed
+                                          // 9 == MS identity cannot be derived by the network
+                                          // 10 == Implicitly detached
+                                          // 14 == GPRS services not allowed in this PLMN
+                                          // 16 == MSC temporarily not reachable
+                                          // 40 == No PDP context activated
+    int32_t maxDataCalls;                 // The maximum number of simultaneous Data Calls that
+                                          // must be established using requestSetupDataCall().
+    // The values below are optional LTE location information in decimal.
+    // If a value is unknown that value must be -1.
+    int32_t tac;                          // a 16-bit Tracking Area Code.
+    int32_t phyCid;                       // a 0-503 Physical Cell Identifier.
+    int32_t eci;                          // a 28-bit E-UTRAN Cell Identifier.
+    int32_t csgid;                        // a 27-bit Closed Subscriber Group Identity.
+    int32_t tadv;                         // a 6-bit timing advance value.
+};
+
+// See also com.android.internal.telephony.gsm.CallForwardInfo
+struct CallForwardInfo {
+    CallForwardInfoStatus status;         // For queryCallForwardStatus()
+                                          // status must be ACTIVE, INACTIVE
+                                          // For setCallForward():
+                                          // status must be
+                                          // DISABLE, ENABLE, INTERROGATE, REGISTRATION, ERASURE
+    int32_t reason;                       // from TS 27.007 7.11 "reason"
+    int32_t serviceClass;                 // From 27.007 +CCFC/+CLCK "class"
+                                          // See table for Android mapping from
+                                          // MMI service code
+                                          // 0 means user doesnt input class
+    int32_t toa;                          // "type" from TS 27.007 7.11
+    string number;                        // "number" from TS 27.007 7.11.
+    int32_t timeSeconds;
+};
+
+// Response struct used in responseQueryAvailableNetworks
+struct OperatorInfo {
+    string alphaLong;                     // long alpha ONS or EONS
+    string alphaShort;                    // short alpha ONS or EONS
+    string operatorNumeric;               // 5 or 6 digit numeric code (MCC + MNC)
+    OperatorStatus status;
+};
+
+struct SmsWriteArgs {
+    SmsWriteArgsStatus status;            // Status of message. See TS 27.005 3.1
+    string pdu;                           // PDU of message to write, as an ASCII hex string less
+                                          // the SMSC address, the TP-layer length is strlen(pdu)/2.
+    string smsc;                          // SMSC address in GSM BCD format prefixed by a length
+                                          // byte (as expected by TS 27.005) or NULL for default
+                                          // SMSC
 };
\ No newline at end of file
diff --git a/radio/Android.bp b/radio/Android.bp
new file mode 100644
index 0000000..bbb3e4b
--- /dev/null
+++ b/radio/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+]
diff --git a/sensors/1.0/Android.bp b/sensors/1.0/Android.bp
index 32ee049..5b1fd05 100644
--- a/sensors/1.0/Android.bp
+++ b/sensors/1.0/Android.bp
@@ -43,4 +43,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/sensors/1.0/Android.mk b/sensors/1.0/Android.mk
new file mode 100644
index 0000000..dd9e21b
--- /dev/null
+++ b/sensors/1.0/Android.mk
@@ -0,0 +1,38 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.sensors@1.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/sensors/1.0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/ISensors.hal
+
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava-constants -randroid.hardware:hardware/interfaces \
+        android.hardware.sensors@1.0
+
+$(GEN):
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+# Avoid dependency cycle of framework.jar -> this-library -> framework.jar
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/sensors/Android.bp b/sensors/Android.bp
new file mode 100644
index 0000000..ba90f2c
--- /dev/null
+++ b/sensors/Android.bp
@@ -0,0 +1,5 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+    "1.0/default",
+]
diff --git a/soundtrigger/2.0/Android.bp b/soundtrigger/2.0/Android.bp
index 10a917b..a7a42a0 100644
--- a/soundtrigger/2.0/Android.bp
+++ b/soundtrigger/2.0/Android.bp
@@ -52,4 +52,9 @@
         "libcutils",
         "android.hardware.audio.common@2.0",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/soundtrigger/Android.bp b/soundtrigger/Android.bp
new file mode 100644
index 0000000..c12cd4f
--- /dev/null
+++ b/soundtrigger/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "2.0",
+]
diff --git a/tests/Android.bp b/tests/Android.bp
new file mode 100644
index 0000000..030576d
--- /dev/null
+++ b/tests/Android.bp
@@ -0,0 +1,18 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "bar/1.0",
+    "bar/1.0/default",
+    "baz/1.0",
+    "expression/1.0",
+    "foo/1.0",
+    "foo/1.0/default",
+    "foo/1.0/default/lib",
+    "inheritance/1.0",
+    "inheritance/1.0/default",
+    "libhwbinder/1.0",
+    "libhwbinder/1.0/default",
+    "msgq/1.0",
+    "pointer/1.0",
+    "pointer/1.0/default",
+    "pointer/1.0/default/lib",
+]
diff --git a/tests/bar/1.0/default/Android.bp b/tests/bar/1.0/default/Android.bp
index 0d47001..c2c2309 100644
--- a/tests/bar/1.0/default/Android.bp
+++ b/tests/bar/1.0/default/Android.bp
@@ -10,6 +10,7 @@
 
     shared_libs: [
         "libbase",
+        "libcutils",
         "libhidl",
         "libhwbinder",
         "liblog",
diff --git a/tests/bar/1.0/default/Bar.cpp b/tests/bar/1.0/default/Bar.cpp
index 34ec087..b960524 100644
--- a/tests/bar/1.0/default/Bar.cpp
+++ b/tests/bar/1.0/default/Bar.cpp
@@ -130,6 +130,18 @@
     return Void();
 }
 
+Return<void> Bar::createMyHandle(createMyHandle_cb _hidl_cb) {
+    return mFoo->createMyHandle(_hidl_cb);
+}
+
+Return<void> Bar::createHandles(uint32_t size, createHandles_cb _hidl_cb) {
+    return mFoo->createHandles(size, _hidl_cb);
+}
+
+Return<void> Bar::closeHandles() {
+    return mFoo->closeHandles();
+}
+
 // Methods from ::android::hardware::tests::bar::V1_0::IBar follow.
 Return<void> Bar::thisIsNew()  {
     ALOGI("SERVER(Bar) thisIsNew");
diff --git a/tests/bar/1.0/default/Bar.h b/tests/bar/1.0/default/Bar.h
index d2c2635..6fea563 100644
--- a/tests/bar/1.0/default/Bar.h
+++ b/tests/bar/1.0/default/Bar.h
@@ -48,6 +48,9 @@
     virtual Return<void> transpose2(const hidl_array<hidl_string, 5 /* 5 */, 3 /* 3 */>& in, transpose2_cb _hidl_cb)  override;
     virtual Return<void> sendVec(const hidl_vec<uint8_t>& data, sendVec_cb _hidl_cb)  override;
     virtual Return<void> sendVecVec(sendVecVec_cb _hidl_cb)  override;
+    virtual Return<void> createMyHandle(createMyHandle_cb _hidl_cb)  override;
+    virtual Return<void> createHandles(uint32_t size, createHandles_cb _hidl_cb)  override;
+    virtual Return<void> closeHandles()  override;
 
     Return<void> haveAVectorOfInterfaces(
             const hidl_vec<sp<ISimple> > &in,
diff --git a/tests/foo/1.0/IFoo.hal b/tests/foo/1.0/IFoo.hal
index 2afaec1..c06fc05 100644
--- a/tests/foo/1.0/IFoo.hal
+++ b/tests/foo/1.0/IFoo.hal
@@ -80,6 +80,11 @@
         FloatArray myFloatArray;
     };
 
+    struct MyHandle {
+        handle h;
+        int32_t guard;
+    };
+
     doThis(float param);
     doThatAndReturnSomething(int64_t param) generates (int32_t result);
     doQuiteABit(int32_t a, int64_t b, float c, double d) generates (double something);
@@ -112,4 +117,7 @@
 
     haveAVectorOfGenericInterfaces(vec<interface> in)
         generates (vec<interface> out);
+    createMyHandle() generates (MyHandle h);
+    createHandles(uint32_t size) generates (vec<handle> handles);
+    closeHandles();
 };
diff --git a/tests/foo/1.0/default/Android.bp b/tests/foo/1.0/default/Android.bp
index 185e5ea..f2ee521 100644
--- a/tests/foo/1.0/default/Android.bp
+++ b/tests/foo/1.0/default/Android.bp
@@ -10,6 +10,7 @@
 
     shared_libs: [
         "libbase",
+        "libcutils",
         "libhidl",
         "libfootest",
         "libhwbinder",
diff --git a/tests/foo/1.0/default/Foo.cpp b/tests/foo/1.0/default/Foo.cpp
index f855f21..cf4f975 100644
--- a/tests/foo/1.0/default/Foo.cpp
+++ b/tests/foo/1.0/default/Foo.cpp
@@ -291,7 +291,40 @@
         const hidl_vec<sp<android::hardware::IBinder> > &in,
         haveAVectorOfGenericInterfaces_cb _hidl_cb) {
     _hidl_cb(in);
+    return Void();
+}
 
+Return<void> Foo::createMyHandle(createMyHandle_cb _hidl_cb) {
+    native_handle_t* nh = native_handle_create(0, 10);
+    int data[] = {2,3,5,7,11,13,17,19,21,23};
+    CHECK(sizeof(data) == 10 * sizeof(int));
+    memcpy(nh->data, data, sizeof(data));
+    mHandles.push_back(nh);
+
+    MyHandle h;
+    h.guard = 666;
+    h.h = nh;
+    _hidl_cb(h);
+    return Void();
+}
+
+Return<void> Foo::createHandles(uint32_t size, createHandles_cb _hidl_cb) {
+    hidl_vec<const native_handle_t*> handles;
+    handles.resize(size);
+    for(uint32_t i = 0; i < size; ++i) {
+        createMyHandle([&](const MyHandle& h) {
+            handles[i] = h.h;
+        });
+    }
+    _hidl_cb(handles);
+    return Void();
+}
+
+Return<void> Foo::closeHandles() {
+    for(native_handle_t* h : mHandles) {
+        native_handle_delete(h);
+    }
+    mHandles.clear();
     return Void();
 }
 
diff --git a/tests/foo/1.0/default/Foo.h b/tests/foo/1.0/default/Foo.h
index b3785d2..e61291d 100644
--- a/tests/foo/1.0/default/Foo.h
+++ b/tests/foo/1.0/default/Foo.h
@@ -5,6 +5,7 @@
 #include <hidl/Status.h>
 
 #include <hidl/MQDescriptor.h>
+#include <vector>
 namespace android {
 namespace hardware {
 namespace tests {
@@ -44,6 +45,9 @@
     virtual Return<void> transpose2(const hidl_array<hidl_string, 5 /* 5 */, 3 /* 3 */>& in, transpose2_cb _hidl_cb)  override;
     virtual Return<void> sendVec(const hidl_vec<uint8_t>& data, sendVec_cb _hidl_cb)  override;
     virtual Return<void> sendVecVec(sendVecVec_cb _hidl_cb)  override;
+    virtual Return<void> createMyHandle(createMyHandle_cb _hidl_cb)  override;
+    virtual Return<void> createHandles(uint32_t size, createHandles_cb _hidl_cb)  override;
+    virtual Return<void> closeHandles()  override;
 
     Return<void> haveAVectorOfInterfaces(
             const hidl_vec<sp<ISimple> > &in,
@@ -52,6 +56,8 @@
     Return<void> haveAVectorOfGenericInterfaces(
             const hidl_vec<sp<android::hardware::IBinder> > &in,
             haveAVectorOfGenericInterfaces_cb _hidl_cb) override;
+private:
+    std::vector<::native_handle_t *> mHandles;
 };
 
 extern "C" IFoo* HIDL_FETCH_IFoo(const char* name);
diff --git a/tests/inheritance/1.0/Android.bp b/tests/inheritance/1.0/Android.bp
new file mode 100644
index 0000000..e4a3439
--- /dev/null
+++ b/tests/inheritance/1.0/Android.bp
@@ -0,0 +1,71 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+genrule {
+    name: "android.hardware.tests.inheritance@1.0_genc++",
+    tool: "hidl-gen",
+    cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.tests.inheritance@1.0",
+    srcs: [
+        "IChild.hal",
+        "IFetcher.hal",
+        "IGrandparent.hal",
+        "IParent.hal",
+    ],
+    out: [
+        "android/hardware/tests/inheritance/1.0/ChildAll.cpp",
+        "android/hardware/tests/inheritance/1.0/FetcherAll.cpp",
+        "android/hardware/tests/inheritance/1.0/GrandparentAll.cpp",
+        "android/hardware/tests/inheritance/1.0/ParentAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.inheritance@1.0_genc++_headers",
+    tool: "hidl-gen",
+    cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.tests.inheritance@1.0",
+    srcs: [
+        "IChild.hal",
+        "IFetcher.hal",
+        "IGrandparent.hal",
+        "IParent.hal",
+    ],
+    out: [
+        "android/hardware/tests/inheritance/1.0/IChild.h",
+        "android/hardware/tests/inheritance/1.0/IHwChild.h",
+        "android/hardware/tests/inheritance/1.0/BnChild.h",
+        "android/hardware/tests/inheritance/1.0/BpChild.h",
+        "android/hardware/tests/inheritance/1.0/BsChild.h",
+        "android/hardware/tests/inheritance/1.0/IFetcher.h",
+        "android/hardware/tests/inheritance/1.0/IHwFetcher.h",
+        "android/hardware/tests/inheritance/1.0/BnFetcher.h",
+        "android/hardware/tests/inheritance/1.0/BpFetcher.h",
+        "android/hardware/tests/inheritance/1.0/BsFetcher.h",
+        "android/hardware/tests/inheritance/1.0/IGrandparent.h",
+        "android/hardware/tests/inheritance/1.0/IHwGrandparent.h",
+        "android/hardware/tests/inheritance/1.0/BnGrandparent.h",
+        "android/hardware/tests/inheritance/1.0/BpGrandparent.h",
+        "android/hardware/tests/inheritance/1.0/BsGrandparent.h",
+        "android/hardware/tests/inheritance/1.0/IParent.h",
+        "android/hardware/tests/inheritance/1.0/IHwParent.h",
+        "android/hardware/tests/inheritance/1.0/BnParent.h",
+        "android/hardware/tests/inheritance/1.0/BpParent.h",
+        "android/hardware/tests/inheritance/1.0/BsParent.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.tests.inheritance@1.0",
+    generated_sources: ["android.hardware.tests.inheritance@1.0_genc++"],
+    generated_headers: ["android.hardware.tests.inheritance@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.tests.inheritance@1.0_genc++_headers"],
+    shared_libs: [
+        "libhidl",
+        "libhwbinder",
+        "libutils",
+        "libcutils",
+    ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
+}
diff --git a/tests/inheritance/1.0/Android.mk b/tests/inheritance/1.0/Android.mk
new file mode 100644
index 0000000..34da056
--- /dev/null
+++ b/tests/inheritance/1.0/Android.mk
@@ -0,0 +1,186 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.inheritance@1.0-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+#
+# Build IChild.hal
+#
+GEN := $(intermediates)/android/hardware/tests/inheritance/1.0/IChild.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IChild.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IParent.hal
+$(GEN): $(LOCAL_PATH)/IParent.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.tests.inheritance@1.0::IChild
+
+$(GEN): $(LOCAL_PATH)/IChild.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IFetcher.hal
+#
+GEN := $(intermediates)/android/hardware/tests/inheritance/1.0/IFetcher.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFetcher.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IChild.hal
+$(GEN): $(LOCAL_PATH)/IChild.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IParent.hal
+$(GEN): $(LOCAL_PATH)/IParent.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.tests.inheritance@1.0::IFetcher
+
+$(GEN): $(LOCAL_PATH)/IFetcher.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IGrandparent.hal
+#
+GEN := $(intermediates)/android/hardware/tests/inheritance/1.0/IGrandparent.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.tests.inheritance@1.0::IGrandparent
+
+$(GEN): $(LOCAL_PATH)/IGrandparent.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IParent.hal
+#
+GEN := $(intermediates)/android/hardware/tests/inheritance/1.0/IParent.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IParent.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.tests.inheritance@1.0::IParent
+
+$(GEN): $(LOCAL_PATH)/IParent.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.inheritance@1.0-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+#
+# Build IChild.hal
+#
+GEN := $(intermediates)/android/hardware/tests/inheritance/1.0/IChild.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IChild.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IParent.hal
+$(GEN): $(LOCAL_PATH)/IParent.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.tests.inheritance@1.0::IChild
+
+$(GEN): $(LOCAL_PATH)/IChild.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IFetcher.hal
+#
+GEN := $(intermediates)/android/hardware/tests/inheritance/1.0/IFetcher.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFetcher.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IChild.hal
+$(GEN): $(LOCAL_PATH)/IChild.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IParent.hal
+$(GEN): $(LOCAL_PATH)/IParent.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.tests.inheritance@1.0::IFetcher
+
+$(GEN): $(LOCAL_PATH)/IFetcher.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IGrandparent.hal
+#
+GEN := $(intermediates)/android/hardware/tests/inheritance/1.0/IGrandparent.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.tests.inheritance@1.0::IGrandparent
+
+$(GEN): $(LOCAL_PATH)/IGrandparent.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IParent.hal
+#
+GEN := $(intermediates)/android/hardware/tests/inheritance/1.0/IParent.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IParent.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): $(LOCAL_PATH)/IGrandparent.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.tests.inheritance@1.0::IParent
+
+$(GEN): $(LOCAL_PATH)/IParent.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/inheritance/1.0/IChild.hal b/tests/inheritance/1.0/IChild.hal
new file mode 100644
index 0000000..160b12e
--- /dev/null
+++ b/tests/inheritance/1.0/IChild.hal
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2016 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.tests.inheritance@1.0;
+import IParent;
+
+interface IChild extends IParent {
+    doChild();
+};
diff --git a/tests/inheritance/1.0/IFetcher.hal b/tests/inheritance/1.0/IFetcher.hal
new file mode 100644
index 0000000..3df63df
--- /dev/null
+++ b/tests/inheritance/1.0/IFetcher.hal
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2016 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.tests.inheritance@1.0;
+
+import IGrandparent;
+import IParent;
+import IChild;
+
+interface IFetcher {
+
+    getGrandparent(bool sendRemote) generates (IGrandparent parent);
+    getParent(bool sendRemote) generates (IParent parent);
+    getChild(bool sendRemote) generates (IChild child);
+};
diff --git a/tests/inheritance/1.0/IGrandparent.hal b/tests/inheritance/1.0/IGrandparent.hal
new file mode 100644
index 0000000..59339c6
--- /dev/null
+++ b/tests/inheritance/1.0/IGrandparent.hal
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2016 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.tests.inheritance@1.0;
+
+interface IGrandparent {
+    doGrandparent();
+};
diff --git a/tests/inheritance/1.0/IParent.hal b/tests/inheritance/1.0/IParent.hal
new file mode 100644
index 0000000..2abb2e3
--- /dev/null
+++ b/tests/inheritance/1.0/IParent.hal
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2016 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.tests.inheritance@1.0;
+
+import IGrandparent;
+
+interface IParent extends IGrandparent {
+    doParent();
+};
diff --git a/tests/inheritance/1.0/default/Android.bp b/tests/inheritance/1.0/default/Android.bp
new file mode 100644
index 0000000..d97bd83
--- /dev/null
+++ b/tests/inheritance/1.0/default/Android.bp
@@ -0,0 +1,21 @@
+
+
+cc_library_shared {
+    name: "android.hardware.tests.inheritance@1.0-impl",
+    relative_install_path: "hw",
+    srcs: [
+        "Fetcher.cpp",
+        "Parent.cpp",
+        "Child.cpp",
+    ],
+
+    shared_libs: [
+        "libbase",
+        "libhidl",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "android.hardware.tests.inheritance@1.0",
+    ],
+
+}
diff --git a/tests/inheritance/1.0/default/Child.cpp b/tests/inheritance/1.0/default/Child.cpp
new file mode 100644
index 0000000..66720b3
--- /dev/null
+++ b/tests/inheritance/1.0/default/Child.cpp
@@ -0,0 +1,42 @@
+#define LOG_TAG "hidl_test"
+#include <android-base/logging.h>
+
+#include "Child.h"
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace inheritance {
+namespace V1_0 {
+namespace implementation {
+
+// Methods from ::android::hardware::tests::inheritance::V1_0::IGrandparent follow.
+Return<void> Child::doGrandparent()  {
+    ALOGI("SERVER(Bar) Child::doGrandparent");
+    return Void();
+}
+
+// Methods from ::android::hardware::tests::inheritance::V1_0::IParent follow.
+Return<void> Child::doParent()  {
+    ALOGI("SERVER(Bar) Child::doParent");
+    return Void();
+}
+
+
+// Methods from ::android::hardware::tests::inheritance::V1_0::IChild follow.
+Return<void> Child::doChild()  {
+    ALOGI("SERVER(Bar) Child::doChild");
+    return Void();
+}
+
+
+IChild* HIDL_FETCH_IChild(const char* /* name */) {
+    return new Child();
+}
+
+} // namespace implementation
+}  // namespace V1_0
+}  // namespace inheritance
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
diff --git a/tests/inheritance/1.0/default/Child.h b/tests/inheritance/1.0/default/Child.h
new file mode 100644
index 0000000..0d34e83
--- /dev/null
+++ b/tests/inheritance/1.0/default/Child.h
@@ -0,0 +1,44 @@
+#ifndef HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Child_H_
+#define HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Child_H_
+
+#include <android/hardware/tests/inheritance/1.0/IChild.h>
+#include <hidl/Status.h>
+
+#include <hidl/MQDescriptor.h>
+namespace android {
+namespace hardware {
+namespace tests {
+namespace inheritance {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::tests::inheritance::V1_0::IParent;
+using ::android::hardware::tests::inheritance::V1_0::IChild;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+struct Child : public IChild {
+    // Methods from ::android::hardware::tests::inheritance::V1_0::IGrandparent follow.
+    Return<void> doGrandparent()  override;
+
+    // Methods from ::android::hardware::tests::inheritance::V1_0::IParent follow.
+    Return<void> doParent()  override;
+
+    // Methods from ::android::hardware::tests::inheritance::V1_0::IChild follow.
+    Return<void> doChild()  override;
+
+};
+
+extern "C" IChild* HIDL_FETCH_IChild(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace inheritance
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
+
+#endif  // HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Child_H_
diff --git a/tests/inheritance/1.0/default/Fetcher.cpp b/tests/inheritance/1.0/default/Fetcher.cpp
new file mode 100644
index 0000000..28dffaa
--- /dev/null
+++ b/tests/inheritance/1.0/default/Fetcher.cpp
@@ -0,0 +1,58 @@
+
+#define LOG_TAG "hidl_test"
+
+#include "Fetcher.h"
+#include <android-base/logging.h>
+#include <inttypes.h>
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace inheritance {
+namespace V1_0 {
+namespace implementation {
+
+Fetcher::Fetcher() {
+    mPrecious = IChild::getService("local child", true);
+    CHECK(!mPrecious->isRemote());
+}
+
+template <typename CB>
+Return<void> selectService(bool sendRemote, CB &_hidl_cb, sp<IChild> &local) {
+    sp<IChild> toSend;
+    if (sendRemote) {
+        toSend = IChild::getService("child");
+        if (!toSend->isRemote()) {
+            return Status::fromExceptionCode(Status::EX_ILLEGAL_STATE);
+        }
+    } else {
+        toSend = local;
+    }
+    ALOGI("SERVER(Fetcher) selectService returning %p", toSend.get());
+    _hidl_cb(toSend);
+    return Void();
+}
+
+// Methods from ::android::hardware::tests::inheritance::V1_0::IFetcher follow.
+Return<void> Fetcher::getGrandparent(bool sendRemote, getGrandparent_cb _hidl_cb)  {
+    return selectService(sendRemote, _hidl_cb, mPrecious);
+}
+
+Return<void> Fetcher::getParent(bool sendRemote, getParent_cb _hidl_cb)  {
+    return selectService(sendRemote, _hidl_cb, mPrecious);
+}
+
+Return<void> Fetcher::getChild(bool sendRemote, getChild_cb _hidl_cb)  {
+    return selectService(sendRemote, _hidl_cb, mPrecious);
+}
+
+IFetcher* HIDL_FETCH_IFetcher(const char* /* name */) {
+    return new Fetcher();
+}
+
+} // namespace implementation
+}  // namespace V1_0
+}  // namespace inheritance
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
diff --git a/tests/inheritance/1.0/default/Fetcher.h b/tests/inheritance/1.0/default/Fetcher.h
new file mode 100644
index 0000000..d389853
--- /dev/null
+++ b/tests/inheritance/1.0/default/Fetcher.h
@@ -0,0 +1,45 @@
+#ifndef HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Fetcher_H_
+#define HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Fetcher_H_
+
+#include "Child.h"
+#include <android/hardware/tests/inheritance/1.0/IFetcher.h>
+#include <hidl/Status.h>
+
+#include <hidl/MQDescriptor.h>
+namespace android {
+namespace hardware {
+namespace tests {
+namespace inheritance {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::tests::inheritance::V1_0::IFetcher;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+struct Fetcher : public IFetcher {
+
+    Fetcher();
+
+    // Methods from ::android::hardware::tests::inheritance::V1_0::IFetcher follow.
+    Return<void> getGrandparent(bool sendRemote, getGrandparent_cb _hidl_cb)  override;
+    Return<void> getParent(bool sendRemote, getParent_cb _hidl_cb)  override;
+    Return<void> getChild(bool sendRemote, getChild_cb _hidl_cb)  override;
+
+private:
+    sp<IChild> mPrecious;
+};
+
+extern "C" IFetcher* HIDL_FETCH_IFetcher(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace inheritance
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
+
+#endif  // HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Fetcher_H_
diff --git a/tests/inheritance/1.0/default/Grandparent.cpp b/tests/inheritance/1.0/default/Grandparent.cpp
new file mode 100644
index 0000000..c53dc87
--- /dev/null
+++ b/tests/inheritance/1.0/default/Grandparent.cpp
@@ -0,0 +1,29 @@
+#define LOG_TAG "hidl_test"
+#include <android-base/logging.h>
+
+#include "Grandparent.h"
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace inheritance {
+namespace V1_0 {
+namespace implementation {
+
+// Methods from ::android::hardware::tests::inheritance::V1_0::IGrandparent follow.
+Return<void> Grandparent::doGrandparent()  {
+    ALOGI("SERVER(Bar) Grandparent::doGrandparent");
+    return Void();
+}
+
+
+IGrandparent* HIDL_FETCH_IGrandparent(const char* /* name */) {
+    return new Grandparent();
+}
+
+} // namespace implementation
+}  // namespace V1_0
+}  // namespace inheritance
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
diff --git a/tests/inheritance/1.0/default/Grandparent.h b/tests/inheritance/1.0/default/Grandparent.h
new file mode 100644
index 0000000..e1113bf
--- /dev/null
+++ b/tests/inheritance/1.0/default/Grandparent.h
@@ -0,0 +1,37 @@
+#ifndef HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Grandparent_H_
+#define HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Grandparent_H_
+
+#include <android/hardware/tests/inheritance/1.0/IGrandparent.h>
+#include <hidl/Status.h>
+
+#include <hidl/MQDescriptor.h>
+namespace android {
+namespace hardware {
+namespace tests {
+namespace inheritance {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::tests::inheritance::V1_0::IGrandparent;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+struct Grandparent : public IGrandparent {
+    // Methods from ::android::hardware::tests::inheritance::V1_0::IGrandparent follow.
+    Return<void> doGrandparent()  override;
+
+};
+
+extern "C" IGrandparent* HIDL_FETCH_IGrandparent(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace inheritance
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
+
+#endif  // HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Grandparent_H_
diff --git a/tests/inheritance/1.0/default/Parent.cpp b/tests/inheritance/1.0/default/Parent.cpp
new file mode 100644
index 0000000..bdd20c9
--- /dev/null
+++ b/tests/inheritance/1.0/default/Parent.cpp
@@ -0,0 +1,35 @@
+#define LOG_TAG "hidl_test"
+#include <android-base/logging.h>
+
+#include "Parent.h"
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace inheritance {
+namespace V1_0 {
+namespace implementation {
+
+// Methods from ::android::hardware::tests::inheritance::V1_0::IGrandparent follow.
+Return<void> Parent::doGrandparent()  {
+    ALOGI("SERVER(Bar) Parent::doGrandparent");
+    return Void();
+}
+
+// Methods from ::android::hardware::tests::inheritance::V1_0::IParent follow.
+Return<void> Parent::doParent()  {
+    ALOGI("SERVER(Bar) Parent::doParent");
+    return Void();
+}
+
+
+IParent* HIDL_FETCH_IParent(const char* /* name */) {
+    return new Parent();
+}
+
+} // namespace implementation
+}  // namespace V1_0
+}  // namespace inheritance
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
diff --git a/tests/inheritance/1.0/default/Parent.h b/tests/inheritance/1.0/default/Parent.h
new file mode 100644
index 0000000..2e07fdc
--- /dev/null
+++ b/tests/inheritance/1.0/default/Parent.h
@@ -0,0 +1,40 @@
+#ifndef HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Parent_H_
+#define HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Parent_H_
+
+#include <android/hardware/tests/inheritance/1.0/IParent.h>
+#include <hidl/Status.h>
+
+#include <hidl/MQDescriptor.h>
+namespace android {
+namespace hardware {
+namespace tests {
+namespace inheritance {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::tests::inheritance::V1_0::IParent;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+struct Parent : public IParent {
+    // Methods from ::android::hardware::tests::inheritance::V1_0::IGrandparent follow.
+    Return<void> doGrandparent()  override;
+
+    // Methods from ::android::hardware::tests::inheritance::V1_0::IParent follow.
+    Return<void> doParent()  override;
+
+};
+
+extern "C" IParent* HIDL_FETCH_IParent(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace inheritance
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
+
+#endif  // HIDL_GENERATED_android_hardware_tests_inheritance_V1_0_Parent_H_
diff --git a/tests/msgq/1.0/ITestMsgQ.hal b/tests/msgq/1.0/ITestMsgQ.hal
index fc96181..dcdc74a 100644
--- a/tests/msgq/1.0/ITestMsgQ.hal
+++ b/tests/msgq/1.0/ITestMsgQ.hal
@@ -18,9 +18,10 @@
 
 interface ITestMsgQ {
     /*
-     * This method requests the service to set up Synchronous read/write
+     * This method requests the service to set up a synchronous read/write
      * wait-free FMQ with the client as reader.
-     * @return ret Will be true if the setup is successful, false otherwise.
+     *
+     * @return ret True if the setup is successful.
      * @return mqDesc This structure describes the FMQ that was
      * set up by the service. Client can use it to set up the FMQ at its end.
      */
@@ -28,18 +29,54 @@
         generates(bool ret, MQDescriptorSync mqDesc);
 
     /*
-     * This method request the service to write into the FMQ.
-     * @param count Number to messages to write.
-     * @return ret Will be true if the write operation was successful,
-     * false otherwise.
+     * This method requests the service to set up an unsynchronized write
+     * wait-free FMQ with the client as reader.
+     *
+     * @return ret True if the setup is successful.
+     * @return mqDesc This structure describes the FMQ that was
+     * set up by the service. Client can use it to set up the FMQ at its end.
      */
-    requestWrite(int32_t count) generates(bool ret);
+    configureFmqUnsyncWrite()
+        generates(bool ret, MQDescriptorUnsync mqDesc);
 
     /*
-     * This method request the service to read from the FMQ.
-     * @param count Number to messages to read.
-     * @return ret Will be true if the read operation was successful, false
-     * otherwise.
+     * This method request the service to write into the synchronized read/write
+     * flavor of the FMQ.
+     *
+     * @param count Number to messages to write.
+     *
+     * @return ret True if the write operation was successful.
      */
-    requestRead(int32_t count) generates(bool ret);
+    requestWriteFmqSync(int32_t count) generates(bool ret);
+
+    /*
+     * This method request the service to read from the synchronized read/write
+     * FMQ.
+     *
+     * @param count Number to messages to read.
+     *
+     * @return ret True if the read operation was successful.
+     */
+    requestReadFmqSync(int32_t count) generates(bool ret);
+
+    /*
+     * This method request the service to write into the unsynchronized flavor
+     * of FMQ.
+     *
+     * @param count Number to messages to write.
+     *
+     * @return ret True if the write operation was successful.
+     */
+    requestWriteFmqUnsync(int32_t count) generates(bool ret);
+
+    /*
+     * This method request the service to read from the unsynchronized flavor of
+     * FMQ.
+     *
+     * @param count Number to messages to read.
+     *
+     * @return ret Will be True if the read operation was successful.
+     */
+    requestReadFmqUnsync(int32_t count) generates(bool ret);
+
 };
diff --git a/thermal/1.0/Android.bp b/thermal/1.0/Android.bp
index 0c5dd19..ae64dde 100644
--- a/thermal/1.0/Android.bp
+++ b/thermal/1.0/Android.bp
@@ -43,4 +43,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/thermal/1.0/Android.mk b/thermal/1.0/Android.mk
index 47a4d61..87879ff 100644
--- a/thermal/1.0/Android.mk
+++ b/thermal/1.0/Android.mk
@@ -302,5 +302,37 @@
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.thermal@1.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/thermal/1.0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/IThermal.hal
+
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava-constants -randroid.hardware:hardware/interfaces \
+        android.hardware.thermal@1.0
+
+$(GEN):
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+# Avoid dependency cycle of framework.jar -> this-library -> framework.jar
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/thermal/1.0/types.hal b/thermal/1.0/types.hal
index b3dcc7d..26a0f6f 100644
--- a/thermal/1.0/types.hal
+++ b/thermal/1.0/types.hal
@@ -17,6 +17,7 @@
 package android.hardware.thermal@1.0;
 
 /** Device temperature types */
+@export
 enum TemperatureType : int32_t {
     UNKNOWN = -1,
     CPU = 0,
diff --git a/thermal/Android.bp b/thermal/Android.bp
new file mode 100644
index 0000000..ba90f2c
--- /dev/null
+++ b/thermal/Android.bp
@@ -0,0 +1,5 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+    "1.0/default",
+]
diff --git a/tv/Android.bp b/tv/Android.bp
new file mode 100644
index 0000000..095839f
--- /dev/null
+++ b/tv/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "input/1.0",
+]
diff --git a/tv/input/1.0/Android.bp b/tv/input/1.0/Android.bp
new file mode 100644
index 0000000..895aa73
--- /dev/null
+++ b/tv/input/1.0/Android.bp
@@ -0,0 +1,60 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+genrule {
+    name: "android.hardware.tv.input@1.0_genc++",
+    tool: "hidl-gen",
+    cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.tv.input@1.0",
+    srcs: [
+        "types.hal",
+        "ITvInput.hal",
+        "ITvInputCallback.hal",
+    ],
+    out: [
+        "android/hardware/tv/input/1.0/types.cpp",
+        "android/hardware/tv/input/1.0/TvInputAll.cpp",
+        "android/hardware/tv/input/1.0/TvInputCallbackAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tv.input@1.0_genc++_headers",
+    tool: "hidl-gen",
+    cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.tv.input@1.0",
+    srcs: [
+        "types.hal",
+        "ITvInput.hal",
+        "ITvInputCallback.hal",
+    ],
+    out: [
+        "android/hardware/tv/input/1.0/types.h",
+        "android/hardware/tv/input/1.0/ITvInput.h",
+        "android/hardware/tv/input/1.0/IHwTvInput.h",
+        "android/hardware/tv/input/1.0/BnTvInput.h",
+        "android/hardware/tv/input/1.0/BpTvInput.h",
+        "android/hardware/tv/input/1.0/BsTvInput.h",
+        "android/hardware/tv/input/1.0/ITvInputCallback.h",
+        "android/hardware/tv/input/1.0/IHwTvInputCallback.h",
+        "android/hardware/tv/input/1.0/BnTvInputCallback.h",
+        "android/hardware/tv/input/1.0/BpTvInputCallback.h",
+        "android/hardware/tv/input/1.0/BsTvInputCallback.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.tv.input@1.0",
+    generated_sources: ["android.hardware.tv.input@1.0_genc++"],
+    generated_headers: ["android.hardware.tv.input@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.tv.input@1.0_genc++_headers"],
+    shared_libs: [
+        "libhidl",
+        "libhwbinder",
+        "libutils",
+        "libcutils",
+        "android.hardware.audio.common@2.0",
+    ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
+}
diff --git a/tv/input/1.0/ITvInput.hal b/tv/input/1.0/ITvInput.hal
new file mode 100644
index 0000000..43de276
--- /dev/null
+++ b/tv/input/1.0/ITvInput.hal
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2016 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.tv.input@1.0;
+
+import ITvInputCallback;
+
+interface ITvInput {
+    /*
+     * Sets a callback for events.
+     *
+     * Note that initially no device is available in the client side, so the
+     * implementation must notify all the currently available devices including
+     * static devices via callback once callback is set.
+     *
+     * @param callback Callback object to pass events.
+     */
+    @entry
+    @exit
+    @callflow(next={"getStreamConfigurations"})
+    setCallback(ITvInputCallback callback);
+
+    /*
+     * Gets stream configurations for a specific device.
+     *
+     * The configs object is valid only until the next
+     * STREAM_CONFIGURATIONS_CHANGED event.
+     *
+     * @param deviceId Device ID for the configurations.
+     * @return result OK upon success. Otherwise,
+     *         INVALID_ARGUMENTS if the given device ID is not valid.
+     * @return configurations An array of available configurations.
+     */
+    @callflow(next={"openStream", "getStreamConfigurations", "closeStream"})
+    getStreamConfigurations(int32_t deviceId)
+            generates (Result result, vec<TvStreamConfig> configurations);
+
+    /*
+     * Opens a specific stream in a device.
+     *
+     * @param deviceId Device ID for the steam to open.
+     * @param streamId Steam ID for the steam to open. Must be one of the
+     *         stream IDs returned from getStreamConfigurations().
+     * @return result OK upon success. Otherwise,
+     *         INVALID_ARGUMENTS if any of given IDs are not valid;
+     *         INVALID_STATE if the stream with the given ID is already open;
+     *         NO_RESOURCE if the client must close other streams to open the
+     *                 stream.
+     * @return sidebandStream handle for sideband stream.
+     */
+    @callflow(next={"closeStream", "getStreamConfigurations", "openStream"})
+    openStream(int32_t deviceId, int32_t streamId)
+            generates (Result result, handle sidebandStream);
+
+    /*
+     * Closes a specific stream in a device.
+     *
+     * @param deviceId Device ID for the steam to open.
+     * @param streamId Steam ID for the steam to open.
+     * @return result OK upon success. Otherwise,
+     *         INVALID_ARGUMENTS if any of given IDs are not valid;
+     *         INVALID_STATE if the stream with the given ID is not open.
+     */
+    @callflow(next={"getStreamConfigurations", "openStream", "closeStream"})
+    closeStream(int32_t deviceId, int32_t streamId) generates (Result result);
+};
diff --git a/tv/input/1.0/ITvInputCallback.hal b/tv/input/1.0/ITvInputCallback.hal
new file mode 100644
index 0000000..f2f07a0
--- /dev/null
+++ b/tv/input/1.0/ITvInputCallback.hal
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2016 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.tv.input@1.0;
+
+interface ITvInputCallback {
+    /*
+     * Notifies the client that an event has occured. For possible event types,
+     * check TvInputEventType.
+     *
+     * @param event Event passed to the client.
+     */
+    notify(TvInputEvent event);
+};
diff --git a/tv/input/1.0/default/Android.mk b/tv/input/1.0/default/Android.mk
new file mode 100644
index 0000000..520b0bf
--- /dev/null
+++ b/tv/input/1.0/default/Android.mk
@@ -0,0 +1,44 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tv.input@1.0-impl
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_SRC_FILES := \
+    TvInput.cpp \
+
+LOCAL_SHARED_LIBRARIES := \
+    libbase \
+    liblog \
+    libhardware \
+    libhidl \
+    libhwbinder \
+    libutils \
+    android.hardware.audio.common@2.0 \
+    android.hardware.tv.input@1.0 \
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_MODULE := android.hardware.tv.input@1.0-service
+LOCAL_INIT_RC := android.hardware.tv.input@1.0-service.rc
+LOCAL_SRC_FILES := \
+    service.cpp \
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog \
+    libcutils \
+    libdl \
+    libbase \
+    libutils \
+    libhardware_legacy \
+    libhardware \
+
+LOCAL_SHARED_LIBRARIES += \
+    libhwbinder \
+    libhidl \
+    android.hardware.audio.common@2.0 \
+    android.hardware.tv.input@1.0 \
+
+include $(BUILD_EXECUTABLE)
+
diff --git a/tv/input/1.0/default/TvInput.cpp b/tv/input/1.0/default/TvInput.cpp
new file mode 100644
index 0000000..6181ffb
--- /dev/null
+++ b/tv/input/1.0/default/TvInput.cpp
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#define LOG_TAG "android.hardware.tv.input@1.0-service"
+#include <android-base/logging.h>
+
+#include "TvInput.h"
+
+const native_handle_t kNullNativeHandle{sizeof(native_handle_t), 0, 0, {}};
+
+namespace android {
+namespace hardware {
+namespace tv {
+namespace input {
+namespace V1_0 {
+namespace implementation {
+
+static_assert(TV_INPUT_TYPE_OTHER_HARDWARE == static_cast<int>(TvInputType::OTHER),
+        "TvInputType::OTHER must match legacy value.");
+static_assert(TV_INPUT_TYPE_TUNER == static_cast<int>(TvInputType::TUNER),
+        "TvInputType::TUNER must match legacy value.");
+static_assert(TV_INPUT_TYPE_COMPOSITE == static_cast<int>(TvInputType::COMPOSITE),
+        "TvInputType::COMPOSITE must match legacy value.");
+static_assert(TV_INPUT_TYPE_SVIDEO == static_cast<int>(TvInputType::SVIDEO),
+        "TvInputType::SVIDEO must match legacy value.");
+static_assert(TV_INPUT_TYPE_SCART == static_cast<int>(TvInputType::SCART),
+        "TvInputType::SCART must match legacy value.");
+static_assert(TV_INPUT_TYPE_COMPONENT == static_cast<int>(TvInputType::COMPONENT),
+        "TvInputType::COMPONENT must match legacy value.");
+static_assert(TV_INPUT_TYPE_VGA == static_cast<int>(TvInputType::VGA),
+        "TvInputType::VGA must match legacy value.");
+static_assert(TV_INPUT_TYPE_DVI == static_cast<int>(TvInputType::DVI),
+        "TvInputType::DVI must match legacy value.");
+static_assert(TV_INPUT_TYPE_HDMI == static_cast<int>(TvInputType::HDMI),
+        "TvInputType::HDMI must match legacy value.");
+static_assert(TV_INPUT_TYPE_DISPLAY_PORT == static_cast<int>(TvInputType::DISPLAY_PORT),
+        "TvInputType::DISPLAY_PORT must match legacy value.");
+
+static_assert(TV_INPUT_EVENT_DEVICE_AVAILABLE == static_cast<int>(
+        TvInputEventType::DEVICE_AVAILABLE),
+        "TvInputEventType::DEVICE_AVAILABLE must match legacy value.");
+static_assert(TV_INPUT_EVENT_DEVICE_UNAVAILABLE == static_cast<int>(
+        TvInputEventType::DEVICE_UNAVAILABLE),
+        "TvInputEventType::DEVICE_UNAVAILABLE must match legacy value.");
+static_assert(TV_INPUT_EVENT_STREAM_CONFIGURATIONS_CHANGED == static_cast<int>(
+        TvInputEventType::STREAM_CONFIGURATIONS_CHANGED),
+        "TvInputEventType::STREAM_CONFIGURATIONS_CHANGED must match legacy value.");
+
+sp<ITvInputCallback> TvInput::mCallback = nullptr;
+
+TvInput::TvInput(tv_input_device_t* device) : mDevice(device) {
+    mCallbackOps.notify = &TvInput::notify;
+}
+
+TvInput::~TvInput() {
+    if (mDevice != nullptr) {
+        free(mDevice);
+    }
+}
+
+// Methods from ::android::hardware::tv_input::V1_0::ITvInput follow.
+Return<void> TvInput::setCallback(const sp<ITvInputCallback>& callback)  {
+    mCallback = callback;
+    if (mCallback != nullptr) {
+        mDevice->initialize(mDevice, &mCallbackOps, nullptr);
+    }
+    return Void();
+}
+
+Return<void> TvInput::getStreamConfigurations(int32_t deviceId, getStreamConfigurations_cb cb)  {
+    int32_t configCount = 0;
+    const tv_stream_config_t* configs = nullptr;
+    int ret = mDevice->get_stream_configurations(mDevice, deviceId, &configCount, &configs);
+    Result res = Result::UNKNOWN;
+    hidl_vec<TvStreamConfig> tvStreamConfigs;
+    if (ret == 0) {
+        res = Result::OK;
+        tvStreamConfigs.resize(getSupportedConfigCount(configCount, configs));
+        int32_t pos = 0;
+        for (int32_t i = 0; i < configCount; ++i) {
+            if (isSupportedStreamType(configs[i].type)) {
+                tvStreamConfigs[pos].streamId = configs[i].stream_id;
+                tvStreamConfigs[pos].maxVideoWidth = configs[i].max_video_width;
+                tvStreamConfigs[pos].maxVideoHeight = configs[i].max_video_height;
+                ++pos;
+            }
+        }
+    }
+    cb(res, tvStreamConfigs);
+    return Void();
+}
+
+Return<void> TvInput::openStream(int32_t deviceId, int32_t streamId, openStream_cb cb)  {
+    tv_stream_t stream;
+    stream.stream_id = streamId;
+    int ret = mDevice->open_stream(mDevice, deviceId, &stream);
+    Result res = Result::UNKNOWN;
+    native_handle_t* sidebandStream = nullptr;
+    if (ret == 0) {
+        if (isSupportedStreamType(stream.type)) {
+            res = Result::OK;
+            sidebandStream = stream.sideband_stream_source_handle;
+        }
+    } else {
+        // TODO(b/30814137)
+        sidebandStream = const_cast<native_handle_t*>(&kNullNativeHandle);
+        if (ret == -EBUSY) {
+            res = Result::NO_RESOURCE;
+        } else if (ret == -EEXIST) {
+            res = Result::INVALID_STATE;
+        } else if (ret == -EINVAL) {
+            res = Result::INVALID_ARGUMENTS;
+        }
+    }
+    cb(res, sidebandStream);
+    return Void();
+}
+
+Return<Result> TvInput::closeStream(int32_t deviceId, int32_t streamId)  {
+    int ret = mDevice->close_stream(mDevice, deviceId, streamId);
+    Result res = Result::UNKNOWN;
+    if (ret == 0) {
+        res = Result::OK;
+    } else if (ret == -ENOENT) {
+        res = Result::INVALID_STATE;
+    } else if (ret == -EINVAL) {
+        res = Result::INVALID_ARGUMENTS;
+    }
+    return res;
+}
+
+// static
+void TvInput::notify(struct tv_input_device* __unused, tv_input_event_t* event,
+        void* __unused) {
+    if (mCallback != nullptr && event != nullptr) {
+        // Capturing is no longer supported.
+        if (event->type >= TV_INPUT_EVENT_CAPTURE_SUCCEEDED) {
+            return;
+        }
+        TvInputEvent tvInputEvent;
+        tvInputEvent.type = static_cast<TvInputEventType>(event->type);
+        tvInputEvent.deviceInfo.deviceId = event->device_info.device_id;
+        tvInputEvent.deviceInfo.type = static_cast<TvInputType>(
+                event->device_info.type);
+        tvInputEvent.deviceInfo.portId = event->device_info.hdmi.port_id;
+        // TODO: Ensure the legacy audio type code is the same once audio HAL default
+        // implementation is ready.
+        tvInputEvent.deviceInfo.audioType = static_cast<AudioDevice>(
+                event->device_info.audio_type);
+        memset(tvInputEvent.deviceInfo.audioAddress.data(), 0,
+                tvInputEvent.deviceInfo.audioAddress.size());
+        const char* address = event->device_info.audio_address;
+        if (address != nullptr) {
+            size_t size = strlen(address);
+            if (size > tvInputEvent.deviceInfo.audioAddress.size()) {
+                LOG(ERROR) << "Audio address is too long. Address:" << address << "";
+                return;
+            }
+            for (size_t i = 0; i < size; ++i) {
+                tvInputEvent.deviceInfo.audioAddress[i] =
+                    static_cast<uint8_t>(event->device_info.audio_address[i]);
+            }
+        }
+        mCallback->notify(tvInputEvent);
+    }
+}
+
+// static
+uint32_t TvInput::getSupportedConfigCount(uint32_t configCount,
+        const tv_stream_config_t* configs) {
+    uint32_t supportedConfigCount = 0;
+    for (uint32_t i = 0; i < configCount; ++i) {
+        if (isSupportedStreamType(configs[i].type)) {
+            supportedConfigCount++;
+        }
+    }
+    return supportedConfigCount;
+}
+
+// static
+bool TvInput::isSupportedStreamType(int type) {
+    // Buffer producer type is no longer supported.
+    return type != TV_STREAM_TYPE_BUFFER_PRODUCER;
+}
+
+ITvInput* HIDL_FETCH_ITvInput(const char* name) {
+    int ret = 0;
+    const hw_module_t* hw_module = nullptr;
+    tv_input_device_t* input_device;
+    ret = hw_get_module(TV_INPUT_HARDWARE_MODULE_ID, &hw_module);
+    if (ret == 0 && hw_module->methods->open != nullptr) {
+        ret = hw_module->methods->open(hw_module, TV_INPUT_DEFAULT_DEVICE,
+                reinterpret_cast<hw_device_t**>(&input_device));
+        if (ret == 0) {
+            return new TvInput(input_device);
+        }
+        else {
+            LOG(ERROR) << "Passthrough failed to load legacy HAL.";
+            return nullptr;
+        }
+    }
+    else {
+        LOG(ERROR) << "hw_get_module " << name << " failed: " << ret;
+        return nullptr;
+    }
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace input
+}  // namespace tv
+}  // namespace hardware
+}  // namespace android
diff --git a/tv/input/1.0/default/TvInput.h b/tv/input/1.0/default/TvInput.h
new file mode 100644
index 0000000..81cbb20
--- /dev/null
+++ b/tv/input/1.0/default/TvInput.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+#ifndef HIDL_GENERATED_android_hardware_tv_input_V1_0_TvInput_H_
+#define HIDL_GENERATED_android_hardware_tv_input_V1_0_TvInput_H_
+
+#include <android/hardware/tv/input/1.0/ITvInput.h>
+#include <hidl/Status.h>
+#include <hardware/tv_input.h>
+
+#include <hidl/MQDescriptor.h>
+
+namespace android {
+namespace hardware {
+namespace tv {
+namespace input {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::audio::common::V2_0::AudioDevice;
+using ::android::hardware::tv::input::V1_0::ITvInput;
+using ::android::hardware::tv::input::V1_0::ITvInputCallback;
+using ::android::hardware::tv::input::V1_0::Result;
+using ::android::hardware::tv::input::V1_0::TvInputEvent;
+using ::android::hardware::tv::input::V1_0::TvStreamConfig;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+struct TvInput : public ITvInput {
+    TvInput(tv_input_device_t* device);
+    ~TvInput();
+    Return<void> setCallback(const sp<ITvInputCallback>& callback)  override;
+    Return<void> getStreamConfigurations(int32_t deviceId,
+            getStreamConfigurations_cb _hidl_cb)  override;
+    Return<void> openStream(int32_t deviceId, int32_t streamId,
+            openStream_cb _hidl_cb)  override;
+    Return<Result> closeStream(int32_t deviceId, int32_t streamId)  override;
+
+    static void notify(struct tv_input_device* __unused, tv_input_event_t* event,
+            void* __unused);
+    static uint32_t getSupportedConfigCount(uint32_t configCount,
+            const tv_stream_config_t* configs);
+    static bool isSupportedStreamType(int type);
+
+    private:
+    static sp<ITvInputCallback> mCallback;
+    tv_input_callback_ops_t mCallbackOps;
+    tv_input_device_t* mDevice;
+};
+
+extern "C" ITvInput* HIDL_FETCH_ITvInput(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace input
+}  // namespace tv
+}  // namespace hardware
+}  // namespace android
+
+#endif  // HIDL_GENERATED_android_hardware_tv_input_V1_0_TvInput_H_
diff --git a/tv/input/1.0/default/android.hardware.tv.input@1.0-service.rc b/tv/input/1.0/default/android.hardware.tv.input@1.0-service.rc
new file mode 100644
index 0000000..c5bc0b7
--- /dev/null
+++ b/tv/input/1.0/default/android.hardware.tv.input@1.0-service.rc
@@ -0,0 +1,4 @@
+service tv-input-1-0 /system/bin/hw/android.hardware.tv.input@1.0-service
+    class hal
+    user system
+    group system readproc
diff --git a/tv/input/1.0/default/service.cpp b/tv/input/1.0/default/service.cpp
new file mode 100644
index 0000000..d59c848
--- /dev/null
+++ b/tv/input/1.0/default/service.cpp
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#define LOG_TAG "android.hardware.tv_input@1.0-service"
+
+#include <android/hardware/tv/input/1.0/ITvInput.h>
+
+#include <hidl/LegacySupport.h>
+
+using android::sp;
+
+// Generated HIDL files
+using android::hardware::tv::input::V1_0::ITvInput;
+using android::hardware::defaultPassthroughServiceImplementation;
+
+int main() {
+    return defaultPassthroughServiceImplementation<ITvInput>("tv.input");
+}
diff --git a/tv/input/1.0/types.hal b/tv/input/1.0/types.hal
new file mode 100644
index 0000000..89a7acc
--- /dev/null
+++ b/tv/input/1.0/types.hal
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2016 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.tv.input@1.0;
+
+import android.hardware.audio.common@2.0;
+
+enum Result {
+    OK,
+    UNKNOWN,
+    NO_RESOURCE,
+    INVALID_ARGUMENTS,
+    INVALID_STATE,
+};
+
+/* Type of physical TV input. */
+enum TvInputType {
+    OTHER = 1,         // Generic hardware.
+    TUNER = 2,         // Tuner. e.g. built-in terrestrial tuner
+    COMPOSITE = 3,
+    SVIDEO = 4,
+    SCART = 5,
+    COMPONENT = 6,
+    VGA = 7,
+    DVI = 8,
+    HDMI = 9,          // Physical HDMI port. e.g. HDMI 1
+    DISPLAY_PORT = 10,
+};
+
+struct TvInputDeviceInfo {
+    int32_t deviceId;
+    TvInputType type;
+    uint32_t portId;          // HDMI port ID number. e.g. 2 for HDMI 2
+    AudioDevice audioType;    // Audio device type. e.g AudioDevice::IN_HDMI
+    uint8_t[32] audioAddress; // Audio device address. "" if N/A. If the text
+                              // length is less than 32, the remaining part
+                              // must be filled with 0s.
+};
+
+enum TvInputEventType {
+    /*
+     * Hardware notifies the framework that a device is available.
+     *
+     * Note that DEVICE_AVAILABLE and DEVICE_UNAVAILABLE events do not represent
+     * hotplug events (i.e. plugging cable into or out of the physical port).
+     * These events notify the framework whether the port is available or not.
+     * For a concrete example, when a user plugs in or pulls out the HDMI cable
+     * from a HDMI port, it does not generate DEVICE_AVAILABLE and/or
+     * DEVICE_UNAVAILABLE events. However, if a user inserts a pluggable USB
+     * tuner into the Android device, it must generate a DEVICE_AVAILABLE event
+     * and when the port is removed, it must generate a DEVICE_UNAVAILABLE
+     * event.
+     *
+     * For hotplug events, please see STREAM_CONFIGURATION_CHANGED for more
+     * details.
+     *
+     * HAL implementation must register devices by using this event when the
+     * device boots up. The framework must recognize device reported via this
+     * event only.
+     */
+    DEVICE_AVAILABLE = 1,
+
+    /*
+     * Hardware notifies the framework that a device is unavailable.
+     *
+     * HAL implementation must generate this event when a device registered
+     * by DEVICE_AVAILABLE is no longer available. For example,
+     * the event can indicate that a USB tuner is plugged out from the Android
+     * device.
+     *
+     * Note that this event is not for indicating cable plugged out of the port;
+     * for that purpose, the implementation must use
+     * STREAM_CONFIGURATION_CHANGED event. This event represents the port itself
+     * being no longer available.
+     */
+    DEVICE_UNAVAILABLE = 2,
+
+    /*
+     * Stream configurations are changed. Client must regard all open streams
+     * at the specific device are closed, and must call
+     * getStreamConfigurations() again, opening some of them if necessary.
+     *
+     * HAL implementation must generate this event when the available stream
+     * configurations change for any reason. A typical use case of this event
+     * is to notify the framework that the input signal has changed resolution,
+     * or that the cable is plugged out so that the number of available streams
+     * is 0.
+     *
+     * The implementation must use this event to indicate hotplug status of the
+     * port. the framework regards input devices with no available streams as
+     * disconnected, so the implementation can generate this event with no
+     * available streams to indicate that this device is disconnected, and vice
+     * versa.
+     */
+    STREAM_CONFIGURATIONS_CHANGED = 3,
+};
+
+struct TvInputEvent {
+    TvInputEventType type;
+    /*
+     * DEVICE_AVAILABLE: all fields are relevant.
+     * DEVICE_UNAVAILABLE: only deviceId is relevant.
+     * STREAM_CONFIGURATIONS_CHANGED: only deviceId is relevant.
+     */
+    TvInputDeviceInfo deviceInfo;
+};
+
+struct TvStreamConfig {
+    int32_t streamId;
+    uint32_t maxVideoWidth;  // Max width of the stream.
+    uint32_t maxVideoHeight; // Max height of the stream.
+};
diff --git a/update-makefiles.sh b/update-makefiles.sh
index 939a9c7..8b82013 100755
--- a/update-makefiles.sh
+++ b/update-makefiles.sh
@@ -18,17 +18,28 @@
   hidl-gen -Landroidbp -r android.hardware:hardware/interfaces $p;
 done
 
-bp="hardware/interfaces/Android.bp"
-androidbps=$(find hardware/interfaces/*/      \
-             -name "Android.bp"               \
-             -exec dirname {} \;              \
-             | sort)
+# subdirectories of hardware/interfaces which contain an Android.bp file
+android_dirs=$(find hardware/interfaces/*/     \
+              -name "Android.bp"               \
+              -printf "%h\n"                   \
+              | cut -d "/" -f1-3               \
+              | sort | uniq)
 
-echo "Updating $bp"
+echo "Updating Android.bp files."
 
-echo "// This is an autogenerated file, do not edit." > $bp;
-echo "subdirs = [" >> $bp;
-for a in $androidbps; do
-  echo "    \"${a#*hardware/interfaces/}\"," >> $bp;
+for bp_dir in $android_dirs; do
+  bp="$bp_dir/Android.bp"
+  # locations of Android.bp files in specific subdirectory of hardware/interfaces
+  android_bps=$(find $bp_dir                   \
+                -name "Android.bp"             \
+                ! -path $bp_dir/Android.bp     \
+                -printf "%h\n"                 \
+                | sort)
+
+  echo "// This is an autogenerated file, do not edit." > "$bp";
+  echo "subdirs = [" >> "$bp";
+  for a in $android_bps; do
+    echo "    \"${a#$bp_dir/}\"," >> "$bp";
+  done
+  echo "]" >> "$bp";
 done
-echo "]" >> $bp;
\ No newline at end of file
diff --git a/vehicle/2.0/Android.bp b/vehicle/2.0/Android.bp
index cb30e1b..981103c 100644
--- a/vehicle/2.0/Android.bp
+++ b/vehicle/2.0/Android.bp
@@ -51,4 +51,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/vehicle/Android.bp b/vehicle/Android.bp
new file mode 100644
index 0000000..c12cd4f
--- /dev/null
+++ b/vehicle/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "2.0",
+]
diff --git a/vibrator/1.0/Android.bp b/vibrator/1.0/Android.bp
index 64afdb5..270e7bf 100644
--- a/vibrator/1.0/Android.bp
+++ b/vibrator/1.0/Android.bp
@@ -43,4 +43,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/vibrator/Android.bp b/vibrator/Android.bp
new file mode 100644
index 0000000..ba90f2c
--- /dev/null
+++ b/vibrator/Android.bp
@@ -0,0 +1,5 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+    "1.0/default",
+]
diff --git a/vr/1.0/Android.bp b/vr/1.0/Android.bp
index 8fd00c5..63a0789 100644
--- a/vr/1.0/Android.bp
+++ b/vr/1.0/Android.bp
@@ -39,4 +39,9 @@
         "libutils",
         "libcutils",
     ],
+export_shared_lib_headers: [
+    "libhidl",
+    "libhwbinder",
+    "libutils",
+    ],
 }
diff --git a/vr/1.0/Android.mk b/vr/1.0/Android.mk
new file mode 100644
index 0000000..b35ca3d
--- /dev/null
+++ b/vr/1.0/Android.mk
@@ -0,0 +1,64 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.vr@1.0-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+#
+# Build IVr.hal
+#
+GEN := $(intermediates)/android/hardware/vr/1.0/IVr.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVr.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.vr@1.0::IVr
+
+$(GEN): $(LOCAL_PATH)/IVr.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.vr@1.0-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+#
+# Build IVr.hal
+#
+GEN := $(intermediates)/android/hardware/vr/1.0/IVr.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVr.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava -randroid.hardware:hardware/interfaces \
+        android.hardware.vr@1.0::IVr
+
+$(GEN): $(LOCAL_PATH)/IVr.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/vr/Android.bp b/vr/Android.bp
new file mode 100644
index 0000000..ba90f2c
--- /dev/null
+++ b/vr/Android.bp
@@ -0,0 +1,5 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+    "1.0/default",
+]
diff --git a/wifi/Android.bp b/wifi/Android.bp
new file mode 100644
index 0000000..ea43db4
--- /dev/null
+++ b/wifi/Android.bp
@@ -0,0 +1,5 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+    "supplicant/1.0",
+]