Merge "context_hub HAL uses "default" service name"
diff --git a/CleanSpec.mk b/CleanSpec.mk
new file mode 100644
index 0000000..962f6cd
--- /dev/null
+++ b/CleanSpec.mk
@@ -0,0 +1,50 @@
+# Copyright 2017 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.
+#
+
+# If you don't need to do a full clean build but would like to touch
+# a file or delete some intermediate files, add a clean step to the end
+# of the list.  These steps will only be run once, if they haven't been
+# run before.
+#
+# E.g.:
+#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
+#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
+#
+# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
+# files that are missing or have been moved.
+#
+# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
+# Use $(OUT_DIR) to refer to the "out" directory.
+#
+# If you need to re-do something that's already mentioned, just copy
+# the command and add it to the bottom of the list.  E.g., if a change
+# that you made last week required touching a file and a change you
+# made today requires touching the same file, just copy the old
+# touch step and add it to the end of the list.
+#
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
+
+# For example:
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
+#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
+#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
+
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/bin/hw/android.hardware*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib/hw/android.hardware*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib64/hw/android.hardware*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/init/android.hardware*)
diff --git a/audio/2.0/Android.bp b/audio/2.0/Android.bp
index 2f0c936..69ff791 100644
--- a/audio/2.0/Android.bp
+++ b/audio/2.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.audio@2.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio@2.0",
+filegroup {
+    name: "android.hardware.audio@2.0_hal",
     srcs: [
         "types.hal",
         "IDevice.hal",
@@ -14,6 +12,15 @@
         "IStreamOut.hal",
         "IStreamOutCallback.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.audio@2.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio@2.0",
+    srcs: [
+        ":android.hardware.audio@2.0_hal",
+    ],
     out: [
         "android/hardware/audio/2.0/types.cpp",
         "android/hardware/audio/2.0/DeviceAll.cpp",
@@ -31,14 +38,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio@2.0",
     srcs: [
-        "types.hal",
-        "IDevice.hal",
-        "IDevicesFactory.hal",
-        "IPrimaryDevice.hal",
-        "IStream.hal",
-        "IStreamIn.hal",
-        "IStreamOut.hal",
-        "IStreamOutCallback.hal",
+        ":android.hardware.audio@2.0_hal",
     ],
     out: [
         "android/hardware/audio/2.0/types.h",
diff --git a/audio/2.0/Android.mk b/audio/2.0/Android.mk
index f8767ec..e989364 100644
--- a/audio/2.0/Android.mk
+++ b/audio/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.audio@2.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/audio/2.0/IStreamIn.hal b/audio/2.0/IStreamIn.hal
index 9a96f71..6f1f9df 100644
--- a/audio/2.0/IStreamIn.hal
+++ b/audio/2.0/IStreamIn.hal
@@ -41,6 +41,26 @@
     setGain(float gain) generates (Result retval);
 
     /*
+     * Commands that can be executed on the driver reader thread.
+     */
+    enum ReadCommand : int32_t {
+        READ,
+        GET_CAPTURE_POSITION
+    };
+
+    /*
+     * Data structure passed to the driver for executing commands
+     * on the driver reader thread.
+     */
+    struct ReadParameters {
+        ReadCommand command;  // discriminator
+        union Params {
+            uint64_t read;    // READ command, amount of bytes to read, >= 0.
+            // No parameters for GET_CAPTURE_POSITION.
+        } params;
+    };
+
+    /*
      * Data structure passed back to the client via status message queue
      * of 'read' operation.
      *
@@ -51,35 +71,53 @@
      */
     struct ReadStatus {
         Result retval;
-        uint64_t read;
+        ReadCommand replyTo;  // discriminator
+        union Reply {
+            uint64_t read;    // READ command, amount of bytes read, >= 0.
+            struct CapturePosition { // same as generated by getCapturePosition.
+                uint64_t frames;
+                uint64_t time;
+            } capturePosition;
+        } reply;
     };
 
     /*
      * Set up required transports for receiving audio buffers from the driver.
      *
-     * The transport consists of two message queues: one is used for passing
-     * audio data from the driver to the client, another is used for reporting
-     * read operation status (amount of bytes actually read or error code),
-     * see ReadStatus structure definition.
+     * The transport consists of three message queues:
+     *  -- command queue is used to instruct the reader thread what operation
+     *     to perform;
+     *  -- data queue is used for passing audio data from the driver
+     *     to the client;
+     *  -- status queue is used for reporting operation status
+     *     (e.g. amount of bytes actually read or error code).
+     *
+     * The driver operates on a dedicated thread. The client must ensure that
+     * the thread is given an appropriate priority and assigned to correct
+     * scheduler and cgroup. For this purpose, the method returns identifiers
+     * of the driver thread.
      *
      * @param frameSize the size of a single frame, in bytes.
      * @param framesCount the number of frames in a buffer.
-     * @param threadPriority priority of the thread that performs reads.
+     * @param threadPriority priority of the driver thread.
      * @return retval OK if both message queues were created successfully.
      *                INVALID_STATE if the method was already called.
      *                INVALID_ARGUMENTS if there was a problem setting up
      *                                  the queues.
+     * @return commandMQ a message queue used for passing commands.
      * @return dataMQ a message queue used for passing audio data in the format
      *                specified at the stream opening.
      * @return statusMQ a message queue used for passing status from the driver
      *                  using ReadStatus structures.
+     * @return threadInfo identifiers of the driver's dedicated thread.
      */
-    prepareForReading(
-            uint32_t frameSize, uint32_t framesCount,
-            ThreadPriority threadPriority)
+    prepareForReading(uint32_t frameSize, uint32_t framesCount)
     generates (
             Result retval,
-            fmq_sync<uint8_t> dataMQ, fmq_sync<ReadStatus> statusMQ);
+            fmq_sync<ReadParameters> commandMQ,
+            fmq_sync<uint8_t> dataMQ,
+            fmq_sync<ReadStatus> statusMQ,
+            ThreadInfo threadInfo);
 
     /*
      * Return the amount of input frames lost in the audio driver since the last
diff --git a/audio/2.0/IStreamOut.hal b/audio/2.0/IStreamOut.hal
index 336684f..9ee32c5 100644
--- a/audio/2.0/IStreamOut.hal
+++ b/audio/2.0/IStreamOut.hal
@@ -44,55 +44,73 @@
     setVolume(float left, float right) generates (Result retval);
 
     /*
+     * Commands that can be executed on the driver writer thread.
+     */
+    enum WriteCommand : int32_t {
+        WRITE,
+        GET_PRESENTATION_POSITION,
+        GET_LATENCY
+    };
+
+    /*
      * Data structure passed back to the client via status message queue
      * of 'write' operation.
      *
-     * Possible values of 'writeRetval' field:
+     * Possible values of 'retval' field:
      *  - OK, write operation was successful;
      *  - INVALID_ARGUMENTS, stream was not configured properly;
-     *  - INVALID_STATE, stream is in a state that doesn't allow writes.
-     *
-     * Possible values of 'presentationPositionRetval' field (must only
-     * be considered if 'writeRetval' field is set to 'OK'):
-     *  - OK, presentation position retrieved successfully;
-     *  - INVALID_ARGUMENTS, indicates that the position can't be retrieved;
-     *  - INVALID_OPERATION, retrieving presentation position isn't supported;
+     *  - INVALID_STATE, stream is in a state that doesn't allow writes;
+     *  - INVALID_OPERATION, retrieving presentation position isn't supported.
      */
     struct WriteStatus {
-        Result writeRetval;
-        uint64_t written;
-        Result presentationPositionRetval;
-        uint64_t frames;    // presentation position
-        TimeSpec timeStamp; // presentation position
+        Result retval;
+        WriteCommand replyTo;  // discriminator
+        union Reply {
+            uint64_t written;  // WRITE command, amount of bytes written, >= 0.
+            struct PresentationPosition {  // same as generated by
+                uint64_t frames;           // getPresentationPosition.
+                TimeSpec timeStamp;
+            } presentationPosition;
+            uint32_t latencyMs; // Same as generated by getLatency.
+        } reply;
     };
 
     /*
      * Set up required transports for passing audio buffers to the driver.
      *
-     * The transport consists of two message queues: one is used for passing
-     * audio data from the client to the driver, another is used for reporting
-     * write operation status (amount of bytes actually written or error code),
-     * and the presentation position immediately after the write, see
-     * WriteStatus structure definition.
+     * The transport consists of three message queues:
+     *  -- command queue is used to instruct the writer thread what operation
+     *     to perform;
+     *  -- data queue is used for passing audio data from the client
+     *     to the driver;
+     *  -- status queue is used for reporting operation status
+     *     (e.g. amount of bytes actually written or error code).
+     *
+     * The driver operates on a dedicated thread. The client must ensure that
+     * the thread is given an appropriate priority and assigned to correct
+     * scheduler and cgroup. For this purpose, the method returns identifiers
+     * of the driver thread.
      *
      * @param frameSize the size of a single frame, in bytes.
      * @param framesCount the number of frames in a buffer.
-     * @param threadPriority priority of the thread that performs writes.
      * @return retval OK if both message queues were created successfully.
      *                INVALID_STATE if the method was already called.
      *                INVALID_ARGUMENTS if there was a problem setting up
      *                                  the queues.
+     * @return commandMQ a message queue used for passing commands.
      * @return dataMQ a message queue used for passing audio data in the format
      *                specified at the stream opening.
      * @return statusMQ a message queue used for passing status from the driver
      *                  using WriteStatus structures.
+     * @return threadInfo identifiers of the driver's dedicated thread.
      */
-    prepareForWriting(
-            uint32_t frameSize, uint32_t framesCount,
-            ThreadPriority threadPriority)
+    prepareForWriting(uint32_t frameSize, uint32_t framesCount)
     generates (
             Result retval,
-            fmq_sync<uint8_t> dataMQ, fmq_sync<WriteStatus> statusMQ);
+            fmq_sync<WriteCommand> commandMQ,
+            fmq_sync<uint8_t> dataMQ,
+            fmq_sync<WriteStatus> statusMQ,
+            ThreadInfo threadInfo);
 
     /*
      * Return the number of audio frames written by the audio DSP to DAC since
diff --git a/audio/2.0/default/Android.mk b/audio/2.0/default/Android.mk
index eeea92c..9cb56c7 100644
--- a/audio/2.0/default/Android.mk
+++ b/audio/2.0/default/Android.mk
@@ -19,6 +19,7 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.audio@2.0-impl
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_SRC_FILES := \
     Conversions.cpp \
     Device.cpp \
@@ -38,7 +39,6 @@
     libhidltransport \
     libhwbinder \
     liblog \
-    libmediautils \
     libutils \
     android.hardware.audio@2.0 \
     android.hardware.audio.common@2.0 \
@@ -56,6 +56,7 @@
 LOCAL_MODULE := android.hardware.audio@2.0-service
 LOCAL_INIT_RC := android.hardware.audio@2.0-service.rc
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_SRC_FILES := \
     service.cpp
 
diff --git a/audio/2.0/default/Stream.cpp b/audio/2.0/default/Stream.cpp
index 62b34a3..c16a956 100644
--- a/audio/2.0/default/Stream.cpp
+++ b/audio/2.0/default/Stream.cpp
@@ -44,8 +44,8 @@
 }
 
 // static
-Result Stream::analyzeStatus(const char* funcName, int status, int ignoreError) {
-    if (status != 0 && status != -ignoreError) {
+Result Stream::analyzeStatus(const char* funcName, int status, int ignoreError, int ignoreError2) {
+    if (status != 0 && status != -ignoreError && status != -ignoreError2) {
         ALOGW("Error from HAL stream in function %s: %s", funcName, strerror(-status));
     }
     switch (status) {
diff --git a/audio/2.0/default/Stream.h b/audio/2.0/default/Stream.h
index 0bbd803..63ea1bb 100644
--- a/audio/2.0/default/Stream.h
+++ b/audio/2.0/default/Stream.h
@@ -79,7 +79,8 @@
     Return<Result> close()  override;
 
     // Utility methods for extending interfaces.
-    static Result analyzeStatus(const char* funcName, int status, int ignoreError = OK);
+    static Result analyzeStatus(
+            const char* funcName, int status, int ignoreError = OK, int ignoreError2 = OK);
 
   private:
     audio_stream_t *mStream;
@@ -127,6 +128,7 @@
                                              IStream::createMmapBuffer_cb _hidl_cb) {
     Result retval(Result::NOT_SUPPORTED);
     MmapBufferInfo info;
+    native_handle_t* hidlHandle = nullptr;
 
     if (mStream->create_mmap_buffer != NULL) {
         struct audio_mmap_buffer_info halInfo;
@@ -134,7 +136,7 @@
                 "create_mmap_buffer",
                 mStream->create_mmap_buffer(mStream, minSizeFrames, &halInfo));
         if (retval == Result::OK) {
-            native_handle_t* hidlHandle = native_handle_create(1, 0);
+            hidlHandle = native_handle_create(1, 0);
             hidlHandle->data[0] = halInfo.shared_memory_fd;
             info.sharedMemory = hidl_memory("audio_buffer", hidlHandle,
                                             frameSize *halInfo.buffer_size_frames);
@@ -143,6 +145,10 @@
         }
     }
     _hidl_cb(retval, info);
+    if (hidlHandle != nullptr) {
+        native_handle_close(hidlHandle);
+        native_handle_delete(hidlHandle);
+    }
     return Void();
 }
 
diff --git a/audio/2.0/default/StreamIn.cpp b/audio/2.0/default/StreamIn.cpp
index ad18986..a8229d3 100644
--- a/audio/2.0/default/StreamIn.cpp
+++ b/audio/2.0/default/StreamIn.cpp
@@ -16,10 +16,11 @@
 
 #define LOG_TAG "StreamInHAL"
 //#define LOG_NDEBUG 0
+#define ATRACE_TAG ATRACE_TAG_AUDIO
 
 #include <android/log.h>
 #include <hardware/audio.h>
-#include <mediautils/SchedulingPolicyService.h>
+#include <utils/Trace.h>
 
 #include "StreamIn.h"
 
@@ -31,6 +32,8 @@
 namespace V2_0 {
 namespace implementation {
 
+using ::android::hardware::audio::common::V2_0::ThreadInfo;
+
 namespace {
 
 class ReadThread : public Thread {
@@ -38,43 +41,62 @@
     // ReadThread's lifespan never exceeds StreamIn's lifespan.
     ReadThread(std::atomic<bool>* stop,
             audio_stream_in_t* stream,
+            StreamIn::CommandMQ* commandMQ,
             StreamIn::DataMQ* dataMQ,
             StreamIn::StatusMQ* statusMQ,
-            EventFlag* efGroup,
-            ThreadPriority threadPriority)
+            EventFlag* efGroup)
             : Thread(false /*canCallJava*/),
               mStop(stop),
               mStream(stream),
+              mCommandMQ(commandMQ),
               mDataMQ(dataMQ),
               mStatusMQ(statusMQ),
               mEfGroup(efGroup),
-              mThreadPriority(threadPriority),
               mBuffer(new uint8_t[dataMQ->getQuantumCount()]) {
     }
     virtual ~ReadThread() {}
 
-    status_t readyToRun() override;
-
   private:
     std::atomic<bool>* mStop;
     audio_stream_in_t* mStream;
+    StreamIn::CommandMQ* mCommandMQ;
     StreamIn::DataMQ* mDataMQ;
     StreamIn::StatusMQ* mStatusMQ;
     EventFlag* mEfGroup;
-    ThreadPriority mThreadPriority;
     std::unique_ptr<uint8_t[]> mBuffer;
+    IStreamIn::ReadParameters mParameters;
+    IStreamIn::ReadStatus mStatus;
 
     bool threadLoop() override;
+
+    void doGetCapturePosition();
+    void doRead();
 };
 
-status_t ReadThread::readyToRun() {
-    if (mThreadPriority != ThreadPriority::NORMAL) {
-        int err = requestPriority(
-                getpid(), getTid(), static_cast<int>(mThreadPriority), true /*asynchronous*/);
-        ALOGW_IF(err, "failed to set priority %d for pid %d tid %d; error %d",
-                static_cast<int>(mThreadPriority), getpid(), getTid(), err);
+void ReadThread::doRead() {
+    size_t availableToWrite = mDataMQ->availableToWrite();
+    size_t requestedToRead = mParameters.params.read;
+    if (requestedToRead > availableToWrite) {
+        ALOGW("truncating read data from %d to %d due to insufficient data queue space",
+                (int32_t)requestedToRead, (int32_t)availableToWrite);
+        requestedToRead = availableToWrite;
     }
-    return OK;
+    ssize_t readResult = mStream->read(mStream, &mBuffer[0], requestedToRead);
+    mStatus.retval = Result::OK;
+    uint64_t read = 0;
+    if (readResult >= 0) {
+        mStatus.reply.read = readResult;
+        if (!mDataMQ->write(&mBuffer[0], readResult)) {
+            ALOGW("data message queue write failed");
+        }
+    } else {
+        mStatus.retval = Stream::analyzeStatus("read", readResult);
+    }
+}
+
+void ReadThread::doGetCapturePosition() {
+    mStatus.retval = StreamIn::getCapturePositionImpl(
+            mStream, &mStatus.reply.capturePosition.frames, &mStatus.reply.capturePosition.time);
 }
 
 bool ReadThread::threadLoop() {
@@ -83,25 +105,27 @@
     while(!std::atomic_load_explicit(mStop, std::memory_order_acquire)) {
         // TODO: Remove manual event flag handling once blocking MQ is implemented. b/33815422
         uint32_t efState = 0;
-        mEfGroup->wait(static_cast<uint32_t>(MessageQueueFlagBits::NOT_FULL), &efState, NS_PER_SEC);
+        mEfGroup->wait(static_cast<uint32_t>(MessageQueueFlagBits::NOT_FULL), &efState);
         if (!(efState & static_cast<uint32_t>(MessageQueueFlagBits::NOT_FULL))) {
             continue;  // Nothing to do.
         }
-
-        const size_t availToWrite = mDataMQ->availableToWrite();
-        ssize_t readResult = mStream->read(mStream, &mBuffer[0], availToWrite);
-        Result retval = Result::OK;
-        uint64_t read = 0;
-        if (readResult >= 0) {
-            read = readResult;
-            if (!mDataMQ->write(&mBuffer[0], readResult)) {
-                ALOGW("data message queue write failed");
-            }
-        } else {
-            retval = Stream::analyzeStatus("read", readResult);
+        if (!mCommandMQ->read(&mParameters)) {
+            continue;  // Nothing to do.
         }
-        IStreamIn::ReadStatus status = { retval, read };
-        if (!mStatusMQ->write(&status)) {
+        mStatus.replyTo = mParameters.command;
+        switch (mParameters.command) {
+            case IStreamIn::ReadCommand::READ:
+                doRead();
+                break;
+            case IStreamIn::ReadCommand::GET_CAPTURE_POSITION:
+                doGetCapturePosition();
+                break;
+            default:
+                ALOGE("Unknown read thread command code %d", mParameters.command);
+                mStatus.retval = Result::NOT_SUPPORTED;
+                break;
+        }
+        if (!mStatusMQ->write(&mStatus)) {
             ALOGW("status message queue write failed");
         }
         mEfGroup->wake(static_cast<uint32_t>(MessageQueueFlagBits::NOT_EMPTY));
@@ -120,7 +144,18 @@
 }
 
 StreamIn::~StreamIn() {
+    ATRACE_CALL();
     close();
+    if (mReadThread.get()) {
+        ATRACE_NAME("mReadThread->join");
+        status_t status = mReadThread->join();
+        ALOGE_IF(status, "read thread exit error: %s", strerror(-status));
+    }
+    if (mEfGroup) {
+        status_t status = EventFlag::deleteEventFlag(&mEfGroup);
+        ALOGE_IF(status, "read MQ event flag deletion error: %s", strerror(-status));
+    }
+    mDevice->close_input_stream(mDevice, mStream);
     mStream = nullptr;
     mDevice = nullptr;
 }
@@ -240,14 +275,10 @@
     mIsClosed = true;
     if (mReadThread.get()) {
         mStopReadThread.store(true, std::memory_order_release);
-        status_t status = mReadThread->requestExitAndWait();
-        ALOGE_IF(status, "read thread exit error: %s", strerror(-status));
     }
     if (mEfGroup) {
-        status_t status = EventFlag::deleteEventFlag(&mEfGroup);
-        ALOGE_IF(status, "read MQ event flag deletion error: %s", strerror(-status));
+        mEfGroup->wake(static_cast<uint32_t>(MessageQueueFlagBits::NOT_FULL));
     }
-    mDevice->close_input_stream(mDevice, mStream);
     return Result::OK;
 }
 
@@ -268,24 +299,26 @@
 }
 
 Return<void> StreamIn::prepareForReading(
-        uint32_t frameSize, uint32_t framesCount, ThreadPriority threadPriority,
-        prepareForReading_cb _hidl_cb)  {
+        uint32_t frameSize, uint32_t framesCount, prepareForReading_cb _hidl_cb)  {
     status_t status;
+    ThreadInfo threadInfo = { 0, 0 };
     // Create message queues.
     if (mDataMQ) {
         ALOGE("the client attempts to call prepareForReading twice");
         _hidl_cb(Result::INVALID_STATE,
-                DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
+    std::unique_ptr<CommandMQ> tempCommandMQ(new CommandMQ(1));
     std::unique_ptr<DataMQ> tempDataMQ(
             new DataMQ(frameSize * framesCount, true /* EventFlag */));
     std::unique_ptr<StatusMQ> tempStatusMQ(new StatusMQ(1));
-    if (!tempDataMQ->isValid() || !tempStatusMQ->isValid()) {
+    if (!tempCommandMQ->isValid() || !tempDataMQ->isValid() || !tempStatusMQ->isValid()) {
+        ALOGE_IF(!tempCommandMQ->isValid(), "command MQ is invalid");
         ALOGE_IF(!tempDataMQ->isValid(), "data MQ is invalid");
         ALOGE_IF(!tempStatusMQ->isValid(), "status MQ is invalid");
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
     // TODO: Remove event flag management once blocking MQ is implemented. b/33815422
@@ -293,7 +326,7 @@
     if (status != OK || !mEfGroup) {
         ALOGE("failed creating event flag for data MQ: %s", strerror(-status));
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
 
@@ -301,21 +334,26 @@
     mReadThread = new ReadThread(
             &mStopReadThread,
             mStream,
+            tempCommandMQ.get(),
             tempDataMQ.get(),
             tempStatusMQ.get(),
-            mEfGroup,
-            threadPriority);
+            mEfGroup);
     status = mReadThread->run("reader", PRIORITY_URGENT_AUDIO);
     if (status != OK) {
         ALOGW("failed to start reader thread: %s", strerror(-status));
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
 
+    mCommandMQ = std::move(tempCommandMQ);
     mDataMQ = std::move(tempDataMQ);
     mStatusMQ = std::move(tempStatusMQ);
-    _hidl_cb(Result::OK, *mDataMQ->getDesc(), *mStatusMQ->getDesc());
+    threadInfo.pid = getpid();
+    threadInfo.tid = mReadThread->getTid();
+    _hidl_cb(Result::OK,
+            *mCommandMQ->getDesc(), *mDataMQ->getDesc(), *mStatusMQ->getDesc(),
+            threadInfo);
     return Void();
 }
 
@@ -323,22 +361,28 @@
     return mStream->get_input_frames_lost(mStream);
 }
 
-Return<void> StreamIn::getCapturePosition(getCapturePosition_cb _hidl_cb)  {
+// static
+Result StreamIn::getCapturePositionImpl(
+        audio_stream_in_t *stream, uint64_t *frames, uint64_t *time) {
     Result retval(Result::NOT_SUPPORTED);
-    uint64_t frames = 0, time = 0;
-    if (mStream->get_capture_position != NULL) {
-        int64_t halFrames, halTime;
-        retval = Stream::analyzeStatus(
-                "get_capture_position",
-                mStream->get_capture_position(mStream, &halFrames, &halTime),
-                // HAL may have a stub function, always returning ENOSYS, don't
-                // spam the log in this case.
-                ENOSYS);
-        if (retval == Result::OK) {
-            frames = halFrames;
-            time = halTime;
-        }
+    if (stream->get_capture_position != NULL) return retval;
+    int64_t halFrames, halTime;
+    retval = Stream::analyzeStatus(
+            "get_capture_position",
+            stream->get_capture_position(stream, &halFrames, &halTime),
+            // HAL may have a stub function, always returning ENOSYS, don't
+            // spam the log in this case.
+            ENOSYS);
+    if (retval == Result::OK) {
+        *frames = halFrames;
+        *time = halTime;
     }
+    return retval;
+};
+
+Return<void> StreamIn::getCapturePosition(getCapturePosition_cb _hidl_cb)  {
+    uint64_t frames = 0, time = 0;
+    Result retval = getCapturePositionImpl(mStream, &frames, &time);
     _hidl_cb(retval, frames, time);
     return Void();
 }
diff --git a/audio/2.0/default/StreamIn.h b/audio/2.0/default/StreamIn.h
index fc813d9..b867387 100644
--- a/audio/2.0/default/StreamIn.h
+++ b/audio/2.0/default/StreamIn.h
@@ -44,7 +44,6 @@
 using ::android::hardware::audio::V2_0::IStreamIn;
 using ::android::hardware::audio::V2_0::ParameterValue;
 using ::android::hardware::audio::V2_0::Result;
-using ::android::hardware::audio::V2_0::ThreadPriority;
 using ::android::hardware::Return;
 using ::android::hardware::Void;
 using ::android::hardware::hidl_vec;
@@ -52,6 +51,7 @@
 using ::android::sp;
 
 struct StreamIn : public IStreamIn {
+    typedef MessageQueue<ReadParameters, kSynchronizedReadWrite> CommandMQ;
     typedef MessageQueue<uint8_t, kSynchronizedReadWrite> DataMQ;
     typedef MessageQueue<ReadStatus, kSynchronizedReadWrite> StatusMQ;
 
@@ -88,8 +88,7 @@
     Return<void> getAudioSource(getAudioSource_cb _hidl_cb)  override;
     Return<Result> setGain(float gain)  override;
     Return<void> prepareForReading(
-            uint32_t frameSize, uint32_t framesCount, ThreadPriority threadPriority,
-            prepareForReading_cb _hidl_cb)  override;
+            uint32_t frameSize, uint32_t framesCount, prepareForReading_cb _hidl_cb)  override;
     Return<uint32_t> getInputFramesLost()  override;
     Return<void> getCapturePosition(getCapturePosition_cb _hidl_cb)  override;
     Return<Result> start() override;
@@ -97,12 +96,16 @@
     Return<void> createMmapBuffer(int32_t minSizeFrames, createMmapBuffer_cb _hidl_cb) override;
     Return<void> getMmapPosition(getMmapPosition_cb _hidl_cb) override;
 
+    static Result getCapturePositionImpl(
+            audio_stream_in_t *stream, uint64_t *frames, uint64_t *time);
+
   private:
     bool mIsClosed;
     audio_hw_device_t *mDevice;
     audio_stream_in_t *mStream;
     sp<Stream> mStreamCommon;
     sp<StreamMmap<audio_stream_in_t>> mStreamMmap;
+    std::unique_ptr<CommandMQ> mCommandMQ;
     std::unique_ptr<DataMQ> mDataMQ;
     std::unique_ptr<StatusMQ> mStatusMQ;
     EventFlag* mEfGroup;
diff --git a/audio/2.0/default/StreamOut.cpp b/audio/2.0/default/StreamOut.cpp
index 1948b68..6ccdbcd 100644
--- a/audio/2.0/default/StreamOut.cpp
+++ b/audio/2.0/default/StreamOut.cpp
@@ -16,10 +16,11 @@
 
 #define LOG_TAG "StreamOutHAL"
 //#define LOG_NDEBUG 0
+#define ATRACE_TAG ATRACE_TAG_AUDIO
 
 #include <android/log.h>
 #include <hardware/audio.h>
-#include <mediautils/SchedulingPolicyService.h>
+#include <utils/Trace.h>
 
 #include "StreamOut.h"
 
@@ -29,6 +30,8 @@
 namespace V2_0 {
 namespace implementation {
 
+using ::android::hardware::audio::common::V2_0::ThreadInfo;
+
 namespace {
 
 class WriteThread : public Thread {
@@ -36,43 +39,62 @@
     // WriteThread's lifespan never exceeds StreamOut's lifespan.
     WriteThread(std::atomic<bool>* stop,
             audio_stream_out_t* stream,
+            StreamOut::CommandMQ* commandMQ,
             StreamOut::DataMQ* dataMQ,
             StreamOut::StatusMQ* statusMQ,
-            EventFlag* efGroup,
-            ThreadPriority threadPriority)
+            EventFlag* efGroup)
             : Thread(false /*canCallJava*/),
               mStop(stop),
               mStream(stream),
+              mCommandMQ(commandMQ),
               mDataMQ(dataMQ),
               mStatusMQ(statusMQ),
               mEfGroup(efGroup),
-              mThreadPriority(threadPriority),
               mBuffer(new uint8_t[dataMQ->getQuantumCount()]) {
     }
     virtual ~WriteThread() {}
 
-    status_t readyToRun() override;
-
   private:
     std::atomic<bool>* mStop;
     audio_stream_out_t* mStream;
+    StreamOut::CommandMQ* mCommandMQ;
     StreamOut::DataMQ* mDataMQ;
     StreamOut::StatusMQ* mStatusMQ;
     EventFlag* mEfGroup;
-    ThreadPriority mThreadPriority;
     std::unique_ptr<uint8_t[]> mBuffer;
+    IStreamOut::WriteStatus mStatus;
 
     bool threadLoop() override;
+
+    void doGetLatency();
+    void doGetPresentationPosition();
+    void doWrite();
 };
 
-status_t WriteThread::readyToRun() {
-    if (mThreadPriority != ThreadPriority::NORMAL) {
-        int err = requestPriority(
-                getpid(), getTid(), static_cast<int>(mThreadPriority), true /*asynchronous*/);
-        ALOGW_IF(err, "failed to set priority %d for pid %d tid %d; error %d",
-                static_cast<int>(mThreadPriority), getpid(), getTid(), err);
+void WriteThread::doWrite() {
+    const size_t availToRead = mDataMQ->availableToRead();
+    mStatus.retval = Result::OK;
+    mStatus.reply.written = 0;
+    if (mDataMQ->read(&mBuffer[0], availToRead)) {
+        ssize_t writeResult = mStream->write(mStream, &mBuffer[0], availToRead);
+        if (writeResult >= 0) {
+            mStatus.reply.written = writeResult;
+        } else {
+            mStatus.retval = Stream::analyzeStatus("write", writeResult);
+        }
     }
-    return OK;
+}
+
+void WriteThread::doGetPresentationPosition() {
+    mStatus.retval = StreamOut::getPresentationPositionImpl(
+            mStream,
+            &mStatus.reply.presentationPosition.frames,
+            &mStatus.reply.presentationPosition.timeStamp);
+}
+
+void WriteThread::doGetLatency() {
+    mStatus.retval = Result::OK;
+    mStatus.reply.latencyMs = mStream->get_latency(mStream);
 }
 
 bool WriteThread::threadLoop() {
@@ -81,29 +103,30 @@
     while(!std::atomic_load_explicit(mStop, std::memory_order_acquire)) {
         // TODO: Remove manual event flag handling once blocking MQ is implemented. b/33815422
         uint32_t efState = 0;
-        mEfGroup->wait(
-                static_cast<uint32_t>(MessageQueueFlagBits::NOT_EMPTY), &efState, NS_PER_SEC);
+        mEfGroup->wait(static_cast<uint32_t>(MessageQueueFlagBits::NOT_EMPTY), &efState);
         if (!(efState & static_cast<uint32_t>(MessageQueueFlagBits::NOT_EMPTY))) {
             continue;  // Nothing to do.
         }
-
-        const size_t availToRead = mDataMQ->availableToRead();
-        IStreamOut::WriteStatus status;
-        status.writeRetval = Result::OK;
-        status.written = 0;
-        if (mDataMQ->read(&mBuffer[0], availToRead)) {
-            ssize_t writeResult = mStream->write(mStream, &mBuffer[0], availToRead);
-            if (writeResult >= 0) {
-                status.written = writeResult;
-            } else {
-                status.writeRetval = Stream::analyzeStatus("write", writeResult);
-            }
+        if (!mCommandMQ->read(&mStatus.replyTo)) {
+            continue;  // Nothing to do.
         }
-        status.presentationPositionRetval = status.writeRetval == Result::OK ?
-                StreamOut::getPresentationPositionImpl(mStream, &status.frames, &status.timeStamp) :
-                Result::OK;
-        if (!mStatusMQ->write(&status)) {
-            ALOGW("status message queue write failed");
+        switch (mStatus.replyTo) {
+            case IStreamOut::WriteCommand::WRITE:
+                doWrite();
+                break;
+            case IStreamOut::WriteCommand::GET_PRESENTATION_POSITION:
+                doGetPresentationPosition();
+                break;
+            case IStreamOut::WriteCommand::GET_LATENCY:
+                doGetLatency();
+                break;
+            default:
+                ALOGE("Unknown write thread command code %d", mStatus.replyTo);
+                mStatus.retval = Result::NOT_SUPPORTED;
+                break;
+        }
+        if (!mStatusMQ->write(&mStatus)) {
+            ALOGE("status message queue write failed");
         }
         mEfGroup->wake(static_cast<uint32_t>(MessageQueueFlagBits::NOT_FULL));
     }
@@ -121,7 +144,19 @@
 }
 
 StreamOut::~StreamOut() {
+    ATRACE_CALL();
     close();
+    if (mWriteThread.get()) {
+        ATRACE_NAME("mWriteThread->join");
+        status_t status = mWriteThread->join();
+        ALOGE_IF(status, "write thread exit error: %s", strerror(-status));
+    }
+    if (mEfGroup) {
+        status_t status = EventFlag::deleteEventFlag(&mEfGroup);
+        ALOGE_IF(status, "write MQ event flag deletion error: %s", strerror(-status));
+    }
+    mCallback.clear();
+    mDevice->close_output_stream(mDevice, mStream);
     mStream = nullptr;
     mDevice = nullptr;
 }
@@ -225,15 +260,10 @@
     mIsClosed = true;
     if (mWriteThread.get()) {
         mStopWriteThread.store(true, std::memory_order_release);
-        status_t status = mWriteThread->requestExitAndWait();
-        ALOGE_IF(status, "write thread exit error: %s", strerror(-status));
     }
     if (mEfGroup) {
-        status_t status = EventFlag::deleteEventFlag(&mEfGroup);
-        ALOGE_IF(status, "write MQ event flag deletion error: %s", strerror(-status));
+        mEfGroup->wake(static_cast<uint32_t>(MessageQueueFlagBits::NOT_EMPTY));
     }
-    mCallback.clear();
-    mDevice->close_output_stream(mDevice, mStream);
     return Result::OK;
 }
 
@@ -252,24 +282,26 @@
 }
 
 Return<void> StreamOut::prepareForWriting(
-        uint32_t frameSize, uint32_t framesCount, ThreadPriority threadPriority,
-        prepareForWriting_cb _hidl_cb)  {
+        uint32_t frameSize, uint32_t framesCount, prepareForWriting_cb _hidl_cb)  {
     status_t status;
+    ThreadInfo threadInfo = { 0, 0 };
     // Create message queues.
     if (mDataMQ) {
         ALOGE("the client attempts to call prepareForWriting twice");
         _hidl_cb(Result::INVALID_STATE,
-                DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
+    std::unique_ptr<CommandMQ> tempCommandMQ(new CommandMQ(1));
     std::unique_ptr<DataMQ> tempDataMQ(
             new DataMQ(frameSize * framesCount, true /* EventFlag */));
     std::unique_ptr<StatusMQ> tempStatusMQ(new StatusMQ(1));
-    if (!tempDataMQ->isValid() || !tempStatusMQ->isValid()) {
+    if (!tempCommandMQ->isValid() || !tempDataMQ->isValid() || !tempStatusMQ->isValid()) {
+        ALOGE_IF(!tempCommandMQ->isValid(), "command MQ is invalid");
         ALOGE_IF(!tempDataMQ->isValid(), "data MQ is invalid");
         ALOGE_IF(!tempStatusMQ->isValid(), "status MQ is invalid");
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
     // TODO: Remove event flag management once blocking MQ is implemented. b/33815422
@@ -277,7 +309,7 @@
     if (status != OK || !mEfGroup) {
         ALOGE("failed creating event flag for data MQ: %s", strerror(-status));
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
 
@@ -285,21 +317,26 @@
     mWriteThread = new WriteThread(
             &mStopWriteThread,
             mStream,
+            tempCommandMQ.get(),
             tempDataMQ.get(),
             tempStatusMQ.get(),
-            mEfGroup,
-            threadPriority);
+            mEfGroup);
     status = mWriteThread->run("writer", PRIORITY_URGENT_AUDIO);
     if (status != OK) {
         ALOGW("failed to start writer thread: %s", strerror(-status));
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
 
+    mCommandMQ = std::move(tempCommandMQ);
     mDataMQ = std::move(tempDataMQ);
     mStatusMQ = std::move(tempStatusMQ);
-    _hidl_cb(Result::OK, *mDataMQ->getDesc(), *mStatusMQ->getDesc());
+    threadInfo.pid = getpid();
+    threadInfo.tid = mWriteThread->getTid();
+    _hidl_cb(Result::OK,
+            *mCommandMQ->getDesc(), *mDataMQ->getDesc(), *mStatusMQ->getDesc(),
+            threadInfo);
     return Void();
 }
 
@@ -405,8 +442,9 @@
             "get_presentation_position",
             stream->get_presentation_position(stream, frames, &halTimeStamp),
             // Don't logspam on EINVAL--it's normal for get_presentation_position
-            // to return it sometimes.
-            EINVAL);
+            // to return it sometimes. EAGAIN may be returned by A2DP audio HAL
+            // implementation.
+            EINVAL, EAGAIN);
     if (retval == Result::OK) {
         timeStamp->tvSec = halTimeStamp.tv_sec;
         timeStamp->tvNSec = halTimeStamp.tv_nsec;
diff --git a/audio/2.0/default/StreamOut.h b/audio/2.0/default/StreamOut.h
index 754a0c0..bbe64a1 100644
--- a/audio/2.0/default/StreamOut.h
+++ b/audio/2.0/default/StreamOut.h
@@ -45,7 +45,6 @@
 using ::android::hardware::audio::V2_0::IStreamOutCallback;
 using ::android::hardware::audio::V2_0::ParameterValue;
 using ::android::hardware::audio::V2_0::Result;
-using ::android::hardware::audio::V2_0::ThreadPriority;
 using ::android::hardware::audio::V2_0::TimeSpec;
 using ::android::hardware::Return;
 using ::android::hardware::Void;
@@ -54,6 +53,7 @@
 using ::android::sp;
 
 struct StreamOut : public IStreamOut {
+    typedef MessageQueue<WriteCommand, kSynchronizedReadWrite> CommandMQ;
     typedef MessageQueue<uint8_t, kSynchronizedReadWrite> DataMQ;
     typedef MessageQueue<WriteStatus, kSynchronizedReadWrite> StatusMQ;
 
@@ -90,8 +90,7 @@
     Return<uint32_t> getLatency()  override;
     Return<Result> setVolume(float left, float right)  override;
     Return<void> prepareForWriting(
-            uint32_t frameSize, uint32_t framesCount, ThreadPriority threadPriority,
-            prepareForWriting_cb _hidl_cb)  override;
+            uint32_t frameSize, uint32_t framesCount, prepareForWriting_cb _hidl_cb)  override;
     Return<void> getRenderPosition(getRenderPosition_cb _hidl_cb)  override;
     Return<void> getNextWriteTimestamp(getNextWriteTimestamp_cb _hidl_cb)  override;
     Return<Result> setCallback(const sp<IStreamOutCallback>& callback)  override;
@@ -118,6 +117,7 @@
     sp<Stream> mStreamCommon;
     sp<StreamMmap<audio_stream_out_t>> mStreamMmap;
     sp<IStreamOutCallback> mCallback;
+    std::unique_ptr<CommandMQ> mCommandMQ;
     std::unique_ptr<DataMQ> mDataMQ;
     std::unique_ptr<StatusMQ> mStatusMQ;
     EventFlag* mEfGroup;
diff --git a/audio/2.0/default/android.hardware.audio@2.0-service.rc b/audio/2.0/default/android.hardware.audio@2.0-service.rc
index 0a5bfc5..eeaf71b 100644
--- a/audio/2.0/default/android.hardware.audio@2.0-service.rc
+++ b/audio/2.0/default/android.hardware.audio@2.0-service.rc
@@ -1,4 +1,4 @@
-service audio-hal-2-0 /system/bin/hw/android.hardware.audio@2.0-service
+service audio-hal-2-0 /vendor/bin/hw/android.hardware.audio@2.0-service
     class hal
     user audioserver
     # media gid needed for /dev/fm (radio) and for /data/misc/media (tee)
diff --git a/audio/2.0/default/service.cpp b/audio/2.0/default/service.cpp
index 646d898..5782c6e 100644
--- a/audio/2.0/default/service.cpp
+++ b/audio/2.0/default/service.cpp
@@ -33,11 +33,20 @@
 using android::hardware::registerPassthroughServiceImplementation;
 using android::hardware::broadcastradio::V1_0::IBroadcastRadioFactory;
 
+using android::OK;
+
 int main(int /* argc */, char* /* argv */ []) {
     configureRpcThreadpool(16, true /*callerWillJoin*/);
-    registerPassthroughServiceImplementation<IDevicesFactory>("audio_devices_factory");
-    registerPassthroughServiceImplementation<IEffectsFactory>("audio_effects_factory");
-    registerPassthroughServiceImplementation<ISoundTriggerHw>("sound_trigger.primary");
-    registerPassthroughServiceImplementation<IBroadcastRadioFactory>("broadcastradio");
+    android::status_t status;
+    status = registerPassthroughServiceImplementation<IDevicesFactory>();
+    LOG_ALWAYS_FATAL_IF(status != OK, "Error while registering audio service: %d", status);
+    status = registerPassthroughServiceImplementation<IEffectsFactory>();
+    LOG_ALWAYS_FATAL_IF(status != OK, "Error while registering audio effects service: %d", status);
+    // Soundtrigger and FM radio might be not present.
+    status = registerPassthroughServiceImplementation<ISoundTriggerHw>("sound_trigger.primary");
+    ALOGE_IF(status != OK, "Error while registering soundtrigger service: %d", status);
+    status = registerPassthroughServiceImplementation<IBroadcastRadioFactory>("broadcastradio");
+    ALOGE_IF(status != OK, "Error while registering fm radio service: %d", status);
     joinRpcThreadpool();
+    return status;
 }
diff --git a/audio/2.0/types.hal b/audio/2.0/types.hal
index 8fc4314..8e9ff14 100644
--- a/audio/2.0/types.hal
+++ b/audio/2.0/types.hal
@@ -98,12 +98,3 @@
     NOT_EMPTY = 1 << 0,
     NOT_FULL = 1 << 1
 };
-
-/*
- * The priority of threads executing reads and writes of audio data.
- */
-enum ThreadPriority : int32_t {
-    NORMAL = 0,
-    FAST_CAPTURE = 3,
-    FAST_MIXER = 3
-};
diff --git a/audio/common/2.0/Android.bp b/audio/common/2.0/Android.bp
index 5d33733..5330086 100644
--- a/audio/common/2.0/Android.bp
+++ b/audio/common/2.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.audio.common@2.0_hal",
+    srcs: [
+        "types.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.audio.common@2.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio.common@2.0",
     srcs: [
-        "types.hal",
+        ":android.hardware.audio.common@2.0_hal",
     ],
     out: [
         "android/hardware/audio/common/2.0/types.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio.common@2.0",
     srcs: [
-        "types.hal",
+        ":android.hardware.audio.common@2.0_hal",
     ],
     out: [
         "android/hardware/audio/common/2.0/types.h",
diff --git a/audio/common/2.0/Android.mk b/audio/common/2.0/Android.mk
index 423fe35..7d62779 100644
--- a/audio/common/2.0/Android.mk
+++ b/audio/common/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.audio.common@2.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/audio/common/2.0/types.hal b/audio/common/2.0/types.hal
index eec4ac2..ae7f545 100644
--- a/audio/common/2.0/types.hal
+++ b/audio/common/2.0/types.hal
@@ -233,7 +233,8 @@
     SBC                 = 0x1F000000UL,
     APTX                = 0x20000000UL,
     APTX_HD             = 0x21000000UL,
-    LDAC                = 0x22000000UL,
+    AC4                 = 0x22000000UL,
+    LDAC                = 0x23000000UL,
     MAIN_MASK           = 0xFF000000UL, /* Deprecated */
     SUB_MASK            = 0x00FFFFFFUL,
 
@@ -431,6 +432,9 @@
     IN_MONO   = IN_FRONT,
     IN_STEREO = (IN_LEFT | IN_RIGHT),
     IN_FRONT_BACK = (IN_FRONT | IN_BACK),
+    IN_6 = (IN_LEFT | IN_RIGHT |
+            IN_FRONT | IN_BACK |
+            IN_LEFT_PROCESSED | IN_RIGHT_PROCESSED),
     IN_VOICE_UPLINK_MONO = (IN_VOICE_UPLINK | IN_MONO),
     IN_VOICE_DNLINK_MONO = (IN_VOICE_DNLINK | IN_MONO),
     IN_VOICE_CALL_MONO   = (IN_VOICE_UPLINK_MONO |
@@ -929,3 +933,8 @@
         AudioPortSessionExt session;
     } ext;
 };
+
+struct ThreadInfo {
+    int64_t pid;
+    int64_t tid;
+};
diff --git a/audio/common/2.0/vts/types.vts b/audio/common/2.0/vts/types.vts
deleted file mode 100644
index 8d1a9db..0000000
--- a/audio/common/2.0/vts/types.vts
+++ /dev/null
@@ -1,1927 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "types"
-
-package: "android.hardware.audio.common"
-
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioHandleConsts"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "AUDIO_IO_HANDLE_NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "AUDIO_MODULE_HANDLE_NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "AUDIO_PORT_HANDLE_NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "AUDIO_PATCH_HANDLE_NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::Uuid"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "timeLow"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "timeMid"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "versionAndTimeHigh"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "variantAndClockSeqHigh"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "node"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioStreamType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DEFAULT"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "MIN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "VOICE_CALL"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SYSTEM"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "RING"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "MUSIC"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ALARM"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "NOTIFICATION"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "BLUETOOTH_SCO"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "ENFORCED_AUDIBLE"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "DTMF"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "TTS"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "ACCESSIBILITY"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "REROUTING"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "PATCH"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "PUBLIC_CNT"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "FOR_POLICY_CNT"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "CNT"
-        scalar_value: {
-            int32_t: 13
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioSource"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DEFAULT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "MIC"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "VOICE_UPLINK"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "VOICE_DOWNLINK"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "VOICE_CALL"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "CAMCORDER"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "VOICE_RECOGNITION"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "VOICE_COMMUNICATION"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "REMOTE_SUBMIX"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "UNPROCESSED"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "CNT"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "MAX"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "FM_TUNER"
-        scalar_value: {
-            int32_t: 1998
-        }
-        enumerator: "HOTWORD"
-        scalar_value: {
-            int32_t: 1999
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioSessionConsts"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OUTPUT_STAGE"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "OUTPUT_MIX"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ALLOCATE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioFormat"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "INVALID"
-        scalar_value: {
-            uint32_t: 4294967295
-        }
-        enumerator: "DEFAULT"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "PCM"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "MP3"
-        scalar_value: {
-            uint32_t: 16777216
-        }
-        enumerator: "AMR_NB"
-        scalar_value: {
-            uint32_t: 33554432
-        }
-        enumerator: "AMR_WB"
-        scalar_value: {
-            uint32_t: 50331648
-        }
-        enumerator: "AAC"
-        scalar_value: {
-            uint32_t: 67108864
-        }
-        enumerator: "HE_AAC_V1"
-        scalar_value: {
-            uint32_t: 83886080
-        }
-        enumerator: "HE_AAC_V2"
-        scalar_value: {
-            uint32_t: 100663296
-        }
-        enumerator: "VORBIS"
-        scalar_value: {
-            uint32_t: 117440512
-        }
-        enumerator: "OPUS"
-        scalar_value: {
-            uint32_t: 134217728
-        }
-        enumerator: "AC3"
-        scalar_value: {
-            uint32_t: 150994944
-        }
-        enumerator: "E_AC3"
-        scalar_value: {
-            uint32_t: 167772160
-        }
-        enumerator: "DTS"
-        scalar_value: {
-            uint32_t: 184549376
-        }
-        enumerator: "DTS_HD"
-        scalar_value: {
-            uint32_t: 201326592
-        }
-        enumerator: "IEC61937"
-        scalar_value: {
-            uint32_t: 218103808
-        }
-        enumerator: "DOLBY_TRUEHD"
-        scalar_value: {
-            uint32_t: 234881024
-        }
-        enumerator: "EVRC"
-        scalar_value: {
-            uint32_t: 268435456
-        }
-        enumerator: "EVRCB"
-        scalar_value: {
-            uint32_t: 285212672
-        }
-        enumerator: "EVRCWB"
-        scalar_value: {
-            uint32_t: 301989888
-        }
-        enumerator: "EVRCNW"
-        scalar_value: {
-            uint32_t: 318767104
-        }
-        enumerator: "AAC_ADIF"
-        scalar_value: {
-            uint32_t: 335544320
-        }
-        enumerator: "WMA"
-        scalar_value: {
-            uint32_t: 352321536
-        }
-        enumerator: "WMA_PRO"
-        scalar_value: {
-            uint32_t: 369098752
-        }
-        enumerator: "AMR_WB_PLUS"
-        scalar_value: {
-            uint32_t: 385875968
-        }
-        enumerator: "MP2"
-        scalar_value: {
-            uint32_t: 402653184
-        }
-        enumerator: "QCELP"
-        scalar_value: {
-            uint32_t: 419430400
-        }
-        enumerator: "DSD"
-        scalar_value: {
-            uint32_t: 436207616
-        }
-        enumerator: "FLAC"
-        scalar_value: {
-            uint32_t: 452984832
-        }
-        enumerator: "ALAC"
-        scalar_value: {
-            uint32_t: 469762048
-        }
-        enumerator: "APE"
-        scalar_value: {
-            uint32_t: 486539264
-        }
-        enumerator: "AAC_ADTS"
-        scalar_value: {
-            uint32_t: 503316480
-        }
-        enumerator: "SBC"
-        scalar_value: {
-            uint32_t: 520093696
-        }
-        enumerator: "APTX"
-        scalar_value: {
-            uint32_t: 536870912
-        }
-        enumerator: "APTX_HD"
-        scalar_value: {
-            uint32_t: 553648128
-        }
-        enumerator: "LDAC"
-        scalar_value: {
-            uint32_t: 570425344
-        }
-        enumerator: "MAIN_MASK"
-        scalar_value: {
-            uint32_t: 4278190080
-        }
-        enumerator: "SUB_MASK"
-        scalar_value: {
-            uint32_t: 16777215
-        }
-        enumerator: "PCM_SUB_16_BIT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "PCM_SUB_8_BIT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "PCM_SUB_32_BIT"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "PCM_SUB_8_24_BIT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "PCM_SUB_FLOAT"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "PCM_SUB_24_BIT_PACKED"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "MP3_SUB_NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "AMR_SUB_NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "AAC_SUB_MAIN"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "AAC_SUB_LC"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "AAC_SUB_SSR"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "AAC_SUB_LTP"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "AAC_SUB_HE_V1"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "AAC_SUB_SCALABLE"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "AAC_SUB_ERLC"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "AAC_SUB_LD"
-        scalar_value: {
-            uint32_t: 128
-        }
-        enumerator: "AAC_SUB_HE_V2"
-        scalar_value: {
-            uint32_t: 256
-        }
-        enumerator: "AAC_SUB_ELD"
-        scalar_value: {
-            uint32_t: 512
-        }
-        enumerator: "VORBIS_SUB_NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "PCM_16_BIT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "PCM_8_BIT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "PCM_32_BIT"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "PCM_8_24_BIT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "PCM_FLOAT"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "PCM_24_BIT_PACKED"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "AAC_MAIN"
-        scalar_value: {
-            uint32_t: 67108865
-        }
-        enumerator: "AAC_LC"
-        scalar_value: {
-            uint32_t: 67108866
-        }
-        enumerator: "AAC_SSR"
-        scalar_value: {
-            uint32_t: 67108868
-        }
-        enumerator: "AAC_LTP"
-        scalar_value: {
-            uint32_t: 67108872
-        }
-        enumerator: "AAC_HE_V1"
-        scalar_value: {
-            uint32_t: 67108880
-        }
-        enumerator: "AAC_SCALABLE"
-        scalar_value: {
-            uint32_t: 67108896
-        }
-        enumerator: "AAC_ERLC"
-        scalar_value: {
-            uint32_t: 67108928
-        }
-        enumerator: "AAC_LD"
-        scalar_value: {
-            uint32_t: 67108992
-        }
-        enumerator: "AAC_HE_V2"
-        scalar_value: {
-            uint32_t: 67109120
-        }
-        enumerator: "AAC_ELD"
-        scalar_value: {
-            uint32_t: 67109376
-        }
-        enumerator: "AAC_ADTS_MAIN"
-        scalar_value: {
-            uint32_t: 503316481
-        }
-        enumerator: "AAC_ADTS_LC"
-        scalar_value: {
-            uint32_t: 503316482
-        }
-        enumerator: "AAC_ADTS_SSR"
-        scalar_value: {
-            uint32_t: 503316484
-        }
-        enumerator: "AAC_ADTS_LTP"
-        scalar_value: {
-            uint32_t: 503316488
-        }
-        enumerator: "AAC_ADTS_HE_V1"
-        scalar_value: {
-            uint32_t: 503316496
-        }
-        enumerator: "AAC_ADTS_SCALABLE"
-        scalar_value: {
-            uint32_t: 503316512
-        }
-        enumerator: "AAC_ADTS_ERLC"
-        scalar_value: {
-            uint32_t: 503316544
-        }
-        enumerator: "AAC_ADTS_LD"
-        scalar_value: {
-            uint32_t: 503316608
-        }
-        enumerator: "AAC_ADTS_HE_V2"
-        scalar_value: {
-            uint32_t: 503316736
-        }
-        enumerator: "AAC_ADTS_ELD"
-        scalar_value: {
-            uint32_t: 503316992
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::FixedChannelCount"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "FCC_2"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FCC_8"
-        scalar_value: {
-            int32_t: 8
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "REPRESENTATION_POSITION"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "REPRESENTATION_INDEX"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "INVALID"
-        scalar_value: {
-            uint32_t: 3221225472
-        }
-        enumerator: "OUT_FRONT_LEFT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "OUT_FRONT_RIGHT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "OUT_FRONT_CENTER"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "OUT_LOW_FREQUENCY"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "OUT_BACK_LEFT"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "OUT_BACK_RIGHT"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "OUT_FRONT_LEFT_OF_CENTER"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "OUT_FRONT_RIGHT_OF_CENTER"
-        scalar_value: {
-            uint32_t: 128
-        }
-        enumerator: "OUT_BACK_CENTER"
-        scalar_value: {
-            uint32_t: 256
-        }
-        enumerator: "OUT_SIDE_LEFT"
-        scalar_value: {
-            uint32_t: 512
-        }
-        enumerator: "OUT_SIDE_RIGHT"
-        scalar_value: {
-            uint32_t: 1024
-        }
-        enumerator: "OUT_TOP_CENTER"
-        scalar_value: {
-            uint32_t: 2048
-        }
-        enumerator: "OUT_TOP_FRONT_LEFT"
-        scalar_value: {
-            uint32_t: 4096
-        }
-        enumerator: "OUT_TOP_FRONT_CENTER"
-        scalar_value: {
-            uint32_t: 8192
-        }
-        enumerator: "OUT_TOP_FRONT_RIGHT"
-        scalar_value: {
-            uint32_t: 16384
-        }
-        enumerator: "OUT_TOP_BACK_LEFT"
-        scalar_value: {
-            uint32_t: 32768
-        }
-        enumerator: "OUT_TOP_BACK_CENTER"
-        scalar_value: {
-            uint32_t: 65536
-        }
-        enumerator: "OUT_TOP_BACK_RIGHT"
-        scalar_value: {
-            uint32_t: 131072
-        }
-        enumerator: "OUT_MONO"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "OUT_STEREO"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "OUT_2POINT1"
-        scalar_value: {
-            uint32_t: 11
-        }
-        enumerator: "OUT_QUAD"
-        scalar_value: {
-            uint32_t: 51
-        }
-        enumerator: "OUT_QUAD_BACK"
-        scalar_value: {
-            uint32_t: 51
-        }
-        enumerator: "OUT_QUAD_SIDE"
-        scalar_value: {
-            uint32_t: 1539
-        }
-        enumerator: "OUT_SURROUND"
-        scalar_value: {
-            uint32_t: 263
-        }
-        enumerator: "OUT_PENTA"
-        scalar_value: {
-            uint32_t: 55
-        }
-        enumerator: "OUT_5POINT1"
-        scalar_value: {
-            uint32_t: 63
-        }
-        enumerator: "OUT_5POINT1_BACK"
-        scalar_value: {
-            uint32_t: 63
-        }
-        enumerator: "OUT_5POINT1_SIDE"
-        scalar_value: {
-            uint32_t: 1551
-        }
-        enumerator: "OUT_6POINT1"
-        scalar_value: {
-            uint32_t: 319
-        }
-        enumerator: "OUT_7POINT1"
-        scalar_value: {
-            uint32_t: 1599
-        }
-        enumerator: "OUT_ALL"
-        scalar_value: {
-            uint32_t: 262143
-        }
-        enumerator: "IN_LEFT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "IN_RIGHT"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "IN_FRONT"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "IN_BACK"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "IN_LEFT_PROCESSED"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "IN_RIGHT_PROCESSED"
-        scalar_value: {
-            uint32_t: 128
-        }
-        enumerator: "IN_FRONT_PROCESSED"
-        scalar_value: {
-            uint32_t: 256
-        }
-        enumerator: "IN_BACK_PROCESSED"
-        scalar_value: {
-            uint32_t: 512
-        }
-        enumerator: "IN_PRESSURE"
-        scalar_value: {
-            uint32_t: 1024
-        }
-        enumerator: "IN_X_AXIS"
-        scalar_value: {
-            uint32_t: 2048
-        }
-        enumerator: "IN_Y_AXIS"
-        scalar_value: {
-            uint32_t: 4096
-        }
-        enumerator: "IN_Z_AXIS"
-        scalar_value: {
-            uint32_t: 8192
-        }
-        enumerator: "IN_VOICE_UPLINK"
-        scalar_value: {
-            uint32_t: 16384
-        }
-        enumerator: "IN_VOICE_DNLINK"
-        scalar_value: {
-            uint32_t: 32768
-        }
-        enumerator: "IN_MONO"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "IN_STEREO"
-        scalar_value: {
-            uint32_t: 12
-        }
-        enumerator: "IN_FRONT_BACK"
-        scalar_value: {
-            uint32_t: 48
-        }
-        enumerator: "IN_VOICE_UPLINK_MONO"
-        scalar_value: {
-            uint32_t: 16400
-        }
-        enumerator: "IN_VOICE_DNLINK_MONO"
-        scalar_value: {
-            uint32_t: 32784
-        }
-        enumerator: "IN_VOICE_CALL_MONO"
-        scalar_value: {
-            uint32_t: 49168
-        }
-        enumerator: "IN_ALL"
-        scalar_value: {
-            uint32_t: 65532
-        }
-        enumerator: "COUNT_MAX"
-        scalar_value: {
-            uint32_t: 30
-        }
-        enumerator: "INDEX_HDR"
-        scalar_value: {
-            uint32_t: 2147483648
-        }
-        enumerator: "INDEX_MASK_1"
-        scalar_value: {
-            uint32_t: 2147483649
-        }
-        enumerator: "INDEX_MASK_2"
-        scalar_value: {
-            uint32_t: 2147483651
-        }
-        enumerator: "INDEX_MASK_3"
-        scalar_value: {
-            uint32_t: 2147483655
-        }
-        enumerator: "INDEX_MASK_4"
-        scalar_value: {
-            uint32_t: 2147483663
-        }
-        enumerator: "INDEX_MASK_5"
-        scalar_value: {
-            uint32_t: 2147483679
-        }
-        enumerator: "INDEX_MASK_6"
-        scalar_value: {
-            uint32_t: 2147483711
-        }
-        enumerator: "INDEX_MASK_7"
-        scalar_value: {
-            uint32_t: 2147483775
-        }
-        enumerator: "INDEX_MASK_8"
-        scalar_value: {
-            uint32_t: 2147483903
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioInterleave"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "LEFT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RIGHT"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "INVALID"
-        scalar_value: {
-            int32_t: -2
-        }
-        enumerator: "CURRENT"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "NORMAL"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RINGTONE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "IN_CALL"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "IN_COMMUNICATION"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CNT"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "MAX"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioDevice"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "BIT_IN"
-        scalar_value: {
-            uint32_t: 2147483648
-        }
-        enumerator: "BIT_DEFAULT"
-        scalar_value: {
-            uint32_t: 1073741824
-        }
-        enumerator: "OUT_EARPIECE"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "OUT_SPEAKER"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "OUT_WIRED_HEADSET"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "OUT_WIRED_HEADPHONE"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "OUT_BLUETOOTH_SCO"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "OUT_BLUETOOTH_SCO_HEADSET"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "OUT_BLUETOOTH_SCO_CARKIT"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "OUT_BLUETOOTH_A2DP"
-        scalar_value: {
-            uint32_t: 128
-        }
-        enumerator: "OUT_BLUETOOTH_A2DP_HEADPHONES"
-        scalar_value: {
-            uint32_t: 256
-        }
-        enumerator: "OUT_BLUETOOTH_A2DP_SPEAKER"
-        scalar_value: {
-            uint32_t: 512
-        }
-        enumerator: "OUT_AUX_DIGITAL"
-        scalar_value: {
-            uint32_t: 1024
-        }
-        enumerator: "OUT_HDMI"
-        scalar_value: {
-            uint32_t: 1024
-        }
-        enumerator: "OUT_ANLG_DOCK_HEADSET"
-        scalar_value: {
-            uint32_t: 2048
-        }
-        enumerator: "OUT_DGTL_DOCK_HEADSET"
-        scalar_value: {
-            uint32_t: 4096
-        }
-        enumerator: "OUT_USB_ACCESSORY"
-        scalar_value: {
-            uint32_t: 8192
-        }
-        enumerator: "OUT_USB_DEVICE"
-        scalar_value: {
-            uint32_t: 16384
-        }
-        enumerator: "OUT_REMOTE_SUBMIX"
-        scalar_value: {
-            uint32_t: 32768
-        }
-        enumerator: "OUT_TELEPHONY_TX"
-        scalar_value: {
-            uint32_t: 65536
-        }
-        enumerator: "OUT_LINE"
-        scalar_value: {
-            uint32_t: 131072
-        }
-        enumerator: "OUT_HDMI_ARC"
-        scalar_value: {
-            uint32_t: 262144
-        }
-        enumerator: "OUT_SPDIF"
-        scalar_value: {
-            uint32_t: 524288
-        }
-        enumerator: "OUT_FM"
-        scalar_value: {
-            uint32_t: 1048576
-        }
-        enumerator: "OUT_AUX_LINE"
-        scalar_value: {
-            uint32_t: 2097152
-        }
-        enumerator: "OUT_SPEAKER_SAFE"
-        scalar_value: {
-            uint32_t: 4194304
-        }
-        enumerator: "OUT_IP"
-        scalar_value: {
-            uint32_t: 8388608
-        }
-        enumerator: "OUT_BUS"
-        scalar_value: {
-            uint32_t: 16777216
-        }
-        enumerator: "OUT_PROXY"
-        scalar_value: {
-            uint32_t: 33554432
-        }
-        enumerator: "OUT_DEFAULT"
-        scalar_value: {
-            uint32_t: 1073741824
-        }
-        enumerator: "OUT_ALL"
-        scalar_value: {
-            uint32_t: 1140850687
-        }
-        enumerator: "OUT_ALL_A2DP"
-        scalar_value: {
-            uint32_t: 896
-        }
-        enumerator: "OUT_ALL_SCO"
-        scalar_value: {
-            uint32_t: 112
-        }
-        enumerator: "OUT_ALL_USB"
-        scalar_value: {
-            uint32_t: 24576
-        }
-        enumerator: "IN_COMMUNICATION"
-        scalar_value: {
-            uint32_t: 2147483649
-        }
-        enumerator: "IN_AMBIENT"
-        scalar_value: {
-            uint32_t: 2147483650
-        }
-        enumerator: "IN_BUILTIN_MIC"
-        scalar_value: {
-            uint32_t: 2147483652
-        }
-        enumerator: "IN_BLUETOOTH_SCO_HEADSET"
-        scalar_value: {
-            uint32_t: 2147483656
-        }
-        enumerator: "IN_WIRED_HEADSET"
-        scalar_value: {
-            uint32_t: 2147483664
-        }
-        enumerator: "IN_AUX_DIGITAL"
-        scalar_value: {
-            uint32_t: 2147483680
-        }
-        enumerator: "IN_HDMI"
-        scalar_value: {
-            uint32_t: 2147483680
-        }
-        enumerator: "IN_VOICE_CALL"
-        scalar_value: {
-            uint32_t: 2147483712
-        }
-        enumerator: "IN_TELEPHONY_RX"
-        scalar_value: {
-            uint32_t: 2147483712
-        }
-        enumerator: "IN_BACK_MIC"
-        scalar_value: {
-            uint32_t: 2147483776
-        }
-        enumerator: "IN_REMOTE_SUBMIX"
-        scalar_value: {
-            uint32_t: 2147483904
-        }
-        enumerator: "IN_ANLG_DOCK_HEADSET"
-        scalar_value: {
-            uint32_t: 2147484160
-        }
-        enumerator: "IN_DGTL_DOCK_HEADSET"
-        scalar_value: {
-            uint32_t: 2147484672
-        }
-        enumerator: "IN_USB_ACCESSORY"
-        scalar_value: {
-            uint32_t: 2147485696
-        }
-        enumerator: "IN_USB_DEVICE"
-        scalar_value: {
-            uint32_t: 2147487744
-        }
-        enumerator: "IN_FM_TUNER"
-        scalar_value: {
-            uint32_t: 2147491840
-        }
-        enumerator: "IN_TV_TUNER"
-        scalar_value: {
-            uint32_t: 2147500032
-        }
-        enumerator: "IN_LINE"
-        scalar_value: {
-            uint32_t: 2147516416
-        }
-        enumerator: "IN_SPDIF"
-        scalar_value: {
-            uint32_t: 2147549184
-        }
-        enumerator: "IN_BLUETOOTH_A2DP"
-        scalar_value: {
-            uint32_t: 2147614720
-        }
-        enumerator: "IN_LOOPBACK"
-        scalar_value: {
-            uint32_t: 2147745792
-        }
-        enumerator: "IN_IP"
-        scalar_value: {
-            uint32_t: 2148007936
-        }
-        enumerator: "IN_BUS"
-        scalar_value: {
-            uint32_t: 2148532224
-        }
-        enumerator: "IN_PROXY"
-        scalar_value: {
-            uint32_t: 2164260864
-        }
-        enumerator: "IN_DEFAULT"
-        scalar_value: {
-            uint32_t: 3221225472
-        }
-        enumerator: "IN_ALL"
-        scalar_value: {
-            uint32_t: 3240099839
-        }
-        enumerator: "IN_ALL_SCO"
-        scalar_value: {
-            uint32_t: 2147483656
-        }
-        enumerator: "IN_ALL_USB"
-        scalar_value: {
-            uint32_t: 2147489792
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioOutputFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "DIRECT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "PRIMARY"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FAST"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "DEEP_BUFFER"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "COMPRESS_OFFLOAD"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "NON_BLOCKING"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "HW_AV_SYNC"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "TTS"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "RAW"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "SYNC"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "IEC958_NONAUDIO"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "DIRECT_PCM"
-        scalar_value: {
-            int32_t: 8192
-        }
-        enumerator: "MMAP_NOIRQ"
-        scalar_value: {
-            int32_t: 16384
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioInputFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "FAST"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "HW_HOTWORD"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "RAW"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "SYNC"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "MMAP_NOIRQ"
-        scalar_value: {
-            int32_t: 16
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioUsage"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "MEDIA"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "VOICE_COMMUNICATION"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "VOICE_COMMUNICATION_SIGNALLING"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ALARM"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "NOTIFICATION"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "NOTIFICATION_TELEPHONY_RINGTONE"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "NOTIFICATION_COMMUNICATION_REQUEST"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "NOTIFICATION_COMMUNICATION_INSTANT"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "NOTIFICATION_COMMUNICATION_DELAYED"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "NOTIFICATION_EVENT"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "ASSISTANCE_ACCESSIBILITY"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "ASSISTANCE_NAVIGATION_GUIDANCE"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "ASSISTANCE_SONIFICATION"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "GAME"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "VIRTUAL_SOURCE"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "CNT"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "MAX"
-        scalar_value: {
-            int32_t: 15
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioOffloadInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sampleRateHz"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "format"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioFormat"
-    }
-    struct_value: {
-        name: "streamType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioStreamType"
-    }
-    struct_value: {
-        name: "bitRatePerSecond"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "durationMicroseconds"
-        type: TYPE_SCALAR
-        scalar_type: "int64_t"
-    }
-    struct_value: {
-        name: "hasVideo"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "isStreaming"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "bitWidth"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "bufferSize"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "usage"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioUsage"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sampleRateHz"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "format"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioFormat"
-    }
-    struct_value: {
-        name: "offloadInfo"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioOffloadInfo"
-    }
-    struct_value: {
-        name: "frameCount"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioGainMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "JOINT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "CHANNELS"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "RAMP"
-        scalar_value: {
-            uint32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioGain"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "mode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioGainMode"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "minValue"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "maxValue"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "defaultValue"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "stepValue"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "minRampMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxRampMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioGainConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "index"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "mode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioGainMode"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "values"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 32
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-    struct_value: {
-        name: "rampDurationMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortRole"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SOURCE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "SINK"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "DEVICE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "MIX"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "SESSION"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortConfigDeviceExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "hwModule"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioDevice"
-    }
-    struct_value: {
-        name: "address"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 32
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortConfigSessionExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "session"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortConfigMask"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SAMPLE_RATE"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "CHANNEL_MASK"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "FORMAT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "GAIN"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "ALL"
-        scalar_value: {
-            uint32_t: 15
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortConfig"
-    type: TYPE_STRUCT
-    sub_struct: {
-        name: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext"
-        type: TYPE_UNION
-        sub_union: {
-            name: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext::AudioPortConfigMixExt"
-            type: TYPE_STRUCT
-            sub_struct: {
-                name: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext::AudioPortConfigMixExt::UseCase"
-                type: TYPE_UNION
-                union_value: {
-                    name: "stream"
-                    type: TYPE_ENUM
-                    predefined_type: "::android::hardware::audio::common::V2_0::AudioStreamType"
-                }
-                union_value: {
-                    name: "source"
-                    type: TYPE_ENUM
-                    predefined_type: "::android::hardware::audio::common::V2_0::AudioSource"
-                }
-            }
-            struct_value: {
-                name: "hwModule"
-                type: TYPE_SCALAR
-                scalar_type: "int32_t"
-            }
-            struct_value: {
-                name: "ioHandle"
-                type: TYPE_SCALAR
-                scalar_type: "int32_t"
-            }
-            struct_value: {
-                name: "useCase"
-                type: TYPE_UNION
-                predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext::AudioPortConfigMixExt::UseCase"
-            }
-        }
-        union_value: {
-            name: "device"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfigDeviceExt"
-        }
-        union_value: {
-            name: "mix"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext::AudioPortConfigMixExt"
-        }
-        union_value: {
-            name: "session"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfigSessionExt"
-        }
-    }
-    struct_value: {
-        name: "id"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "configMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfigMask"
-    }
-    struct_value: {
-        name: "sampleRateHz"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "format"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioFormat"
-    }
-    struct_value: {
-        name: "gain"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioGainConfig"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortType"
-    }
-    struct_value: {
-        name: "role"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortRole"
-    }
-    struct_value: {
-        name: "ext"
-        type: TYPE_UNION
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortDeviceExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "hwModule"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioDevice"
-    }
-    struct_value: {
-        name: "address"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 32
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioMixLatencyClass"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "LOW"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "NORMAL"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortMixExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "hwModule"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "ioHandle"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "latencyClass"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioMixLatencyClass"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortSessionExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "session"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPort"
-    type: TYPE_STRUCT
-    sub_struct: {
-        name: "::android::hardware::audio::common::V2_0::AudioPort::Ext"
-        type: TYPE_UNION
-        union_value: {
-            name: "device"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortDeviceExt"
-        }
-        union_value: {
-            name: "mix"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortMixExt"
-        }
-        union_value: {
-            name: "session"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortSessionExt"
-        }
-    }
-    struct_value: {
-        name: "id"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "role"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortRole"
-    }
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "sampleRates"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-    struct_value: {
-        name: "channelMasks"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-        }
-    }
-    struct_value: {
-        name: "formats"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioFormat"
-        }
-    }
-    struct_value: {
-        name: "gains"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioGain"
-        }
-    }
-    struct_value: {
-        name: "activeConfig"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfig"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortType"
-    }
-    struct_value: {
-        name: "ext"
-        type: TYPE_UNION
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPort::Ext"
-    }
-}
-
diff --git a/audio/effect/2.0/Android.bp b/audio/effect/2.0/Android.bp
index ee76a0e..83a702a 100644
--- a/audio/effect/2.0/Android.bp
+++ b/audio/effect/2.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.audio.effect@2.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio.effect@2.0",
+filegroup {
+    name: "android.hardware.audio.effect@2.0_hal",
     srcs: [
         "types.hal",
         "IAcousticEchoCancelerEffect.hal",
@@ -21,6 +19,15 @@
         "IVirtualizerEffect.hal",
         "IVisualizerEffect.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.audio.effect@2.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio.effect@2.0",
+    srcs: [
+        ":android.hardware.audio.effect@2.0_hal",
+    ],
     out: [
         "android/hardware/audio/effect/2.0/types.cpp",
         "android/hardware/audio/effect/2.0/AcousticEchoCancelerEffectAll.cpp",
@@ -45,21 +52,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio.effect@2.0",
     srcs: [
-        "types.hal",
-        "IAcousticEchoCancelerEffect.hal",
-        "IAutomaticGainControlEffect.hal",
-        "IBassBoostEffect.hal",
-        "IDownmixEffect.hal",
-        "IEffect.hal",
-        "IEffectBufferProviderCallback.hal",
-        "IEffectsFactory.hal",
-        "IEnvironmentalReverbEffect.hal",
-        "IEqualizerEffect.hal",
-        "ILoudnessEnhancerEffect.hal",
-        "INoiseSuppressionEffect.hal",
-        "IPresetReverbEffect.hal",
-        "IVirtualizerEffect.hal",
-        "IVisualizerEffect.hal",
+        ":android.hardware.audio.effect@2.0_hal",
     ],
     out: [
         "android/hardware/audio/effect/2.0/types.h",
diff --git a/audio/effect/2.0/Android.mk b/audio/effect/2.0/Android.mk
index 3383efd..d71255e 100644
--- a/audio/effect/2.0/Android.mk
+++ b/audio/effect/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.audio.effect@2.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/audio/effect/2.0/default/Android.mk b/audio/effect/2.0/default/Android.mk
index 18076ed..1541d41 100644
--- a/audio/effect/2.0/default/Android.mk
+++ b/audio/effect/2.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.audio.effect@2.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     AcousticEchoCancelerEffect.cpp \
diff --git a/audio/effect/2.0/default/Effect.cpp b/audio/effect/2.0/default/Effect.cpp
index 3c97fc4..83c8e09 100644
--- a/audio/effect/2.0/default/Effect.cpp
+++ b/audio/effect/2.0/default/Effect.cpp
@@ -17,8 +17,11 @@
 #include <memory.h>
 
 #define LOG_TAG "EffectHAL"
+#define ATRACE_TAG ATRACE_TAG_AUDIO
+
 #include <android/log.h>
 #include <media/EffectsFactoryApi.h>
+#include <utils/Trace.h>
 
 #include "Conversions.h"
 #include "Effect.h"
@@ -74,12 +77,10 @@
     // as the Thread uses mutexes, and this can lead to priority inversion.
     while(!std::atomic_load_explicit(mStop, std::memory_order_acquire)) {
         uint32_t efState = 0;
-        mEfGroup->wait(
-                static_cast<uint32_t>(MessageQueueFlagBits::REQUEST_PROCESS_ALL),
-                &efState,
-                NS_PER_SEC);
-        if (!(efState & static_cast<uint32_t>(MessageQueueFlagBits::REQUEST_PROCESS_ALL))) {
-            continue;  // Nothing to do.
+        mEfGroup->wait(static_cast<uint32_t>(MessageQueueFlagBits::REQUEST_PROCESS_ALL), &efState);
+        if (!(efState & static_cast<uint32_t>(MessageQueueFlagBits::REQUEST_PROCESS_ALL))
+                || (efState & static_cast<uint32_t>(MessageQueueFlagBits::REQUEST_QUIT))) {
+            continue;  // Nothing to do or time to quit.
         }
         Result retval = Result::OK;
         if (efState & static_cast<uint32_t>(MessageQueueFlagBits::REQUEST_PROCESS_REVERSE)
@@ -134,7 +135,23 @@
 }
 
 Effect::~Effect() {
+    ATRACE_CALL();
     close();
+    if (mProcessThread.get()) {
+        ATRACE_NAME("mProcessThread->join");
+        status_t status = mProcessThread->join();
+        ALOGE_IF(status, "processing thread exit error: %s", strerror(-status));
+    }
+    if (mEfGroup) {
+        status_t status = EventFlag::deleteEventFlag(&mEfGroup);
+        ALOGE_IF(status, "processing MQ event flag deletion error: %s", strerror(-status));
+    }
+    mInBuffer.clear();
+    mOutBuffer.clear();
+    int status = EffectRelease(mHandle);
+    ALOGW_IF(status, "Error releasing effect %p: %s", mHandle, strerror(-status));
+    EffectMap::getInstance().remove(mHandle);
+    mHandle = 0;
 }
 
 // static
@@ -731,19 +748,10 @@
     mIsClosed = true;
     if (mProcessThread.get()) {
         mStopProcessThread.store(true, std::memory_order_release);
-        status_t status = mProcessThread->requestExitAndWait();
-        ALOGE_IF(status, "processing thread exit error: %s", strerror(-status));
     }
     if (mEfGroup) {
-        status_t status = EventFlag::deleteEventFlag(&mEfGroup);
-        ALOGE_IF(status, "processing MQ event flag deletion error: %s", strerror(-status));
+        mEfGroup->wake(static_cast<uint32_t>(MessageQueueFlagBits::REQUEST_QUIT));
     }
-    mInBuffer.clear();
-    mOutBuffer.clear();
-    int status = EffectRelease(mHandle);
-    ALOGW_IF(status, "Error releasing effect %p: %s", mHandle, strerror(-status));
-    EffectMap::getInstance().remove(mHandle);
-    mHandle = 0;
     return Result::OK;
 }
 
diff --git a/audio/effect/2.0/types.hal b/audio/effect/2.0/types.hal
index 0cac59a..0626ec5 100644
--- a/audio/effect/2.0/types.hal
+++ b/audio/effect/2.0/types.hal
@@ -293,5 +293,7 @@
     DONE_PROCESSING = 1 << 0,
     REQUEST_PROCESS = 1 << 1,
     REQUEST_PROCESS_REVERSE = 1 << 2,
-    REQUEST_PROCESS_ALL = REQUEST_PROCESS | REQUEST_PROCESS_REVERSE
+    REQUEST_QUIT = 1 << 3,
+    REQUEST_PROCESS_ALL =
+        REQUEST_PROCESS | REQUEST_PROCESS_REVERSE | REQUEST_QUIT
 };
diff --git a/audio/effect/2.0/vts/functional/Android.bp b/audio/effect/2.0/vts/functional/Android.bp
index b82d44a..65fafad 100644
--- a/audio/effect/2.0/vts/functional/Android.bp
+++ b/audio/effect/2.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "audio_effect_hidl_hal_test",
+    name: "VtsHalAudioEffectV2_0TargetTest",
     gtest: true,
-    srcs: ["audio_effect_hidl_hal_test.cpp"],
+    srcs: ["VtsHalAudioEffectV2_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
diff --git a/audio/effect/2.0/vts/functional/Android.mk b/audio/effect/2.0/vts/functional/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/audio/effect/2.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/audio/effect/2.0/vts/functional/audio_effect_hidl_hal_test.cpp b/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp
similarity index 96%
rename from audio/effect/2.0/vts/functional/audio_effect_hidl_hal_test.cpp
rename to audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp
index 9b7d0cf..6e050c6 100644
--- a/audio/effect/2.0/vts/functional/audio_effect_hidl_hal_test.cpp
+++ b/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp
@@ -38,8 +38,7 @@
 class AudioEffectHidlTest : public ::testing::Test {
  public:
   virtual void SetUp() override {
-    // currently test passthrough mode only
-    effectsFactory = IEffectsFactory::getService("audio_effects_factory", true);
+    effectsFactory = IEffectsFactory::getService();
     ASSERT_NE(effectsFactory, nullptr);
   }
 
diff --git a/audio/effect/2.0/vts/functional/vts/Android.mk b/audio/effect/2.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/audio/effect/2.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/audio/effect/2.0/vts/functional/vts/testcases/Android.mk b/audio/effect/2.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/audio/effect/2.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/audio/effect/2.0/vts/functional/vts/testcases/hal/Android.mk b/audio/effect/2.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/audio/effect/2.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/Android.mk b/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/Android.mk b/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/Android.mk b/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target/Android.mk b/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target/Android.mk
deleted file mode 100644
index fe5ea0f..0000000
--- a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalAudioEffectHidlTargetBasicTest
-VTS_CONFIG_SRC_DIR := testcases/hal/audio/effect/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target/AndroidTest.xml b/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target/AndroidTest.xml
deleted file mode 100644
index f0af67a..0000000
--- a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Audio Effect HIDL HAL's basic target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalAudioEffectHidlTargetBasicTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/audio_effect_hidl_hal_test/audio_effect_hidl_hal_test,
-            _64bit::DATA/nativetest64/audio_effect_hidl_hal_test/audio_effect_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target_profiling/Android.mk b/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target_profiling/Android.mk
deleted file mode 100644
index 430600d..0000000
--- a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalAudioEffectHidlTargetBasicProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/audio/effect/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target_profiling/AndroidTest.xml b/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 7febf26..0000000
--- a/audio/effect/2.0/vts/functional/vts/testcases/hal/audio/effect/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Audio Effect HIDL HAL's basic target-side, profiling test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalAudioEffectHidlTargetBasicProfilingTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/audio_effect_hidl_hal_test/audio_effect_hidl_hal_test,
-            _64bit::DATA/nativetest64/audio_effect_hidl_hal_test/audio_effect_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/example/Android.bp b/automotive/Android.bp
similarity index 61%
copy from example/Android.bp
copy to automotive/Android.bp
index ea6dbb5..1f39e88 100644
--- a/example/Android.bp
+++ b/automotive/Android.bp
@@ -1,4 +1,5 @@
 // This is an autogenerated file, do not edit.
 subdirs = [
-    "extension/light/2.0",
+    "vehicle/2.0",
+    "vehicle/2.1",
 ]
diff --git a/automotive/vehicle/2.0/Android.bp b/automotive/vehicle/2.0/Android.bp
new file mode 100644
index 0000000..e08d3ca
--- /dev/null
+++ b/automotive/vehicle/2.0/Android.bp
@@ -0,0 +1,69 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.automotive.vehicle@2.0_hal",
+    srcs: [
+        "types.hal",
+        "IVehicle.hal",
+        "IVehicleCallback.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.automotive.vehicle@2.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.vehicle@2.0",
+    srcs: [
+        ":android.hardware.automotive.vehicle@2.0_hal",
+    ],
+    out: [
+        "android/hardware/automotive/vehicle/2.0/types.cpp",
+        "android/hardware/automotive/vehicle/2.0/VehicleAll.cpp",
+        "android/hardware/automotive/vehicle/2.0/VehicleCallbackAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.automotive.vehicle@2.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.vehicle@2.0",
+    srcs: [
+        ":android.hardware.automotive.vehicle@2.0_hal",
+    ],
+    out: [
+        "android/hardware/automotive/vehicle/2.0/types.h",
+        "android/hardware/automotive/vehicle/2.0/IVehicle.h",
+        "android/hardware/automotive/vehicle/2.0/IHwVehicle.h",
+        "android/hardware/automotive/vehicle/2.0/BnHwVehicle.h",
+        "android/hardware/automotive/vehicle/2.0/BpHwVehicle.h",
+        "android/hardware/automotive/vehicle/2.0/BsVehicle.h",
+        "android/hardware/automotive/vehicle/2.0/IVehicleCallback.h",
+        "android/hardware/automotive/vehicle/2.0/IHwVehicleCallback.h",
+        "android/hardware/automotive/vehicle/2.0/BnHwVehicleCallback.h",
+        "android/hardware/automotive/vehicle/2.0/BpHwVehicleCallback.h",
+        "android/hardware/automotive/vehicle/2.0/BsVehicleCallback.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.automotive.vehicle@2.0",
+    generated_sources: ["android.hardware.automotive.vehicle@2.0_genc++"],
+    generated_headers: ["android.hardware.automotive.vehicle@2.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.automotive.vehicle@2.0_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/vehicle/2.0/Android.mk b/automotive/vehicle/2.0/Android.mk
similarity index 71%
rename from vehicle/2.0/Android.mk
rename to automotive/vehicle/2.0/Android.mk
index 9544960..c540027 100644
--- a/vehicle/2.0/Android.mk
+++ b/automotive/vehicle/2.0/Android.mk
@@ -5,10 +5,10 @@
 ################################################################################
 
 include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.vehicle@2.0-java
+LOCAL_MODULE := android.hardware.automotive.vehicle@2.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -19,7 +19,7 @@
 #
 # Build types.hal (CommonIgnitionMonitors)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/CommonIgnitionMonitors.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/CommonIgnitionMonitors.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -29,7 +29,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.CommonIgnitionMonitors
+        android.hardware.automotive.vehicle@2.0::types.CommonIgnitionMonitors
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -38,7 +38,7 @@
 #
 # Build types.hal (CompressionIgnitionMonitors)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/CompressionIgnitionMonitors.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/CompressionIgnitionMonitors.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -48,7 +48,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.CompressionIgnitionMonitors
+        android.hardware.automotive.vehicle@2.0::types.CompressionIgnitionMonitors
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -57,7 +57,7 @@
 #
 # Build types.hal (FuelSystemStatus)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/FuelSystemStatus.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/FuelSystemStatus.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -67,7 +67,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.FuelSystemStatus
+        android.hardware.automotive.vehicle@2.0::types.FuelSystemStatus
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -76,7 +76,7 @@
 #
 # Build types.hal (FuelType)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/FuelType.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/FuelType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -86,7 +86,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.FuelType
+        android.hardware.automotive.vehicle@2.0::types.FuelType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -95,7 +95,7 @@
 #
 # Build types.hal (IgnitionMonitorKind)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/IgnitionMonitorKind.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/IgnitionMonitorKind.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -105,7 +105,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.IgnitionMonitorKind
+        android.hardware.automotive.vehicle@2.0::types.IgnitionMonitorKind
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -114,7 +114,7 @@
 #
 # Build types.hal (Obd2FloatSensorIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/Obd2FloatSensorIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2FloatSensorIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -124,7 +124,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.Obd2FloatSensorIndex
+        android.hardware.automotive.vehicle@2.0::types.Obd2FloatSensorIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -133,7 +133,7 @@
 #
 # Build types.hal (Obd2IntegerSensorIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/Obd2IntegerSensorIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2IntegerSensorIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -143,7 +143,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.Obd2IntegerSensorIndex
+        android.hardware.automotive.vehicle@2.0::types.Obd2IntegerSensorIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -152,7 +152,7 @@
 #
 # Build types.hal (SecondaryAirStatus)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/SecondaryAirStatus.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SecondaryAirStatus.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -162,7 +162,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.SecondaryAirStatus
+        android.hardware.automotive.vehicle@2.0::types.SecondaryAirStatus
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -171,7 +171,7 @@
 #
 # Build types.hal (SparkIgnitionMonitors)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/SparkIgnitionMonitors.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SparkIgnitionMonitors.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -181,7 +181,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.SparkIgnitionMonitors
+        android.hardware.automotive.vehicle@2.0::types.SparkIgnitionMonitors
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -190,7 +190,7 @@
 #
 # Build types.hal (StatusCode)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/StatusCode.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/StatusCode.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -200,7 +200,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.StatusCode
+        android.hardware.automotive.vehicle@2.0::types.StatusCode
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -209,7 +209,7 @@
 #
 # Build types.hal (SubscribeFlags)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/SubscribeFlags.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SubscribeFlags.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -219,7 +219,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.SubscribeFlags
+        android.hardware.automotive.vehicle@2.0::types.SubscribeFlags
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -228,7 +228,7 @@
 #
 # Build types.hal (SubscribeOptions)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/SubscribeOptions.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SubscribeOptions.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -238,7 +238,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.SubscribeOptions
+        android.hardware.automotive.vehicle@2.0::types.SubscribeOptions
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -247,7 +247,7 @@
 #
 # Build types.hal (VehicleApPowerBootupReason)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerBootupReason.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerBootupReason.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -257,7 +257,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerBootupReason
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerBootupReason
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -266,7 +266,7 @@
 #
 # Build types.hal (VehicleApPowerSetState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerSetState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerSetState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -276,7 +276,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerSetState
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerSetState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -285,7 +285,7 @@
 #
 # Build types.hal (VehicleApPowerState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -295,7 +295,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerState
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -304,7 +304,7 @@
 #
 # Build types.hal (VehicleApPowerStateConfigFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerStateConfigFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerStateConfigFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -314,7 +314,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerStateConfigFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerStateConfigFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -323,7 +323,7 @@
 #
 # Build types.hal (VehicleApPowerStateIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerStateIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerStateIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -333,7 +333,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerStateIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerStateIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -342,7 +342,7 @@
 #
 # Build types.hal (VehicleApPowerStateShutdownParam)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerStateShutdownParam.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerStateShutdownParam.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -352,7 +352,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerStateShutdownParam
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerStateShutdownParam
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -361,7 +361,7 @@
 #
 # Build types.hal (VehicleArea)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleArea.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleArea.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -371,7 +371,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleArea
+        android.hardware.automotive.vehicle@2.0::types.VehicleArea
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -380,7 +380,7 @@
 #
 # Build types.hal (VehicleAreaConfig)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaConfig.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaConfig.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -390,7 +390,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaConfig
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaConfig
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -399,7 +399,7 @@
 #
 # Build types.hal (VehicleAreaDoor)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaDoor.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaDoor.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -409,7 +409,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaDoor
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaDoor
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -418,7 +418,7 @@
 #
 # Build types.hal (VehicleAreaMirror)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaMirror.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaMirror.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -428,7 +428,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaMirror
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaMirror
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -437,7 +437,7 @@
 #
 # Build types.hal (VehicleAreaSeat)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaSeat.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaSeat.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -447,7 +447,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaSeat
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaSeat
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -456,7 +456,7 @@
 #
 # Build types.hal (VehicleAreaWindow)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaWindow.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaWindow.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -466,7 +466,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaWindow
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaWindow
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -475,7 +475,7 @@
 #
 # Build types.hal (VehicleAreaZone)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaZone.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaZone.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -485,7 +485,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaZone
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaZone
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -494,7 +494,7 @@
 #
 # Build types.hal (VehicleAudioContextFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioContextFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioContextFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -504,7 +504,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioContextFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioContextFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -513,7 +513,7 @@
 #
 # Build types.hal (VehicleAudioExtFocusFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioExtFocusFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioExtFocusFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -523,7 +523,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioExtFocusFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioExtFocusFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -532,7 +532,7 @@
 #
 # Build types.hal (VehicleAudioFocusIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioFocusIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioFocusIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -542,7 +542,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioFocusIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioFocusIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -551,7 +551,7 @@
 #
 # Build types.hal (VehicleAudioFocusRequest)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioFocusRequest.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioFocusRequest.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -561,7 +561,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioFocusRequest
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioFocusRequest
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -570,7 +570,7 @@
 #
 # Build types.hal (VehicleAudioFocusState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioFocusState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioFocusState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -580,7 +580,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioFocusState
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioFocusState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -589,7 +589,7 @@
 #
 # Build types.hal (VehicleAudioHwVariantConfigFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioHwVariantConfigFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioHwVariantConfigFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -599,7 +599,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioHwVariantConfigFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioHwVariantConfigFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -608,7 +608,7 @@
 #
 # Build types.hal (VehicleAudioRoutingPolicyIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioRoutingPolicyIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioRoutingPolicyIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -618,7 +618,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioRoutingPolicyIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioRoutingPolicyIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -627,7 +627,7 @@
 #
 # Build types.hal (VehicleAudioStream)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioStream.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioStream.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -637,7 +637,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioStream
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioStream
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -646,7 +646,7 @@
 #
 # Build types.hal (VehicleAudioStreamFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioStreamFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioStreamFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -656,7 +656,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioStreamFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioStreamFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -665,7 +665,7 @@
 #
 # Build types.hal (VehicleAudioVolumeCapabilityFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioVolumeCapabilityFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeCapabilityFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -675,7 +675,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioVolumeCapabilityFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioVolumeCapabilityFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -684,7 +684,7 @@
 #
 # Build types.hal (VehicleAudioVolumeIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioVolumeIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -694,7 +694,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioVolumeIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioVolumeIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -703,7 +703,7 @@
 #
 # Build types.hal (VehicleAudioVolumeLimitIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioVolumeLimitIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeLimitIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -713,7 +713,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioVolumeLimitIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioVolumeLimitIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -722,7 +722,7 @@
 #
 # Build types.hal (VehicleAudioVolumeState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioVolumeState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -732,7 +732,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioVolumeState
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioVolumeState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -741,7 +741,7 @@
 #
 # Build types.hal (VehicleDisplay)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleDisplay.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleDisplay.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -751,7 +751,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleDisplay
+        android.hardware.automotive.vehicle@2.0::types.VehicleDisplay
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -760,7 +760,7 @@
 #
 # Build types.hal (VehicleDrivingStatus)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleDrivingStatus.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleDrivingStatus.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -770,7 +770,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleDrivingStatus
+        android.hardware.automotive.vehicle@2.0::types.VehicleDrivingStatus
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -779,7 +779,7 @@
 #
 # Build types.hal (VehicleGear)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleGear.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleGear.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -789,7 +789,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleGear
+        android.hardware.automotive.vehicle@2.0::types.VehicleGear
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -798,7 +798,7 @@
 #
 # Build types.hal (VehicleHvacFanDirection)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleHvacFanDirection.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleHvacFanDirection.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -808,7 +808,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleHvacFanDirection
+        android.hardware.automotive.vehicle@2.0::types.VehicleHvacFanDirection
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -817,7 +817,7 @@
 #
 # Build types.hal (VehicleHwKeyInputAction)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleHwKeyInputAction.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleHwKeyInputAction.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -827,7 +827,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleHwKeyInputAction
+        android.hardware.automotive.vehicle@2.0::types.VehicleHwKeyInputAction
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -836,7 +836,7 @@
 #
 # Build types.hal (VehicleIgnitionState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleIgnitionState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleIgnitionState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -846,7 +846,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleIgnitionState
+        android.hardware.automotive.vehicle@2.0::types.VehicleIgnitionState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -855,7 +855,7 @@
 #
 # Build types.hal (VehicleInstrumentClusterType)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleInstrumentClusterType.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleInstrumentClusterType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -865,7 +865,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleInstrumentClusterType
+        android.hardware.automotive.vehicle@2.0::types.VehicleInstrumentClusterType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -874,7 +874,7 @@
 #
 # Build types.hal (VehiclePropConfig)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropConfig.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropConfig.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -884,7 +884,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropConfig
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropConfig
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -893,7 +893,7 @@
 #
 # Build types.hal (VehiclePropValue)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropValue.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropValue.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -903,7 +903,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropValue
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropValue
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -912,7 +912,7 @@
 #
 # Build types.hal (VehicleProperty)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleProperty.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleProperty.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -922,7 +922,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleProperty
+        android.hardware.automotive.vehicle@2.0::types.VehicleProperty
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -931,7 +931,7 @@
 #
 # Build types.hal (VehiclePropertyAccess)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyAccess.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyAccess.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -941,7 +941,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyAccess
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyAccess
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -950,7 +950,7 @@
 #
 # Build types.hal (VehiclePropertyChangeMode)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyChangeMode.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyChangeMode.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -960,7 +960,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyChangeMode
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyChangeMode
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -969,7 +969,7 @@
 #
 # Build types.hal (VehiclePropertyGroup)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyGroup.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyGroup.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -979,7 +979,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyGroup
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyGroup
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -988,7 +988,7 @@
 #
 # Build types.hal (VehiclePropertyOperation)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyOperation.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyOperation.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -998,7 +998,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyOperation
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyOperation
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1007,7 +1007,7 @@
 #
 # Build types.hal (VehiclePropertyType)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyType.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1017,7 +1017,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyType
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1026,7 +1026,7 @@
 #
 # Build types.hal (VehicleRadioConstants)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleRadioConstants.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleRadioConstants.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1036,7 +1036,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleRadioConstants
+        android.hardware.automotive.vehicle@2.0::types.VehicleRadioConstants
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1045,7 +1045,7 @@
 #
 # Build types.hal (VehicleTurnSignal)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleTurnSignal.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleTurnSignal.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1055,7 +1055,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleTurnSignal
+        android.hardware.automotive.vehicle@2.0::types.VehicleTurnSignal
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1064,7 +1064,7 @@
 #
 # Build types.hal (VehicleUnit)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleUnit.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleUnit.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1074,7 +1074,64 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleUnit
+        android.hardware.automotive.vehicle@2.0::types.VehicleUnit
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (VmsMessageIntegerValuesIndex)
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsMessageIntegerValuesIndex.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.0::types.VmsMessageIntegerValuesIndex
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (VmsMessageType)
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsMessageType.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.0::types.VmsMessageType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Wheel)
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Wheel.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.0::types.Wheel
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1083,7 +1140,7 @@
 #
 # Build IVehicle.hal
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/IVehicle.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/IVehicle.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVehicle.hal
@@ -1097,7 +1154,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::IVehicle
+        android.hardware.automotive.vehicle@2.0::IVehicle
 
 $(GEN): $(LOCAL_PATH)/IVehicle.hal
 	$(transform-generated-source)
@@ -1106,7 +1163,7 @@
 #
 # Build IVehicleCallback.hal
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/IVehicleCallback.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/IVehicleCallback.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVehicleCallback.hal
@@ -1118,7 +1175,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::IVehicleCallback
+        android.hardware.automotive.vehicle@2.0::IVehicleCallback
 
 $(GEN): $(LOCAL_PATH)/IVehicleCallback.hal
 	$(transform-generated-source)
@@ -1129,10 +1186,10 @@
 ################################################################################
 
 include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.vehicle@2.0-java-static
+LOCAL_MODULE := android.hardware.automotive.vehicle@2.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -1143,7 +1200,7 @@
 #
 # Build types.hal (CommonIgnitionMonitors)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/CommonIgnitionMonitors.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/CommonIgnitionMonitors.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1153,7 +1210,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.CommonIgnitionMonitors
+        android.hardware.automotive.vehicle@2.0::types.CommonIgnitionMonitors
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1162,7 +1219,7 @@
 #
 # Build types.hal (CompressionIgnitionMonitors)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/CompressionIgnitionMonitors.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/CompressionIgnitionMonitors.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1172,7 +1229,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.CompressionIgnitionMonitors
+        android.hardware.automotive.vehicle@2.0::types.CompressionIgnitionMonitors
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1181,7 +1238,7 @@
 #
 # Build types.hal (FuelSystemStatus)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/FuelSystemStatus.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/FuelSystemStatus.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1191,7 +1248,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.FuelSystemStatus
+        android.hardware.automotive.vehicle@2.0::types.FuelSystemStatus
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1200,7 +1257,7 @@
 #
 # Build types.hal (FuelType)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/FuelType.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/FuelType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1210,7 +1267,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.FuelType
+        android.hardware.automotive.vehicle@2.0::types.FuelType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1219,7 +1276,7 @@
 #
 # Build types.hal (IgnitionMonitorKind)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/IgnitionMonitorKind.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/IgnitionMonitorKind.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1229,7 +1286,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.IgnitionMonitorKind
+        android.hardware.automotive.vehicle@2.0::types.IgnitionMonitorKind
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1238,7 +1295,7 @@
 #
 # Build types.hal (Obd2FloatSensorIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/Obd2FloatSensorIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2FloatSensorIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1248,7 +1305,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.Obd2FloatSensorIndex
+        android.hardware.automotive.vehicle@2.0::types.Obd2FloatSensorIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1257,7 +1314,7 @@
 #
 # Build types.hal (Obd2IntegerSensorIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/Obd2IntegerSensorIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2IntegerSensorIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1267,7 +1324,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.Obd2IntegerSensorIndex
+        android.hardware.automotive.vehicle@2.0::types.Obd2IntegerSensorIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1276,7 +1333,7 @@
 #
 # Build types.hal (SecondaryAirStatus)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/SecondaryAirStatus.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SecondaryAirStatus.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1286,7 +1343,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.SecondaryAirStatus
+        android.hardware.automotive.vehicle@2.0::types.SecondaryAirStatus
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1295,7 +1352,7 @@
 #
 # Build types.hal (SparkIgnitionMonitors)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/SparkIgnitionMonitors.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SparkIgnitionMonitors.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1305,7 +1362,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.SparkIgnitionMonitors
+        android.hardware.automotive.vehicle@2.0::types.SparkIgnitionMonitors
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1314,7 +1371,7 @@
 #
 # Build types.hal (StatusCode)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/StatusCode.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/StatusCode.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1324,7 +1381,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.StatusCode
+        android.hardware.automotive.vehicle@2.0::types.StatusCode
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1333,7 +1390,7 @@
 #
 # Build types.hal (SubscribeFlags)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/SubscribeFlags.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SubscribeFlags.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1343,7 +1400,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.SubscribeFlags
+        android.hardware.automotive.vehicle@2.0::types.SubscribeFlags
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1352,7 +1409,7 @@
 #
 # Build types.hal (SubscribeOptions)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/SubscribeOptions.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SubscribeOptions.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1362,7 +1419,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.SubscribeOptions
+        android.hardware.automotive.vehicle@2.0::types.SubscribeOptions
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1371,7 +1428,7 @@
 #
 # Build types.hal (VehicleApPowerBootupReason)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerBootupReason.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerBootupReason.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1381,7 +1438,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerBootupReason
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerBootupReason
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1390,7 +1447,7 @@
 #
 # Build types.hal (VehicleApPowerSetState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerSetState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerSetState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1400,7 +1457,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerSetState
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerSetState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1409,7 +1466,7 @@
 #
 # Build types.hal (VehicleApPowerState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1419,7 +1476,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerState
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1428,7 +1485,7 @@
 #
 # Build types.hal (VehicleApPowerStateConfigFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerStateConfigFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerStateConfigFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1438,7 +1495,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerStateConfigFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerStateConfigFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1447,7 +1504,7 @@
 #
 # Build types.hal (VehicleApPowerStateIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerStateIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerStateIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1457,7 +1514,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerStateIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerStateIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1466,7 +1523,7 @@
 #
 # Build types.hal (VehicleApPowerStateShutdownParam)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleApPowerStateShutdownParam.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerStateShutdownParam.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1476,7 +1533,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleApPowerStateShutdownParam
+        android.hardware.automotive.vehicle@2.0::types.VehicleApPowerStateShutdownParam
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1485,7 +1542,7 @@
 #
 # Build types.hal (VehicleArea)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleArea.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleArea.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1495,7 +1552,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleArea
+        android.hardware.automotive.vehicle@2.0::types.VehicleArea
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1504,7 +1561,7 @@
 #
 # Build types.hal (VehicleAreaConfig)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaConfig.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaConfig.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1514,7 +1571,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaConfig
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaConfig
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1523,7 +1580,7 @@
 #
 # Build types.hal (VehicleAreaDoor)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaDoor.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaDoor.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1533,7 +1590,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaDoor
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaDoor
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1542,7 +1599,7 @@
 #
 # Build types.hal (VehicleAreaMirror)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaMirror.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaMirror.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1552,7 +1609,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaMirror
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaMirror
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1561,7 +1618,7 @@
 #
 # Build types.hal (VehicleAreaSeat)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaSeat.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaSeat.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1571,7 +1628,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaSeat
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaSeat
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1580,7 +1637,7 @@
 #
 # Build types.hal (VehicleAreaWindow)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaWindow.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaWindow.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1590,7 +1647,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaWindow
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaWindow
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1599,7 +1656,7 @@
 #
 # Build types.hal (VehicleAreaZone)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAreaZone.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaZone.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1609,7 +1666,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAreaZone
+        android.hardware.automotive.vehicle@2.0::types.VehicleAreaZone
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1618,7 +1675,7 @@
 #
 # Build types.hal (VehicleAudioContextFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioContextFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioContextFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1628,7 +1685,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioContextFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioContextFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1637,7 +1694,7 @@
 #
 # Build types.hal (VehicleAudioExtFocusFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioExtFocusFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioExtFocusFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1647,7 +1704,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioExtFocusFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioExtFocusFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1656,7 +1713,7 @@
 #
 # Build types.hal (VehicleAudioFocusIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioFocusIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioFocusIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1666,7 +1723,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioFocusIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioFocusIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1675,7 +1732,7 @@
 #
 # Build types.hal (VehicleAudioFocusRequest)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioFocusRequest.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioFocusRequest.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1685,7 +1742,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioFocusRequest
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioFocusRequest
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1694,7 +1751,7 @@
 #
 # Build types.hal (VehicleAudioFocusState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioFocusState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioFocusState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1704,7 +1761,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioFocusState
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioFocusState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1713,7 +1770,7 @@
 #
 # Build types.hal (VehicleAudioHwVariantConfigFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioHwVariantConfigFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioHwVariantConfigFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1723,7 +1780,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioHwVariantConfigFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioHwVariantConfigFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1732,7 +1789,7 @@
 #
 # Build types.hal (VehicleAudioRoutingPolicyIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioRoutingPolicyIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioRoutingPolicyIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1742,7 +1799,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioRoutingPolicyIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioRoutingPolicyIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1751,7 +1808,7 @@
 #
 # Build types.hal (VehicleAudioStream)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioStream.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioStream.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1761,7 +1818,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioStream
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioStream
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1770,7 +1827,7 @@
 #
 # Build types.hal (VehicleAudioStreamFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioStreamFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioStreamFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1780,7 +1837,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioStreamFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioStreamFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1789,7 +1846,7 @@
 #
 # Build types.hal (VehicleAudioVolumeCapabilityFlag)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioVolumeCapabilityFlag.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeCapabilityFlag.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1799,7 +1856,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioVolumeCapabilityFlag
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioVolumeCapabilityFlag
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1808,7 +1865,7 @@
 #
 # Build types.hal (VehicleAudioVolumeIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioVolumeIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1818,7 +1875,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioVolumeIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioVolumeIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1827,7 +1884,7 @@
 #
 # Build types.hal (VehicleAudioVolumeLimitIndex)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioVolumeLimitIndex.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeLimitIndex.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1837,7 +1894,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioVolumeLimitIndex
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioVolumeLimitIndex
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1846,7 +1903,7 @@
 #
 # Build types.hal (VehicleAudioVolumeState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleAudioVolumeState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1856,7 +1913,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleAudioVolumeState
+        android.hardware.automotive.vehicle@2.0::types.VehicleAudioVolumeState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1865,7 +1922,7 @@
 #
 # Build types.hal (VehicleDisplay)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleDisplay.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleDisplay.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1875,7 +1932,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleDisplay
+        android.hardware.automotive.vehicle@2.0::types.VehicleDisplay
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1884,7 +1941,7 @@
 #
 # Build types.hal (VehicleDrivingStatus)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleDrivingStatus.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleDrivingStatus.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1894,7 +1951,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleDrivingStatus
+        android.hardware.automotive.vehicle@2.0::types.VehicleDrivingStatus
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1903,7 +1960,7 @@
 #
 # Build types.hal (VehicleGear)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleGear.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleGear.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1913,7 +1970,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleGear
+        android.hardware.automotive.vehicle@2.0::types.VehicleGear
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1922,7 +1979,7 @@
 #
 # Build types.hal (VehicleHvacFanDirection)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleHvacFanDirection.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleHvacFanDirection.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1932,7 +1989,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleHvacFanDirection
+        android.hardware.automotive.vehicle@2.0::types.VehicleHvacFanDirection
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1941,7 +1998,7 @@
 #
 # Build types.hal (VehicleHwKeyInputAction)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleHwKeyInputAction.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleHwKeyInputAction.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1951,7 +2008,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleHwKeyInputAction
+        android.hardware.automotive.vehicle@2.0::types.VehicleHwKeyInputAction
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1960,7 +2017,7 @@
 #
 # Build types.hal (VehicleIgnitionState)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleIgnitionState.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleIgnitionState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1970,7 +2027,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleIgnitionState
+        android.hardware.automotive.vehicle@2.0::types.VehicleIgnitionState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1979,7 +2036,7 @@
 #
 # Build types.hal (VehicleInstrumentClusterType)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleInstrumentClusterType.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleInstrumentClusterType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1989,7 +2046,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleInstrumentClusterType
+        android.hardware.automotive.vehicle@2.0::types.VehicleInstrumentClusterType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1998,7 +2055,7 @@
 #
 # Build types.hal (VehiclePropConfig)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropConfig.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropConfig.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2008,7 +2065,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropConfig
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropConfig
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2017,7 +2074,7 @@
 #
 # Build types.hal (VehiclePropValue)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropValue.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropValue.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2027,7 +2084,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropValue
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropValue
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2036,7 +2093,7 @@
 #
 # Build types.hal (VehicleProperty)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleProperty.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleProperty.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2046,7 +2103,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleProperty
+        android.hardware.automotive.vehicle@2.0::types.VehicleProperty
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2055,7 +2112,7 @@
 #
 # Build types.hal (VehiclePropertyAccess)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyAccess.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyAccess.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2065,7 +2122,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyAccess
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyAccess
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2074,7 +2131,7 @@
 #
 # Build types.hal (VehiclePropertyChangeMode)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyChangeMode.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyChangeMode.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2084,7 +2141,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyChangeMode
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyChangeMode
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2093,7 +2150,7 @@
 #
 # Build types.hal (VehiclePropertyGroup)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyGroup.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyGroup.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2103,7 +2160,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyGroup
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyGroup
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2112,7 +2169,7 @@
 #
 # Build types.hal (VehiclePropertyOperation)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyOperation.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyOperation.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2122,7 +2179,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyOperation
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyOperation
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2131,7 +2188,7 @@
 #
 # Build types.hal (VehiclePropertyType)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehiclePropertyType.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyType.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2141,7 +2198,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehiclePropertyType
+        android.hardware.automotive.vehicle@2.0::types.VehiclePropertyType
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2150,7 +2207,7 @@
 #
 # Build types.hal (VehicleRadioConstants)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleRadioConstants.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleRadioConstants.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2160,7 +2217,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleRadioConstants
+        android.hardware.automotive.vehicle@2.0::types.VehicleRadioConstants
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2169,7 +2226,7 @@
 #
 # Build types.hal (VehicleTurnSignal)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleTurnSignal.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleTurnSignal.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2179,7 +2236,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleTurnSignal
+        android.hardware.automotive.vehicle@2.0::types.VehicleTurnSignal
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2188,7 +2245,7 @@
 #
 # Build types.hal (VehicleUnit)
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/VehicleUnit.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleUnit.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -2198,7 +2255,64 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::types.VehicleUnit
+        android.hardware.automotive.vehicle@2.0::types.VehicleUnit
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (VmsMessageIntegerValuesIndex)
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsMessageIntegerValuesIndex.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.0::types.VmsMessageIntegerValuesIndex
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (VmsMessageType)
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsMessageType.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.0::types.VmsMessageType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Wheel)
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Wheel.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.0::types.Wheel
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -2207,7 +2321,7 @@
 #
 # Build IVehicle.hal
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/IVehicle.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/IVehicle.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVehicle.hal
@@ -2221,7 +2335,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::IVehicle
+        android.hardware.automotive.vehicle@2.0::IVehicle
 
 $(GEN): $(LOCAL_PATH)/IVehicle.hal
 	$(transform-generated-source)
@@ -2230,7 +2344,7 @@
 #
 # Build IVehicleCallback.hal
 #
-GEN := $(intermediates)/android/hardware/vehicle/V2_0/IVehicleCallback.java
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/IVehicleCallback.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVehicleCallback.hal
@@ -2242,7 +2356,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.vehicle@2.0::IVehicleCallback
+        android.hardware.automotive.vehicle@2.0::IVehicleCallback
 
 $(GEN): $(LOCAL_PATH)/IVehicleCallback.hal
 	$(transform-generated-source)
diff --git a/vehicle/2.0/IVehicle.hal b/automotive/vehicle/2.0/IVehicle.hal
similarity index 95%
rename from vehicle/2.0/IVehicle.hal
rename to automotive/vehicle/2.0/IVehicle.hal
index cab6ce0..5de416f 100644
--- a/vehicle/2.0/IVehicle.hal
+++ b/automotive/vehicle/2.0/IVehicle.hal
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.hardware.vehicle@2.0;
+package android.hardware.automotive.vehicle@2.0;
 
 import IVehicleCallback;
 
@@ -32,7 +32,7 @@
    * StatusCode::INVALID_ARG, otherwise a list of vehicle property
    * configurations with StatusCode::OK
    */
-  getPropConfigs(vec<VehicleProperty> props)
+  getPropConfigs(vec<int32_t> props)
           generates (StatusCode status, vec<VehiclePropConfig> propConfigs);
 
   /**
@@ -84,7 +84,7 @@
    * If this client wasn't subscribed to the given property, this method
    * must return StatusCode::INVALID_ARG.
    */
-  unsubscribe(IVehicleCallback callback, VehicleProperty propId)
+  unsubscribe(IVehicleCallback callback, int32_t propId)
           generates (StatusCode status);
 
   /**
diff --git a/vehicle/2.0/IVehicleCallback.hal b/automotive/vehicle/2.0/IVehicleCallback.hal
similarity index 95%
rename from vehicle/2.0/IVehicleCallback.hal
rename to automotive/vehicle/2.0/IVehicleCallback.hal
index e7e05bf..167e5e1 100644
--- a/vehicle/2.0/IVehicleCallback.hal
+++ b/automotive/vehicle/2.0/IVehicleCallback.hal
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.hardware.vehicle@2.0;
+package android.hardware.automotive.vehicle@2.0;
 
 interface IVehicleCallback {
 
@@ -54,6 +54,6 @@
      *                 occurred, must be 0 for global properties
      */
     oneway onPropertySetError(StatusCode errorCode,
-                              VehicleProperty propId,
+                              int32_t propId,
                               int32_t areaId);
 };
diff --git a/automotive/vehicle/2.0/default/Android.mk b/automotive/vehicle/2.0/default/Android.mk
new file mode 100644
index 0000000..324be51
--- /dev/null
+++ b/automotive/vehicle/2.0/default/Android.mk
@@ -0,0 +1,165 @@
+# 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.
+
+LOCAL_PATH := $(call my-dir)
+
+vhal_v2_0 = android.hardware.automotive.vehicle@2.0
+
+###############################################################################
+# Vehicle reference implementation lib
+###############################################################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := $(vhal_v2_0)-manager-lib
+LOCAL_SRC_FILES := \
+    common/src/AccessControlConfigParser.cpp \
+    common/src/Obd2SensorStore.cpp \
+    common/src/SubscriptionManager.cpp \
+    common/src/VehicleHalManager.cpp \
+    common/src/VehicleObjectPool.cpp \
+    common/src/VehicleUtils.cpp \
+
+LOCAL_C_INCLUDES := \
+    $(LOCAL_PATH)/common/include/vhal_v2_0
+
+LOCAL_EXPORT_C_INCLUDE_DIRS := \
+    $(LOCAL_PATH)/common/include
+
+LOCAL_SHARED_LIBRARIES := \
+    libbinder \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    liblog \
+    libutils \
+    $(vhal_v2_0) \
+
+include $(BUILD_STATIC_LIBRARY)
+
+###############################################################################
+# Vehicle HAL Protobuf library
+###############################################################################
+include $(CLEAR_VARS)
+LOCAL_SRC_FILES := $(call all-proto-files-under, impl/vhal_v2_0/proto)
+
+LOCAL_PROTOC_OPTIMIZE_TYPE := nano
+
+LOCAL_MODULE := $(vhal_v2_0)-libproto-native
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_STRIP_MODULE := keep_symbols
+
+generated_sources_dir := $(call local-generated-sources-dir)
+LOCAL_EXPORT_C_INCLUDE_DIRS := \
+    $(generated_sources_dir)/proto/$(LOCAL_PATH)/impl/vhal_v2_0/proto
+
+include $(BUILD_STATIC_LIBRARY)
+
+
+###############################################################################
+# Vehicle default VehicleHAL implementation
+###############################################################################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= $(vhal_v2_0)-default-impl-lib
+LOCAL_SRC_FILES:= \
+    impl/vhal_v2_0/DefaultVehicleHal.cpp \
+
+LOCAL_C_INCLUDES := \
+    $(LOCAL_PATH)/impl/vhal_v2_0
+
+LOCAL_EXPORT_C_INCLUDE_DIRS := \
+    $(LOCAL_PATH)/impl
+
+LOCAL_WHOLE_STATIC_LIBRARIES := \
+    $(vhal_v2_0)-manager-lib \
+
+LOCAL_SHARED_LIBRARIES := \
+    libbinder \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    liblog \
+    libprotobuf-cpp-lite \
+    libutils \
+    $(vhal_v2_0) \
+
+LOCAL_STATIC_LIBRARIES := \
+    $(vhal_v2_0)-libproto-native \
+
+include $(BUILD_STATIC_LIBRARY)
+
+
+###############################################################################
+# Vehicle reference implementation unit tests
+###############################################################################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= $(vhal_v2_0)-manager-unit-tests
+
+LOCAL_WHOLE_STATIC_LIBRARIES := \
+    $(vhal_v2_0)-manager-lib \
+
+LOCAL_SRC_FILES:= \
+    tests/AccessControlConfigParser_test.cpp \
+    tests/Obd2SensorStore_test.cpp \
+    tests/SubscriptionManager_test.cpp \
+    tests/VehicleHalManager_test.cpp \
+    tests/VehicleObjectPool_test.cpp \
+    tests/VehiclePropConfigIndex_test.cpp \
+
+LOCAL_SHARED_LIBRARIES := \
+    libbinder \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    liblog \
+    libutils \
+    $(vhal_v2_0) \
+
+LOCAL_CFLAGS += -Wall -Wextra
+LOCAL_MODULE_TAGS := tests
+
+include $(BUILD_NATIVE_TEST)
+
+
+###############################################################################
+# Vehicle HAL service
+###############################################################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := $(vhal_v2_0)-service
+LOCAL_INIT_RC := $(vhal_v2_0)-service.rc
+LOCAL_PROPRIETARY_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := hw
+
+LOCAL_SRC_FILES := \
+    VehicleService.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+    libbinder \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    liblog \
+    libprotobuf-cpp-lite \
+    libutils \
+    $(vhal_v2_0) \
+
+LOCAL_STATIC_LIBRARIES := \
+    $(vhal_v2_0)-manager-lib \
+    $(vhal_v2_0)-default-impl-lib \
+    $(vhal_v2_0)-libproto-native \
+
+include $(BUILD_EXECUTABLE)
diff --git a/vehicle/2.0/default/VehicleService.cpp b/automotive/vehicle/2.0/default/VehicleService.cpp
similarity index 85%
rename from vehicle/2.0/default/VehicleService.cpp
rename to automotive/vehicle/2.0/default/VehicleService.cpp
index 493df74..f88ce7b 100644
--- a/vehicle/2.0/default/VehicleService.cpp
+++ b/automotive/vehicle/2.0/default/VehicleService.cpp
@@ -14,19 +14,18 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "android.hardware.vehicle@2.0-service"
+#define LOG_TAG "automotive.vehicle@2.0-service"
 #include <android/log.h>
 #include <hidl/HidlTransportSupport.h>
 
 #include <iostream>
 
-
-#include <vehicle_hal_manager/VehicleHalManager.h>
-#include <impl/DefaultVehicleHal.h>
+#include <vhal_v2_0/VehicleHalManager.h>
+#include <vhal_v2_0/DefaultVehicleHal.h>
 
 using namespace android;
 using namespace android::hardware;
-using namespace android::hardware::vehicle::V2_0;
+using namespace android::hardware::automotive::vehicle::V2_0;
 
 int main(int /* argc */, char* /* argv */ []) {
     auto hal = std::make_unique<impl::DefaultVehicleHal>();
diff --git a/automotive/vehicle/2.0/default/android.hardware.automotive.vehicle@2.0-service.rc b/automotive/vehicle/2.0/default/android.hardware.automotive.vehicle@2.0-service.rc
new file mode 100644
index 0000000..30e249e
--- /dev/null
+++ b/automotive/vehicle/2.0/default/android.hardware.automotive.vehicle@2.0-service.rc
@@ -0,0 +1,4 @@
+service vehicle-hal-2.0 /vendor/bin/hw/android.hardware.automotive.vehicle@2.0-service
+    class hal
+    user vehicle_network
+    group system inet
diff --git a/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/AccessControlConfigParser.h
similarity index 80%
rename from vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.h
rename to automotive/vehicle/2.0/default/common/include/vhal_v2_0/AccessControlConfigParser.h
index 5cd0c3e..8ef6f5a 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/AccessControlConfigParser.h
@@ -14,28 +14,29 @@
  * limitations under the License.
  */
 
-#ifndef android_hardware_vehicle_V2_0_AccessControlConfigParser_H_
-#define android_hardware_vehicle_V2_0_AccessControlConfigParser_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_AccessControlConfigParser_H_
+#define android_hardware_automotive_vehicle_V2_0_AccessControlConfigParser_H_
 
 #include <string>
 #include <vector>
 #include <unordered_map>
 #include <list>
 
-#include <android/hardware/vehicle/2.0/types.h>
+#include <android/hardware/automotive/vehicle/2.0/types.h>
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
 struct PropertyAcl {
-    VehicleProperty propId;
+    int32_t propId;
     unsigned uid;
     VehiclePropertyAccess access;
 };
 
-using PropertyAclMap = std::unordered_multimap<VehicleProperty, PropertyAcl>;
+using PropertyAclMap = std::unordered_multimap<int32_t, PropertyAcl>;
 
 /**
  * Parser for per-property access control in vehicle HAL.
@@ -64,7 +65,7 @@
      *
      * @param properties - properties supported by HAL implementation
      */
-    AccessControlConfigParser(const std::vector<VehicleProperty>& properties);
+    AccessControlConfigParser(const std::vector<int32_t>& properties);
 
     /**
      * Parses config content from given stream and writes results to
@@ -81,7 +82,7 @@
 
     bool parsePropertyId(const std::string& strPropId,
                                 VehiclePropertyGroup propertyGroup,
-                                VehicleProperty* outVehicleProperty) const;
+                                int32_t* outVehicleProperty) const;
 
     bool parseUid(const std::string& strUid, unsigned* outUid) const;
 
@@ -100,12 +101,13 @@
     // aliases.
 
     // Map property ids w/o TYPE and AREA to VehicleProperty.
-    std::unordered_map<int, VehicleProperty> mStrippedToVehiclePropertyMap;
+    std::unordered_map<int32_t, int32_t> mStrippedToVehiclePropertyMap;
 };
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
 
-#endif // android_hardware_vehicle_V2_0_AccessControlConfigParser_H_
+#endif // android_hardware_automotive_vehicle_V2_0_AccessControlConfigParser_H_
diff --git a/vehicle/2.0/default/vehicle_hal_manager/ConcurrentQueue.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/ConcurrentQueue.h
similarity index 94%
rename from vehicle/2.0/default/vehicle_hal_manager/ConcurrentQueue.h
rename to automotive/vehicle/2.0/default/common/include/vhal_v2_0/ConcurrentQueue.h
index 8f575dc..b63429f 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/ConcurrentQueue.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/ConcurrentQueue.h
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#ifndef android_hardware_vehicle_V2_0_ConcurrentQueue_H_
-#define android_hardware_vehicle_V2_0_ConcurrentQueue_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_ConcurrentQueue_H_
+#define android_hardware_automotive_vehicle_V2_0_ConcurrentQueue_H_
 
 #include <queue>
 #include <atomic>
@@ -153,4 +153,4 @@
 
 }  // namespace android
 
-#endif //android_hardware_vehicle_V2_0_ConcurrentQueue_H_
+#endif //android_hardware_automotive_vehicle_V2_0_ConcurrentQueue_H_
diff --git a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/Obd2SensorStore.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/Obd2SensorStore.h
new file mode 100644
index 0000000..fe231be
--- /dev/null
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/Obd2SensorStore.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2017 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 android_hardware_automotive_vehicle_V2_0_Obd2SensorStore_H_
+#define android_hardware_automotive_vehicle_V2_0_Obd2SensorStore_H_
+
+#include <vector>
+
+#include "VehicleHal.h"
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+// This class wraps all the logic required to create an OBD2 frame.
+// It allows storing sensor values, setting appropriate bitmasks as needed,
+// and returning appropriately laid out storage of sensor values suitable
+// for being returned via a VehicleHal implementation.
+class Obd2SensorStore {
+public:
+    // Creates a sensor storage with a given number of vendor-specific sensors.
+    Obd2SensorStore(size_t numVendorIntegerSensors,
+                    size_t numVendorFloatSensors);
+
+    // Stores an integer-valued sensor.
+    StatusCode setIntegerSensor(Obd2IntegerSensorIndex index, int32_t value);
+    // Stores an integer-valued sensor.
+    StatusCode setIntegerSensor(size_t index, int32_t value);
+
+    // Stores a float-valued sensor.
+    StatusCode setFloatSensor(Obd2FloatSensorIndex index, float value);
+    // Stores a float-valued sensor.
+    StatusCode setFloatSensor(size_t index, float value);
+
+    // Returns a vector that contains all integer sensors stored.
+    const std::vector<int32_t>& getIntegerSensors() const;
+    // Returns a vector that contains all float sensors stored.
+    const std::vector<float>& getFloatSensors() const;
+    // Returns a vector that contains a bitmask for all stored sensors.
+    const std::vector<uint8_t>& getSensorsBitmask() const;
+
+    // Given a stringValue, fill in a VehiclePropValue
+    void fillPropValue(VehiclePropValue *propValue,
+            std::string dtc) const;
+
+private:
+    class BitmaskInVector {
+    public:
+        BitmaskInVector(size_t numBits = 0);
+        void resize(size_t numBits);
+        bool get(size_t index) const;
+        void set(size_t index, bool value);
+
+        const std::vector<uint8_t>& getBitmask() const;
+
+    private:
+        std::vector<uint8_t> mStorage;
+    };
+
+    std::vector<int32_t> mIntegerSensors;
+    std::vector<float> mFloatSensors;
+    BitmaskInVector mSensorsBitmask;
+};
+
+}  // namespace V2_0
+}  // namespace vehicle
+}  // namespace automotive
+}  // namespace hardware
+}  // namespace android
+
+#endif  // android_hardware_automotive_vehicle_V2_0_Obd2SensorStore_H_
diff --git a/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/SubscriptionManager.h
similarity index 81%
rename from vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.h
rename to automotive/vehicle/2.0/default/common/include/vhal_v2_0/SubscriptionManager.h
index 9f2ed8d..6a12b77 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/SubscriptionManager.h
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#ifndef android_hardware_vehicle_V2_0_SubscriptionManager_H_
-#define android_hardware_vehicle_V2_0_SubscriptionManager_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_SubscriptionManager_H_
+#define android_hardware_automotive_vehicle_V2_0_SubscriptionManager_H_
 
 #include <memory>
 #include <map>
@@ -25,13 +25,14 @@
 #include <android/log.h>
 #include <hwbinder/IPCThreadState.h>
 
-#include <android/hardware/vehicle/2.0/IVehicle.h>
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
 
 #include "ConcurrentQueue.h"
 #include "VehicleObjectPool.h"
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -50,7 +51,7 @@
 
     void addOrUpdateSubscription(const SubscribeOptions &opts);
 
-    bool isSubscribed(VehicleProperty propId,
+    bool isSubscribed(int32_t propId,
                       int32_t areaId,
                       SubscribeFlags flags);
 
@@ -59,7 +60,7 @@
     const int32_t mPid;
     const int32_t mUid;
 
-    std::map<VehicleProperty, SubscribeOptions> mSubscriptions;
+    std::map<int32_t, SubscribeOptions> mSubscriptions;
 };
 
 class HalClientVector : private SortedVector<sp<HalClient>> , public RefBase {
@@ -103,26 +104,26 @@
             SubscribeFlags flags) const;
 
     std::list<sp<HalClient>> getSubscribedClients(
-        VehicleProperty propId, int32_t area, SubscribeFlags flags) const;
+        int32_t propId, int32_t area, SubscribeFlags flags) const;
 
     /**
      * Returns true the client was unsubscribed successfully and there are
      * no more clients subscribed to given propId.
      */
     bool unsubscribe(const sp<IVehicleCallback>& callback,
-                     VehicleProperty propId);
+                     int32_t propId);
 private:
     std::list<sp< HalClient>> getSubscribedClientsLocked(
-            VehicleProperty propId, int32_t area, SubscribeFlags flags) const;
+            int32_t propId, int32_t area, SubscribeFlags flags) const;
 
     bool updateHalEventSubscriptionLocked(const SubscribeOptions &opts,
                                           SubscribeOptions *out);
 
-    void addClientToPropMapLocked(VehicleProperty propId,
+    void addClientToPropMapLocked(int32_t propId,
                                   const sp<HalClient> &client);
 
     sp<HalClientVector> getClientsForPropertyLocked(
-            VehicleProperty propId) const;
+            int32_t propId) const;
 
     sp<HalClient> getOrCreateHalClientLocked(
             const sp<IVehicleCallback> &callback);
@@ -133,15 +134,16 @@
     mutable std::mutex mLock;
 
     std::map<sp<IVehicleCallback>, sp<HalClient>> mClients;
-    std::map<VehicleProperty, sp<HalClientVector>> mPropToClients;
-    std::map<VehicleProperty, SubscribeOptions> mHalEventSubscribeOptions;
+    std::map<int32_t, sp<HalClientVector>> mPropToClients;
+    std::map<int32_t, SubscribeOptions> mHalEventSubscribeOptions;
 };
 
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
 
 
-#endif // android_hardware_vehicle_V2_0_SubscriptionManager_H_
+#endif // android_hardware_automotive_vehicle_V2_0_SubscriptionManager_H_
diff --git a/vehicle/2.0/default/VehicleHal.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHal.h
similarity index 80%
rename from vehicle/2.0/default/VehicleHal.h
rename to automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHal.h
index 2807f28..8203a1e 100644
--- a/vehicle/2.0/default/VehicleHal.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHal.h
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-#ifndef android_hardware_vehicle_V2_0_VehicleHal_H_
-#define android_hardware_vehicle_V2_0_VehicleHal_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_VehicleHal_H
+#define android_hardware_automotive_vehicle_V2_0_VehicleHal_H
 
-#include <android/hardware/vehicle/2.0/IVehicle.h>
-#include "vehicle_hal_manager/VehicleObjectPool.h"
-
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+#include "VehicleObjectPool.h"
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -36,7 +36,7 @@
 
     using HalEventFunction = std::function<void(VehiclePropValuePtr)>;
     using HalErrorFunction = std::function<void(
-            StatusCode errorCode, VehicleProperty property, int32_t areaId)>;
+            StatusCode errorCode, int32_t property, int32_t areaId)>;
 
     virtual ~VehicleHal() {}
 
@@ -57,16 +57,16 @@
      *                   rate, e.g. for properties with
      *                   VehiclePropertyChangeMode::CONTINUOUS
      */
-    virtual StatusCode subscribe(VehicleProperty property,
-                               int32_t areas,
-                               float sampleRate) = 0;
+    virtual StatusCode subscribe(int32_t property,
+                                 int32_t areas,
+                                 float sampleRate) = 0;
 
     /**
      * Unsubscribe from HAL events for given property
      *
      * @param property vehicle property to unsubscribe
      */
-    virtual StatusCode unsubscribe(VehicleProperty property) = 0;
+    virtual StatusCode unsubscribe(int32_t property) = 0;
 
     /**
      * Override this method if you need to do one-time initialization.
@@ -95,7 +95,8 @@
 
     /* Propagates error during set operation to the vehicle HAL clients. */
     void doHalPropertySetError(StatusCode errorCode,
-                               VehicleProperty propId, int32_t areaId) {
+                               int32_t propId,
+                               int32_t areaId) {
         mOnHalPropertySetError(errorCode, propId, areaId);
     }
 
@@ -107,7 +108,8 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
 
-#endif //android_hardware_vehicle_V2_0_VehicleHal_H_
+#endif //android_hardware_automotive_vehicle_V2_0_VehicleHal_H_
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHalManager.h
similarity index 87%
rename from vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h
rename to automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHalManager.h
index 6768741..4bff4d1 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHalManager.h
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#ifndef android_hardware_vehicle_V2_0_VehicleHalManager_H_
-#define android_hardware_vehicle_V2_0_VehicleHalManager_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_VehicleHalManager_H_
+#define android_hardware_automotive_vehicle_V2_0_VehicleHalManager_H_
 
 #include <inttypes.h>
 #include <stdint.h>
@@ -26,7 +26,7 @@
 #include <memory>
 #include <set>
 
-#include <android/hardware/vehicle/2.0/IVehicle.h>
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
 #include <hwbinder/IPCThreadState.h>
 
 #include "AccessControlConfigParser.h"
@@ -38,6 +38,7 @@
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -66,7 +67,7 @@
     // ---------------------------------------------------------------------------------------------
     // Methods derived from IVehicle
     Return<void> getAllPropConfigs(getAllPropConfigs_cb _hidl_cb)  override;
-    Return<void> getPropConfigs(const hidl_vec<VehicleProperty>& properties,
+    Return<void> getPropConfigs(const hidl_vec<int32_t>& properties,
                                 getPropConfigs_cb _hidl_cb)  override;
     Return<void> get(const VehiclePropValue& requestedPropValue,
                      get_cb _hidl_cb)  override;
@@ -74,7 +75,7 @@
     Return<StatusCode> subscribe(const sp<IVehicleCallback>& callback,
                                 const hidl_vec<SubscribeOptions>& options)  override;
     Return<StatusCode> unsubscribe(const sp<IVehicleCallback>& callback,
-                                   VehicleProperty propId)  override;
+                                   int32_t propId)  override;
     Return<void> debugDump(debugDump_cb _hidl_cb = nullptr) override;
 
 private:
@@ -85,7 +86,7 @@
     // ---------------------------------------------------------------------------------------------
     // Events received from VehicleHal
     void onHalEvent(VehiclePropValuePtr  v);
-    void onHalPropertySetError(StatusCode errorCode, VehicleProperty property,
+    void onHalPropertySetError(StatusCode errorCode, int32_t property,
                                int32_t areaId);
 
     // ---------------------------------------------------------------------------------------------
@@ -94,14 +95,14 @@
 
     void handlePropertySetEvent(const VehiclePropValue& value);
 
-    const VehiclePropConfig* getPropConfigOrNull(VehicleProperty prop) const;
+    const VehiclePropConfig* getPropConfigOrNull(int32_t prop) const;
 
     bool checkWritePermission(const VehiclePropConfig &config,
                               const Caller& callee) const;
     bool checkReadPermission(const VehiclePropConfig &config,
                              const Caller& caller) const;
     bool checkAcl(uid_t callerUid,
-                  VehicleProperty propertyId,
+                  int32_t propertyId,
                   VehiclePropertyAccess requiredAccess) const;
 
     static bool isSubscribable(const VehiclePropConfig& config,
@@ -130,8 +131,9 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
 
 
-#endif // android_hardware_vehicle_V2_0_VehicleHalManager_H_
+#endif // android_hardware_automotive_vehicle_V2_0_VehicleHalManager_H_
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleObjectPool.h
similarity index 95%
rename from vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.h
rename to automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleObjectPool.h
index d9231c3..05c649b 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleObjectPool.h
@@ -15,17 +15,18 @@
  */
 
 
-#ifndef android_hardware_vehicle_V2_0_VehicleObjectPool_H_
-#define android_hardware_vehicle_V2_0_VehicleObjectPool_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_VehicleObjectPool_H_
+#define android_hardware_automotive_vehicle_V2_0_VehicleObjectPool_H_
 
 #include <deque>
 #include <map>
 #include <mutex>
 
-#include <android/hardware/vehicle/2.0/types.h>
+#include <android/hardware/automotive/vehicle/2.0/types.h>
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -238,7 +239,8 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
 
-#endif // android_hardware_vehicle_V2_0_VehicleObjectPool_H_
+#endif // android_hardware_automotive_vehicle_V2_0_VehicleObjectPool_H_
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehiclePropConfigIndex.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehiclePropConfigIndex.h
similarity index 78%
rename from vehicle/2.0/default/vehicle_hal_manager/VehiclePropConfigIndex.h
rename to automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehiclePropConfigIndex.h
index 540fc33..0528f68 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehiclePropConfigIndex.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehiclePropConfigIndex.h
@@ -14,15 +14,16 @@
  * limitations under the License.
  */
 
-#ifndef android_hardware_vehicle_V2_0_VehiclePropConfigIndex_H_
-#define android_hardware_vehicle_V2_0_VehiclePropConfigIndex_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_VehiclePropConfigIndex_H_
+#define android_hardware_automotive_vehicle_V2_0_VehiclePropConfigIndex_H_
 
 #include <utils/KeyedVector.h>
 
-#include <android/hardware/vehicle/2.0/IVehicle.h>
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -37,11 +38,11 @@
         : mConfigs(properties), mPropToConfig(mConfigs)
     {}
 
-    bool hasConfig(VehicleProperty property) const {
+    bool hasConfig(int32_t property) const {
         return mPropToConfig.indexOfKey(property) >= 0;
     }
 
-    const VehiclePropConfig& getConfig(VehicleProperty property) const {
+    const VehiclePropConfig& getConfig(int32_t property) const {
         return *mPropToConfig.valueFor(property);
     }
 
@@ -50,7 +51,7 @@
     }
 
 private:
-    typedef KeyedVector<VehicleProperty, const VehiclePropConfig*> PropConfigMap;
+    typedef KeyedVector<int32_t, const VehiclePropConfig*> PropConfigMap;
     class ImmutablePropConfigMap : private PropConfigMap {
     public:
         ImmutablePropConfigMap(const std::vector<VehiclePropConfig>& configs) {
@@ -72,7 +73,8 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
 
-#endif // android_hardware_vehicle_V2_0_VehiclePropConfigIndex_H_
+#endif // android_hardware_automotive_vehicle_V2_0_VehiclePropConfigIndex_H_
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleUtils.h
similarity index 68%
rename from vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.h
rename to automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleUtils.h
index 1177ddd..ce0b163 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleUtils.h
@@ -14,17 +14,18 @@
  * limitations under the License.
  */
 
-#ifndef android_hardware_vehicle_V2_0_VehicleUtils_H_
-#define android_hardware_vehicle_V2_0_VehicleUtils_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_VehicleUtils_H_
+#define android_hardware_automotive_vehicle_V2_0_VehicleUtils_H_
 
 #include <memory>
 
 #include <hidl/HidlSupport.h>
 
-#include <android/hardware/vehicle/2.0/types.h>
+#include <android/hardware/automotive/vehicle/2.0/types.h>
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -33,32 +34,30 @@
 
 /** Returns underlying (integer) value for given enum. */
 template<typename ENUM>
-inline typename std::underlying_type<ENUM>::type toInt(ENUM const value) {
+inline constexpr typename std::underlying_type<ENUM>::type toInt(
+        ENUM const value) {
     return static_cast<typename std::underlying_type<ENUM>::type>(value);
 }
 
-inline VehiclePropertyType getPropType(VehicleProperty prop) {
+inline constexpr VehiclePropertyType getPropType(int32_t prop) {
     return static_cast<VehiclePropertyType>(
-        static_cast<int32_t>(prop)
-        & static_cast<int32_t>(VehiclePropertyType::MASK));
+            prop & toInt(VehiclePropertyType::MASK));
 }
 
-inline VehiclePropertyGroup getPropGroup(VehicleProperty prop) {
+inline constexpr VehiclePropertyGroup getPropGroup(int32_t prop) {
     return static_cast<VehiclePropertyGroup>(
-        static_cast<int32_t>(prop)
-        & static_cast<int32_t>(VehiclePropertyGroup::MASK));
+            prop & toInt(VehiclePropertyGroup::MASK));
 }
 
-inline VehicleArea getPropArea(VehicleProperty prop) {
-    return static_cast<VehicleArea>(
-        static_cast<int32_t>(prop) & static_cast<int32_t>(VehicleArea::MASK));
+inline constexpr VehicleArea getPropArea(int32_t prop) {
+    return static_cast<VehicleArea>(prop & toInt(VehicleArea::MASK));
 }
 
-inline bool isGlobalProp(VehicleProperty prop) {
+inline constexpr bool isGlobalProp(int32_t prop) {
     return getPropArea(prop) == VehicleArea::GLOBAL;
 }
 
-inline bool isSystemProperty(VehicleProperty prop) {
+inline constexpr bool isSystemProperty(int32_t prop) {
     return VehiclePropertyGroup::SYSTEM == getPropGroup(prop);
 }
 
@@ -80,7 +79,8 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
 
-#endif // android_hardware_vehicle_V2_0_VehicleUtils_H_
+#endif // android_hardware_automotive_vehicle_V2_0_VehicleUtils_H_
diff --git a/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.cpp b/automotive/vehicle/2.0/default/common/src/AccessControlConfigParser.cpp
similarity index 92%
rename from vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.cpp
rename to automotive/vehicle/2.0/default/common/src/AccessControlConfigParser.cpp
index 063a16d..6a3f8e5 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.cpp
+++ b/automotive/vehicle/2.0/default/common/src/AccessControlConfigParser.cpp
@@ -14,9 +14,10 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "android.hardware.vehicle@2.0-impl"
+#define LOG_TAG "automotive.vehicle@2.0-impl"
 
 #include "AccessControlConfigParser.h"
+#include "VehicleUtils.h"
 
 #include <fstream>
 #include <iostream>
@@ -26,21 +27,22 @@
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
 AccessControlConfigParser::AccessControlConfigParser(
-        const std::vector<VehicleProperty>& properties) {
+        const std::vector<int32_t>& properties) {
     // Property Id in the config file doesn't include information about
     // type and area. So we want to create a map from these kind of
     // *stripped* properties to the whole VehicleProperty.
     // We also want to filter out ACL to the properties that supported
     // by concrete Vehicle HAL implementation.
-    for (VehicleProperty vehicleProperty : properties) {
-        auto numProp = static_cast<int>(vehicleProperty);
-        numProp &= ~static_cast<int>(VehiclePropertyType::MASK)
-                & ~static_cast<int>(VehicleArea::MASK);
-        mStrippedToVehiclePropertyMap.emplace(numProp, vehicleProperty);
+    for (auto prop : properties) {
+        auto strippedProp = prop
+                            & ~toInt(VehiclePropertyType::MASK)
+                            & ~toInt(VehicleArea::MASK);
+        mStrippedToVehiclePropertyMap.emplace(strippedProp, prop);
     }
 }
 
@@ -130,8 +132,8 @@
 bool AccessControlConfigParser::parsePropertyId(
         const std::string& strPropId,
         VehiclePropertyGroup propertyGroup,
-        VehicleProperty* outVehicleProperty) const {
-    int propId;
+        int32_t* outVehicleProperty) const {
+    int32_t propId;
     if (!parseInt(strPropId.c_str(), &propId)) {
         ALOGW("Failed to convert property id to integer: %s",
               strPropId.c_str());
@@ -221,5 +223,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
diff --git a/automotive/vehicle/2.0/default/common/src/Obd2SensorStore.cpp b/automotive/vehicle/2.0/default/common/src/Obd2SensorStore.cpp
new file mode 100644
index 0000000..4ee0a71
--- /dev/null
+++ b/automotive/vehicle/2.0/default/common/src/Obd2SensorStore.cpp
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Obd2SensorStore.h"
+
+#include <utils/SystemClock.h>
+#include "VehicleUtils.h"
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+Obd2SensorStore::BitmaskInVector::BitmaskInVector(size_t numBits)
+{
+    resize(numBits);
+}
+
+void Obd2SensorStore::BitmaskInVector::resize(size_t numBits) {
+    mStorage = std::vector<uint8_t>((numBits+7)/8, 0);
+}
+
+void Obd2SensorStore::BitmaskInVector::set(size_t index, bool value) {
+    const size_t byteIndex = index / 8;
+    const size_t bitIndex = index % 8;
+    const uint8_t byte = mStorage[byteIndex];
+    uint8_t newValue = value ? (byte | (1 << bitIndex)) :
+                               (byte & ~(1 << bitIndex));
+    mStorage[byteIndex] = newValue;
+}
+
+bool Obd2SensorStore::BitmaskInVector::get(size_t index) const {
+    const size_t byteIndex = index / 8;
+    const size_t bitIndex = index % 8;
+    const uint8_t byte = mStorage[byteIndex];
+    return (byte & (1 << bitIndex)) != 0;
+}
+
+const std::vector<uint8_t>& Obd2SensorStore::BitmaskInVector::getBitmask() const {
+    return mStorage;
+}
+
+Obd2SensorStore::Obd2SensorStore(size_t numVendorIntegerSensors,
+                                 size_t numVendorFloatSensors) {
+        // because the last index is valid *inclusive*
+        const size_t numSystemIntegerSensors = toInt(Obd2IntegerSensorIndex::LAST_SYSTEM_INDEX)+1;
+        const size_t numSystemFloatSensors = toInt(Obd2FloatSensorIndex::LAST_SYSTEM_INDEX)+1;
+        mIntegerSensors = std::vector<int32_t>(
+            numSystemIntegerSensors+numVendorIntegerSensors, 0);
+        mFloatSensors = std::vector<float>(
+            numSystemFloatSensors+numVendorFloatSensors, 0);
+        mSensorsBitmask.resize(mIntegerSensors.size()+mFloatSensors.size());
+}
+
+StatusCode Obd2SensorStore::setIntegerSensor(Obd2IntegerSensorIndex index,
+    int32_t value) {
+    return setIntegerSensor(toInt(index), value);
+}
+StatusCode Obd2SensorStore::setFloatSensor(Obd2FloatSensorIndex index,
+    float value) {
+    return setFloatSensor(toInt(index), value);
+}
+
+StatusCode Obd2SensorStore::setIntegerSensor(size_t index, int32_t value) {
+    mIntegerSensors[index] = value;
+    mSensorsBitmask.set(index, true);
+    return StatusCode::OK;
+}
+
+StatusCode Obd2SensorStore::setFloatSensor(size_t index, float value) {
+    mFloatSensors[index] = value;
+    mSensorsBitmask.set(index + mIntegerSensors.size(), true);
+    return StatusCode::OK;
+}
+
+const std::vector<int32_t>& Obd2SensorStore::getIntegerSensors() const {
+    return mIntegerSensors;
+}
+
+const std::vector<float>& Obd2SensorStore::getFloatSensors() const {
+    return mFloatSensors;
+}
+
+const std::vector<uint8_t>& Obd2SensorStore::getSensorsBitmask() const {
+    return mSensorsBitmask.getBitmask();
+}
+
+void Obd2SensorStore::fillPropValue(VehiclePropValue *propValue,
+                                    std::string dtc) const {
+    propValue->timestamp = elapsedRealtimeNano();
+    propValue->value.int32Values = getIntegerSensors();
+    propValue->value.floatValues = getFloatSensors();
+    propValue->value.bytes = getSensorsBitmask();
+    propValue->value.stringValue = dtc;
+}
+
+
+
+}  // namespace V2_0
+}  // namespace vehicle
+}  // namespace automotive
+}  // namespace hardware
+}  // namespace android
diff --git a/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.cpp b/automotive/vehicle/2.0/default/common/src/SubscriptionManager.cpp
similarity index 93%
rename from vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.cpp
rename to automotive/vehicle/2.0/default/common/src/SubscriptionManager.cpp
index c190c71..f6f2758 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.cpp
+++ b/automotive/vehicle/2.0/default/common/src/SubscriptionManager.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "android.hardware.vehicle@2.0-impl"
+#define LOG_TAG "automotive.vehicle@2.0-impl"
 
 #include "SubscriptionManager.h"
 
@@ -26,6 +26,7 @@
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -70,7 +71,9 @@
     }
 }
 
-bool HalClient::isSubscribed(VehicleProperty propId, int32_t areaId, SubscribeFlags flags) {
+bool HalClient::isSubscribed(int32_t propId,
+                             int32_t areaId,
+                             SubscribeFlags flags) {
     auto it = mSubscriptions.find(propId);
     if (it == mSubscriptions.end()) {
         return false;
@@ -136,13 +139,13 @@
 }
 
 std::list<sp<HalClient>> SubscriptionManager::getSubscribedClients(
-    VehicleProperty propId, int32_t area, SubscribeFlags flags) const {
+    int32_t propId, int32_t area, SubscribeFlags flags) const {
     MuxGuard g(mLock);
     return getSubscribedClientsLocked(propId, area, flags);
 }
 
 std::list<sp<HalClient>> SubscriptionManager::getSubscribedClientsLocked(
-        VehicleProperty propId, int32_t area, SubscribeFlags flags) const {
+        int32_t propId, int32_t area, SubscribeFlags flags) const {
     std::list<sp<HalClient>> subscribedClients;
 
     sp<HalClientVector> propClients = getClientsForPropertyLocked(propId);
@@ -180,7 +183,7 @@
 }
 
 void SubscriptionManager::addClientToPropMapLocked(
-        VehicleProperty propId, const sp<HalClient> &client) {
+        int32_t propId, const sp<HalClient> &client) {
     auto it = mPropToClients.find(propId);
     sp<HalClientVector> propClients;
     if (it == mPropToClients.end()) {
@@ -193,7 +196,7 @@
 }
 
 sp<HalClientVector> SubscriptionManager::getClientsForPropertyLocked(
-        VehicleProperty propId) const {
+        int32_t propId) const {
     auto it = mPropToClients.find(propId);
     return it == mPropToClients.end() ? nullptr : it->second;
 }
@@ -214,7 +217,7 @@
 }
 
 bool SubscriptionManager::unsubscribe(const sp<IVehicleCallback>& callback,
-                                      VehicleProperty propId) {
+                                      int32_t propId) {
     MuxGuard g(mLock);
     auto propertyClients = getClientsForPropertyLocked(propId);
     auto clientIter = mClients.find(callback);
@@ -252,5 +255,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp b/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp
similarity index 95%
rename from vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp
rename to automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp
index 5d2e6fe..3a5e504 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp
+++ b/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "android.hardware.vehicle@2.0-impl"
+#define LOG_TAG "automotive.vehicle@2.0-impl"
 
 #include "VehicleHalManager.h"
 
@@ -27,6 +27,7 @@
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -58,11 +59,11 @@
 }
 
 Return<void> VehicleHalManager::getPropConfigs(
-        const hidl_vec<VehicleProperty> &properties,
+        const hidl_vec<int32_t> &properties,
         getPropConfigs_cb _hidl_cb) {
     std::vector<VehiclePropConfig> configs;
     for (size_t i = 0; i < properties.size(); i++) {
-        VehicleProperty prop = properties[i];
+        auto prop = properties[i];
         if (mConfigIndex->hasConfig(prop)) {
             configs.push_back(mConfigIndex->getConfig(prop));
         } else {
@@ -125,7 +126,7 @@
     auto caller = getCaller();
     for (size_t i = 0; i < verifiedOptions.size(); i++) {
         SubscribeOptions& ops = verifiedOptions[i];
-        VehicleProperty prop = ops.propId;
+        auto prop = ops.propId;
 
         const auto* config = getPropConfigOrNull(prop);
         if (config == nullptr) {
@@ -168,7 +169,7 @@
 }
 
 Return<StatusCode> VehicleHalManager::unsubscribe(
-        const sp<IVehicleCallback>& callback, VehicleProperty propId) {
+        const sp<IVehicleCallback>& callback, int32_t propId) {
     if (mSubscriptionManager.unsubscribe(callback, propId)) {
         mHal->unsubscribe(propId);
     }
@@ -200,7 +201,7 @@
     auto supportedPropConfigs = mHal->listProperties();
     mConfigIndex.reset(new VehiclePropConfigIndex(supportedPropConfigs));
 
-    std::vector<VehicleProperty> supportedProperties(
+    std::vector<int32_t> supportedProperties(
         supportedPropConfigs.size());
     for (const auto& config : supportedPropConfigs) {
         supportedProperties.push_back(config.prop);
@@ -228,7 +229,7 @@
 }
 
 void VehicleHalManager::onHalPropertySetError(StatusCode errorCode,
-                                              VehicleProperty property,
+                                              int32_t property,
                                               int32_t areaId) {
     const auto& clients = mSubscriptionManager.getSubscribedClients(
             property, 0, SubscribeFlags::HAL_EVENT);
@@ -309,7 +310,7 @@
     return true;
 }
 
-bool VehicleHalManager::checkAcl(uid_t callerUid, VehicleProperty propertyId,
+bool VehicleHalManager::checkAcl(uid_t callerUid, int32_t propertyId,
                                  VehiclePropertyAccess requiredAccess) const {
     if (callerUid == AID_SYSTEM && isSystemProperty(propertyId)) {
         return true;
@@ -353,7 +354,7 @@
 }
 
 const VehiclePropConfig* VehicleHalManager::getPropConfigOrNull(
-        VehicleProperty prop) const {
+        int32_t prop) const {
     return mConfigIndex->hasConfig(prop)
            ? &mConfigIndex->getConfig(prop) : nullptr;
 }
@@ -380,5 +381,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp b/automotive/vehicle/2.0/default/common/src/VehicleObjectPool.cpp
similarity index 95%
rename from vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp
rename to automotive/vehicle/2.0/default/common/src/VehicleObjectPool.cpp
index e9dd68d..ac1245a 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp
+++ b/automotive/vehicle/2.0/default/common/src/VehicleObjectPool.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "android.hardware.vehicle@2.0-impl"
+#define LOG_TAG "automotive.vehicle@2.0-impl"
 
 #include "VehicleObjectPool.h"
 
@@ -24,6 +24,7 @@
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -36,7 +37,7 @@
 
 VehiclePropValuePool::RecyclableType VehiclePropValuePool::obtain(
         const VehiclePropValue& src) {
-    if (src.prop == VehicleProperty::INVALID) {
+    if (src.prop == toInt(VehicleProperty::INVALID)) {
         ALOGE("Unable to obtain an object from pool for unknown property");
         return RecyclableType();
     }
@@ -128,7 +129,7 @@
     if (!check(&o->value)) {
         ALOGE("Discarding value for prop 0x%x because it contains "
                   "data that is not consistent with this pool. "
-                  "Expected type: %d, vector size: %d",
+                  "Expected type: %d, vector size: %zu",
               o->prop, mPropType, mVectorSize);
         delete o;
     } else {
@@ -157,5 +158,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.cpp b/automotive/vehicle/2.0/default/common/src/VehicleUtils.cpp
similarity index 97%
rename from vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.cpp
rename to automotive/vehicle/2.0/default/common/src/VehicleUtils.cpp
index 5a00631..311cdef 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.cpp
+++ b/automotive/vehicle/2.0/default/common/src/VehicleUtils.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "android.hardware.vehicle@2.0-impl"
+#define LOG_TAG "automotive.vehicle@2.0-impl"
 
 #include "VehicleUtils.h"
 
@@ -22,6 +22,7 @@
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -124,5 +125,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
diff --git a/vehicle/2.0/default/impl/DefaultConfig.h b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h
similarity index 71%
rename from vehicle/2.0/default/impl/DefaultConfig.h
rename to automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h
index 12c1c1b..ec08a43 100644
--- a/vehicle/2.0/default/impl/DefaultConfig.h
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h
@@ -14,14 +14,15 @@
  * limitations under the License.
  */
 
-#ifndef android_hardware_vehicle_V2_0_impl_DefaultConfig_H_
-#define android_hardware_vehicle_V2_0_impl_DefaultConfig_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_impl_DefaultConfig_H_
+#define android_hardware_automotive_vehicle_V2_0_impl_DefaultConfig_H_
 
-#include <android/hardware/vehicle/2.0/IVehicle.h>
-#include <vehicle_hal_manager/VehicleUtils.h>
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+#include <vhal_v2_0/VehicleUtils.h>
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -29,20 +30,20 @@
 
 const VehiclePropConfig kVehicleProperties[] = {
     {
-        .prop = VehicleProperty::INFO_MAKE,
+        .prop = toInt(VehicleProperty::INFO_MAKE),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::STATIC,
     },
 
     {
-        .prop = VehicleProperty::HVAC_POWER_ON,
+        .prop = toInt(VehicleProperty::HVAC_POWER_ON),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .supportedAreas = toInt(VehicleAreaZone::ROW_1)
     },
 
     {
-        .prop = VehicleProperty::HVAC_DEFROSTER,
+        .prop = toInt(VehicleProperty::HVAC_DEFROSTER),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .supportedAreas =
@@ -51,28 +52,28 @@
     },
 
     {
-        .prop = VehicleProperty::HVAC_RECIRC_ON,
+        .prop = toInt(VehicleProperty::HVAC_RECIRC_ON),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .supportedAreas = toInt(VehicleAreaZone::ROW_1)
     },
 
     {
-        .prop = VehicleProperty::HVAC_AC_ON,
+        .prop = toInt(VehicleProperty::HVAC_AC_ON),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .supportedAreas = toInt(VehicleAreaZone::ROW_1)
     },
 
     {
-        .prop = VehicleProperty::HVAC_AUTO_ON,
+        .prop = toInt(VehicleProperty::HVAC_AUTO_ON),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .supportedAreas = toInt(VehicleAreaZone::ROW_1)
     },
 
     {
-        .prop = VehicleProperty::HVAC_FAN_SPEED,
+        .prop = toInt(VehicleProperty::HVAC_FAN_SPEED),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .supportedAreas = toInt(VehicleAreaZone::ROW_1),
@@ -86,14 +87,14 @@
     },
 
     {
-        .prop = VehicleProperty::HVAC_FAN_DIRECTION,
+        .prop = toInt(VehicleProperty::HVAC_FAN_DIRECTION),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .supportedAreas = toInt(VehicleAreaZone::ROW_1),
     },
 
     {
-        .prop = VehicleProperty::HVAC_TEMPERATURE_SET,
+        .prop = toInt(VehicleProperty::HVAC_TEMPERATURE_SET),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .supportedAreas =
@@ -114,25 +115,25 @@
     },
 
     {
-        .prop = VehicleProperty::NIGHT_MODE,
+        .prop = toInt(VehicleProperty::NIGHT_MODE),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
     },
 
     {
-        .prop = VehicleProperty::DRIVING_STATUS,
+        .prop = toInt(VehicleProperty::DRIVING_STATUS),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
     },
 
     {
-        .prop = VehicleProperty::GEAR_SELECTION,
+        .prop = toInt(VehicleProperty::GEAR_SELECTION),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
     },
 
     {
-        .prop = VehicleProperty::INFO_FUEL_CAPACITY,
+        .prop = toInt(VehicleProperty::INFO_FUEL_CAPACITY),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .areaConfigs = {
@@ -144,7 +145,7 @@
     },
 
     {
-        .prop = VehicleProperty::DISPLAY_BRIGHTNESS,
+        .prop = toInt(VehicleProperty::DISPLAY_BRIGHTNESS),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .areaConfigs = {
@@ -156,21 +157,35 @@
     },
 
     {
-        .prop = VehicleProperty::IGNITION_STATE,
+        .prop = toInt(VehicleProperty::IGNITION_STATE),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
     },
 
     {
-        .prop = VehicleProperty::OBD2_LIVE_FRAME,
+        .prop = toInt(VehicleProperty::OBD2_LIVE_FRAME),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+        .configArray = {0,0}
     },
 
     {
-        .prop = VehicleProperty::OBD2_FREEZE_FRAME,
+        .prop = toInt(VehicleProperty::OBD2_FREEZE_FRAME),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+        .configArray = {0,0}
+    },
+
+    {
+        .prop = toInt(VehicleProperty::OBD2_FREEZE_FRAME_INFO),
+        .access = VehiclePropertyAccess::READ,
+        .changeMode = VehiclePropertyChangeMode::ON_CHANGE
+    },
+
+    {
+        .prop = toInt(VehicleProperty::OBD2_FREEZE_FRAME_CLEAR),
+        .access = VehiclePropertyAccess::WRITE,
+        .changeMode = VehiclePropertyChangeMode::ON_CHANGE
     }
 };
 
@@ -178,7 +193,8 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
 
-#endif // android_hardware_vehicle_V2_0_impl_DefaultConfig_H_
+#endif // android_hardware_automotive_vehicle_V2_0_impl_DefaultConfig_H_
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.cpp b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.cpp
new file mode 100644
index 0000000..d3d77b6
--- /dev/null
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.cpp
@@ -0,0 +1,844 @@
+/*
+ * 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 "DefaultVehicleHal"
+#include <android/log.h>
+
+#include <algorithm>
+#include <netinet/in.h>
+#include <sys/socket.h>
+
+#include "DefaultVehicleHal.h"
+#include "VehicleHalProto.pb.h"
+
+#define DEBUG_SOCKET    (33452)
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+namespace impl {
+
+void DefaultVehicleHal::doGetConfig(emulator::EmulatorMessage& rxMsg,
+                                    emulator::EmulatorMessage& respMsg) {
+    std::vector<VehiclePropConfig> configs = listProperties();
+    emulator::VehiclePropGet getProp = rxMsg.prop(0);
+
+    respMsg.set_msg_type(emulator::GET_CONFIG_RESP);
+    respMsg.set_status(emulator::ERROR_INVALID_PROPERTY);
+
+    for (auto& config : configs) {
+        // Find the config we are looking for
+        if (config.prop == getProp.prop()) {
+            emulator::VehiclePropConfig* protoCfg = respMsg.add_config();
+            populateProtoVehicleConfig(protoCfg, config);
+            respMsg.set_status(emulator::RESULT_OK);
+            break;
+        }
+    }
+}
+
+void DefaultVehicleHal::doGetConfigAll(emulator::EmulatorMessage& /* rxMsg */,
+                                       emulator::EmulatorMessage& respMsg) {
+    std::vector<VehiclePropConfig> configs = listProperties();
+
+    respMsg.set_msg_type(emulator::GET_CONFIG_ALL_RESP);
+    respMsg.set_status(emulator::RESULT_OK);
+
+    for (auto& config : configs) {
+        emulator::VehiclePropConfig* protoCfg = respMsg.add_config();
+        populateProtoVehicleConfig(protoCfg, config);
+    }
+}
+
+void DefaultVehicleHal::doGetProperty(emulator::EmulatorMessage& rxMsg,
+                                      emulator::EmulatorMessage& respMsg) {
+    int32_t areaId = 0;
+    emulator::VehiclePropGet getProp = rxMsg.prop(0);
+    int32_t propId = getProp.prop();
+    emulator::Status status = emulator::ERROR_INVALID_PROPERTY;
+    VehiclePropValue* val;
+
+    respMsg.set_msg_type(emulator::GET_PROPERTY_RESP);
+
+    if (getProp.has_area_id()) {
+        areaId = getProp.area_id();
+    }
+
+    {
+        std::lock_guard<std::mutex> lock(mPropsMutex);
+
+        val = getVehiclePropValueLocked(propId, areaId);
+        if (val != nullptr) {
+            emulator::VehiclePropValue* protoVal = respMsg.add_value();
+            populateProtoVehiclePropValue(protoVal, val);
+            status = emulator::RESULT_OK;
+        }
+    }
+
+    respMsg.set_status(status);
+}
+
+void DefaultVehicleHal::doGetPropertyAll(emulator::EmulatorMessage& /* rxMsg */,
+                                         emulator::EmulatorMessage& respMsg) {
+    respMsg.set_msg_type(emulator::GET_PROPERTY_ALL_RESP);
+    respMsg.set_status(emulator::RESULT_OK);
+
+    {
+        std::lock_guard<std::mutex> lock(mPropsMutex);
+
+        for (auto& propVal : mProps) {
+            emulator::VehiclePropValue* protoVal = respMsg.add_value();
+            populateProtoVehiclePropValue(protoVal, propVal.get());
+        }
+    }
+}
+
+void DefaultVehicleHal::doSetProperty(emulator::EmulatorMessage& rxMsg,
+                                      emulator::EmulatorMessage& respMsg) {
+    emulator::VehiclePropValue protoVal = rxMsg.value(0);
+    VehiclePropValue val;
+
+    respMsg.set_msg_type(emulator::SET_PROPERTY_RESP);
+
+    val.prop = protoVal.prop();
+    val.areaId = protoVal.area_id();
+
+    // Copy value data if it is set.  This automatically handles complex data types if needed.
+    if (protoVal.has_string_value()) {
+        val.value.stringValue = protoVal.string_value().c_str();
+    }
+
+    if (protoVal.has_bytes_value()) {
+        std::vector<uint8_t> tmp(protoVal.bytes_value().begin(), protoVal.bytes_value().end());
+        val.value.bytes = tmp;
+    }
+
+    if (protoVal.int32_values_size() > 0) {
+        std::vector<int32_t> int32Values = std::vector<int32_t>(protoVal.int32_values_size());
+        for (int i=0; i<protoVal.int32_values_size(); i++) {
+            int32Values[i] = protoVal.int32_values(i);
+        }
+        val.value.int32Values = int32Values;
+    }
+
+    if (protoVal.int64_values_size() > 0) {
+        std::vector<int64_t> int64Values = std::vector<int64_t>(protoVal.int64_values_size());
+        for (int i=0; i<protoVal.int64_values_size(); i++) {
+            int64Values[i] = protoVal.int64_values(i);
+        }
+        val.value.int64Values = int64Values;
+    }
+
+    if (protoVal.float_values_size() > 0) {
+        std::vector<float> floatValues = std::vector<float>(protoVal.float_values_size());
+        for (int i=0; i<protoVal.float_values_size(); i++) {
+            floatValues[i] = protoVal.float_values(i);
+        }
+        val.value.floatValues = floatValues;
+    }
+
+    if (updateProperty(val) == StatusCode::OK) {
+        // Send property up to VehicleHalManager via callback
+        auto& pool = *getValuePool();
+        VehiclePropValuePtr v = pool.obtain(val);
+
+        doHalEvent(std::move(v));
+        respMsg.set_status(emulator::RESULT_OK);
+    } else {
+        respMsg.set_status(emulator::ERROR_INVALID_PROPERTY);
+    }
+}
+
+// This function should only be called while mPropsMutex is locked.
+VehiclePropValue* DefaultVehicleHal::getVehiclePropValueLocked(int32_t propId, int32_t areaId) {
+    if (getPropArea(propId) == VehicleArea::GLOBAL) {
+        // In VehicleHal, global properties have areaId = -1.  We use 0.
+        areaId = 0;
+    }
+
+    for (auto& prop : mProps) {
+        if ((prop->prop == propId) && (prop->areaId == areaId)) {
+            return prop.get();
+        }
+    }
+    ALOGW("%s: Property not found:  propId = 0x%x, areaId = 0x%x", __FUNCTION__, propId, areaId);
+    return nullptr;
+}
+
+static std::unique_ptr<Obd2SensorStore> fillDefaultObd2Frame(
+        size_t numVendorIntegerSensors,
+        size_t numVendorFloatSensors) {
+    std::unique_ptr<Obd2SensorStore> sensorStore(new Obd2SensorStore(
+            numVendorIntegerSensors, numVendorFloatSensors));
+
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::FUEL_SYSTEM_STATUS,
+        toInt(FuelSystemStatus::CLOSED_LOOP));
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::MALFUNCTION_INDICATOR_LIGHT_ON, 0);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::IGNITION_MONITORS_SUPPORTED,
+        toInt(IgnitionMonitorKind::SPARK));
+    sensorStore->setIntegerSensor(Obd2IntegerSensorIndex::IGNITION_SPECIFIC_MONITORS,
+        CommonIgnitionMonitors::COMPONENTS_AVAILABLE |
+        CommonIgnitionMonitors::MISFIRE_AVAILABLE |
+        SparkIgnitionMonitors::AC_REFRIGERANT_AVAILABLE |
+        SparkIgnitionMonitors::EVAPORATIVE_SYSTEM_AVAILABLE);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::INTAKE_AIR_TEMPERATURE, 35);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::COMMANDED_SECONDARY_AIR_STATUS,
+        toInt(SecondaryAirStatus::FROM_OUTSIDE_OR_OFF));
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::NUM_OXYGEN_SENSORS_PRESENT, 1);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::RUNTIME_SINCE_ENGINE_START, 500);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON, 0);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::WARMUPS_SINCE_CODES_CLEARED, 51);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::DISTANCE_TRAVELED_SINCE_CODES_CLEARED, 365);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::ABSOLUTE_BAROMETRIC_PRESSURE, 30);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::CONTROL_MODULE_VOLTAGE, 12);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::AMBIENT_AIR_TEMPERATURE, 18);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::MAX_FUEL_AIR_EQUIVALENCE_RATIO, 1);
+    sensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::FUEL_TYPE, toInt(FuelType::GASOLINE));
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::CALCULATED_ENGINE_LOAD, 0.153);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::SHORT_TERM_FUEL_TRIM_BANK1, -0.16);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::LONG_TERM_FUEL_TRIM_BANK1, -0.16);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::SHORT_TERM_FUEL_TRIM_BANK2, -0.16);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::LONG_TERM_FUEL_TRIM_BANK2, -0.16);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::INTAKE_MANIFOLD_ABSOLUTE_PRESSURE, 7.5);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::ENGINE_RPM, 1250.);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::VEHICLE_SPEED, 40.);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::TIMING_ADVANCE, 2.5);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::THROTTLE_POSITION, 19.75);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::OXYGEN_SENSOR1_VOLTAGE, 0.265);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::FUEL_TANK_LEVEL_INPUT, 0.824);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::EVAPORATION_SYSTEM_VAPOR_PRESSURE, -0.373);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::CATALYST_TEMPERATURE_BANK1_SENSOR1, 190.);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::RELATIVE_THROTTLE_POSITION, 3.);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::ABSOLUTE_THROTTLE_POSITION_B, 0.306);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::ACCELERATOR_PEDAL_POSITION_D, 0.188);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::ACCELERATOR_PEDAL_POSITION_E, 0.094);
+    sensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::COMMANDED_THROTTLE_ACTUATOR, 0.024);
+
+    return sensorStore;
+}
+
+void DefaultVehicleHal::initObd2LiveFrame(VehiclePropConfig& propConfig) {
+    auto sensorStore = fillDefaultObd2Frame(propConfig.configArray[0],
+            propConfig.configArray[1]);
+    mLiveObd2Frame = createVehiclePropValue(VehiclePropertyType::COMPLEX, 0);
+    sensorStore->fillPropValue(mLiveObd2Frame.get(), "");
+}
+
+void DefaultVehicleHal::initObd2FreezeFrame(VehiclePropConfig& propConfig) {
+    auto sensorStore = fillDefaultObd2Frame(propConfig.configArray[0],
+            propConfig.configArray[1]);
+
+    mFreezeObd2Frames.push_back(
+            createVehiclePropValue(VehiclePropertyType::COMPLEX,0));
+    mFreezeObd2Frames.push_back(
+            createVehiclePropValue(VehiclePropertyType::COMPLEX,0));
+    mFreezeObd2Frames.push_back(
+            createVehiclePropValue(VehiclePropertyType::COMPLEX,0));
+
+    sensorStore->fillPropValue(mFreezeObd2Frames[0].get(), "P0070");
+    sensorStore->fillPropValue(mFreezeObd2Frames[1].get(), "P0102");
+    sensorStore->fillPropValue(mFreezeObd2Frames[2].get(), "P0123");
+}
+
+void DefaultVehicleHal::parseRxProtoBuf(std::vector<uint8_t>& msg) {
+    emulator::EmulatorMessage rxMsg;
+    emulator::EmulatorMessage respMsg;
+    std::string str(reinterpret_cast<const char*>(msg.data()), msg.size());
+
+    rxMsg.ParseFromString(str);
+
+    switch (rxMsg.msg_type()) {
+    case emulator::GET_CONFIG_CMD:
+        doGetConfig(rxMsg, respMsg);
+        break;
+    case emulator::GET_CONFIG_ALL_CMD:
+        doGetConfigAll(rxMsg, respMsg);
+        break;
+    case emulator::GET_PROPERTY_CMD:
+        doGetProperty(rxMsg, respMsg);
+        break;
+    case emulator::GET_PROPERTY_ALL_CMD:
+        doGetPropertyAll(rxMsg, respMsg);
+        break;
+    case emulator::SET_PROPERTY_CMD:
+        doSetProperty(rxMsg, respMsg);
+        break;
+    default:
+        ALOGW("%s: Unknown message received, type = %d", __FUNCTION__, rxMsg.msg_type());
+        respMsg.set_status(emulator::ERROR_UNIMPLEMENTED_CMD);
+        break;
+    }
+
+    // Send the reply
+    txMsg(respMsg);
+}
+
+// Copies internal VehiclePropConfig data structure to protobuf VehiclePropConfig
+void DefaultVehicleHal::populateProtoVehicleConfig(emulator::VehiclePropConfig* protoCfg,
+                                                   const VehiclePropConfig& cfg) {
+    protoCfg->set_prop(cfg.prop);
+    protoCfg->set_access(toInt(cfg.access));
+    protoCfg->set_change_mode(toInt(cfg.changeMode));
+    protoCfg->set_value_type(toInt(getPropType(cfg.prop)));
+
+    if (!isGlobalProp(cfg.prop)) {
+        protoCfg->set_supported_areas(cfg.supportedAreas);
+    }
+
+    for (auto& configElement : cfg.configArray) {
+        protoCfg->add_config_array(configElement);
+    }
+
+    if (cfg.configString.size() > 0) {
+        protoCfg->set_config_string(cfg.configString.c_str(), cfg.configString.size());
+    }
+
+    // Populate the min/max values based on property type
+    switch (getPropType(cfg.prop)) {
+    case VehiclePropertyType::STRING:
+    case VehiclePropertyType::BOOLEAN:
+    case VehiclePropertyType::INT32_VEC:
+    case VehiclePropertyType::FLOAT_VEC:
+    case VehiclePropertyType::BYTES:
+    case VehiclePropertyType::COMPLEX:
+        // Do nothing.  These types don't have min/max values
+        break;
+    case VehiclePropertyType::INT64:
+        if (cfg.areaConfigs.size() > 0) {
+            emulator::VehicleAreaConfig* aCfg = protoCfg->add_area_configs();
+            aCfg->set_min_int64_value(cfg.areaConfigs[0].minInt64Value);
+            aCfg->set_max_int64_value(cfg.areaConfigs[0].maxInt64Value);
+        }
+        break;
+    case VehiclePropertyType::FLOAT:
+        if (cfg.areaConfigs.size() > 0) {
+            emulator::VehicleAreaConfig* aCfg = protoCfg->add_area_configs();
+            aCfg->set_min_float_value(cfg.areaConfigs[0].minFloatValue);
+            aCfg->set_max_float_value(cfg.areaConfigs[0].maxFloatValue);
+        }
+        break;
+    case VehiclePropertyType::INT32:
+        if (cfg.areaConfigs.size() > 0) {
+            emulator::VehicleAreaConfig* aCfg = protoCfg->add_area_configs();
+            aCfg->set_min_int32_value(cfg.areaConfigs[0].minInt32Value);
+            aCfg->set_max_int32_value(cfg.areaConfigs[0].maxInt32Value);
+        }
+        break;
+    default:
+        ALOGW("%s: Unknown property type:  0x%x", __FUNCTION__, toInt(getPropType(cfg.prop)));
+        break;
+    }
+
+    protoCfg->set_min_sample_rate(cfg.minSampleRate);
+    protoCfg->set_max_sample_rate(cfg.maxSampleRate);
+}
+
+// Copies internal VehiclePropValue data structure to protobuf VehiclePropValue
+void DefaultVehicleHal::populateProtoVehiclePropValue(emulator::VehiclePropValue* protoVal,
+                                                      const VehiclePropValue* val) {
+    protoVal->set_prop(val->prop);
+    protoVal->set_value_type(toInt(getPropType(val->prop)));
+    protoVal->set_timestamp(val->timestamp);
+    protoVal->set_area_id(val->areaId);
+
+    // Copy value data if it is set.
+    //  - for bytes and strings, this is indicated by size > 0
+    //  - for int32, int64, and float, copy the values if vectors have data
+    if (val->value.stringValue.size() > 0) {
+        protoVal->set_string_value(val->value.stringValue.c_str(), val->value.stringValue.size());
+    }
+
+    if (val->value.bytes.size() > 0) {
+        protoVal->set_bytes_value(val->value.bytes.data(), val->value.bytes.size());
+    }
+
+    for (auto& int32Value : val->value.int32Values) {
+        protoVal->add_int32_values(int32Value);
+    }
+
+    for (auto& int64Value : val->value.int64Values) {
+        protoVal->add_int64_values(int64Value);
+    }
+
+    for (auto& floatValue : val->value.floatValues) {
+        protoVal->add_float_values(floatValue);
+    }
+}
+
+void DefaultVehicleHal::rxMsg(void) {
+    int  numBytes = 0;
+    int32_t msgSize;
+    do {
+        // This is a variable length message.
+        // Read the number of bytes to rx over the socket
+        numBytes = read(mCurSocket, &msgSize, sizeof(msgSize));
+
+        if (numBytes != sizeof(msgSize)) {
+            // This happens when connection is closed
+            ALOGD("%s: numBytes=%d, expected=4", __FUNCTION__, numBytes);
+            break;
+        }
+
+        std::vector<uint8_t> msg = std::vector<uint8_t>(msgSize);
+
+        numBytes = read(mCurSocket, msg.data(), msgSize);
+
+        if ((numBytes == msgSize) && (msgSize > 0)) {
+            // Received a message.
+            parseRxProtoBuf(msg);
+        } else {
+            // This happens when connection is closed
+            ALOGD("%s: numBytes=%d, msgSize=%d", __FUNCTION__, numBytes, msgSize);
+            break;
+        }
+    } while (mExit == 0);
+}
+
+void DefaultVehicleHal::rxThread(void) {
+    // Initialize the socket
+    {
+        int retVal;
+        struct sockaddr_in servAddr;
+
+        mSocket = socket(AF_INET, SOCK_STREAM, 0);
+        if (mSocket < 0) {
+            ALOGE("%s: socket() failed, mSocket=%d, errno=%d", __FUNCTION__, mSocket, errno);
+            mSocket = -1;
+            return;
+        }
+
+        bzero(&servAddr, sizeof(servAddr));
+        servAddr.sin_family = AF_INET;
+        servAddr.sin_addr.s_addr = INADDR_ANY;
+        servAddr.sin_port = htons(DEBUG_SOCKET);
+
+        retVal = bind(mSocket, reinterpret_cast<struct sockaddr*>(&servAddr), sizeof(servAddr));
+        if(retVal < 0) {
+            ALOGE("%s: Error on binding: retVal=%d, errno=%d", __FUNCTION__, retVal, errno);
+            close(mSocket);
+            mSocket = -1;
+            return;
+        }
+
+        listen(mSocket, 1);
+
+        // Set the socket to be non-blocking so we can poll it continouously
+        fcntl(mSocket, F_SETFL, O_NONBLOCK);
+    }
+
+    while (mExit == 0) {
+        struct sockaddr_in cliAddr;
+        socklen_t cliLen = sizeof(cliAddr);
+        int cSocket = accept(mSocket, reinterpret_cast<struct sockaddr*>(&cliAddr), &cliLen);
+
+        if (cSocket >= 0) {
+            {
+                std::lock_guard<std::mutex> lock(mTxMutex);
+                mCurSocket = cSocket;
+            }
+            ALOGD("%s: Incoming connection received on socket %d", __FUNCTION__, cSocket);
+            rxMsg();
+            ALOGD("%s: Connection terminated on socket %d", __FUNCTION__, cSocket);
+            {
+                std::lock_guard<std::mutex> lock(mTxMutex);
+                mCurSocket = -1;
+            }
+        }
+
+        // TODO:  Use a blocking socket?
+        // Check every 100ms for a new socket connection
+        std::this_thread::sleep_for(std::chrono::milliseconds(100));
+    }
+
+    // Shutdown the socket
+    close(mSocket);
+    mSocket = -1;
+}
+
+// This function sets the default value of a property if we are interested in setting it.
+// TODO:  Co-locate the default values with the configuration structure, to make it easier to
+//          add new properties and their defaults.
+void DefaultVehicleHal::setDefaultValue(VehiclePropValue* prop) {
+    switch (prop->prop) {
+    case toInt(VehicleProperty::INFO_MAKE):
+        prop->value.stringValue = "Default Car";
+        break;
+    case toInt(VehicleProperty::HVAC_POWER_ON):
+        prop->value.int32Values[0] = 1;
+        break;
+    case toInt(VehicleProperty::HVAC_DEFROSTER):
+        prop->value.int32Values[0] = 0;
+        break;
+    case toInt(VehicleProperty::HVAC_RECIRC_ON):
+        prop->value.int32Values[0] = 1;
+        break;
+    case toInt(VehicleProperty::HVAC_AC_ON):
+        prop->value.int32Values[0] = 1;
+        break;
+    case toInt(VehicleProperty::HVAC_AUTO_ON):
+        prop->value.int32Values[0] = 1;
+        break;
+    case toInt(VehicleProperty::HVAC_FAN_SPEED):
+        prop->value.int32Values[0] = 3;
+        break;
+    case toInt(VehicleProperty::HVAC_FAN_DIRECTION):
+        prop->value.int32Values[0] = toInt(VehicleHvacFanDirection::FACE);
+        break;
+    case toInt(VehicleProperty::HVAC_TEMPERATURE_SET):
+        prop->value.floatValues[0] = 16;
+        break;
+    case toInt(VehicleProperty::NIGHT_MODE):
+        prop->value.int32Values[0] = 0;
+        break;
+    case toInt(VehicleProperty::DRIVING_STATUS):
+        prop->value.int32Values[0] = toInt(VehicleDrivingStatus::UNRESTRICTED);
+        break;
+    case toInt(VehicleProperty::GEAR_SELECTION):
+        prop->value.int32Values[0] = toInt(VehicleGear::GEAR_PARK);
+        break;
+    case toInt(VehicleProperty::INFO_FUEL_CAPACITY):
+        prop->value.floatValues[0] = 0.75f;
+        break;
+    case toInt(VehicleProperty::DISPLAY_BRIGHTNESS):
+        prop->value.int32Values[0] = 7;
+        break;
+    case toInt(VehicleProperty::IGNITION_STATE):
+        prop->value.int32Values[0] = toInt(VehicleIgnitionState::ON);
+        break;
+    case toInt(VehicleProperty::OBD2_LIVE_FRAME):
+        // OBD2 is handled separately
+        break;
+    case toInt(VehicleProperty::OBD2_FREEZE_FRAME):
+        // OBD2 is handled separately
+        break;
+    default:
+        ALOGW("%s: propId=0x%x not found", __FUNCTION__, prop->prop);
+        break;
+    }
+}
+
+// Transmit a reply back to the emulator
+void DefaultVehicleHal::txMsg(emulator::EmulatorMessage& txMsg) {
+    std::string msgString;
+
+    if (txMsg.SerializeToString(&msgString)) {
+        int32_t msgLen = msgString.length();
+        int retVal = 0;
+
+        // TODO:  Prepend the message length to the string without a copy
+        msgString.insert(0, reinterpret_cast<char*>(&msgLen), 4);
+
+        // Send the message
+        {
+            std::lock_guard<std::mutex> lock(mTxMutex);
+            if (mCurSocket != -1) {
+                retVal = write(mCurSocket, msgString.data(), msgString.size());
+            }
+        }
+
+        if (retVal < 0) {
+            ALOGE("%s: Failed to tx message: retval=%d, errno=%d", __FUNCTION__, retVal, errno);
+        }
+    } else {
+        ALOGE("%s: SerializeToString failed!", __FUNCTION__);
+    }
+}
+
+// Updates the property value held in the HAL
+StatusCode DefaultVehicleHal::updateProperty(const VehiclePropValue& propValue) {
+    auto propId = propValue.prop;
+    auto areaId = propValue.areaId;
+    StatusCode status = StatusCode::INVALID_ARG;
+
+    {
+        std::lock_guard<std::mutex> lock(mPropsMutex);
+
+        VehiclePropValue* internalPropValue = getVehiclePropValueLocked(propId, areaId);
+        if (internalPropValue != nullptr) {
+            internalPropValue->value = propValue.value;
+            internalPropValue->timestamp = elapsedRealtimeNano();
+            status = StatusCode::OK;
+        }
+    }
+    return status;
+}
+
+VehicleHal::VehiclePropValuePtr DefaultVehicleHal::get(
+        const VehiclePropValue& requestedPropValue, StatusCode* outStatus) {
+    auto areaId = requestedPropValue.areaId;
+    auto& pool = *getValuePool();
+    auto propId = requestedPropValue.prop;
+    StatusCode status;
+    VehiclePropValuePtr v = nullptr;
+
+    switch (propId) {
+    case toInt(VehicleProperty::OBD2_LIVE_FRAME):
+        v = pool.obtainComplex();
+        status = fillObd2LiveFrame(v.get());
+        break;
+    case toInt(VehicleProperty::OBD2_FREEZE_FRAME):
+        v = pool.obtainComplex();
+        status = fillObd2FreezeFrame(requestedPropValue, v.get());
+        break;
+    case toInt(VehicleProperty::OBD2_FREEZE_FRAME_INFO):
+        v = pool.obtainComplex();
+        status = fillObd2DtcInfo(v.get());
+        break;
+    default:
+        {
+            std::lock_guard<std::mutex> lock(mPropsMutex);
+
+            VehiclePropValue *internalPropValue = getVehiclePropValueLocked(propId, areaId);
+            if (internalPropValue != nullptr) {
+                v = pool.obtain(*internalPropValue);
+            }
+        }
+
+        if (v != nullptr) {
+            status = StatusCode::OK;
+        } else {
+            status = StatusCode::INVALID_ARG;
+        }
+        break;
+    }
+
+    *outStatus = status;
+    return v;
+}
+
+StatusCode DefaultVehicleHal::set(const VehiclePropValue& propValue) {
+    auto propId = propValue.prop;
+    StatusCode status;
+    switch (propId) {
+        case toInt(VehicleProperty::OBD2_FREEZE_FRAME_CLEAR):
+            status = clearObd2FreezeFrames(propValue);
+            break;
+        default:
+            status = updateProperty(propValue);
+            if (status == StatusCode::OK) {
+                // Send property update to emulator
+                emulator::EmulatorMessage msg;
+                emulator::VehiclePropValue *val = msg.add_value();
+                populateProtoVehiclePropValue(val, &propValue);
+                msg.set_status(emulator::RESULT_OK);
+                msg.set_msg_type(emulator::SET_PROPERTY_ASYNC);
+                txMsg(msg);
+            }
+            break;
+    }
+
+    return status;
+}
+
+// Parse supported properties list and generate vector of property values to hold current values.
+void DefaultVehicleHal::onCreate() {
+    // Initialize member variables
+    mCurSocket = -1;
+    mExit = 0;
+    mSocket = -1;
+
+    // Get the list of configurations supported by this HAL
+    std::vector<VehiclePropConfig> configs = listProperties();
+
+    for (auto& cfg : configs) {
+        VehiclePropertyType propType = getPropType(cfg.prop);
+        int32_t supportedAreas = cfg.supportedAreas;
+        int32_t vecSize;
+
+        // Set the vector size based on property type
+        switch (propType) {
+        case VehiclePropertyType::BOOLEAN:
+        case VehiclePropertyType::INT32:
+        case VehiclePropertyType::INT64:
+        case VehiclePropertyType::FLOAT:
+            vecSize = 1;
+            break;
+        case VehiclePropertyType::INT32_VEC:
+        case VehiclePropertyType::FLOAT_VEC:
+        case VehiclePropertyType::BYTES:
+            // TODO:  Add proper support for these types
+            vecSize = 1;
+            break;
+        case VehiclePropertyType::STRING:
+            // Require individual handling
+            vecSize = 0;
+            break;
+        case VehiclePropertyType::COMPLEX:
+            switch (cfg.prop) {
+            case toInt(VehicleProperty::OBD2_LIVE_FRAME):
+                initObd2LiveFrame(cfg);
+                break;
+            case toInt(VehicleProperty::OBD2_FREEZE_FRAME):
+                initObd2FreezeFrame(cfg);
+                break;
+            default:
+                // Need to handle each complex property separately
+                break;
+            }
+            continue;
+            break;
+        case VehiclePropertyType::MASK:
+        default:
+            ALOGW("%s: propType=0x%x not found", __FUNCTION__, propType);
+            vecSize = 0;
+            break;
+        }
+
+        //  A global property will have supportedAreas = 0
+        if (getPropArea(cfg.prop) == VehicleArea::GLOBAL) {
+            supportedAreas = 0;
+        }
+
+        // This loop is a do-while so it executes at least once to handle global properties
+        do {
+            int32_t curArea = supportedAreas;
+
+            // Clear the right-most bit of supportedAreas
+            supportedAreas &= supportedAreas - 1;
+
+            // Set curArea to the previously cleared bit
+            curArea ^= supportedAreas;
+
+            // Create a separate instance for each individual zone
+            std::unique_ptr<VehiclePropValue> prop = createVehiclePropValue(propType, vecSize);
+            prop->areaId = curArea;
+            prop->prop = cfg.prop;
+            setDefaultValue(prop.get());
+            mProps.push_back(std::move(prop));
+        } while (supportedAreas != 0);
+    }
+
+    // Start rx thread
+    mThread = std::thread(&DefaultVehicleHal::rxThread, this);
+}
+
+StatusCode DefaultVehicleHal::fillObd2LiveFrame(VehiclePropValue* v) {
+    v->prop = toInt(VehicleProperty::OBD2_LIVE_FRAME);
+    v->value.int32Values = mLiveObd2Frame->value.int32Values;
+    v->value.floatValues = mLiveObd2Frame->value.floatValues;
+    v->value.bytes = mLiveObd2Frame->value.bytes;
+    return StatusCode::OK;
+}
+
+template<typename Iterable>
+typename Iterable::const_iterator findPropValueAtTimestamp(
+        const Iterable& frames,
+        int64_t timestamp) {
+    return std::find_if(frames.begin(),
+            frames.end(),
+            [timestamp] (const std::unique_ptr<VehiclePropValue>&
+                         propValue) -> bool {
+                             return propValue->timestamp == timestamp;
+            });
+}
+
+StatusCode DefaultVehicleHal::fillObd2FreezeFrame(
+        const VehiclePropValue& requestedPropValue, VehiclePropValue* v) {
+    if (requestedPropValue.value.int64Values.size() != 1) {
+        ALOGE("asked for OBD2_FREEZE_FRAME without valid timestamp");
+        return StatusCode::INVALID_ARG;
+    }
+    auto timestamp = requestedPropValue.value.int64Values[0];
+    auto freezeFrameIter = findPropValueAtTimestamp(mFreezeObd2Frames,
+            timestamp);
+    if(mFreezeObd2Frames.end() == freezeFrameIter) {
+        ALOGE("asked for OBD2_FREEZE_FRAME at invalid timestamp");
+        return StatusCode::INVALID_ARG;
+    }
+    const std::unique_ptr<VehiclePropValue>& freezeFrame = *freezeFrameIter;
+    v->prop = toInt(VehicleProperty::OBD2_FREEZE_FRAME);
+    v->value.int32Values = freezeFrame->value.int32Values;
+    v->value.floatValues = freezeFrame->value.floatValues;
+    v->value.bytes = freezeFrame->value.bytes;
+    v->value.stringValue = freezeFrame->value.stringValue;
+    v->timestamp = freezeFrame->timestamp;
+    return StatusCode::OK;
+}
+
+StatusCode DefaultVehicleHal::clearObd2FreezeFrames(
+    const VehiclePropValue& propValue) {
+    if (propValue.value.int64Values.size() == 0) {
+        mFreezeObd2Frames.clear();
+        return StatusCode::OK;
+    } else {
+        for(int64_t timestamp: propValue.value.int64Values) {
+            auto freezeFrameIter = findPropValueAtTimestamp(mFreezeObd2Frames,
+                    timestamp);
+            if(mFreezeObd2Frames.end() == freezeFrameIter) {
+                ALOGE("asked for OBD2_FREEZE_FRAME at invalid timestamp");
+                return StatusCode::INVALID_ARG;
+            }
+            mFreezeObd2Frames.erase(freezeFrameIter);
+        }
+    }
+    return StatusCode::OK;
+}
+
+StatusCode DefaultVehicleHal::fillObd2DtcInfo(VehiclePropValue* v) {
+    std::vector<int64_t> timestamps;
+    for(const auto& freezeFrame: mFreezeObd2Frames) {
+        timestamps.push_back(freezeFrame->timestamp);
+    }
+    v->value.int64Values = timestamps;
+    return StatusCode::OK;
+}
+
+
+
+}  // impl
+
+}  // namespace V2_0
+}  // namespace vehicle
+}  // namespace automotive
+}  // namespace hardware
+}  // namespace android
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.h b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.h
new file mode 100644
index 0000000..51f7ba3
--- /dev/null
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.h
@@ -0,0 +1,128 @@
+/*
+ * 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 android_hardware_automotive_vehicle_V2_0_impl_DefaultVehicleHal_H_
+#define android_hardware_automotive_vehicle_V2_0_impl_DefaultVehicleHal_H_
+
+#include <memory>
+#include <sys/socket.h>
+#include <thread>
+
+#include <utils/SystemClock.h>
+
+#include <vhal_v2_0/VehicleHal.h>
+#include <vhal_v2_0/Obd2SensorStore.h>
+
+#include "DefaultConfig.h"
+#include "VehicleHalProto.pb.h"
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+namespace impl {
+
+class DefaultVehicleHal : public VehicleHal {
+public:
+    DefaultVehicleHal() : mThread() {}
+    ~DefaultVehicleHal() override {
+        // Notify thread to finish and wait for it to terminate
+        mExit = 1;
+
+        // Close emulator socket if it is open
+        {
+            std::lock_guard<std::mutex> lock(mTxMutex);
+            if (mCurSocket != -1) {
+                close(mCurSocket);
+                mCurSocket = -1;
+            }
+        }
+
+        mThread.join();
+    }
+
+    std::vector<VehiclePropConfig> listProperties() override {
+        return std::vector<VehiclePropConfig>(std::begin(kVehicleProperties),
+                                              std::end(kVehicleProperties));
+    }
+
+    VehiclePropValuePtr get(const VehiclePropValue& requestedPropValue,
+                            StatusCode* outStatus) override;
+
+    void onCreate() override;
+
+    StatusCode set(const VehiclePropValue& propValue) override;
+
+    StatusCode subscribe(int32_t property, int32_t areas, float sampleRate) {
+        ALOGD("%s: not implemented: prop=0x%x, areas=0x%x, rate=%f", __FUNCTION__, property,
+              areas, sampleRate);
+        return StatusCode::OK;
+    }
+
+    StatusCode unsubscribe(int32_t property) {
+        ALOGD("%s: not implemented: prop=0x%x", __FUNCTION__, property);
+        return StatusCode::OK;
+    }
+
+private:
+    void doGetConfig(emulator::EmulatorMessage& rxMsg, emulator::EmulatorMessage& respMsg);
+    void doGetConfigAll(emulator::EmulatorMessage& rxMsg, emulator::EmulatorMessage& respMsg);
+    void doGetProperty(emulator::EmulatorMessage& rxMsg, emulator::EmulatorMessage& respMsg);
+    void doGetPropertyAll(emulator::EmulatorMessage& rxMsg, emulator::EmulatorMessage& respMsg);
+    void doSetProperty(emulator::EmulatorMessage& rxMsg, emulator::EmulatorMessage& respMsg);
+    VehiclePropValue* getVehiclePropValueLocked(int32_t propId, int32_t areaId);
+    void initObd2LiveFrame(VehiclePropConfig& propConfig);
+    void initObd2FreezeFrame(VehiclePropConfig& propConfig);
+    void parseRxProtoBuf(std::vector<uint8_t>& msg);
+    void populateProtoVehicleConfig(emulator::VehiclePropConfig* protoCfg,
+                                    const VehiclePropConfig& cfg);
+    void populateProtoVehiclePropValue(emulator::VehiclePropValue* protoVal,
+                                       const VehiclePropValue* val);
+    void setDefaultValue(VehiclePropValue* prop);
+    void rxMsg(void);
+    void rxThread(void);
+    void txMsg(emulator::EmulatorMessage& txMsg);
+    StatusCode updateProperty(const VehiclePropValue& propValue);
+    StatusCode fillObd2LiveFrame(VehiclePropValue* v);
+    StatusCode fillObd2FreezeFrame(const VehiclePropValue& requestedPropValue,
+            VehiclePropValue* v);
+    StatusCode fillObd2DtcInfo(VehiclePropValue *v);
+    StatusCode clearObd2FreezeFrames(const VehiclePropValue& propValue);
+private:
+    // TODO:  Use a hashtable to support indexing props
+    std::vector<std::unique_ptr<VehiclePropValue>> mProps;
+    std::atomic<int> mCurSocket;
+    std::atomic<int> mExit;
+    std::unique_ptr<VehiclePropValue> mLiveObd2Frame {nullptr};
+    std::vector<std::unique_ptr<VehiclePropValue>> mFreezeObd2Frames;
+    std::mutex mPropsMutex;
+    int mSocket;
+    std::mutex mTxMutex;
+    std::thread mThread;
+};
+
+}  // impl
+
+}  // namespace V2_0
+}  // namespace vehicle
+}  // namespace automotive
+}  // namespace hardware
+}  // namespace android
+
+
+#endif  // android_hardware_automotive_vehicle_V2_0_impl_DefaultVehicleHal_H_
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/proto/VehicleHalProto.proto b/automotive/vehicle/2.0/default/impl/vhal_v2_0/proto/VehicleHalProto.proto
new file mode 100644
index 0000000..86433f5
--- /dev/null
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/proto/VehicleHalProto.proto
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2015 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.
+ */
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+
+package emulator;
+
+// CMD messages are from workstation --> VHAL
+// RESP messages are from VHAL --> workstation
+enum MsgType {
+    GET_CONFIG_CMD                      = 0;
+    GET_CONFIG_RESP                     = 1;
+    GET_CONFIG_ALL_CMD                  = 2;
+    GET_CONFIG_ALL_RESP                 = 3;
+    GET_PROPERTY_CMD                    = 4;
+    GET_PROPERTY_RESP                   = 5;
+    GET_PROPERTY_ALL_CMD                = 6;
+    GET_PROPERTY_ALL_RESP               = 7;
+    SET_PROPERTY_CMD                    = 8;
+    SET_PROPERTY_RESP                   = 9;
+    SET_PROPERTY_ASYNC                  = 10;
+}
+enum Status {
+    RESULT_OK                           = 0;
+    ERROR_UNKNOWN                       = 1;
+    ERROR_UNIMPLEMENTED_CMD             = 2;
+    ERROR_INVALID_PROPERTY              = 3;
+    ERROR_INVALID_AREA_ID               = 4;
+    ERROR_PROPERTY_UNINITIALIZED        = 5;
+    ERROR_WRITE_ONLY_PROPERTY           = 6;
+    ERROR_MEMORY_ALLOC_FAILED           = 7;
+    ERROR_INVALID_OPERATION             = 8;
+}
+
+message VehicleAreaConfig {
+    required int32  area_id             = 1;
+    optional sint32 min_int32_value     = 2;
+    optional sint32 max_int32_value     = 3;
+    optional sint64 min_int64_value     = 4;
+    optional sint64 max_int64_value     = 5;
+    optional float  min_float_value     = 6;
+    optional float  max_float_value     = 7;
+}
+
+message VehiclePropConfig {
+    required int32             prop                = 1;
+    optional int32             access              = 2;
+    optional int32             change_mode         = 3;
+    optional int32             value_type          = 4;
+    optional int32             supported_areas     = 5;
+    repeated VehicleAreaConfig area_configs        = 6;
+    optional int32             config_flags        = 7;
+    repeated int32             config_array        = 8;
+    optional string            config_string       = 9;
+    optional float             min_sample_rate     = 10;
+    optional float             max_sample_rate     = 11;
+};
+
+message VehiclePropValue {
+    // common data
+    required int32  prop                = 1;
+    optional int32  value_type          = 2;
+    optional int64  timestamp           = 3;    // required for valid data from HAL, skipped for set
+
+    // values
+    optional int32  area_id             = 4;
+    repeated sint32 int32_values        = 5;    // this also covers boolean value.
+    repeated sint64 int64_values        = 6;
+    repeated float  float_values        = 7;
+    optional string string_value        = 8;
+    optional bytes  bytes_value         = 9;
+};
+
+// This structure is used to notify what values to get from the Vehicle HAL
+message VehiclePropGet {
+    required int32 prop                 = 1;
+    optional int32 area_id              = 2;
+};
+
+message EmulatorMessage {
+    required MsgType           msg_type = 1;
+    optional Status            status   = 2;    // Only for RESP messages
+    repeated VehiclePropGet    prop     = 3;    // Provided for getConfig, getProperty commands
+    repeated VehiclePropConfig config   = 4;
+    repeated VehiclePropValue  value    = 5;
+};
diff --git a/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp b/automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
similarity index 75%
rename from vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
rename to automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
index 92d7e39..d9611c0 100644
--- a/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
@@ -19,10 +19,12 @@
 #include <fstream>
 #include <unordered_set>
 
-#include "vehicle_hal_manager/AccessControlConfigParser.h"
+#include "vhal_v2_0/AccessControlConfigParser.h"
+#include "vhal_v2_0/VehicleUtils.h"
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -31,9 +33,9 @@
 class AccessControlConfigParserTest : public ::testing::Test {
 protected:
     void SetUp() override {
-        std::vector<VehicleProperty> supportedProperties {
-            VehicleProperty::HVAC_FAN_SPEED,
-            VehicleProperty::HVAC_FAN_DIRECTION,
+        std::vector<int32_t> supportedProperties {
+            toInt(VehicleProperty::HVAC_FAN_SPEED),
+            toInt(VehicleProperty::HVAC_FAN_DIRECTION),
         };
         parser.reset(new AccessControlConfigParser(supportedProperties));
     }
@@ -48,11 +50,11 @@
 
     ASSERT_TRUE(parser->parseFromStream(&file, &aclMap));
 
-    ASSERT_EQ(1, aclMap.size());
-    auto it = aclMap.find(VehicleProperty::HVAC_FAN_SPEED);
+    ASSERT_EQ(1u, aclMap.size());
+    auto it = aclMap.find(toInt(VehicleProperty::HVAC_FAN_SPEED));
     ASSERT_NE(aclMap.end(), it);
     ASSERT_EQ(VehiclePropertyAccess::READ_WRITE, it->second.access);
-    ASSERT_EQ(VehicleProperty::HVAC_FAN_SPEED, it->second.propId);
+    ASSERT_EQ(toInt(VehicleProperty::HVAC_FAN_SPEED), it->second.propId);
     ASSERT_EQ(1000u, it->second.uid);
 }
 
@@ -68,11 +70,11 @@
 
     ASSERT_TRUE(parser->parseFromStream(&file, &aclMap));
 
-    auto range = aclMap.equal_range(VehicleProperty::HVAC_FAN_SPEED);
+    auto range = aclMap.equal_range(toInt(VehicleProperty::HVAC_FAN_SPEED));
     for (auto it = range.first; it != range.second; ++it) {
         auto& acl = it->second;
 
-        ASSERT_EQ(1, expectedUids.count(acl.uid))
+        ASSERT_EQ(1u, expectedUids.count(acl.uid))
                 << " uid: " << std::hex << acl.uid;
 
         if (acl.uid == 0xbeef) {
@@ -91,12 +93,12 @@
 
     ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
 
-    ASSERT_EQ(1, aclMap.size());
-    auto it = aclMap.find(VehicleProperty::HVAC_FAN_SPEED);
+    ASSERT_EQ(1u, aclMap.size());
+    auto it = aclMap.find(toInt(VehicleProperty::HVAC_FAN_SPEED));
     ASSERT_NE(aclMap.end(), it);
     ASSERT_EQ(VehiclePropertyAccess::READ, it->second.access);
-    ASSERT_EQ(VehicleProperty::HVAC_FAN_SPEED, it->second.propId);
-    ASSERT_EQ(0xbeef, it->second.uid);
+    ASSERT_EQ(toInt(VehicleProperty::HVAC_FAN_SPEED), it->second.propId);
+    ASSERT_EQ(0xBEEFu, it->second.uid);
 }
 
 TEST_F(AccessControlConfigParserTest, badIntegerFormat) {
@@ -104,7 +106,7 @@
     file << "S:0x0500 A12 RW " << std::endl;
 
     ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
-    ASSERT_EQ(0, aclMap.size());
+    ASSERT_EQ(0u, aclMap.size());
 }
 
 TEST_F(AccessControlConfigParserTest, ignoreNotSupportedProperties) {
@@ -112,7 +114,7 @@
     file << "S:0x0666 1000 RW " << std::endl;
 
     ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
-    ASSERT_EQ(0, aclMap.size());
+    ASSERT_EQ(0u, aclMap.size());
 }
 
 TEST_F(AccessControlConfigParserTest, multipleCalls) {
@@ -120,23 +122,23 @@
     configFile << "S:0x0500 1000 RW" << std::endl;
 
     ASSERT_TRUE(parser->parseFromStream(&configFile, &aclMap));
-    ASSERT_EQ(1, aclMap.size());
+    ASSERT_EQ(1u, aclMap.size());
 
     std::stringstream configFile2;
     configFile2 << "S:0x0501 1004 RW" << std::endl;
     ASSERT_TRUE(parser->parseFromStream(&configFile2, &aclMap));
-    ASSERT_EQ(2, aclMap.size());
+    ASSERT_EQ(2u, aclMap.size());
 
-    auto it = aclMap.find(VehicleProperty::HVAC_FAN_SPEED);
+    auto it = aclMap.find(toInt(VehicleProperty::HVAC_FAN_SPEED));
     ASSERT_NE(aclMap.end(), it);
     ASSERT_EQ(VehiclePropertyAccess::READ_WRITE, it->second.access);
-    ASSERT_EQ(VehicleProperty::HVAC_FAN_SPEED, it->second.propId);
+    ASSERT_EQ(toInt(VehicleProperty::HVAC_FAN_SPEED), it->second.propId);
     ASSERT_EQ(1000u, it->second.uid);
 
-    it = aclMap.find(VehicleProperty::HVAC_FAN_DIRECTION);
+    it = aclMap.find(toInt(VehicleProperty::HVAC_FAN_DIRECTION));
     ASSERT_NE(aclMap.end(), it);
     ASSERT_EQ(VehiclePropertyAccess::READ_WRITE, it->second.access);
-    ASSERT_EQ(VehicleProperty::HVAC_FAN_DIRECTION, it->second.propId);
+    ASSERT_EQ(toInt(VehicleProperty::HVAC_FAN_DIRECTION), it->second.propId);
     ASSERT_EQ(1004u, it->second.uid);
 }
 
@@ -145,5 +147,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
diff --git a/automotive/vehicle/2.0/default/tests/Obd2SensorStore_test.cpp b/automotive/vehicle/2.0/default/tests/Obd2SensorStore_test.cpp
new file mode 100644
index 0000000..a01c0f4
--- /dev/null
+++ b/automotive/vehicle/2.0/default/tests/Obd2SensorStore_test.cpp
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ #include <gtest/gtest.h>
+
+#include "vhal_v2_0/Obd2SensorStore.h"
+#include "vhal_v2_0/VehicleUtils.h"
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+namespace {
+
+static constexpr size_t getNumVendorIntegerSensors() {
+    return 5;
+}
+static constexpr size_t getNumVendorFloatSensors() {
+    return 3;
+}
+
+// this struct holds information necessary for a test to be able to validate
+// that the sensor bitmask contains the right data:
+//   - the index of the byte at which the bit for a given sensor lives
+//   - the expected value of that byte given that a certain sensor is present
+class BitmaskIndexingInfo {
+public:
+    size_t mByteIndex;
+    uint8_t mExpectedByteValue;
+
+    // Returns the information required to validate the bitmask for an
+    // integer-valued sensor.
+    static BitmaskIndexingInfo getForIntegerSensor(size_t index) {
+        const size_t indexInBitstream = index;
+        return getForBitstreamIndex(indexInBitstream);
+    }
+
+    // Returns the information required to validate the bitmask for a
+    // float-valued sensor.
+    static BitmaskIndexingInfo getForFloatSensor(size_t index) {
+        const size_t indexInBitstream = toInt(Obd2IntegerSensorIndex::LAST_SYSTEM_INDEX) +
+                                        1 + getNumVendorIntegerSensors() + index;
+        return getForBitstreamIndex(indexInBitstream);
+    }
+
+private:
+    static BitmaskIndexingInfo getForBitstreamIndex(size_t indexInBitstream) {
+        BitmaskIndexingInfo indexingInfo;
+        indexingInfo.mByteIndex = indexInBitstream / 8;
+        indexingInfo.mExpectedByteValue = 1 << (indexInBitstream % 8);
+        return indexingInfo;
+    }
+};
+
+static Obd2SensorStore getSensorStore() {
+    return Obd2SensorStore(getNumVendorIntegerSensors(),
+                           getNumVendorFloatSensors());
+}
+
+// Test that one can set and retrieve a value for the first integer sensor.
+TEST(Obd2SensorStoreTest, setFirstIntegerSensor) {
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setIntegerSensor(
+        Obd2IntegerSensorIndex::FUEL_SYSTEM_STATUS,
+        toInt(FuelSystemStatus::CLOSED_LOOP));
+    const auto& integerSensors(sensorStore.getIntegerSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(
+        toInt(FuelSystemStatus::CLOSED_LOOP),
+        integerSensors[toInt(Obd2IntegerSensorIndex::FUEL_SYSTEM_STATUS)]);
+    const BitmaskIndexingInfo indexingInfo(BitmaskIndexingInfo::getForIntegerSensor(
+        toInt(Obd2IntegerSensorIndex::FUEL_SYSTEM_STATUS)));
+    ASSERT_EQ(
+        indexingInfo.mExpectedByteValue,
+        sensorBitmask[indexingInfo.mByteIndex]);
+}
+
+// Test that one can set and retrieve a value for the first float sensor.
+TEST(Obd2SensorStoreTest, setFirstFloatSensor) {
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setFloatSensor(
+        Obd2FloatSensorIndex::CALCULATED_ENGINE_LOAD,
+        1.25f);
+    const auto& floatSensors(sensorStore.getFloatSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(
+        1.25f,
+        floatSensors[toInt(Obd2FloatSensorIndex::CALCULATED_ENGINE_LOAD)]);
+    const BitmaskIndexingInfo indexingInfo(BitmaskIndexingInfo::getForFloatSensor(
+        toInt(Obd2FloatSensorIndex::CALCULATED_ENGINE_LOAD)));
+    ASSERT_EQ(
+        indexingInfo.mExpectedByteValue,
+        sensorBitmask[indexingInfo.mByteIndex]);
+}
+
+// Test that one can set and retrieve a value for an integer sensor.
+TEST(Obd2SensorStoreTest, setAnyIntegerSensor) {
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setIntegerSensor(
+        Obd2IntegerSensorIndex::ABSOLUTE_BAROMETRIC_PRESSURE,
+        4000);
+    const auto& integerSensors(sensorStore.getIntegerSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(4000,
+        integerSensors[toInt(Obd2IntegerSensorIndex::ABSOLUTE_BAROMETRIC_PRESSURE)]);
+    const BitmaskIndexingInfo indexingInfo(BitmaskIndexingInfo::getForIntegerSensor(
+        toInt(Obd2IntegerSensorIndex::ABSOLUTE_BAROMETRIC_PRESSURE)));
+    ASSERT_EQ(
+        indexingInfo.mExpectedByteValue,
+        sensorBitmask[indexingInfo.mByteIndex]);
+}
+
+// Test that one can set and retrieve a value for a float sensor.
+TEST(Obd2SensorStoreTest, setAnyFloatSensor) {
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setFloatSensor(
+        Obd2FloatSensorIndex::OXYGEN_SENSOR3_VOLTAGE,
+        2.5f);
+    const auto& floatSensors(sensorStore.getFloatSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(2.5f,
+        floatSensors[toInt(Obd2FloatSensorIndex::OXYGEN_SENSOR3_VOLTAGE)]);
+    const BitmaskIndexingInfo indexingInfo(BitmaskIndexingInfo::getForFloatSensor(
+        toInt(Obd2FloatSensorIndex::OXYGEN_SENSOR3_VOLTAGE)));
+    ASSERT_EQ(
+        indexingInfo.mExpectedByteValue,
+        sensorBitmask[indexingInfo.mByteIndex]);
+}
+
+// Test that one can set and retrieve a value for the last system integer sensor.
+TEST(Obd2SensorStoreTest, setLastSystemIntegerSensor) {
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setIntegerSensor(
+        Obd2IntegerSensorIndex::LAST_SYSTEM_INDEX,
+        30);
+    const auto& integerSensors(sensorStore.getIntegerSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(30,
+        integerSensors[toInt(Obd2IntegerSensorIndex::LAST_SYSTEM_INDEX)]);
+    const BitmaskIndexingInfo indexingInfo(BitmaskIndexingInfo::getForIntegerSensor(
+        toInt(Obd2IntegerSensorIndex::LAST_SYSTEM_INDEX)));
+    ASSERT_EQ(
+        indexingInfo.mExpectedByteValue,
+        sensorBitmask[indexingInfo.mByteIndex]);
+}
+
+// Test that one can set and retrieve a value for the last system float sensor.
+TEST(Obd2SensorStoreTest, setLastSystemFloatSensor) {
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setFloatSensor(
+        Obd2FloatSensorIndex::LAST_SYSTEM_INDEX,
+        2.5f);
+    const auto& floatSensors(sensorStore.getFloatSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(2.5f,
+        floatSensors[toInt(Obd2FloatSensorIndex::LAST_SYSTEM_INDEX)]);
+    const BitmaskIndexingInfo indexingInfo(BitmaskIndexingInfo::getForFloatSensor(
+        toInt(Obd2FloatSensorIndex::LAST_SYSTEM_INDEX)));
+    ASSERT_EQ(
+        indexingInfo.mExpectedByteValue,
+        sensorBitmask[indexingInfo.mByteIndex]);
+}
+
+// Test that one can set and retrieve a value for two integer sensors at once.
+TEST(Obd2SensorStoreTest, setTwoIntegerSensors) {
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setIntegerSensor(
+        Obd2IntegerSensorIndex::CONTROL_MODULE_VOLTAGE,
+        6);
+    sensorStore.setIntegerSensor(
+        Obd2IntegerSensorIndex::TIME_SINCE_TROUBLE_CODES_CLEARED,
+        1245);
+    const auto& integerSensors(sensorStore.getIntegerSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(6,
+        integerSensors[toInt(Obd2IntegerSensorIndex::CONTROL_MODULE_VOLTAGE)]);
+    ASSERT_EQ(1245,
+        integerSensors[toInt(Obd2IntegerSensorIndex::TIME_SINCE_TROUBLE_CODES_CLEARED)]);
+    const BitmaskIndexingInfo voltageIndexingInfo(BitmaskIndexingInfo::getForIntegerSensor(
+        toInt(Obd2IntegerSensorIndex::CONTROL_MODULE_VOLTAGE)));
+    const BitmaskIndexingInfo timeIndexingInfo(BitmaskIndexingInfo::getForIntegerSensor(
+        toInt(Obd2IntegerSensorIndex::TIME_SINCE_TROUBLE_CODES_CLEARED)));
+    if (voltageIndexingInfo.mByteIndex == timeIndexingInfo.mByteIndex) {
+        ASSERT_EQ(
+            voltageIndexingInfo.mExpectedByteValue |
+            timeIndexingInfo.mExpectedByteValue,
+            sensorBitmask[timeIndexingInfo.mByteIndex]);
+    }
+    else {
+        ASSERT_EQ(
+            timeIndexingInfo.mExpectedByteValue,
+            sensorBitmask[timeIndexingInfo.mByteIndex]);
+        ASSERT_EQ(
+            voltageIndexingInfo.mExpectedByteValue,
+            sensorBitmask[voltageIndexingInfo.mByteIndex]);
+    }
+}
+
+// Test that one can set and retrieve a value for two float sensors at once.
+TEST(Obd2SensorStoreTest, setTwoFloatSensors) {
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setFloatSensor(
+        Obd2FloatSensorIndex::VEHICLE_SPEED,
+        1.25f);
+    sensorStore.setFloatSensor(
+        Obd2FloatSensorIndex::MAF_AIR_FLOW_RATE,
+        2.5f);
+    const auto& floatSensors(sensorStore.getFloatSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(1.25f,
+        floatSensors[toInt(Obd2FloatSensorIndex::VEHICLE_SPEED)]);
+    ASSERT_EQ(2.5f,
+        floatSensors[toInt(Obd2FloatSensorIndex::MAF_AIR_FLOW_RATE)]);
+    const BitmaskIndexingInfo speedIndexingInfo(BitmaskIndexingInfo::getForFloatSensor(
+        toInt(Obd2FloatSensorIndex::VEHICLE_SPEED)));
+    const BitmaskIndexingInfo airflowIndexingInfo(BitmaskIndexingInfo::getForFloatSensor(
+        toInt(Obd2FloatSensorIndex::MAF_AIR_FLOW_RATE)));
+    if (speedIndexingInfo.mByteIndex == airflowIndexingInfo.mByteIndex) {
+        ASSERT_EQ(
+            speedIndexingInfo.mExpectedByteValue |
+            airflowIndexingInfo.mExpectedByteValue,
+            sensorBitmask[airflowIndexingInfo.mByteIndex]);
+    }
+    else {
+        ASSERT_EQ(
+            speedIndexingInfo.mExpectedByteValue,
+            sensorBitmask[speedIndexingInfo.mByteIndex]);
+        ASSERT_EQ(
+            airflowIndexingInfo.mExpectedByteValue,
+            sensorBitmask[airflowIndexingInfo.mByteIndex]);
+    }
+}
+
+// Test that one can set and retrieve a value for a vendor integer sensor.
+TEST(Obd2SensorStoreTest, setVendorIntegerSensor) {
+    const size_t sensorIndex = toInt(Obd2IntegerSensorIndex::LAST_SYSTEM_INDEX) + 2;
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setIntegerSensor(sensorIndex, 22);
+    const auto& integerSensors(sensorStore.getIntegerSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(22, integerSensors[sensorIndex]);
+    const BitmaskIndexingInfo indexingInfo(BitmaskIndexingInfo::getForIntegerSensor(
+        sensorIndex));
+    ASSERT_EQ(
+        indexingInfo.mExpectedByteValue,
+        sensorBitmask[indexingInfo.mByteIndex]);
+}
+
+// Test that one can set and retrieve a value for a vendor float sensor.
+TEST(Obd2SensorStoreTest, setVendorFloatSensor) {
+    const size_t sensorIndex = toInt(Obd2FloatSensorIndex::LAST_SYSTEM_INDEX) + 2;
+    Obd2SensorStore sensorStore(getSensorStore());
+    sensorStore.setFloatSensor(sensorIndex, 1.25f);
+    const auto& floatSensors(sensorStore.getFloatSensors());
+    const auto& sensorBitmask(sensorStore.getSensorsBitmask());
+    ASSERT_EQ(1.25f, floatSensors[sensorIndex]);
+    const BitmaskIndexingInfo indexingInfo(BitmaskIndexingInfo::getForFloatSensor(
+        sensorIndex));
+    ASSERT_EQ(
+        indexingInfo.mExpectedByteValue,
+        sensorBitmask[indexingInfo.mByteIndex]);
+}
+
+}  // namespace anonymous
+
+}  // namespace V2_0
+}  // namespace vehicle
+}  // namespace automotive
+}  // namespace hardware
+}  // namespace android
diff --git a/vehicle/2.0/default/tests/SubscriptionManager_test.cpp b/automotive/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
similarity index 94%
rename from vehicle/2.0/default/tests/SubscriptionManager_test.cpp
rename to automotive/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
index 863142e..e13d003 100644
--- a/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
@@ -19,12 +19,13 @@
 
 #include <gtest/gtest.h>
 
-#include "vehicle_hal_manager/SubscriptionManager.h"
+#include "vhal_v2_0/SubscriptionManager.h"
 
 #include "VehicleHalTestUtils.h"
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -36,8 +37,8 @@
 public:
     SubscriptionManager manager;
 
-    const VehicleProperty PROP1 = VehicleProperty::HVAC_FAN_SPEED;
-    const VehicleProperty PROP2 = VehicleProperty::DISPLAY_BRIGHTNESS;
+    static constexpr int32_t PROP1 = toInt(VehicleProperty::HVAC_FAN_SPEED);
+    static constexpr int32_t PROP2 = toInt(VehicleProperty::DISPLAY_BRIGHTNESS);
 
     sp<IVehicleCallback> cb1 = new MockedVehicleCallback();
     sp<IVehicleCallback> cb2 = new MockedVehicleCallback();
@@ -116,7 +117,7 @@
 
     // Wrong prop
     clients = manager.getSubscribedClients(
-            VehicleProperty::AP_POWER_BOOTUP_REASON,
+            toInt(VehicleProperty::AP_POWER_BOOTUP_REASON),
             toInt(VehicleAreaZone::ROW_1_LEFT),
             SubscribeFlags::HAL_EVENT);
     ASSERT_TRUE(clients.empty());
@@ -192,5 +193,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
diff --git a/vehicle/2.0/default/tests/VehicleHalManager_test.cpp b/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
similarity index 85%
rename from vehicle/2.0/default/tests/VehicleHalManager_test.cpp
rename to automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
index 4a20ea5..f637344 100644
--- a/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
@@ -21,12 +21,13 @@
 
 #include <gtest/gtest.h>
 
-#include "vehicle_hal_manager/VehicleHalManager.h"
+#include "vhal_v2_0/VehicleHalManager.h"
 
 #include "VehicleHalTestUtils.h"
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -52,7 +53,7 @@
              StatusCode* outStatus) override {
         *outStatus = StatusCode::OK;
         VehiclePropValuePtr pValue;
-        VehicleProperty property = requestedPropValue.prop;
+        auto property = static_cast<VehicleProperty>(requestedPropValue.prop);
         int32_t areaId = requestedPropValue.areaId;
 
         switch (property) {
@@ -67,7 +68,7 @@
                     pValue = getValuePool()->obtainFloat(42.42);
                 }
                 break;
-            case VehicleProperty::VEHICLE_MAPS_DATA_SERVICE:
+            case VehicleProperty::VEHICLE_MAP_SERVICE:
                 pValue = getValuePool()->obtainComplex();
                 pValue->value.int32Values = hidl_vec<int32_t> { 10, 20 };
                 pValue->value.int64Values = hidl_vec<int64_t> { 30, 40 };
@@ -76,7 +77,7 @@
                 pValue->value.stringValue = kCarMake;
                 break;
             default:
-                auto key = makeKey(property, areaId);
+                auto key = makeKey(toInt(property), areaId);
                 if (mValues.count(key) == 0) {
                     ALOGW("");
                 }
@@ -84,7 +85,7 @@
         }
 
         if (*outStatus == StatusCode::OK && pValue.get() != nullptr) {
-            pValue->prop = property;
+            pValue->prop = toInt(property);
             pValue->areaId = areaId;
             pValue->timestamp = elapsedRealtimeNano();
         }
@@ -93,7 +94,7 @@
     }
 
     StatusCode set(const VehiclePropValue& propValue) override {
-        if (VehicleProperty::MIRROR_FOLD == propValue.prop
+        if (toInt(VehicleProperty::MIRROR_FOLD) == propValue.prop
                 && mirrorFoldAttemptsLeft-- > 0) {
             return StatusCode::TRY_AGAIN;
         }
@@ -102,13 +103,13 @@
         return StatusCode::OK;
     }
 
-    StatusCode subscribe(VehicleProperty property,
-                       int32_t areas,
-                       float sampleRate) override {
+    StatusCode subscribe(int32_t /* property */,
+                         int32_t /* areas */,
+                         float /* sampleRate */) override {
         return StatusCode::OK;
     }
 
-    StatusCode unsubscribe(VehicleProperty property) override {
+    StatusCode unsubscribe(int32_t /* property */) override {
         return StatusCode::OK;
     }
 
@@ -116,8 +117,7 @@
         doHalEvent(std::move(value));
     }
 
-    void sendHalError(StatusCode error, VehicleProperty property,
-                      int32_t areaId) {
+    void sendHalError(StatusCode error, int32_t property, int32_t areaId) {
         doHalPropertySetError(error, property, areaId);
     }
 
@@ -130,7 +130,7 @@
         return makeKey(v.prop, v.areaId);
     }
 
-    int64_t makeKey(VehicleProperty prop, int32_t area) const {
+    int64_t makeKey(int32_t prop, int32_t area) const {
         return (static_cast<int64_t>(prop) << 32) | area;
     }
 
@@ -153,7 +153,7 @@
         hal.reset(nullptr);
     }
 public:
-    void invokeGet(VehicleProperty property, int32_t areaId) {
+    void invokeGet(int32_t property, int32_t areaId) {
         VehiclePropValue requestedValue {};
         requestedValue.prop = property;
         requestedValue.areaId = areaId;
@@ -174,7 +174,7 @@
             called = true;
         });
         ASSERT_TRUE(called) << "callback wasn't called for prop: "
-                            << enumToHexString(requestedPropValue.prop);
+                            << hexString(requestedPropValue.prop);
 
         actualValue = refValue;
         actualStatusCode = refStatus;
@@ -190,8 +190,9 @@
 };
 
 TEST_F(VehicleHalManagerTest, getPropConfigs) {
-    hidl_vec<VehicleProperty> properties =
-        { VehicleProperty::HVAC_FAN_SPEED, VehicleProperty::INFO_MAKE };
+    hidl_vec<int32_t> properties =
+        { toInt(VehicleProperty::HVAC_FAN_SPEED),
+          toInt(VehicleProperty::INFO_MAKE) };
     bool called = false;
 
     manager->getPropConfigs(properties,
@@ -205,7 +206,7 @@
     ASSERT_TRUE(called);  // Verify callback received.
 
     called = false;
-    manager->getPropConfigs({ VehicleProperty::HVAC_FAN_SPEED },
+    manager->getPropConfigs({ toInt(VehicleProperty::HVAC_FAN_SPEED) },
             [&called] (StatusCode status,
                        const hidl_vec<VehiclePropConfig>& c) {
         ASSERT_EQ(StatusCode::OK, status);
@@ -234,7 +235,7 @@
 }
 
 TEST_F(VehicleHalManagerTest, halErrorEvent) {
-    const VehicleProperty PROP = VehicleProperty::DISPLAY_BRIGHTNESS;
+    const auto PROP = toInt(VehicleProperty::DISPLAY_BRIGHTNESS);
 
     sp<MockedVehicleCallback> cb = new MockedVehicleCallback();
 
@@ -252,7 +253,7 @@
 }
 
 TEST_F(VehicleHalManagerTest, subscribe) {
-    const VehicleProperty PROP = VehicleProperty::DISPLAY_BRIGHTNESS;
+    const auto PROP = toInt(VehicleProperty::DISPLAY_BRIGHTNESS);
 
     sp<MockedVehicleCallback> cb = new MockedVehicleCallback();
 
@@ -267,7 +268,7 @@
     ASSERT_EQ(StatusCode::OK, res);
 
     auto unsubscribedValue = objectPool->obtain(VehiclePropertyType::INT32);
-    unsubscribedValue->prop = VehicleProperty::HVAC_FAN_SPEED;
+    unsubscribedValue->prop = toInt(VehicleProperty::HVAC_FAN_SPEED);
 
     hal->sendPropEvent(std::move(unsubscribedValue));
     auto& receivedEnvents = cb->getReceivedEvents();
@@ -293,7 +294,7 @@
 }
 
 TEST_F(VehicleHalManagerTest, subscribe_WriteOnly) {
-    const VehicleProperty PROP = VehicleProperty::HVAC_SEAT_TEMPERATURE;
+    const auto PROP = toInt(VehicleProperty::HVAC_SEAT_TEMPERATURE);
 
     sp<MockedVehicleCallback> cb = new MockedVehicleCallback();
 
@@ -317,25 +318,25 @@
 }
 
 TEST_F(VehicleHalManagerTest, get_Complex) {
-    invokeGet(VehicleProperty::VEHICLE_MAPS_DATA_SERVICE, 0);
+    invokeGet(toInt(VehicleProperty::VEHICLE_MAP_SERVICE), 0);
 
     ASSERT_EQ(StatusCode::OK, actualStatusCode);
-    ASSERT_EQ(VehicleProperty::VEHICLE_MAPS_DATA_SERVICE, actualValue.prop);
+    ASSERT_EQ(toInt(VehicleProperty::VEHICLE_MAP_SERVICE), actualValue.prop);
 
-    ASSERT_EQ(3, actualValue.value.bytes.size());
+    ASSERT_EQ(3u, actualValue.value.bytes.size());
     ASSERT_EQ(1, actualValue.value.bytes[0]);
     ASSERT_EQ(2, actualValue.value.bytes[1]);
     ASSERT_EQ(3, actualValue.value.bytes[2]);
 
-    ASSERT_EQ(2, actualValue.value.int32Values.size());
+    ASSERT_EQ(2u, actualValue.value.int32Values.size());
     ASSERT_EQ(10, actualValue.value.int32Values[0]);
     ASSERT_EQ(20, actualValue.value.int32Values[1]);
 
-    ASSERT_EQ(2, actualValue.value.floatValues.size());
+    ASSERT_EQ(2u, actualValue.value.floatValues.size());
     ASSERT_FLOAT_EQ(1.1, actualValue.value.floatValues[0]);
     ASSERT_FLOAT_EQ(2.2, actualValue.value.floatValues[1]);
 
-    ASSERT_EQ(2, actualValue.value.int64Values.size());
+    ASSERT_EQ(2u, actualValue.value.int64Values.size());
     ASSERT_FLOAT_EQ(30, actualValue.value.int64Values[0]);
     ASSERT_FLOAT_EQ(40, actualValue.value.int64Values[1]);
 
@@ -343,20 +344,20 @@
 }
 
 TEST_F(VehicleHalManagerTest, get_StaticString) {
-    invokeGet(VehicleProperty::INFO_MAKE, 0);
+    invokeGet(toInt(VehicleProperty::INFO_MAKE), 0);
 
     ASSERT_EQ(StatusCode::OK, actualStatusCode);
-    ASSERT_EQ(VehicleProperty::INFO_MAKE, actualValue.prop);
+    ASSERT_EQ(toInt(VehicleProperty::INFO_MAKE), actualValue.prop);
     ASSERT_STREQ(kCarMake, actualValue.value.stringValue.c_str());
 }
 
 TEST_F(VehicleHalManagerTest, get_NegativeCases) {
     // Write-only property must fail.
-    invokeGet(VehicleProperty::HVAC_SEAT_TEMPERATURE, 0);
+    invokeGet(toInt(VehicleProperty::HVAC_SEAT_TEMPERATURE), 0);
     ASSERT_EQ(StatusCode::ACCESS_DENIED, actualStatusCode);
 
     // Unknown property must fail.
-    invokeGet(VehicleProperty::MIRROR_Z_MOVE, 0);
+    invokeGet(toInt(VehicleProperty::MIRROR_Z_MOVE), 0);
     ASSERT_EQ(StatusCode::INVALID_ARG, actualStatusCode);
 }
 
@@ -364,7 +365,7 @@
     actualStatusCode = StatusCode::TRY_AGAIN;
     int attempts = 0;
     while (StatusCode::TRY_AGAIN == actualStatusCode && ++attempts < 10) {
-        invokeGet(VehicleProperty::INFO_FUEL_CAPACITY, 0);
+        invokeGet(toInt(VehicleProperty::INFO_FUEL_CAPACITY), 0);
 
     }
     ASSERT_EQ(StatusCode::OK, actualStatusCode);
@@ -373,7 +374,7 @@
 }
 
 TEST_F(VehicleHalManagerTest, set_Basic) {
-    const auto PROP = VehicleProperty::DISPLAY_BRIGHTNESS;
+    const auto PROP = toInt(VehicleProperty::DISPLAY_BRIGHTNESS);
     const auto VAL = 7;
 
     auto expectedValue = hal->getValuePool()->obtainInt32(VAL);
@@ -390,7 +391,7 @@
 }
 
 TEST_F(VehicleHalManagerTest, set_DifferentAreas) {
-    const auto PROP = VehicleProperty::HVAC_FAN_SPEED;
+    const auto PROP = toInt(VehicleProperty::HVAC_FAN_SPEED);
     const auto VAL1 = 1;
     const auto VAL2 = 2;
     const auto AREA1 = toInt(VehicleAreaZone::ROW_1_LEFT);
@@ -426,7 +427,7 @@
 }
 
 TEST_F(VehicleHalManagerTest, set_Retriable) {
-    const auto PROP = VehicleProperty::MIRROR_FOLD;
+    const auto PROP = toInt(VehicleProperty::MIRROR_FOLD);
 
     auto v = hal->getValuePool()->obtainBoolean(true);
     v->prop = PROP;
@@ -471,5 +472,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
diff --git a/vehicle/2.0/default/tests/VehicleHalTestUtils.h b/automotive/vehicle/2.0/default/tests/VehicleHalTestUtils.h
similarity index 86%
rename from vehicle/2.0/default/tests/VehicleHalTestUtils.h
rename to automotive/vehicle/2.0/default/tests/VehicleHalTestUtils.h
index b6a5c31..ce1ed7d 100644
--- a/vehicle/2.0/default/tests/VehicleHalTestUtils.h
+++ b/automotive/vehicle/2.0/default/tests/VehicleHalTestUtils.h
@@ -14,29 +14,31 @@
  * limitations under the License.
  */
 
-#ifndef android_hardware_vehicle_V2_0_VehicleDebugUtils_H_
-#define android_hardware_vehicle_V2_0_VehicleDebugUtils_H_
+#ifndef android_hardware_automotive_vehicle_V2_0_VehicleDebugUtils_H_
+#define android_hardware_automotive_vehicle_V2_0_VehicleDebugUtils_H_
 
-#include <android/hardware/vehicle/2.0/types.h>
-#include <vehicle_hal_manager/VehicleUtils.h>
+#include <android/hardware/automotive/vehicle/2.0/types.h>
 #include <ios>
 #include <sstream>
 
+#include "vhal_v2_0/VehicleUtils.h"
+
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
 const VehiclePropConfig kVehicleProperties[] = {
     {
-        .prop = VehicleProperty::INFO_MAKE,
+        .prop = toInt(VehicleProperty::INFO_MAKE),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::STATIC,
         .configString = "Some=config,options=if,you=have_any",
     },
 
     {
-        .prop = VehicleProperty::HVAC_FAN_SPEED,
+        .prop = toInt(VehicleProperty::HVAC_FAN_SPEED),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .supportedAreas = static_cast<int32_t>(
@@ -56,7 +58,7 @@
 
     // Write-only property
     {
-        .prop = VehicleProperty::HVAC_SEAT_TEMPERATURE,
+        .prop = toInt(VehicleProperty::HVAC_SEAT_TEMPERATURE),
         .access = VehiclePropertyAccess::WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_SET,
         .supportedAreas = static_cast<int32_t>(
@@ -75,7 +77,7 @@
     },
 
     {
-        .prop = VehicleProperty::INFO_FUEL_CAPACITY,
+        .prop = toInt(VehicleProperty::INFO_FUEL_CAPACITY),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .areaConfigs = {
@@ -87,7 +89,7 @@
     },
 
     {
-        .prop = VehicleProperty::DISPLAY_BRIGHTNESS,
+        .prop = toInt(VehicleProperty::DISPLAY_BRIGHTNESS),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .areaConfigs = {
@@ -99,7 +101,7 @@
     },
 
     {
-        .prop = VehicleProperty::MIRROR_FOLD,
+        .prop = toInt(VehicleProperty::MIRROR_FOLD),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
 
@@ -107,7 +109,7 @@
 
     // Complex data type.
     {
-        .prop = VehicleProperty::VEHICLE_MAPS_DATA_SERVICE,
+        .prop = toInt(VehicleProperty::VEHICLE_MAP_SERVICE),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE
     }
@@ -120,7 +122,7 @@
     using MuxGuard = std::lock_guard<std::mutex>;
     using HidlVecOfValues = hidl_vec<VehiclePropValue>;
 public:
-    // Methods from ::android::hardware::vehicle::V2_0::IVehicleCallback follow.
+    // Methods from ::android::hardware::automotive::vehicle::V2_0::IVehicleCallback follow.
     Return<void> onPropertyEvent(
             const hidl_vec<VehiclePropValue>& values) override {
         {
@@ -130,12 +132,12 @@
         mEventCond.notify_one();
         return Return<void>();
     }
-    Return<void> onPropertySet(const VehiclePropValue& value) override {
+    Return<void> onPropertySet(const VehiclePropValue& /* value */) override {
         return Return<void>();
     }
-    Return<void> onPropertySetError(StatusCode errorCode,
-                                    VehicleProperty propId,
-                                    int32_t areaId) override {
+    Return<void> onPropertySetError(StatusCode /* errorCode */,
+                                    int32_t /* propId */,
+                                    int32_t /* areaId */) override {
         return Return<void>();
     }
 
@@ -218,7 +220,7 @@
 inline std::string toString(const VehiclePropValue &v) {
     std::stringstream ss;
     ss << "VehiclePropValue {n"
-       << "  prop: " << enumToHexString(v.prop) << ",\n"
+       << "  prop: " << hexString(v.prop) << ",\n"
        << "  areaId: " << hexString(v.areaId) << ",\n"
        << "  timestamp: " << v.timestamp << ",\n"
        << "  value {\n"
@@ -236,7 +238,7 @@
 inline std::string toString(const VehiclePropConfig &config) {
     std::stringstream ss;
     ss << "VehiclePropConfig {\n"
-       << "  prop: " << enumToHexString(config.prop) << ",\n"
+       << "  prop: " << hexString(config.prop) << ",\n"
        << "  supportedAreas: " << hexString(config.supportedAreas) << ",\n"
        << "  access: " << enumToHexString(config.access) << ",\n"
        << "  changeMode: " << enumToHexString(config.changeMode) << ",\n"
@@ -265,8 +267,9 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
 
 
-#endif //VEHICLEHALDEBUGUTILS_H
+#endif //android_hardware_automotive_vehicle_V2_0_VehicleDebugUtils_H_
diff --git a/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp b/automotive/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
similarity index 91%
rename from vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
rename to automotive/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
index 135f9fa..a291351 100644
--- a/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
@@ -20,10 +20,11 @@
 
 #include <utils/SystemClock.h>
 
-#include "vehicle_hal_manager/VehicleObjectPool.h"
+#include "vhal_v2_0/VehicleObjectPool.h"
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -84,9 +85,9 @@
     // In this test we have T threads that concurrently in C cycles
     // obtain and release O VehiclePropValue objects of FLOAT / INT32 types.
 
-    const auto T = 2;
-    const auto C  = 500;
-    const auto O = 100;
+    const int T = 2;
+    const int C = 500;
+    const int O = 100;
 
     auto poolPtr = valuePool.get();
 
@@ -111,10 +112,10 @@
     }
     auto finish = elapsedRealtimeNano();
 
-    ASSERT_EQ(T * C * O, stats->Obtained);
-    ASSERT_EQ(T * C * O, stats->Recycled);
+    ASSERT_EQ(static_cast<uint32_t>(T * C * O), stats->Obtained);
+    ASSERT_EQ(static_cast<uint32_t>(T * C * O), stats->Recycled);
     // Created less than obtained.
-    ASSERT_GE(T * O, stats->Created);
+    ASSERT_GE(static_cast<uint32_t>(T * O), stats->Created);
 
     auto elapsedMs = (finish - start) / 1000000;
     ASSERT_GE(1000, elapsedMs);  // Less a second to access 100K objects.
@@ -125,5 +126,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
 }  // namespace android
diff --git a/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp b/automotive/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
similarity index 78%
rename from vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
rename to automotive/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
index 28cdcbb..0f65820 100644
--- a/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
@@ -16,12 +16,13 @@
 
 #include <gtest/gtest.h>
 
-#include "vehicle_hal_manager/VehiclePropConfigIndex.h"
+#include "vhal_v2_0/VehiclePropConfigIndex.h"
 
 #include "VehicleHalTestUtils.h"
 
 namespace android {
 namespace hardware {
+namespace automotive {
 namespace vehicle {
 namespace V2_0 {
 
@@ -43,11 +44,11 @@
 TEST_F(PropConfigTest, hasConfig) {
     VehiclePropConfigIndex index(configs);
 
-    ASSERT_TRUE(index.hasConfig(VehicleProperty::HVAC_FAN_SPEED));
-    ASSERT_TRUE(index.hasConfig(VehicleProperty::INFO_MAKE));
-    ASSERT_TRUE(index.hasConfig(VehicleProperty::INFO_FUEL_CAPACITY));
+    ASSERT_TRUE(index.hasConfig(toInt(VehicleProperty::HVAC_FAN_SPEED)));
+    ASSERT_TRUE(index.hasConfig(toInt(VehicleProperty::INFO_MAKE)));
+    ASSERT_TRUE(index.hasConfig(toInt(VehicleProperty::INFO_FUEL_CAPACITY)));
 
-    ASSERT_FALSE(index.hasConfig(VehicleProperty::INVALID));
+    ASSERT_FALSE(index.hasConfig(toInt(VehicleProperty::INVALID)));
 }
 
 TEST_F(PropConfigTest, getAllConfig) {
@@ -63,7 +64,7 @@
 
 TEST_F(PropConfigTest, getConfigs) {
     VehiclePropConfigIndex index(configs);
-    auto actualConfig = index.getConfig(VehicleProperty::HVAC_FAN_SPEED);
+    auto actualConfig = index.getConfig(toInt(VehicleProperty::HVAC_FAN_SPEED));
     ASSERT_EQ(toString(configs[1]), toString(actualConfig));
 }
 
@@ -71,5 +72,6 @@
 
 }  // namespace V2_0
 }  // namespace vehicle
+}  // namespace automotive
 }  // namespace hardware
-}  // namespace android
\ No newline at end of file
+}  // namespace android
diff --git a/vehicle/2.0/types.hal b/automotive/vehicle/2.0/types.hal
similarity index 89%
rename from vehicle/2.0/types.hal
rename to automotive/vehicle/2.0/types.hal
index a9b706d..8da0568 100644
--- a/vehicle/2.0/types.hal
+++ b/automotive/vehicle/2.0/types.hal
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.hardware.vehicle@2.0;
+package android.hardware.automotive.vehicle@2.0;
 
 /*
  * Enumerates supported data types for VehicleProperty.
@@ -330,9 +330,12 @@
     /*
      * Fan speed setting
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
-     * @allow_out_of_range_value : OFF
      */
     HVAC_FAN_SPEED = (
         0x0500
@@ -343,10 +346,13 @@
     /*
      * Fan direction setting
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      * @data_enum VehicleHvacFanDirection
-     * @allow_out_of_range_value : OFF
      */
     HVAC_FAN_DIRECTION = (
         0x0501
@@ -357,6 +363,10 @@
     /*
      * HVAC current temperature.
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      */
@@ -369,9 +379,12 @@
     /*
      * HVAC, target temperature set.
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
-     * @allow_out_of_range_value : MIN / MAX / OFF
      */
     HVAC_TEMPERATURE_SET = (
         0x0503
@@ -382,6 +395,10 @@
     /*
      * On/off defrost
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      */
@@ -394,6 +411,10 @@
     /*
      * On/off AC
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      * @config_flags Supported zones
@@ -407,6 +428,10 @@
     /*
      * On/off max AC
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      */
@@ -419,6 +444,10 @@
     /*
      * On/off max defrost
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      */
@@ -431,6 +460,10 @@
     /*
      * On/off re-circulation
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      */
@@ -443,6 +476,10 @@
     /*
      * On/off dual. This must be defined per each row.
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      */
@@ -455,6 +492,10 @@
     /*
      * On/off automatic mode
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      */
@@ -475,6 +516,10 @@
      * min/max range defines the allowable range and number of steps in each
      * direction.
      *
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      */
@@ -490,8 +535,12 @@
      * Increase values denote higher heating levels for side mirrors.
      * 0 indicates heating is turned off.
      *
-     * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
-     * @access VEHICLE_PROP_ACCESS_READ_WRITE
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
+     * @access VehiclePropertyAccess:READ_WRITE
      */
     HVAC_SIDE_MIRROR_HEAT = (
         0x050C
@@ -507,8 +556,12 @@
      * Negative value indicates cooling.
      * 0 indicates temperature control is off.
      *
-     * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
-     * @access VEHICLE_PROP_ACCESS_READ_WRITE
+     * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
+     * guaranteed to work if HVAC unit is off.  See HVAC_POWER_ON property for
+     * details.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
+     * @access VehiclePropertyAccess:READ_WRITE
      */
     HVAC_STEERING_WHEEL_TEMP = (
         0x050D
@@ -523,8 +576,11 @@
      * different unit from VehicleUnit enum.
      * This parameter affects all HVAC temperatures in the system.
      *
-     * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
-     * @access VEHICLE_PROP_ACCESS_READ
+     * IVehicle#get is not guaranteed to work if HVAC unit is off.  See
+     * HVAC_POWER_ON property for details.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
+     * @access VehiclePropertyAccess:READ
      */
     HVAC_TEMPERATURE_UNITS = (
         0x050E
@@ -535,9 +591,11 @@
     /**
      * Actual fan speed
      *
-     * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
-     * @access VEHICLE_PROP_ACCESS_READ
-     * @allow_out_of_range_value : OFF
+     * IVehicle#get is not guaranteed to work if HVAC unit is off.  See
+     * HVAC_POWER_ON property for details.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
+     * @access VehiclePropertyAccess:READ
      */
     HVAC_ACTUAL_FAN_SPEED_RPM = (
         0x050F
@@ -555,9 +613,8 @@
      *
      * 0x12 = (1 << 1) | (1 << 4)
      *
-     * @change_mode VEHICLE_PROP_CHANGE_MODE_STATIC
-     * @access VEHICLE_PROP_ACCESS_READ
-     * @allow_out_of_range_value : OFF
+     * @change_mode VehiclePropertyChangeMode:STATIC
+     * @access VehiclePropertyAccess:READ
      */
     HVAC_FAN_DIRECTION_AVAILABLE = (
         0x0511
@@ -964,6 +1021,7 @@
      *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
+     */
     AUDIO_PARAMETERS = (
         0x907
         | VehiclePropertyGroup:SYSTEM
@@ -971,23 +1029,44 @@
         | VehicleArea:GLOBAL),
 
     /*
-     * Index in int32Values for AP_POWER_STATE property.
+     * Property to control power state of application processor
+     *
+     * It is assumed that AP's power state is controller by separate power
+     * controller.
+     *
+     * For configuration information, VehiclePropConfig.configFlags can
+     * have bit flag combining values in VehicleApPowerStateConfigFlag.
+     *
+     * Value format for IVehicle#get / IVehicle#subscribe:
+     *   int32Values[0] : vehicle_ap_power_state_type
+     *   int32Values[1] : additional parameter relevant for each state,
+     *                    0 if not used.
+     * Value format for IVehicle#set:
+     *   int32Values[0] : vehicle_ap_power_state_set_type
+     *   int32Values[1] : additional parameter relevant for each request. should be 0 if not used.
+     *
+     * @change_mode VEHICLE_PROP_CHANGE_MODE_ON_CHANGE
+     * @access VEHICLE_PROP_ACCESS_READ_WRITE
      */
-    AP_POWER_STATE = (0x00000A00),
+    AP_POWER_STATE = (
+        0x0A00
+        | VehiclePropertyGroup:SYSTEM
+        | VehiclePropertyType:INT32_VEC
+        | VehicleArea:GLOBAL),
 
-  /*
-   * Property to represent brightness of the display. Some cars have single
-   * control for the brightness of all displays and this property is to share
-   * change in that control.
-   *
-   * If this is writable, android side can set this value when user changes
-   * display brightness from Settings. If this is read only, user may still
-   * change display brightness from Settings, but that will not be reflected
-   * to other displays.
-   *
-   * @change_mode VehiclePropertyChangeMode:ON_CHANGE
-   * @access VehiclePropertyAccess:READ_WRITE
-   */
+    /*
+     * Property to represent brightness of the display. Some cars have single
+     * control for the brightness of all displays and this property is to share
+     * change in that control.
+     *
+     * If this is writable, android side can set this value when user changes
+     * display brightness from Settings. If this is read only, user may still
+     * change display brightness from Settings, but that will not be reflected
+     * to other displays.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
+     * @access VehiclePropertyAccess:READ_WRITE
+     */
     DISPLAY_BRIGHTNESS = (
         0x0A01
         | VehiclePropertyGroup:SYSTEM
@@ -998,7 +1077,7 @@
      * Property to report bootup reason for the current power on. This is a
      * static property that will not change for the whole duration until power
      * off. For example, even if user presses power on button after automatic
-     * power on with door unlock, bootup reason must stay with 
+     * power on with door unlock, bootup reason must stay with
      * VehicleApPowerBootupReason#USER_UNLOCK.
      *
      * int32Values[0] must be VehicleApPowerBootupReason.
@@ -1713,12 +1792,20 @@
         | VehicleArea:GLOBAL),
 
     /*
-     * Vehicle Maps Data Service (VMDS) message
+     * Vehicle Maps Service (VMS) message
+     *
+     * This property uses COMPLEX data to communicate vms messages.
+     *
+     * Its contents are to be interpreted as follows:
+     * the indices defined in VmsMessageIntegerValuesIndex are to be used to
+     * read from int32Values;
+     * bytes is a serialized VMS message as defined in the vms protocol
+     * which is opaque to the framework;
      *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ_WRITE
      */
-    VEHICLE_MAPS_DATA_SERVICE = (
+    VEHICLE_MAP_SERVICE = (
         0x0C00
         | VehiclePropertyGroup:SYSTEM
         | VehiclePropertyType:COMPLEX
@@ -1730,14 +1817,30 @@
      * This property uses COMPLEX data to send a snapshot of the current (live)
      * values of the OBD2 sensors provided by the vehicle.
      *
-     * Its contents are to be interpreted as follows:
+     * VehiclePropConfig
+     *   configArray[0] : number of vendor-specific integer-valued sensors
+     *                    that can be returned in a frame.
+     *   configArray[1] : number of vendor-specific float-valued sensors
+     *                    that can be returned in a frame.
+     *
+     * The values are to be interpreted as follows:
      * the indices defined in Obd2IntegerSensorIndex are to be used to
      * read from int32Values;
      * the indices defined in Obd2FloatSensorIndex are to be used to
      * read from floatValues.
+     * the elements of bytes are to be interpreted as a bitmask, such that
+     * the bits 0 thru the integer value of
+     * Obd2IntegerSensorIndex.LAST_SYSTEM_INDEX + the value of configArray[0]
+     * are 1 if the corresponding index is a valid sensor index whose value can
+     * be read in the returned int32Values vector, 0 otherwise.
+     * the bits Obd2IntegerSensorIndex.LAST_SYSTEM_INDEX+1 thru
+     * Obd2FloatingSensorIndex.LAST_SYSTEM_INDEX + the value of configArray[1]
+     * are 1 if the corresponding index is a valid sensor index whose value
+     * can be read in the returned floatValues vector, 0 otherwise.
      *
      * For example, int32Values[0] corresponds to FUEL_SYSTEM_STATUS, and
-     * floatValues[0] corresponds to CALCULATED_ENGINE_LOAD.
+     * floatValues[0] corresponds to CALCULATED_ENGINE_LOAD, but that mapping
+     * is only valid if the corresponding bits in the bytes vector are set to 1.
      *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ
@@ -1755,17 +1858,37 @@
      * OBD2 sensors provided by the vehicle at the time that a diagnostic
      * troubleshooting code (DTC) was recorded by the vehicle.
      *
-     * Its contents are to be interpreted as follows:
+     * VehiclePropConfig
+     *   configArray[0] : number of vendor-specific integer-valued sensors
+     *                    that can be returned in a frame.
+     *   configArray[1] : number of vendor-specific float-valued sensors
+     *                    that can be returned in a frame.
+     *
+     * A get of this property must take the following form:
+     *   int64Values[0]: timestamp of the freeze frame to retrieve.
+     *                   Valid timestamps are given by OBD2_DTC_INFO.
+     *
+     * The values are to be interpreted as follows:
      * the indices defined in Obd2IntegerSensorIndex are to be used to
      * read from int32Values;
      * the indices defined in Obd2FloatSensorIndex are to be used to
      * read from floatValues;
+     * the elements of bytes are to be interpreted as a bitmask, such that
+     * the bits 0 thru the integer value of
+     * Obd2IntegerSensorIndex.LAST_SYSTEM_INDEX + the value of configArray[0]
+     * are 1 if the corresponding index is a valid sensor index whose value can
+     * be read in the returned int32Values vector, 0 otherwise.
+     * the bits Obd2IntegerSensorIndex.LAST_SYSTEM_INDEX+1 thru
+     * Obd2FloatingSensorIndex.LAST_SYSTEM_INDEX + the value of configArray[1]
+     * are 1 if the corresponding index is a valid sensor index whose value
+     * can be read in the returned floatValues vector, 0 otherwise.
      * stringValue is the DTC that caused this freeze frame to be recorded.
      *
      * For example, int32Values[0] corresponds to FUEL_SYSTEM_STATUS, and
-     * floatValues[0] corresponds to CALCULATED_ENGINE_LOAD, and a possible
-     * valid stringValue is "P0176" to indicate a malfunction of the fuel
-     * composition sensor circuit.
+     * floatValues[0] corresponds to CALCULATED_ENGINE_LOAD, but that mapping
+     * is only valid if the corresponding bits in the bytes vector are set to 1,
+     * and a possible valid stringValue is "P0176" to indicate a malfunction
+     * of the fuel composition sensor circuit.
      *
      * @change_mode VehiclePropertyChangeMode:ON_CHANGE
      * @access VehiclePropertyAccess:READ
@@ -1776,8 +1899,49 @@
         | VehiclePropertyType:COMPLEX
         | VehicleArea:GLOBAL),
 
-};
+    /*
+     * OBD2 Freeze Frame Information
+     *
+     * This property describes the current freeze frames stored in vehicle
+     * memory and available for retrieval via OBD2_FREEZE_FRAME.
+     *
+     * The values are to be interpreted as follows:
+     * each element of int64Values is the timestamp at which a a fault code
+     * has been detected and the corresponding freeze frame stored, and each
+     * such element can be used as the key to OBD2_FREEZE_FRAME to retrieve
+     * the corresponding freeze frame.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
+     * @access VehiclePropertyAccess:READ
+     */
+    OBD2_FREEZE_FRAME_INFO = (
+        0x0D02
+        | VehiclePropertyGroup:SYSTEM
+        | VehiclePropertyType:COMPLEX
+        | VehicleArea:GLOBAL),
 
+    /*
+     * OBD2 Freeze Frame Clear
+     *
+     * This property allows deletion of any of the freeze frames stored in
+     * vehicle memory, as described by OBD2_DTC_INFO.
+     *
+     * A set of this property is to be interpreted as follows:
+     * if int64Values contains no elements, then all DTCs stored will be cleared;
+     * if int64Values contains one or more elements, then DTCs at the timestamps
+     * stored in int64Values will be cleared, and the others not cleared, except
+     * the memory will be compacted so that all remaining DTCs are stored
+     * contiguously.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
+     * @access VehiclePropertyAccess:WRITE
+     */
+    OBD2_FREEZE_FRAME_CLEAR = (
+        0x0D03
+        | VehiclePropertyGroup:SYSTEM
+        | VehiclePropertyType:COMPLEX
+        | VehicleArea:GLOBAL),
+};
 /*
  * Bit flags for fan direction
  */
@@ -2436,7 +2600,8 @@
 };
 
 struct VehiclePropConfig {
-    VehicleProperty prop;
+    /* Property identifier */
+    int32_t prop;
 
     /*
      * Defines if the property is read or write or both.
@@ -2497,7 +2662,7 @@
  */
 struct VehiclePropValue {
     /* Property identifier */
-    VehicleProperty prop;
+    int32_t prop;
 
     /* Time is elapsed nanoseconds since boot */
     int64_t timestamp;
@@ -2617,7 +2782,7 @@
  */
 struct SubscribeOptions {
   /* Property to subscribe */
-  VehicleProperty propId;
+  int32_t propId;
 
   /*
    * Area ids - this must be a bit mask of areas to subscribe or 0 to subscribe
@@ -2744,6 +2909,15 @@
   NMHC_CATALYST_INCOMPLETE = 0x1 << 17,
 };
 
+enum Wheel : int32_t {
+    UNKNOWN = 0x0,
+
+    LEFT_FRONT = 0x1,
+    RIGHT_FRONT = 0x2,
+    LEFT_REAR = 0x4,
+    RIGHT_REAR = 0x8,
+};
+
 enum SecondaryAirStatus : int32_t {
   UPSTREAM = 1,
 
@@ -3043,3 +3217,35 @@
 
   VENDOR_START_INDEX = LAST_SYSTEM_INDEX + 1,
 };
+
+/*
+ * This enum lists the types of supported VMS messages.
+ */
+enum VmsMessageType : int32_t {
+  /* A client subscribes to a layer. */
+  SUBSCRIBE = 1,
+
+  /* A client unsubscribes from a layer. */
+  UNSUBSCRIBE = 2,
+
+  /* A client publishes a data packet. */
+  DATA = 3,
+};
+
+/*
+ * This enum provides the canonical mapping for VMS properties that have an
+ * integer value.
+ */
+enum VmsMessageIntegerValuesIndex : int32_t {
+  /* The message type as enumerated by VmsMessageType enum. */
+  VMS_MESSAGE_TYPE = 0,
+
+  /* The layer ID as defined in the vms protocol. */
+  VMS_LAYER_ID = 1,
+
+  /* The version of the VMS layer. */
+  VMS_LAYER_VERSION = 2,
+
+  /* The number of bytes in the payload */
+  VMS_PAYLOAD_SIZE_BYTES = 3,
+};
diff --git a/automotive/vehicle/2.1/Android.bp b/automotive/vehicle/2.1/Android.bp
new file mode 100644
index 0000000..dcf395c
--- /dev/null
+++ b/automotive/vehicle/2.1/Android.bp
@@ -0,0 +1,62 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.automotive.vehicle@2.1_hal",
+    srcs: [
+        "types.hal",
+        "IVehicle.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.automotive.vehicle@2.1_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.vehicle@2.1",
+    srcs: [
+        ":android.hardware.automotive.vehicle@2.1_hal",
+    ],
+    out: [
+        "android/hardware/automotive/vehicle/2.1/types.cpp",
+        "android/hardware/automotive/vehicle/2.1/VehicleAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.automotive.vehicle@2.1_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.vehicle@2.1",
+    srcs: [
+        ":android.hardware.automotive.vehicle@2.1_hal",
+    ],
+    out: [
+        "android/hardware/automotive/vehicle/2.1/types.h",
+        "android/hardware/automotive/vehicle/2.1/IVehicle.h",
+        "android/hardware/automotive/vehicle/2.1/IHwVehicle.h",
+        "android/hardware/automotive/vehicle/2.1/BnHwVehicle.h",
+        "android/hardware/automotive/vehicle/2.1/BpHwVehicle.h",
+        "android/hardware/automotive/vehicle/2.1/BsVehicle.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.automotive.vehicle@2.1",
+    generated_sources: ["android.hardware.automotive.vehicle@2.1_genc++"],
+    generated_headers: ["android.hardware.automotive.vehicle@2.1_genc++_headers"],
+    export_generated_headers: ["android.hardware.automotive.vehicle@2.1_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hardware.automotive.vehicle@2.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.automotive.vehicle@2.0",
+    ],
+}
diff --git a/automotive/vehicle/2.1/Android.mk b/automotive/vehicle/2.1/Android.mk
new file mode 100644
index 0000000..2a8d1dd
--- /dev/null
+++ b/automotive/vehicle/2.1/Android.mk
@@ -0,0 +1,116 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.automotive.vehicle@2.1-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+    android.hardware.automotive.vehicle@2.0-java \
+    android.hidl.base@1.0-java \
+
+
+#
+# Build types.hal (VehicleProperty)
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VehicleProperty.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.1::types.VehicleProperty
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IVehicle.hal
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/IVehicle.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVehicle.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.1::IVehicle
+
+$(GEN): $(LOCAL_PATH)/IVehicle.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.automotive.vehicle@2.1-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hardware.automotive.vehicle@2.0-java-static \
+    android.hidl.base@1.0-java-static \
+
+
+#
+# Build types.hal (VehicleProperty)
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VehicleProperty.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.1::types.VehicleProperty
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IVehicle.hal
+#
+GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/IVehicle.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVehicle.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.automotive.vehicle@2.1::IVehicle
+
+$(GEN): $(LOCAL_PATH)/IVehicle.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/automotive/vehicle/2.1/IVehicle.hal b/automotive/vehicle/2.1/IVehicle.hal
new file mode 100644
index 0000000..5b6a23f
--- /dev/null
+++ b/automotive/vehicle/2.1/IVehicle.hal
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.1 (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.1
+ *
+ * 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.automotive.vehicle@2.1;
+
+import android.hardware.automotive.vehicle@2.0;
+
+/*
+ * New revision of IVehicle interface that supports properties defined in
+ * VehicleProperty enum version 2.1.
+ *
+ * NOTE: this HAL interface is under development and shouldn't be used in
+ *       production.
+ *
+ * TODO(pavelm): update comment when this interface is ready for prod.
+ */
+interface IVehicle extends @2.0::IVehicle {
+};
diff --git a/automotive/vehicle/2.1/default/Android.mk b/automotive/vehicle/2.1/default/Android.mk
new file mode 100644
index 0000000..65a4ba4
--- /dev/null
+++ b/automotive/vehicle/2.1/default/Android.mk
@@ -0,0 +1,84 @@
+# 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.
+
+LOCAL_PATH := $(call my-dir)
+
+vhal_v2_0 = android.hardware.automotive.vehicle@2.0
+vhal_v2_1 = android.hardware.automotive.vehicle@2.1
+
+###############################################################################
+# Vehicle default VehicleHAL implementation
+###############################################################################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= $(vhal_v2_1)-default-impl-lib
+
+LOCAL_C_INCLUDES := \
+    $(LOCAL_PATH)/impl/vhal_v2_1
+
+LOCAL_EXPORT_C_INCLUDE_DIRS := \
+    $(LOCAL_PATH)/impl
+
+
+# LOCAL_WHOLE_STATIC_LIBRARIES := \
+
+LOCAL_STATIC_LIBRARIES := \
+    $(vhal_v2_0)-default-impl-lib \
+    $(vhal_v2_0)-manager-lib \
+    $(vhal_v2_0)-libproto-native
+
+LOCAL_SHARED_LIBRARIES := \
+    libbinder \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    liblog \
+    libutils \
+    libprotobuf-cpp-lite \
+    $(vhal_v2_0) \
+    $(vhal_v2_1) \
+
+include $(BUILD_STATIC_LIBRARY)
+
+###############################################################################
+# Vehicle HAL service
+###############################################################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := $(vhal_v2_1)-service
+LOCAL_INIT_RC := $(vhal_v2_1)-service.rc
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
+LOCAL_SRC_FILES := \
+    service.cpp
+
+LOCAL_WHOLE_STATIC_LIBRARIES := \
+    $(vhal_v2_0)-libproto-native \
+
+LOCAL_STATIC_LIBRARIES := \
+    $(vhal_v2_0)-manager-lib \
+    $(vhal_v2_0)-default-impl-lib \
+    $(vhal_v2_1)-default-impl-lib \
+
+LOCAL_SHARED_LIBRARIES := \
+    libbinder \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    liblog \
+    libutils \
+    libprotobuf-cpp-lite \
+    $(vhal_v2_0) \
+    $(vhal_v2_1) \
+
+include $(BUILD_EXECUTABLE)
diff --git a/automotive/vehicle/2.1/default/android.hardware.automotive.vehicle@2.1-service.rc b/automotive/vehicle/2.1/default/android.hardware.automotive.vehicle@2.1-service.rc
new file mode 100644
index 0000000..8929d25
--- /dev/null
+++ b/automotive/vehicle/2.1/default/android.hardware.automotive.vehicle@2.1-service.rc
@@ -0,0 +1,4 @@
+service vehicle-hal-2.1 /vendor/bin/hw/android.hardware.automotive.vehicle@2.1-service
+    class hal
+    user vehicle_network
+    group system inet
diff --git a/automotive/vehicle/2.1/default/impl/vhal_v2_1/DefaultConfig.h b/automotive/vehicle/2.1/default/impl/vhal_v2_1/DefaultConfig.h
new file mode 100644
index 0000000..ab08cec
--- /dev/null
+++ b/automotive/vehicle/2.1/default/impl/vhal_v2_1/DefaultConfig.h
@@ -0,0 +1,47 @@
+/*
+ * 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 android_hardware_automotive_vehicle_V2_1_impl_DefaultConfig_H_
+#define android_hardware_automotive_vehicle_V2_1_impl_DefaultConfig_H_
+
+#include <android/hardware/automotive/vehicle/2.1/types.h>
+#include <vhal_v2_0/VehicleUtils.h>
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_1 {
+
+namespace impl {
+
+const V2_0::VehiclePropConfig kVehicleProperties[] = {
+    {
+        .prop = V2_0::toInt(V2_1::VehicleProperty::WHEEL_TICK),
+        .access = V2_0::VehiclePropertyAccess::READ,
+        .changeMode = V2_0::VehiclePropertyChangeMode::CONTINUOUS,
+    }
+};
+
+}  // impl
+
+}  // namespace V2_1
+}  // namespace vehicle
+}  // namespace automotive
+}  // namespace hardware
+}  // namespace android
+
+#endif // android_hardware_automotive_vehicle_V2_1_impl_DefaultConfig_H_
diff --git a/automotive/vehicle/2.1/default/impl/vhal_v2_1/DefaultVehicleHal.h b/automotive/vehicle/2.1/default/impl/vhal_v2_1/DefaultVehicleHal.h
new file mode 100644
index 0000000..7ccb354
--- /dev/null
+++ b/automotive/vehicle/2.1/default/impl/vhal_v2_1/DefaultVehicleHal.h
@@ -0,0 +1,93 @@
+/*
+ * 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 android_hardware_automotive_vehicle_V2_1_impl_DefaultVehicleHal_H_
+#define android_hardware_automotive_vehicle_V2_1_impl_DefaultVehicleHal_H_
+
+#include <memory>
+
+#include <utils/SystemClock.h>
+
+#include <vhal_v2_0/VehicleHal.h>
+#include <vhal_v2_0/DefaultVehicleHal.h>
+
+#include "DefaultConfig.h"
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_1 {
+
+namespace impl {
+
+using namespace std::placeholders;
+
+class DefaultVehicleHal : public V2_0::VehicleHal {
+public:
+    DefaultVehicleHal(V2_0::VehicleHal* vhal20) : mVehicleHal20(vhal20) {}
+
+    std::vector<V2_0::VehiclePropConfig> listProperties() override {
+        std::vector<V2_0::VehiclePropConfig> propConfigs(mVehicleHal20->listProperties());
+
+        // Join Vehicle Hal 2.0 and 2.1 configs.
+        propConfigs.insert(propConfigs.end(),
+                           std::begin(kVehicleProperties),
+                           std::end(kVehicleProperties));
+
+        return propConfigs;
+    }
+
+    VehiclePropValuePtr get(const V2_0::VehiclePropValue& requestedPropValue,
+                            V2_0::StatusCode* outStatus) override {
+        // TODO(pavelm): put logic related to VHAL 2.1 here (OBD, VMS, etc)
+        return mVehicleHal20->get(requestedPropValue, outStatus);
+    }
+
+    V2_0::StatusCode set(const V2_0::VehiclePropValue& propValue) override {
+        return mVehicleHal20->set(propValue);
+    }
+
+    V2_0::StatusCode subscribe(int32_t property,
+                               int32_t areas,
+                               float sampleRate) override {
+        return mVehicleHal20->subscribe(property, areas, sampleRate);
+    }
+
+    V2_0::StatusCode unsubscribe(int32_t property) override {
+        return mVehicleHal20->unsubscribe(property);
+    }
+
+    void onCreate() override {
+        mVehicleHal20->init(getValuePool(),
+                            std::bind(&DefaultVehicleHal::doHalEvent, this, _1),
+                            std::bind(&DefaultVehicleHal::doHalPropertySetError, this, _1, _2, _3));
+    }
+
+private:
+    V2_0::VehicleHal* mVehicleHal20;
+};
+
+}  // impl
+
+}  // namespace V2_1
+}  // namespace vehicle
+}  // namespace automotive
+}  // namespace hardware
+}  // namespace android
+
+
+#endif  // android_hardware_automotive_vehicle_V2_0_impl_DefaultVehicleHal_H_
diff --git a/automotive/vehicle/2.1/default/service.cpp b/automotive/vehicle/2.1/default/service.cpp
new file mode 100644
index 0000000..aaadf17
--- /dev/null
+++ b/automotive/vehicle/2.1/default/service.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 "automotive.vehicle@2.1-service"
+#include <android/log.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include <iostream>
+
+#include <android/hardware/automotive/vehicle/2.1/IVehicle.h>
+
+#include <vhal_v2_0/VehicleHalManager.h>
+#include <vhal_v2_0/DefaultVehicleHal.h>
+
+#include <vhal_v2_1/DefaultVehicleHal.h>
+
+using namespace android;
+using namespace android::hardware;
+
+namespace V2_1 = ::android::hardware::automotive::vehicle::V2_1;
+namespace V2_0 = ::android::hardware::automotive::vehicle::V2_0;
+
+using StatusCode = V2_0::StatusCode;
+using VehiclePropValue = V2_0::VehiclePropValue;
+
+/* Just wrapper that passes all calls to the provided V2_0::IVehicle object */
+struct Vehicle_V2_1 : public V2_1::IVehicle {
+
+    Vehicle_V2_1(V2_0::IVehicle* vehicle20) : mVehicle20(vehicle20) {}
+
+    // Methods derived from IVehicle
+    Return<void> getAllPropConfigs(getAllPropConfigs_cb _hidl_cb)  override {
+        return mVehicle20->getAllPropConfigs(_hidl_cb);
+    }
+
+    Return<void> getPropConfigs(const hidl_vec<int32_t>& properties,
+                                getPropConfigs_cb _hidl_cb)  override {
+        return mVehicle20->getPropConfigs(properties, _hidl_cb);
+    }
+
+    Return<void> get(const V2_0::VehiclePropValue& requestedPropValue,
+                     get_cb _hidl_cb)  override {
+        return mVehicle20->get(requestedPropValue, _hidl_cb);
+    }
+
+    Return<StatusCode> set(const VehiclePropValue& value) override {
+        return mVehicle20->set(value);
+    }
+
+    Return<StatusCode> subscribe(const sp<V2_0::IVehicleCallback>& callback,
+                                 const hidl_vec<V2_0::SubscribeOptions>&
+                                 options)  override {
+        return mVehicle20->subscribe(callback, options);
+    }
+
+    Return<StatusCode> unsubscribe(const sp<V2_0::IVehicleCallback>& callback,
+                                   int32_t propId)  override {
+        return mVehicle20->unsubscribe(callback, propId);
+    }
+
+    Return<void> debugDump(debugDump_cb _hidl_cb = nullptr) override {
+        return mVehicle20->debugDump(_hidl_cb);
+    }
+
+private:
+    V2_0::IVehicle* mVehicle20;
+};
+
+int main(int /* argc */, char* /* argv */ []) {
+    auto halImpl20 = std::make_unique<V2_0::impl::DefaultVehicleHal>();
+    auto halImpl21 = std::make_unique<V2_1::impl::DefaultVehicleHal>(halImpl20.get());
+
+    auto vehicleManager = std::make_unique<V2_0::VehicleHalManager>(halImpl21.get());
+
+    Vehicle_V2_1 vehicle21(vehicleManager.get());
+
+    ALOGI("Registering as service...");
+    vehicle21.registerAsService("Vehicle");
+
+    configureRpcThreadpool(1, true /* callerWillJoin */);
+
+    ALOGI("Ready");
+    joinRpcThreadpool();
+}
diff --git a/automotive/vehicle/2.1/types.hal b/automotive/vehicle/2.1/types.hal
new file mode 100644
index 0000000..5df1fbc
--- /dev/null
+++ b/automotive/vehicle/2.1/types.hal
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.1 (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.1
+ *
+ * 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.automotive.vehicle@2.1;
+
+import android.hardware.automotive.vehicle@2.0;
+
+/*
+ * Extension of VehicleProperty enum declared in Vehicle HAL 2.0
+ */
+enum VehicleProperty: @2.0::VehicleProperty {
+    /*
+     * Reports wheel rotational distance in meters since last wheel tick
+     * event
+     *
+     * The value is a vector each element represents distance for individual
+     * wheel in the following order: left front, right front, left rear,
+     * right rear. VehiclePropValue.timestamp must be correctly filled in.
+     *
+     * Vendors must specify wheels that support this sensor in
+     * VehiclePropConfig.configFlags. The format of this field is a bitset of
+     * values from Wheel enum.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE |VehiclePropertyChangeMode:CONTINUOUS
+     * @access VehiclePropertyAccess:READ
+     * @unit VehicleUnit:METER
+     */
+    WHEEL_TICK = (
+      0x0306
+      | VehiclePropertyGroup:SYSTEM
+      | VehiclePropertyType:FLOAT_VEC
+      | VehicleArea:GLOBAL),
+};
diff --git a/benchmarks/msgq/1.0/Android.bp b/benchmarks/msgq/1.0/Android.bp
index b6f4bfd..7f8ea99 100644
--- a/benchmarks/msgq/1.0/Android.bp
+++ b/benchmarks/msgq/1.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.benchmarks.msgq@1.0_hal",
+    srcs: [
+        "IBenchmarkMsgQ.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.benchmarks.msgq@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.benchmarks.msgq@1.0",
     srcs: [
-        "IBenchmarkMsgQ.hal",
+        ":android.hardware.benchmarks.msgq@1.0_hal",
     ],
     out: [
         "android/hardware/benchmarks/msgq/1.0/BenchmarkMsgQAll.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.benchmarks.msgq@1.0",
     srcs: [
-        "IBenchmarkMsgQ.hal",
+        ":android.hardware.benchmarks.msgq@1.0_hal",
     ],
     out: [
         "android/hardware/benchmarks/msgq/1.0/IBenchmarkMsgQ.h",
diff --git a/biometrics/Android.bp b/biometrics/Android.bp
index eea4604..c87e3af 100644
--- a/biometrics/Android.bp
+++ b/biometrics/Android.bp
@@ -1,4 +1,5 @@
 // This is an autogenerated file, do not edit.
 subdirs = [
     "fingerprint/2.1",
+    "fingerprint/2.1/vts/functional",
 ]
diff --git a/biometrics/fingerprint/2.1/Android.bp b/biometrics/fingerprint/2.1/Android.bp
index 02b7328..586e1b3 100644
--- a/biometrics/fingerprint/2.1/Android.bp
+++ b/biometrics/fingerprint/2.1/Android.bp
@@ -1,13 +1,20 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.biometrics.fingerprint@2.1_hal",
+    srcs: [
+        "types.hal",
+        "IBiometricsFingerprint.hal",
+        "IBiometricsFingerprintClientCallback.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.biometrics.fingerprint@2.1_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.biometrics.fingerprint@2.1",
     srcs: [
-        "types.hal",
-        "IBiometricsFingerprint.hal",
-        "IBiometricsFingerprintClientCallback.hal",
+        ":android.hardware.biometrics.fingerprint@2.1_hal",
     ],
     out: [
         "android/hardware/biometrics/fingerprint/2.1/types.cpp",
@@ -21,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.biometrics.fingerprint@2.1",
     srcs: [
-        "types.hal",
-        "IBiometricsFingerprint.hal",
-        "IBiometricsFingerprintClientCallback.hal",
+        ":android.hardware.biometrics.fingerprint@2.1_hal",
     ],
     out: [
         "android/hardware/biometrics/fingerprint/2.1/types.h",
diff --git a/biometrics/fingerprint/2.1/Android.mk b/biometrics/fingerprint/2.1/Android.mk
index 22da268..567b38a 100644
--- a/biometrics/fingerprint/2.1/Android.mk
+++ b/biometrics/fingerprint/2.1/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.biometrics.fingerprint@2.1-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -239,7 +239,7 @@
 LOCAL_MODULE := android.hardware.biometrics.fingerprint@2.1-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/biometrics/fingerprint/2.1/IBiometricsFingerprintClientCallback.hal b/biometrics/fingerprint/2.1/IBiometricsFingerprintClientCallback.hal
index 63435d1..d913cf1 100644
--- a/biometrics/fingerprint/2.1/IBiometricsFingerprintClientCallback.hal
+++ b/biometrics/fingerprint/2.1/IBiometricsFingerprintClientCallback.hal
@@ -43,8 +43,9 @@
      * @param deviceId the instance of this fingerprint device
      * @param fingerId the fingerprint templetate that was authenticated
      * @param groupId the groupid for the template that was authenticated
+     * @param token the hardware authentication token to pass to Keystore.addAuthToken()
      */
-    oneway onAuthenticated(uint64_t deviceId, uint32_t fingerId, uint32_t groupId);
+    oneway onAuthenticated(uint64_t deviceId, uint32_t fingerId, uint32_t groupId, vec<uint8_t> token);
 
     /**
      * Sent when a fingerprint error occurs
diff --git a/biometrics/fingerprint/2.1/default/Android.mk b/biometrics/fingerprint/2.1/default/Android.mk
index e5c79fe..ea20130 100644
--- a/biometrics/fingerprint/2.1/default/Android.mk
+++ b/biometrics/fingerprint/2.1/default/Android.mk
@@ -3,6 +3,7 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.biometrics.fingerprint@2.1-service
 LOCAL_INIT_RC := android.hardware.biometrics.fingerprint@2.1-service.rc
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     BiometricsFingerprint.cpp \
diff --git a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
index 516cd00..b106481 100644
--- a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
+++ b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2017 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.
@@ -14,10 +14,9 @@
  * limitations under the License.
  */
 #define LOG_TAG "android.hardware.biometrics.fingerprint@2.1-service"
+#define LOG_VERBOSE "android.hardware.biometrics.fingerprint@2.1-service"
 
 // For communication with Keystore binder interface
-#include <binder/IServiceManager.h>
-#include <keystore/IKeystoreService.h>
 #include <keystore/keystore.h> // for error codes
 #include <hardware/hw_auth_token.h>
 
@@ -40,23 +39,19 @@
 using RequestStatus =
         android::hardware::biometrics::fingerprint::V2_1::RequestStatus;
 
-sp<IBiometricsFingerprintClientCallback>
-    BiometricsFingerprint::mClientCallback = nullptr;
+BiometricsFingerprint *BiometricsFingerprint::sInstance = nullptr;
 
-// TODO: This is here because HAL 2.1 doesn't have a way to propagate a
-// unique token for its driver. Subsequent versions should send a unique
-// token for each call to notify(). This is fine as long as there's only
-// one fingerprint device on the platform.
-fingerprint_device_t *BiometricsFingerprint::sDevice = nullptr;
-
-BiometricsFingerprint::BiometricsFingerprint(fingerprint_device_t *device)
-    : mDevice(device) {
-    sDevice = mDevice; // keep track of the most recent instance
+BiometricsFingerprint::BiometricsFingerprint() : mClientCallback(nullptr), mDevice(nullptr) {
+    sInstance = this; // keep track of the most recent instance
+    mDevice = openHal();
+    if (!mDevice) {
+        ALOGE("Can't open HAL module");
+    }
 }
 
 BiometricsFingerprint::~BiometricsFingerprint() {
-    ALOG(LOG_VERBOSE, LOG_TAG, "nativeCloseHal()\n");
-    if (mDevice == NULL) {
+    ALOGV("~BiometricsFingerprint()");
+    if (mDevice == nullptr) {
         ALOGE("No valid device");
         return;
     }
@@ -66,7 +61,7 @@
         ALOGE("Can't close fingerprint module, error: %d", err);
         return;
     }
-    mDevice = NULL;
+    mDevice = nullptr;
 }
 
 Return<RequestStatus> BiometricsFingerprint::ErrorFilter(int32_t error) {
@@ -107,6 +102,8 @@
             return FingerprintError::ERROR_CANCELED;
         case FINGERPRINT_ERROR_UNABLE_TO_REMOVE:
             return FingerprintError::ERROR_UNABLE_TO_REMOVE;
+        case FINGERPRINT_ERROR_LOCKOUT:
+            return FingerprintError::ERROR_LOCKOUT;
         default:
             if (error >= FINGERPRINT_ERROR_VENDOR_BASE) {
                 // vendor specific code.
@@ -114,7 +111,7 @@
                 return FingerprintError::ERROR_VENDOR;
             }
     }
-    ALOGE("Unknown error from fingerprint vendor library");
+    ALOGE("Unknown error from fingerprint vendor library: %d", error);
     return FingerprintError::ERROR_UNABLE_TO_PROCESS;
 }
 
@@ -143,13 +140,17 @@
                 return FingerprintAcquiredInfo::ACQUIRED_VENDOR;
             }
     }
-    ALOGE("Unknown acquiredmsg from fingerprint vendor library");
+    ALOGE("Unknown acquiredmsg from fingerprint vendor library: %d", info);
     return FingerprintAcquiredInfo::ACQUIRED_INSUFFICIENT;
 }
 
 Return<uint64_t> BiometricsFingerprint::setNotify(
         const sp<IBiometricsFingerprintClientCallback>& clientCallback) {
     mClientCallback = clientCallback;
+    // This is here because HAL 2.1 doesn't have a way to propagate a
+    // unique token for its driver. Subsequent versions should send a unique
+    // token for each call to setNotify(). This is fine as long as there's only
+    // one fingerprint device on the platform.
     return reinterpret_cast<uint64_t>(mDevice);
 }
 
@@ -199,36 +200,44 @@
 }
 
 IBiometricsFingerprint* BiometricsFingerprint::getInstance() {
+    if (!sInstance) {
+      sInstance = new BiometricsFingerprint();
+    }
+    return sInstance;
+}
+
+fingerprint_device_t* BiometricsFingerprint::openHal() {
     int err;
-    const hw_module_t *hw_mdl = NULL;
-    ALOGE("Opening fingerprint hal library...");
+    const hw_module_t *hw_mdl = nullptr;
+    ALOGD("Opening fingerprint hal library...");
     if (0 != (err = hw_get_module(FINGERPRINT_HARDWARE_MODULE_ID, &hw_mdl))) {
         ALOGE("Can't open fingerprint HW Module, error: %d", err);
         return nullptr;
     }
 
-    if (hw_mdl == NULL) {
+    if (hw_mdl == nullptr) {
         ALOGE("No valid fingerprint module");
         return nullptr;
     }
 
     fingerprint_module_t const *module =
         reinterpret_cast<const fingerprint_module_t*>(hw_mdl);
-    if (module->common.methods->open == NULL) {
+    if (module->common.methods->open == nullptr) {
         ALOGE("No valid open method");
         return nullptr;
     }
 
-    hw_device_t *device = NULL;
+    hw_device_t *device = nullptr;
 
-    if (0 != (err = module->common.methods->open(hw_mdl, NULL, &device))) {
+    if (0 != (err = module->common.methods->open(hw_mdl, nullptr, &device))) {
         ALOGE("Can't open fingerprint methods, error: %d", err);
         return nullptr;
     }
 
     if (kVersion != device->version) {
+        // enforce version on new devices because of HIDL@2.1 translation layer
         ALOGE("Wrong fp version. Expected %d, got %d", kVersion, device->version);
-        return 0; // enforce this on new devices because of HIDL translation layer
+        return nullptr;
     }
 
     fingerprint_device_t* fp_device =
@@ -240,23 +249,67 @@
         return nullptr;
     }
 
-    return new BiometricsFingerprint(fp_device);
+    return fp_device;
 }
 
-void BiometricsFingerprint::notifyKeystore(const uint8_t *auth_token, const size_t auth_token_length) {
-    if (auth_token != nullptr && auth_token_length > 0) {
-        // TODO: cache service?
-        sp<IServiceManager> sm = android::defaultServiceManager();
-        sp<::android::IBinder> binder = sm->getService(String16("android.security.keystore"));
-        sp<IKeystoreService> service = interface_cast<IKeystoreService>(binder);
-        if (service != nullptr) {
-            auto ret = service->addAuthToken(auth_token, auth_token_length);
-            if (!ret.isOk()) {
-                ALOGE("Failure sending auth token to KeyStore: %" PRId32, int32_t(ret));
+void BiometricsFingerprint::notify(const fingerprint_msg_t *msg) {
+    BiometricsFingerprint* thisPtr = static_cast<BiometricsFingerprint*>(
+            BiometricsFingerprint::getInstance());
+    if (thisPtr == nullptr || thisPtr->mClientCallback == nullptr) {
+        ALOGE("Receiving callbacks before the client callback is registered.");
+        return;
+    }
+    const uint64_t devId = reinterpret_cast<uint64_t>(thisPtr->mDevice);
+    switch (msg->type) {
+        case FINGERPRINT_ERROR: {
+                int32_t vendorCode = 0;
+                FingerprintError result = VendorErrorFilter(msg->data.error, &vendorCode);
+                thisPtr->mClientCallback->onError(devId, result, vendorCode);
             }
-        } else {
-            ALOGE("Unable to communicate with KeyStore");
-        }
+            break;
+        case FINGERPRINT_ACQUIRED: {
+                int32_t vendorCode = 0;
+                FingerprintAcquiredInfo result =
+                    VendorAcquiredFilter(msg->data.acquired.acquired_info, &vendorCode);
+                thisPtr->mClientCallback->onAcquired(devId, result, vendorCode);
+            }
+            break;
+        case FINGERPRINT_TEMPLATE_ENROLLING:
+            thisPtr->mClientCallback->onEnrollResult(devId,
+                msg->data.enroll.finger.fid,
+                msg->data.enroll.finger.gid,
+                msg->data.enroll.samples_remaining);
+            break;
+        case FINGERPRINT_TEMPLATE_REMOVED:
+            thisPtr->mClientCallback->onRemoved(devId,
+                msg->data.removed.finger.fid,
+                msg->data.removed.finger.gid,
+                msg->data.removed.remaining_templates);
+            break;
+        case FINGERPRINT_AUTHENTICATED:
+            if (msg->data.authenticated.finger.fid != 0) {
+                const uint8_t* hat =
+                    reinterpret_cast<const uint8_t *>(&msg->data.authenticated.hat);
+                const hidl_vec<uint8_t> token(
+                    std::vector<uint8_t>(hat, hat + sizeof(msg->data.authenticated.hat)));
+                thisPtr->mClientCallback->onAuthenticated(devId,
+                    msg->data.authenticated.finger.fid,
+                    msg->data.authenticated.finger.gid,
+                    token);
+            } else {
+                // Not a recognized fingerprint
+                thisPtr->mClientCallback->onAuthenticated(devId,
+                    msg->data.authenticated.finger.fid,
+                    msg->data.authenticated.finger.gid,
+                    hidl_vec<uint8_t>());
+            }
+            break;
+        case FINGERPRINT_TEMPLATE_ENUMERATING:
+            thisPtr->mClientCallback->onEnumerate(devId,
+                msg->data.enumerated.finger.fid,
+                msg->data.enumerated.finger.gid,
+                msg->data.enumerated.remaining_templates);
+            break;
     }
 }
 
diff --git a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.h b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.h
index 1f44a1c..5923c84 100644
--- a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.h
+++ b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2017 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.
@@ -43,7 +43,7 @@
 
 struct BiometricsFingerprint : public IBiometricsFingerprint {
 public:
-    BiometricsFingerprint(fingerprint_device_t *device);
+    BiometricsFingerprint();
     ~BiometricsFingerprint();
 
     // Method to wrap legacy HAL with BiometricsFingerprint class
@@ -60,68 +60,17 @@
     Return<RequestStatus> remove(uint32_t gid, uint32_t fid) override;
     Return<RequestStatus> setActiveGroup(uint32_t gid, const hidl_string& storePath) override;
     Return<RequestStatus> authenticate(uint64_t operationId, uint32_t gid) override;
-    static void notify(const fingerprint_msg_t *msg) {
-        if (mClientCallback == nullptr) {
-            ALOGE("Receiving callbacks before the client callback is registered.");
-            return;
-        }
-        const uint64_t devId = reinterpret_cast<uint64_t>(sDevice);
-        switch (msg->type) {
-            case FINGERPRINT_ERROR: {
-                int32_t vendorCode = 0;
-                FingerprintError result =
-                    VendorErrorFilter(msg->data.error, &vendorCode);
-                mClientCallback->onError(devId, result, vendorCode);
-                }
-                break;
-            case FINGERPRINT_ACQUIRED: {
-                int32_t vendorCode = 0;
-                FingerprintAcquiredInfo result =
-                    VendorAcquiredFilter(msg->data.acquired.acquired_info,
-                                         &vendorCode);
-                mClientCallback->onAcquired(devId, result, vendorCode);
-                }
-                break;
-            case FINGERPRINT_TEMPLATE_ENROLLING:
-                mClientCallback->onEnrollResult(devId,
-                    msg->data.enroll.finger.fid,
-                    msg->data.enroll.finger.gid,
-                    msg->data.enroll.samples_remaining);
-                break;
-            case FINGERPRINT_TEMPLATE_REMOVED:
-                mClientCallback->onRemoved(devId,
-                    msg->data.removed.finger.fid,
-                    msg->data.removed.finger.gid,
-                    msg->data.removed.remaining_templates);
-                break;
-            case FINGERPRINT_AUTHENTICATED:
-                if (msg->data.authenticated.finger.fid != 0) {
-                    const uint8_t* hat =
-                            reinterpret_cast<const uint8_t *>(&msg->data.authenticated.hat);
-                    notifyKeystore(hat, sizeof(msg->data.authenticated.hat));
-                }
-                mClientCallback->onAuthenticated(devId,
-                    msg->data.authenticated.finger.fid,
-                    msg->data.authenticated.finger.gid);
-                break;
-            case FINGERPRINT_TEMPLATE_ENUMERATING:
-                mClientCallback->onEnumerate(devId,
-                    msg->data.enumerated.finger.fid,
-                    msg->data.enumerated.finger.gid,
-                    msg->data.enumerated.remaining_templates);
-                break;
-        }
-    }
+
 private:
-    Return<RequestStatus> ErrorFilter(int32_t error);
-    static void notifyKeystore(const uint8_t *auth_token, const size_t auth_token_length);
-    static FingerprintError VendorErrorFilter(int32_t error,
-            int32_t* vendorCode);
-    static FingerprintAcquiredInfo VendorAcquiredFilter(int32_t error,
-            int32_t* vendorCode);
-    static sp<IBiometricsFingerprintClientCallback> mClientCallback;
+    static fingerprint_device_t* openHal();
+    static void notify(const fingerprint_msg_t *msg); /* Static callback for legacy HAL implementation */
+    static Return<RequestStatus> ErrorFilter(int32_t error);
+    static FingerprintError VendorErrorFilter(int32_t error, int32_t* vendorCode);
+    static FingerprintAcquiredInfo VendorAcquiredFilter(int32_t error, int32_t* vendorCode);
+    static BiometricsFingerprint* sInstance;
+
+    sp<IBiometricsFingerprintClientCallback> mClientCallback;
     fingerprint_device_t *mDevice;
-    static fingerprint_device_t *sDevice; // TODO: allow multiple drivers
 };
 
 }  // namespace implementation
diff --git a/biometrics/fingerprint/2.1/default/android.hardware.biometrics.fingerprint@2.1-service.rc b/biometrics/fingerprint/2.1/default/android.hardware.biometrics.fingerprint@2.1-service.rc
index 3de52ad..aa767a6 100644
--- a/biometrics/fingerprint/2.1/default/android.hardware.biometrics.fingerprint@2.1-service.rc
+++ b/biometrics/fingerprint/2.1/default/android.hardware.biometrics.fingerprint@2.1-service.rc
@@ -1,4 +1,4 @@
-service fps_hal /system/bin/hw/android.hardware.biometrics.fingerprint@2.1-service
+service fps_hal /vendor/bin/hw/android.hardware.biometrics.fingerprint@2.1-service
     # "class hal" causes a race condition on some devices due to files created
     # in /data. As a workaround, postpone startup until later in boot once
     # /data is mounted.
diff --git a/biometrics/fingerprint/2.1/default/service.cpp b/biometrics/fingerprint/2.1/default/service.cpp
index 0563acb..d6b91c6 100644
--- a/biometrics/fingerprint/2.1/default/service.cpp
+++ b/biometrics/fingerprint/2.1/default/service.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2017 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.
diff --git a/biometrics/fingerprint/2.1/types.hal b/biometrics/fingerprint/2.1/types.hal
index f462906..e389773 100644
--- a/biometrics/fingerprint/2.1/types.hal
+++ b/biometrics/fingerprint/2.1/types.hal
@@ -49,6 +49,8 @@
  * followed by ERROR_CANCELED.
  */
 enum FingerprintError : int32_t {
+  /* Used for testing, no error returned */
+  ERROR_NO_ERROR = 0,
   /* The hardware has an error that can't be resolved. */
   ERROR_HW_UNAVAILABLE = 1,
   /* Bad data; operation can't continue */
diff --git a/biometrics/fingerprint/2.1/vts/functional/Android.bp b/biometrics/fingerprint/2.1/vts/functional/Android.bp
new file mode 100644
index 0000000..7e5e699
--- /dev/null
+++ b/biometrics/fingerprint/2.1/vts/functional/Android.bp
@@ -0,0 +1,37 @@
+//
+// Copyright (C) 2017 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: "VtsHalBiometricsFingerprintV2_1TargetTest",
+    gtest: true,
+    srcs: ["VtsHalBiometricsFingerprintV2_1TargetTest.cpp"],
+    shared_libs: [
+        "libbase",
+        "libhidltransport",
+        "libhardware",
+        "libhwbinder",
+        "libhidlbase",
+        "liblog",
+        "libutils",
+        "android.hardware.biometrics.fingerprint@2.1",
+    ],
+    static_libs: ["libgtest"],
+    cflags: [
+        "-O0",
+        "-g",
+    ]
+}
+
diff --git a/biometrics/fingerprint/2.1/vts/functional/VtsHalBiometricsFingerprintV2_1TargetTest.cpp b/biometrics/fingerprint/2.1/vts/functional/VtsHalBiometricsFingerprintV2_1TargetTest.cpp
new file mode 100644
index 0000000..9138000
--- /dev/null
+++ b/biometrics/fingerprint/2.1/vts/functional/VtsHalBiometricsFingerprintV2_1TargetTest.cpp
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2017 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 "fingerprint_hidl_hal_test"
+
+#include <android-base/logging.h>
+#include <android/hardware/biometrics/fingerprint/2.1/IBiometricsFingerprint.h>
+#include <android/hardware/biometrics/fingerprint/2.1/IBiometricsFingerprintClientCallback.h>
+#include <chrono>
+#include <gtest/gtest.h>
+#include <hidl/HidlSupport.h>
+#include <hidl/HidlTransportSupport.h>
+
+using android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprint;
+using android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprintClientCallback;
+using android::hardware::biometrics::fingerprint::V2_1::FingerprintAcquiredInfo;
+using android::hardware::biometrics::fingerprint::V2_1::FingerprintError;
+using android::hardware::biometrics::fingerprint::V2_1::RequestStatus;
+using android::hardware::hidl_vec;
+using android::hardware::Return;
+
+#define SERVICE_NAME "fingerprint_hal"
+
+class FingerprintHidlTest : public ::testing::Test,
+    public IBiometricsFingerprintClientCallback {
+
+protected:
+    android::sp<IBiometricsFingerprint> service;
+    FingerprintError err;
+    // State changes should occur within this threshold, otherwise the
+    // framework' will assume things have broken.
+    std::chrono::seconds threshold;
+
+public:
+    FingerprintHidlTest ():
+        err(FingerprintError::ERROR_NO_ERROR), threshold(1) {}
+
+    virtual void SetUp() override {
+        service = IBiometricsFingerprint::getService(SERVICE_NAME);
+
+        ASSERT_NE(service, nullptr);
+        clearErr();
+
+        // TODO: instantly fail any test that receives a death notification
+    }
+
+    virtual void TearDown() override {}
+
+    // implement methods of IBiometricsFingerprintClientCallback
+    virtual Return<void> onEnrollResult(uint64_t, uint32_t, uint32_t, uint32_t)
+            override {
+        return Return<void>();
+    }
+    virtual Return<void> onAcquired(uint64_t, FingerprintAcquiredInfo, int32_t)
+            override {
+        return Return<void>();
+    }
+
+    virtual Return<void> onAuthenticated(uint64_t, uint32_t, uint32_t, const
+            hidl_vec<uint8_t>&) override {
+        return Return<void>();
+    }
+
+    virtual Return<void> onError(uint64_t, FingerprintError error, int32_t)
+            override {
+        err = error;
+        return Return<void>();
+    }
+
+    virtual Return<void> onRemoved(uint64_t, uint32_t, uint32_t, uint32_t)
+            override {
+        return Return<void>();
+    }
+
+    virtual Return<void> onEnumerate(uint64_t, uint32_t, uint32_t, uint32_t)
+            override {
+        return Return<void>();
+    }
+
+    void clearErr () {
+        err = FingerprintError::ERROR_NO_ERROR;
+    }
+};
+
+class FingerprintHidlEnvironment : public ::testing::Environment {
+public:
+    virtual void SetUp() {}
+    virtual void TearDown() {}
+};
+
+// The service should be reachable.
+TEST_F(FingerprintHidlTest, ConnectTest) {
+    Return<uint64_t> rc = service->setNotify(this);
+    EXPECT_NE(rc, 0UL);
+}
+
+// Cancel should always return ERROR_CANCELED from any starting state including
+// the IDLE state.
+TEST_F(FingerprintHidlTest, CancelTest) {
+    Return<uint64_t> rc = service->setNotify(this);
+    EXPECT_NE(rc, 0UL);
+
+    auto start = std::chrono::system_clock::now();
+    Return<RequestStatus> res = service->cancel();
+    auto end = std::chrono::system_clock::now();
+    auto diff = end - start;
+
+    // check that we were able to make an IPC request successfully
+    EXPECT_EQ(RequestStatus::SYS_OK, res);
+    // check error should be ERROR_CANCELED
+    EXPECT_EQ(FingerprintError::ERROR_CANCELED, err);
+    // check that this did not take longer than a threshold
+    EXPECT_TRUE(diff <= threshold);
+}
+
+// A call to cancel should after any other method call should set the error
+// state to canceled.
+TEST_F(FingerprintHidlTest, AuthTest) {
+    Return<uint64_t> rc = service->setNotify(this);
+    EXPECT_NE(rc, 0UL);
+
+    Return<RequestStatus> res = service->authenticate(0, 0);
+    // check that we were able to make an IPC request successfully
+    EXPECT_EQ(RequestStatus::SYS_OK, res);
+
+    auto start = std::chrono::system_clock::now();
+    res = service->cancel();
+    auto end = std::chrono::system_clock::now();
+    auto diff = end - start;
+
+    // check that we were able to make an IPC request successfully
+    EXPECT_EQ(RequestStatus::SYS_OK, res);
+    // check error should be ERROR_CANCELED
+    EXPECT_EQ(FingerprintError::ERROR_CANCELED, err);
+    // check that this did not take longer than a threshold
+    EXPECT_TRUE(diff <= threshold);
+}
+
+int main(int argc, char **argv) {
+    ::testing::AddGlobalTestEnvironment(new FingerprintHidlEnvironment);
+    ::testing::InitGoogleTest(&argc, argv);
+    int status = RUN_ALL_TESTS();
+    LOG(INFO) << "Test result = " << status;
+    return status;
+}
diff --git a/bluetooth/1.0/Android.bp b/bluetooth/1.0/Android.bp
index 7928fb6..2373ceb 100644
--- a/bluetooth/1.0/Android.bp
+++ b/bluetooth/1.0/Android.bp
@@ -1,13 +1,20 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.bluetooth@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IBluetoothHci.hal",
+        "IBluetoothHciCallbacks.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.bluetooth@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.bluetooth@1.0",
     srcs: [
-        "types.hal",
-        "IBluetoothHci.hal",
-        "IBluetoothHciCallbacks.hal",
+        ":android.hardware.bluetooth@1.0_hal",
     ],
     out: [
         "android/hardware/bluetooth/1.0/types.cpp",
@@ -21,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.bluetooth@1.0",
     srcs: [
-        "types.hal",
-        "IBluetoothHci.hal",
-        "IBluetoothHciCallbacks.hal",
+        ":android.hardware.bluetooth@1.0_hal",
     ],
     out: [
         "android/hardware/bluetooth/1.0/types.h",
diff --git a/bluetooth/1.0/Android.mk b/bluetooth/1.0/Android.mk
index 7924cee..d824d5d 100644
--- a/bluetooth/1.0/Android.mk
+++ b/bluetooth/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.bluetooth@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -87,7 +87,7 @@
 LOCAL_MODULE := android.hardware.bluetooth@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/bluetooth/1.0/default/Android.bp b/bluetooth/1.0/default/Android.bp
index 32e5328..f82bc1f 100644
--- a/bluetooth/1.0/default/Android.bp
+++ b/bluetooth/1.0/default/Android.bp
@@ -17,7 +17,6 @@
     name: "android.hardware.bluetooth@1.0-impl",
     relative_install_path: "hw",
     srcs: [
-        "async_fd_watcher.cc",
         "bluetooth_hci.cc",
         "bluetooth_address.cc",
         "vendor_interface.cc",
@@ -33,10 +32,44 @@
         "liblog",
         "libutils",
     ],
+    static_libs: [
+        "android.hardware.bluetooth-async",
+    ],
+}
+
+cc_library_static {
+    name: "android.hardware.bluetooth-async",
+    srcs: [
+        "async_fd_watcher.cc",
+    ],
+    export_include_dirs: ["."],
+    shared_libs: [
+        "libbase",
+        "libcutils",
+        "liblog",
+        "libutils",
+    ],
+}
+
+cc_test {
+    name: "bluetooth-vendor-interface-unit-tests",
+    srcs: [
+        "test/async_fd_watcher_unittest.cc",
+    ],
+    local_include_dirs: [
+        "test",
+    ],
+    shared_libs: [
+        "libbase",
+        "liblog",
+    ],
+    static_libs: [
+        "android.hardware.bluetooth-async",
+    ],
 }
 
 cc_test_host {
-    name: "bluetooth-vendor-interface-unit-tests",
+    name: "bluetooth-address-unit-tests",
     srcs: [
         "bluetooth_address.cc",
         "test/bluetooth_address_test.cc",
diff --git a/bluetooth/1.0/default/async_fd_watcher.cc b/bluetooth/1.0/default/async_fd_watcher.cc
index 636b4b6..287d007 100644
--- a/bluetooth/1.0/default/async_fd_watcher.cc
+++ b/bluetooth/1.0/default/async_fd_watcher.cc
@@ -29,8 +29,7 @@
 namespace android {
 namespace hardware {
 namespace bluetooth {
-namespace V1_0 {
-namespace implementation {
+namespace async {
 
 int AsyncFdWatcher::WatchFdForNonBlockingReads(
     int file_descriptor, const ReadCallback& on_read_fd_ready_callback) {
@@ -42,11 +41,20 @@
   }
 
   // Start the thread if not started yet
-  int started = tryStartThread();
-  if (started != 0) {
-    return started;
+  return tryStartThread();
+}
+
+int AsyncFdWatcher::ConfigureTimeout(
+    const std::chrono::milliseconds timeout,
+    const TimeoutCallback& on_timeout_callback) {
+  // Add timeout and callback
+  {
+    std::unique_lock<std::mutex> guard(timeout_mutex_);
+    timeout_cb_ = on_timeout_callback;
+    timeout_ms_ = timeout;
   }
 
+  notifyThread();
   return 0;
 }
 
@@ -86,6 +94,11 @@
     read_fd_ = -1;
   }
 
+  {
+    std::unique_lock<std::mutex> guard(timeout_mutex_);
+    timeout_cb_ = nullptr;
+  }
+
   return 0;
 }
 
@@ -104,21 +117,43 @@
     FD_SET(notification_listen_fd_, &read_fds);
     FD_SET(read_fd_, &read_fds);
 
-    // Wait until there is data available to read on some FD
-    int nfds = std::max(notification_listen_fd_, read_fd_);
-    int retval = select(nfds + 1, &read_fds, NULL, NULL, NULL);
-    if (retval <= 0) continue;  // there was some error or a timeout
+    struct timeval timeout;
+    struct timeval* timeout_ptr = NULL;
+    if (timeout_ms_ > std::chrono::milliseconds(0)) {
+      timeout.tv_sec = timeout_ms_.count() / 1000;
+      timeout.tv_usec = (timeout_ms_.count() % 1000) * 1000;
+      timeout_ptr = &timeout;
+    }
 
-    // Read data from the notification FD
+    // Wait until there is data available to read on some FD.
+    int nfds = std::max(notification_listen_fd_, read_fd_);
+    int retval = select(nfds + 1, &read_fds, NULL, NULL, timeout_ptr);
+
+    // There was some error.
+    if (retval < 0) continue;
+
+    // Timeout.
+    if (retval == 0) {
+      // Allow the timeout callback to modify the timeout.
+      TimeoutCallback saved_cb;
+      {
+        std::unique_lock<std::mutex> guard(timeout_mutex_);
+        if (timeout_ms_ > std::chrono::milliseconds(0))
+          saved_cb = timeout_cb_;
+      }
+      if (saved_cb != nullptr)
+        saved_cb();
+      continue;
+    }
+
+    // Read data from the notification FD.
     if (FD_ISSET(notification_listen_fd_, &read_fds)) {
       char buffer[] = {0};
       TEMP_FAILURE_RETRY(read(notification_listen_fd_, buffer, 1));
+      continue;
     }
 
-    // Make sure we're still running
-    if (!running_) break;
-
-    // Invoke the data ready callback if appropriate
+    // Invoke the data ready callback if appropriate.
     if (FD_ISSET(read_fd_, &read_fds)) {
       std::unique_lock<std::mutex> guard(internal_mutex_);
       if (cb_) cb_(read_fd_);
@@ -126,8 +161,7 @@
   }
 }
 
-} // namespace implementation
-} // namespace V1_0
+} // namespace async
 } // namespace bluetooth
 } // namespace hardware
 } // namespace android
diff --git a/bluetooth/1.0/default/async_fd_watcher.h b/bluetooth/1.0/default/async_fd_watcher.h
index 1e4da8c..3f7ff54 100644
--- a/bluetooth/1.0/default/async_fd_watcher.h
+++ b/bluetooth/1.0/default/async_fd_watcher.h
@@ -22,10 +22,10 @@
 namespace android {
 namespace hardware {
 namespace bluetooth {
-namespace V1_0 {
-namespace implementation {
+namespace async {
 
 using ReadCallback = std::function<void(int)>;
+using TimeoutCallback = std::function<void(void)>;
 
 class AsyncFdWatcher {
  public:
@@ -34,6 +34,8 @@
 
   int WatchFdForNonBlockingReads(int file_descriptor,
                                  const ReadCallback& on_read_fd_ready_callback);
+  int ConfigureTimeout(const std::chrono::milliseconds timeout,
+                       const TimeoutCallback& on_timeout_callback);
   void StopWatchingFileDescriptor();
 
  private:
@@ -48,16 +50,18 @@
   std::atomic_bool running_{false};
   std::thread thread_;
   std::mutex internal_mutex_;
+  std::mutex timeout_mutex_;
 
   int read_fd_;
   int notification_listen_fd_;
   int notification_write_fd_;
   ReadCallback cb_;
+  TimeoutCallback timeout_cb_;
+  std::chrono::milliseconds timeout_ms_;
 };
 
 
-} // namespace implementation
-} // namespace V1_0
+} // namespace async
 } // namespace bluetooth
 } // namespace hardware
 } // namespace android
diff --git a/bluetooth/1.0/default/bluetooth_address.cc b/bluetooth/1.0/default/bluetooth_address.cc
index b917de9..656d78d 100644
--- a/bluetooth/1.0/default/bluetooth_address.cc
+++ b/bluetooth/1.0/default/bluetooth_address.cc
@@ -83,6 +83,34 @@
     valid_bda = true;
   }
 
+  /* Generate new BDA if necessary */
+  if (!valid_bda) {
+    char bdstr[kStringLength + 1];
+
+    /* No autogen BDA. Generate one now. */
+    local_addr[0] = 0x22;
+    local_addr[1] = 0x22;
+    local_addr[2] = (uint8_t)rand();
+    local_addr[3] = (uint8_t)rand();
+    local_addr[4] = (uint8_t)rand();
+    local_addr[5] = (uint8_t)rand();
+
+    /* Convert to ascii, and store as a persistent property */
+    bytes_to_string(local_addr, bdstr);
+
+    ALOGE("%s: No preset BDA! Generating BDA: %s for prop %s", __func__,
+          (char*)bdstr, PERSIST_BDADDR_PROPERTY);
+    ALOGE("%s: This is a bug in the platform!  Please fix!", __func__);
+
+    if (property_set(PERSIST_BDADDR_PROPERTY, (char*)bdstr) < 0) {
+      ALOGE("%s: Failed to set random BDA in prop %s", __func__,
+            PERSIST_BDADDR_PROPERTY);
+      valid_bda = false;
+    } else {
+      valid_bda = true;
+    }
+  }
+
   return valid_bda;
 }
 
diff --git a/bluetooth/1.0/default/bluetooth_hci.cc b/bluetooth/1.0/default/bluetooth_hci.cc
index 1559119..6cea623 100644
--- a/bluetooth/1.0/default/bluetooth_hci.cc
+++ b/bluetooth/1.0/default/bluetooth_hci.cc
@@ -83,8 +83,7 @@
 
 void BluetoothHci::sendDataToController(const uint8_t type,
                                         const hidl_vec<uint8_t>& data) {
-  VendorInterface::get()->Send(&type, 1);
-  VendorInterface::get()->Send(data.data(), data.size());
+  VendorInterface::get()->Send(type, data.data(), data.size());
 }
 
 IBluetoothHci* HIDL_FETCH_IBluetoothHci(const char* /* name */) {
diff --git a/bluetooth/1.0/default/hci_internals.h b/bluetooth/1.0/default/hci_internals.h
index d839590..d5714be 100644
--- a/bluetooth/1.0/default/hci_internals.h
+++ b/bluetooth/1.0/default/hci_internals.h
@@ -42,3 +42,6 @@
 const size_t HCI_LENGTH_OFFSET_EVT = 1;
 
 const size_t HCI_PREAMBLE_SIZE_MAX = HCI_ACL_PREAMBLE_SIZE;
+
+// Event codes (Volume 2, Part E, 7.7.14)
+const uint8_t HCI_COMMAND_COMPLETE_EVENT = 0x0E;
diff --git a/bluetooth/1.0/default/test/async_fd_watcher_unittest.cc b/bluetooth/1.0/default/test/async_fd_watcher_unittest.cc
new file mode 100644
index 0000000..a7f5bda
--- /dev/null
+++ b/bluetooth/1.0/default/test/async_fd_watcher_unittest.cc
@@ -0,0 +1,336 @@
+//
+// Copyright 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "async_fd_watcher.h"
+#include <gtest/gtest.h>
+#include <cstdint>
+#include <cstring>
+#include <vector>
+
+#include <netdb.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <utils/Log.h>
+
+namespace android {
+namespace hardware {
+namespace bluetooth {
+namespace V1_0 {
+namespace implementation {
+
+using android::hardware::bluetooth::async::AsyncFdWatcher;
+
+class AsyncFdWatcherSocketTest : public ::testing::Test {
+ public:
+  static const uint16_t kPort = 6111;
+  static const size_t kBufferSize = 16;
+
+  bool CheckBufferEquals() {
+    return strcmp(server_buffer_, client_buffer_) == 0;
+  }
+
+ protected:
+  int StartServer() {
+    ALOGD("%s", __func__);
+    struct sockaddr_in serv_addr;
+    int fd = socket(AF_INET, SOCK_STREAM, 0);
+    EXPECT_FALSE(fd < 0);
+
+    memset(&serv_addr, 0, sizeof(serv_addr));
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+    serv_addr.sin_port = htons(kPort);
+    int reuse_flag = 1;
+    EXPECT_FALSE(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse_flag,
+                            sizeof(reuse_flag)) < 0);
+    EXPECT_FALSE(bind(fd, (sockaddr*)&serv_addr, sizeof(serv_addr)) < 0);
+
+    ALOGD("%s before listen", __func__);
+    listen(fd, 1);
+    return fd;
+  }
+
+  int AcceptConnection(int fd) {
+    ALOGD("%s", __func__);
+    struct sockaddr_in cli_addr;
+    memset(&cli_addr, 0, sizeof(cli_addr));
+    socklen_t clilen = sizeof(cli_addr);
+
+    int connection_fd = accept(fd, (struct sockaddr*)&cli_addr, &clilen);
+    EXPECT_FALSE(connection_fd < 0);
+
+    return connection_fd;
+  }
+
+  void ReadIncomingMessage(int fd) {
+    ALOGD("%s", __func__);
+    int n = TEMP_FAILURE_RETRY(read(fd, server_buffer_, kBufferSize - 1));
+    EXPECT_FALSE(n < 0);
+
+    if (n == 0) {  // got EOF
+      ALOGD("%s: EOF", __func__);
+    } else {
+      ALOGD("%s: Got something", __func__);
+      n = write(fd, "1", 1);
+    }
+  }
+
+  void SetUp() override {
+    ALOGD("%s", __func__);
+    memset(server_buffer_, 0, kBufferSize);
+    memset(client_buffer_, 0, kBufferSize);
+  }
+
+  void ConfigureServer() {
+    socket_fd_ = StartServer();
+
+    conn_watcher_.WatchFdForNonBlockingReads(socket_fd_, [this](int fd) {
+      int connection_fd = AcceptConnection(fd);
+      ALOGD("%s: Conn_watcher fd = %d", __func__, fd);
+
+      conn_watcher_.ConfigureTimeout(std::chrono::seconds(0), [this]() {
+        bool connection_timeout_cleared = false;
+        ASSERT_TRUE(connection_timeout_cleared);
+      });
+
+      ALOGD("%s: 3", __func__);
+      async_fd_watcher_.WatchFdForNonBlockingReads(
+          connection_fd, [this](int fd) { ReadIncomingMessage(fd); });
+
+      // Time out if it takes longer than a second.
+      SetTimeout(std::chrono::seconds(1));
+    });
+    conn_watcher_.ConfigureTimeout(std::chrono::seconds(1), [this]() {
+      bool connection_timeout = true;
+      ASSERT_FALSE(connection_timeout);
+    });
+  }
+
+  void CleanUpServer() {
+    async_fd_watcher_.StopWatchingFileDescriptor();
+    conn_watcher_.StopWatchingFileDescriptor();
+    close(socket_fd_);
+  }
+
+  void TearDown() override {
+    ALOGD("%s 3", __func__);
+    EXPECT_TRUE(CheckBufferEquals());
+  }
+
+  void OnTimeout() {
+    ALOGD("%s", __func__);
+    timed_out_ = true;
+  }
+
+  void ClearTimeout() {
+    ALOGD("%s", __func__);
+    timed_out_ = false;
+  }
+
+  bool TimedOut() {
+    ALOGD("%s %d", __func__, timed_out_ ? 1 : 0);
+    return timed_out_;
+  }
+
+  void SetTimeout(std::chrono::milliseconds timeout_ms) {
+    ALOGD("%s", __func__);
+    async_fd_watcher_.ConfigureTimeout(timeout_ms, [this]() { OnTimeout(); });
+    ClearTimeout();
+  }
+
+  int ConnectClient() {
+    ALOGD("%s", __func__);
+    int socket_cli_fd = socket(AF_INET, SOCK_STREAM, 0);
+    EXPECT_FALSE(socket_cli_fd < 0);
+
+    struct sockaddr_in serv_addr;
+    memset((void*)&serv_addr, 0, sizeof(serv_addr));
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+    serv_addr.sin_port = htons(kPort);
+
+    int result =
+        connect(socket_cli_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
+    EXPECT_FALSE(result < 0);
+
+    return socket_cli_fd;
+  }
+
+  void WriteFromClient(int socket_cli_fd) {
+    ALOGD("%s", __func__);
+    strcpy(client_buffer_, "1");
+    int n = write(socket_cli_fd, client_buffer_, strlen(client_buffer_));
+    EXPECT_TRUE(n > 0);
+  }
+
+  void AwaitServerResponse(int socket_cli_fd) {
+    ALOGD("%s", __func__);
+    int n = read(socket_cli_fd, client_buffer_, 1);
+    ALOGD("%s done", __func__);
+    EXPECT_TRUE(n > 0);
+  }
+
+ private:
+  AsyncFdWatcher async_fd_watcher_;
+  AsyncFdWatcher conn_watcher_;
+  int socket_fd_;
+  char server_buffer_[kBufferSize];
+  char client_buffer_[kBufferSize];
+  bool timed_out_;
+};
+
+// Use a single AsyncFdWatcher to signal a connection to the server socket.
+TEST_F(AsyncFdWatcherSocketTest, Connect) {
+  int socket_fd = StartServer();
+
+  AsyncFdWatcher conn_watcher;
+  conn_watcher.WatchFdForNonBlockingReads(socket_fd, [this](int fd) {
+    int connection_fd = AcceptConnection(fd);
+    close(connection_fd);
+  });
+
+  // Fail if the client doesn't connect within 1 second.
+  conn_watcher.ConfigureTimeout(std::chrono::seconds(1), [this]() {
+    bool connection_timeout = true;
+    ASSERT_FALSE(connection_timeout);
+  });
+
+  ConnectClient();
+  conn_watcher.StopWatchingFileDescriptor();
+  close(socket_fd);
+}
+
+// Use a single AsyncFdWatcher to signal a connection to the server socket.
+TEST_F(AsyncFdWatcherSocketTest, TimedOutConnect) {
+  int socket_fd = StartServer();
+  bool timed_out = false;
+  bool* timeout_ptr = &timed_out;
+
+  AsyncFdWatcher conn_watcher;
+  conn_watcher.WatchFdForNonBlockingReads(socket_fd, [this](int fd) {
+    int connection_fd = AcceptConnection(fd);
+    close(connection_fd);
+  });
+
+  // Set the timeout flag after 100ms.
+  conn_watcher.ConfigureTimeout(std::chrono::milliseconds(100),
+                                [this, timeout_ptr]() { *timeout_ptr = true; });
+  EXPECT_FALSE(timed_out);
+  sleep(1);
+  EXPECT_TRUE(timed_out);
+  conn_watcher.StopWatchingFileDescriptor();
+  close(socket_fd);
+}
+
+// Modify the timeout in a timeout callback.
+TEST_F(AsyncFdWatcherSocketTest, TimedOutSchedulesTimeout) {
+  int socket_fd = StartServer();
+  bool timed_out = false;
+  bool timed_out2 = false;
+
+  AsyncFdWatcher conn_watcher;
+  conn_watcher.WatchFdForNonBlockingReads(socket_fd, [this](int fd) {
+    int connection_fd = AcceptConnection(fd);
+    close(connection_fd);
+  });
+
+  // Set a timeout flag in each callback.
+  conn_watcher.ConfigureTimeout(
+      std::chrono::milliseconds(500),
+      [this, &conn_watcher, &timed_out, &timed_out2]() {
+        timed_out = true;
+        conn_watcher.ConfigureTimeout(std::chrono::seconds(1),
+                                      [&timed_out2]() { timed_out2 = true; });
+      });
+  EXPECT_FALSE(timed_out);
+  EXPECT_FALSE(timed_out2);
+  sleep(1);
+  EXPECT_TRUE(timed_out);
+  EXPECT_FALSE(timed_out2);
+  sleep(1);
+  EXPECT_TRUE(timed_out);
+  EXPECT_TRUE(timed_out2);
+  conn_watcher.StopWatchingFileDescriptor();
+  close(socket_fd);
+}
+
+// Use two AsyncFdWatchers to set up a server socket.
+TEST_F(AsyncFdWatcherSocketTest, ClientServer) {
+  ConfigureServer();
+  int socket_cli_fd = ConnectClient();
+
+  WriteFromClient(socket_cli_fd);
+
+  AwaitServerResponse(socket_cli_fd);
+
+  close(socket_cli_fd);
+  CleanUpServer();
+}
+
+// Use two AsyncFdWatchers to set up a server socket, which times out.
+TEST_F(AsyncFdWatcherSocketTest, TimeOutTest) {
+  ConfigureServer();
+  int socket_cli_fd = ConnectClient();
+
+  while (!TimedOut()) sleep(1);
+
+  close(socket_cli_fd);
+  CleanUpServer();
+}
+
+// Use two AsyncFdWatchers to set up a server socket, which times out.
+TEST_F(AsyncFdWatcherSocketTest, RepeatedTimeOutTest) {
+  ConfigureServer();
+  int socket_cli_fd = ConnectClient();
+  ClearTimeout();
+
+  // Time out when there are no writes.
+  EXPECT_FALSE(TimedOut());
+  sleep(2);
+  EXPECT_TRUE(TimedOut());
+  ClearTimeout();
+
+  // Don't time out when there is a write.
+  WriteFromClient(socket_cli_fd);
+  AwaitServerResponse(socket_cli_fd);
+  EXPECT_FALSE(TimedOut());
+  ClearTimeout();
+
+  // Time out when the write is late.
+  sleep(2);
+  WriteFromClient(socket_cli_fd);
+  AwaitServerResponse(socket_cli_fd);
+  EXPECT_TRUE(TimedOut());
+  ClearTimeout();
+
+  // Time out when there is a pause after a write.
+  WriteFromClient(socket_cli_fd);
+  sleep(2);
+  AwaitServerResponse(socket_cli_fd);
+  EXPECT_TRUE(TimedOut());
+  ClearTimeout();
+
+  close(socket_cli_fd);
+  CleanUpServer();
+}
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace bluetooth
+} // namespace hardware
+} // namespace android
diff --git a/bluetooth/1.0/default/test/bluetooth_address_test.cc b/bluetooth/1.0/default/test/bluetooth_address_test.cc
index 9f80ec2..adcd9c1 100644
--- a/bluetooth/1.0/default/test/bluetooth_address_test.cc
+++ b/bluetooth/1.0/default/test/bluetooth_address_test.cc
@@ -219,10 +219,18 @@
   EXPECT_TRUE(BluetoothAddress::get_local_address(address));
   EXPECT_TRUE(memcmp(address, kTestAddr1_bytes, BluetoothAddress::kBytes) == 0);
 
-  // File contains a zero address.
+  // File contains a zero address.  A random address will be generated.
   FileWriteString(kAddrPath, kZeros);
   EXPECT_TRUE(property_set(PROPERTY_BT_BDADDR_PATH, kAddrPath) == 0);
-  EXPECT_FALSE(BluetoothAddress::get_local_address(address));
+  EXPECT_TRUE(property_set(PERSIST_BDADDR_PROPERTY, kTestAddrBad1) == 0);
+  EXPECT_TRUE(BluetoothAddress::get_local_address(address));
+  EXPECT_TRUE(memcmp(address, kZeros_bytes, BluetoothAddress::kBytes) != 0);
+  char prop[PROP_VALUE_MAX] = "Before reading";
+  EXPECT_TRUE(property_get(PERSIST_BDADDR_PROPERTY, prop, NULL) ==
+              BluetoothAddress::kStringLength);
+  char address_str[BluetoothAddress::kStringLength + 1];
+  BluetoothAddress::bytes_to_string(address, address_str);
+  EXPECT_TRUE(memcmp(address_str, prop, BluetoothAddress::kStringLength) == 0);
 
   // Factory property contains an address.
   EXPECT_TRUE(property_set(PERSIST_BDADDR_PROPERTY, kTestAddrBad1) == 0);
diff --git a/bluetooth/1.0/default/vendor_interface.cc b/bluetooth/1.0/default/vendor_interface.cc
index 20b30ae..7737dd2 100644
--- a/bluetooth/1.0/default/vendor_interface.cc
+++ b/bluetooth/1.0/default/vendor_interface.cc
@@ -16,6 +16,8 @@
 
 #include "vendor_interface.h"
 
+#include <assert.h>
+
 #define LOG_TAG "android.hardware.bluetooth@1.0-impl"
 #include <android-base/logging.h>
 #include <cutils/properties.h>
@@ -37,7 +39,16 @@
 using android::hardware::bluetooth::V1_0::implementation::VendorInterface;
 using android::hardware::hidl_vec;
 
-tINT_CMD_CBACK internal_command_cb;
+struct {
+  tINT_CMD_CBACK cb;
+  uint16_t opcode;
+} internal_command;
+
+// True when LPM is not enabled yet or wake is not asserted.
+bool lpm_wake_deasserted;
+uint32_t lpm_timeout_ms;
+bool recent_activity_flag;
+
 VendorInterface* g_vendor_interface = nullptr;
 
 const size_t preamble_size_for_type[] = {
@@ -47,11 +58,10 @@
     0, HCI_LENGTH_OFFSET_CMD, HCI_LENGTH_OFFSET_ACL, HCI_LENGTH_OFFSET_SCO,
     HCI_LENGTH_OFFSET_EVT};
 
-size_t HciGetPacketLengthForType(HciPacketType type,
-                                 const hidl_vec<uint8_t>& packet) {
+size_t HciGetPacketLengthForType(HciPacketType type, const uint8_t* preamble) {
   size_t offset = packet_length_offset_for_type[type];
-  if (type != HCI_PACKET_TYPE_ACL_DATA) return packet[offset];
-  return (((packet[offset + 1]) << 8) | packet[offset]);
+  if (type != HCI_PACKET_TYPE_ACL_DATA) return preamble[offset];
+  return (((preamble[offset + 1]) << 8) | preamble[offset]);
 }
 
 HC_BT_HDR* WrapPacketAndCopy(uint16_t event, const hidl_vec<uint8_t>& data) {
@@ -67,13 +77,55 @@
   return packet;
 }
 
+size_t write_safely(int fd, const uint8_t* data, size_t length) {
+  size_t transmitted_length = 0;
+  while (length > 0) {
+    ssize_t ret =
+        TEMP_FAILURE_RETRY(write(fd, data + transmitted_length, length));
+
+    if (ret == -1) {
+      if (errno == EAGAIN) continue;
+      ALOGE("%s error writing to UART (%s)", __func__, strerror(errno));
+      break;
+
+    } else if (ret == 0) {
+      // Nothing written :(
+      ALOGE("%s zero bytes written - something went wrong...", __func__);
+      break;
+    }
+
+    transmitted_length += ret;
+    length -= ret;
+  }
+
+  return transmitted_length;
+}
+
+bool internal_command_event_match(const hidl_vec<uint8_t>& packet) {
+  uint8_t event_code = packet[0];
+  if (event_code != HCI_COMMAND_COMPLETE_EVENT) {
+    ALOGE("%s: Unhandled event type %02X", __func__, event_code);
+    return false;
+  }
+
+  size_t opcode_offset = HCI_EVENT_PREAMBLE_SIZE + 1;  // Skip num packets.
+
+  uint16_t opcode = packet[opcode_offset] | (packet[opcode_offset + 1] << 8);
+
+  ALOGV("%s internal_command.opcode = %04X opcode = %04x", __func__,
+        internal_command.opcode, opcode);
+  return opcode == internal_command.opcode;
+}
+
 uint8_t transmit_cb(uint16_t opcode, void* buffer, tINT_CMD_CBACK callback) {
-  ALOGV("%s opcode: 0x%04x, ptr: %p", __func__, opcode, buffer);
-  internal_command_cb = callback;
+  ALOGV("%s opcode: 0x%04x, ptr: %p, cb: %p", __func__, opcode, buffer,
+        callback);
+  internal_command.cb = callback;
+  internal_command.opcode = opcode;
   uint8_t type = HCI_PACKET_TYPE_COMMAND;
-  VendorInterface::get()->Send(&type, 1);
   HC_BT_HDR* bt_hdr = reinterpret_cast<HC_BT_HDR*>(buffer);
-  VendorInterface::get()->Send(bt_hdr->data, bt_hdr->len);
+  VendorInterface::get()->Send(type, bt_hdr->data, bt_hdr->len);
+  delete[] reinterpret_cast<uint8_t*>(buffer);
   return true;
 }
 
@@ -137,7 +189,7 @@
         std::chrono::steady_clock::now() - start_time_;
     double s = duration.count();
     if (s == 0) return;
-    ALOGD("Firmware configured in %.3fs", s);
+    ALOGI("Firmware configured in %.3fs", s);
   }
 
  private:
@@ -219,11 +271,14 @@
     return false;
   }
 
-  ALOGD("%s UART fd: %d", __func__, uart_fd_);
+  ALOGI("%s UART fd: %d", __func__, uart_fd_);
 
   fd_watcher_.WatchFdForNonBlockingReads(uart_fd_,
                                          [this](int fd) { OnDataReady(fd); });
 
+  // Initially, the power management is off.
+  lpm_wake_deasserted = true;
+
   // Start configuring the firmware
   firmware_startup_timer_ = new FirmwareStartupTimer();
   lib_interface_->op(BT_VND_OP_FW_CFG, nullptr);
@@ -235,6 +290,9 @@
   fd_watcher_.StopWatchingFileDescriptor();
 
   if (lib_interface_ != nullptr) {
+    bt_vendor_lpm_mode_t mode = BT_VND_LPM_DISABLE;
+    lib_interface_->op(BT_VND_OP_LPM_SET_MODE, &mode);
+
     lib_interface_->op(BT_VND_OP_USERIAL_CLOSE, nullptr);
     uart_fd_ = INVALID_FD;
     int power_state = BT_VND_PWR_OFF;
@@ -252,35 +310,31 @@
   }
 }
 
-size_t VendorInterface::Send(const uint8_t* data, size_t length) {
+size_t VendorInterface::Send(uint8_t type, const uint8_t* data, size_t length) {
   if (uart_fd_ == INVALID_FD) return 0;
 
-  size_t transmitted_length = 0;
-  while (length > 0) {
-    ssize_t ret =
-        TEMP_FAILURE_RETRY(write(uart_fd_, data + transmitted_length, length));
+  recent_activity_flag = true;
 
-    if (ret == -1) {
-      if (errno == EAGAIN) continue;
-      ALOGE("%s error writing to UART (%s)", __func__, strerror(errno));
-      break;
-
-    } else if (ret == 0) {
-      // Nothing written :(
-      ALOGE("%s zero bytes written - something went wrong...", __func__);
-      break;
-    }
-
-    transmitted_length += ret;
-    length -= ret;
+  if (lpm_wake_deasserted == true) {
+    // Restart the timer.
+    fd_watcher_.ConfigureTimeout(std::chrono::milliseconds(lpm_timeout_ms),
+                                 [this]() { OnTimeout(); });
+    // Assert wake.
+    lpm_wake_deasserted = false;
+    bt_vendor_lpm_wake_state_t wakeState = BT_VND_LPM_WAKE_ASSERT;
+    lib_interface_->op(BT_VND_OP_LPM_WAKE_SET_STATE, &wakeState);
+    ALOGV("%s: Sent wake before (%02x)", __func__, data[0] | (data[1] << 8));
   }
 
-  return transmitted_length;
+  int rv = write_safely(uart_fd_, &type, sizeof(type));
+  if (rv == sizeof(type))
+    rv = write_safely(uart_fd_, data, length);
+
+  return rv;
 }
 
 void VendorInterface::OnFirmwareConfigured(uint8_t result) {
   ALOGD("%s result: %d", __func__, result);
-  internal_command_cb = nullptr;
 
   if (firmware_startup_timer_ != nullptr) {
     delete firmware_startup_timer_;
@@ -291,6 +345,29 @@
     initialize_complete_cb_(result == 0);
     initialize_complete_cb_ = nullptr;
   }
+
+  lib_interface_->op(BT_VND_OP_GET_LPM_IDLE_TIMEOUT, &lpm_timeout_ms);
+  ALOGI("%s: lpm_timeout_ms %d", __func__, lpm_timeout_ms);
+
+  bt_vendor_lpm_mode_t mode = BT_VND_LPM_ENABLE;
+  lib_interface_->op(BT_VND_OP_LPM_SET_MODE, &mode);
+
+  ALOGD("%s Calling StartLowPowerWatchdog()", __func__);
+  fd_watcher_.ConfigureTimeout(std::chrono::milliseconds(lpm_timeout_ms),
+                               [this]() { OnTimeout(); });
+}
+
+void VendorInterface::OnTimeout() {
+  ALOGV("%s", __func__);
+  if (recent_activity_flag == false) {
+    lpm_wake_deasserted = true;
+    bt_vendor_lpm_wake_state_t wakeState = BT_VND_LPM_WAKE_DEASSERT;
+    lib_interface_->op(BT_VND_OP_LPM_WAKE_SET_STATE, &wakeState);
+    fd_watcher_.ConfigureTimeout(std::chrono::seconds(0), []() {
+      ALOGE("Zero timeout! Should never happen.");
+    });
+  }
+  recent_activity_flag = false;
 }
 
 void VendorInterface::OnDataReady(int fd) {
@@ -303,9 +380,8 @@
       // TODO(eisenbach): Check for workaround(s)
       CHECK(hci_packet_type_ >= HCI_PACKET_TYPE_ACL_DATA &&
             hci_packet_type_ <= HCI_PACKET_TYPE_EVENT)
-          << "buffer[0] = " << buffer[0];
+          << "buffer[0] = " << static_cast<unsigned int>(buffer[0]);
       hci_parser_state_ = HCI_TYPE_READY;
-      hci_packet_.resize(HCI_PREAMBLE_SIZE_MAX);
       hci_packet_bytes_remaining_ = preamble_size_for_type[hci_packet_type_];
       hci_packet_bytes_read_ = 0;
       break;
@@ -313,16 +389,18 @@
 
     case HCI_TYPE_READY: {
       size_t bytes_read = TEMP_FAILURE_RETRY(
-          read(fd, hci_packet_.data() + hci_packet_bytes_read_,
+          read(fd, hci_packet_preamble_ + hci_packet_bytes_read_,
                hci_packet_bytes_remaining_));
       CHECK(bytes_read > 0);
       hci_packet_bytes_remaining_ -= bytes_read;
       hci_packet_bytes_read_ += bytes_read;
       if (hci_packet_bytes_remaining_ == 0) {
         size_t packet_length =
-            HciGetPacketLengthForType(hci_packet_type_, hci_packet_);
+            HciGetPacketLengthForType(hci_packet_type_, hci_packet_preamble_);
         hci_packet_.resize(preamble_size_for_type[hci_packet_type_] +
                            packet_length);
+        memcpy(hci_packet_.data(), hci_packet_preamble_,
+               preamble_size_for_type[hci_packet_type_]);
         hci_packet_bytes_remaining_ = packet_length;
         hci_parser_state_ = HCI_PAYLOAD;
         hci_packet_bytes_read_ = 0;
@@ -336,20 +414,22 @@
                hci_packet_.data() + preamble_size_for_type[hci_packet_type_] +
                    hci_packet_bytes_read_,
                hci_packet_bytes_remaining_));
+      CHECK(bytes_read > 0);
       hci_packet_bytes_remaining_ -= bytes_read;
       hci_packet_bytes_read_ += bytes_read;
       if (hci_packet_bytes_remaining_ == 0) {
-        if (internal_command_cb != nullptr) {
+        if (internal_command.cb != nullptr &&
+            hci_packet_type_ == HCI_PACKET_TYPE_EVENT &&
+            internal_command_event_match(hci_packet_)) {
           HC_BT_HDR* bt_hdr =
               WrapPacketAndCopy(HCI_PACKET_TYPE_EVENT, hci_packet_);
-          internal_command_cb(bt_hdr);
-        } else if (packet_read_cb_ != nullptr &&
-                   initialize_complete_cb_ == nullptr) {
-          packet_read_cb_(hci_packet_type_, hci_packet_);
+
+          // The callbacks can send new commands, so don't zero after calling.
+          tINT_CMD_CBACK saved_cb = internal_command.cb;
+          internal_command.cb = nullptr;
+          saved_cb(bt_hdr);
         } else {
-          ALOGE(
-              "%s HCI_PAYLOAD received without packet_read_cb or pending init.",
-              __func__);
+          packet_read_cb_(hci_packet_type_, hci_packet_);
         }
         hci_parser_state_ = HCI_IDLE;
       }
diff --git a/bluetooth/1.0/default/vendor_interface.h b/bluetooth/1.0/default/vendor_interface.h
index 450b99c..98357f5 100644
--- a/bluetooth/1.0/default/vendor_interface.h
+++ b/bluetooth/1.0/default/vendor_interface.h
@@ -42,21 +42,24 @@
   static void Shutdown();
   static VendorInterface *get();
 
-  size_t Send(const uint8_t *data, size_t length);
+  size_t Send(uint8_t type, const uint8_t *data, size_t length);
 
   void OnFirmwareConfigured(uint8_t result);
 
  private:
   virtual ~VendorInterface() = default;
 
-  bool Open(InitializeCompleteCallback initialize_complete_cb, PacketReadCallback packet_read_cb);
+  bool Open(InitializeCompleteCallback initialize_complete_cb,
+            PacketReadCallback packet_read_cb);
   void Close();
 
+  void OnTimeout();
+
   void OnDataReady(int fd);
 
   void *lib_handle_;
   bt_vendor_interface_t *lib_interface_;
-  AsyncFdWatcher fd_watcher_;
+  async::AsyncFdWatcher fd_watcher_;
   int uart_fd_;
   PacketReadCallback packet_read_cb_;
   InitializeCompleteCallback initialize_complete_cb_;
@@ -64,6 +67,7 @@
   enum HciParserState { HCI_IDLE, HCI_TYPE_READY, HCI_PAYLOAD };
   HciParserState hci_parser_state_{HCI_IDLE};
   HciPacketType hci_packet_type_{HCI_PACKET_TYPE_UNKNOWN};
+  uint8_t hci_packet_preamble_[HCI_PREAMBLE_SIZE_MAX];
   hidl_vec<uint8_t> hci_packet_;
   size_t hci_packet_bytes_remaining_;
   size_t hci_packet_bytes_read_;
diff --git a/bluetooth/1.0/vts/Android.mk b/bluetooth/1.0/vts/Android.mk
deleted file mode 100644
index 85e0c38..0000000
--- a/bluetooth/1.0/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(LOCAL_PATH)/functional/vts/testcases/hal/bluetooth/hidl/Android.mk
diff --git a/bluetooth/1.0/vts/BluetoothHci.vts b/bluetooth/1.0/vts/BluetoothHci.vts
deleted file mode 100644
index 1112371..0000000
--- a/bluetooth/1.0/vts/BluetoothHci.vts
+++ /dev/null
@@ -1,61 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IBluetoothHci"
-
-package: "android.hardware.bluetooth"
-
-import: "android.hardware.bluetooth@1.0::IBluetoothHciCallbacks"
-import: "android.hardware.bluetooth@1.0::types"
-
-interface: {
-    api: {
-        name: "initialize"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::bluetooth::V1_0::Status"
-        }
-        arg: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IBluetoothHciCallbacks"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "sendHciCommand"
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "sendAclData"
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "sendScoData"
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "close"
-    }
-
-}
diff --git a/bluetooth/1.0/vts/BluetoothHciCallbacks.vts b/bluetooth/1.0/vts/BluetoothHciCallbacks.vts
deleted file mode 100644
index f2df5b4..0000000
--- a/bluetooth/1.0/vts/BluetoothHciCallbacks.vts
+++ /dev/null
@@ -1,43 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IBluetoothHciCallbacks"
-
-package: "android.hardware.bluetooth"
-
-import: "android.hardware.bluetooth@1.0::types"
-
-interface: {
-    api: {
-        name: "hciEventReceived"
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "aclDataReceived"
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "scoDataReceived"
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-}
diff --git a/bluetooth/1.0/vts/functional/Android.bp b/bluetooth/1.0/vts/functional/Android.bp
index 7d04736..2012c20 100644
--- a/bluetooth/1.0/vts/functional/Android.bp
+++ b/bluetooth/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "bluetooth_hidl_hal_test",
+    name: "VtsHalBluetoothV1_0TargetTest",
     gtest: true,
-    srcs: ["bluetooth_hidl_hal_test.cpp"],
+    srcs: ["VtsHalBluetoothV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -31,11 +31,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
     ],
-    ldflags: [
-        "--coverage",
-    ],
 }
diff --git a/bluetooth/1.0/vts/functional/bluetooth_hidl_hal_test.cpp b/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp
similarity index 99%
rename from bluetooth/1.0/vts/functional/bluetooth_hidl_hal_test.cpp
rename to bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp
index 683029e..5a6c29a 100644
--- a/bluetooth/1.0/vts/functional/bluetooth_hidl_hal_test.cpp
+++ b/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp
@@ -122,9 +122,9 @@
   virtual void SetUp() override {
     // currently test passthrough mode only
     bluetooth = IBluetoothHci::getService();
-    ALOGW("%s: getService() for bluetooth is %s", __func__,
-          bluetooth->isRemote() ? "remote" : "local");
     ASSERT_NE(bluetooth, nullptr);
+    ALOGI("%s: getService() for bluetooth is %s", __func__,
+          bluetooth->isRemote() ? "remote" : "local");
 
     bluetooth_cb = new BluetoothHciCallbacks(*this);
     ASSERT_NE(bluetooth_cb, nullptr);
@@ -255,7 +255,7 @@
     virtual ~BluetoothHciCallbacks() = default;
 
     Return<void> initializationComplete(Status status) override {
-      parent_.initialized = true;
+      parent_.initialized = (status == Status::SUCCESS);
       parent_.notify_initialized();
       ALOGV("%s (status = %d)", __func__, static_cast<int>(status));
       return Void();
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/Android.mk b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/Android.mk b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/Android.mk
deleted file mode 100644
index 98bb686..0000000
--- a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalBluetoothHidlTargetBasicTest
-VTS_CONFIG_SRC_DIR := testcases/hal/bluetooth/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/AndroidTest.xml b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/AndroidTest.xml
deleted file mode 100644
index 54fb89b..0000000
--- a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Bluetooth HIDL HAL's basic target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalBluetoothHidlTargetBasicTest" />
-        <option name="binary-test-sources" value="
-            _64bit::DATA/nativetest64/bluetooth_hidl_hal_test/bluetooth_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/Android.mk b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/Android.mk
deleted file mode 100644
index 81a2db9..0000000
--- a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-## 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.
-# #
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := BluetoothHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/bluetooth/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/AndroidTest.xml b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 8052b3c..0000000
--- a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Bluetooth HIDL HAL's target-side profiling test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="BluetoothHidlTargetProfilingTest" />
-        <option name="binary-test-sources" value="
-            _64bit::DATA/nativetest64/bluetooth_hidl_hal_test/bluetooth_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/bluetooth/1.0/vts/types.vts b/bluetooth/1.0/vts/types.vts
deleted file mode 100644
index 59eb3d4..0000000
--- a/bluetooth/1.0/vts/types.vts
+++ /dev/null
@@ -1,32 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.bluetooth"
-
-
-attribute: {
-    name: "::android::hardware::bluetooth::V1_0::Status"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "TRANSPORT_ERROR"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "INITIALIZATION_ERROR"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
diff --git a/boot/1.0/Android.bp b/boot/1.0/Android.bp
index 8e62c89..7265cc2 100644
--- a/boot/1.0/Android.bp
+++ b/boot/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.boot@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IBootControl.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.boot@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0",
     srcs: [
-        "types.hal",
-        "IBootControl.hal",
+        ":android.hardware.boot@1.0_hal",
     ],
     out: [
         "android/hardware/boot/1.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0",
     srcs: [
-        "types.hal",
-        "IBootControl.hal",
+        ":android.hardware.boot@1.0_hal",
     ],
     out: [
         "android/hardware/boot/1.0/types.h",
@@ -54,106 +60,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.boot.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/boot/1.0/ $(genDir)/android/hardware/boot/1.0/",
-    srcs: [
-        "types.hal",
-        "IBootControl.hal",
-    ],
-    out: [
-        "android/hardware/boot/1.0/types.vts.cpp",
-        "android/hardware/boot/1.0/BootControl.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.boot.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/boot/1.0/ $(genDir)/android/hardware/boot/1.0/",
-    srcs: [
-        "types.hal",
-        "IBootControl.hal",
-    ],
-    out: [
-        "android/hardware/boot/1.0/types.vts.h",
-        "android/hardware/boot/1.0/BootControl.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.boot.vts.driver@1.0",
-    generated_sources: ["android.hardware.boot.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.boot.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.boot.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.boot@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.boot@1.0-IBootControl-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/boot/1.0/ $(genDir)/android/hardware/boot/1.0/",
-    srcs: [
-        "IBootControl.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/boot/1.0/BootControl.vts.cpp",
-        "android/hardware/boot/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.boot@1.0-IBootControl-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/boot/1.0/ $(genDir)/android/hardware/boot/1.0/",
-    srcs: [
-        "IBootControl.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/boot/1.0/BootControl.vts.h",
-        "android/hardware/boot/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.boot@1.0-IBootControl-vts.profiler",
-    generated_sources: ["android.hardware.boot@1.0-IBootControl-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.boot@1.0-IBootControl-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.boot@1.0-IBootControl-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.boot@1.0",
-    ],
-}
diff --git a/boot/1.0/Android.mk b/boot/1.0/Android.mk
index 6fa5e4b..b188acb 100644
--- a/boot/1.0/Android.mk
+++ b/boot/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.boot@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -83,7 +83,7 @@
 LOCAL_MODULE := android.hardware.boot@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/boot/1.0/default/Android.mk b/boot/1.0/default/Android.mk
index be67779..99a6cf9 100644
--- a/boot/1.0/default/Android.mk
+++ b/boot/1.0/default/Android.mk
@@ -3,6 +3,7 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.boot@1.0-impl
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_SRC_FILES := \
     BootControl.cpp \
 
@@ -19,6 +20,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.boot@1.0-service
 LOCAL_INIT_RC := android.hardware.boot@1.0-service.rc
 LOCAL_SRC_FILES := \
diff --git a/boot/1.0/default/android.hardware.boot@1.0-service.rc b/boot/1.0/default/android.hardware.boot@1.0-service.rc
index 67d400b..ef5dd91 100644
--- a/boot/1.0/default/android.hardware.boot@1.0-service.rc
+++ b/boot/1.0/default/android.hardware.boot@1.0-service.rc
@@ -1,4 +1,4 @@
-service boot-hal-1-0 /system/bin/hw/android.hardware.boot@1.0-service
+service boot-hal-1-0 /vendor/bin/hw/android.hardware.boot@1.0-service
     class hal
     user root
     group root
diff --git a/boot/1.0/vts/BootControl.vts b/boot/1.0/vts/BootControl.vts
deleted file mode 100644
index 384ae50..0000000
--- a/boot/1.0/vts/BootControl.vts
+++ /dev/null
@@ -1,93 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IBootControl"
-
-package: "android.hardware.boot"
-
-import: "android.hardware.boot@1.0::types"
-
-interface: {
-    api: {
-        name: "getNumberSlots"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getCurrentSlot"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "markBootSuccessful"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::boot::V1_0::CommandResult"
-        }
-    }
-
-    api: {
-        name: "setActiveBootSlot"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::boot::V1_0::CommandResult"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "setSlotAsUnbootable"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::boot::V1_0::CommandResult"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "isSlotBootable"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::boot::V1_0::BoolResult"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "isSlotMarkedSuccessful"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::boot::V1_0::BoolResult"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getSuffix"
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-}
diff --git a/boot/1.0/vts/functional/Android.bp b/boot/1.0/vts/functional/Android.bp
index 714a18b..2fd3ee4 100644
--- a/boot/1.0/vts/functional/Android.bp
+++ b/boot/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "boot_hidl_hal_test",
+    name: "VtsHalBootV1_0TargetTest",
     gtest: true,
-    srcs: ["boot_hidl_hal_test.cpp"],
+    srcs: ["VtsHalBootV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -30,11 +30,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
-    ],
-    ldflags: [
-        "--coverage"
     ]
 }
diff --git a/boot/1.0/vts/functional/boot_hidl_hal_test.cpp b/boot/1.0/vts/functional/VtsHalBootV1_0TargetTest.cpp
similarity index 100%
rename from boot/1.0/vts/functional/boot_hidl_hal_test.cpp
rename to boot/1.0/vts/functional/VtsHalBootV1_0TargetTest.cpp
diff --git a/boot/1.0/vts/functional/vts/Android.mk b/boot/1.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/boot/1.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/boot/1.0/vts/functional/vts/testcases/Android.mk b/boot/1.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/boot/1.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/boot/1.0/vts/functional/vts/testcases/hal/Android.mk b/boot/1.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/boot/1.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/boot/1.0/vts/functional/vts/testcases/hal/boot/Android.mk b/boot/1.0/vts/functional/vts/testcases/hal/boot/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/boot/1.0/vts/functional/vts/testcases/hal/boot/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/Android.mk b/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target/Android.mk b/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target/Android.mk
deleted file mode 100644
index 844b93b..0000000
--- a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalBootHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/boot/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target/AndroidTest.xml b/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target/AndroidTest.xml
deleted file mode 100644
index bc759bf..0000000
--- a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Boot HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalBootHidlTargetTest"/>
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/boot_hidl_hal_test/boot_hidl_hal_test,
-            _64bit::DATA/nativetest64/boot_hidl_hal_test/boot_hidl_hal_test,
-            "/>
-        <option name="test-config-path" value="vts/testcases/hal/boot/hidl/target/HalBootHidlTargetTest.config" />
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target/HalBootHidlTargetTest.config b/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target/HalBootHidlTargetTest.config
deleted file mode 100644
index ebb4d1b..0000000
--- a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target/HalBootHidlTargetTest.config
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-    "use_gae_db": true,
-    "coverage": true,
-    "modules": [
-        {
-            "module_name": "system/lib64/hw/bootctrl.msm8996",
-            "git_project": {
-                "name": "platform/hardware/qcom/bootctrl",
-                "path": "hardware/qcom/bootctrl"
-            }
-        },
-        {
-            "module_name": "system/lib64/hw/android.hardware.boot@1.0-impl",
-            "git_project": {
-                "name": "platform/hardware/interfaces",
-                "path": "hardware/interfaces"
-            }
-        }
-    ]
-}
diff --git a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target_profiling/Android.mk b/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target_profiling/Android.mk
deleted file mode 100644
index f7414df..0000000
--- a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalBootHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/boot/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target_profiling/AndroidTest.xml b/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index dbc6300..0000000
--- a/boot/1.0/vts/functional/vts/testcases/hal/boot/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Boot HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalBootHidlTargetProfilingTest"/>
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/boot_hidl_hal_test/boot_hidl_hal_test,
-            _64bit::DATA/nativetest64/boot_hidl_hal_test/boot_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="5m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/boot/1.0/vts/types.vts b/boot/1.0/vts/types.vts
deleted file mode 100644
index ebeaa60..0000000
--- a/boot/1.0/vts/types.vts
+++ /dev/null
@@ -1,42 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.boot"
-
-
-attribute: {
-    name: "::android::hardware::boot::V1_0::CommandResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "success"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "errMsg"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::boot::V1_0::BoolResult"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "FALSE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "TRUE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "INVALID_SLOT"
-        scalar_value: {
-            int32_t: -1
-        }
-    }
-}
-
diff --git a/broadcastradio/1.0/Android.bp b/broadcastradio/1.0/Android.bp
index cf44add..3c3a015 100644
--- a/broadcastradio/1.0/Android.bp
+++ b/broadcastradio/1.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.broadcastradio@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.broadcastradio@1.0",
+filegroup {
+    name: "android.hardware.broadcastradio@1.0_hal",
     srcs: [
         "types.hal",
         "IBroadcastRadio.hal",
@@ -11,6 +9,15 @@
         "ITuner.hal",
         "ITunerCallback.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.broadcastradio@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.broadcastradio@1.0",
+    srcs: [
+        ":android.hardware.broadcastradio@1.0_hal",
+    ],
     out: [
         "android/hardware/broadcastradio/1.0/types.cpp",
         "android/hardware/broadcastradio/1.0/BroadcastRadioAll.cpp",
@@ -25,11 +32,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.broadcastradio@1.0",
     srcs: [
-        "types.hal",
-        "IBroadcastRadio.hal",
-        "IBroadcastRadioFactory.hal",
-        "ITuner.hal",
-        "ITunerCallback.hal",
+        ":android.hardware.broadcastradio@1.0_hal",
     ],
     out: [
         "android/hardware/broadcastradio/1.0/types.h",
diff --git a/broadcastradio/1.0/default/Android.mk b/broadcastradio/1.0/default/Android.mk
index 734a0e1..569291e 100644
--- a/broadcastradio/1.0/default/Android.mk
+++ b/broadcastradio/1.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.broadcastradio@1.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     BroadcastRadio.cpp \
diff --git a/broadcastradio/1.0/default/Tuner.cpp b/broadcastradio/1.0/default/Tuner.cpp
index b564d5a..ff643b8 100644
--- a/broadcastradio/1.0/default/Tuner.cpp
+++ b/broadcastradio/1.0/default/Tuner.cpp
@@ -22,7 +22,7 @@
 #include "BroadcastRadio.h"
 #include "Tuner.h"
 #include "Utils.h"
-#include <system/radio_metadata.h>
+#include <system/RadioMetadataWrapper.h>
 
 namespace android {
 namespace hardware {
@@ -167,6 +167,7 @@
 Return<void> Tuner::getProgramInformation(getProgramInformation_cb _hidl_cb)  {
     int rc;
     radio_program_info_t halInfo;
+    RadioMetadataWrapper metadataWrapper(&halInfo.metadata);
     ProgramInfo info;
 
     ALOGV("%s", __FUNCTION__);
@@ -175,12 +176,10 @@
         goto exit;
     }
 
-    radio_metadata_allocate(&halInfo.metadata, 0, 0);
     rc = mHalTuner->get_program_information(mHalTuner, &halInfo);
     if (rc == 0) {
         Utils::convertProgramInfoFromHal(&info, &halInfo);
     }
-    radio_metadata_deallocate(halInfo.metadata);
 
 exit:
     _hidl_cb(Utils::convertHalResult(rc), info);
diff --git a/broadcastradio/1.0/vts/functional/Android.bp b/broadcastradio/1.0/vts/functional/Android.bp
index 0edfcab..2316edb 100644
--- a/broadcastradio/1.0/vts/functional/Android.bp
+++ b/broadcastradio/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "broadcastradio_hidl_hal_test",
+    name: "VtsHalBroadcastradioV1_0TargetTest",
     gtest: true,
-    srcs: ["broadcastradio_hidl_hal_test.cpp"],
+    srcs: ["VtsHalBroadcastradioV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
diff --git a/broadcastradio/1.0/vts/functional/Android.mk b/broadcastradio/1.0/vts/functional/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/broadcastradio/1.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/broadcastradio/1.0/vts/functional/broadcastradio_hidl_hal_test.cpp b/broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp
similarity index 100%
rename from broadcastradio/1.0/vts/functional/broadcastradio_hidl_hal_test.cpp
rename to broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp
diff --git a/broadcastradio/1.0/vts/functional/vts/Android.mk b/broadcastradio/1.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/broadcastradio/1.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/broadcastradio/1.0/vts/functional/vts/testcases/Android.mk b/broadcastradio/1.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/broadcastradio/1.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/broadcastradio/1.0/vts/functional/vts/testcases/hal/Android.mk b/broadcastradio/1.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/broadcastradio/1.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/Android.mk b/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/hidl/Android.mk b/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/hidl/target/Android.mk b/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/hidl/target/Android.mk
deleted file mode 100644
index 153dcd6..0000000
--- a/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalBroadcastRadioHidlTargetBasicTest
-VTS_CONFIG_SRC_DIR := testcases/hal/broadcastradio/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/hidl/target/AndroidTest.xml b/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/hidl/target/AndroidTest.xml
deleted file mode 100644
index 4c03855..0000000
--- a/broadcastradio/1.0/vts/functional/vts/testcases/hal/broadcastradio/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS broadcast radio HIDL HAL's basic target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalBroadcastRadioHidlTargetBasicTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/broadcastradio_hidl_hal_test/broadcastradio_hidl_hal_test,
-            _64bit::DATA/nativetest64/broadcastradio_hidl_hal_test/broadcastradio_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="5m" />
-    </test>
-</configuration>
diff --git a/camera/common/1.0/Android.bp b/camera/common/1.0/Android.bp
index 49098c4..aea6e76 100644
--- a/camera/common/1.0/Android.bp
+++ b/camera/common/1.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.camera.common@1.0_hal",
+    srcs: [
+        "types.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.camera.common@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.common@1.0",
     srcs: [
-        "types.hal",
+        ":android.hardware.camera.common@1.0_hal",
     ],
     out: [
         "android/hardware/camera/common/1.0/types.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.common@1.0",
     srcs: [
-        "types.hal",
+        ":android.hardware.camera.common@1.0_hal",
     ],
     out: [
         "android/hardware/camera/common/1.0/types.h",
diff --git a/camera/common/1.0/Android.mk b/camera/common/1.0/Android.mk
index 2e68dc0..9e05172 100644
--- a/camera/common/1.0/Android.mk
+++ b/camera/common/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.camera.common@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -191,7 +191,7 @@
 LOCAL_MODULE := android.hardware.camera.common@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/camera/common/1.0/default/CameraModule.cpp b/camera/common/1.0/default/CameraModule.cpp
index 5d9ae4d..3a4bc9c 100644
--- a/camera/common/1.0/default/CameraModule.cpp
+++ b/camera/common/1.0/default/CameraModule.cpp
@@ -369,9 +369,11 @@
 }
 
 int CameraModule::setCallbacks(const camera_module_callbacks_t *callbacks) {
-    int res;
+    int res = OK;
     ATRACE_BEGIN("camera_module->set_callbacks");
-    res = mModule->set_callbacks(callbacks);
+    if (getModuleApiVersion() >= CAMERA_MODULE_API_VERSION_2_1) {
+        res = mModule->set_callbacks(callbacks);
+    }
     ATRACE_END();
     return res;
 }
diff --git a/camera/device/1.0/Android.bp b/camera/device/1.0/Android.bp
index 9a6941a..b8560c7 100644
--- a/camera/device/1.0/Android.bp
+++ b/camera/device/1.0/Android.bp
@@ -1,15 +1,22 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.camera.device@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@1.0",
+filegroup {
+    name: "android.hardware.camera.device@1.0_hal",
     srcs: [
         "types.hal",
         "ICameraDevice.hal",
         "ICameraDeviceCallback.hal",
         "ICameraDevicePreviewCallback.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.camera.device@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@1.0",
+    srcs: [
+        ":android.hardware.camera.device@1.0_hal",
+    ],
     out: [
         "android/hardware/camera/device/1.0/types.cpp",
         "android/hardware/camera/device/1.0/CameraDeviceAll.cpp",
@@ -23,10 +30,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@1.0",
     srcs: [
-        "types.hal",
-        "ICameraDevice.hal",
-        "ICameraDeviceCallback.hal",
-        "ICameraDevicePreviewCallback.hal",
+        ":android.hardware.camera.device@1.0_hal",
     ],
     out: [
         "android/hardware/camera/device/1.0/types.h",
diff --git a/camera/device/3.2/Android.bp b/camera/device/3.2/Android.bp
index 8b72d5b..a3ac721 100644
--- a/camera/device/3.2/Android.bp
+++ b/camera/device/3.2/Android.bp
@@ -1,15 +1,22 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.camera.device@3.2_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.2",
+filegroup {
+    name: "android.hardware.camera.device@3.2_hal",
     srcs: [
         "types.hal",
         "ICameraDevice.hal",
         "ICameraDeviceCallback.hal",
         "ICameraDeviceSession.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.camera.device@3.2_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.2",
+    srcs: [
+        ":android.hardware.camera.device@3.2_hal",
+    ],
     out: [
         "android/hardware/camera/device/3.2/types.cpp",
         "android/hardware/camera/device/3.2/CameraDeviceAll.cpp",
@@ -23,10 +30,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.2",
     srcs: [
-        "types.hal",
-        "ICameraDevice.hal",
-        "ICameraDeviceCallback.hal",
-        "ICameraDeviceSession.hal",
+        ":android.hardware.camera.device@3.2_hal",
     ],
     out: [
         "android/hardware/camera/device/3.2/types.h",
diff --git a/camera/device/3.2/default/Android.bp b/camera/device/3.2/default/Android.bp
index 40d4253..62e3c3e 100644
--- a/camera/device/3.2/default/Android.bp
+++ b/camera/device/3.2/default/Android.bp
@@ -1,5 +1,5 @@
 cc_library_shared {
-    name: "android.hardware.camera.device@3.2-impl",
+    name: "camera.device@3.2-impl",
     srcs: ["CameraDevice.cpp",
            "CameraDeviceSession.cpp",
            "convert.cpp"],
@@ -20,27 +20,3 @@
     ],
     export_include_dirs: ["."]
 }
-
-cc_library_shared {
-    name: "android.hardware.camera.device@3.2-impl-binderized",
-    srcs: ["CameraDevice.cpp",
-           "CameraDeviceSession.cpp",
-           "convert.cpp"],
-    cppflags: ["-DBINDERIZED"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "libcutils",
-        "android.hardware.camera.device@3.2",
-        "android.hardware.camera.provider@2.4",
-        "liblog",
-        "libhardware",
-        "libcamera_metadata"
-    ],
-    static_libs: [
-        "android.hardware.camera.common@1.0-helper"
-    ],
-    export_include_dirs: ["."]
-}
diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp
index 26b7b73..0f3d97b 100644
--- a/camera/device/3.2/default/CameraDeviceSession.cpp
+++ b/camera/device/3.2/default/CameraDeviceSession.cpp
@@ -118,9 +118,6 @@
 private:
     bool mInitialized;
 
-    // Some existing gralloc drivers do not support retaining more than once,
-    // when we are in passthrough mode.
-#ifdef BINDERIZED
     bool openGralloc()
     {
         const hw_module_t* module;
@@ -197,9 +194,9 @@
             mRelease(mDevice, handle);
         } else {
             mModule->unregisterBuffer(mModule, handle);
-            native_handle_close(handle);
-            native_handle_delete(const_cast<native_handle_t*>(handle));
         }
+        native_handle_close(handle);
+        native_handle_delete(const_cast<native_handle_t*>(handle));
     }
 
     // gralloc1
@@ -209,12 +206,6 @@
 
     // gralloc0
     const gralloc_module_t* mModule;
-#else
-    bool openGralloc() { return true; }
-    void closeGralloc() {}
-    buffer_handle_t cloneBuffer(buffer_handle_t handle) { return handle; }
-    void releaseBuffer(buffer_handle_t) {}
-#endif
 };
 
 HandleImporter sHandleImporter;
@@ -408,48 +399,53 @@
         return Void();
     }
 
+    if (status != Status::OK) {
+        _hidl_cb(status, outStreams);
+        return Void();
+    }
 
+    camera3_stream_configuration_t stream_list;
+    hidl_vec<camera3_stream_t*> streams;
 
-    if (status == Status::OK) {
-        camera3_stream_configuration_t stream_list;
-        hidl_vec<camera3_stream_t*> streams;
+    stream_list.operation_mode = (uint32_t) requestedConfiguration.operationMode;
+    stream_list.num_streams = requestedConfiguration.streams.size();
+    streams.resize(stream_list.num_streams);
+    stream_list.streams = streams.data();
 
-        stream_list.operation_mode = (uint32_t) requestedConfiguration.operationMode;
-        stream_list.num_streams = requestedConfiguration.streams.size();
-        streams.resize(stream_list.num_streams);
-        stream_list.streams = streams.data();
+    for (uint32_t i = 0; i < stream_list.num_streams; i++) {
+        int id = requestedConfiguration.streams[i].id;
 
-        for (uint32_t i = 0; i < stream_list.num_streams; i++) {
-            int id = requestedConfiguration.streams[i].id;
-
-            if (mStreamMap.count(id) == 0) {
-                Camera3Stream stream;
-                convertFromHidl(requestedConfiguration.streams[i], &stream);
-                mStreamMap[id] = stream;
-                mCirculatingBuffers.emplace(stream.mId, CirculatingBuffers{});
-            } else {
-                // width/height/format must not change, but usage/rotation might need to change
-                if (mStreamMap[id].stream_type !=
-                        (int) requestedConfiguration.streams[i].streamType ||
-                        mStreamMap[id].width != requestedConfiguration.streams[i].width ||
-                        mStreamMap[id].height != requestedConfiguration.streams[i].height ||
-                        mStreamMap[id].format != (int) requestedConfiguration.streams[i].format ||
-                        mStreamMap[id].data_space != (android_dataspace_t)
-                                requestedConfiguration.streams[i].dataSpace) {
-                    ALOGE("%s: stream %d configuration changed!", __FUNCTION__, id);
-                    _hidl_cb(Status::INTERNAL_ERROR, outStreams);
-                    return Void();
-                }
-                mStreamMap[id].rotation = (int) requestedConfiguration.streams[i].rotation;
-                mStreamMap[id].usage = (uint32_t) requestedConfiguration.streams[i].usage;
+        if (mStreamMap.count(id) == 0) {
+            Camera3Stream stream;
+            convertFromHidl(requestedConfiguration.streams[i], &stream);
+            mStreamMap[id] = stream;
+            mCirculatingBuffers.emplace(stream.mId, CirculatingBuffers{});
+        } else {
+            // width/height/format must not change, but usage/rotation might need to change
+            if (mStreamMap[id].stream_type !=
+                    (int) requestedConfiguration.streams[i].streamType ||
+                    mStreamMap[id].width != requestedConfiguration.streams[i].width ||
+                    mStreamMap[id].height != requestedConfiguration.streams[i].height ||
+                    mStreamMap[id].format != (int) requestedConfiguration.streams[i].format ||
+                    mStreamMap[id].data_space != (android_dataspace_t)
+                            requestedConfiguration.streams[i].dataSpace) {
+                ALOGE("%s: stream %d configuration changed!", __FUNCTION__, id);
+                _hidl_cb(Status::INTERNAL_ERROR, outStreams);
+                return Void();
             }
-            streams[i] = &mStreamMap[id];
+            mStreamMap[id].rotation = (int) requestedConfiguration.streams[i].rotation;
+            mStreamMap[id].usage = (uint32_t) requestedConfiguration.streams[i].usage;
         }
+        streams[i] = &mStreamMap[id];
+    }
 
-        ATRACE_BEGIN("camera3->configure_streams");
-        status_t ret = mDevice->ops->configure_streams(mDevice, &stream_list);
-        ATRACE_END();
+    ATRACE_BEGIN("camera3->configure_streams");
+    status_t ret = mDevice->ops->configure_streams(mDevice, &stream_list);
+    ATRACE_END();
 
+    // In case Hal returns error most likely it was not able to release
+    // the corresponding resources of the deleted streams.
+    if (ret == OK) {
         // delete unused streams, note we do this after adding new streams to ensure new stream
         // will not have the same address as deleted stream, and HAL has a chance to reference
         // the to be deleted stream in configure_streams call
@@ -464,30 +460,37 @@
             }
             if (!found) {
                 // Unmap all buffers of deleted stream
-                for (auto& pair : mCirculatingBuffers.at(id)) {
-                    sHandleImporter.freeBuffer(pair.second);
-                }
-                mCirculatingBuffers[id].clear();
-                mCirculatingBuffers.erase(id);
+                // in case the configuration call succeeds and HAL
+                // is able to release the corresponding resources too.
+                cleanupBuffersLocked(id);
                 it = mStreamMap.erase(it);
             } else {
                 ++it;
             }
         }
-
-        if (ret == -EINVAL) {
-            status = Status::ILLEGAL_ARGUMENT;
-        } else if (ret != OK) {
-            status = Status::INTERNAL_ERROR;
-        } else {
-            convertToHidl(stream_list, &outStreams);
-        }
-
     }
+
+    if (ret == -EINVAL) {
+        status = Status::ILLEGAL_ARGUMENT;
+    } else if (ret != OK) {
+        status = Status::INTERNAL_ERROR;
+    } else {
+        convertToHidl(stream_list, &outStreams);
+    }
+
     _hidl_cb(status, outStreams);
     return Void();
 }
 
+// Needs to get called after acquiring 'mInflightLock'
+void CameraDeviceSession::cleanupBuffersLocked(int id) {
+    for (auto& pair : mCirculatingBuffers.at(id)) {
+        sHandleImporter.freeBuffer(pair.second);
+    }
+    mCirculatingBuffers[id].clear();
+    mCirculatingBuffers.erase(id);
+}
+
 Return<Status> CameraDeviceSession::processCaptureRequest(const CaptureRequest& request)  {
     Status status = initStatus();
     if (status != Status::OK) {
diff --git a/camera/device/3.2/default/CameraDeviceSession.h b/camera/device/3.2/default/CameraDeviceSession.h
index ca9d24d..f8689d3 100644
--- a/camera/device/3.2/default/CameraDeviceSession.h
+++ b/camera/device/3.2/default/CameraDeviceSession.h
@@ -123,6 +123,8 @@
     static void cleanupInflightFences(
             hidl_vec<int>& allFences, size_t numFences);
 
+    void cleanupBuffersLocked(int id);
+
     /**
      * Static callback forwarding methods from HAL to instance
      */
diff --git a/camera/metadata/3.2/Android.bp b/camera/metadata/3.2/Android.bp
index 2625026..1e464d6 100644
--- a/camera/metadata/3.2/Android.bp
+++ b/camera/metadata/3.2/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.camera.metadata@3.2_hal",
+    srcs: [
+        "types.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.camera.metadata@3.2_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.metadata@3.2",
     srcs: [
-        "types.hal",
+        ":android.hardware.camera.metadata@3.2_hal",
     ],
     out: [
         "android/hardware/camera/metadata/3.2/types.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.metadata@3.2",
     srcs: [
-        "types.hal",
+        ":android.hardware.camera.metadata@3.2_hal",
     ],
     out: [
         "android/hardware/camera/metadata/3.2/types.h",
diff --git a/camera/metadata/3.2/Android.mk b/camera/metadata/3.2/Android.mk
index 083fb6b..86cee91 100644
--- a/camera/metadata/3.2/Android.mk
+++ b/camera/metadata/3.2/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.camera.metadata@3.2-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -355,6 +355,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (CameraMetadataEnumAndroidControlEnableZsl)
+#
+GEN := $(intermediates)/android/hardware/camera/metadata/V3_2/CameraMetadataEnumAndroidControlEnableZsl.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.camera.metadata@3.2::types.CameraMetadataEnumAndroidControlEnableZsl
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (CameraMetadataEnumAndroidControlMode)
 #
 GEN := $(intermediates)/android/hardware/camera/metadata/V3_2/CameraMetadataEnumAndroidControlMode.java
@@ -1217,7 +1236,7 @@
 LOCAL_MODULE := android.hardware.camera.metadata@3.2-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -1564,6 +1583,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (CameraMetadataEnumAndroidControlEnableZsl)
+#
+GEN := $(intermediates)/android/hardware/camera/metadata/V3_2/CameraMetadataEnumAndroidControlEnableZsl.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.camera.metadata@3.2::types.CameraMetadataEnumAndroidControlEnableZsl
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (CameraMetadataEnumAndroidControlMode)
 #
 GEN := $(intermediates)/android/hardware/camera/metadata/V3_2/CameraMetadataEnumAndroidControlMode.java
diff --git a/camera/metadata/3.2/types.hal b/camera/metadata/3.2/types.hal
index ae70550..2b4b287 100644
--- a/camera/metadata/3.2/types.hal
+++ b/camera/metadata/3.2/types.hal
@@ -251,6 +251,8 @@
 
     ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST,
 
+    ANDROID_CONTROL_ENABLE_ZSL,
+
     ANDROID_CONTROL_END,
 
     ANDROID_DEMOSAIC_MODE = CameraMetadataSectionStart:ANDROID_DEMOSAIC_START,
@@ -923,6 +925,13 @@
 
 };
 
+enum CameraMetadataEnumAndroidControlEnableZsl : uint32_t {
+    ANDROID_CONTROL_ENABLE_ZSL_FALSE,
+
+    ANDROID_CONTROL_ENABLE_ZSL_TRUE,
+
+};
+
 enum CameraMetadataEnumAndroidDemosaicMode : uint32_t {
     ANDROID_DEMOSAIC_MODE_FAST,
 
diff --git a/camera/provider/2.4/Android.bp b/camera/provider/2.4/Android.bp
index f5f10de..3369a3c 100644
--- a/camera/provider/2.4/Android.bp
+++ b/camera/provider/2.4/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.camera.provider@2.4_hal",
+    srcs: [
+        "ICameraProvider.hal",
+        "ICameraProviderCallback.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.camera.provider@2.4_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.provider@2.4",
     srcs: [
-        "ICameraProvider.hal",
-        "ICameraProviderCallback.hal",
+        ":android.hardware.camera.provider@2.4_hal",
     ],
     out: [
         "android/hardware/camera/provider/2.4/CameraProviderAll.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.provider@2.4",
     srcs: [
-        "ICameraProvider.hal",
-        "ICameraProviderCallback.hal",
+        ":android.hardware.camera.provider@2.4_hal",
     ],
     out: [
         "android/hardware/camera/provider/2.4/ICameraProvider.h",
diff --git a/camera/provider/2.4/default/Android.bp b/camera/provider/2.4/default/Android.bp
index ee40ce5..e0ae12f 100644
--- a/camera/provider/2.4/default/Android.bp
+++ b/camera/provider/2.4/default/Android.bp
@@ -1,5 +1,6 @@
 cc_library_shared {
     name: "android.hardware.camera.provider@2.4-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["CameraProvider.cpp"],
     shared_libs: [
@@ -10,7 +11,7 @@
         "libcutils",
         "android.hardware.camera.device@1.0",
         "android.hardware.camera.device@3.2",
-        "android.hardware.camera.device@3.2-impl",
+        "camera.device@3.2-impl",
         "android.hardware.camera.provider@2.4",
         "android.hardware.camera.common@1.0",
         "liblog",
@@ -24,8 +25,9 @@
 
 cc_binary {
     name: "android.hardware.camera.provider@2.4-service",
+    proprietary: true,
     relative_install_path: "hw",
-    srcs: ["service.cpp", "CameraProvider.cpp"],
+    srcs: ["service.cpp"],
     compile_multilib: "32",
     init_rc: ["android.hardware.camera.provider@2.4-service.rc"],
     shared_libs: [
@@ -40,7 +42,6 @@
         "android.hardware.camera.provider@2.4",
         "android.hardware.camera.common@1.0",
         "libcutils",
-        "android.hardware.camera.device@3.2-impl-binderized",
         "libcamera_metadata"
     ],
     static_libs: [
diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp
index 1a34aa6..5714f83 100644
--- a/camera/provider/2.4/default/CameraProvider.cpp
+++ b/camera/provider/2.4/default/CameraProvider.cpp
@@ -51,8 +51,7 @@
         const struct camera_module_callbacks* callbacks,
         int camera_id,
         int new_status) {
-    ALOGI("%s++", __FUNCTION__);
-    sp<CameraProvider> cp = const_cast<CameraProvider*>(
+    CameraProvider* cp = const_cast<CameraProvider*>(
             static_cast<const CameraProvider*>(callbacks));
 
     if (cp == nullptr) {
@@ -60,7 +59,7 @@
         return;
     }
 
-    ALOGI("%s resolved provider %p", __FUNCTION__, cp.get());
+    ALOGI("%s resolved provider %p", __FUNCTION__, cp);
 
     Mutex::Autolock _l(cp->mCbLock);
     char cameraId[kMaxCameraIdLen];
@@ -76,15 +75,13 @@
             }
         }
     }
-    ALOGI("%s--", __FUNCTION__);
 }
 
 void CameraProvider::sTorchModeStatusChange(
         const struct camera_module_callbacks* callbacks,
         const char* camera_id,
         int new_status) {
-    ALOGI("%s++", __FUNCTION__);
-    sp<CameraProvider> cp = const_cast<CameraProvider*>(
+    CameraProvider* cp = const_cast<CameraProvider*>(
             static_cast<const CameraProvider*>(callbacks));
 
     if (cp == nullptr) {
@@ -92,7 +89,7 @@
         return;
     }
 
-    ALOGI("%s resolved provider %p", __FUNCTION__, cp.get());
+    ALOGI("%s resolved provider %p", __FUNCTION__, cp);
 
     Mutex::Autolock _l(cp->mCbLock);
     if (cp->mCallbacks != nullptr) {
@@ -105,7 +102,6 @@
             }
         }
     }
-    ALOGI("%s--", __FUNCTION__);
 }
 
 Status CameraProvider::getHidlStatus(int status) {
@@ -184,13 +180,20 @@
     mModule = new CameraModule(rawModule);
     err = mModule->init();
     if (err != OK) {
-        ALOGE("Could not initialize camera HAL module: %d (%s)", err,
-            strerror(-err));
+        ALOGE("Could not initialize camera HAL module: %d (%s)", err, strerror(-err));
         mModule.clear();
         return true;
     }
     ALOGI("Loaded \"%s\" camera module", mModule->getModuleName());
 
+    // Setup callback now because we are going to try openLegacy next
+    err = mModule->setCallbacks(this);
+    if (err != OK) {
+        ALOGE("Could not set camera module callback: %d (%s)", err, strerror(-err));
+        mModule.clear();
+        return true;
+    }
+
     mNumberOfLegacyCameras = mModule->getNumberOfCameras();
     for (int i = 0; i < mNumberOfLegacyCameras; i++) {
         char cameraId[kMaxCameraIdLen];
@@ -227,8 +230,10 @@
 
     // Setup vendor tags here so HAL can setup vendor keys in camera characteristics
     VendorTagDescriptor::clearGlobalVendorTagDescriptor();
-    bool setupSucceed = setUpVendorTags();
-    return !setupSucceed; // return flag here is mInitFailed
+    if (!setUpVendorTags()) {
+        ALOGE("%s: Vendor tag setup failed, will not be available.", __FUNCTION__);
+    }
+    return false; // mInitFailed
 }
 
 bool CameraProvider::setUpVendorTags() {
@@ -238,7 +243,7 @@
     // Check if vendor operations have been implemented
     if (!mModule->isVendorTagDefined()) {
         ALOGI("%s: No vendor tags defined for this device.", __FUNCTION__);
-        return false;
+        return true;
     }
 
     mModule->getVendorTagOps(&vOps);
@@ -289,11 +294,9 @@
 
 // Methods from ::android::hardware::camera::provider::V2_4::ICameraProvider follow.
 Return<Status> CameraProvider::setCallback(const sp<ICameraProviderCallback>& callback)  {
-    {
-        Mutex::Autolock _l(mCbLock);
-        mCallbacks = callback;
-    } // release lock here because HAL might send callbacks in setCallbacks call
-    return getHidlStatus(mModule->setCallbacks(this));
+    Mutex::Autolock _l(mCbLock);
+    mCallbacks = callback;
+    return Status::OK;
 }
 
 Return<void> CameraProvider::getVendorTags(getVendorTags_cb _hidl_cb)  {
@@ -320,8 +323,9 @@
 }
 
 Return<void> CameraProvider::getCameraDeviceInterface_V1_x(
-        const hidl_string& /*cameraDeviceName*/, getCameraDeviceInterface_V1_x_cb /*_hidl_cb*/)  {
+        const hidl_string& /*cameraDeviceName*/, getCameraDeviceInterface_V1_x_cb _hidl_cb)  {
     // TODO implement after device 1.0 is implemented
+    _hidl_cb(Status::INTERNAL_ERROR, nullptr);
     return Void();
 }
 
diff --git a/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc b/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc
index 31f0810..192870b 100644
--- a/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc
+++ b/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc
@@ -1,4 +1,4 @@
-service camera-provider-2-4 /system/bin/hw/android.hardware.camera.provider@2.4-service
+service camera-provider-2-4 /vendor/bin/hw/android.hardware.camera.provider@2.4-service
     class hal
     user cameraserver
     group audio camera input drmrpc
diff --git a/camera/provider/2.4/default/service.cpp b/camera/provider/2.4/default/service.cpp
index 2723dee..cf66e04 100644
--- a/camera/provider/2.4/default/service.cpp
+++ b/camera/provider/2.4/default/service.cpp
@@ -17,35 +17,13 @@
 #define LOG_TAG "android.hardware.camera.provider@2.4-service"
 
 #include <android/hardware/camera/provider/2.4/ICameraProvider.h>
-#include <CameraProvider.h>
+#include <hidl/LegacySupport.h>
 
-#include <hidl/HidlTransportSupport.h>
-#include <utils/StrongPointer.h>
-
-using android::hardware::configureRpcThreadpool;
-using android::hardware::joinRpcThreadpool;
-using android::sp;
 using android::hardware::camera::provider::V2_4::ICameraProvider;
-using android::hardware::camera::provider::V2_4::implementation::HIDL_FETCH_ICameraProvider;
+using android::hardware::defaultPassthroughServiceImplementation;
 
 int main()
 {
-    const char instance[] = "legacy/0";
-
     ALOGI("Camera provider Service is starting.");
-
-    configureRpcThreadpool(1, true /* callerWillJoin */);
-    // TODO (b/34510650): check the passthrough/binderized dev key
-    sp<ICameraProvider> service = HIDL_FETCH_ICameraProvider(instance);
-    if (service == nullptr) {
-        ALOGI("Camera provider getService returned NULL");
-        return -1;
-    }
-
-    LOG_FATAL_IF(service->isRemote(), "Camera provider service is REMOTE!");
-
-    service->registerAsService(instance);
-    joinRpcThreadpool();
-
-    return 0;
+    return defaultPassthroughServiceImplementation<ICameraProvider>("legacy/0");
 }
\ No newline at end of file
diff --git a/camera/provider/2.4/vts/functional/Android.bp b/camera/provider/2.4/vts/functional/Android.bp
index 4947c17..defe3dc 100644
--- a/camera/provider/2.4/vts/functional/Android.bp
+++ b/camera/provider/2.4/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "camera_hidl_hal_test",
+    name: "VtsHalCameraProviderV2_4TargetTest",
     gtest: true,
-    srcs: ["camera_hidl_hal_test.cpp"],
+    srcs: ["VtsHalCameraProviderV2_4TargetTest.cpp"],
     shared_libs: [
         "liblog",
         "libhidlbase",
@@ -26,7 +26,8 @@
         "libutils",
         "android.hardware.camera.provider@2.4",
         "android.hardware.camera.device@3.2",
-        "libcamera_metadata"
+        "libcamera_metadata",
+        "libui"
     ],
     static_libs: ["libgtest"],
     cflags: [
diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
new file mode 100644
index 0000000..e1e10f8
--- /dev/null
+++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
@@ -0,0 +1,1613 @@
+/*
+ * 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 "camera_hidl_hal_test"
+#include <android/hardware/camera/provider/2.4/ICameraProvider.h>
+#include <android/hardware/camera/device/3.2/ICameraDevice.h>
+#include <android/log.h>
+#include <ui/GraphicBuffer.h>
+#include <gtest/gtest.h>
+#include <regex>
+#include "system/camera_metadata.h"
+#include <hardware/gralloc.h>
+#include <hardware/gralloc1.h>
+#include <unordered_map>
+#include <mutex>
+#include <condition_variable>
+#include <chrono>
+#include <inttypes.h>
+
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_handle;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::sp;
+using ::android::GraphicBuffer;
+using ::android::hardware::graphics::common::V1_0::PixelFormat;
+using ::android::hardware::camera::common::V1_0::Status;
+using ::android::hardware::camera::common::V1_0::CameraDeviceStatus;
+using ::android::hardware::camera::common::V1_0::TorchMode;
+using ::android::hardware::camera::common::V1_0::TorchModeStatus;
+using ::android::hardware::camera::provider::V2_4::ICameraProvider;
+using ::android::hardware::camera::provider::V2_4::ICameraProviderCallback;
+using ::android::hardware::camera::device::V3_2::CaptureRequest;
+using ::android::hardware::camera::device::V3_2::CaptureResult;
+using ::android::hardware::camera::device::V3_2::ICameraDeviceCallback;
+using ::android::hardware::camera::device::V3_2::ICameraDeviceSession;
+using ::android::hardware::camera::device::V3_2::NotifyMsg;
+using ::android::hardware::camera::device::V3_2::RequestTemplate;
+using ::android::hardware::camera::device::V3_2::Stream;
+using ::android::hardware::camera::device::V3_2::StreamType;
+using ::android::hardware::camera::device::V3_2::StreamRotation;
+using ::android::hardware::camera::device::V3_2::StreamConfiguration;
+using ::android::hardware::camera::device::V3_2::StreamConfigurationMode;
+using ::android::hardware::camera::device::V3_2::CameraMetadata;
+using ::android::hardware::camera::device::V3_2::HalStreamConfiguration;
+using ::android::hardware::camera::device::V3_2::BufferStatus;
+using ::android::hardware::camera::device::V3_2::StreamBuffer;
+
+#define CAMERA_PASSTHROUGH_SERVICE_NAME "legacy/0"
+#define MAX_PREVIEW_WIDTH  1920
+#define MAX_PREVIEW_HEIGHT 1080
+#define MAX_VIDEO_WIDTH    4096
+#define MAX_VIDEO_HEIGHT   2160
+#define STREAM_BUFFER_TIMEOUT 3  // sec.
+
+struct AvailableStream {
+    int32_t width;
+    int32_t height;
+    int32_t format;
+};
+
+struct AvailableZSLInputOutput {
+    int32_t inputFormat;
+    int32_t outputFormat;
+};
+
+namespace {
+    // "device@<version>/legacy/<id>"
+    const char *kDeviceNameRE = "device@([0-9]+\\.[0-9]+)/legacy/(.+)";
+    const int CAMERA_DEVICE_API_VERSION_3_2 = 0x302;
+    const int CAMERA_DEVICE_API_VERSION_1_0 = 0x100;
+    const char *kHAL3_2 = "3.2";
+    const char *kHAL1_0 = "1.0";
+
+    bool matchDeviceName(const hidl_string& deviceName, std::smatch& sm) {
+        std::regex e(kDeviceNameRE);
+        std::string deviceNameStd(deviceName.c_str());
+        return std::regex_match(deviceNameStd, sm, e);
+    }
+
+    int getCameraDeviceVersion(const hidl_string& deviceName) {
+        std::smatch sm;
+        bool match = matchDeviceName(deviceName, sm);
+        if (!match) {
+            return -1;
+        }
+        if (sm[1].compare(kHAL3_2) == 0) {
+            // maybe switched to 3.4 or define the hidl version enumlater
+            return CAMERA_DEVICE_API_VERSION_3_2;
+        } else if (sm[1].compare(kHAL1_0) == 0) {
+            return CAMERA_DEVICE_API_VERSION_1_0;
+        }
+        return 0;
+    }
+}
+
+// Test environment for camera
+class CameraHidlEnvironment : public ::testing::Environment {
+public:
+    // get the test environment singleton
+    static CameraHidlEnvironment* Instance() {
+        static CameraHidlEnvironment* instance = new CameraHidlEnvironment;
+        return instance;
+    }
+
+    virtual void SetUp() override;
+    virtual void TearDown() override;
+
+    sp<ICameraProvider> mProvider;
+
+private:
+    CameraHidlEnvironment() {}
+
+    GTEST_DISALLOW_COPY_AND_ASSIGN_(CameraHidlEnvironment);
+};
+
+void CameraHidlEnvironment::SetUp() {
+    // TODO: test the binderized mode
+    mProvider = ICameraProvider::getService(CAMERA_PASSTHROUGH_SERVICE_NAME);
+    // TODO: handle the device doesn't have any camera case
+    ALOGI_IF(mProvider, "provider is not nullptr, %p", mProvider.get());
+    ASSERT_NE(mProvider, nullptr);
+}
+
+void CameraHidlEnvironment::TearDown() {
+    ALOGI("TearDown CameraHidlEnvironment");
+}
+
+// The main test class for camera HIDL HAL.
+class CameraHidlTest : public ::testing::Test {
+public:
+    virtual void SetUp() override {}
+    virtual void TearDown() override {}
+
+    hidl_vec<hidl_string> getCameraDeviceNames();
+
+    struct EmptyDeviceCb : public ICameraDeviceCallback {
+        virtual Return<void> processCaptureResult(const CaptureResult& /*result*/) override {
+            ALOGI("processCaptureResult callback");
+            ADD_FAILURE(); // Empty callback should not reach here
+            return Void();
+        }
+
+        virtual Return<void> notify(const NotifyMsg& /*msg*/) override {
+            ALOGI("notify callback");
+            ADD_FAILURE(); // Empty callback should not reach here
+            return Void();
+        }
+    };
+
+    struct DeviceCb : public ICameraDeviceCallback {
+        DeviceCb(CameraHidlTest *parent) : mParent(parent) {}
+        Return<void> processCaptureResult(const CaptureResult& result) override;
+        Return<void> notify(const NotifyMsg& msg) override;
+
+     private:
+        CameraHidlTest *mParent;               // Parent object
+    };
+
+    static Status getAvailableOutputStreams(camera_metadata_t *staticMeta,
+            std::vector<AvailableStream> &outputStreams,
+            AvailableStream *threshold = nullptr);
+    static Status isConstrainedModeAvailable(camera_metadata_t *staticMeta);
+    static Status pickConstrainedModeSize(camera_metadata_t *staticMeta,
+            AvailableStream &hfrStream);
+    static Status isZSLModeAvailable(camera_metadata_t *staticMeta);
+    static Status getZSLInputOutputMap(camera_metadata_t *staticMeta,
+            std::vector<AvailableZSLInputOutput> &inputOutputMap);
+    static Status findLargestSize(
+            const std::vector<AvailableStream> &streamSizes,
+            int32_t format, AvailableStream &result);
+
+protected:
+    std::mutex mLock;                          // Synchronize access to member variables
+    std::condition_variable mResultCondition;  // Condition variable for incoming results
+    uint32_t mResultFrameNumber;               // Expected result frame number
+    std::vector<StreamBuffer> mResultBuffers;  // Holds stream buffers from capture result
+};
+
+Return<void> CameraHidlTest::DeviceCb::processCaptureResult(
+        const CaptureResult& result) {
+    if (nullptr == mParent) {
+        return Void();
+    }
+
+    std::unique_lock<std::mutex> l(mParent->mLock);
+
+    if(mParent->mResultFrameNumber != result.frameNumber) {
+        ALOGE("%s: Unexpected frame number! Expected: %u received: %u",
+              __func__, mParent->mResultFrameNumber, result.frameNumber);
+        ADD_FAILURE();
+    }
+
+    size_t resultLength = result.outputBuffers.size();
+    for (size_t i = 0; i < resultLength; i++) {
+        mParent->mResultBuffers.push_back(result.outputBuffers[i]);
+    }
+
+    // TODO(epeev): Handle partial results in case client supports them and
+    //              verify the result against request settings.
+
+    l.unlock();
+    mParent->mResultCondition.notify_one();
+
+    return Void();
+}
+
+Return<void> CameraHidlTest::DeviceCb::notify(
+        const NotifyMsg& /*msg*/) {
+    // TODO(epeev): Pending implementation.
+    ALOGI("notify callback");
+    return Void();
+}
+
+hidl_vec<hidl_string> CameraHidlTest::getCameraDeviceNames() {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames;
+    env->mProvider->getCameraIdList(
+        [&](auto status, const auto& idList) {
+            ALOGI("getCameraIdList returns status:%d", (int)status);
+            for (size_t i = 0; i < idList.size(); i++) {
+                ALOGI("Camera Id[%zu] is %s", i, idList[i].c_str());
+            }
+            ASSERT_EQ(Status::OK, status);
+            cameraDeviceNames = idList;
+        });
+    return cameraDeviceNames;
+}
+
+// Test if ICameraProvider::isTorchModeSupported returns Status::OK
+TEST_F(CameraHidlTest, isTorchModeSupported) {
+    CameraHidlEnvironment::Instance()->mProvider->isSetTorchModeSupported(
+        [&](auto status, bool support) {
+            ALOGI("isSetTorchModeSupported returns status:%d supported:%d",
+                    (int)status, support);
+            ASSERT_EQ(Status::OK, status);
+        });
+}
+
+// TODO: consider removing this test if getCameraDeviceNames() has the same coverage
+TEST_F(CameraHidlTest, getCameraIdList) {
+    CameraHidlEnvironment::Instance()->mProvider->getCameraIdList(
+        [&](auto status, const auto& idList) {
+            ALOGI("getCameraIdList returns status:%d", (int)status);
+            for (size_t i = 0; i < idList.size(); i++) {
+                ALOGI("Camera Id[%zu] is %s", i, idList[i].c_str());
+            }
+            ASSERT_EQ(Status::OK, status);
+            // This is true for internal camera provider.
+            // Not necessary hold for external cameras providers
+            ASSERT_GT(idList.size(), 0u);
+        });
+}
+
+// Test if ICameraProvider::getVendorTags returns Status::OK
+TEST_F(CameraHidlTest, getVendorTags) {
+    CameraHidlEnvironment::Instance()->mProvider->getVendorTags(
+        [&](auto status, const auto& vendorTagSecs) {
+            ALOGI("getVendorTags returns status:%d numSections %zu",
+                    (int)status, vendorTagSecs.size());
+            for (size_t i = 0; i < vendorTagSecs.size(); i++) {
+                ALOGI("Vendor tag section %zu name %s",
+                        i, vendorTagSecs[i].sectionName.c_str());
+                for (size_t j = 0; j < vendorTagSecs[i].tags.size(); j++) {
+                    const auto& tag = vendorTagSecs[i].tags[j];
+                    ALOGI("Vendor tag id %u name %s type %d",
+                            tag.tagId,
+                            tag.tagName.c_str(),
+                            (int) tag.tagType);
+                }
+            }
+            ASSERT_EQ(Status::OK, status);
+        });
+}
+
+// Test if ICameraProvider::setCallback returns Status::OK
+TEST_F(CameraHidlTest, setCallback) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    struct ProviderCb : public ICameraProviderCallback {
+        virtual Return<void> cameraDeviceStatusChange(
+                const hidl_string& cameraDeviceName,
+                CameraDeviceStatus newStatus) override {
+            ALOGI("camera device status callback name %s, status %d",
+                    cameraDeviceName.c_str(), (int) newStatus);
+            return Void();
+        }
+
+        virtual Return<void> torchModeStatusChange(
+                const hidl_string& cameraDeviceName,
+                TorchModeStatus newStatus) override {
+            ALOGI("Torch mode status callback name %s, status %d",
+                    cameraDeviceName.c_str(), (int) newStatus);
+            return Void();
+        }
+    };
+    sp<ProviderCb> cb = new ProviderCb;
+    auto status = env->mProvider->setCallback(cb);
+    ASSERT_EQ(Status::OK, status);
+    // TODO: right now no callbacks are fired because there is no external camera
+    //       or torch mode change. Need to test torch API in CameraDevice test later.
+}
+
+// Test if ICameraProvider::getCameraDeviceInterface_V3_x returns Status::OK and non-null device
+TEST_F(CameraHidlTest, getCameraDeviceInterface_V3_x) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device3_2) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device3_2, nullptr);
+                });
+        }
+    }
+}
+
+// Verify that the device resource cost can be retrieved and the values are
+// sane.
+TEST_F(CameraHidlTest, getResourceCost) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("getResourceCost: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            device3_2->getResourceCost(
+                [&](auto status, const auto& resourceCost) {
+                    ALOGI("getResourceCost returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ALOGI("    Resource cost is %d", resourceCost.resourceCost);
+                    ASSERT_LE(resourceCost.resourceCost, 100u);
+                    for (const auto& name : resourceCost.conflictingDevices) {
+                        ALOGI("    Conflicting device: %s", name.c_str());
+                    }
+                });
+        }
+    }
+}
+
+// Verify that the static camera characteristics can be retrieved
+// successfully.
+TEST_F(CameraHidlTest, getCameraCharacteristics) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("getCameraCharacteristics: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            device3_2->getCameraCharacteristics(
+                [&](auto status, const auto& chars) {
+                    ALOGI("getCameraCharacteristics returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    const camera_metadata_t* metadata = (camera_metadata_t*) chars.data();
+                    size_t expectedSize = chars.size();
+                    ASSERT_EQ(0, validate_camera_metadata_structure(metadata, &expectedSize));
+                    size_t entryCount = get_camera_metadata_entry_count(metadata);
+                    // TODO: we can do better than 0 here. Need to check how many required
+                    // characteristics keys we've defined.
+                    ASSERT_GT(entryCount, 0u);
+                    ALOGI("getCameraCharacteristics metadata entry count is %zu", entryCount);
+                });
+        }
+    }
+}
+
+//In case it is supported verify that torch can be enabled.
+TEST_F(CameraHidlTest, setTorchMode) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+    bool torchControlSupported = false;
+
+    CameraHidlEnvironment::Instance()->mProvider->isSetTorchModeSupported(
+        [&](auto status, bool support) {
+            ALOGI("isSetTorchModeSupported returns status:%d supported:%d",
+                    (int)status, support);
+            ASSERT_EQ(Status::OK, status);
+            torchControlSupported = support;
+        });
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("setTorchMode: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            Status status = device3_2->setTorchMode(TorchMode::ON);
+            ALOGI("setTorchMode return status %d", (int)status);
+            if (!torchControlSupported) {
+                ASSERT_EQ(Status::METHOD_NOT_SUPPORTED, status);
+            } else {
+                ASSERT_TRUE(status == Status::OK || status == Status::OPERATION_NOT_SUPPORTED);
+                if (status == Status::OK) {
+                    status = device3_2->setTorchMode(TorchMode::OFF);
+                    ASSERT_EQ(Status::OK, status);
+                }
+            }
+        }
+    }
+}
+
+// Check dump functionality.
+TEST_F(CameraHidlTest, dumpState) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("dumpState: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            native_handle_t* raw_handle = native_handle_create(1, 0);
+            raw_handle->data[0] = 1; // std out
+            hidl_handle handle = raw_handle;
+            device3_2->dumpState(handle);
+            native_handle_delete(raw_handle);
+        }
+    }
+}
+
+// Open, dumpStates, then close
+TEST_F(CameraHidlTest, openClose) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("openClose: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            native_handle_t* raw_handle = native_handle_create(1, 0);
+            raw_handle->data[0] = 1; // std out
+            hidl_handle handle = raw_handle;
+            device3_2->dumpState(handle);
+            native_handle_delete(raw_handle);
+
+            session->close();
+            // TODO: test all session API calls return INTERNAL_ERROR after close
+            // TODO: keep a wp copy here and verify session cannot be promoted out of this scope
+        }
+    }
+}
+
+// Check whether all common default request settings can be sucessfully
+// constructed.
+TEST_F(CameraHidlTest, constructDefaultRequestSettings) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("constructDefaultRequestSettings: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            for (uint32_t t = (uint32_t) RequestTemplate::PREVIEW;
+                    t <= (uint32_t) RequestTemplate::MANUAL; t++) {
+                RequestTemplate reqTemplate = (RequestTemplate) t;
+                session->constructDefaultRequestSettings(
+                    reqTemplate,
+                    [&](auto status, const auto& req) {
+                        ALOGI("constructDefaultRequestSettings returns status:%d", (int)status);
+                        if (reqTemplate == RequestTemplate::ZERO_SHUTTER_LAG ||
+                                reqTemplate == RequestTemplate::MANUAL) {
+                            // optional templates
+                            ASSERT_TRUE(status == Status::OK || status == Status::ILLEGAL_ARGUMENT);
+                        } else {
+                            ASSERT_EQ(Status::OK, status);
+                        }
+
+                        if (status == Status::OK) {
+                            const camera_metadata_t* metadata =
+                                (camera_metadata_t*) req.data();
+                            size_t expectedSize = req.size();
+                            ASSERT_EQ(0, validate_camera_metadata_structure(
+                                    metadata, &expectedSize));
+                            size_t entryCount = get_camera_metadata_entry_count(metadata);
+                            // TODO: we can do better than 0 here. Need to check how many required
+                            // request keys we've defined for each template
+                            ASSERT_GT(entryCount, 0u);
+                            ALOGI("template %u metadata entry count is %zu", t, entryCount);
+                        } else {
+                            ASSERT_EQ(0u, req.size());
+                        }
+                    });
+            }
+            session->close();
+        }
+    }
+}
+
+// Verify that all supported stream formats and sizes can be configured
+// successfully.
+TEST_F(CameraHidlTest, configureStreamsAvailableOutputs) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+    std::vector<AvailableStream> outputStreams;
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("configureStreams: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            camera_metadata_t *staticMeta;
+            device3_2->getCameraCharacteristics([&] (Status s,
+                    CameraMetadata metadata) {
+                ASSERT_EQ(Status::OK, s);
+                staticMeta =
+                        reinterpret_cast<camera_metadata_t*>(metadata.data());
+            });
+            outputStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    outputStreams));
+            ASSERT_NE(0u, outputStreams.size());
+
+            int32_t streamId = 0;
+            for (auto &it : outputStreams) {
+                Stream stream = {streamId, StreamType::OUTPUT,
+                        static_cast<uint32_t> (it.width),
+                        static_cast<uint32_t> (it.height),
+                        static_cast<PixelFormat> (it.format), 0, 0,
+                        StreamRotation::ROTATION_0};
+                ::android::hardware::hidl_vec<Stream> streams = {stream};
+                StreamConfiguration config = {streams,
+                        StreamConfigurationMode::NORMAL_MODE};
+                session->configureStreams(config, [streamId] (Status s,
+                        HalStreamConfiguration halConfig) {
+                    ASSERT_EQ(Status::OK, s);
+                    ASSERT_EQ(1u, halConfig.streams.size());
+                    ASSERT_EQ(halConfig.streams[0].id, streamId);
+                });
+                streamId++;
+            }
+
+            session->close();
+        }
+    }
+}
+
+// Check for correct handling of invalid/incorrect configuration parameters.
+TEST_F(CameraHidlTest, configureStreamsInvalidOutputs) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+    std::vector<AvailableStream> outputStreams;
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("configureStreams: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            camera_metadata_t *staticMeta;
+            device3_2->getCameraCharacteristics([&] (Status s,
+                    CameraMetadata metadata) {
+                ASSERT_EQ(Status::OK, s);
+                staticMeta =
+                        reinterpret_cast<camera_metadata_t*>(metadata.data());
+            });
+            outputStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    outputStreams));
+            ASSERT_NE(0u, outputStreams.size());
+
+            int32_t streamId = 0;
+            Stream stream = {streamId++, StreamType::OUTPUT,
+                    static_cast<uint32_t> (0),
+                    static_cast<uint32_t> (0),
+                    static_cast<PixelFormat> (outputStreams[0].format),
+                    0, 0, StreamRotation::ROTATION_0};
+            ::android::hardware::hidl_vec<Stream> streams = {stream};
+            StreamConfiguration config = {streams,
+                    StreamConfigurationMode::NORMAL_MODE};
+            session->configureStreams(config, [] (Status s,
+                    HalStreamConfiguration) {
+                ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+            });
+
+            stream = {streamId++, StreamType::OUTPUT,
+                    static_cast<uint32_t> (UINT32_MAX),
+                    static_cast<uint32_t> (UINT32_MAX),
+                    static_cast<PixelFormat> (outputStreams[0].format),
+                    0, 0, StreamRotation::ROTATION_0};
+            streams[0] = stream;
+            config = {streams,
+                    StreamConfigurationMode::NORMAL_MODE};
+            session->configureStreams(config, [] (Status s,
+                    HalStreamConfiguration) {
+                ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+            });
+
+            for (auto &it : outputStreams) {
+                stream = {streamId++, StreamType::OUTPUT,
+                        static_cast<uint32_t> (it.width),
+                        static_cast<uint32_t> (it.height),
+                        static_cast<PixelFormat> (UINT32_MAX),
+                        0, 0, StreamRotation::ROTATION_0};
+                streams[0] = stream;
+                config = {streams,
+                        StreamConfigurationMode::NORMAL_MODE};
+                session->configureStreams(config, [] (Status s,
+                        HalStreamConfiguration) {
+                    ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+                });
+
+                stream = {streamId++, StreamType::OUTPUT,
+                        static_cast<uint32_t> (it.width),
+                        static_cast<uint32_t> (it.height),
+                        static_cast<PixelFormat> (it.format),
+                        0, 0, static_cast<StreamRotation> (UINT32_MAX)};
+                streams[0] = stream;
+                config = {streams,
+                        StreamConfigurationMode::NORMAL_MODE};
+                session->configureStreams(config, [] (Status s,
+                        HalStreamConfiguration) {
+                    ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+                });
+            }
+
+            session->close();
+        }
+    }
+}
+
+// Check whether all supported ZSL output stream combinations can be
+// configured successfully.
+TEST_F(CameraHidlTest, configureStreamsZSLInputOutputs) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+    std::vector<AvailableStream> inputStreams;
+    std::vector<AvailableZSLInputOutput> inputOutputMap;
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("configureStreams: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            camera_metadata_t *staticMeta;
+            device3_2->getCameraCharacteristics([&] (Status s,
+                    CameraMetadata metadata) {
+                ASSERT_EQ(Status::OK, s);
+                staticMeta =
+                        reinterpret_cast<camera_metadata_t*>(metadata.data());
+            });
+            Status ret = isZSLModeAvailable(staticMeta);
+            if (Status::METHOD_NOT_SUPPORTED == ret) {
+                session->close();
+                continue;
+            }
+            ASSERT_EQ(Status::OK, ret);
+
+            inputStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    inputStreams));
+            ASSERT_NE(0u, inputStreams.size());
+
+            inputOutputMap.clear();
+            ASSERT_EQ(Status::OK, getZSLInputOutputMap(staticMeta,
+                    inputOutputMap));
+            ASSERT_NE(0u, inputOutputMap.size());
+
+            int32_t streamId = 0;
+            for (auto &inputIter : inputOutputMap) {
+                AvailableStream input, output;
+                ASSERT_EQ(Status::OK,
+                        findLargestSize(inputStreams, inputIter.inputFormat, input));
+                ASSERT_NE(0u, inputStreams.size());
+
+                AvailableStream outputThreshold = {INT32_MAX, INT32_MAX,
+                        inputIter.outputFormat};
+                std::vector<AvailableStream> outputStreams;
+                ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                        outputStreams, &outputThreshold));
+                for (auto &outputIter : outputStreams) {
+                    Stream zslStream = {streamId++, StreamType::OUTPUT,
+                            static_cast<uint32_t> (input.width),
+                            static_cast<uint32_t> (input.height),
+                            static_cast<PixelFormat> (input.format),
+                            GRALLOC_USAGE_HW_CAMERA_ZSL, 0,
+                            StreamRotation::ROTATION_0};
+                    Stream inputStream = {streamId++, StreamType::INPUT,
+                            static_cast<uint32_t> (input.width),
+                            static_cast<uint32_t> (input.height),
+                            static_cast<PixelFormat> (input.format), 0, 0,
+                            StreamRotation::ROTATION_0};
+                    Stream outputStream = {streamId++, StreamType::OUTPUT,
+                            static_cast<uint32_t> (outputIter.width),
+                            static_cast<uint32_t> (outputIter.height),
+                            static_cast<PixelFormat> (outputIter.format), 0, 0,
+                            StreamRotation::ROTATION_0};
+
+                    ::android::hardware::hidl_vec<Stream> streams = {
+                            inputStream, zslStream, outputStream};
+                    StreamConfiguration config = {streams,
+                            StreamConfigurationMode::NORMAL_MODE};
+                    session->configureStreams(config, [streamId] (Status s,
+                            HalStreamConfiguration halConfig) {
+                        ASSERT_EQ(Status::OK, s);
+                        ASSERT_EQ(3u, halConfig.streams.size());
+                    });
+                }
+            }
+
+            session->close();
+        }
+    }
+}
+
+// Verify that all supported preview + still capture stream combinations
+// can be configured successfully.
+TEST_F(CameraHidlTest, configureStreamsPreviewStillOutputs) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+    std::vector<AvailableStream> outputBlobStreams;
+    std::vector<AvailableStream> outputPreviewStreams;
+    AvailableStream previewThreshold = {MAX_PREVIEW_WIDTH, MAX_PREVIEW_HEIGHT,
+            static_cast<int32_t>(PixelFormat::IMPLEMENTATION_DEFINED)};
+    AvailableStream blobThreshold = {INT32_MAX, INT32_MAX,
+            static_cast<int32_t>(PixelFormat::BLOB)};
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("configureStreams: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            camera_metadata_t *staticMeta;
+            device3_2->getCameraCharacteristics([&] (Status s,
+                    CameraMetadata metadata) {
+                ASSERT_EQ(Status::OK, s);
+                staticMeta =
+                        reinterpret_cast<camera_metadata_t*>(metadata.data());
+            });
+            outputBlobStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    outputBlobStreams, &blobThreshold));
+            ASSERT_NE(0u, outputBlobStreams.size());
+
+            outputPreviewStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    outputPreviewStreams, &previewThreshold));
+            ASSERT_NE(0u, outputPreviewStreams.size());
+
+            int32_t streamId = 0;
+            for (auto &blobIter : outputBlobStreams) {
+                for (auto &previewIter : outputPreviewStreams) {
+                    Stream previewStream = {streamId++, StreamType::OUTPUT,
+                            static_cast<uint32_t> (previewIter.width),
+                            static_cast<uint32_t> (previewIter.height),
+                            static_cast<PixelFormat> (previewIter.format), 0, 0,
+                            StreamRotation::ROTATION_0};
+                    Stream blobStream = {streamId++, StreamType::OUTPUT,
+                            static_cast<uint32_t> (blobIter.width),
+                            static_cast<uint32_t> (blobIter.height),
+                            static_cast<PixelFormat> (blobIter.format), 0, 0,
+                            StreamRotation::ROTATION_0};
+                    ::android::hardware::hidl_vec<Stream> streams = {
+                            previewStream, blobStream};
+                    StreamConfiguration config = {streams,
+                            StreamConfigurationMode::NORMAL_MODE};
+                    session->configureStreams(config, [streamId] (Status s,
+                            HalStreamConfiguration halConfig) {
+                        ASSERT_EQ(Status::OK, s);
+                        ASSERT_EQ(2u, halConfig.streams.size());
+                    });
+                }
+            }
+
+            session->close();
+        }
+    }
+}
+
+// In case constrained mode is supported, test whether it can be
+// configured. Additionally check for common invalid inputs when
+// using this mode.
+TEST_F(CameraHidlTest, configureStreamsConstrainedOutputs) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("configureStreams: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            camera_metadata_t *staticMeta;
+            device3_2->getCameraCharacteristics([&] (Status s,
+                    CameraMetadata metadata) {
+                ASSERT_EQ(Status::OK, s);
+                staticMeta =
+                        reinterpret_cast<camera_metadata_t*>(metadata.data());
+            });
+            Status rc = isConstrainedModeAvailable(staticMeta);
+            if (Status::METHOD_NOT_SUPPORTED == rc) {
+                session->close();
+                continue;
+            }
+            ASSERT_EQ(Status::OK, rc);
+
+            AvailableStream hfrStream;
+            rc = pickConstrainedModeSize(staticMeta, hfrStream);
+            ASSERT_EQ(Status::OK, rc);
+
+            int32_t streamId = 0;
+            Stream stream = {streamId, StreamType::OUTPUT,
+                    static_cast<uint32_t> (hfrStream.width),
+                    static_cast<uint32_t> (hfrStream.height),
+                    static_cast<PixelFormat> (hfrStream.format), 0, 0,
+                    StreamRotation::ROTATION_0};
+            ::android::hardware::hidl_vec<Stream> streams = {stream};
+            StreamConfiguration config = {streams,
+                    StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
+            session->configureStreams(config, [streamId] (Status s,
+                    HalStreamConfiguration halConfig) {
+                ASSERT_EQ(Status::OK, s);
+                ASSERT_EQ(1u, halConfig.streams.size());
+                ASSERT_EQ(halConfig.streams[0].id, streamId);
+            });
+
+            stream = {streamId++, StreamType::OUTPUT,
+                    static_cast<uint32_t> (0),
+                    static_cast<uint32_t> (0),
+                    static_cast<PixelFormat> (hfrStream.format), 0, 0,
+                    StreamRotation::ROTATION_0};
+            streams[0] = stream;
+            config = {streams,
+                    StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
+            session->configureStreams(config, [streamId] (Status s,
+                    HalStreamConfiguration) {
+                ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+            });
+
+            stream = {streamId++, StreamType::OUTPUT,
+                    static_cast<uint32_t> (UINT32_MAX),
+                    static_cast<uint32_t> (UINT32_MAX),
+                    static_cast<PixelFormat> (hfrStream.format), 0, 0,
+                    StreamRotation::ROTATION_0};
+            streams[0] = stream;
+            config = {streams,
+                    StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
+            session->configureStreams(config, [streamId] (Status s,
+                    HalStreamConfiguration) {
+                ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+            });
+
+            stream = {streamId++, StreamType::OUTPUT,
+                    static_cast<uint32_t> (hfrStream.width),
+                    static_cast<uint32_t> (hfrStream.height),
+                    static_cast<PixelFormat> (UINT32_MAX), 0, 0,
+                    StreamRotation::ROTATION_0};
+            streams[0] = stream;
+            config = {streams,
+                    StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
+            session->configureStreams(config, [streamId] (Status s,
+                    HalStreamConfiguration) {
+                ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+            });
+
+            session->close();
+        }
+    }
+}
+
+// Verify that all supported video + snapshot stream combinations can
+// be configured successfully.
+TEST_F(CameraHidlTest, configureStreamsVideoStillOutputs) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+    std::vector<AvailableStream> outputBlobStreams;
+    std::vector<AvailableStream> outputVideoStreams;
+    AvailableStream videoThreshold = {MAX_VIDEO_WIDTH, MAX_VIDEO_HEIGHT,
+            static_cast<int32_t>(PixelFormat::IMPLEMENTATION_DEFINED)};
+    AvailableStream blobThreshold = {MAX_VIDEO_WIDTH, MAX_VIDEO_HEIGHT,
+            static_cast<int32_t>(PixelFormat::BLOB)};
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("configureStreams: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            camera_metadata_t *staticMeta;
+            device3_2->getCameraCharacteristics([&] (Status s,
+                    CameraMetadata metadata) {
+                ASSERT_EQ(Status::OK, s);
+                staticMeta =
+                        reinterpret_cast<camera_metadata_t*>(metadata.data());
+            });
+            outputBlobStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    outputBlobStreams, &blobThreshold));
+            ASSERT_NE(0u, outputBlobStreams.size());
+
+            outputVideoStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    outputVideoStreams, &videoThreshold));
+            ASSERT_NE(0u, outputVideoStreams.size());
+
+            int32_t streamId = 0;
+            for (auto &blobIter : outputBlobStreams) {
+                for (auto &videoIter : outputVideoStreams) {
+                    Stream videoStream = {streamId++, StreamType::OUTPUT,
+                            static_cast<uint32_t> (videoIter.width),
+                            static_cast<uint32_t> (videoIter.height),
+                            static_cast<PixelFormat> (videoIter.format), 0, 0,
+                            StreamRotation::ROTATION_0};
+                    Stream blobStream = {streamId++, StreamType::OUTPUT,
+                            static_cast<uint32_t> (blobIter.width),
+                            static_cast<uint32_t> (blobIter.height),
+                            static_cast<PixelFormat> (blobIter.format),
+                            GRALLOC_USAGE_HW_VIDEO_ENCODER, 0,
+                            StreamRotation::ROTATION_0};
+                    ::android::hardware::hidl_vec<Stream> streams = {
+                            videoStream, blobStream};
+                    StreamConfiguration config = {streams,
+                            StreamConfigurationMode::NORMAL_MODE};
+                    session->configureStreams(config, [streamId] (Status s,
+                            HalStreamConfiguration halConfig) {
+                        ASSERT_EQ(Status::OK, s);
+                        ASSERT_EQ(2u, halConfig.streams.size());
+                    });
+                }
+            }
+
+            session->close();
+        }
+    }
+}
+
+// Generate and verify a camera capture request
+TEST_F(CameraHidlTest, processCaptureRequestPreview) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+    std::vector<AvailableStream> outputPreviewStreams;
+    AvailableStream previewThreshold = {MAX_PREVIEW_WIDTH, MAX_PREVIEW_HEIGHT,
+            static_cast<int32_t>(PixelFormat::IMPLEMENTATION_DEFINED)};
+    int32_t streamId = 0;
+    uint64_t bufferId = 1;
+    uint32_t frameNumber = 1;
+    ::android::hardware::hidl_vec<uint8_t> settings;
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("configureStreams: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<DeviceCb> cb = new DeviceCb(this);
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            camera_metadata_t *staticMeta;
+            device3_2->getCameraCharacteristics([&] (Status s,
+                    CameraMetadata metadata) {
+                ASSERT_EQ(Status::OK, s);
+                staticMeta =
+                        reinterpret_cast<camera_metadata_t*>(metadata.data());
+            });
+
+            outputPreviewStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    outputPreviewStreams, &previewThreshold));
+            ASSERT_NE(0u, outputPreviewStreams.size());
+
+            HalStreamConfiguration halStreamConfig;
+            Stream previewStream = {streamId, StreamType::OUTPUT,
+                    static_cast<uint32_t> (outputPreviewStreams[0].width),
+                    static_cast<uint32_t> (outputPreviewStreams[0].height),
+                    static_cast<PixelFormat> (outputPreviewStreams[0].format),
+                    0, 0, StreamRotation::ROTATION_0};
+            ::android::hardware::hidl_vec<Stream> streams = {previewStream};
+            StreamConfiguration config = {streams,
+                    StreamConfigurationMode::NORMAL_MODE};
+            session->configureStreams(config, [&] (Status s,
+                    HalStreamConfiguration halConfig) {
+                ASSERT_EQ(Status::OK, s);
+                ASSERT_EQ(1u, halConfig.streams.size());
+                halStreamConfig = halConfig;
+            });
+
+            RequestTemplate reqTemplate = RequestTemplate::PREVIEW;
+            session->constructDefaultRequestSettings(reqTemplate,
+                [&](auto status, const auto& req) {
+                    ASSERT_EQ(Status::OK, status);
+                    settings = req; });
+
+            sp<GraphicBuffer> gb = new GraphicBuffer(previewStream.width,
+                    previewStream.height,
+                    static_cast<int32_t> (halStreamConfig.streams[0].overrideFormat),
+                    1, halStreamConfig.streams[0].producerUsage,
+                    halStreamConfig.streams[0].consumerUsage);
+            ASSERT_NE(nullptr, gb.get());
+            StreamBuffer outputBuffer = {halStreamConfig.streams[0].id,
+                    bufferId, hidl_handle(gb->getNativeBuffer()->handle),
+                    BufferStatus::OK, nullptr, nullptr};
+            ::android::hardware::hidl_vec<StreamBuffer> outputBuffers = {
+                    outputBuffer};
+            CaptureRequest request = {frameNumber, settings,
+                    {-1, 0, nullptr, BufferStatus::ERROR, nullptr, nullptr},
+                    outputBuffers};
+
+            std::unique_lock<std::mutex> l(mLock);
+            mResultBuffers.clear();
+            mResultFrameNumber = frameNumber;
+            l.unlock();
+
+            ASSERT_EQ(Status::OK, session->processCaptureRequest(request));
+
+            l.lock();
+            while (0 == mResultBuffers.size()) {
+                auto timeout = std::chrono::system_clock::now() +
+                        std::chrono::seconds(STREAM_BUFFER_TIMEOUT);
+                ASSERT_NE(std::cv_status::timeout,
+                        mResultCondition.wait_until(l, timeout));
+            }
+
+            ASSERT_EQ(BufferStatus::OK, mResultBuffers[0].status);
+            ASSERT_EQ(previewStream.id, mResultBuffers[0].streamId);
+
+            request.frameNumber++;
+            //Empty settings should be supported after the first call
+            //for repeating requests.
+            request.settings.setToExternal(nullptr, 0, true);
+            mResultBuffers.clear();
+            mResultFrameNumber++;
+            l.unlock();
+
+            ASSERT_EQ(Status::OK, session->processCaptureRequest(request));
+
+            l.lock();
+            while (0 == mResultBuffers.size()) {
+                auto timeout = std::chrono::system_clock::now() +
+                        std::chrono::seconds(STREAM_BUFFER_TIMEOUT);
+                ASSERT_NE(std::cv_status::timeout,
+                        mResultCondition.wait_until(l, timeout));
+            }
+            ASSERT_EQ(BufferStatus::OK, mResultBuffers[0].status);
+            ASSERT_EQ(previewStream.id, mResultBuffers[0].streamId);
+
+            session->close();
+        }
+    }
+}
+
+// Test whether an incorrect capture request with missing settings will
+// be reported correctly.
+TEST_F(CameraHidlTest, processCaptureRequestInvalidSinglePreview) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+    std::vector<AvailableStream> outputPreviewStreams;
+    AvailableStream previewThreshold = {MAX_PREVIEW_WIDTH, MAX_PREVIEW_HEIGHT,
+            static_cast<int32_t>(PixelFormat::IMPLEMENTATION_DEFINED)};
+    int32_t streamId = 0;
+    uint64_t bufferId = 1;
+    uint32_t frameNumber = 1;
+    ::android::hardware::hidl_vec<uint8_t> settings;
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("configureStreams: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<DeviceCb> cb = new DeviceCb(this);
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            camera_metadata_t *staticMeta;
+            device3_2->getCameraCharacteristics([&] (Status s,
+                    CameraMetadata metadata) {
+                ASSERT_EQ(Status::OK, s);
+                staticMeta =
+                        reinterpret_cast<camera_metadata_t*>(metadata.data());
+            });
+
+            outputPreviewStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    outputPreviewStreams, &previewThreshold));
+            ASSERT_NE(0u, outputPreviewStreams.size());
+
+            HalStreamConfiguration halStreamConfig;
+            Stream previewStream = {streamId, StreamType::OUTPUT,
+                    static_cast<uint32_t> (outputPreviewStreams[0].width),
+                    static_cast<uint32_t> (outputPreviewStreams[0].height),
+                    static_cast<PixelFormat> (outputPreviewStreams[0].format),
+                    0, 0, StreamRotation::ROTATION_0};
+            ::android::hardware::hidl_vec<Stream> streams = {previewStream};
+            StreamConfiguration config = {streams,
+                    StreamConfigurationMode::NORMAL_MODE};
+            session->configureStreams(config, [&] (Status s,
+                    HalStreamConfiguration halConfig) {
+                ASSERT_EQ(Status::OK, s);
+                ASSERT_EQ(1u, halConfig.streams.size());
+                halStreamConfig = halConfig;
+            });
+
+            sp<GraphicBuffer> gb = new GraphicBuffer(previewStream.width,
+                    previewStream.height,
+                    static_cast<int32_t> (halStreamConfig.streams[0].overrideFormat),
+                    1, halStreamConfig.streams[0].producerUsage,
+                    halStreamConfig.streams[0].consumerUsage);
+
+            StreamBuffer outputBuffer = {halStreamConfig.streams[0].id,
+                    bufferId, hidl_handle(gb->getNativeBuffer()->handle),
+                    BufferStatus::OK, nullptr, nullptr};
+            ::android::hardware::hidl_vec<StreamBuffer> outputBuffers = {
+                    outputBuffer};
+            CaptureRequest request = {frameNumber, settings,
+                    {-1, 0, nullptr, BufferStatus::ERROR, nullptr, nullptr},
+                    outputBuffers};
+
+            //Settings were not correctly initialized, we should fail here
+            ASSERT_EQ(Status::INTERNAL_ERROR,
+                    session->processCaptureRequest(request));
+
+            session->close();
+        }
+    }
+}
+
+// Check whether an invalid capture request with missing output buffers
+// will be reported correctly.
+TEST_F(CameraHidlTest, processCaptureRequestInvalidSingleSnapshot) {
+    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
+    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
+    std::vector<AvailableStream> outputBlobStreams;
+    AvailableStream blobThreshold = {INT32_MAX, INT32_MAX,
+            static_cast<int32_t>(PixelFormat::BLOB)};
+    int32_t streamId = 0;
+    uint64_t bufferId = 1;
+    uint32_t frameNumber = 1;
+    ::android::hardware::hidl_vec<uint8_t> settings;
+
+    for (const auto& name : cameraDeviceNames) {
+        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
+            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
+            ALOGI("configureStreams: Testing camera device %s", name.c_str());
+            env->mProvider->getCameraDeviceInterface_V3_x(
+                name,
+                [&](auto status, const auto& device) {
+                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(device, nullptr);
+                    device3_2 = device;
+                });
+
+            sp<DeviceCb> cb = new DeviceCb(this);
+            sp<ICameraDeviceSession> session;
+            device3_2->open(
+                cb,
+                [&](auto status, const auto& newSession) {
+                    ALOGI("device::open returns status:%d", (int)status);
+                    ASSERT_EQ(Status::OK, status);
+                    ASSERT_NE(newSession, nullptr);
+                    session = newSession;
+                });
+
+            camera_metadata_t *staticMeta;
+            device3_2->getCameraCharacteristics([&] (Status s,
+                    CameraMetadata metadata) {
+                ASSERT_EQ(Status::OK, s);
+                staticMeta =
+                        reinterpret_cast<camera_metadata_t*>(metadata.data());
+            });
+
+            outputBlobStreams.clear();
+            ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta,
+                    outputBlobStreams, &blobThreshold));
+            ASSERT_NE(0u, outputBlobStreams.size());
+
+            HalStreamConfiguration halStreamConfig;
+            Stream previewStream = {streamId, StreamType::OUTPUT,
+                    static_cast<uint32_t> (outputBlobStreams[0].width),
+                    static_cast<uint32_t> (outputBlobStreams[0].height),
+                    static_cast<PixelFormat> (outputBlobStreams[0].format),
+                    0, 0, StreamRotation::ROTATION_0};
+            ::android::hardware::hidl_vec<Stream> streams = {previewStream};
+            StreamConfiguration config = {streams,
+                    StreamConfigurationMode::NORMAL_MODE};
+            session->configureStreams(config, [&] (Status s,
+                    HalStreamConfiguration halConfig) {
+                ASSERT_EQ(Status::OK, s);
+                ASSERT_EQ(1u, halConfig.streams.size());
+                halStreamConfig = halConfig;
+            });
+
+            RequestTemplate reqTemplate = RequestTemplate::STILL_CAPTURE;
+            session->constructDefaultRequestSettings(reqTemplate,
+                [&](auto status, const auto& req) {
+                    ASSERT_EQ(Status::OK, status);
+                    settings = req; });
+
+            StreamBuffer outputBuffer = {halStreamConfig.streams[0].id,
+                    bufferId, hidl_handle(nullptr), BufferStatus::OK,
+                    nullptr, nullptr};
+            ::android::hardware::hidl_vec<StreamBuffer> outputBuffers;
+            CaptureRequest request = {frameNumber, settings,
+                    {-1, 0, nullptr, BufferStatus::ERROR, nullptr, nullptr},
+                    outputBuffers};
+
+            //Output buffers are missing, we should fail here
+            ASSERT_EQ(Status::INTERNAL_ERROR,
+                    session->processCaptureRequest(request));
+
+            session->close();
+        }
+    }
+}
+
+// Retrieve all valid output stream resolutions from the camera
+// static characteristics.
+Status CameraHidlTest::getAvailableOutputStreams(camera_metadata_t *staticMeta,
+        std::vector<AvailableStream> &outputStreams,
+        AvailableStream *threshold) {
+    if (nullptr == staticMeta) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    camera_metadata_ro_entry entry;
+    int rc = find_camera_metadata_ro_entry(staticMeta,
+            ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, &entry);
+    if ((0 != rc) || (0 != (entry.count % 4))) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    for (size_t i = 0; i < entry.count; i+=4) {
+        if (ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT ==
+                entry.data.i32[i + 3]) {
+            if(nullptr == threshold) {
+                AvailableStream s = {entry.data.i32[i+1],
+                        entry.data.i32[i+2], entry.data.i32[i]};
+                outputStreams.push_back(s);
+            } else {
+                if ((threshold->format == entry.data.i32[i]) &&
+                        (threshold->width >= entry.data.i32[i+1]) &&
+                        (threshold->height >= entry.data.i32[i+2])) {
+                    AvailableStream s = {entry.data.i32[i+1],
+                            entry.data.i32[i+2], threshold->format};
+                    outputStreams.push_back(s);
+                }
+            }
+        }
+
+    }
+
+    return Status::OK;
+}
+
+// Check if constrained mode is supported by using the static
+// camera characteristics.
+Status CameraHidlTest::isConstrainedModeAvailable(camera_metadata_t *staticMeta) {
+    Status ret = Status::METHOD_NOT_SUPPORTED;
+    if (nullptr == staticMeta) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    camera_metadata_ro_entry entry;
+    int rc = find_camera_metadata_ro_entry(staticMeta,
+            ANDROID_REQUEST_AVAILABLE_CAPABILITIES, &entry);
+    if (0 != rc) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    for (size_t i = 0; i < entry.count; i++) {
+        if (ANDROID_REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO ==
+                entry.data.u8[i]) {
+            ret = Status::OK;
+            break;
+        }
+    }
+
+    return ret;
+}
+
+// Pick the largest supported HFR mode from the static camera
+// characteristics.
+Status CameraHidlTest::pickConstrainedModeSize(camera_metadata_t *staticMeta,
+        AvailableStream &hfrStream) {
+    if (nullptr == staticMeta) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    camera_metadata_ro_entry entry;
+    int rc = find_camera_metadata_ro_entry(staticMeta,
+            ANDROID_CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS, &entry);
+    if (0 != rc) {
+        return Status::METHOD_NOT_SUPPORTED;
+    } else if (0 != (entry.count % 5)) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    hfrStream = {0, 0,
+            static_cast<uint32_t>(PixelFormat::IMPLEMENTATION_DEFINED)};
+    for (size_t i = 0; i < entry.count; i+=5) {
+        int32_t w = entry.data.i32[i];
+        int32_t h = entry.data.i32[i+1];
+        if ((hfrStream.width * hfrStream.height) < (w *h)) {
+            hfrStream.width = w;
+            hfrStream.height = h;
+        }
+    }
+
+    return Status::OK;
+}
+
+// Check whether ZSL is available using the static camera
+// characteristics.
+Status CameraHidlTest::isZSLModeAvailable(camera_metadata_t *staticMeta) {
+    Status ret = Status::METHOD_NOT_SUPPORTED;
+    if (nullptr == staticMeta) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    camera_metadata_ro_entry entry;
+    int rc = find_camera_metadata_ro_entry(staticMeta,
+            ANDROID_REQUEST_AVAILABLE_CAPABILITIES, &entry);
+    if (0 != rc) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    for (size_t i = 0; i < entry.count; i++) {
+        if ((ANDROID_REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING ==
+                entry.data.u8[i]) ||
+                (ANDROID_REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING ==
+                        entry.data.u8[i]) ){
+            ret = Status::OK;
+            break;
+        }
+    }
+
+    return ret;
+}
+
+// Retrieve the reprocess input-output format map from the static
+// camera characteristics.
+Status CameraHidlTest::getZSLInputOutputMap(camera_metadata_t *staticMeta,
+        std::vector<AvailableZSLInputOutput> &inputOutputMap) {
+    if (nullptr == staticMeta) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    camera_metadata_ro_entry entry;
+    int rc = find_camera_metadata_ro_entry(staticMeta,
+            ANDROID_SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP, &entry);
+    if ((0 != rc) || (0 >= entry.count)) {
+        return Status::ILLEGAL_ARGUMENT;
+    }
+
+    const int32_t* contents = &entry.data.i32[0];
+    for (size_t i = 0; i < entry.count; ) {
+        int32_t inputFormat = contents[i++];
+        int32_t length = contents[i++];
+        for (int32_t j = 0; j < length; j++) {
+            int32_t outputFormat = contents[i+j];
+            AvailableZSLInputOutput zslEntry = {inputFormat, outputFormat};
+            inputOutputMap.push_back(zslEntry);
+        }
+        i += length;
+    }
+
+    return Status::OK;
+}
+
+// Search for the largest stream size for a given format.
+Status CameraHidlTest::findLargestSize(
+        const std::vector<AvailableStream> &streamSizes, int32_t format,
+        AvailableStream &result) {
+    result = {0, 0, 0};
+    for (auto &iter : streamSizes) {
+        if (format == iter.format) {
+            if ((result.width * result.height) < (iter.width * iter.height)) {
+                result = iter;
+            }
+        }
+    }
+
+    return (result.format == format) ? Status::OK : Status::ILLEGAL_ARGUMENT;
+}
+
+int main(int argc, char **argv) {
+  ::testing::AddGlobalTestEnvironment(CameraHidlEnvironment::Instance());
+  ::testing::InitGoogleTest(&argc, argv);
+  int status = RUN_ALL_TESTS();
+  ALOGI("Test result = %d", status);
+  return status;
+}
diff --git a/camera/provider/2.4/vts/functional/camera_hidl_hal_test.cpp b/camera/provider/2.4/vts/functional/camera_hidl_hal_test.cpp
deleted file mode 100644
index 0eb291c..0000000
--- a/camera/provider/2.4/vts/functional/camera_hidl_hal_test.cpp
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * 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 "camera_hidl_hal_test"
-#include <android/hardware/camera/provider/2.4/ICameraProvider.h>
-#include <android/hardware/camera/device/3.2/ICameraDevice.h>
-#include <android/log.h>
-#include <gtest/gtest.h>
-#include <regex>
-#include "system/camera_metadata.h"
-
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::hidl_handle;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::sp;
-using ::android::hardware::camera::common::V1_0::Status;
-using ::android::hardware::camera::common::V1_0::CameraDeviceStatus;
-using ::android::hardware::camera::common::V1_0::TorchMode;
-using ::android::hardware::camera::common::V1_0::TorchModeStatus;
-using ::android::hardware::camera::provider::V2_4::ICameraProvider;
-using ::android::hardware::camera::provider::V2_4::ICameraProviderCallback;
-using ::android::hardware::camera::device::V3_2::CaptureRequest;
-using ::android::hardware::camera::device::V3_2::CaptureResult;
-using ::android::hardware::camera::device::V3_2::ICameraDeviceCallback;
-using ::android::hardware::camera::device::V3_2::ICameraDeviceSession;
-using ::android::hardware::camera::device::V3_2::NotifyMsg;
-using ::android::hardware::camera::device::V3_2::RequestTemplate;
-
-#define CAMERA_PASSTHROUGH_SERVICE_NAME "legacy/0"
-
-namespace {
-    // "device@<version>/legacy/<id>"
-    const char *kDeviceNameRE = "device@([0-9]+\\.[0-9]+)/legacy/(.+)";
-    const int CAMERA_DEVICE_API_VERSION_3_2 = 0x302;
-    const int CAMERA_DEVICE_API_VERSION_1_0 = 0x100;
-    const char *kHAL3_2 = "3.2";
-    const char *kHAL1_0 = "1.0";
-
-    bool matchDeviceName(const hidl_string& deviceName, std::smatch& sm) {
-        std::regex e(kDeviceNameRE);
-        std::string deviceNameStd(deviceName.c_str());
-        return std::regex_match(deviceNameStd, sm, e);
-    }
-
-    int getCameraDeviceVersion(const hidl_string& deviceName) {
-        std::smatch sm;
-        bool match = matchDeviceName(deviceName, sm);
-        if (!match) {
-            return -1;
-        }
-        if (sm[1].compare(kHAL3_2) == 0) {
-            // maybe switched to 3.4 or define the hidl version enumlater
-            return CAMERA_DEVICE_API_VERSION_3_2;
-        } else if (sm[1].compare(kHAL1_0) == 0) {
-            return CAMERA_DEVICE_API_VERSION_1_0;
-        }
-        return 0;
-    }
-}
-
-// Test environment for camera
-class CameraHidlEnvironment : public ::testing::Environment {
-public:
-    // get the test environment singleton
-    static CameraHidlEnvironment* Instance() {
-        static CameraHidlEnvironment* instance = new CameraHidlEnvironment;
-        return instance;
-    }
-
-    virtual void SetUp() override;
-    virtual void TearDown() override;
-
-    sp<ICameraProvider> mProvider;
-
-private:
-    CameraHidlEnvironment() {}
-
-    GTEST_DISALLOW_COPY_AND_ASSIGN_(CameraHidlEnvironment);
-};
-
-void CameraHidlEnvironment::SetUp() {
-    // TODO: test the binderized mode
-    mProvider = ICameraProvider::getService(CAMERA_PASSTHROUGH_SERVICE_NAME, true);
-    // TODO: handle the device doesn't have any camera case
-    ALOGI_IF(mProvider, "provider is not nullptr, %p", mProvider.get());
-    ASSERT_NE(mProvider, nullptr);
-}
-
-void CameraHidlEnvironment::TearDown() {
-    ALOGI("TearDown CameraHidlEnvironment");
-}
-
-// The main test class for camera HIDL HAL.
-class CameraHidlTest : public ::testing::Test {
-public:
-    virtual void SetUp() override {}
-    virtual void TearDown() override {}
-
-    hidl_vec<hidl_string> getCameraDeviceNames();
-
-    struct EmptyDeviceCb : public ICameraDeviceCallback {
-        virtual Return<void> processCaptureResult(const CaptureResult& /*result*/) override {
-            ALOGI("processCaptureResult callback");
-            ADD_FAILURE(); // Empty callback should not reach here
-            return Void();
-        }
-
-        virtual Return<void> notify(const NotifyMsg& /*msg*/) override {
-            ALOGI("notify callback");
-            ADD_FAILURE(); // Empty callback should not reach here
-            return Void();
-        }
-    };
-};
-
-hidl_vec<hidl_string> CameraHidlTest::getCameraDeviceNames() {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    hidl_vec<hidl_string> cameraDeviceNames;
-    env->mProvider->getCameraIdList(
-        [&](auto status, const auto& idList) {
-            ALOGI("getCameraIdList returns status:%d", (int)status);
-            for (size_t i = 0; i < idList.size(); i++) {
-                ALOGI("Camera Id[%zu] is %s", i, idList[i].c_str());
-            }
-            ASSERT_EQ(Status::OK, status);
-            cameraDeviceNames = idList;
-        });
-    return cameraDeviceNames;
-}
-
-// Test if ICameraProvider::isTorchModeSupported returns Status::OK
-TEST_F(CameraHidlTest, isTorchModeSupported) {
-    CameraHidlEnvironment::Instance()->mProvider->isSetTorchModeSupported(
-        [&](auto status, bool support) {
-            ALOGI("isSetTorchModeSupported returns status:%d supported:%d",
-                    (int)status, support);
-            ASSERT_EQ(Status::OK, status);
-        });
-}
-
-// TODO: consider removing this test if getCameraDeviceNames() has the same coverage
-TEST_F(CameraHidlTest, getCameraIdList) {
-    CameraHidlEnvironment::Instance()->mProvider->getCameraIdList(
-        [&](auto status, const auto& idList) {
-            ALOGI("getCameraIdList returns status:%d", (int)status);
-            for (size_t i = 0; i < idList.size(); i++) {
-                ALOGI("Camera Id[%zu] is %s", i, idList[i].c_str());
-            }
-            ASSERT_EQ(Status::OK, status);
-            // This is true for internal camera provider.
-            // Not necessary hold for external cameras providers
-            ASSERT_GT(idList.size(), 0u);
-        });
-}
-
-// Test if ICameraProvider::getVendorTags returns Status::OK
-TEST_F(CameraHidlTest, getVendorTags) {
-    CameraHidlEnvironment::Instance()->mProvider->getVendorTags(
-        [&](auto status, const auto& vendorTagSecs) {
-            ALOGI("getVendorTags returns status:%d numSections %zu",
-                    (int)status, vendorTagSecs.size());
-            for (size_t i = 0; i < vendorTagSecs.size(); i++) {
-                ALOGI("Vendor tag section %zu name %s",
-                        i, vendorTagSecs[i].sectionName.c_str());
-                for (size_t j = 0; j < vendorTagSecs[i].tags.size(); j++) {
-                    const auto& tag = vendorTagSecs[i].tags[j];
-                    ALOGI("Vendor tag id %u name %s type %d",
-                            tag.tagId,
-                            tag.tagName.c_str(),
-                            (int) tag.tagType);
-                }
-            }
-            ASSERT_EQ(Status::OK, status);
-        });
-}
-
-// Test if ICameraProvider::setCallback returns Status::OK
-TEST_F(CameraHidlTest, setCallback) {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    struct ProviderCb : public ICameraProviderCallback {
-        virtual Return<void> cameraDeviceStatusChange(
-                const hidl_string& cameraDeviceName,
-                CameraDeviceStatus newStatus) override {
-            ALOGI("camera device status callback name %s, status %d",
-                    cameraDeviceName.c_str(), (int) newStatus);
-            return Void();
-        }
-
-        virtual Return<void> torchModeStatusChange(
-                const hidl_string& cameraDeviceName,
-                TorchModeStatus newStatus) override {
-            ALOGI("Torch mode status callback name %s, status %d",
-                    cameraDeviceName.c_str(), (int) newStatus);
-            return Void();
-        }
-    };
-    sp<ProviderCb> cb = new ProviderCb;
-    auto status = env->mProvider->setCallback(cb);
-    ASSERT_EQ(Status::OK, status);
-    // TODO: right now no callbacks are fired because there is no external camera
-    //       or torch mode change. Need to test torch API in CameraDevice test later.
-}
-
-// Test if ICameraProvider::getCameraDeviceInterface_V3_x returns Status::OK and non-null device
-TEST_F(CameraHidlTest, getCameraDeviceInterface_V3_x) {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
-
-    for (const auto& name : cameraDeviceNames) {
-        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
-            env->mProvider->getCameraDeviceInterface_V3_x(
-                name,
-                [&](auto status, const auto& device3_2) {
-                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(device3_2, nullptr);
-                });
-        }
-    }
-}
-
-TEST_F(CameraHidlTest, getResourceCost) {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
-
-    for (const auto& name : cameraDeviceNames) {
-        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
-            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
-            ALOGI("getResourceCost: Testing camera device %s", name.c_str());
-            env->mProvider->getCameraDeviceInterface_V3_x(
-                name,
-                [&](auto status, const auto& device) {
-                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(device, nullptr);
-                    device3_2 = device;
-                });
-
-            device3_2->getResourceCost(
-                [&](auto status, const auto& resourceCost) {
-                    ALOGI("getResourceCost returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ALOGI("    Resource cost is %d", resourceCost.resourceCost);
-                    ASSERT_LE(resourceCost.resourceCost, 100u);
-                    for (const auto& name : resourceCost.conflictingDevices) {
-                        ALOGI("    Conflicting device: %s", name.c_str());
-                    }
-                });
-        }
-    }
-}
-
-TEST_F(CameraHidlTest, getCameraCharacteristics) {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
-
-    for (const auto& name : cameraDeviceNames) {
-        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
-            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
-            ALOGI("getCameraCharacteristics: Testing camera device %s", name.c_str());
-            env->mProvider->getCameraDeviceInterface_V3_x(
-                name,
-                [&](auto status, const auto& device) {
-                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(device, nullptr);
-                    device3_2 = device;
-                });
-
-            device3_2->getCameraCharacteristics(
-                [&](auto status, const auto& chars) {
-                    ALOGI("getCameraCharacteristics returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    const camera_metadata_t* metadata = (camera_metadata_t*) chars.data();
-                    size_t expectedSize = chars.size();
-                    ASSERT_EQ(0, validate_camera_metadata_structure(metadata, &expectedSize));
-                    size_t entryCount = get_camera_metadata_entry_count(metadata);
-                    // TODO: we can do better than 0 here. Need to check how many required
-                    // characteristics keys we've defined.
-                    ASSERT_GT(entryCount, 0u);
-                    ALOGI("getCameraCharacteristics metadata entry count is %zu", entryCount);
-                });
-        }
-    }
-}
-
-TEST_F(CameraHidlTest, setTorchMode) {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
-    bool torchControlSupported = false;
-
-    CameraHidlEnvironment::Instance()->mProvider->isSetTorchModeSupported(
-        [&](auto status, bool support) {
-            ALOGI("isSetTorchModeSupported returns status:%d supported:%d",
-                    (int)status, support);
-            ASSERT_EQ(Status::OK, status);
-            torchControlSupported = support;
-        });
-
-    for (const auto& name : cameraDeviceNames) {
-        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
-            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
-            ALOGI("setTorchMode: Testing camera device %s", name.c_str());
-            env->mProvider->getCameraDeviceInterface_V3_x(
-                name,
-                [&](auto status, const auto& device) {
-                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(device, nullptr);
-                    device3_2 = device;
-                });
-
-            Status status = device3_2->setTorchMode(TorchMode::ON);
-            ALOGI("setTorchMode return status %d", (int)status);
-            if (!torchControlSupported) {
-                ASSERT_EQ(Status::METHOD_NOT_SUPPORTED, status);
-            } else {
-                ASSERT_TRUE(status == Status::OK || status == Status::OPERATION_NOT_SUPPORTED);
-                if (status == Status::OK) {
-                    status = device3_2->setTorchMode(TorchMode::OFF);
-                    ASSERT_EQ(Status::OK, status);
-                }
-            }
-        }
-    }
-}
-
-TEST_F(CameraHidlTest, dumpState) {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
-
-    for (const auto& name : cameraDeviceNames) {
-        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
-            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
-            ALOGI("dumpState: Testing camera device %s", name.c_str());
-            env->mProvider->getCameraDeviceInterface_V3_x(
-                name,
-                [&](auto status, const auto& device) {
-                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(device, nullptr);
-                    device3_2 = device;
-                });
-
-            native_handle_t* raw_handle = native_handle_create(1, 0);
-            raw_handle->data[0] = 1; // std out
-            hidl_handle handle = raw_handle;
-            device3_2->dumpState(handle);
-            native_handle_delete(raw_handle);
-        }
-    }
-}
-
-// Open, dumpStates, then close
-TEST_F(CameraHidlTest, openClose) {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
-
-    for (const auto& name : cameraDeviceNames) {
-        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
-            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
-            ALOGI("openClose: Testing camera device %s", name.c_str());
-            env->mProvider->getCameraDeviceInterface_V3_x(
-                name,
-                [&](auto status, const auto& device) {
-                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(device, nullptr);
-                    device3_2 = device;
-                });
-
-            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
-            sp<ICameraDeviceSession> session;
-            device3_2->open(
-                cb,
-                [&](auto status, const auto& newSession) {
-                    ALOGI("device::open returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(newSession, nullptr);
-                    session = newSession;
-                });
-
-            native_handle_t* raw_handle = native_handle_create(1, 0);
-            raw_handle->data[0] = 1; // std out
-            hidl_handle handle = raw_handle;
-            device3_2->dumpState(handle);
-            native_handle_delete(raw_handle);
-
-            session->close();
-            // TODO: test all session API calls return INTERNAL_ERROR after close
-            // TODO: keep a wp copy here and verify session cannot be promoted out of this scope
-        }
-    }
-}
-
-TEST_F(CameraHidlTest, constructDefaultRequestSettings) {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
-
-    for (const auto& name : cameraDeviceNames) {
-        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
-            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
-            ALOGI("constructDefaultRequestSettings: Testing camera device %s", name.c_str());
-            env->mProvider->getCameraDeviceInterface_V3_x(
-                name,
-                [&](auto status, const auto& device) {
-                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(device, nullptr);
-                    device3_2 = device;
-                });
-
-            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
-            sp<ICameraDeviceSession> session;
-            device3_2->open(
-                cb,
-                [&](auto status, const auto& newSession) {
-                    ALOGI("device::open returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(newSession, nullptr);
-                    session = newSession;
-                });
-
-            for (uint32_t t = (uint32_t) RequestTemplate::PREVIEW;
-                    t <= (uint32_t) RequestTemplate::MANUAL; t++) {
-                RequestTemplate reqTemplate = (RequestTemplate) t;
-                session->constructDefaultRequestSettings(
-                    reqTemplate,
-                    [&](auto status, const auto& req) {
-                        ALOGI("constructDefaultRequestSettings returns status:%d", (int)status);
-                        if (reqTemplate == RequestTemplate::ZERO_SHUTTER_LAG ||
-                                reqTemplate == RequestTemplate::MANUAL) {
-                            // optional templates
-                            ASSERT_TRUE(status == Status::OK || status == Status::ILLEGAL_ARGUMENT);
-                        } else {
-                            ASSERT_EQ(Status::OK, status);
-                        }
-
-                        if (status == Status::OK) {
-                            const camera_metadata_t* metadata =
-                                (camera_metadata_t*) req.data();
-                            size_t expectedSize = req.size();
-                            ASSERT_EQ(0, validate_camera_metadata_structure(
-                                    metadata, &expectedSize));
-                            size_t entryCount = get_camera_metadata_entry_count(metadata);
-                            // TODO: we can do better than 0 here. Need to check how many required
-                            // request keys we've defined for each template
-                            ASSERT_GT(entryCount, 0u);
-                            ALOGI("template %u metadata entry count is %zu", t, entryCount);
-                        } else {
-                            ASSERT_EQ(0u, req.size());
-                        }
-                    });
-            }
-            session->close();
-        }
-    }
-}
-
-TEST_F(CameraHidlTest, configureStreams) {
-    CameraHidlEnvironment* env = CameraHidlEnvironment::Instance();
-    hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames();
-
-    for (const auto& name : cameraDeviceNames) {
-        if (getCameraDeviceVersion(name) == CAMERA_DEVICE_API_VERSION_3_2) {
-            ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
-            ALOGI("configureStreams: Testing camera device %s", name.c_str());
-            env->mProvider->getCameraDeviceInterface_V3_x(
-                name,
-                [&](auto status, const auto& device) {
-                    ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(device, nullptr);
-                    device3_2 = device;
-                });
-
-            sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
-            sp<ICameraDeviceSession> session;
-            device3_2->open(
-                cb,
-                [&](auto status, const auto& newSession) {
-                    ALOGI("device::open returns status:%d", (int)status);
-                    ASSERT_EQ(Status::OK, status);
-                    ASSERT_NE(newSession, nullptr);
-                    session = newSession;
-                });
-
-
-            session->close();
-        }
-    }
-}
-
-int main(int argc, char **argv) {
-  ::testing::AddGlobalTestEnvironment(CameraHidlEnvironment::Instance());
-  ::testing::InitGoogleTest(&argc, argv);
-  int status = RUN_ALL_TESTS();
-  ALOGI("Test result = %d", status);
-  return status;
-}
diff --git a/configstore/1.0/Android.bp b/configstore/1.0/Android.bp
new file mode 100644
index 0000000..c2cd54a
--- /dev/null
+++ b/configstore/1.0/Android.bp
@@ -0,0 +1,62 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.configstore@1.0_hal",
+    srcs: [
+        "types.hal",
+        "ISurfaceFlingerConfigs.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.configstore@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0",
+    srcs: [
+        ":android.hardware.configstore@1.0_hal",
+    ],
+    out: [
+        "android/hardware/configstore/1.0/types.cpp",
+        "android/hardware/configstore/1.0/SurfaceFlingerConfigsAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.configstore@1.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0",
+    srcs: [
+        ":android.hardware.configstore@1.0_hal",
+    ],
+    out: [
+        "android/hardware/configstore/1.0/types.h",
+        "android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h",
+        "android/hardware/configstore/1.0/IHwSurfaceFlingerConfigs.h",
+        "android/hardware/configstore/1.0/BnHwSurfaceFlingerConfigs.h",
+        "android/hardware/configstore/1.0/BpHwSurfaceFlingerConfigs.h",
+        "android/hardware/configstore/1.0/BsSurfaceFlingerConfigs.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.configstore@1.0",
+    generated_sources: ["android.hardware.configstore@1.0_genc++"],
+    generated_headers: ["android.hardware.configstore@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.configstore@1.0_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/configstore/1.0/Android.mk b/configstore/1.0/Android.mk
new file mode 100644
index 0000000..010d509
--- /dev/null
+++ b/configstore/1.0/Android.mk
@@ -0,0 +1,308 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.configstore@1.0-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java \
+
+
+#
+# Build types.hal (OptionalBool)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalBool.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalBool
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalInt32)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt32.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalInt32
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalInt64)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt64.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalInt64
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalString)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalString.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalString
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalUInt32)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt32.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalUInt32
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalUInt64)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt64.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalUInt64
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build ISurfaceFlingerConfigs.hal
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/ISurfaceFlingerConfigs.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISurfaceFlingerConfigs.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::ISurfaceFlingerConfigs
+
+$(GEN): $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.configstore@1.0-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java-static \
+
+
+#
+# Build types.hal (OptionalBool)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalBool.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalBool
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalInt32)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt32.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalInt32
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalInt64)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt64.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalInt64
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalString)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalString.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalString
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalUInt32)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt32.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalUInt32
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalUInt64)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt64.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalUInt64
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build ISurfaceFlingerConfigs.hal
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/ISurfaceFlingerConfigs.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISurfaceFlingerConfigs.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::ISurfaceFlingerConfigs
+
+$(GEN): $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/configstore/1.0/ISurfaceFlingerConfigs.hal b/configstore/1.0/ISurfaceFlingerConfigs.hal
new file mode 100644
index 0000000..4403a90
--- /dev/null
+++ b/configstore/1.0/ISurfaceFlingerConfigs.hal
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2017 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.configstore@1.0;
+
+interface ISurfaceFlingerConfigs {
+    vsyncEventPhaseOffsetNs() generates (OptionalInt64 value);
+    useTripleFramebuffer() generates (OptionalBool value);
+};
diff --git a/configstore/1.0/default/Android.mk b/configstore/1.0/default/Android.mk
new file mode 100644
index 0000000..116126d
--- /dev/null
+++ b/configstore/1.0/default/Android.mk
@@ -0,0 +1,42 @@
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.configstore@1.0-impl
+LOCAL_PROPRIETARY_MODULE := true
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_MODULE_RELATIVE_PATH := hw
+
+include $(LOCAL_PATH)/surfaceflinger.mk
+
+LOCAL_SHARED_LIBRARIES := \
+    libbase \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    libutils \
+    android.hardware.configstore@1.0 \
+    android.hidl.base@1.0
+
+include $(BUILD_SHARED_LIBRARY)
+
+################################################################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.configstore@1.0-service
+LOCAL_PROPRIETARY_MODULE := true
+LOCAL_MODULE_CLASS := EXECUTABLES
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_INIT_RC := android.hardware.configstore@1.0-service.rc
+LOCAL_SRC_FILES:= service.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog \
+    libdl \
+    libutils \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    android.hardware.configstore@1.0 \
+
+include $(BUILD_EXECUTABLE)
+
diff --git a/configstore/1.0/default/SurfaceFlingerConfigs.cpp b/configstore/1.0/default/SurfaceFlingerConfigs.cpp
new file mode 100644
index 0000000..5d62b15
--- /dev/null
+++ b/configstore/1.0/default/SurfaceFlingerConfigs.cpp
@@ -0,0 +1,42 @@
+#include "SurfaceFlingerConfigs.h"
+
+#include <android-base/logging.h>
+
+namespace android {
+namespace hardware {
+namespace configstore {
+namespace V1_0 {
+namespace implementation {
+
+// Methods from ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs follow.
+Return<void> SurfaceFlingerConfigs::vsyncEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb) {
+#ifdef VSYNC_EVENT_PHASE_OFFSET_NS
+    _hidl_cb({true, VSYNC_EVENT_PHASE_OFFSET_NS});
+    LOG(INFO) << "vsync event phase offset ns =  " << VSYNC_EVENT_PHASE_OFFSET_NS;
+#else
+    _hidl_cb({false, 0});
+#endif
+    return Void();
+}
+
+Return<void> SurfaceFlingerConfigs::useTripleFramebuffer(useTripleFramebuffer_cb _hidl_cb) {
+    bool value = false;
+#ifdef USE_TRIPLE_FRAMEBUFFER
+    value = true;
+#endif
+    _hidl_cb({true, value});
+    LOG(INFO) << "SurfaceFlinger FrameBuffer: " << (value ? "triple" : "double");
+    return Void();
+}
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+ISurfaceFlingerConfigs* HIDL_FETCH_ISurfaceFlingerConfigs(const char* /* name */) {
+    return new SurfaceFlingerConfigs();
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace configstore
+}  // namespace hardware
+}  // namespace android
diff --git a/configstore/1.0/default/SurfaceFlingerConfigs.h b/configstore/1.0/default/SurfaceFlingerConfigs.h
new file mode 100644
index 0000000..c9652fc
--- /dev/null
+++ b/configstore/1.0/default/SurfaceFlingerConfigs.h
@@ -0,0 +1,42 @@
+#ifndef ANDROID_HARDWARE_CONFIGSTORE_V1_0_SURFACEFLINGERCONFIGS_H
+#define ANDROID_HARDWARE_CONFIGSTORE_V1_0_SURFACEFLINGERCONFIGS_H
+
+#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace configstore {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs;
+using ::android::hardware::configstore::V1_0::OptionalBool;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct SurfaceFlingerConfigs : public ISurfaceFlingerConfigs {
+    // Methods from ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs follow.
+    Return<void> vsyncEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb) override;
+    Return<void> useTripleFramebuffer(useTripleFramebuffer_cb _hidl_cb) override;
+
+    // Methods from ::android::hidl::base::V1_0::IBase follow.
+
+};
+
+extern "C" ISurfaceFlingerConfigs* HIDL_FETCH_ISurfaceFlingerConfigs(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace configstore
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_CONFIGSTORE_V1_0_SURFACEFLINGERCONFIGS_H
diff --git a/configstore/1.0/default/android.hardware.configstore@1.0-service.rc b/configstore/1.0/default/android.hardware.configstore@1.0-service.rc
new file mode 100644
index 0000000..8741bdd
--- /dev/null
+++ b/configstore/1.0/default/android.hardware.configstore@1.0-service.rc
@@ -0,0 +1,4 @@
+service configstore-hal-1-0 /vendor/bin/hw/android.hardware.configstore@1.0-service
+    class hal
+    user system
+    group system
diff --git a/configstore/1.0/default/service.cpp b/configstore/1.0/default/service.cpp
new file mode 100644
index 0000000..caec0ba
--- /dev/null
+++ b/configstore/1.0/default/service.cpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 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.configstore@1.0-service"
+
+#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
+#include <hidl/LegacySupport.h>
+
+using android::hardware::configstore::V1_0::ISurfaceFlingerConfigs;
+using android::hardware::configureRpcThreadpool;
+using android::hardware::registerPassthroughServiceImplementation;
+using android::hardware::joinRpcThreadpool;
+
+int main() {
+    // TODO(b/34857894): tune the max thread count.
+    configureRpcThreadpool(10, true);
+    registerPassthroughServiceImplementation<ISurfaceFlingerConfigs>();
+    // other interface registration comes here
+    joinRpcThreadpool();
+    return 0;
+}
diff --git a/configstore/1.0/default/surfaceflinger.mk b/configstore/1.0/default/surfaceflinger.mk
new file mode 100644
index 0000000..5a946f4
--- /dev/null
+++ b/configstore/1.0/default/surfaceflinger.mk
@@ -0,0 +1,10 @@
+
+LOCAL_SRC_FILES += SurfaceFlingerConfigs.cpp
+
+ifneq ($(VSYNC_EVENT_PHASE_OFFSET_NS),)
+    LOCAL_CFLAGS += -DVSYNC_EVENT_PHASE_OFFSET_NS=$(VSYNC_EVENT_PHASE_OFFSET_NS)
+endif
+
+ifeq ($(NUM_FRAMEBUFFER_SURFACE_BUFFERS),3)
+    LOCAL_CFLAGS += -DUSE_TRIPLE_FRAMEBUFFER
+endif
diff --git a/configstore/1.0/types.hal b/configstore/1.0/types.hal
new file mode 100644
index 0000000..49e9bef
--- /dev/null
+++ b/configstore/1.0/types.hal
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2017 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.configstore@1.0;
+
+struct OptionalBool {
+    bool specified;
+    bool value;
+};
+
+struct OptionalInt32 {
+    bool specified;
+    int32_t value;
+};
+
+struct OptionalUInt32 {
+    bool specified;
+    uint32_t value;
+};
+
+struct OptionalInt64 {
+    bool specified;
+    int64_t value;
+};
+
+struct OptionalUInt64 {
+    bool specified;
+    uint64_t value;
+};
+
+struct OptionalString {
+    bool specified;
+    string value;
+};
diff --git a/vehicle/Android.bp b/configstore/Android.bp
similarity index 71%
rename from vehicle/Android.bp
rename to configstore/Android.bp
index c12cd4f..79b63f6 100644
--- a/vehicle/Android.bp
+++ b/configstore/Android.bp
@@ -1,4 +1,5 @@
 // This is an autogenerated file, do not edit.
 subdirs = [
-    "2.0",
+    "1.0",
+    "utils",
 ]
diff --git a/configstore/utils/Android.bp b/configstore/utils/Android.bp
new file mode 100644
index 0000000..32053a7
--- /dev/null
+++ b/configstore/utils/Android.bp
@@ -0,0 +1,28 @@
+//
+// Copyright (C) 2017 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_library_static {
+    name: "android.hardware.configstore-utils",
+    export_include_dirs: ["include"],
+    srcs: [],
+    shared_libs: [
+        "android.hardware.configstore@1.0",
+    ],
+    export_shared_lib_headers: [
+        "android.hardware.configstore@1.0",
+    ],
+}
+
diff --git a/configstore/utils/include/configstore/Utils.h b/configstore/utils/include/configstore/Utils.h
new file mode 100644
index 0000000..98ccae9
--- /dev/null
+++ b/configstore/utils/include/configstore/Utils.h
@@ -0,0 +1,94 @@
+//
+// Copyright (C) 2017 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 ANDROID_HARDWARE_CONFIGSTORE_UTILS_H
+#define ANDROID_HARDWARE_CONFIGSTORE_UTILS_H
+
+#include <hidl/Status.h>
+#include <stdatomic.h>
+
+namespace android {
+namespace hardware {
+namespace configstore {
+// arguments V: type for the value (i.e., OptionalXXX)
+//           I: interface class name
+//           func: member function pointer
+using namespace V1_0;
+
+template<typename V, typename I, android::hardware::Return<void> (I::* func)
+        (std::function<void(const V&)>)>
+decltype(V::value) get(const decltype(V::value) &defValue) {
+    auto getHelper = []()->V {
+        V ret;
+        sp<I> configs = I::getService();
+
+        if (!configs.get()) {
+            // fallback to the default value
+            ret.specified = false;
+        } else {
+            (*configs.*func)([&ret](V v) {
+                ret = v;
+            });
+        }
+
+        return ret;
+    };
+    static V cachedValue = getHelper();
+
+    return cachedValue.specified ? cachedValue.value : defValue;
+}
+
+template<typename I, android::hardware::Return<void> (I::* func)
+        (std::function<void(const OptionalBool&)>)>
+bool getBool(const bool defValue) {
+    return get<OptionalBool, I, func>(defValue);
+}
+
+template<typename I, android::hardware::Return<void> (I::* func)
+        (std::function<void(const OptionalInt32&)>)>
+int32_t getInt32(const int32_t defValue) {
+    return get<OptionalInt32, I, func>(defValue);
+}
+
+template<typename I, android::hardware::Return<void> (I::* func)
+        (std::function<void(const OptionalUInt32&)>)>
+uint32_t getUInt32(const uint32_t defValue) {
+    return get<OptionalUInt32, I, func>(defValue);
+}
+
+template<typename I, android::hardware::Return<void> (I::* func)
+        (std::function<void(const OptionalInt64&)>)>
+int64_t getInt64(const int64_t defValue) {
+    return get<OptionalInt64, I, func>(defValue);
+}
+
+template<typename I, android::hardware::Return<void> (I::* func)
+        (std::function<void(const OptionalUInt64&)>)>
+uint64_t getUInt64(const uint64_t defValue) {
+    return get<OptionalUInt64, I, func>(defValue);
+}
+
+template<typename I, android::hardware::Return<void> (I::* func)
+        (std::function<void(const OptionalString&)>)>
+std::string getString(const std::string &defValue) {
+    return get<OptionalString, I, func>(defValue);
+}
+
+}  // namespace configstore
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_CONFIGSTORE_UTILS_H
diff --git a/contexthub/1.0/Android.bp b/contexthub/1.0/Android.bp
index 5798306..8cd4acb 100644
--- a/contexthub/1.0/Android.bp
+++ b/contexthub/1.0/Android.bp
@@ -1,13 +1,20 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.contexthub@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IContexthub.hal",
+        "IContexthubCallback.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.contexthub@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.contexthub@1.0",
     srcs: [
-        "types.hal",
-        "IContexthub.hal",
-        "IContexthubCallback.hal",
+        ":android.hardware.contexthub@1.0_hal",
     ],
     out: [
         "android/hardware/contexthub/1.0/types.cpp",
@@ -21,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.contexthub@1.0",
     srcs: [
-        "types.hal",
-        "IContexthub.hal",
-        "IContexthubCallback.hal",
+        ":android.hardware.contexthub@1.0_hal",
     ],
     out: [
         "android/hardware/contexthub/1.0/types.h",
diff --git a/contexthub/1.0/Android.mk b/contexthub/1.0/Android.mk
index c73c5c4..a053986 100644
--- a/contexthub/1.0/Android.mk
+++ b/contexthub/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.contexthub@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -334,7 +334,7 @@
 LOCAL_MODULE := android.hardware.contexthub@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/contexthub/1.0/default/Android.bp b/contexthub/1.0/default/Android.bp
index 7c5f79d..0e1dc77 100644
--- a/contexthub/1.0/default/Android.bp
+++ b/contexthub/1.0/default/Android.bp
@@ -16,6 +16,7 @@
 
 cc_library_shared {
     name: "android.hardware.contexthub@1.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["Contexthub.cpp"],
     shared_libs: [
diff --git a/contexthub/1.0/default/Android.mk b/contexthub/1.0/default/Android.mk
index ad40878..cc36b7f 100644
--- a/contexthub/1.0/default/Android.mk
+++ b/contexthub/1.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.contexthub@1.0-service
 LOCAL_INIT_RC := android.hardware.contexthub@1.0-service.rc
 LOCAL_SRC_FILES := \
diff --git a/contexthub/1.0/default/android.hardware.contexthub@1.0-service.rc b/contexthub/1.0/default/android.hardware.contexthub@1.0-service.rc
index 8dba85f..5677ec2 100644
--- a/contexthub/1.0/default/android.hardware.contexthub@1.0-service.rc
+++ b/contexthub/1.0/default/android.hardware.contexthub@1.0-service.rc
@@ -1,4 +1,4 @@
-service contexthub-hal-1-0 /system/bin/hw/android.hardware.contexthub@1.0-service
+service contexthub-hal-1-0 /vendor/bin/hw/android.hardware.contexthub@1.0-service
     class hal
     user system
     group system
diff --git a/contexthub/1.0/vts/functional/Android.bp b/contexthub/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..c3c121c
--- /dev/null
+++ b/contexthub/1.0/vts/functional/Android.bp
@@ -0,0 +1,34 @@
+//
+// Copyright (C) 2017 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: "VtsHalContexthubV1_0TargetTest",
+    gtest: true,
+    srcs: ["VtsHalContexthubV1_0TargetTest.cpp"],
+    shared_libs: [
+        "liblog",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hardware.contexthub@1.0",
+    ],
+    static_libs: ["libgtest"],
+    cflags: [
+        "-O0",
+        "-g",
+    ]
+}
+
diff --git a/contexthub/1.0/vts/functional/VtsHalContexthubV1_0TargetTest.cpp b/contexthub/1.0/vts/functional/VtsHalContexthubV1_0TargetTest.cpp
new file mode 100644
index 0000000..e4dea4f
--- /dev/null
+++ b/contexthub/1.0/vts/functional/VtsHalContexthubV1_0TargetTest.cpp
@@ -0,0 +1,388 @@
+/*
+ * Copyright (C) 2017 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 "contexthub_hidl_hal_test"
+
+#include <android-base/logging.h>
+#include <android/hardware/contexthub/1.0/IContexthub.h>
+#include <android/hardware/contexthub/1.0/IContexthubCallback.h>
+#include <android/hardware/contexthub/1.0/types.h>
+#include <android/log.h>
+#include <gtest/gtest.h>
+
+#include <cinttypes>
+#include <future>
+#include <utility>
+
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::contexthub::V1_0::AsyncEventType;
+using ::android::hardware::contexthub::V1_0::ContextHub;
+using ::android::hardware::contexthub::V1_0::ContextHubMsg;
+using ::android::hardware::contexthub::V1_0::HubAppInfo;
+using ::android::hardware::contexthub::V1_0::IContexthub;
+using ::android::hardware::contexthub::V1_0::IContexthubCallback;
+using ::android::hardware::contexthub::V1_0::NanoAppBinary;
+using ::android::hardware::contexthub::V1_0::Result;
+using ::android::hardware::contexthub::V1_0::TransactionResult;
+using ::android::sp;
+
+#define CONTEXTHUB_SERVICE_NAME "contexthub"
+
+#define ASSERT_OK(result) ASSERT_EQ(result, Result::OK)
+#define EXPECT_OK(result) EXPECT_EQ(result, Result::OK)
+
+namespace {
+
+// App ID with vendor "GoogT" (Google Testing), app identifier 0x555555. This
+// app ID is reserved and must never appear in the list of loaded apps.
+constexpr uint64_t kNonExistentAppId = 0x476f6f6754555555;
+
+// Helper that does explicit conversion of an enum class to its underlying/base
+// type. Useful for stream output of enum values.
+template<typename EnumType>
+constexpr typename std::underlying_type<EnumType>::type asBaseType(
+    EnumType value) {
+  return static_cast<typename std::underlying_type<EnumType>::type>(value);
+}
+
+// Synchronously queries IContexthub::getHubs() and returns the result
+hidl_vec<ContextHub> getHubsSync(sp<IContexthub> hubApi) {
+  hidl_vec<ContextHub> hubList;
+  std::promise<void> barrier;
+
+  hubApi->getHubs([&hubList, &barrier](const hidl_vec<ContextHub>& hubs) {
+    hubList = hubs;
+    barrier.set_value();
+  });
+  barrier.get_future().wait_for(std::chrono::seconds(1));
+
+  return hubList;
+}
+
+// Gets a list of valid hub IDs in the system
+std::vector<uint32_t> getHubIds() {
+  static std::vector<uint32_t> hubIds;
+
+  if (hubIds.size() == 0) {
+    sp<IContexthub> hubApi = IContexthub::getService(CONTEXTHUB_SERVICE_NAME);
+
+    if (hubApi != nullptr) {
+      for (ContextHub hub : getHubsSync(hubApi)) {
+        hubIds.push_back(hub.hubId);
+      }
+    }
+  }
+
+  ALOGD("Running tests against all %zu reported hubs", hubIds.size());
+  return hubIds;
+}
+
+// Base test fixture that initializes the HAL and makes the context hub API
+// handle available
+class ContexthubHidlTestBase : public ::testing::Test {
+ public:
+  virtual void SetUp() override {
+    hubApi = IContexthub::getService(CONTEXTHUB_SERVICE_NAME);
+    ASSERT_NE(hubApi, nullptr);
+
+    // getHubs() must be called at least once for proper initialization of the
+    // HAL implementation
+    getHubsSync(hubApi);
+  }
+
+  virtual void TearDown() override {}
+
+  sp<IContexthub> hubApi;
+};
+
+// Test fixture parameterized by hub ID
+class ContexthubHidlTest : public ContexthubHidlTestBase,
+                           public ::testing::WithParamInterface<uint32_t> {
+ public:
+  uint32_t getHubId() {
+    return GetParam();
+  }
+
+  Result registerCallback(sp<IContexthubCallback> cb) {
+    Result result = hubApi->registerCallback(getHubId(), cb);
+    ALOGD("Registered callback, result %" PRIu32, result);
+    return result;
+  }
+};
+
+// Base callback implementation that just logs all callbacks by default
+class ContexthubCallbackBase : public IContexthubCallback {
+ public:
+  virtual Return<void> handleClientMsg(const ContextHubMsg& /*msg*/) override {
+    ALOGD("Got client message callback");
+    return Void();
+  }
+
+  virtual Return<void> handleTxnResult(
+      uint32_t txnId, TransactionResult result) override {
+    ALOGD("Got transaction result callback for txnId %" PRIu32 " with result %"
+          PRId32, txnId, result);
+    return Void();
+  }
+
+  virtual Return<void> handleHubEvent(AsyncEventType evt) override {
+    ALOGD("Got hub event callback for event type %" PRIu32, evt);
+    return Void();
+  }
+
+  virtual Return<void> handleAppAbort(uint64_t appId, uint32_t abortCode)
+      override {
+    ALOGD("Got app abort notification for appId 0x%" PRIx64 " with abort code "
+          "0x%" PRIx32, appId, abortCode);
+    return Void();
+  }
+
+  virtual Return<void> handleAppsInfo(const hidl_vec<HubAppInfo>& /*appInfo*/)
+      override {
+    ALOGD("Got app info callback");
+    return Void();
+  }
+};
+
+// Wait for a callback to occur (signaled by the given future) up to the
+// provided timeout. If the future is invalid or the callback does not come
+// within the given time, returns false.
+template<class ReturnType>
+bool waitForCallback(
+    std::future<ReturnType> future,
+    ReturnType *result,
+    std::chrono::milliseconds timeout = std::chrono::seconds(5)) {
+  auto expiration = std::chrono::system_clock::now() + timeout;
+
+  EXPECT_NE(result, nullptr);
+  EXPECT_TRUE(future.valid());
+  if (result != nullptr && future.valid()) {
+    std::future_status status = future.wait_until(expiration);
+    EXPECT_NE(status, std::future_status::timeout)
+        << "Timed out waiting for callback";
+
+    if (status == std::future_status::ready) {
+      *result = future.get();
+      return true;
+    }
+  }
+
+  return false;
+}
+
+// Ensures that the metadata reported in getHubs() is sane
+TEST_F(ContexthubHidlTestBase, TestGetHubs) {
+  hidl_vec<ContextHub> hubs = getHubsSync(hubApi);
+  ALOGD("System reports %zu hubs", hubs.size());
+
+  for (ContextHub hub : hubs) {
+    ALOGD("Checking hub ID %" PRIu32, hub.hubId);
+
+    EXPECT_FALSE(hub.name.empty());
+    EXPECT_FALSE(hub.vendor.empty());
+    EXPECT_FALSE(hub.toolchain.empty());
+    EXPECT_GT(hub.peakMips, 0);
+    EXPECT_GE(hub.stoppedPowerDrawMw, 0);
+    EXPECT_GE(hub.sleepPowerDrawMw, 0);
+    EXPECT_GT(hub.peakPowerDrawMw, 0);
+
+    // Minimum 128 byte MTU as required by CHRE API v1.0
+    EXPECT_GE(hub.maxSupportedMsgLen, UINT32_C(128));
+  }
+}
+
+TEST_P(ContexthubHidlTest, TestRegisterCallback) {
+  ALOGD("TestRegisterCallback called, hubId %" PRIu32, getHubId());
+  ASSERT_OK(registerCallback(new ContexthubCallbackBase()));
+}
+
+TEST_P(ContexthubHidlTest, TestRegisterNullCallback) {
+  ALOGD("TestRegisterNullCallback called, hubId %" PRIu32, getHubId());
+  ASSERT_OK(registerCallback(nullptr));
+}
+
+// Helper callback that puts the async appInfo callback data into a promise
+class QueryAppsCallback : public ContexthubCallbackBase {
+ public:
+  virtual Return<void> handleAppsInfo(const hidl_vec<HubAppInfo>& appInfo)
+      override {
+    ALOGD("Got app info callback with %zu apps", appInfo.size());
+    promise.set_value(appInfo);
+    return Void();
+  }
+
+  std::promise<hidl_vec<HubAppInfo>> promise;
+};
+
+// Calls queryApps() and checks the returned metadata
+TEST_P(ContexthubHidlTest, TestQueryApps) {
+  ALOGD("TestQueryApps called, hubId %u", getHubId());
+  sp<QueryAppsCallback> cb = new QueryAppsCallback();
+  ASSERT_OK(registerCallback(cb));
+
+  Result result = hubApi->queryApps(getHubId());
+  ASSERT_OK(result);
+
+  ALOGD("Waiting for app info callback");
+  hidl_vec<HubAppInfo> appList;
+  ASSERT_TRUE(waitForCallback(cb->promise.get_future(), &appList));
+  for (const HubAppInfo &appInfo : appList) {
+    EXPECT_NE(appInfo.appId, UINT64_C(0));
+    EXPECT_NE(appInfo.appId, kNonExistentAppId);
+  }
+}
+
+// Helper callback that puts the TransactionResult for the expectedTxnId into a
+// promise
+class TxnResultCallback : public ContexthubCallbackBase {
+ public:
+  virtual Return<void> handleTxnResult(
+      uint32_t txnId, TransactionResult result) override {
+    ALOGD("Got transaction result callback for txnId %" PRIu32 " (expecting %"
+          PRIu32 ") with result %" PRId32, txnId, expectedTxnId, result);
+    if (txnId == expectedTxnId) {
+      promise.set_value(result);
+    }
+    return Void();
+  }
+
+  uint32_t expectedTxnId = 0;
+  std::promise<TransactionResult> promise;
+};
+
+// Parameterized fixture that sets the callback to TxnResultCallback
+class ContexthubTxnTest : public ContexthubHidlTest {
+ public:
+  virtual void SetUp() override {
+    ContexthubHidlTest::SetUp();
+    ASSERT_OK(registerCallback(cb));
+  }
+
+  sp<TxnResultCallback> cb = new TxnResultCallback();
+};
+
+
+// Checks cases where the hub implementation is expected to return an error, but
+// that error can be returned either synchronously or in the asynchronous
+// transaction callback. Returns an AssertionResult that can be used in
+// ASSERT/EXPECT_TRUE. Allows checking the sync result against 1 additional
+// allowed error code apart from OK and TRANSACTION_FAILED, which are always
+// allowed.
+::testing::AssertionResult checkFailureSyncOrAsync(
+    Result result, Result allowedSyncResult,
+    std::future<TransactionResult>&& future) {
+  if (result == Result::OK) {
+    // No error reported synchronously - this is OK, but then we should get an
+    // async callback with a failure status
+    TransactionResult asyncResult;
+    if (!waitForCallback(std::forward<std::future<TransactionResult>>(future),
+                         &asyncResult)) {
+      return ::testing::AssertionFailure()
+          << "Got successful sync result, then failed to receive async cb";
+    } else if (asyncResult == TransactionResult::SUCCESS) {
+      return ::testing::AssertionFailure()
+          << "Got successful sync result, then unexpected successful async "
+             "result";
+    }
+  } else if (result != allowedSyncResult &&
+             result != Result::TRANSACTION_FAILED) {
+    return ::testing::AssertionFailure() << "Got sync result "
+        << asBaseType(result) << ", expected TRANSACTION_FAILED or "
+        << asBaseType(allowedSyncResult);
+  }
+
+  return ::testing::AssertionSuccess();
+}
+
+TEST_P(ContexthubTxnTest, TestSendMessageToNonExistentNanoApp) {
+  ContextHubMsg msg;
+  msg.appName = kNonExistentAppId;
+  msg.msgType = 1;
+  msg.msg.resize(4);
+  std::fill(msg.msg.begin(), msg.msg.end(), 0);
+
+  ALOGD("Sending message to non-existent nanoapp");
+  Result result = hubApi->sendMessageToHub(getHubId(), msg);
+  if (result != Result::OK &&
+      result != Result::BAD_PARAMS &&
+      result != Result::TRANSACTION_FAILED) {
+    FAIL() << "Got result " << asBaseType(result) << ", expected OK, BAD_PARAMS"
+        << ", or TRANSACTION_FAILED";
+  }
+}
+
+TEST_P(ContexthubTxnTest, TestLoadEmptyNanoApp) {
+  cb->expectedTxnId = 0123;
+  NanoAppBinary emptyApp;
+
+  emptyApp.appId = kNonExistentAppId;
+  emptyApp.appVersion = 1;
+  emptyApp.flags = 0;
+  emptyApp.targetChreApiMajorVersion = 1;
+  emptyApp.targetChreApiMinorVersion = 0;
+
+  ALOGD("Loading empty nanoapp");
+  Result result = hubApi->loadNanoApp(getHubId(), emptyApp, cb->expectedTxnId);
+  EXPECT_TRUE(checkFailureSyncOrAsync(result, Result::BAD_PARAMS,
+                                      cb->promise.get_future()));
+}
+
+TEST_P(ContexthubTxnTest, TestUnloadNonexistentNanoApp) {
+  cb->expectedTxnId = 1234;
+
+  ALOGD("Unloading nonexistent nanoapp");
+  Result result = hubApi->unloadNanoApp(getHubId(), kNonExistentAppId,
+                                        cb->expectedTxnId);
+  EXPECT_TRUE(checkFailureSyncOrAsync(result, Result::BAD_PARAMS,
+                                      cb->promise.get_future()));
+}
+
+TEST_P(ContexthubTxnTest, TestEnableNonexistentNanoApp) {
+  cb->expectedTxnId = 2345;
+
+  ALOGD("Enabling nonexistent nanoapp");
+  Result result = hubApi->enableNanoApp(getHubId(), kNonExistentAppId,
+                                        cb->expectedTxnId);
+  EXPECT_TRUE(checkFailureSyncOrAsync(result, Result::BAD_PARAMS,
+                                      cb->promise.get_future()));
+}
+
+TEST_P(ContexthubTxnTest, TestDisableNonexistentNanoApp) {
+  cb->expectedTxnId = 3456;
+
+  ALOGD("Disabling nonexistent nanoapp");
+  Result result = hubApi->disableNanoApp(getHubId(), kNonExistentAppId,
+                                         cb->expectedTxnId);
+  EXPECT_TRUE(checkFailureSyncOrAsync(result, Result::BAD_PARAMS,
+                                      cb->promise.get_future()));
+}
+
+// Parameterize all SingleContexthubTest tests against each valid hub ID
+INSTANTIATE_TEST_CASE_P(HubIdSpecificTests, ContexthubHidlTest,
+                        ::testing::ValuesIn(getHubIds()));
+INSTANTIATE_TEST_CASE_P(HubIdSpecificTests, ContexthubTxnTest,
+                        ::testing::ValuesIn(getHubIds()));
+
+} // anonymous namespace
+
+int main(int argc, char **argv) {
+  ::testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
+
diff --git a/contexthub/Android.bp b/contexthub/Android.bp
index ba90f2c..ed19a37 100644
--- a/contexthub/Android.bp
+++ b/contexthub/Android.bp
@@ -2,4 +2,5 @@
 subdirs = [
     "1.0",
     "1.0/default",
+    "1.0/vts/functional",
 ]
diff --git a/drm/1.0/Android.bp b/drm/1.0/Android.bp
index d899114..0241984 100644
--- a/drm/1.0/Android.bp
+++ b/drm/1.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.drm@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm@1.0",
+filegroup {
+    name: "android.hardware.drm@1.0_hal",
     srcs: [
         "types.hal",
         "ICryptoFactory.hal",
@@ -12,6 +10,15 @@
         "IDrmPlugin.hal",
         "IDrmPluginListener.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.drm@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm@1.0",
+    srcs: [
+        ":android.hardware.drm@1.0_hal",
+    ],
     out: [
         "android/hardware/drm/1.0/types.cpp",
         "android/hardware/drm/1.0/CryptoFactoryAll.cpp",
@@ -27,12 +34,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm@1.0",
     srcs: [
-        "types.hal",
-        "ICryptoFactory.hal",
-        "ICryptoPlugin.hal",
-        "IDrmFactory.hal",
-        "IDrmPlugin.hal",
-        "IDrmPluginListener.hal",
+        ":android.hardware.drm@1.0_hal",
     ],
     out: [
         "android/hardware/drm/1.0/types.h",
diff --git a/drm/1.0/ICryptoPlugin.hal b/drm/1.0/ICryptoPlugin.hal
index d66151e..ca8fa50 100644
--- a/drm/1.0/ICryptoPlugin.hal
+++ b/drm/1.0/ICryptoPlugin.hal
@@ -62,8 +62,16 @@
      * After the shared buffer base is established, the decrypt() method
      * receives SharedBuffer instances which specify the buffer address range
      * for decrypt source and destination addresses.
+     *
+     * There can be multiple shared buffers per crypto plugin. The buffers
+     * are distinguished by the bufferId.
+     *
+     * @param base the base IMemory of the memory buffer identified by
+     * bufferId
+     * @param bufferId identifies the specific shared buffer for which
+     * the base is being set.
      */
-    setSharedBufferBase(memory base);
+    setSharedBufferBase(memory base, uint32_t bufferId);
 
     /**
      * Decrypt an array of subsamples from the source memory buffer to the
diff --git a/drm/1.0/IDrmFactory.hal b/drm/1.0/IDrmFactory.hal
index de53929..f8e4779 100644
--- a/drm/1.0/IDrmFactory.hal
+++ b/drm/1.0/IDrmFactory.hal
@@ -50,10 +50,12 @@
      *
      * @param uuid uniquely identifies the drm scheme. See
      * http://dashif.org/identifiers/protection for uuid assignments
+     * @param appPackageName identifies the package name of the calling
+     * application.
      * @return status the status of the call. The HAL implementation must return
      * OK if the plugin is created and ERROR_DRM_CANNOT_HANDLE if the plugin
      * cannot be created.
      */
-    createPlugin(uint8_t[16] uuid) generates (Status status,
-            IDrmPlugin drmPlugin);
+    createPlugin(uint8_t[16] uuid, string appPackageName)
+            generates (Status status, IDrmPlugin drmPlugin);
 };
diff --git a/drm/1.0/default/Android.mk b/drm/1.0/default/Android.mk
index ac5b90a..ea6cca0 100644
--- a/drm/1.0/default/Android.mk
+++ b/drm/1.0/default/Android.mk
@@ -21,6 +21,7 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.drm@1.0-service
 LOCAL_INIT_RC := android.hardware.drm@1.0-service.rc
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
   service.cpp \
@@ -48,6 +49,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.drm@1.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     DrmFactory.cpp \
diff --git a/drm/1.0/default/CryptoFactory.cpp b/drm/1.0/default/CryptoFactory.cpp
index 02084e7..e46233d 100644
--- a/drm/1.0/default/CryptoFactory.cpp
+++ b/drm/1.0/default/CryptoFactory.cpp
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#define LOG_TAG "android.hardware.drm@1.0-impl"
 
 #include "CryptoFactory.h"
 #include "CryptoPlugin.h"
diff --git a/drm/1.0/default/CryptoPlugin.cpp b/drm/1.0/default/CryptoPlugin.cpp
index 073f030..4a4171b 100644
--- a/drm/1.0/default/CryptoPlugin.cpp
+++ b/drm/1.0/default/CryptoPlugin.cpp
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#define LOG_TAG "android.hardware.drm@1.0-impl"
 
 #include "CryptoPlugin.h"
 #include "TypeConvert.h"
@@ -48,8 +49,9 @@
         return toStatus(mLegacyPlugin->setMediaDrmSession(toVector(sessionId)));
     }
 
-    Return<void> CryptoPlugin::setSharedBufferBase(const hidl_memory& base) {
-        mSharedBufferBase = mapMemory(base);
+    Return<void> CryptoPlugin::setSharedBufferBase(const hidl_memory& base,
+            uint32_t bufferId) {
+        mSharedBufferMap[bufferId] = mapMemory(base);
         return Void();
     }
 
@@ -61,6 +63,19 @@
             const DestinationBuffer& destination,
             decrypt_cb _hidl_cb) {
 
+        if (mSharedBufferMap.find(source.bufferId) == mSharedBufferMap.end()) {
+            _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "source decrypt buffer base not set");
+            return Void();
+        }
+
+        if (destination.type == BufferType::SHARED_MEMORY) {
+            const SharedBuffer& dest = destination.nonsecureMemory;
+            if (mSharedBufferMap.find(dest.bufferId) == mSharedBufferMap.end()) {
+                _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "destination decrypt buffer base not set");
+                return Void();
+            }
+        }
+
         android::CryptoPlugin::Mode legacyMode;
         switch(mode) {
         case Mode::UNENCRYPTED:
@@ -91,20 +106,22 @@
         }
 
         AString detailMessage;
+        sp<IMemory> sourceBase = mSharedBufferMap[source.bufferId];
 
-        if (source.offset + offset + source.size > mSharedBufferBase->getSize()) {
+        if (source.offset + offset + source.size > sourceBase->getSize()) {
             _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size");
             return Void();
         }
 
         uint8_t *base = static_cast<uint8_t *>
-                (static_cast<void *>(mSharedBufferBase->getPointer()));
+                (static_cast<void *>(sourceBase->getPointer()));
         void *srcPtr = static_cast<void *>(base + source.offset + offset);
 
         void *destPtr = NULL;
         if (destination.type == BufferType::SHARED_MEMORY) {
             const SharedBuffer& destBuffer = destination.nonsecureMemory;
-            if (destBuffer.offset + destBuffer.size > mSharedBufferBase->getSize()) {
+            sp<IMemory> destBase = mSharedBufferMap[destBuffer.bufferId];
+            if (destBuffer.offset + destBuffer.size > destBase->getSize()) {
                 _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size");
                 return Void();
             }
diff --git a/drm/1.0/default/CryptoPlugin.h b/drm/1.0/default/CryptoPlugin.h
index f805f09..11cc2aa 100644
--- a/drm/1.0/default/CryptoPlugin.h
+++ b/drm/1.0/default/CryptoPlugin.h
@@ -57,8 +57,8 @@
     Return<Status> setMediaDrmSession(const hidl_vec<uint8_t>& sessionId)
             override;
 
-    Return<void> setSharedBufferBase(const ::android::hardware::hidl_memory& base)
-            override;
+    Return<void> setSharedBufferBase(const ::android::hardware::hidl_memory& base,
+        uint32_t bufferId) override;
 
     Return<void> decrypt(bool secure, const hidl_array<uint8_t, 16>& keyId,
             const hidl_array<uint8_t, 16>& iv, Mode mode, const Pattern& pattern,
@@ -68,7 +68,7 @@
 
 private:
     android::CryptoPlugin *mLegacyPlugin;
-    sp<IMemory> mSharedBufferBase;
+    std::map<uint32_t, sp<IMemory> > mSharedBufferMap;
 
     CryptoPlugin() = delete;
     CryptoPlugin(const CryptoPlugin &) = delete;
diff --git a/drm/1.0/default/DrmFactory.cpp b/drm/1.0/default/DrmFactory.cpp
index cba2c99..92f54f1 100644
--- a/drm/1.0/default/DrmFactory.cpp
+++ b/drm/1.0/default/DrmFactory.cpp
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#define LOG_TAG "android.hardware.drm@1.0-impl"
 
 #include "DrmFactory.h"
 #include "DrmPlugin.h"
@@ -51,7 +52,7 @@
     }
 
     Return<void> DrmFactory::createPlugin(const hidl_array<uint8_t, 16>& uuid,
-            createPlugin_cb _hidl_cb) {
+            const hidl_string& appPackageName, createPlugin_cb _hidl_cb) {
 
         for (size_t i = 0; i < loader.factoryCount(); i++) {
             if (loader.getFactory(i)->isCryptoSchemeSupported(uuid.data())) {
diff --git a/drm/1.0/default/DrmFactory.h b/drm/1.0/default/DrmFactory.h
index 78b7f6e..a008844 100644
--- a/drm/1.0/default/DrmFactory.h
+++ b/drm/1.0/default/DrmFactory.h
@@ -50,7 +50,7 @@
             override;
 
     Return<void> createPlugin(const hidl_array<uint8_t, 16>& uuid,
-            createPlugin_cb _hidl_cb) override;
+            const hidl_string& appPackageName, createPlugin_cb _hidl_cb) override;
 
 private:
     android::PluginLoader<android::DrmFactory> loader;
diff --git a/drm/1.0/default/DrmPlugin.cpp b/drm/1.0/default/DrmPlugin.cpp
index 9204fc5..1b2f90e 100644
--- a/drm/1.0/default/DrmPlugin.cpp
+++ b/drm/1.0/default/DrmPlugin.cpp
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#define LOG_TAG "android.hardware.drm@1.0-impl"
 
 #include <utils/KeyedVector.h>
 #include <utils/String8.h>
diff --git a/drm/1.0/default/TypeConvert.cpp b/drm/1.0/default/TypeConvert.cpp
index 52cc503..ede2a38 100644
--- a/drm/1.0/default/TypeConvert.cpp
+++ b/drm/1.0/default/TypeConvert.cpp
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#define LOG_TAG "android.hardware.drm@1.0-impl"
 
 #include "TypeConvert.h"
 
diff --git a/drm/1.0/default/android.hardware.drm@1.0-service.rc b/drm/1.0/default/android.hardware.drm@1.0-service.rc
index 281dc4b..e7beca3 100644
--- a/drm/1.0/default/android.hardware.drm@1.0-service.rc
+++ b/drm/1.0/default/android.hardware.drm@1.0-service.rc
@@ -1,4 +1,4 @@
-service drm-hal-1-0 /system/bin/hw/android.hardware.drm@1.0-service
+service drm-hal-1-0 /vendor/bin/hw/android.hardware.drm@1.0-service
     class hal
     user media
     group mediadrm drmrpc
diff --git a/drm/1.0/default/service.cpp b/drm/1.0/default/service.cpp
index fba56ec..d2507c4 100644
--- a/drm/1.0/default/service.cpp
+++ b/drm/1.0/default/service.cpp
@@ -13,7 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 #define LOG_TAG "android.hardware.drm@1.0-service"
 
 #include <1.0/default/CryptoFactory.h>
diff --git a/drm/1.0/types.hal b/drm/1.0/types.hal
index 33bbf9a..5273044 100644
--- a/drm/1.0/types.hal
+++ b/drm/1.0/types.hal
@@ -293,12 +293,18 @@
 };
 
 /**
- * A SharedBuffer describes a decrypt buffer which is defined by an offset and
- * a size.  The offset is relative to the shared memory base which is established
- * using setSharedMemoryBase().
+ * SharedBuffer describes a decrypt buffer which is defined by a bufferId, an
+ * offset and a size.  The offset is relative to the shared memory base for the
+ * memory region identified by bufferId, which is established by
+ * setSharedMemoryBase().
  */
 struct SharedBuffer {
     /**
+     * The unique buffer identifier
+     */
+    uint32_t bufferId;
+
+    /**
      * The offset from the shared memory base
      */
     uint64_t offset;
diff --git a/dumpstate/1.0/Android.bp b/dumpstate/1.0/Android.bp
index 7255937..1b473bc 100644
--- a/dumpstate/1.0/Android.bp
+++ b/dumpstate/1.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.dumpstate@1.0_hal",
+    srcs: [
+        "IDumpstateDevice.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.dumpstate@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.dumpstate@1.0",
     srcs: [
-        "IDumpstateDevice.hal",
+        ":android.hardware.dumpstate@1.0_hal",
     ],
     out: [
         "android/hardware/dumpstate/1.0/DumpstateDeviceAll.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.dumpstate@1.0",
     srcs: [
-        "IDumpstateDevice.hal",
+        ":android.hardware.dumpstate@1.0_hal",
     ],
     out: [
         "android/hardware/dumpstate/1.0/IDumpstateDevice.h",
diff --git a/dumpstate/1.0/default/Android.mk b/dumpstate/1.0/default/Android.mk
index 0b15184..ed9ef97 100644
--- a/dumpstate/1.0/default/Android.mk
+++ b/dumpstate/1.0/default/Android.mk
@@ -4,6 +4,7 @@
 LOCAL_MODULE := android.hardware.dumpstate@1.0-service
 LOCAL_INIT_RC := android.hardware.dumpstate@1.0-service.rc
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_SRC_FILES := \
     DumpstateDevice.cpp \
     service.cpp
diff --git a/dumpstate/1.0/default/android.hardware.dumpstate@1.0-service.rc b/dumpstate/1.0/default/android.hardware.dumpstate@1.0-service.rc
index 99b968e..0f27248 100644
--- a/dumpstate/1.0/default/android.hardware.dumpstate@1.0-service.rc
+++ b/dumpstate/1.0/default/android.hardware.dumpstate@1.0-service.rc
@@ -1,4 +1,4 @@
-service dumpstate-1-0 /system/bin/hw/android.hardware.dumpstate@1.0-service
+service dumpstate-1-0 /vendor/bin/hw/android.hardware.dumpstate@1.0-service
     class hal
     user system
     group system
diff --git a/evs/1.0/Android.bp b/evs/1.0/Android.bp
index ed29968..89bac10 100644
--- a/evs/1.0/Android.bp
+++ b/evs/1.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.evs@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.evs@1.0",
+filegroup {
+    name: "android.hardware.evs@1.0_hal",
     srcs: [
         "types.hal",
         "IEvsCamera.hal",
@@ -11,6 +9,15 @@
         "IEvsDisplay.hal",
         "IEvsEnumerator.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.evs@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.evs@1.0",
+    srcs: [
+        ":android.hardware.evs@1.0_hal",
+    ],
     out: [
         "android/hardware/evs/1.0/types.cpp",
         "android/hardware/evs/1.0/EvsCameraAll.cpp",
@@ -25,11 +32,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.evs@1.0",
     srcs: [
-        "types.hal",
-        "IEvsCamera.hal",
-        "IEvsCameraStream.hal",
-        "IEvsDisplay.hal",
-        "IEvsEnumerator.hal",
+        ":android.hardware.evs@1.0_hal",
     ],
     out: [
         "android/hardware/evs/1.0/types.h",
diff --git a/evs/1.0/IEvsCamera.hal b/evs/1.0/IEvsCamera.hal
index a2fc565..d0559d7 100644
--- a/evs/1.0/IEvsCamera.hal
+++ b/evs/1.0/IEvsCamera.hal
@@ -65,7 +65,7 @@
      * as one), and if the supply is exhausted, no further frames may be
      * delivered until a buffer is returned.
      */
-    doneWithFrame(uint32_t frameId, handle bufferHandle) generates (EvsResult result);
+    oneway doneWithFrame(BufferDesc buffer);
 
     /**
      * Stop the delivery of EVS camera frames.
diff --git a/evs/1.0/IEvsCameraStream.hal b/evs/1.0/IEvsCameraStream.hal
index ef5460f..fcd5717 100644
--- a/evs/1.0/IEvsCameraStream.hal
+++ b/evs/1.0/IEvsCameraStream.hal
@@ -32,5 +32,5 @@
      * must be delivered, signifying the end of the stream. No further frame
      * deliveries may happen thereafter.
      */
-    oneway deliverFrame(uint32_t frameId, handle bufferHandle);
+    oneway deliverFrame(BufferDesc buffer);
 };
diff --git a/evs/1.0/IEvsDisplay.hal b/evs/1.0/IEvsDisplay.hal
index a473872..8352221 100644
--- a/evs/1.0/IEvsDisplay.hal
+++ b/evs/1.0/IEvsDisplay.hal
@@ -65,7 +65,7 @@
      * must be returned via a call to returnTargetBufferForDisplay() even if the
      * display is no longer visible.
      */
-     getTargetBuffer() generates (handle bufferHandle);
+     getTargetBuffer() generates (BufferDesc buffer);
 
 
     /**
@@ -76,5 +76,5 @@
      * call. The buffer may be returned at any time and in any DisplayState, but all
      * buffers are expected to be returned before the IEvsDisplay interface is destroyed.
      */
-    returnTargetBufferForDisplay(handle bufferHandle) generates (EvsResult result);
+    returnTargetBufferForDisplay(BufferDesc buffer) generates (EvsResult result);
 };
diff --git a/evs/1.0/IEvsEnumerator.hal b/evs/1.0/IEvsEnumerator.hal
index e3a1382..3779866 100644
--- a/evs/1.0/IEvsEnumerator.hal
+++ b/evs/1.0/IEvsEnumerator.hal
@@ -67,5 +67,15 @@
      * NOTE: All buffer must have been returned to the display before making this call.
      */
     closeDisplay(IEvsDisplay display);
+
+    /**
+     * This call requests the current state of the display
+     *
+     * If there is no open display, this returns DisplayState::NOT_OPEN. otherwise, it returns
+     * the actual state of the active display.  This call is replicated on the IEvsEnumerator
+     * interface in order to allow secondary clients to monitor the state of the EVS display
+     * without acquiring exclusive ownership of the display.
+     */
+    getDisplayState() generates (DisplayState state);
 };
 
diff --git a/evs/1.0/default/Android.bp b/evs/1.0/default/Android.bp
index 3bda250..7be365a 100644
--- a/evs/1.0/default/Android.bp
+++ b/evs/1.0/default/Android.bp
@@ -1,5 +1,6 @@
 cc_binary {
     name: "android.hardware.evs@1.0-service",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: [
         "service.cpp",
@@ -11,7 +12,6 @@
 
     shared_libs: [
         "android.hardware.evs@1.0",
-        "android.hardware.graphics.allocator@2.0",
         "libui",
         "libbase",
         "libbinder",
diff --git a/evs/1.0/default/EvsCamera.cpp b/evs/1.0/default/EvsCamera.cpp
index 6715a2e..df7e844 100644
--- a/evs/1.0/default/EvsCamera.cpp
+++ b/evs/1.0/default/EvsCamera.cpp
@@ -33,18 +33,22 @@
 const char EvsCamera::kCameraName_Backup[]    = "backup";
 const char EvsCamera::kCameraName_RightTurn[] = "Right Turn";
 
+// Arbitrary limit on number of graphics buffers allowed to be allocated
+// Safeguards against unreasonable resource consumption and provides a testable limit
+const unsigned MAX_BUFFERS_IN_FLIGHT = 100;
+
 
 // TODO(b/31632518):  Need to get notification when our client dies so we can close the camera.
-// As it stands, if the client dies suddently, the buffer may be stranded.
-// As possible work around would be to give the client a HIDL object to exclusively hold
-// and use it's destructor to perform some work in the server side.
+// As it stands, if the client dies suddenly, the buffer may be stranded.
 
-EvsCamera::EvsCamera(const char *id) {
+EvsCamera::EvsCamera(const char *id) :
+    mFramesAllowed(0),
+    mFramesInUse(0),
+    mStreamState(STOPPED) {
+
     ALOGD("EvsCamera instantiated");
 
     mDescription.cameraId = id;
-    mFrameBusy = false;
-    mStreamState = STOPPED;
 
     // Set up dummy data for testing
     if (mDescription.cameraId == kCameraName_Backup) {
@@ -52,16 +56,24 @@
         mDescription.vendorFlags            = 0xFFFFFFFF;   // Arbitrary value
         mDescription.defaultHorResolution   = 320;          // 1/2 NTSC/VGA
         mDescription.defaultVerResolution   = 240;          // 1/2 NTSC/VGA
-    }
-    else if (mDescription.cameraId == kCameraName_RightTurn) {
+    } else if (mDescription.cameraId == kCameraName_RightTurn) {
         // Nothing but the name and the usage hint
         mDescription.hints                  = static_cast<uint32_t>(UsageHint::USAGE_HINT_RIGHT_TURN);
-    }
-    else {
+    } else {
         // Leave empty for a minimalist camera description without even a hint
     }
+
+
+    // Set our buffer properties
+    mWidth  = (mDescription.defaultHorResolution) ? mDescription.defaultHorResolution : 640;
+    mHeight = (mDescription.defaultVerResolution) ? mDescription.defaultVerResolution : 480;
+
+    mFormat = HAL_PIXEL_FORMAT_RGBA_8888;
+    mUsage  = GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_CAMERA_WRITE |
+              GRALLOC_USAGE_SW_READ_RARELY | GRALLOC_USAGE_SW_WRITE_RARELY;
 }
 
+
 EvsCamera::~EvsCamera() {
     ALOGD("EvsCamera being destroyed");
     std::lock_guard<std::mutex> lock(mAccessLock);
@@ -70,11 +82,14 @@
     // (It really should be already)
     stopVideoStream();
 
-    // Drop the graphics buffer we've been using
-    if (mBuffer) {
-        // Drop the graphics buffer we've been using
-        GraphicBufferAllocator& alloc(GraphicBufferAllocator::get());
-        alloc.free(mBuffer);
+    // Drop all the graphics buffers we've been using
+    GraphicBufferAllocator& alloc(GraphicBufferAllocator::get());
+    for (auto&& rec : mBuffers) {
+        if (rec.inUse) {
+            ALOGE("Error - releasing buffer despite remote ownership");
+        }
+        alloc.free(rec.handle);
+        rec.handle = nullptr;
     }
 
     ALOGD("EvsCamera destroyed");
@@ -95,113 +110,109 @@
     ALOGD("setMaxFramesInFlight");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
-    // TODO:  Update our stored value
-
-    // TODO:  Adjust our buffer count right now if we can.  Otherwise, it'll adjust in doneWithFrame
-
-    // For now we support only one!
-    if (bufferCount != 1) {
-        return EvsResult::BUFFER_NOT_AVAILABLE;
+    // We cannot function without at least one video buffer to send data
+    if (bufferCount < 1) {
+        ALOGE("Ignoring setMaxFramesInFlight with less than one buffer requested");
+        return EvsResult::INVALID_ARG;
     }
 
-    return EvsResult::OK;
+    // Update our internal state
+    if (setAvailableFrames_Locked(bufferCount)) {
+        return EvsResult::OK;
+    } else {
+        return EvsResult::BUFFER_NOT_AVAILABLE;
+    }
 }
 
+
 Return<EvsResult> EvsCamera::startVideoStream(const ::android::sp<IEvsCameraStream>& stream)  {
     ALOGD("startVideoStream");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
-    // We only support a single stream at a time
     if (mStreamState != STOPPED) {
         ALOGE("ignoring startVideoStream call when a stream is already running.");
         return EvsResult::STREAM_ALREADY_RUNNING;
     }
 
+    // If the client never indicated otherwise, configure ourselves for a single streaming buffer
+    if (mFramesAllowed < 1) {
+        if (!setAvailableFrames_Locked(1)) {
+            ALOGE("Failed to start stream because we couldn't get a graphics buffer");
+            return EvsResult::BUFFER_NOT_AVAILABLE;
+        }
+    }
+
     // Record the user's callback for use when we have a frame ready
     mStream = stream;
 
-    // Allocate a graphics buffer into which we'll put our test images
-    if (!mBuffer) {
-        mWidth  = (mDescription.defaultHorResolution) ? mDescription.defaultHorResolution : 640;
-        mHeight = (mDescription.defaultVerResolution) ? mDescription.defaultVerResolution : 480;
-        // TODO:  What about stride?  Assume no padding for now...
-        mStride = 4* mWidth;    // Special cased to assume 4 byte pixels with no padding for now
-
-        ALOGD("Allocating buffer for camera frame");
-        GraphicBufferAllocator &alloc(GraphicBufferAllocator::get());
-        status_t result = alloc.allocate(mWidth, mHeight,
-                                         HAL_PIXEL_FORMAT_RGBA_8888, 1, GRALLOC_USAGE_HW_TEXTURE,
-                                         &mBuffer, &mStride, 0, "EvsCamera");
-        if (result != NO_ERROR) {
-            ALOGE("Error %d allocating %d x %d graphics buffer", result, mWidth, mHeight);
-            return EvsResult::BUFFER_NOT_AVAILABLE;
-        }
-        if (!mBuffer) {
-            ALOGE("We didn't get a buffer handle back from the allocator");
-            return EvsResult::BUFFER_NOT_AVAILABLE;
-        }
-    }
-
     // Start the frame generation thread
     mStreamState = RUNNING;
-    mCaptureThread = std::thread([this](){GenerateFrames();});
+    mCaptureThread = std::thread([this](){ generateFrames(); });
 
     return EvsResult::OK;
 }
 
-Return<EvsResult> EvsCamera::doneWithFrame(uint32_t /* frameId */, const hidl_handle& bufferHandle)  {
+
+Return<void> EvsCamera::doneWithFrame(const BufferDesc& buffer)  {
     ALOGD("doneWithFrame");
-    std::lock_guard<std::mutex> lock(mAccessLock);
-
-    if (!bufferHandle)
-    {
-        ALOGE("ignoring doneWithFrame called with invalid handle");
-        return EvsResult::INVALID_ARG;
-    }
-
-    // TODO:  Track which frames we've delivered and validate this is one of them
-
-    // Mark the frame buffer as available for a new frame
-    mFrameBusy = false;
-
-    // TODO:  If we currently have too many buffers, drop this one
-
-    return EvsResult::OK;
-}
-
-Return<void> EvsCamera::stopVideoStream()  {
-    ALOGD("stopVideoStream");
-
-    bool waitForJoin = false;
-    // Lock scope
-    {
+    {  // lock context
         std::lock_guard <std::mutex> lock(mAccessLock);
 
-        if (mStreamState == RUNNING) {
-            // Tell the GenerateFrames loop we want it to stop
-            mStreamState = STOPPING;
+        if (buffer.memHandle == nullptr) {
+            ALOGE("ignoring doneWithFrame called with null handle");
+        } else if (buffer.bufferId >= mBuffers.size()) {
+            ALOGE("ignoring doneWithFrame called with invalid bufferId %d (max is %lu)",
+                  buffer.bufferId, mBuffers.size()-1);
+        } else if (!mBuffers[buffer.bufferId].inUse) {
+            ALOGE("ignoring doneWithFrame called on frame %d which is already free",
+                  buffer.bufferId);
+        } else {
+            // Mark the frame as available
+            mBuffers[buffer.bufferId].inUse = false;
+            mFramesInUse--;
 
-            // Note that we asked the thread to stop and should wait for it do so
-            waitForJoin = true;
-        }
-    }
-
-    if (waitForJoin) {
-        // Block outside the mutex until the "stop" flag has been acknowledged
-        // NOTE:  We won't send any more frames, but the client might still get one already in flight
-        ALOGD("Waiting for stream thread to end...");
-        mCaptureThread.join();
-
-        // Lock scope
-        {
-            std::lock_guard <std::mutex> lock(mAccessLock);
-            mStreamState = STOPPED;
+            // If this frame's index is high in the array, try to move it down
+            // to improve locality after mFramesAllowed has been reduced.
+            if (buffer.bufferId >= mFramesAllowed) {
+                // Find an empty slot lower in the array (which should always exist in this case)
+                for (auto&& rec : mBuffers) {
+                    if (rec.handle == nullptr) {
+                        rec.handle = mBuffers[buffer.bufferId].handle;
+                        mBuffers[buffer.bufferId].handle = nullptr;
+                        break;
+                    }
+                }
+            }
         }
     }
 
     return Void();
 }
 
+
+Return<void> EvsCamera::stopVideoStream()  {
+    ALOGD("stopVideoStream");
+    std::unique_lock <std::mutex> lock(mAccessLock);
+
+    if (mStreamState == RUNNING) {
+        // Tell the GenerateFrames loop we want it to stop
+        mStreamState = STOPPING;
+
+        // Block outside the mutex until the "stop" flag has been acknowledged
+        // We won't send any more frames, but the client might still get some already in flight
+        ALOGD("Waiting for stream thread to end...");
+        lock.unlock();
+        mCaptureThread.join();
+        lock.lock();
+
+        mStreamState = STOPPED;
+        ALOGD("Stream marked STOPPED.");
+    }
+
+    return Void();
+}
+
+
 Return<int32_t> EvsCamera::getExtendedInfo(uint32_t opaqueIdentifier)  {
     ALOGD("getExtendedInfo");
     std::lock_guard<std::mutex> lock(mAccessLock);
@@ -215,6 +226,7 @@
     return 0;
 }
 
+
 Return<EvsResult> EvsCamera::setExtendedInfo(uint32_t /*opaqueIdentifier*/, int32_t /*opaqueValue*/)  {
     ALOGD("setExtendedInfo");
     std::lock_guard<std::mutex> lock(mAccessLock);
@@ -224,10 +236,124 @@
 }
 
 
-void EvsCamera::GenerateFrames() {
-    ALOGD("Frame generate loop started");
+bool EvsCamera::setAvailableFrames_Locked(unsigned bufferCount) {
+    if (bufferCount < 1) {
+        ALOGE("Ignoring request to set buffer count to zero");
+        return false;
+    }
+    if (bufferCount > MAX_BUFFERS_IN_FLIGHT) {
+        ALOGE("Rejecting buffer request in excess of internal limit");
+        return false;
+    }
 
-    uint32_t frameNumber;
+    // Is an increase required?
+    if (mFramesAllowed < bufferCount) {
+        // An increase is required
+        unsigned needed = bufferCount - mFramesAllowed;
+        ALOGI("Allocating %d buffers for camera frames", needed);
+
+        unsigned added = increaseAvailableFrames_Locked(needed);
+        if (added != needed) {
+            // If we didn't add all the frames we needed, then roll back to the previous state
+            ALOGE("Rolling back to previous frame queue size");
+            decreaseAvailableFrames_Locked(added);
+            return false;
+        }
+    } else if (mFramesAllowed > bufferCount) {
+        // A decrease is required
+        unsigned framesToRelease = mFramesAllowed - bufferCount;
+        ALOGI("Returning %d camera frame buffers", framesToRelease);
+
+        unsigned released = decreaseAvailableFrames_Locked(framesToRelease);
+        if (released != framesToRelease) {
+            // This shouldn't happen with a properly behaving client because the client
+            // should only make this call after returning sufficient outstanding buffers
+            // to allow a clean resize.
+            ALOGE("Buffer queue shrink failed -- too many buffers currently in use?");
+        }
+    }
+
+    return true;
+}
+
+
+unsigned EvsCamera::increaseAvailableFrames_Locked(unsigned numToAdd) {
+    // Acquire the graphics buffer allocator
+    GraphicBufferAllocator &alloc(GraphicBufferAllocator::get());
+
+    unsigned added = 0;
+
+    while (added < numToAdd) {
+        buffer_handle_t memHandle = nullptr;
+        status_t result = alloc.allocate(mWidth, mHeight,
+                                         mFormat, 1,
+                                         mUsage, mUsage,
+                                         &memHandle, &mStride, 0, "EvsCamera");
+        if (result != NO_ERROR) {
+            ALOGE("Error %d allocating %d x %d graphics buffer", result, mWidth, mHeight);
+            break;
+        }
+        if (!memHandle) {
+            ALOGE("We didn't get a buffer handle back from the allocator");
+            break;
+        }
+
+        // Find a place to store the new buffer
+        bool stored = false;
+        for (auto&& rec : mBuffers) {
+            if (rec.handle == nullptr) {
+                // Use this existing entry
+                rec.handle = memHandle;
+                rec.inUse = false;
+                stored = true;
+                break;
+            }
+        }
+        if (!stored) {
+            // Add a BufferRecord wrapping this handle to our set of available buffers
+            mBuffers.emplace_back(memHandle);
+        }
+
+        mFramesAllowed++;
+        added++;
+    }
+
+    return added;
+}
+
+
+unsigned EvsCamera::decreaseAvailableFrames_Locked(unsigned numToRemove) {
+    // Acquire the graphics buffer allocator
+    GraphicBufferAllocator &alloc(GraphicBufferAllocator::get());
+
+    unsigned removed = 0;
+
+    for (auto&& rec : mBuffers) {
+        // Is this record not in use, but holding a buffer that we can free?
+        if ((rec.inUse == false) && (rec.handle != nullptr)) {
+            // Release buffer and update the record so we can recognize it as "empty"
+            alloc.free(rec.handle);
+            rec.handle = nullptr;
+
+            mFramesAllowed--;
+            removed++;
+
+            if (removed == numToRemove) {
+                break;
+            }
+        }
+    }
+
+    return removed;
+}
+
+
+// This is the asynchronous frame generation thread that runs in parallel with the
+// main serving thread.  There is one for each active camera instance.
+void EvsCamera::generateFrames() {
+    ALOGD("Frame generation loop started");
+
+    unsigned idx;
 
     while (true) {
         bool timeForFrame = false;
@@ -235,57 +361,69 @@
         {
             std::lock_guard<std::mutex> lock(mAccessLock);
 
-            // Tick the frame counter -- rollover is tolerated
-            frameNumber = mFrameId++;
-
             if (mStreamState != RUNNING) {
                 // Break out of our main thread loop
                 break;
             }
 
-            if (mFrameBusy) {
+            // Are we allowed to issue another buffer?
+            if (mFramesInUse >= mFramesAllowed) {
                 // Can't do anything right now -- skip this frame
-                ALOGW("Skipped a frame because client hasn't returned a buffer\n");
-            }
-            else {
-                // We're going to make the frame busy
-                mFrameBusy = true;
-                timeForFrame = true;
+                ALOGW("Skipped a frame because too many are in flight\n");
+            } else {
+                // Identify an available buffer to fill
+                for (idx = 0; idx < mBuffers.size(); idx++) {
+                    if (!mBuffers[idx].inUse) {
+                        if (mBuffers[idx].handle != nullptr) {
+                            // Found an available record, so stop looking
+                            break;
+                        }
+                    }
+                }
+                if (idx >= mBuffers.size()) {
+                    // This shouldn't happen since we already checked mFramesInUse vs mFramesAllowed
+                    ALOGE("Failed to find an available buffer slot\n");
+                } else {
+                    // We're going to make the frame busy
+                    mBuffers[idx].inUse = true;
+                    mFramesInUse++;
+                    timeForFrame = true;
+                }
             }
         }
 
         if (timeForFrame) {
-            // Lock our output buffer for writing
-            uint32_t *pixels = nullptr;
-            GraphicBufferMapper &mapper = GraphicBufferMapper::get();
-            mapper.lock(mBuffer,
-                        GRALLOC_USAGE_SW_WRITE_OFTEN,
-                        android::Rect(mWidth, mHeight),
-                        (void **) &pixels);
+            // Assemble the buffer description we'll transmit below
+            BufferDesc buff = {};
+            buff.width      = mWidth;
+            buff.height     = mHeight;
+            buff.stride     = mStride;
+            buff.format     = mFormat;
+            buff.usage      = mUsage;
+            buff.bufferId   = idx;
+            buff.memHandle  = mBuffers[idx].handle;
 
-            // If we failed to lock the pixel buffer, we're about to crash, but log it first
-            if (!pixels) {
-                ALOGE("Camera failed to gain access to image buffer for writing");
+            // Write test data into the image buffer
+            fillTestFrame(buff);
+
+            // Issue the (asynchronous) callback to the client -- can't be holding the lock
+            auto result = mStream->deliverFrame(buff);
+            if (result.isOk()) {
+                ALOGD("Delivered %p as id %d", buff.memHandle.getNativeHandle(), buff.bufferId);
+            } else {
+                // This can happen if the client dies and is likely unrecoverable.
+                // To avoid consuming resources generating failing calls, we stop sending
+                // frames.  Note, however, that the stream remains in the "STREAMING" state
+                // until cleaned up on the main thread.
+                ALOGE("Frame delivery call failed in the transport layer.");
+
+                // Since we didn't actually deliver it, mark the frame as available
+                std::lock_guard<std::mutex> lock(mAccessLock);
+                mBuffers[idx].inUse = false;
+                mFramesInUse--;
+
+                break;
             }
-
-            // Fill in the test pixels
-            for (unsigned row = 0; row < mHeight; row++) {
-                for (unsigned col = 0; col < mWidth; col++) {
-                    // Index into the row to set the pixel at this column
-                    // (We're making vertical gradient in the green channel, and
-                    // horitzontal gradient in the blue channel)
-                    pixels[col] = 0xFF0000FF | ((row & 0xFF) << 16) | ((col & 0xFF) << 8);
-                }
-                // Point to the next row
-                pixels = pixels + (mStride / sizeof(*pixels));
-            }
-
-            // Release our output buffer
-            mapper.unlock(mBuffer);
-
-            // Issue the (asynchronous) callback to the client
-            mStream->deliverFrame(frameNumber, mBuffer);
-            ALOGD("Delivered %p as frame %d", mBuffer, frameNumber);
         }
 
         // We arbitrarily choose to generate frames at 10 fps (1/10 * uSecPerSec)
@@ -293,11 +431,59 @@
     }
 
     // If we've been asked to stop, send one last NULL frame to signal the actual end of stream
-    mStream->deliverFrame(frameNumber, nullptr);
+    BufferDesc nullBuff = {};
+    auto result = mStream->deliverFrame(nullBuff);
+    if (!result.isOk()) {
+        ALOGE("Error delivering end of stream marker");
+    }
 
     return;
 }
 
+
+void EvsCamera::fillTestFrame(const BufferDesc& buff) {
+    // Lock our output buffer for writing
+    uint32_t *pixels = nullptr;
+    GraphicBufferMapper &mapper = GraphicBufferMapper::get();
+    mapper.lock(buff.memHandle,
+                GRALLOC_USAGE_SW_WRITE_OFTEN | GRALLOC_USAGE_SW_READ_NEVER,
+                android::Rect(buff.width, buff.height),
+                (void **) &pixels);
+
+    // If we failed to lock the pixel buffer, we're about to crash, but log it first
+    if (!pixels) {
+        ALOGE("Camera failed to gain access to image buffer for writing");
+    }
+
+    // Fill in the test pixels
+    for (unsigned row = 0; row < buff.height; row++) {
+        for (unsigned col = 0; col < buff.width; col++) {
+            // Index into the row to check the pixel at this column.
+            // We expect 0xFF in the LSB channel, a vertical gradient in the
+            // second channel, a horitzontal gradient in the third channel, and
+            // 0xFF in the MSB.
+            // The exception is the very first 32 bits which is used for the
+            // time varying frame signature to avoid getting fooled by a static image.
+            uint32_t expectedPixel = 0xFF0000FF           | // MSB and LSB
+                                     ((row & 0xFF) <<  8) | // vertical gradient
+                                     ((col & 0xFF) << 16);  // horizontal gradient
+            if ((row | col) == 0) {
+                static uint32_t sFrameTicker = 0;
+                expectedPixel = (sFrameTicker) & 0xFF;
+                sFrameTicker++;
+            }
+            pixels[col] = expectedPixel;
+        }
+        // Point to the next row
+        // NOTE:  stride retrieved from gralloc is in units of pixels
+        pixels = pixels + buff.stride;
+    }
+
+    // Release our output buffer
+    mapper.unlock(buff.memHandle);
+}
+
+
 } // namespace implementation
 } // namespace V1_0
 } // namespace evs
diff --git a/evs/1.0/default/EvsCamera.h b/evs/1.0/default/EvsCamera.h
index 5d29125..02a677c 100644
--- a/evs/1.0/default/EvsCamera.h
+++ b/evs/1.0/default/EvsCamera.h
@@ -23,19 +23,21 @@
 
 #include <thread>
 
+
 namespace android {
 namespace hardware {
 namespace evs {
 namespace V1_0 {
 namespace implementation {
 
+
 class EvsCamera : public IEvsCamera {
 public:
     // Methods from ::android::hardware::evs::V1_0::IEvsCamera follow.
     Return<void> getId(getId_cb id_cb)  override;
     Return<EvsResult> setMaxFramesInFlight(uint32_t bufferCount)  override;
     Return<EvsResult> startVideoStream(const ::android::sp<IEvsCameraStream>& stream) override;
-    Return<EvsResult> doneWithFrame(uint32_t frameId, const hidl_handle& bufferHandle)  override;
+    Return<void> doneWithFrame(const BufferDesc& buffer)  override;
     Return<void> stopVideoStream()  override;
     Return<int32_t> getExtendedInfo(uint32_t opaqueIdentifier)  override;
     Return<EvsResult> setExtendedInfo(uint32_t opaqueIdentifier, int32_t opaqueValue)  override;
@@ -45,34 +47,49 @@
     virtual ~EvsCamera() override;
 
     const CameraDesc& getDesc() { return mDescription; };
-    void GenerateFrames();
 
     static const char kCameraName_Backup[];
     static const char kCameraName_RightTurn[];
 
 private:
-    CameraDesc              mDescription = {};  // The properties of this camera
+    // These three functions are expected to be called while mAccessLock is held
+    bool     setAvailableFrames_Locked(unsigned bufferCount);
+    unsigned increaseAvailableFrames_Locked(unsigned numToAdd);
+    unsigned decreaseAvailableFrames_Locked(unsigned numToRemove);
 
-    buffer_handle_t         mBuffer = nullptr;  // A graphics buffer into which we'll store images
-    uint32_t                mWidth  = 0;        // number of pixels across the buffer
-    uint32_t                mHeight = 0;        // number of pixels vertically in the buffer
-    uint32_t                mStride = 0;        // Bytes per line in the buffer
+    void generateFrames();
+    void fillTestFrame(const BufferDesc& buff);
 
-    sp<IEvsCameraStream>    mStream = nullptr;  // The callback the user expects when a frame is ready
+    CameraDesc                  mDescription = {};  // The properties of this camera
 
-    std::thread             mCaptureThread;     // The thread we'll use to synthesize frames
+    std::thread                 mCaptureThread;     // The thread we'll use to synthesize frames
 
-    uint32_t                mFrameId;           // A frame counter used to identify specific frames
+    uint32_t                    mWidth  = 0;        // Horizontal pixel count in the buffers
+    uint32_t                    mHeight = 0;        // Vertical pixel count in the buffers
+    uint32_t                    mFormat = 0;        // Values from android_pixel_format_t [TODO: YUV?  Leave opaque?]
+    uint32_t                    mUsage  = 0;        // Values from from Gralloc.h
+    uint32_t                    mStride = 0;        // Bytes per line in the buffers
+
+    sp<IEvsCameraStream>        mStream = nullptr;  // The callback used to deliver each frame
+
+    struct BufferRecord {
+        buffer_handle_t     handle;
+        bool                inUse;
+        explicit BufferRecord(buffer_handle_t h) : handle(h), inUse(false) {};
+    };
+    std::vector<BufferRecord>   mBuffers;           // Graphics buffers to transfer images
+    unsigned                    mFramesAllowed;     // How many buffers are we currently using
+    unsigned                    mFramesInUse;       // How many buffers are currently outstanding
 
     enum StreamStateValues {
         STOPPED,
         RUNNING,
         STOPPING,
     };
-    StreamStateValues       mStreamState;
-    bool                    mFrameBusy;         // A flag telling us our one buffer is in use
+    StreamStateValues           mStreamState;
 
-    std::mutex              mAccessLock;
+    // Syncrhonization necessary to deconflict mCaptureThread from the main service thread
+    std::mutex                  mAccessLock;
 };
 
 } // namespace implementation
diff --git a/evs/1.0/default/EvsDisplay.cpp b/evs/1.0/default/EvsDisplay.cpp
index 9dba6fc..bbfff35 100644
--- a/evs/1.0/default/EvsDisplay.cpp
+++ b/evs/1.0/default/EvsDisplay.cpp
@@ -39,6 +39,7 @@
     ALOGD("EvsDisplay instantiated");
 
     // Set up our self description
+    // NOTE:  These are arbitrary values chosen for testing
     mInfo.displayId             = "Mock Display";
     mInfo.vendorFlags           = 3870;
     mInfo.defaultHorResolution  = 320;
@@ -50,16 +51,17 @@
     ALOGD("EvsDisplay being destroyed");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
-    // Report if we're going away while a buffer is outstanding.  This could be bad.
+    // Report if we're going away while a buffer is outstanding
     if (mFrameBusy) {
-        ALOGE("EvsDisplay going down while client is holding a buffer\n");
+        ALOGE("EvsDisplay going down while client is holding a buffer");
     }
 
     // Make sure we release our frame buffer
-    if (mBuffer) {
+    if (mBuffer.memHandle) {
         // Drop the graphics buffer we've been using
         GraphicBufferAllocator& alloc(GraphicBufferAllocator::get());
-        alloc.free(mBuffer);
+        alloc.free(mBuffer.memHandle);
+        mBuffer.memHandle = nullptr;
     }
     ALOGD("EvsDisplay destroyed");
 }
@@ -135,36 +137,61 @@
     std::lock_guard<std::mutex> lock(mAccessLock);
 
     // If we don't already have a buffer, allocate one now
-    if (!mBuffer) {
+    if (!mBuffer.memHandle) {
+        // Assemble the buffer description we'll use for our render target
+        mBuffer.width       = mInfo.defaultHorResolution;
+        mBuffer.height      = mInfo.defaultVerResolution;
+        mBuffer.format      = HAL_PIXEL_FORMAT_RGBA_8888;
+        mBuffer.usage       = GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER;
+        mBuffer.bufferId    = 0x3870;  // Arbitrary magic number for self recognition
+
+        buffer_handle_t handle = nullptr;
         GraphicBufferAllocator& alloc(GraphicBufferAllocator::get());
-        status_t result = alloc.allocate(mInfo.defaultHorResolution, mInfo.defaultVerResolution,
-                                         HAL_PIXEL_FORMAT_RGBA_8888, 1,
-                                         GRALLOC_USAGE_HW_FB | GRALLOC_USAGE_HW_COMPOSER,
-                                         &mBuffer, &mStride, 0, "EvsDisplay");
+        status_t result = alloc.allocate(mBuffer.width, mBuffer.height,
+                                         mBuffer.format, 1, mBuffer.usage,
+                                         mBuffer.usage, &handle,
+                                         &mBuffer.stride,
+                                         0, "EvsDisplay");
+        if (result != NO_ERROR) {
+            ALOGE("Error %d allocating %d x %d graphics buffer",
+                  result, mBuffer.width, mBuffer.height);
+            BufferDesc nullBuff = {};
+            _hidl_cb(nullBuff);
+            return Void();
+        }
+        if (!handle) {
+            ALOGE("We didn't get a buffer handle back from the allocator");
+            BufferDesc nullBuff = {};
+            _hidl_cb(nullBuff);
+            return Void();
+        }
+
+        mBuffer.memHandle = handle;
         mFrameBusy = false;
-        ALOGD("Allocated new buffer %p with stride %u", mBuffer, mStride);
+        ALOGD("Allocated new buffer %p with stride %u",
+              mBuffer.memHandle.getNativeHandle(), mBuffer.stride);
     }
 
     // Do we have a frame available?
     if (mFrameBusy) {
         // This means either we have a 2nd client trying to compete for buffers
         // (an unsupported mode of operation) or else the client hasn't returned
-        // a previously issues buffer yet (they're behaving badly).
-        // NOTE:  We have to make callback even if we have nothing to provide
+        // a previously issued buffer yet (they're behaving badly).
+        // NOTE:  We have to make the callback even if we have nothing to provide
         ALOGE("getTargetBuffer called while no buffers available.");
-        _hidl_cb(nullptr);
-    }
-    else {
+        BufferDesc nullBuff = {};
+        _hidl_cb(nullBuff);
+        return Void();
+    } else {
         // Mark our buffer as busy
         mFrameBusy = true;
 
         // Send the buffer to the client
-        ALOGD("Providing display buffer %p", mBuffer);
+        ALOGD("Providing display buffer handle %p as id %d",
+              mBuffer.memHandle.getNativeHandle(), mBuffer.bufferId);
         _hidl_cb(mBuffer);
+        return Void();
     }
-
-    // All done
-    return Void();
 }
 
 
@@ -172,22 +199,19 @@
  * This call tells the display that the buffer is ready for display.
  * The buffer is no longer valid for use by the client after this call.
  */
-Return<EvsResult> EvsDisplay::returnTargetBufferForDisplay(const hidl_handle& bufferHandle)  {
-    ALOGD("returnTargetBufferForDisplay %p", bufferHandle.getNativeHandle());
+Return<EvsResult> EvsDisplay::returnTargetBufferForDisplay(const BufferDesc& buffer)  {
+    ALOGD("returnTargetBufferForDisplay %p", buffer.memHandle.getNativeHandle());
     std::lock_guard<std::mutex> lock(mAccessLock);
 
-    // This shouldn't happen if we haven't issued the buffer!
-    if (!bufferHandle) {
+    // Nobody should call us with a null handle
+    if (!buffer.memHandle.getNativeHandle()) {
         ALOGE ("returnTargetBufferForDisplay called without a valid buffer handle.\n");
         return EvsResult::INVALID_ARG;
     }
-    /* TODO(b/33492405): It would be nice to validate we got back the buffer we expect,
-     * but HIDL doesn't support that (yet?)
-    if (bufferHandle != mBuffer) {
+    if (buffer.bufferId != mBuffer.bufferId) {
         ALOGE ("Got an unrecognized frame returned.\n");
         return EvsResult::INVALID_ARG;
     }
-    */
     if (!mFrameBusy) {
         ALOGE ("A frame was returned with no outstanding frames.\n");
         return EvsResult::BUFFER_NOT_AVAILABLE;
@@ -204,10 +228,72 @@
     if (mRequestedState != DisplayState::VISIBLE) {
         // We shouldn't get frames back when we're not visible.
         ALOGE ("Got an unexpected frame returned while not visible - ignoring.\n");
-    }
-    else {
-        // Make this buffer visible
-        // TODO:  Add code to put this image on the screen (or validate it somehow?)
+    } else {
+        // This is where the buffer would be made visible.
+        // For now we simply validate it has the data we expect in it by reading it back
+
+        // Lock our display buffer for reading
+        uint32_t* pixels = nullptr;
+        GraphicBufferMapper &mapper = GraphicBufferMapper::get();
+        mapper.lock(mBuffer.memHandle,
+                    GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_NEVER,
+                    android::Rect(mBuffer.width, mBuffer.height),
+                    (void **)&pixels);
+
+        // If we failed to lock the pixel buffer, we're about to crash, but log it first
+        if (!pixels) {
+            ALOGE("Camera failed to gain access to image buffer for reading");
+        }
+
+        // Check the test pixels
+        bool frameLooksGood = true;
+        for (unsigned row = 0; row < mInfo.defaultVerResolution; row++) {
+            for (unsigned col = 0; col < mInfo.defaultHorResolution; col++) {
+                // Index into the row to check the pixel at this column.
+                // We expect 0xFF in the LSB channel, a vertical gradient in the
+                // second channel, a horitzontal gradient in the third channel, and
+                // 0xFF in the MSB.
+                // The exception is the very first 32 bits which is used for the
+                // time varying frame signature to avoid getting fooled by a static image.
+                uint32_t expectedPixel = 0xFF0000FF           | // MSB and LSB
+                                         ((row & 0xFF) <<  8) | // vertical gradient
+                                         ((col & 0xFF) << 16);  // horizontal gradient
+                if ((row | col) == 0) {
+                    // we'll check the "uniqueness" of the frame signature below
+                    continue;
+                }
+                // Walk across this row (we'll step rows below)
+                uint32_t receivedPixel = pixels[col];
+                if (receivedPixel != expectedPixel) {
+                    ALOGE("Pixel check mismatch in frame buffer");
+                    frameLooksGood = false;
+                    break;
+                }
+            }
+
+            if (!frameLooksGood) {
+                break;
+            }
+
+            // Point to the next row (NOTE:  gralloc reports stride in units of pixels)
+            pixels = pixels + mBuffer.stride;
+        }
+
+        // Ensure we don't see the same buffer twice without it being rewritten
+        static uint32_t prevSignature = ~0;
+        uint32_t signature = pixels[0] & 0xFF;
+        if (prevSignature == signature) {
+            frameLooksGood = false;
+            ALOGE("Duplicate, likely stale frame buffer detected");
+        }
+
+
+        // Release our output buffer
+        mapper.unlock(mBuffer.memHandle);
+
+        if (!frameLooksGood) {
+            return EvsResult::UNDERLYING_SERVICE_ERROR;
+        }
     }
 
     return EvsResult::OK;
diff --git a/evs/1.0/default/EvsDisplay.h b/evs/1.0/default/EvsDisplay.h
index a2d5d3e..f4d7ee9 100644
--- a/evs/1.0/default/EvsDisplay.h
+++ b/evs/1.0/default/EvsDisplay.h
@@ -33,7 +33,7 @@
     Return<EvsResult> setDisplayState(DisplayState state)  override;
     Return<DisplayState> getDisplayState()  override;
     Return<void> getTargetBuffer(getTargetBuffer_cb _hidl_cb)  override;
-    Return<EvsResult> returnTargetBufferForDisplay(const hidl_handle& bufferHandle)  override;
+    Return<EvsResult> returnTargetBufferForDisplay(const BufferDesc& buffer)  override;
 
     // Implementation details
     EvsDisplay();
@@ -41,10 +41,9 @@
 
 private:
     DisplayDesc     mInfo           = {};
-    buffer_handle_t mBuffer         = nullptr;      // A graphics buffer into which we'll store images
-    uint32_t        mStride         = 0;            // Bytes per line in the buffer
+    BufferDesc      mBuffer         = {};       // A graphics buffer into which we'll store images
 
-    bool            mFrameBusy      = false;        // A flag telling us our buffer is in use
+    bool            mFrameBusy      = false;    // A flag telling us our buffer is in use
     DisplayState    mRequestedState = DisplayState::NOT_VISIBLE;
 
     std::mutex      mAccessLock;
diff --git a/evs/1.0/default/EvsEnumerator.cpp b/evs/1.0/default/EvsEnumerator.cpp
index ba8da00..4bf77f3 100644
--- a/evs/1.0/default/EvsEnumerator.cpp
+++ b/evs/1.0/default/EvsEnumerator.cpp
@@ -27,6 +27,11 @@
 namespace implementation {
 
 
+// TODO(b/31632518):  Need to get notification when our client dies so we can close the camera.
+// As it stands, if the client dies suddenly, the camera will be stuck "open".
+// NOTE:  Display should already be safe by virtue of holding only a weak pointer.
+
+
 EvsEnumerator::EvsEnumerator() {
     ALOGD("EvsEnumerator created");
 
@@ -78,15 +83,11 @@
     if (!pRecord) {
         ALOGE("Requested camera %s not found", cameraId.c_str());
         return nullptr;
-    }
-    else if (pRecord->inUse) {
+    } else if (pRecord->inUse) {
         ALOGE("Cannot open camera %s which is already in use", cameraId.c_str());
         return nullptr;
-    }
-    else {
-        /* TODO(b/33492405):  Do this, When HIDL can give us back a recognizable pointer
+    } else {
         pRecord->inUse = true;
-         */
         return(pRecord->pCamera);
     }
 }
@@ -96,14 +97,21 @@
 
     if (camera == nullptr) {
         ALOGE("Ignoring call to closeCamera with null camera pointer");
-    }
-    else {
-        // Make sure the camera has stopped streaming
-        camera->stopVideoStream();
+    } else {
+        // Find this camera in our list
+        auto it = std::find_if(mCameraList.begin(),
+                               mCameraList.end(),
+                               [camera](const CameraRecord& rec) {
+                                   return (rec.pCamera == camera);
+                               });
+        if (it == mCameraList.end()) {
+            ALOGE("Ignoring close on unrecognized camera");
+        } else {
+            // Make sure the camera has stopped streaming
+            camera->stopVideoStream();
 
-        /* TODO(b/33492405):  Do this, When HIDL can give us back a recognizable pointer
-        pRecord->inUse = false;
-         */
+            it->inUse = false;
+        }
     }
 
     return Void();
@@ -113,41 +121,49 @@
     ALOGD("openDisplay");
 
     // If we already have a display active, then this request must be denied
-    if (mActiveDisplay != nullptr) {
+    sp<IEvsDisplay> pActiveDisplay = mActiveDisplay.promote();
+    if (pActiveDisplay != nullptr) {
         ALOGW("Rejecting openDisplay request the display is already in use.");
         return nullptr;
-    }
-    else {
+    } else {
         // Create a new display interface and return it
-        mActiveDisplay = new EvsDisplay();
-        ALOGD("Returning new EvsDisplay object %p", mActiveDisplay.get());
-        return mActiveDisplay;
+        pActiveDisplay = new EvsDisplay();
+        mActiveDisplay = pActiveDisplay;
+        ALOGD("Returning new EvsDisplay object %p", pActiveDisplay.get());
+        return pActiveDisplay;
     }
 }
 
 Return<void> EvsEnumerator::closeDisplay(const ::android::sp<IEvsDisplay>& display) {
     ALOGD("closeDisplay");
 
-    if (mActiveDisplay == nullptr) {
-        ALOGE("Ignoring closeDisplay when display is not active");
-    }
-    else if (display == nullptr) {
-        ALOGE("Ignoring closeDisplay with null display pointer");
-    }
-    else {
+    // Do we still have a display object we think should be active?
+    sp<IEvsDisplay> pActiveDisplay = mActiveDisplay.promote();
+
+    if (pActiveDisplay == nullptr) {
+        ALOGE("Ignoring closeDisplay when there is no active display.");
+    } else if (display != pActiveDisplay) {
+        ALOGE("Ignoring closeDisplay on a display we didn't issue");
+        ALOGI("Got %p while active display is %p.", display.get(), pActiveDisplay.get());
+    } else {
         // Drop the active display
-        // TODO(b/33492405):  When HIDL provides recognizable pointers, add validation here.
         mActiveDisplay = nullptr;
     }
 
     return Void();
 }
 
+Return<DisplayState> EvsEnumerator::getDisplayState()  {
+    ALOGD("getDisplayState");
 
-// TODO(b/31632518):  Need to get notification when our client dies so we can close the camera.
-// As possible work around would be to give the client a HIDL object to exclusively hold
-// and use it's destructor to perform some work in the server side.
-
+    // Do we still have a display object we think should be active?
+    sp<IEvsDisplay> pActiveDisplay = mActiveDisplay.promote();
+    if (pActiveDisplay != nullptr) {
+        return pActiveDisplay->getDisplayState();
+    } else {
+        return DisplayState::NOT_OPEN;
+    }
+}
 
 } // namespace implementation
 } // namespace V1_0
diff --git a/evs/1.0/default/EvsEnumerator.h b/evs/1.0/default/EvsEnumerator.h
index 90df837..0e719bd 100644
--- a/evs/1.0/default/EvsEnumerator.h
+++ b/evs/1.0/default/EvsEnumerator.h
@@ -38,6 +38,7 @@
     Return<void> closeCamera(const ::android::sp<IEvsCamera>& carCamera)  override;
     Return<sp<IEvsDisplay>> openDisplay()  override;
     Return<void> closeDisplay(const ::android::sp<IEvsDisplay>& display)  override;
+    Return<DisplayState> getDisplayState()  override;
 
     // Implementation details
     EvsEnumerator();
@@ -50,7 +51,7 @@
     };
     std::list<CameraRecord> mCameraList;
 
-    sp<IEvsDisplay>         mActiveDisplay;
+    wp<IEvsDisplay>         mActiveDisplay; // Weak pointer -> object destructs if client dies
 };
 
 } // namespace implementation
diff --git a/evs/1.0/default/android.hardware.evs@1.0-service.rc b/evs/1.0/default/android.hardware.evs@1.0-service.rc
index be7c9f9..bb38668 100644
--- a/evs/1.0/default/android.hardware.evs@1.0-service.rc
+++ b/evs/1.0/default/android.hardware.evs@1.0-service.rc
@@ -1,4 +1,4 @@
-service evs-hal-1-0 /system/bin/hw/android.hardware.evs@1.0-service
+service evs-hal-1-0 /vendor/bin/hw/android.hardware.evs@1.0-service
     class hal
     user cameraserver
     group camera
diff --git a/evs/1.0/types.hal b/evs/1.0/types.hal
index fd9dcdc..6b580cf 100644
--- a/evs/1.0/types.hal
+++ b/evs/1.0/types.hal
@@ -72,6 +72,29 @@
 
 
 /*
+ * Structure representing an image buffer through our APIs
+ *
+ * In addition to the handle to the graphics memory, we need to retain
+ * the properties of the buffer for easy reference and reconstruction of
+ * an ANativeWindowBuffer object on the remote side of API calls.
+ * (Not least because OpenGL expect an ANativeWindowBuffer* for us as a
+ * texture via eglCreateImageKHR().
+ * See also related types from android.hardware.graphics.common
+ * TODO:  b/34722508  Review details of interaction of this structure with gralloc and OpenGL.
+ *        Specifically consider if format and/or usage should become enumerated types.
+ */
+struct BufferDesc {
+    uint32_t    width;      // Units of pixels
+    uint32_t    height;     // Units of pixels
+    uint32_t    stride;     // Units of bytes
+    uint32_t    format;     // May contain values from android_pixel_format_t
+    uint32_t    usage;      // May contain values from from Gralloc.h
+    uint32_t    bufferId;   // Opaque value from driver
+    handle      memHandle;  // gralloc memory buffer handle
+};
+
+
+/*
  * States for control of the EVS display
  *
  * The DisplayInfo structure describes the basic properties of an EVS display. Any EVS
@@ -81,7 +104,8 @@
  * presentation device.
  */
 enum DisplayState : uint32_t {
-    NOT_VISIBLE = 0,        // Display is inhibited
+    NOT_OPEN = 0,           // Display has not been requested by any application
+    NOT_VISIBLE,            // Display is inhibited
     VISIBLE_ON_NEXT_FRAME,  // Will become visible with next frame
     VISIBLE,                // Display is currently active
     NUM_STATES              // Must be last
@@ -94,4 +118,5 @@
     INVALID_ARG,
     STREAM_ALREADY_RUNNING,
     BUFFER_NOT_AVAILABLE,
+    UNDERLYING_SERVICE_ERROR,
 };
\ No newline at end of file
diff --git a/example/extension/light/2.0/Android.bp b/example/extension/light/2.0/Android.bp
deleted file mode 100644
index cc50b83..0000000
--- a/example/extension/light/2.0/Android.bp
+++ /dev/null
@@ -1,56 +0,0 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
-
-genrule {
-    name: "android.hardware.example.extension.light@2.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.example.extension.light@2.0",
-    srcs: [
-        "types.hal",
-        "IExtLight.hal",
-    ],
-    out: [
-        "android/hardware/example/extension/light/2.0/types.cpp",
-        "android/hardware/example/extension/light/2.0/ExtLightAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.example.extension.light@2.0_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.example.extension.light@2.0",
-    srcs: [
-        "types.hal",
-        "IExtLight.hal",
-    ],
-    out: [
-        "android/hardware/example/extension/light/2.0/types.h",
-        "android/hardware/example/extension/light/2.0/IExtLight.h",
-        "android/hardware/example/extension/light/2.0/IHwExtLight.h",
-        "android/hardware/example/extension/light/2.0/BnHwExtLight.h",
-        "android/hardware/example/extension/light/2.0/BpHwExtLight.h",
-        "android/hardware/example/extension/light/2.0/BsExtLight.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.example.extension.light@2.0",
-    generated_sources: ["android.hardware.example.extension.light@2.0_genc++"],
-    generated_headers: ["android.hardware.example.extension.light@2.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.example.extension.light@2.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "android.hardware.light@2.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hardware.light@2.0",
-    ],
-}
diff --git a/example/extension/light/2.0/default/Android.mk b/example/extension/light/2.0/default/Android.mk
deleted file mode 100644
index 55c21b9..0000000
--- a/example/extension/light/2.0/default/Android.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.example.extension.light@2.0-service
-LOCAL_INIT_RC := android.hardware.example.extension.light@2.0-service.rc
-LOCAL_MODULE_RELATIVE_PATH := hw
-LOCAL_SRC_FILES := \
-    Light.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
-    libhidlbase \
-    libhidltransport \
-    libhwbinder \
-    libutils \
-    android.hardware.light@2.0 \
-    android.hardware.example.extension.light@2.0 \
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/example/extension/light/2.0/default/android.hardware.example.extension.light@2.0-service.rc b/example/extension/light/2.0/default/android.hardware.example.extension.light@2.0-service.rc
deleted file mode 100644
index 8a90d81..0000000
--- a/example/extension/light/2.0/default/android.hardware.example.extension.light@2.0-service.rc
+++ /dev/null
@@ -1,4 +0,0 @@
-service light-ext-2-0 /system/bin/hw/android.hardware.example.extension.light@2.0-service
-    class hal
-    user system
-    group system readproc
\ No newline at end of file
diff --git a/gatekeeper/1.0/Android.bp b/gatekeeper/1.0/Android.bp
index 8ef33ab..2697e4c 100644
--- a/gatekeeper/1.0/Android.bp
+++ b/gatekeeper/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.gatekeeper@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IGatekeeper.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.gatekeeper@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gatekeeper@1.0",
     srcs: [
-        "types.hal",
-        "IGatekeeper.hal",
+        ":android.hardware.gatekeeper@1.0_hal",
     ],
     out: [
         "android/hardware/gatekeeper/1.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gatekeeper@1.0",
     srcs: [
-        "types.hal",
-        "IGatekeeper.hal",
+        ":android.hardware.gatekeeper@1.0_hal",
     ],
     out: [
         "android/hardware/gatekeeper/1.0/types.h",
diff --git a/gatekeeper/1.0/Android.mk b/gatekeeper/1.0/Android.mk
index 5d66b45..70206ff 100644
--- a/gatekeeper/1.0/Android.mk
+++ b/gatekeeper/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.gatekeeper@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -83,7 +83,7 @@
 LOCAL_MODULE := android.hardware.gatekeeper@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/gatekeeper/1.0/default/Android.mk b/gatekeeper/1.0/default/Android.mk
index e3b7d10..94dc1ea 100644
--- a/gatekeeper/1.0/default/Android.mk
+++ b/gatekeeper/1.0/default/Android.mk
@@ -3,6 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.gatekeeper@1.0-impl
 
 LOCAL_SRC_FILES := \
@@ -22,6 +23,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.gatekeeper@1.0-service
 LOCAL_INIT_RC := android.hardware.gatekeeper@1.0-service.rc
 
diff --git a/gatekeeper/1.0/default/android.hardware.gatekeeper@1.0-service.rc b/gatekeeper/1.0/default/android.hardware.gatekeeper@1.0-service.rc
index ac15e23..d3f5e9d 100644
--- a/gatekeeper/1.0/default/android.hardware.gatekeeper@1.0-service.rc
+++ b/gatekeeper/1.0/default/android.hardware.gatekeeper@1.0-service.rc
@@ -1,4 +1,4 @@
-service gatekeeper-1-0 /system/bin/hw/android.hardware.gatekeeper@1.0-service
+service gatekeeper-1-0 /vendor/bin/hw/android.hardware.gatekeeper@1.0-service
     class hal
     user system
     group system
diff --git a/gatekeeper/1.0/vts/Gatekeeper.vts b/gatekeeper/1.0/vts/Gatekeeper.vts
deleted file mode 100644
index 25dc32f..0000000
--- a/gatekeeper/1.0/vts/Gatekeeper.vts
+++ /dev/null
@@ -1,93 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IGatekeeper"
-
-package: "android.hardware.gatekeeper"
-
-import: "android.hardware.gatekeeper@1.0::types"
-
-interface: {
-    api: {
-        name: "enroll"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::gatekeeper::V1_0::GatekeeperResponse"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "verify"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::gatekeeper::V1_0::GatekeeperResponse"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "deleteUser"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::gatekeeper::V1_0::GatekeeperResponse"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "deleteAllUsers"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::gatekeeper::V1_0::GatekeeperResponse"
-        }
-    }
-
-}
diff --git a/gatekeeper/1.0/vts/functional/Android.bp b/gatekeeper/1.0/vts/functional/Android.bp
index 9c72b81..0b6ecfe 100644
--- a/gatekeeper/1.0/vts/functional/Android.bp
+++ b/gatekeeper/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "gatekeeper_hidl_hal_test",
+    name: "VtsHalGatekeeperV1_0TargetTest",
     gtest: true,
-    srcs: ["gatekeeper_hidl_hal_test.cpp"],
+    srcs: ["VtsHalGatekeeperV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -33,5 +33,5 @@
     cflags: [
         "-O0",
         "-g",
-    ],
+    ]
 }
diff --git a/gatekeeper/1.0/vts/functional/gatekeeper_hidl_hal_test.cpp b/gatekeeper/1.0/vts/functional/VtsHalGatekeeperV1_0TargetTest.cpp
similarity index 99%
rename from gatekeeper/1.0/vts/functional/gatekeeper_hidl_hal_test.cpp
rename to gatekeeper/1.0/vts/functional/VtsHalGatekeeperV1_0TargetTest.cpp
index 09690f8..67b4482 100644
--- a/gatekeeper/1.0/vts/functional/gatekeeper_hidl_hal_test.cpp
+++ b/gatekeeper/1.0/vts/functional/VtsHalGatekeeperV1_0TargetTest.cpp
@@ -187,7 +187,7 @@
   GatekeeperHidlTest() : uid_(0) {}
   virtual void SetUp() override {
     GatekeeperResponse rsp;
-    gatekeeper_ = IGatekeeper::getService("gatekeeper", false);
+    gatekeeper_ = IGatekeeper::getService("gatekeeper");
     ASSERT_NE(nullptr, gatekeeper_.get());
     doDeleteAllUsers(rsp);
   }
diff --git a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/__init__.py b/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/__init__.py
+++ /dev/null
diff --git a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/__init__.py b/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/__init__.py
+++ /dev/null
diff --git a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target/Android.mk b/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target/Android.mk
deleted file mode 100644
index 59bfe17..0000000
--- a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalGatekeeperHidlTargetBasicTest
-VTS_CONFIG_SRC_DIR := testcases/hal/gatekeeper/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target/AndroidTest.xml b/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target/AndroidTest.xml
deleted file mode 100644
index 9256823..0000000
--- a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Gatekeeper HIDL HAL's basic target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalGatekeeperHidlTargetBasicTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/gatekeeper_hidl_hal_test/gatekeeper_hidl_hal_test,
-            _64bit::DATA/nativetest64/gatekeeper_hidl_hal_test/gatekeeper_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target_profiling/Android.mk b/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target_profiling/Android.mk
deleted file mode 100644
index 384b33c..0000000
--- a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalGatekeeperHidlTargetBasicProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/gatekeeper/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target_profiling/AndroidTest.xml b/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 18bb442..0000000
--- a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Gatekeeper HIDL HAL's basic target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalGatekeeperHidlTargetBasicProfilingTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/gatekeeper_hidl_hal_test/gatekeeper_hidl_hal_test,
-            _64bit::DATA/nativetest64/gatekeeper_hidl_hal_test/gatekeeper_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="5m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/gatekeeper/1.0/vts/types.vts b/gatekeeper/1.0/vts/types.vts
deleted file mode 100644
index 3de9a14..0000000
--- a/gatekeeper/1.0/vts/types.vts
+++ /dev/null
@@ -1,59 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.gatekeeper"
-
-
-attribute: {
-    name: "::android::hardware::gatekeeper::V1_0::GatekeeperStatusCode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STATUS_REENROLL"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "STATUS_OK"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ERROR_GENERAL_FAILURE"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "ERROR_RETRY_TIMEOUT"
-        scalar_value: {
-            int32_t: -2
-        }
-        enumerator: "ERROR_NOT_IMPLEMENTED"
-        scalar_value: {
-            int32_t: -3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::gatekeeper::V1_0::GatekeeperResponse"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "code"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::gatekeeper::V1_0::GatekeeperStatusCode"
-    }
-    struct_value: {
-        name: "timeout"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "data"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
diff --git a/gnss/1.0/Android.bp b/gnss/1.0/Android.bp
index 4d7e26e..16895b6 100644
--- a/gnss/1.0/Android.bp
+++ b/gnss/1.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.gnss@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gnss@1.0",
+filegroup {
+    name: "android.hardware.gnss@1.0_hal",
     srcs: [
         "types.hal",
         "IAGnss.hal",
@@ -27,6 +25,15 @@
         "IGnssXtra.hal",
         "IGnssXtraCallback.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.gnss@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gnss@1.0",
+    srcs: [
+        ":android.hardware.gnss@1.0_hal",
+    ],
     out: [
         "android/hardware/gnss/1.0/types.cpp",
         "android/hardware/gnss/1.0/AGnssAll.cpp",
@@ -57,27 +64,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gnss@1.0",
     srcs: [
-        "types.hal",
-        "IAGnss.hal",
-        "IAGnssCallback.hal",
-        "IAGnssRil.hal",
-        "IAGnssRilCallback.hal",
-        "IGnss.hal",
-        "IGnssBatching.hal",
-        "IGnssBatchingCallback.hal",
-        "IGnssCallback.hal",
-        "IGnssConfiguration.hal",
-        "IGnssDebug.hal",
-        "IGnssGeofenceCallback.hal",
-        "IGnssGeofencing.hal",
-        "IGnssMeasurement.hal",
-        "IGnssMeasurementCallback.hal",
-        "IGnssNavigationMessage.hal",
-        "IGnssNavigationMessageCallback.hal",
-        "IGnssNi.hal",
-        "IGnssNiCallback.hal",
-        "IGnssXtra.hal",
-        "IGnssXtraCallback.hal",
+        ":android.hardware.gnss@1.0_hal",
     ],
     out: [
         "android/hardware/gnss/1.0/types.h",
diff --git a/gnss/1.0/Android.mk b/gnss/1.0/Android.mk
index 130c14e..5985c87 100644
--- a/gnss/1.0/Android.mk
+++ b/gnss/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.gnss@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -530,7 +530,7 @@
 LOCAL_MODULE := android.hardware.gnss@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -1046,5 +1046,58 @@
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.gnss@1.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/gnss/V1_0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/IAGnss.hal
+$(GEN): $(LOCAL_PATH)/IAGnssCallback.hal
+$(GEN): $(LOCAL_PATH)/IAGnssRil.hal
+$(GEN): $(LOCAL_PATH)/IAGnssRilCallback.hal
+$(GEN): $(LOCAL_PATH)/IGnss.hal
+$(GEN): $(LOCAL_PATH)/IGnssBatching.hal
+$(GEN): $(LOCAL_PATH)/IGnssBatchingCallback.hal
+$(GEN): $(LOCAL_PATH)/IGnssCallback.hal
+$(GEN): $(LOCAL_PATH)/IGnssConfiguration.hal
+$(GEN): $(LOCAL_PATH)/IGnssDebug.hal
+$(GEN): $(LOCAL_PATH)/IGnssGeofenceCallback.hal
+$(GEN): $(LOCAL_PATH)/IGnssGeofencing.hal
+$(GEN): $(LOCAL_PATH)/IGnssMeasurement.hal
+$(GEN): $(LOCAL_PATH)/IGnssMeasurementCallback.hal
+$(GEN): $(LOCAL_PATH)/IGnssNavigationMessage.hal
+$(GEN): $(LOCAL_PATH)/IGnssNavigationMessageCallback.hal
+$(GEN): $(LOCAL_PATH)/IGnssNi.hal
+$(GEN): $(LOCAL_PATH)/IGnssNiCallback.hal
+$(GEN): $(LOCAL_PATH)/IGnssXtra.hal
+$(GEN): $(LOCAL_PATH)/IGnssXtraCallback.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.gnss@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/gnss/1.0/IAGnss.hal b/gnss/1.0/IAGnss.hal
index 2cce519..b8f5746 100644
--- a/gnss/1.0/IAGnss.hal
+++ b/gnss/1.0/IAGnss.hal
@@ -22,6 +22,7 @@
  * Extended interface for AGNSS support.
  */
 interface IAGnss {
+    @export(name="", value_prefix="APN_IP_")
     enum ApnIpType : uint8_t {
         INVALID  = 0,
         IPV4     = 1,
diff --git a/gnss/1.0/IAGnssCallback.hal b/gnss/1.0/IAGnssCallback.hal
index 1984725..fe2e101 100644
--- a/gnss/1.0/IAGnssCallback.hal
+++ b/gnss/1.0/IAGnssCallback.hal
@@ -19,11 +19,13 @@
 /** Callback structure for the AGNSS interface. */
 interface IAGnssCallback {
     /** AGNSS type **/
+    @export(name="", value_prefix="AGPS_")
     enum AGnssType : uint8_t {
         TYPE_SUPL         = 1,
         TYPE_C2K          = 2
     };
 
+    @export(name="", value_prefix="GNSS_")
     enum AGnssStatusValue : uint8_t {
         /** GNSS requests data connection for AGNSS. */
         REQUEST_AGNSS_DATA_CONN  = 1,
@@ -40,6 +42,7 @@
     /*
      * Represents the status of AGNSS augmented to support IPv4.
      */
+    @export(name="", value_prefix="GPS_")
     struct AGnssStatusIpV4 {
         AGnssType type;
         AGnssStatusValue status;
diff --git a/gnss/1.0/IAGnssRil.hal b/gnss/1.0/IAGnssRil.hal
index 499b874..6292273 100644
--- a/gnss/1.0/IAGnssRil.hal
+++ b/gnss/1.0/IAGnssRil.hal
@@ -25,12 +25,14 @@
  * location, unique subscriber ID, phone number string and network availability changes.
  */
 interface IAGnssRil {
+    @export(name="", value_prefix="AGPS_SETID_TYPE_")
     enum SetIDType : uint8_t {
         NONE    = 0,
         IMSI    = 1,
         MSISDM  = 2
     };
 
+    @export(name="", value_prefix="AGPS_RIL_NETWORK_TYPE_")
     enum NetworkType : uint8_t {
         MOBILE  = 0,
         WIFI    = 1,
@@ -41,6 +43,7 @@
         WIMAX   = 6,
     };
 
+    @export(name="", value_prefix="AGPS_REF_LOCATION_TYPE_")
     enum AGnssRefLocationType : uint8_t {
         GSM_CELLID   = 1,
         UMTS_CELLID  = 2,
diff --git a/gnss/1.0/IAGnssRilCallback.hal b/gnss/1.0/IAGnssRilCallback.hal
index ba29bd0..2d64e54 100644
--- a/gnss/1.0/IAGnssRilCallback.hal
+++ b/gnss/1.0/IAGnssRilCallback.hal
@@ -22,6 +22,7 @@
  */
 interface IAGnssRilCallback {
     /* Kinds of SET ID that can be requested */
+    @export(name="", value_prefix="AGPS_RIL_REQUEST_SETID_")
     enum ID : uint32_t {
         IMSI    = 1 << 0L,
         MSISDN  = 1 << 1L,
diff --git a/gnss/1.0/IGnss.hal b/gnss/1.0/IGnss.hal
index 24a5371..5cde79e 100644
--- a/gnss/1.0/IGnss.hal
+++ b/gnss/1.0/IGnss.hal
@@ -28,9 +28,10 @@
 import IGnssNi;
 import IGnssXtra;
 
-/* Represents the standard GNSS interface. */
+/* Represents the standard GNSS (Global Navigation Satellite System) interface. */
 interface IGnss {
     /* Requested operational mode for GNSS operation. */
+    @export(name="", value_prefix="GPS_POSITION_MODE_")
     enum GnssPositionMode : uint8_t {
         /** Mode for running GNSS standalone (no assistance). */
         STANDALONE  = 0,
@@ -44,6 +45,7 @@
     };
 
     /* Requested recurrence mode for GNSS operation. */
+    @export(name="", value_prefix="GPS_POSITION_")
     enum GnssPositionRecurrence : uint32_t {
         /** Receive GNSS fixes on a recurring basis at a specified period. */
         RECURRENCE_PERIODIC  = 0,
@@ -55,6 +57,7 @@
      * Flags used to specify which aiding data to delete when calling
      * deleteAidingData().
      */
+    @export(name="", value_prefix="GPS_")
     enum GnssAidingData : uint16_t {
         DELETE_EPHEMERIS    = 0x0001,
         DELETE_ALMANAC      = 0x0002,
diff --git a/gnss/1.0/IGnssBatching.hal b/gnss/1.0/IGnssBatching.hal
index 4f0695d..6f2dde6 100644
--- a/gnss/1.0/IGnssBatching.hal
+++ b/gnss/1.0/IGnssBatching.hal
@@ -42,6 +42,7 @@
     /*
      * Enum which holds the bit masks for batching control.
      */
+    @export(name="", value_prefix="FLP_BATCH_")
     enum Flag : uint8_t {
         /*
          * If this flag is set, the hardware implementation
@@ -135,7 +136,8 @@
 
     /**
      * Closes the interface. If any batch operations are in progress,
-     * they should be stopped.
+     * they must be stopped.  If any locations are in the hardware batch, they
+     * must be deleted (and not sent via callback.)
      *
      * init() may be called again, after this, if the interface is to be restored
      */
diff --git a/gnss/1.0/IGnssCallback.hal b/gnss/1.0/IGnssCallback.hal
index afef55f..0c3b9f0 100644
--- a/gnss/1.0/IGnssCallback.hal
+++ b/gnss/1.0/IGnssCallback.hal
@@ -23,6 +23,7 @@
  */
 interface IGnssCallback {
     /* Flags for the gnssSetCapabilities callback. */
+    @export(name="", value_prefix="GPS_CAPABILITY_")
     enum Capabilities : uint32_t {
         /*
          * GNSS HAL schedules fixes for RECURRENCE_PERIODIC mode.
@@ -47,6 +48,7 @@
     };
 
     /* GNSS status event values. */
+    @export(name="", value_prefix="GPS_STATUS_")
     enum GnssStatusValue : uint8_t {
         /** GNSS status unknown. */
         NONE           = 0,
@@ -63,6 +65,7 @@
     /*
      * Flags that indicate information about the satellite
      */
+    @export(name="", value_prefix="GNSS_SV_FLAGS_")
     enum GnssSvFlags : uint8_t {
         NONE                  = 0,
         HAS_EPHEMERIS_DATA    = 1 << 0,
diff --git a/gnss/1.0/IGnssGeofenceCallback.hal b/gnss/1.0/IGnssGeofenceCallback.hal
index 5c70c5e..722317e 100644
--- a/gnss/1.0/IGnssGeofenceCallback.hal
+++ b/gnss/1.0/IGnssGeofenceCallback.hal
@@ -91,17 +91,20 @@
  */
 
 interface IGnssGeofenceCallback {
+    @export(name="", value_prefix="GPS_GEOFENCE_")
     enum GeofenceTransition : int32_t {
         ENTERED   = (1 << 0L),
         EXITED    = (1 << 1L),
         UNCERTAIN = (1 << 2L),
     };
 
+    @export(name="", value_prefix="GPS_GEOFENCE_")
     enum GeofenceAvailability : int32_t {
         UNAVAILABLE = (1 << 0L),
         AVAILABLE   = (1 << 1L),
     };
 
+    @export(name="", value_prefix="GPS_GEOFENCE_")
     enum GeofenceStatus : int32_t {
         OPERATION_SUCCESS        = 0,
         ERROR_TOO_MANY_GEOFENCES = -100,
diff --git a/gnss/1.0/IGnssMeasurement.hal b/gnss/1.0/IGnssMeasurement.hal
index 5174273..8329442 100644
--- a/gnss/1.0/IGnssMeasurement.hal
+++ b/gnss/1.0/IGnssMeasurement.hal
@@ -22,6 +22,7 @@
  * Extended interface for GNSS Measurements support.
  */
 interface IGnssMeasurement {
+    @export(name="", value_prefix="GPS_MEASUREMENT_")
     enum GnssMeasurementStatus : int32_t {
         SUCCESS = 0,
         ERROR_ALREADY_INIT = -100,
diff --git a/gnss/1.0/IGnssMeasurementCallback.hal b/gnss/1.0/IGnssMeasurementCallback.hal
index 00e57cd..5789621 100644
--- a/gnss/1.0/IGnssMeasurementCallback.hal
+++ b/gnss/1.0/IGnssMeasurementCallback.hal
@@ -21,6 +21,7 @@
     /*
      * Flags to indicate what fields in GnssClock are valid.
      */
+    @export(name="", value_prefix="GNSS_CLOCK_")
     enum GnssClockFlags : uint16_t {
         /** A valid 'leap second' is stored in the data structure. */
         HAS_LEAP_SECOND        = 1 << 0,
@@ -41,6 +42,7 @@
     /*
      * Flags to indicate what fields in GnssMeasurement are valid.
      */
+    @export(name="", value_prefix="GNSS_MEASUREMENT_")
     enum GnssMeasurementFlags : uint32_t {
         /** A valid 'snr' is stored in the data structure. */
         HAS_SNR                        = 1 << 0,
@@ -60,6 +62,7 @@
      * Enumeration of available values for the GNSS Measurement's multipath
      * indicator.
      */
+    @export(name="", value_prefix="GNSS_MULTIPATH_")
     enum GnssMultipathIndicator : uint8_t {
         /** The indicator is not available or unknown. */
         INDICATOR_UNKNOWN      = 0,
@@ -82,6 +85,7 @@
      * If GNSS is still searching for a satellite, the corresponding state must be
      * set to STATE_UNKNOWN(0).
      */
+    @export(name="", value_prefix="GNSS_MEASUREMENT_")
     enum GnssMeasurementState : uint32_t {
         STATE_UNKNOWN                = 0,
         STATE_CODE_LOCK              = 1 << 0,
@@ -105,6 +109,7 @@
     /*
      * Flags indicating the Accumulated Delta Range's states.
      */
+    @export(name="", value_prefix="GNSS_")
     enum GnssAccumulatedDeltaRangeState : uint16_t {
         ADR_STATE_UNKNOWN    = 0,
         ADR_STATE_VALID      = 1 << 0,
diff --git a/gnss/1.0/IGnssNavigationMessage.hal b/gnss/1.0/IGnssNavigationMessage.hal
index 11f2096..ddd9169 100644
--- a/gnss/1.0/IGnssNavigationMessage.hal
+++ b/gnss/1.0/IGnssNavigationMessage.hal
@@ -22,6 +22,7 @@
  * Extended interface for GNSS navigation message reporting support.
  */
 interface IGnssNavigationMessage {
+    @export(name="", value_prefix="GPS_NAVIGATION_MESSAGE_")
     enum GnssNavigationMessageStatus : int32_t {
         SUCCESS = 0,
         ERROR_ALREADY_INIT = -100,
diff --git a/gnss/1.0/IGnssNavigationMessageCallback.hal b/gnss/1.0/IGnssNavigationMessageCallback.hal
index 0cffa67..2e6b853 100644
--- a/gnss/1.0/IGnssNavigationMessageCallback.hal
+++ b/gnss/1.0/IGnssNavigationMessageCallback.hal
@@ -25,6 +25,7 @@
      * For convenience, first byte is the GnssConstellationType on which that signal
      * is typically transmitted.
      */
+    @export(name="", value_prefix="GNSS_NAVIGATION_MESSAGE_TYPE_")
     enum GnssNavigationMessageType : int16_t {
         UNKNOWN    = 0,
         /** GNSS L1 C/A message contained in the structure.  */
@@ -56,6 +57,7 @@
      * No need to send any navigation message that contains words with parity error
      * and cannot be corrected.
      */
+    @export(name="navigation_message_status", value_prefix="NAV_MESSAGE_STATUS_")
     enum NavigationMessageStatus : uint16_t {
         PARITY_PASSED  = (1 << 0),
         PARITY_REBUILT = (1 << 1),
diff --git a/gnss/1.0/IGnssNiCallback.hal b/gnss/1.0/IGnssNiCallback.hal
index a7abad9..c5fb223 100644
--- a/gnss/1.0/IGnssNiCallback.hal
+++ b/gnss/1.0/IGnssNiCallback.hal
@@ -21,6 +21,7 @@
     /*
      * GnssNiType constants
      */
+    @export(name="", value_prefix="GPS_NI_TYPE_")
     enum GnssNiType : uint8_t {
         VOICE           = 1,
         UMTS_SUPL       = 2,
@@ -30,6 +31,7 @@
     /*
      * GnssNiNotifyFlags constants
      */
+    @export(name="", value_prefix="GPS_NI_")
     enum GnssNiNotifyFlags : uint32_t {
         /** NI requires notification */
         NEED_NOTIFY      = 0x0001,
@@ -43,6 +45,7 @@
      * GNSS NI responses, used to define the response in
      * NI structures
      */
+    @export(name="", value_prefix="GPS_NI_")
     enum GnssUserResponseType : uint8_t {
         RESPONSE_ACCEPT  = 1,
         RESPONSE_DENY    = 2,
@@ -52,6 +55,7 @@
     /*
      * NI data encoding scheme
      */
+    @export(name="", value_prefix="GPS_")
     enum GnssNiEncodingType : int32_t {
         ENC_NONE              = 0,
         ENC_SUPL_GSM_DEFAULT  = 1,
diff --git a/gnss/1.0/default/AGnss.cpp b/gnss/1.0/default/AGnss.cpp
index 52fdc26..29c6ddd 100644
--- a/gnss/1.0/default/AGnss.cpp
+++ b/gnss/1.0/default/AGnss.cpp
@@ -41,6 +41,7 @@
 
 AGnss::~AGnss() {
     sThreadFuncArgsList.clear();
+    sInterfaceExists = false;
 }
 
 void AGnss::statusCb(AGpsStatus* status) {
@@ -78,7 +79,10 @@
                     /*
                      * Callback to client with agnssStatusIpV4Cb.
                      */
-                    sAGnssCbIface->agnssStatusIpV4Cb(aGnssStatusIpV4);
+                    auto ret = sAGnssCbIface->agnssStatusIpV4Cb(aGnssStatusIpV4);
+                    if (!ret.isOk()) {
+                        ALOGE("%s: Unable to invoke callback", __func__);
+                    }
                     break;
                 }
             case AF_INET6:
@@ -96,7 +100,10 @@
                             &(status->addr));
                     memcpy(&(aGnssStatusIpV6.ipV6Addr[0]), in6->sin6_addr.s6_addr,
                            aGnssStatusIpV6.ipV6Addr.size());
-                    sAGnssCbIface->agnssStatusIpV6Cb(aGnssStatusIpV6);
+                    auto ret = sAGnssCbIface->agnssStatusIpV6Cb(aGnssStatusIpV6);
+                    if (!ret.isOk()) {
+                        ALOGE("%s: Unable to invoke callback", __func__);
+                    }
                     break;
                 }
              default:
@@ -117,7 +124,10 @@
         /*
          * Callback to client with agnssStatusIpV4Cb.
          */
-        sAGnssCbIface->agnssStatusIpV4Cb(aGnssStatusIpV4);
+        auto ret = sAGnssCbIface->agnssStatusIpV4Cb(aGnssStatusIpV4);
+        if (!ret.isOk()) {
+            ALOGE("%s: Unable to invoke callback", __func__);
+        }
     } else {
         ALOGE("%s: Invalid size for AGPS Status", __func__);
     }
diff --git a/gnss/1.0/default/AGnssRil.cpp b/gnss/1.0/default/AGnssRil.cpp
index 480571d..1458327 100644
--- a/gnss/1.0/default/AGnssRil.cpp
+++ b/gnss/1.0/default/AGnssRil.cpp
@@ -42,6 +42,7 @@
 
 AGnssRil::~AGnssRil() {
     sThreadFuncArgsList.clear();
+    sInterfaceExists = false;
 }
 
 void AGnssRil::requestSetId(uint32_t flags) {
@@ -50,7 +51,10 @@
         return;
     }
 
-    sAGnssRilCbIface->requestSetIdCb(flags);
+    auto ret = sAGnssRilCbIface->requestSetIdCb(flags);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void AGnssRil::requestRefLoc(uint32_t /*flags*/) {
@@ -59,7 +63,10 @@
         return;
     }
 
-    sAGnssRilCbIface->requestRefLocCb();
+    auto ret = sAGnssRilCbIface->requestRefLocCb();
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 pthread_t AGnssRil::createThreadCb(const char* name, void (*start)(void*), void* arg) {
diff --git a/gnss/1.0/default/Android.mk b/gnss/1.0/default/Android.mk
index a6f73f2..b4ef9a8 100644
--- a/gnss/1.0/default/Android.mk
+++ b/gnss/1.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.gnss@1.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     ThreadCreationWrapper.cpp \
@@ -27,10 +28,13 @@
     android.hardware.gnss@1.0 \
     libhardware
 
+LOCAL_CFLAGS += -Werror
+
 include $(BUILD_SHARED_LIBRARY)
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.gnss@1.0-service
 LOCAL_INIT_RC := android.hardware.gnss@1.0-service.rc
 LOCAL_SRC_FILES := \
diff --git a/gnss/1.0/default/Gnss.cpp b/gnss/1.0/default/Gnss.cpp
index 19e22c2..10024fb 100644
--- a/gnss/1.0/default/Gnss.cpp
+++ b/gnss/1.0/default/Gnss.cpp
@@ -28,6 +28,8 @@
 std::vector<std::unique_ptr<ThreadFuncArgs>> Gnss::sThreadFuncArgsList;
 sp<IGnssCallback> Gnss::sGnssCbIface = nullptr;
 bool Gnss::sInterfaceExists = false;
+bool Gnss::sWakelockHeldGnss = false;
+bool Gnss::sWakelockHeldFused = false;
 
 GpsCallbacks Gnss::sGnssCb = {
     .size = sizeof(GpsCallbacks),
@@ -58,6 +60,7 @@
 }
 
 Gnss::~Gnss() {
+    sInterfaceExists = false;
     sThreadFuncArgsList.clear();
 }
 
@@ -73,7 +76,10 @@
     }
 
     android::hardware::gnss::V1_0::GnssLocation gnssLocation = convertToGnssLocation(location);
-    sGnssCbIface->gnssLocationCb(gnssLocation);
+    auto ret = sGnssCbIface->gnssLocationCb(gnssLocation);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void Gnss::statusCb(GpsStatus* gnssStatus) {
@@ -90,7 +96,10 @@
     IGnssCallback::GnssStatusValue status =
             static_cast<IGnssCallback::GnssStatusValue>(gnssStatus->status);
 
-    sGnssCbIface->gnssStatusCb(status);
+    auto ret = sGnssCbIface->gnssStatusCb(status);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void Gnss::gnssSvStatusCb(GnssSvStatus* status) {
@@ -129,7 +138,10 @@
         svStatus.gnssSvList[i] = gnssSvInfo;
     }
 
-    sGnssCbIface->gnssSvStatusCb(svStatus);
+    auto ret = sGnssCbIface->gnssSvStatusCb(svStatus);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 /*
@@ -229,7 +241,10 @@
         }
     }
 
-    sGnssCbIface->gnssSvStatusCb(svStatus);
+    auto ret = sGnssCbIface->gnssSvStatusCb(svStatus);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void Gnss::nmeaCb(GpsUtcTime timestamp, const char* nmea, int length) {
@@ -240,7 +255,10 @@
 
     android::hardware::hidl_string nmeaString;
     nmeaString.setToExternal(nmea, length);
-    sGnssCbIface->gnssNmeaCb(timestamp, nmeaString);
+    auto ret = sGnssCbIface->gnssNmeaCb(timestamp, nmeaString);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void Gnss::setCapabilitiesCb(uint32_t capabilities) {
@@ -249,25 +267,75 @@
         return;
     }
 
-    sGnssCbIface->gnssSetCapabilitesCb(capabilities);
+    auto ret = sGnssCbIface->gnssSetCapabilitesCb(capabilities);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void Gnss::acquireWakelockCb() {
-    if (sGnssCbIface == nullptr) {
-        ALOGE("%s: GNSS Callback Interface configured incorrectly", __func__);
-        return;
-    }
-
-    sGnssCbIface->gnssAcquireWakelockCb();
+    acquireWakelockGnss();
 }
 
 void Gnss::releaseWakelockCb() {
+    releaseWakelockGnss();
+}
+
+
+void Gnss::acquireWakelockGnss() {
+    sWakelockHeldGnss = true;
+    updateWakelock();
+}
+
+void Gnss::releaseWakelockGnss() {
+    sWakelockHeldGnss = false;
+    updateWakelock();
+}
+
+void Gnss::acquireWakelockFused() {
+    sWakelockHeldFused = true;
+    updateWakelock();
+}
+
+void Gnss::releaseWakelockFused() {
+    sWakelockHeldFused = false;
+    updateWakelock();
+}
+
+void Gnss::updateWakelock() {
+    // Track the state of the last request - in case the wake lock in the layer above is reference
+    // counted.
+    static bool sWakelockHeld = false;
+
     if (sGnssCbIface == nullptr) {
         ALOGE("%s: GNSS Callback Interface configured incorrectly", __func__);
         return;
     }
 
-    sGnssCbIface->gnssReleaseWakelockCb();
+    if (sWakelockHeldGnss || sWakelockHeldFused) {
+        if (!sWakelockHeld) {
+            ALOGI("%s: GNSS HAL Wakelock acquired due to gps: %d, fused: %d", __func__,
+                    sWakelockHeldGnss, sWakelockHeldFused);
+            sWakelockHeld = true;
+            auto ret = sGnssCbIface->gnssAcquireWakelockCb();
+            if (!ret.isOk()) {
+                ALOGE("%s: Unable to invoke callback", __func__);
+            }
+        }
+    } else {
+        if (sWakelockHeld) {
+            ALOGI("%s: GNSS HAL Wakelock released", __func__);
+        } else  {
+            // To avoid burning power, always release, even if logic got here with sWakelock false
+            // which it shouldn't, unless underlying *.h implementation makes duplicate requests.
+            ALOGW("%s: GNSS HAL Wakelock released, duplicate request", __func__);
+        }
+        sWakelockHeld = false;
+        auto ret = sGnssCbIface->gnssReleaseWakelockCb();
+        if (!ret.isOk()) {
+            ALOGE("%s: Unable to invoke callback", __func__);
+        }
+    }
 }
 
 void Gnss::requestUtcTimeCb() {
@@ -276,7 +344,10 @@
         return;
     }
 
-    sGnssCbIface->gnssRequestTimeCb();
+    auto ret = sGnssCbIface->gnssRequestTimeCb();
+    if (!ret.isOk()) {
+            ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 pthread_t Gnss::createThreadCb(const char* name, void (*start)(void*), void* arg) {
@@ -298,7 +369,10 @@
         .yearOfHw = info->year_of_hw
     };
 
-    sGnssCbIface->gnssSetSystemInfoCb(gnssInfo);
+    auto ret = sGnssCbIface->gnssSetSystemInfoCb(gnssInfo);
+    if (!ret.isOk()) {
+            ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 
@@ -391,7 +465,10 @@
 Return<sp<IAGnssRil>> Gnss::getExtensionAGnssRil()  {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
+        return nullptr;
+    }
+
+    if (mGnssRil == nullptr) {
         const AGpsRilInterface* agpsRilIface = static_cast<const AGpsRilInterface*>(
                 mGnssIface->get_extension(AGPS_RIL_INTERFACE));
         if (agpsRilIface == nullptr) {
@@ -406,7 +483,10 @@
 Return<sp<IGnssConfiguration>> Gnss::getExtensionGnssConfiguration()  {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
+        return nullptr;
+    }
+
+    if (mGnssConfig == nullptr) {
         const GnssConfigurationInterface* gnssConfigIface =
                 static_cast<const GnssConfigurationInterface*>(
                         mGnssIface->get_extension(GNSS_CONFIGURATION_INTERFACE));
@@ -419,10 +499,14 @@
     }
     return mGnssConfig;
 }
+
 Return<sp<IGnssGeofencing>> Gnss::getExtensionGnssGeofencing()  {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
+        return nullptr;
+    }
+
+    if (mGnssGeofencingIface == nullptr) {
         const GpsGeofencingInterface* gpsGeofencingIface =
                 static_cast<const GpsGeofencingInterface*>(
                         mGnssIface->get_extension(GPS_GEOFENCING_INTERFACE));
@@ -440,7 +524,10 @@
 Return<sp<IAGnss>> Gnss::getExtensionAGnss()  {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
+        return nullptr;
+    }
+
+    if (mAGnssIface == nullptr) {
         const AGpsInterface* agpsIface = static_cast<const AGpsInterface*>(
                 mGnssIface->get_extension(AGPS_INTERFACE));
         if (agpsIface == nullptr) {
@@ -455,7 +542,10 @@
 Return<sp<IGnssNi>> Gnss::getExtensionGnssNi()  {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
+        return nullptr;
+    }
+
+    if (mGnssNi == nullptr) {
         const GpsNiInterface* gpsNiIface = static_cast<const GpsNiInterface*>(
                 mGnssIface->get_extension(GPS_NI_INTERFACE));
         if (gpsNiIface == nullptr) {
@@ -470,7 +560,10 @@
 Return<sp<IGnssMeasurement>> Gnss::getExtensionGnssMeasurement() {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
+        return nullptr;
+    }
+
+    if (mGnssMeasurement == nullptr) {
         const GpsMeasurementInterface* gpsMeasurementIface =
                 static_cast<const GpsMeasurementInterface*>(
                         mGnssIface->get_extension(GPS_MEASUREMENT_INTERFACE));
@@ -487,7 +580,10 @@
 Return<sp<IGnssNavigationMessage>> Gnss::getExtensionGnssNavigationMessage() {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
+        return nullptr;
+    }
+
+    if (mGnssNavigationMessage == nullptr) {
         const GpsNavigationMessageInterface* gpsNavigationMessageIface =
                 static_cast<const GpsNavigationMessageInterface*>(
                         mGnssIface->get_extension(GPS_NAVIGATION_MESSAGE_INTERFACE));
@@ -506,7 +602,10 @@
 Return<sp<IGnssXtra>> Gnss::getExtensionXtra()  {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
+        return nullptr;
+    }
+
+    if (mGnssXtraIface == nullptr) {
         const GpsXtraInterface* gpsXtraIface = static_cast<const GpsXtraInterface*>(
                 mGnssIface->get_extension(GPS_XTRA_INTERFACE));
 
@@ -523,7 +622,10 @@
 Return<sp<IGnssDebug>> Gnss::getExtensionGnssDebug()  {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
+        return nullptr;
+    }
+
+    if (mGnssDebug == nullptr) {
         const GpsDebugInterface* gpsDebugIface = static_cast<const GpsDebugInterface*>(
                 mGnssIface->get_extension(GPS_DEBUG_INTERFACE));
 
@@ -540,9 +642,30 @@
 Return<sp<IGnssBatching>> Gnss::getExtensionGnssBatching()  {
     if (mGnssIface == nullptr) {
         ALOGE("%s: Gnss interface is unavailable", __func__);
-    } else {
-        // TODO(b/34133439): actually get an flpLocationIface
+        return nullptr;
+    }
+
+    if (mGnssBatching == nullptr) {
+        hw_module_t* module;
         const FlpLocationInterface* flpLocationIface = nullptr;
+        int err = hw_get_module(FUSED_LOCATION_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
+
+        if (err != 0) {
+            ALOGE("gnss flp hw_get_module failed: %d", err);
+        } else if (module == nullptr) {
+            ALOGE("Fused Location hw_get_module returned null module");
+        } else if (module->methods == nullptr) {
+            ALOGE("Fused Location hw_get_module returned null methods");
+        } else {
+            hw_device_t* device;
+            err = module->methods->open(module, FUSED_LOCATION_HARDWARE_MODULE_ID, &device);
+            if (err != 0) {
+                ALOGE("flpDevice open failed: %d", err);
+            } else {
+                flp_device_t * flpDevice = reinterpret_cast<flp_device_t*>(device);
+                flpLocationIface = flpDevice->get_flp_interface(flpDevice);
+            }
+        }
 
         if (flpLocationIface == nullptr) {
             ALOGE("%s: GnssBatching interface is not implemented by HAL", __func__);
@@ -550,7 +673,6 @@
             mGnssBatching = new GnssBatching(flpLocationIface);
         }
     }
-
     return mGnssBatching;
 }
 
diff --git a/gnss/1.0/default/Gnss.h b/gnss/1.0/default/Gnss.h
index 36947c1..63614fa 100644
--- a/gnss/1.0/default/Gnss.h
+++ b/gnss/1.0/default/Gnss.h
@@ -53,7 +53,6 @@
  * IGnssCallback interface to be passed into the conventional implementation of the GNSS HAL.
  */
 struct Gnss : public IGnss {
-    // TODO: Add flp_device_t, either in ctor, or later attach?
     Gnss(gps_device_t* gnss_device);
     ~Gnss();
 
@@ -109,11 +108,27 @@
     static void setSystemInfoCb(const LegacyGnssSystemInfo* info);
 
     /*
+     * Wakelock consolidation, only needed for dual use of a gps.h & fused_location.h HAL
+     *
+     * Ensures that if the last call from either legacy .h was to acquire a wakelock, that a
+     * wakelock is held.  Otherwise releases it.
+     */
+    static void acquireWakelockFused();
+    static void releaseWakelockFused();
+
+    /*
      * Holds function pointers to the callback methods.
      */
     static GpsCallbacks sGnssCb;
 
  private:
+    // for wakelock consolidation, see above
+    static void acquireWakelockGnss();
+    static void releaseWakelockGnss();
+    static void updateWakelock();
+    static bool sWakelockHeldGnss;
+    static bool sWakelockHeldFused;
+
     sp<GnssXtra> mGnssXtraIface = nullptr;
     sp<AGnssRil> mGnssRil = nullptr;
     sp<GnssGeofencing> mGnssGeofencingIface = nullptr;
diff --git a/gnss/1.0/default/GnssBatching.cpp b/gnss/1.0/default/GnssBatching.cpp
index 404b5da..02b38cb 100644
--- a/gnss/1.0/default/GnssBatching.cpp
+++ b/gnss/1.0/default/GnssBatching.cpp
@@ -1,4 +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.
+ */
+
+#define LOG_TAG "GnssHAL_GnssBatchingInterface"
+
 #include "GnssBatching.h"
+#include <Gnss.h> // for wakelock consolidation
+#include <GnssUtils.h>
+
+#include <cutils/log.h>  // for ALOGE
+#include <vector>
 
 namespace android {
 namespace hardware {
@@ -6,38 +29,192 @@
 namespace V1_0 {
 namespace implementation {
 
-GnssBatching::GnssBatching(const FlpLocationInterface* flpLocationIface) :
-    mFlpLocationIface(flpLocationIface) {}
+sp<IGnssBatchingCallback> GnssBatching::sGnssBatchingCbIface = nullptr;
+bool GnssBatching::sFlpSupportsBatching = false;
 
+FlpCallbacks GnssBatching::sFlpCb = {
+    .size = sizeof(FlpCallbacks),
+    .location_cb = locationCb,
+    .acquire_wakelock_cb = acquireWakelockCb,
+    .release_wakelock_cb = releaseWakelockCb,
+    .set_thread_event_cb = setThreadEventCb,
+    .flp_capabilities_cb = flpCapabilitiesCb,
+    .flp_status_cb = flpStatusCb,
+};
+
+GnssBatching::GnssBatching(const FlpLocationInterface* flpLocationIface) :
+    mFlpLocationIface(flpLocationIface) {
+}
+
+/*
+ * This enum is used locally by various methods below. It is only used by the default
+ * implementation and is not part of the GNSS interface.
+ */
+enum BatchingValues : uint16_t {
+    // Numbers 0-3 were used in earlier implementations - using 4 to be distinct to the HAL
+    FLP_GNSS_BATCHING_CLIENT_ID = 4,
+    // Tech. mask of GNSS, and sensor aiding, for legacy HAL to fit with GnssBatching API
+    FLP_TECH_MASK_GNSS_AND_SENSORS = FLP_TECH_MASK_GNSS | FLP_TECH_MASK_SENSORS,
+    // Putting a cap to avoid possible memory issues.  Unlikely values this high are supported.
+    MAX_LOCATIONS_PER_BATCH = 1000
+};
+
+void GnssBatching::locationCb(int32_t locationsCount, FlpLocation** locations) {
+    if (sGnssBatchingCbIface == nullptr) {
+        ALOGE("%s: GNSS Batching Callback Interface configured incorrectly", __func__);
+        return;
+    }
+
+    if (locations == nullptr) {
+        ALOGE("%s: Invalid locations from GNSS HAL", __func__);
+        return;
+    }
+
+    if (locationsCount < 0) {
+        ALOGE("%s: Negative location count: %d set to 0", __func__, locationsCount);
+        locationsCount = 0;
+    } else if (locationsCount > MAX_LOCATIONS_PER_BATCH) {
+        ALOGW("%s: Unexpected high location count: %d set to %d", __func__, locationsCount,
+                MAX_LOCATIONS_PER_BATCH);
+        locationsCount = MAX_LOCATIONS_PER_BATCH;
+    }
+
+    /**
+     * Note:
+     * Some existing implementations may drop duplicate locations.  These could be expanded here
+     * but as there's ambiguity between no-GPS-fix vs. dropped duplicates in that implementation,
+     * and that's not specified by the fused_location.h, that isn't safe to do here.
+     * Fortunately, this shouldn't be a major issue in cases where GNSS batching is typically
+     * used (e.g. when user is likely in vehicle/bicycle.)
+     */
+    std::vector<android::hardware::gnss::V1_0::GnssLocation> gnssLocations;
+    for (int iLocation = 0; iLocation < locationsCount; iLocation++) {
+        if (locations[iLocation] == nullptr) {
+            ALOGE("%s: Null location at slot: %d of %d, skipping", __func__, iLocation,
+                    locationsCount);
+            continue;
+        }
+        if ((locations[iLocation]->sources_used & ~FLP_TECH_MASK_GNSS_AND_SENSORS) != 0)
+        {
+            ALOGE("%s: Unrequested location type %d at slot: %d of %d, skipping", __func__,
+                    locations[iLocation]->sources_used, iLocation, locationsCount);
+            continue;
+        }
+        gnssLocations.push_back(convertToGnssLocation(locations[iLocation]));
+    }
+
+    auto ret = sGnssBatchingCbIface->gnssLocationBatchCb(gnssLocations);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
+}
+
+void GnssBatching::acquireWakelockCb() {
+    Gnss::acquireWakelockFused();
+}
+
+void GnssBatching::releaseWakelockCb() {
+    Gnss::releaseWakelockFused();
+}
+
+// this can just return success, because threads are now set up on demand in the jni layer
+int32_t GnssBatching::setThreadEventCb(ThreadEvent /*event*/) {
+    return FLP_RESULT_SUCCESS;
+}
+
+void GnssBatching::flpCapabilitiesCb(int32_t capabilities) {
+    ALOGD("%s capabilities %d", __func__, capabilities);
+
+    if (capabilities & CAPABILITY_GNSS) {
+        // once callback is received and capabilities high enough, we know version is
+        // high enough for flush()
+        sFlpSupportsBatching = true;
+    }
+}
+
+void GnssBatching::flpStatusCb(int32_t status) {
+    ALOGD("%s (default implementation) not forwarding status: %d", __func__, status);
+}
 
 // Methods from ::android::hardware::gnss::V1_0::IGnssBatching follow.
 Return<bool> GnssBatching::init(const sp<IGnssBatchingCallback>& callback) {
-    // TODO(b/34133439) implement
-    return false;
+    if (mFlpLocationIface == nullptr) {
+        ALOGE("%s: Flp batching is unavailable", __func__);
+        return false;
+    }
+
+    sGnssBatchingCbIface = callback;
+
+    return (mFlpLocationIface->init(&sFlpCb) == 0);
 }
 
 Return<uint16_t> GnssBatching::getBatchSize() {
-    // TODO(b/34133439) implement
-    return 0;
+    if (mFlpLocationIface == nullptr) {
+        ALOGE("%s: Flp batching interface is unavailable", __func__);
+        return 0;
+    }
+
+    return mFlpLocationIface->get_batch_size();
 }
 
 Return<bool> GnssBatching::start(const IGnssBatching::Options& options) {
-    // TODO(b/34133439) implement
-    return false;
+    if (mFlpLocationIface == nullptr) {
+        ALOGE("%s: Flp batching interface is unavailable", __func__);
+        return false;
+    }
+
+    if (!sFlpSupportsBatching) {
+        ALOGE("%s: Flp batching interface not supported, no capabilities callback received",
+                __func__);
+        return false;
+    }
+
+    FlpBatchOptions optionsHw;
+    // Legacy code used 9999 mW for High accuracy, and 21 mW for balanced.
+    // New GNSS API just expects reasonable GNSS chipset behavior - do something efficient
+    // given the interval.  This 100 mW limit should be quite sufficient (esp. given legacy code
+    // implementations may not even use this value.)
+    optionsHw.max_power_allocation_mW = 100;
+    optionsHw.sources_to_use = FLP_TECH_MASK_GNSS_AND_SENSORS;
+    optionsHw.flags = 0;
+    if (options.flags & Flag::WAKEUP_ON_FIFO_FULL) {
+        optionsHw.flags |= FLP_BATCH_WAKEUP_ON_FIFO_FULL;
+    }
+    optionsHw.period_ns = options.periodNanos;
+    optionsHw.smallest_displacement_meters = 0; // Zero offset - just use time interval
+
+    return (mFlpLocationIface->start_batching(FLP_GNSS_BATCHING_CLIENT_ID, &optionsHw)
+            == FLP_RESULT_SUCCESS);
 }
 
 Return<void> GnssBatching::flush() {
-    // TODO(b/34133439) implement
+    if (mFlpLocationIface == nullptr) {
+        ALOGE("%s: Flp batching interface is unavailable", __func__);
+        return Void();
+    }
+
+    mFlpLocationIface->flush_batched_locations();
+
     return Void();
 }
 
 Return<bool> GnssBatching::stop() {
-    // TODO(b/34133439) implement
-    return false;
+    if (mFlpLocationIface == nullptr) {
+        ALOGE("%s: Flp batching interface is unavailable", __func__);
+        return false;
+    }
+
+    return (mFlpLocationIface->stop_batching(FLP_GNSS_BATCHING_CLIENT_ID) == FLP_RESULT_SUCCESS);
 }
 
 Return<void> GnssBatching::cleanup() {
-    // TODO(b/34133439) implement
+    if (mFlpLocationIface == nullptr) {
+        ALOGE("%s: Flp batching interface is unavailable", __func__);
+        return Void();
+    }
+
+    mFlpLocationIface->cleanup();
+
     return Void();
 }
 
diff --git a/gnss/1.0/default/GnssBatching.h b/gnss/1.0/default/GnssBatching.h
index ac3aa99..001c27d 100644
--- a/gnss/1.0/default/GnssBatching.h
+++ b/gnss/1.0/default/GnssBatching.h
@@ -6,7 +6,6 @@
 #include <hidl/MQDescriptor.h>
 #include <hidl/Status.h>
 
-
 namespace android {
 namespace hardware {
 namespace gnss {
@@ -35,8 +34,26 @@
     Return<bool> stop() override;
     Return<void> cleanup() override;
 
+    /*
+     * Callback methods to be passed into the conventional FLP HAL by the default
+     * implementation. These methods are not part of the IGnssBatching base class.
+     */
+    static void locationCb(int32_t locationsCount, FlpLocation** locations);
+    static void acquireWakelockCb();
+    static void releaseWakelockCb();
+    static int32_t setThreadEventCb(ThreadEvent event);
+    static void flpCapabilitiesCb(int32_t capabilities);
+    static void flpStatusCb(int32_t status);
+
+    /*
+     * Holds function pointers to the callback methods.
+     */
+    static FlpCallbacks sFlpCb;
+
  private:
     const FlpLocationInterface* mFlpLocationIface = nullptr;
+    static sp<IGnssBatchingCallback> sGnssBatchingCbIface;
+    static bool sFlpSupportsBatching;
 };
 
 extern "C" IGnssBatching* HIDL_FETCH_IGnssBatching(const char* name);
diff --git a/gnss/1.0/default/GnssGeofencing.cpp b/gnss/1.0/default/GnssGeofencing.cpp
index f42de42..54c4aaa 100644
--- a/gnss/1.0/default/GnssGeofencing.cpp
+++ b/gnss/1.0/default/GnssGeofencing.cpp
@@ -48,6 +48,7 @@
 
 GnssGeofencing::~GnssGeofencing() {
     sThreadFuncArgsList.clear();
+    sInterfaceExists = false;
 }
 void GnssGeofencing::gnssGfTransitionCb(int32_t geofenceId,
                                         GpsLocation* location,
@@ -64,11 +65,14 @@
     }
 
     GnssLocation gnssLocation = convertToGnssLocation(location);
-    mGnssGeofencingCbIface->gnssGeofenceTransitionCb(
+    auto ret = mGnssGeofencingCbIface->gnssGeofenceTransitionCb(
             geofenceId,
             gnssLocation,
             static_cast<IGnssGeofenceCallback::GeofenceTransition>(transition),
             timestamp);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void GnssGeofencing::gnssGfStatusCb(int32_t status, GpsLocation* location) {
@@ -85,8 +89,11 @@
         gnssLocation = {};
     }
 
-    mGnssGeofencingCbIface->gnssGeofenceStatusCb(
+    auto ret = mGnssGeofencingCbIface->gnssGeofenceStatusCb(
             static_cast<IGnssGeofenceCallback::GeofenceAvailability>(status), gnssLocation);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void GnssGeofencing::gnssGfAddCb(int32_t geofenceId, int32_t status) {
@@ -95,8 +102,11 @@
         return;
     }
 
-    mGnssGeofencingCbIface->gnssGeofenceAddCb(
+    auto ret = mGnssGeofencingCbIface->gnssGeofenceAddCb(
             geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void GnssGeofencing::gnssGfRemoveCb(int32_t geofenceId, int32_t status) {
@@ -105,8 +115,11 @@
         return;
     }
 
-    mGnssGeofencingCbIface->gnssGeofenceRemoveCb(
-      geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+    auto ret = mGnssGeofencingCbIface->gnssGeofenceRemoveCb(
+            geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void GnssGeofencing::gnssGfPauseCb(int32_t geofenceId, int32_t status) {
@@ -115,8 +128,11 @@
         return;
     }
 
-    mGnssGeofencingCbIface->gnssGeofencePauseCb(
+    auto ret = mGnssGeofencingCbIface->gnssGeofencePauseCb(
             geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 void GnssGeofencing::gnssGfResumeCb(int32_t geofenceId, int32_t status) {
@@ -125,8 +141,11 @@
         return;
     }
 
-    mGnssGeofencingCbIface->gnssGeofenceResumeCb(
+    auto ret = mGnssGeofencingCbIface->gnssGeofenceResumeCb(
             geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 pthread_t GnssGeofencing::createThreadCb(const char* name, void (*start)(void*), void* arg) {
diff --git a/gnss/1.0/default/GnssMeasurement.cpp b/gnss/1.0/default/GnssMeasurement.cpp
index 67f6d8d..6c9b838 100644
--- a/gnss/1.0/default/GnssMeasurement.cpp
+++ b/gnss/1.0/default/GnssMeasurement.cpp
@@ -96,7 +96,10 @@
         .hwClockDiscontinuityCount = clockVal.hw_clock_discontinuity_count
     };
 
-    sGnssMeasureCbIface->GnssMeasurementCb(gnssData);
+    auto ret = sGnssMeasureCbIface->GnssMeasurementCb(gnssData);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 /*
@@ -223,7 +226,10 @@
     gnssData.clock.driftUncertaintyNsps = clockVal.drift_uncertainty_nsps;
     gnssData.clock.gnssClockFlags = clockVal.flags;
 
-    sGnssMeasureCbIface->GnssMeasurementCb(gnssData);
+    auto ret = sGnssMeasureCbIface->GnssMeasurementCb(gnssData);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 // Methods from ::android::hardware::gnss::V1_0::IGnssMeasurement follow.
diff --git a/gnss/1.0/default/GnssNavigationMessage.cpp b/gnss/1.0/default/GnssNavigationMessage.cpp
index c98abf6..6f509d0 100644
--- a/gnss/1.0/default/GnssNavigationMessage.cpp
+++ b/gnss/1.0/default/GnssNavigationMessage.cpp
@@ -59,7 +59,10 @@
     navigationMsg.submessageId = message->submessage_id;
     navigationMsg.data.setToExternal(message->data, message->data_length);
 
-    sGnssNavigationMsgCbIface->gnssNavigationMessageCb(navigationMsg);
+    auto ret = sGnssNavigationMsgCbIface->gnssNavigationMessageCb(navigationMsg);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 // Methods from ::android::hardware::gnss::V1_0::IGnssNavigationMessage follow.
diff --git a/gnss/1.0/default/GnssNi.cpp b/gnss/1.0/default/GnssNi.cpp
index ec57e8c..d17891d 100644
--- a/gnss/1.0/default/GnssNi.cpp
+++ b/gnss/1.0/default/GnssNi.cpp
@@ -41,6 +41,7 @@
 
 GnssNi::~GnssNi() {
     sThreadFuncArgsList.clear();
+    sInterfaceExists = false;
 }
 
 pthread_t GnssNi::createThreadCb(const char* name, void (*start)(void*), void* arg) {
@@ -73,7 +74,10 @@
                 static_cast<IGnssNiCallback::GnssNiEncodingType>(notification->text_encoding)
     };
 
-    sGnssNiCbIface->niNotifyCb(notificationGnss);
+    auto ret = sGnssNiCbIface->niNotifyCb(notificationGnss);
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 // Methods from ::android::hardware::gnss::V1_0::IGnssNi follow.
diff --git a/gnss/1.0/default/GnssUtils.cpp b/gnss/1.0/default/GnssUtils.cpp
index 82a516b..d9956d6 100644
--- a/gnss/1.0/default/GnssUtils.cpp
+++ b/gnss/1.0/default/GnssUtils.cpp
@@ -51,6 +51,28 @@
     return gnssLocation;
 }
 
+GnssLocation convertToGnssLocation(FlpLocation* location) {
+    GnssLocation gnssLocation = {};
+    if (location != nullptr) {
+        gnssLocation = {
+            // Bit mask applied (and 0's below) for same reason as above with GpsLocation
+            .gnssLocationFlags = static_cast<uint16_t>(location->flags & 0x1f),
+            .latitudeDegrees = location->latitude,
+            .longitudeDegrees = location->longitude,
+            .altitudeMeters = location->altitude,
+            .speedMetersPerSec = location->speed,
+            .bearingDegrees = location->bearing,
+            .horizontalAccuracyMeters = location->accuracy,
+            .verticalAccuracyMeters = 0,
+            .speedAccuracyMetersPerSecond = 0,
+            .bearingAccuracyDegrees = 0,
+            .timestamp = location->timestamp
+        };
+    }
+
+    return gnssLocation;
+}
+
 }  // namespace implementation
 }  // namespace V1_0
 }  // namespace gnss
diff --git a/gnss/1.0/default/GnssUtils.h b/gnss/1.0/default/GnssUtils.h
index fc2f547..38d4b2d 100644
--- a/gnss/1.0/default/GnssUtils.h
+++ b/gnss/1.0/default/GnssUtils.h
@@ -16,6 +16,7 @@
 #ifndef android_hardware_gnss_V1_0_GnssUtil_H_
 #define android_hardware_gnss_V1_0_GnssUtil_H_
 
+#include <hardware/fused_location.h>
 #include <hardware/gps.h>
 #include <android/hardware/gnss/1.0/types.h>
 
@@ -31,6 +32,12 @@
  */
 GnssLocation convertToGnssLocation(GpsLocation* location);
 
+/*
+ * This method converts an FlpLocation struct to a GnssLocation
+ * struct.
+ */
+GnssLocation convertToGnssLocation(FlpLocation* location);
+
 }  // namespace implementation
 }  // namespace V1_0
 }  // namespace gnss
diff --git a/gnss/1.0/default/GnssXtra.cpp b/gnss/1.0/default/GnssXtra.cpp
index 065bb33..d124ce1 100644
--- a/gnss/1.0/default/GnssXtra.cpp
+++ b/gnss/1.0/default/GnssXtra.cpp
@@ -35,6 +35,7 @@
 
 GnssXtra::~GnssXtra() {
     sThreadFuncArgsList.clear();
+    sInterfaceExists = false;
 }
 
 pthread_t GnssXtra::createThreadCb(const char* name, void (*start)(void*), void* arg) {
@@ -53,7 +54,10 @@
         return;
     }
 
-    sGnssXtraCbIface->downloadRequestCb();
+    auto ret = sGnssXtraCbIface->downloadRequestCb();
+    if (!ret.isOk()) {
+        ALOGE("%s: Unable to invoke callback", __func__);
+    }
 }
 
 // Methods from ::android::hardware::gnss::V1_0::IGnssXtra follow.
diff --git a/gnss/1.0/default/android.hardware.gnss@1.0-service.rc b/gnss/1.0/default/android.hardware.gnss@1.0-service.rc
index eeb2e43..cf44944 100644
--- a/gnss/1.0/default/android.hardware.gnss@1.0-service.rc
+++ b/gnss/1.0/default/android.hardware.gnss@1.0-service.rc
@@ -1,4 +1,4 @@
-service gnss_service /system/bin/hw/android.hardware.gnss@1.0-service
+service gnss_service /vendor/bin/hw/android.hardware.gnss@1.0-service
     class main
     user system
     group system
diff --git a/gnss/1.0/types.hal b/gnss/1.0/types.hal
index 2721d44..d5e0e9b 100644
--- a/gnss/1.0/types.hal
+++ b/gnss/1.0/types.hal
@@ -16,6 +16,7 @@
 
 package android.hardware.gnss@1.0;
 
+@export(name="", value_prefix="GNSS_MAX_")
 enum GnssMax : uint32_t {
 /** Maximum number of SVs for gnssSvStatusCb(). */
     SVS_COUNT = 64,
@@ -27,6 +28,8 @@
 /*
  * Constellation type of GnssSvInfo
  */
+
+@export(name="", value_prefix="GNSS_CONSTELLATION_")
 enum GnssConstellationType : uint8_t {
     UNKNOWN = 0,
     GPS     = 1,
@@ -38,6 +41,7 @@
 };
 
 /** Bit mask to indicate which values are valid in a GnssLocation object. */
+@export(name="", value_prefix="GPS_LOCATION_")
 enum GnssLocationFlags : uint16_t {
     /** GnssLocation has valid latitude and longitude. */
     HAS_LAT_LONG              = 0x0001,
diff --git a/graphics/Android.bp b/graphics/Android.bp
index 6d55dd1..eaa47ae 100644
--- a/graphics/Android.bp
+++ b/graphics/Android.bp
@@ -6,6 +6,7 @@
     "common/1.0",
     "composer/2.1",
     "composer/2.1/default",
+    "composer/2.1/vts/functional",
     "mapper/2.0",
     "mapper/2.0/default",
     "mapper/2.0/vts/functional",
diff --git a/graphics/allocator/2.0/Android.bp b/graphics/allocator/2.0/Android.bp
index 48db3e9..69ddd9b 100644
--- a/graphics/allocator/2.0/Android.bp
+++ b/graphics/allocator/2.0/Android.bp
@@ -1,13 +1,20 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.graphics.allocator@2.0_hal",
+    srcs: [
+        "types.hal",
+        "IAllocator.hal",
+        "IAllocatorClient.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.graphics.allocator@2.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0",
     srcs: [
-        "types.hal",
-        "IAllocator.hal",
-        "IAllocatorClient.hal",
+        ":android.hardware.graphics.allocator@2.0_hal",
     ],
     out: [
         "android/hardware/graphics/allocator/2.0/types.cpp",
@@ -21,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0",
     srcs: [
-        "types.hal",
-        "IAllocator.hal",
-        "IAllocatorClient.hal",
+        ":android.hardware.graphics.allocator@2.0_hal",
     ],
     out: [
         "android/hardware/graphics/allocator/2.0/types.h",
@@ -64,159 +69,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.graphics.allocator.vts.driver@2.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/graphics/allocator/2.0/ $(genDir)/android/hardware/graphics/allocator/2.0/",
-    srcs: [
-        "types.hal",
-        "IAllocator.hal",
-        "IAllocatorClient.hal",
-    ],
-    out: [
-        "android/hardware/graphics/allocator/2.0/types.vts.cpp",
-        "android/hardware/graphics/allocator/2.0/Allocator.vts.cpp",
-        "android/hardware/graphics/allocator/2.0/AllocatorClient.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.graphics.allocator.vts.driver@2.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/graphics/allocator/2.0/ $(genDir)/android/hardware/graphics/allocator/2.0/",
-    srcs: [
-        "types.hal",
-        "IAllocator.hal",
-        "IAllocatorClient.hal",
-    ],
-    out: [
-        "android/hardware/graphics/allocator/2.0/types.vts.h",
-        "android/hardware/graphics/allocator/2.0/Allocator.vts.h",
-        "android/hardware/graphics/allocator/2.0/AllocatorClient.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.graphics.allocator.vts.driver@2.0",
-    generated_sources: ["android.hardware.graphics.allocator.vts.driver@2.0_genc++"],
-    generated_headers: ["android.hardware.graphics.allocator.vts.driver@2.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.graphics.allocator.vts.driver@2.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hardware.graphics.common@1.0",
-        "android.hidl.base@1.0",
-        "android.hardware.graphics.allocator@2.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hardware.graphics.common@1.0",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.graphics.allocator@2.0-IAllocator-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/graphics/allocator/2.0/ $(genDir)/android/hardware/graphics/allocator/2.0/",
-    srcs: [
-        "IAllocator.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/graphics/allocator/2.0/Allocator.vts.cpp",
-        "android/hardware/graphics/allocator/2.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.graphics.allocator@2.0-IAllocator-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/graphics/allocator/2.0/ $(genDir)/android/hardware/graphics/allocator/2.0/",
-    srcs: [
-        "IAllocator.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/graphics/allocator/2.0/Allocator.vts.h",
-        "android/hardware/graphics/allocator/2.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.graphics.allocator@2.0-IAllocator-vts.profiler",
-    generated_sources: ["android.hardware.graphics.allocator@2.0-IAllocator-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.graphics.allocator@2.0-IAllocator-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.graphics.allocator@2.0-IAllocator-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hardware.graphics.common@1.0",
-        "android.hidl.base@1.0",
-        "android.hardware.graphics.allocator@2.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.graphics.allocator@2.0-IAllocatorClient-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/graphics/allocator/2.0/ $(genDir)/android/hardware/graphics/allocator/2.0/",
-    srcs: [
-        "IAllocatorClient.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/graphics/allocator/2.0/AllocatorClient.vts.cpp",
-        "android/hardware/graphics/allocator/2.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.graphics.allocator@2.0-IAllocatorClient-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/graphics/allocator/2.0/ $(genDir)/android/hardware/graphics/allocator/2.0/",
-    srcs: [
-        "IAllocatorClient.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/graphics/allocator/2.0/AllocatorClient.vts.h",
-        "android/hardware/graphics/allocator/2.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.graphics.allocator@2.0-IAllocatorClient-vts.profiler",
-    generated_sources: ["android.hardware.graphics.allocator@2.0-IAllocatorClient-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.graphics.allocator@2.0-IAllocatorClient-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.graphics.allocator@2.0-IAllocatorClient-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hardware.graphics.common@1.0",
-        "android.hidl.base@1.0",
-        "android.hardware.graphics.allocator@2.0",
-    ],
-}
diff --git a/graphics/allocator/2.0/default/Android.bp b/graphics/allocator/2.0/default/Android.bp
index f0c736c..315893f 100644
--- a/graphics/allocator/2.0/default/Android.bp
+++ b/graphics/allocator/2.0/default/Android.bp
@@ -1,5 +1,6 @@
 cc_library_shared {
     name: "android.hardware.graphics.allocator@2.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["Gralloc.cpp"],
     cppflags: ["-Wall", "-Wextra"],
@@ -18,6 +19,7 @@
 
 cc_binary {
     name: "android.hardware.graphics.allocator@2.0-service",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["service.cpp"],
     init_rc: ["android.hardware.graphics.allocator@2.0-service.rc"],
diff --git a/graphics/allocator/2.0/default/android.hardware.graphics.allocator@2.0-service.rc b/graphics/allocator/2.0/default/android.hardware.graphics.allocator@2.0-service.rc
index 8bb0d85..c4715cd 100644
--- a/graphics/allocator/2.0/default/android.hardware.graphics.allocator@2.0-service.rc
+++ b/graphics/allocator/2.0/default/android.hardware.graphics.allocator@2.0-service.rc
@@ -1,4 +1,4 @@
-service gralloc-2-0 /system/bin/hw/android.hardware.graphics.allocator@2.0-service
+service gralloc-2-0 /vendor/bin/hw/android.hardware.graphics.allocator@2.0-service
     class hal
     user system
     group graphics drmrpc readproc
diff --git a/graphics/allocator/2.0/vts/Allocator.vts b/graphics/allocator/2.0/vts/Allocator.vts
deleted file mode 100644
index e767cbd..0000000
--- a/graphics/allocator/2.0/vts/Allocator.vts
+++ /dev/null
@@ -1,87 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "IAllocator"
-
-package: "android.hardware.graphics.allocator"
-
-import: "android.hardware.graphics.allocator@2.0::IAllocatorClient"
-import: "android.hardware.graphics.allocator@2.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::graphics::allocator::V2_0::IAllocator::Capability"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "int32_t"
-
-            enumerator: "INVALID"
-            scalar_value: {
-                int32_t: 0
-            }
-            enumerator: "TEST_ALLOCATE"
-            scalar_value: {
-                int32_t: 1
-            }
-            enumerator: "LAYERED_BUFFERS"
-            scalar_value: {
-                int32_t: 2
-            }
-        }
-    }
-
-    api: {
-        name: "getCapabilities"
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_ENUM
-                predefined_type: "::android::hardware::graphics::allocator::V2_0::IAllocator::Capability"
-            }
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            exit: true
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "dumpDebugInfo"
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            exit: true
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "createClient"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IAllocatorClient"
-            is_callback: false
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-}
diff --git a/graphics/allocator/2.0/vts/AllocatorClient.vts b/graphics/allocator/2.0/vts/AllocatorClient.vts
deleted file mode 100644
index 2ab19f7..0000000
--- a/graphics/allocator/2.0/vts/AllocatorClient.vts
+++ /dev/null
@@ -1,635 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "IAllocatorClient"
-
-package: "android.hardware.graphics.allocator"
-
-import: "android.hardware.graphics.allocator@2.0::types"
-import: "android.hardware.graphics.common@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::graphics::common::V1_0::PixelFormat"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "int32_t"
-
-            enumerator: "RGBA_8888"
-            scalar_value: {
-                int32_t: 1
-            }
-            enumerator: "RGBX_8888"
-            scalar_value: {
-                int32_t: 2
-            }
-            enumerator: "RGB_888"
-            scalar_value: {
-                int32_t: 3
-            }
-            enumerator: "RGB_565"
-            scalar_value: {
-                int32_t: 4
-            }
-            enumerator: "BGRA_8888"
-            scalar_value: {
-                int32_t: 5
-            }
-            enumerator: "RGBA_FP16"
-            scalar_value: {
-                int32_t: 22
-            }
-            enumerator: "YV12"
-            scalar_value: {
-                int32_t: 842094169
-            }
-            enumerator: "Y8"
-            scalar_value: {
-                int32_t: 538982489
-            }
-            enumerator: "Y16"
-            scalar_value: {
-                int32_t: 540422489
-            }
-            enumerator: "RAW16"
-            scalar_value: {
-                int32_t: 32
-            }
-            enumerator: "RAW10"
-            scalar_value: {
-                int32_t: 37
-            }
-            enumerator: "RAW12"
-            scalar_value: {
-                int32_t: 38
-            }
-            enumerator: "RAW_OPAQUE"
-            scalar_value: {
-                int32_t: 36
-            }
-            enumerator: "BLOB"
-            scalar_value: {
-                int32_t: 33
-            }
-            enumerator: "IMPLEMENTATION_DEFINED"
-            scalar_value: {
-                int32_t: 34
-            }
-            enumerator: "YCBCR_420_888"
-            scalar_value: {
-                int32_t: 35
-            }
-            enumerator: "YCBCR_422_888"
-            scalar_value: {
-                int32_t: 39
-            }
-            enumerator: "YCBCR_444_888"
-            scalar_value: {
-                int32_t: 40
-            }
-            enumerator: "FLEX_RGB_888"
-            scalar_value: {
-                int32_t: 41
-            }
-            enumerator: "FLEX_RGBA_8888"
-            scalar_value: {
-                int32_t: 42
-            }
-            enumerator: "YCBCR_422_SP"
-            scalar_value: {
-                int32_t: 16
-            }
-            enumerator: "YCRCB_420_SP"
-            scalar_value: {
-                int32_t: 17
-            }
-            enumerator: "YCBCR_422_I"
-            scalar_value: {
-                int32_t: 20
-            }
-            enumerator: "JPEG"
-            scalar_value: {
-                int32_t: 256
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::graphics::common::V1_0::Transform"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "int32_t"
-
-            enumerator: "FLIP_H"
-            scalar_value: {
-                int32_t: 1
-            }
-            enumerator: "FLIP_V"
-            scalar_value: {
-                int32_t: 2
-            }
-            enumerator: "ROT_90"
-            scalar_value: {
-                int32_t: 4
-            }
-            enumerator: "ROT_180"
-            scalar_value: {
-                int32_t: 3
-            }
-            enumerator: "ROT_270"
-            scalar_value: {
-                int32_t: 7
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::graphics::common::V1_0::Dataspace"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "int32_t"
-
-            enumerator: "UNKNOWN"
-            scalar_value: {
-                int32_t: 0
-            }
-            enumerator: "ARBITRARY"
-            scalar_value: {
-                int32_t: 1
-            }
-            enumerator: "STANDARD_SHIFT"
-            scalar_value: {
-                int32_t: 16
-            }
-            enumerator: "STANDARD_MASK"
-            scalar_value: {
-                int32_t: 4128768
-            }
-            enumerator: "STANDARD_UNSPECIFIED"
-            scalar_value: {
-                int32_t: 0
-            }
-            enumerator: "STANDARD_BT709"
-            scalar_value: {
-                int32_t: 65536
-            }
-            enumerator: "STANDARD_BT601_625"
-            scalar_value: {
-                int32_t: 131072
-            }
-            enumerator: "STANDARD_BT601_625_UNADJUSTED"
-            scalar_value: {
-                int32_t: 196608
-            }
-            enumerator: "STANDARD_BT601_525"
-            scalar_value: {
-                int32_t: 262144
-            }
-            enumerator: "STANDARD_BT601_525_UNADJUSTED"
-            scalar_value: {
-                int32_t: 327680
-            }
-            enumerator: "STANDARD_BT2020"
-            scalar_value: {
-                int32_t: 393216
-            }
-            enumerator: "STANDARD_BT2020_CONSTANT_LUMINANCE"
-            scalar_value: {
-                int32_t: 458752
-            }
-            enumerator: "STANDARD_BT470M"
-            scalar_value: {
-                int32_t: 524288
-            }
-            enumerator: "STANDARD_FILM"
-            scalar_value: {
-                int32_t: 589824
-            }
-            enumerator: "STANDARD_DCI_P3"
-            scalar_value: {
-                int32_t: 655360
-            }
-            enumerator: "STANDARD_ADOBE_RGB"
-            scalar_value: {
-                int32_t: 720896
-            }
-            enumerator: "TRANSFER_SHIFT"
-            scalar_value: {
-                int32_t: 22
-            }
-            enumerator: "TRANSFER_MASK"
-            scalar_value: {
-                int32_t: 130023424
-            }
-            enumerator: "TRANSFER_UNSPECIFIED"
-            scalar_value: {
-                int32_t: 0
-            }
-            enumerator: "TRANSFER_LINEAR"
-            scalar_value: {
-                int32_t: 4194304
-            }
-            enumerator: "TRANSFER_SRGB"
-            scalar_value: {
-                int32_t: 8388608
-            }
-            enumerator: "TRANSFER_SMPTE_170M"
-            scalar_value: {
-                int32_t: 12582912
-            }
-            enumerator: "TRANSFER_GAMMA2_2"
-            scalar_value: {
-                int32_t: 16777216
-            }
-            enumerator: "TRANSFER_GAMMA2_6"
-            scalar_value: {
-                int32_t: 20971520
-            }
-            enumerator: "TRANSFER_GAMMA2_8"
-            scalar_value: {
-                int32_t: 25165824
-            }
-            enumerator: "TRANSFER_ST2084"
-            scalar_value: {
-                int32_t: 29360128
-            }
-            enumerator: "TRANSFER_HLG"
-            scalar_value: {
-                int32_t: 33554432
-            }
-            enumerator: "RANGE_SHIFT"
-            scalar_value: {
-                int32_t: 27
-            }
-            enumerator: "RANGE_MASK"
-            scalar_value: {
-                int32_t: 939524096
-            }
-            enumerator: "RANGE_UNSPECIFIED"
-            scalar_value: {
-                int32_t: 0
-            }
-            enumerator: "RANGE_FULL"
-            scalar_value: {
-                int32_t: 134217728
-            }
-            enumerator: "RANGE_LIMITED"
-            scalar_value: {
-                int32_t: 268435456
-            }
-            enumerator: "RANGE_EXTENDED"
-            scalar_value: {
-                int32_t: 402653184
-            }
-            enumerator: "SRGB_LINEAR"
-            scalar_value: {
-                int32_t: 512
-            }
-            enumerator: "V0_SRGB_LINEAR"
-            scalar_value: {
-                int32_t: 138477568
-            }
-            enumerator: "V0_SCRGB_LINEAR"
-            scalar_value: {
-                int32_t: 406913024
-            }
-            enumerator: "SRGB"
-            scalar_value: {
-                int32_t: 513
-            }
-            enumerator: "V0_SRGB"
-            scalar_value: {
-                int32_t: 142671872
-            }
-            enumerator: "V0_SCRGB"
-            scalar_value: {
-                int32_t: 411107328
-            }
-            enumerator: "JFIF"
-            scalar_value: {
-                int32_t: 257
-            }
-            enumerator: "V0_JFIF"
-            scalar_value: {
-                int32_t: 146931712
-            }
-            enumerator: "BT601_625"
-            scalar_value: {
-                int32_t: 258
-            }
-            enumerator: "V0_BT601_625"
-            scalar_value: {
-                int32_t: 281149440
-            }
-            enumerator: "BT601_525"
-            scalar_value: {
-                int32_t: 259
-            }
-            enumerator: "V0_BT601_525"
-            scalar_value: {
-                int32_t: 281280512
-            }
-            enumerator: "BT709"
-            scalar_value: {
-                int32_t: 260
-            }
-            enumerator: "V0_BT709"
-            scalar_value: {
-                int32_t: 281083904
-            }
-            enumerator: "DCI_P3_LINEAR"
-            scalar_value: {
-                int32_t: 139067392
-            }
-            enumerator: "DCI_P3"
-            scalar_value: {
-                int32_t: 155844608
-            }
-            enumerator: "DISPLAY_P3_LINEAR"
-            scalar_value: {
-                int32_t: 139067392
-            }
-            enumerator: "DISPLAY_P3"
-            scalar_value: {
-                int32_t: 143261696
-            }
-            enumerator: "ADOBE_RGB"
-            scalar_value: {
-                int32_t: 151715840
-            }
-            enumerator: "BT2020_LINEAR"
-            scalar_value: {
-                int32_t: 138805248
-            }
-            enumerator: "BT2020"
-            scalar_value: {
-                int32_t: 147193856
-            }
-            enumerator: "DEPTH"
-            scalar_value: {
-                int32_t: 4096
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::graphics::common::V1_0::ColorMode"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "int32_t"
-
-            enumerator: "NATIVE"
-            scalar_value: {
-                int32_t: 0
-            }
-            enumerator: "STANDARD_BT601_625"
-            scalar_value: {
-                int32_t: 1
-            }
-            enumerator: "STANDARD_BT601_625_UNADJUSTED"
-            scalar_value: {
-                int32_t: 2
-            }
-            enumerator: "STANDARD_BT601_525"
-            scalar_value: {
-                int32_t: 3
-            }
-            enumerator: "STANDARD_BT601_525_UNADJUSTED"
-            scalar_value: {
-                int32_t: 4
-            }
-            enumerator: "STANDARD_BT709"
-            scalar_value: {
-                int32_t: 5
-            }
-            enumerator: "DCI_P3"
-            scalar_value: {
-                int32_t: 6
-            }
-            enumerator: "SRGB"
-            scalar_value: {
-                int32_t: 7
-            }
-            enumerator: "ADOBE_RGB"
-            scalar_value: {
-                int32_t: 8
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::graphics::common::V1_0::ColorTransform"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "int32_t"
-
-            enumerator: "IDENTITY"
-            scalar_value: {
-                int32_t: 0
-            }
-            enumerator: "ARBITRARY_MATRIX"
-            scalar_value: {
-                int32_t: 1
-            }
-            enumerator: "VALUE_INVERSE"
-            scalar_value: {
-                int32_t: 2
-            }
-            enumerator: "GRAYSCALE"
-            scalar_value: {
-                int32_t: 3
-            }
-            enumerator: "CORRECT_PROTANOPIA"
-            scalar_value: {
-                int32_t: 4
-            }
-            enumerator: "CORRECT_DEUTERANOPIA"
-            scalar_value: {
-                int32_t: 5
-            }
-            enumerator: "CORRECT_TRITANOPIA"
-            scalar_value: {
-                int32_t: 6
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::graphics::common::V1_0::Hdr"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "int32_t"
-
-            enumerator: "DOLBY_VISION"
-            scalar_value: {
-                int32_t: 1
-            }
-            enumerator: "HDR10"
-            scalar_value: {
-                int32_t: 2
-            }
-            enumerator: "HLG"
-            scalar_value: {
-                int32_t: 3
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::graphics::allocator::V2_0::IAllocatorClient::BufferDescriptorInfo"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "width"
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        struct_value: {
-            name: "height"
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        struct_value: {
-            name: "layerCount"
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        struct_value: {
-            name: "format"
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::common::V1_0::PixelFormat"
-        }
-        struct_value: {
-            name: "producerUsageMask"
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        struct_value: {
-            name: "consumerUsageMask"
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-    }
-
-    api: {
-        name: "createDescriptor"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::IAllocatorClient::BufferDescriptorInfo"
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "destroyDescriptor"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        callflow: {
-            exit: true
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "testAllocate"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint64_t"
-            }
-        }
-        callflow: {
-            next: "allocate"
-        }
-    }
-
-    api: {
-        name: "allocate"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint64_t"
-            }
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint64_t"
-            }
-        }
-        callflow: {
-            next: "exportHandle"
-        }
-    }
-
-    api: {
-        name: "free"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        callflow: {
-            exit: true
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "exportHandle"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_HANDLE
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        callflow: {
-            next: "free"
-        }
-    }
-
-}
diff --git a/graphics/allocator/2.0/vts/Android.mk b/graphics/allocator/2.0/vts/Android.mk
deleted file mode 100644
index 00fd344..0000000
--- a/graphics/allocator/2.0/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(LOCAL_PATH)/functional/vts/testcases/hal/graphics/allocator/hidl/target/Android.mk
diff --git a/graphics/allocator/2.0/vts/functional/Android.bp b/graphics/allocator/2.0/vts/functional/Android.bp
index 194b228..498fbb6 100644
--- a/graphics/allocator/2.0/vts/functional/Android.bp
+++ b/graphics/allocator/2.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "graphics_allocator_hidl_hal_test",
+    name: "VtsHalGraphicsAllocatorV2_0TargetTest",
     gtest: true,
-    srcs: ["graphics_allocator_hidl_hal_test.cpp"],
+    srcs: ["VtsHalGraphicsAllocatorV2_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -31,11 +31,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
-    ],
-    ldflags: [
-        "--coverage",
-    ],
+    ]
 }
diff --git a/graphics/allocator/2.0/vts/functional/graphics_allocator_hidl_hal_test.cpp b/graphics/allocator/2.0/vts/functional/VtsHalGraphicsAllocatorV2_0TargetTest.cpp
similarity index 100%
rename from graphics/allocator/2.0/vts/functional/graphics_allocator_hidl_hal_test.cpp
rename to graphics/allocator/2.0/vts/functional/VtsHalGraphicsAllocatorV2_0TargetTest.cpp
diff --git a/graphics/allocator/2.0/vts/functional/vts/testcases/hal/graphics/allocator/hidl/target/Android.mk b/graphics/allocator/2.0/vts/functional/vts/testcases/hal/graphics/allocator/hidl/target/Android.mk
deleted file mode 100644
index 2c1617f..0000000
--- a/graphics/allocator/2.0/vts/functional/vts/testcases/hal/graphics/allocator/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalGraphicsAllocatorHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/graphics/allocator/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/graphics/allocator/2.0/vts/functional/vts/testcases/hal/graphics/allocator/hidl/target/AndroidTest.xml b/graphics/allocator/2.0/vts/functional/vts/testcases/hal/graphics/allocator/hidl/target/AndroidTest.xml
deleted file mode 100644
index 4ef2e95..0000000
--- a/graphics/allocator/2.0/vts/functional/vts/testcases/hal/graphics/allocator/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Graphics Allocator HIDL HAL's basic target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalGraphicsAllocatorHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/graphics_allocator_hidl_hal_test/graphics_allocator_hidl_hal_test,
-            _64bit::DATA/nativetest64/graphics_allocator_hidl_hal_test/graphics_allocator_hidl_hal_test,
-	    " />
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/graphics/allocator/2.0/vts/types.vts b/graphics/allocator/2.0/vts/types.vts
deleted file mode 100644
index 2b7e47a..0000000
--- a/graphics/allocator/2.0/vts/types.vts
+++ /dev/null
@@ -1,134 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "types"
-
-package: "android.hardware.graphics.allocator"
-
-
-attribute: {
-    name: "::android::hardware::graphics::allocator::V2_0::Error"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "BAD_DESCRIPTOR"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "BAD_BUFFER"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "BAD_VALUE"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "NOT_SHARED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "NO_RESOURCES"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "UNDEFINED"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "UNSUPPORTED"
-        scalar_value: {
-            int32_t: 7
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::graphics::allocator::V2_0::ProducerUsage"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint64_t"
-
-        enumerator: "CPU_READ"
-        scalar_value: {
-            uint64_t: 2
-        }
-        enumerator: "CPU_READ_OFTEN"
-        scalar_value: {
-            uint64_t: 4
-        }
-        enumerator: "CPU_WRITE"
-        scalar_value: {
-            uint64_t: 32
-        }
-        enumerator: "CPU_WRITE_OFTEN"
-        scalar_value: {
-            uint64_t: 64
-        }
-        enumerator: "GPU_RENDER_TARGET"
-        scalar_value: {
-            uint64_t: 512
-        }
-        enumerator: "PROTECTED"
-        scalar_value: {
-            uint64_t: 16384
-        }
-        enumerator: "CAMERA"
-        scalar_value: {
-            uint64_t: 131072
-        }
-        enumerator: "VIDEO_DECODER"
-        scalar_value: {
-            uint64_t: 4194304
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::graphics::allocator::V2_0::ConsumerUsage"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint64_t"
-
-        enumerator: "CPU_READ"
-        scalar_value: {
-            uint64_t: 2
-        }
-        enumerator: "CPU_READ_OFTEN"
-        scalar_value: {
-            uint64_t: 4
-        }
-        enumerator: "GPU_TEXTURE"
-        scalar_value: {
-            uint64_t: 256
-        }
-        enumerator: "HWCOMPOSER"
-        scalar_value: {
-            uint64_t: 2048
-        }
-        enumerator: "CLIENT_TARGET"
-        scalar_value: {
-            uint64_t: 4096
-        }
-        enumerator: "CURSOR"
-        scalar_value: {
-            uint64_t: 32768
-        }
-        enumerator: "VIDEO_ENCODER"
-        scalar_value: {
-            uint64_t: 65536
-        }
-        enumerator: "CAMERA"
-        scalar_value: {
-            uint64_t: 262144
-        }
-        enumerator: "RENDERSCRIPT"
-        scalar_value: {
-            uint64_t: 1048576
-        }
-    }
-}
-
diff --git a/graphics/common/1.0/Android.bp b/graphics/common/1.0/Android.bp
index b67afd1..99370e8 100644
--- a/graphics/common/1.0/Android.bp
+++ b/graphics/common/1.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.graphics.common@1.0_hal",
+    srcs: [
+        "types.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.graphics.common@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.common@1.0",
     srcs: [
-        "types.hal",
+        ":android.hardware.graphics.common@1.0_hal",
     ],
     out: [
         "android/hardware/graphics/common/1.0/types.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.common@1.0",
     srcs: [
-        "types.hal",
+        ":android.hardware.graphics.common@1.0_hal",
     ],
     out: [
         "android/hardware/graphics/common/1.0/types.h",
diff --git a/graphics/common/1.0/Android.mk b/graphics/common/1.0/Android.mk
index 0fa6dcc..c08053d 100644
--- a/graphics/common/1.0/Android.mk
+++ b/graphics/common/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.graphics.common@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -134,7 +134,7 @@
 LOCAL_MODULE := android.hardware.graphics.common@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -260,7 +260,7 @@
 LOCAL_MODULE := android.hardware.graphics.common@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/graphics/common/1.0/types.hal b/graphics/common/1.0/types.hal
index 6fddfaf..7663701 100644
--- a/graphics/common/1.0/types.hal
+++ b/graphics/common/1.0/types.hal
@@ -38,6 +38,16 @@
     BGRA_8888          = 5,
 
     /*
+     * The following formats use 10bit integers for R, G, and B and
+     * 2 bits for alpha. This is used to improve color precision on
+     * wide-color devices, e.g. Display-P3 or scRGB.
+     *
+     * When used with ANativeWindow, the dataSpace field describes the color
+     * space of the buffer.
+     */
+    RGBA_1010102       = 0x2B,
+
+    /*
      * The following formats use a 16bit float per color component.
      *
      * When used with ANativeWindow, the dataSpace field describes the color
@@ -322,6 +332,7 @@
      * -------------------------------+-----------------------------------------
      *  HAL_DATASPACE_JFIF            | An encoded JPEG image
      *  HAL_DATASPACE_DEPTH           | An android_depth_points buffer
+     *  HAL_DATASPACE_SENSOR          | Sensor event data.
      *  Other                         | Unsupported
      *
      */
@@ -1080,7 +1091,17 @@
      *       The point cloud will be represented with the android_depth_points
      *       structure.
      */
-    DEPTH = 0x1000
+    DEPTH = 0x1000,
+
+
+    /*
+     * The buffer contains sensor events from sensor direct report.
+     * This value is valid with formats:
+     *    HAL_PIXEL_FORMAT_BLOB: an array of sensor event structure that forms
+     *       a lock free queue. Format of sensor event structure is specified
+     *       in Sensors HAL.
+     */
+    SENSOR = 0x1001
 };
 
 /*
diff --git a/graphics/composer/2.1/Android.bp b/graphics/composer/2.1/Android.bp
index 7216c0f..f309439 100644
--- a/graphics/composer/2.1/Android.bp
+++ b/graphics/composer/2.1/Android.bp
@@ -1,15 +1,22 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.graphics.composer@2.1_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.composer@2.1",
+filegroup {
+    name: "android.hardware.graphics.composer@2.1_hal",
     srcs: [
         "types.hal",
         "IComposer.hal",
         "IComposerCallback.hal",
         "IComposerClient.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.graphics.composer@2.1_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.composer@2.1",
+    srcs: [
+        ":android.hardware.graphics.composer@2.1_hal",
+    ],
     out: [
         "android/hardware/graphics/composer/2.1/types.cpp",
         "android/hardware/graphics/composer/2.1/ComposerAll.cpp",
@@ -23,10 +30,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.composer@2.1",
     srcs: [
-        "types.hal",
-        "IComposer.hal",
-        "IComposerCallback.hal",
-        "IComposerClient.hal",
+        ":android.hardware.graphics.composer@2.1_hal",
     ],
     out: [
         "android/hardware/graphics/composer/2.1/types.h",
diff --git a/boot/1.0/vts/functional/Android.mk b/graphics/composer/2.1/Android.mk
similarity index 100%
rename from boot/1.0/vts/functional/Android.mk
rename to graphics/composer/2.1/Android.mk
diff --git a/graphics/composer/2.1/IComposer.hal b/graphics/composer/2.1/IComposer.hal
index 771fc7d..553a537 100644
--- a/graphics/composer/2.1/IComposer.hal
+++ b/graphics/composer/2.1/IComposer.hal
@@ -53,6 +53,9 @@
      *
      * @return capabilities is a list of supported capabilities.
      */
+    @entry
+    @exit
+    @callflow(next="*")
     getCapabilities() generates (vec<Capability> capabilities);
 
     /*
@@ -61,6 +64,9 @@
      *
      * @return debugInfo is a string of debug information.
      */
+    @entry
+    @exit
+    @callflow(next="*")
     dumpDebugInfo() generates (string debugInfo);
 
     /*
@@ -73,5 +79,7 @@
      *         NO_RESOURCES when no more client can be created currently.
      * @return client is the newly created client.
      */
+    @entry
+    @callflow(next="*")
     createClient() generates (Error error, IComposerClient client);
 };
diff --git a/graphics/composer/2.1/IComposerCallback.hal b/graphics/composer/2.1/IComposerCallback.hal
index a8ca168..541d7eb 100644
--- a/graphics/composer/2.1/IComposerCallback.hal
+++ b/graphics/composer/2.1/IComposerCallback.hal
@@ -44,6 +44,7 @@
      * @param connected indicates whether the display is connected or
      *        disconnected.
      */
+    @callflow(next="*")
     onHotplug(Display display, Connection connected);
 
     /*
@@ -57,6 +58,7 @@
      *
      * @param display is the display to refresh.
      */
+    @callflow(next="*")
     oneway onRefresh(Display display);
 
     /*
@@ -68,5 +70,6 @@
      * @param timestamp is the CLOCK_MONOTONIC time at which the vsync event
      *        occurred, in nanoseconds.
      */
+    @callflow(next="*")
     oneway onVsync(Display display, int64_t timestamp);
 };
diff --git a/graphics/composer/2.1/IComposerClient.hal b/graphics/composer/2.1/IComposerClient.hal
index b0bd837..107ac5e 100644
--- a/graphics/composer/2.1/IComposerClient.hal
+++ b/graphics/composer/2.1/IComposerClient.hal
@@ -240,6 +240,8 @@
      *
      * @param callback is the IComposerCallback object.
      */
+    @entry
+    @callflow(next="*")
     registerCallback(IComposerCallback callback);
 
     /*
@@ -250,6 +252,7 @@
      *
      * @return count is the maximum number of virtual displays supported.
      */
+    @callflow(next="*")
     getMaxVirtualDisplayCount() generates (uint32_t count);
 
     /*
@@ -274,6 +277,7 @@
      * @return display is the newly-created virtual display.
      * @return format is the format of the buffer the device will produce.
      */
+    @callflow(next="*")
     createVirtualDisplay(uint32_t width,
                          uint32_t height,
                          PixelFormat formatHint,
@@ -293,6 +297,7 @@
      *         BAD_PARAMETER when the display handle which was passed in does
      *                       not refer to a virtual display.
      */
+    @callflow(next="*")
     destroyVirtualDisplay(Display display) generates (Error error);
 
     /*
@@ -306,6 +311,7 @@
      *                      time.
      * @return layer is the handle of the new layer.
      */
+    @callflow(next="*")
     createLayer(Display display,
                 uint32_t bufferSlotCount)
      generates (Error error,
@@ -320,6 +326,7 @@
      *         BAD_DISPLAY when an invalid display handle was passed in.
      *         BAD_LAYER when an invalid layer handle was passed in.
      */
+    @callflow(next="*")
     destroyLayer(Display display, Layer layer) generates (Error error);
 
     /*
@@ -336,6 +343,7 @@
      *         BAD_CONFIG when no configuration is currently active.
      * @return config is the currently active display configuration.
      */
+    @callflow(next="*")
     getActiveConfig(Display display) generates (Error error, Config config);
 
     /*
@@ -357,6 +365,7 @@
      *         BAD_DISPLAY when an invalid display handle was passed in.
      *         UNSUPPORTED when the given configuration is not supported.
      */
+    @callflow(next="*")
     getClientTargetSupport(Display display,
                            uint32_t width,
                            uint32_t height,
@@ -374,6 +383,7 @@
      *         BAD_DISPLAY when an invalid display handle was passed in.
      * @return modes is an array of color modes.
      */
+    @callflow(next="*")
     getColorModes(Display display)
        generates (Error error,
                   vec<ColorMode> modes);
@@ -393,6 +403,7 @@
      *         UNSUPPORTED when attribute cannot be queried for the config.
      * @return value is the value of the attribute.
      */
+    @callflow(next="*")
     getDisplayAttribute(Display display,
                         Config config,
                         Attribute attribute)
@@ -408,6 +419,7 @@
      *         BAD_DISPLAY when an invalid display handle was passed in.
      * @return configs is an array of configuration handles.
      */
+    @callflow(next="*")
     getDisplayConfigs(Display display)
            generates (Error error,
                       vec<Config> configs);
@@ -419,6 +431,7 @@
      *         BAD_DISPLAY when an invalid display handle was passed in.
      * @return name is the name of the display.
      */
+    @callflow(next="*")
     getDisplayName(Display display) generates (Error error, string name);
 
     /*
@@ -429,6 +442,7 @@
      *         BAD_DISPLAY when an invalid display handle was passed in.
      * @return type is the type of the display.
      */
+    @callflow(next="*")
     getDisplayType(Display display) generates (Error error, DisplayType type);
 
     /*
@@ -443,6 +457,7 @@
      *         BAD_DISPLAY when an invalid display handle was passed in.
      * @return support is true only when the display supports doze modes.
      */
+    @callflow(next="*")
     getDozeSupport(Display display) generates (Error error, bool support);
 
     /*
@@ -463,6 +478,7 @@
      * @return minLuminance is the desired content minimum luminance for this
      *         display in cd/m^2.
      */
+    @callflow(next="*")
     getHdrCapabilities(Display display)
             generates (Error error,
                        vec<Hdr> types,
@@ -479,6 +495,7 @@
      *         BAD_DISPLAY when an invalid display handle was passed in.
      *         NO_RESOURCES when unable to reserve the slots.
      */
+    @callflow(next="*")
     setClientTargetSlotCount(Display display,
                              uint32_t clientTargetSlotCount)
                   generates (Error error);
@@ -495,6 +512,7 @@
      *         BAD_CONFIG when the configuration handle passed in is not valid
      *                    for this display.
      */
+    @callflow(next="*")
     setActiveConfig(Display display, Config config) generates (Error error);
 
     /*
@@ -513,6 +531,7 @@
      *         BAD_PARAMETER when mode is not a valid color mode.
      *         UNSUPPORTED when mode is not supported on this display.
      */
+    @callflow(next="*")
     setColorMode(Display display, ColorMode mode) generates (Error error);
 
     /*
@@ -531,6 +550,7 @@
      *         BAD_PARAMETER when mode was not a valid power mode.
      *         UNSUPPORTED when mode is not supported on this display.
      */
+    @callflow(next="*")
     setPowerMode(Display display, PowerMode mode) generates (Error error);
 
     /*
@@ -545,6 +565,7 @@
      *         BAD_DISPLAY when an invalid display handle was passed in.
      *         BAD_PARAMETER when enabled was an invalid value.
      */
+    @callflow(next="*")
     setVsyncEnabled(Display display, Vsync enabled) generates (Error error);
 
     /*
@@ -554,6 +575,7 @@
      * @return error is NONE upon success. Otherwise,
      *         NO_RESOURCES when failed to set the queue temporarily.
      */
+    @callflow(next="*")
     setInputCommandQueue(fmq_sync<uint32_t> descriptor)
               generates (Error error);
 
@@ -566,6 +588,7 @@
      *         NO_RESOURCES when failed to get the queue temporarily.
      * @return descriptor is the descriptor of the output command queue.
      */
+    @callflow(next="*")
     getOutputCommandQueue()
               generates (Error error,
                          fmq_sync<uint32_t> descriptor);
@@ -589,6 +612,7 @@
      * @param outHandles is an array of handles referenced by the output
      *        commands.
      */
+    @callflow(next="*")
     executeCommands(uint32_t inLength,
                     vec<handle> inHandles)
          generates (Error error,
diff --git a/graphics/composer/2.1/default/Android.bp b/graphics/composer/2.1/default/Android.bp
index 0d63c3c..4a5c70d 100644
--- a/graphics/composer/2.1/default/Android.bp
+++ b/graphics/composer/2.1/default/Android.bp
@@ -1,7 +1,29 @@
+cc_library_static {
+    name: "libhwcomposer-client",
+    export_include_dirs: ["."],
+    srcs: ["ComposerClient.cpp"],
+    shared_libs: [
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.composer@2.1",
+        "libbase",
+        "libcutils",
+        "libfmq",
+        "libhardware",
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libsync",
+        "libutils",
+    ],
+}
+
 cc_library_shared {
     name: "android.hardware.graphics.composer@2.1-impl",
+    proprietary: true,
     relative_install_path: "hw",
-    srcs: ["Hwc.cpp", "HwcClient.cpp"],
+    srcs: ["Hwc.cpp"],
+    static_libs: ["libhwcomposer-client"],
     shared_libs: [
         "android.hardware.graphics.allocator@2.0",
         "android.hardware.graphics.composer@2.1",
@@ -20,11 +42,11 @@
 
 cc_binary {
     name: "android.hardware.graphics.composer@2.1-service",
+    proprietary: true,
     relative_install_path: "hw",
-    srcs: ["service.cpp", "Hwc.cpp", "HwcClient.cpp"],
-    cppflags: ["-DBINDERIZED"],
+    srcs: ["service.cpp"],
     init_rc: ["android.hardware.graphics.composer@2.1-service.rc"],
-
+    static_libs: ["libhwcomposer-client"],
     shared_libs: [
         "android.hardware.graphics.allocator@2.0",
         "android.hardware.graphics.composer@2.1",
diff --git a/graphics/composer/2.1/default/ComposerBase.h b/graphics/composer/2.1/default/ComposerBase.h
new file mode 100644
index 0000000..85b1a4d
--- /dev/null
+++ b/graphics/composer/2.1/default/ComposerBase.h
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2017 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 ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_COMPOSER_BASE_H
+#define ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_COMPOSER_BASE_H
+
+#include <android/hardware/graphics/composer/2.1/IComposer.h>
+#include <hardware/hwcomposer2.h>
+
+namespace android {
+namespace hardware {
+namespace graphics {
+namespace composer {
+namespace V2_1 {
+namespace implementation {
+
+using android::hardware::graphics::common::V1_0::PixelFormat;
+using android::hardware::graphics::common::V1_0::Transform;
+using android::hardware::graphics::common::V1_0::Dataspace;
+using android::hardware::graphics::common::V1_0::ColorMode;
+using android::hardware::graphics::common::V1_0::ColorTransform;
+using android::hardware::graphics::common::V1_0::Hdr;
+
+class ComposerBase {
+public:
+    virtual ~ComposerBase() {};
+
+    virtual void removeClient() = 0;
+    virtual void enableCallback(bool enable) = 0;
+    virtual uint32_t getMaxVirtualDisplayCount() = 0;
+    virtual Error createVirtualDisplay(uint32_t width, uint32_t height,
+        PixelFormat* format, Display* outDisplay) = 0;
+    virtual Error destroyVirtualDisplay(Display display) = 0;
+    virtual Error createLayer(Display display, Layer* outLayer) = 0;
+    virtual Error destroyLayer(Display display, Layer layer) = 0;
+
+    virtual Error getActiveConfig(Display display, Config* outConfig) = 0;
+    virtual Error getClientTargetSupport(Display display,
+            uint32_t width, uint32_t height,
+            PixelFormat format, Dataspace dataspace) = 0;
+    virtual Error getColorModes(Display display,
+            hidl_vec<ColorMode>* outModes) = 0;
+    virtual Error getDisplayAttribute(Display display, Config config,
+            IComposerClient::Attribute attribute, int32_t* outValue) = 0;
+    virtual Error getDisplayConfigs(Display display,
+            hidl_vec<Config>* outConfigs) = 0;
+    virtual Error getDisplayName(Display display, hidl_string* outName) = 0;
+    virtual Error getDisplayType(Display display,
+            IComposerClient::DisplayType* outType) = 0;
+    virtual Error getDozeSupport(Display display, bool* outSupport) = 0;
+    virtual Error getHdrCapabilities(Display display, hidl_vec<Hdr>* outTypes,
+            float* outMaxLuminance, float* outMaxAverageLuminance,
+            float* outMinLuminance) = 0;
+
+    virtual Error setActiveConfig(Display display, Config config) = 0;
+    virtual Error setColorMode(Display display, ColorMode mode) = 0;
+    virtual Error setPowerMode(Display display,
+            IComposerClient::PowerMode mode) = 0;
+    virtual Error setVsyncEnabled(Display display,
+            IComposerClient::Vsync enabled) = 0;
+
+    virtual Error setColorTransform(Display display, const float* matrix,
+            int32_t hint) = 0;
+    virtual Error setClientTarget(Display display, buffer_handle_t target,
+            int32_t acquireFence, int32_t dataspace,
+            const std::vector<hwc_rect_t>& damage) = 0;
+    virtual Error setOutputBuffer(Display display, buffer_handle_t buffer,
+            int32_t releaseFence) = 0;
+    virtual Error validateDisplay(Display display,
+            std::vector<Layer>* outChangedLayers,
+            std::vector<IComposerClient::Composition>* outCompositionTypes,
+            uint32_t* outDisplayRequestMask,
+            std::vector<Layer>* outRequestedLayers,
+            std::vector<uint32_t>* outRequestMasks) = 0;
+    virtual Error acceptDisplayChanges(Display display) = 0;
+    virtual Error presentDisplay(Display display, int32_t* outPresentFence,
+            std::vector<Layer>* outLayers,
+            std::vector<int32_t>* outReleaseFences) = 0;
+
+    virtual Error setLayerCursorPosition(Display display, Layer layer,
+            int32_t x, int32_t y) = 0;
+    virtual Error setLayerBuffer(Display display, Layer layer,
+            buffer_handle_t buffer, int32_t acquireFence) = 0;
+    virtual Error setLayerSurfaceDamage(Display display, Layer layer,
+            const std::vector<hwc_rect_t>& damage) = 0;
+    virtual Error setLayerBlendMode(Display display, Layer layer,
+            int32_t mode) = 0;
+    virtual Error setLayerColor(Display display, Layer layer,
+            IComposerClient::Color color) = 0;
+    virtual Error setLayerCompositionType(Display display, Layer layer,
+            int32_t type) = 0;
+    virtual Error setLayerDataspace(Display display, Layer layer,
+            int32_t dataspace) = 0;
+    virtual Error setLayerDisplayFrame(Display display, Layer layer,
+            const hwc_rect_t& frame) = 0;
+    virtual Error setLayerPlaneAlpha(Display display, Layer layer,
+            float alpha) = 0;
+    virtual Error setLayerSidebandStream(Display display, Layer layer,
+            buffer_handle_t stream) = 0;
+    virtual Error setLayerSourceCrop(Display display, Layer layer,
+            const hwc_frect_t& crop) = 0;
+    virtual Error setLayerTransform(Display display, Layer layer,
+            int32_t transform) = 0;
+    virtual Error setLayerVisibleRegion(Display display, Layer layer,
+            const std::vector<hwc_rect_t>& visible) = 0;
+    virtual Error setLayerZOrder(Display display, Layer layer,
+            uint32_t z) = 0;
+};
+
+}  // namespace implementation
+}  // namespace V2_1
+}  // namespace composer
+}  // namespace graphics
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_COMPOSER_BASE_H
diff --git a/graphics/composer/2.1/default/HwcClient.cpp b/graphics/composer/2.1/default/ComposerClient.cpp
similarity index 70%
rename from graphics/composer/2.1/default/HwcClient.cpp
rename to graphics/composer/2.1/default/ComposerClient.cpp
index 621cb14..72ba8f8 100644
--- a/graphics/composer/2.1/default/HwcClient.cpp
+++ b/graphics/composer/2.1/default/ComposerClient.cpp
@@ -20,8 +20,8 @@
 #include <hardware/gralloc1.h>
 #include <log/log.h>
 
+#include "ComposerClient.h"
 #include "Hwc.h"
-#include "HwcClient.h"
 #include "IComposerCommandBuffer.h"
 
 namespace android {
@@ -99,7 +99,6 @@
 
     // Some existing gralloc drivers do not support retaining more than once,
     // when we are in passthrough mode.
-#ifdef BINDERIZED
     bool openGralloc()
     {
         const hw_module_t* module = nullptr;
@@ -188,12 +187,6 @@
 
     // gralloc0
     const gralloc_module_t* mModule;
-#else
-    bool openGralloc() { return true; }
-    void closeGralloc() {}
-    buffer_handle_t cloneBuffer(buffer_handle_t handle) { return handle; }
-    void releaseBuffer(buffer_handle_t) {}
-#endif
 };
 
 HandleImporter sHandleImporter;
@@ -230,16 +223,15 @@
     }
 }
 
-HwcClient::HwcClient(HwcHal& hal)
-    : mHal(hal), mReader(*this), mWriter(kWriterInitialSize)
+ComposerClient::ComposerClient(ComposerBase& hal)
+    : mHal(hal), mWriter(kWriterInitialSize)
 {
-    if (!sHandleImporter.initialize()) {
-        LOG_ALWAYS_FATAL("failed to initialize handle importer");
-    }
 }
 
-HwcClient::~HwcClient()
+ComposerClient::~ComposerClient()
 {
+    ALOGD("client destroyed");
+
     mHal.enableCallback(false);
     mHal.removeClient();
 
@@ -264,7 +256,15 @@
     sHandleImporter.cleanup();
 }
 
-void HwcClient::onHotplug(Display display,
+void ComposerClient::initialize()
+{
+    mReader = createCommandReader();
+    if (!sHandleImporter.initialize()) {
+        LOG_ALWAYS_FATAL("failed to initialize handle importer");
+    }
+}
+
+void ComposerClient::onHotplug(Display display,
         IComposerCallback::Connection connected)
 {
     {
@@ -277,20 +277,27 @@
         }
     }
 
-    mCallback->onHotplug(display, connected);
+    auto ret = mCallback->onHotplug(display, connected);
+    ALOGE_IF(!ret.isOk(), "failed to send onHotplug: %s",
+            ret.description().c_str());
 }
 
-void HwcClient::onRefresh(Display display)
+void ComposerClient::onRefresh(Display display)
 {
-    mCallback->onRefresh(display);
+    auto ret = mCallback->onRefresh(display);
+    ALOGE_IF(!ret.isOk(), "failed to send onRefresh: %s",
+            ret.description().c_str());
 }
 
-void HwcClient::onVsync(Display display, int64_t timestamp)
+void ComposerClient::onVsync(Display display, int64_t timestamp)
 {
-    mCallback->onVsync(display, timestamp);
+    auto ret = mCallback->onVsync(display, timestamp);
+    ALOGE_IF(!ret.isOk(), "failed to send onVsync: %s",
+            ret.description().c_str());
 }
 
-Return<void> HwcClient::registerCallback(const sp<IComposerCallback>& callback)
+Return<void> ComposerClient::registerCallback(
+        const sp<IComposerCallback>& callback)
 {
     // no locking as we require this function to be called only once
     mCallback = callback;
@@ -299,13 +306,13 @@
     return Void();
 }
 
-Return<uint32_t> HwcClient::getMaxVirtualDisplayCount()
+Return<uint32_t> ComposerClient::getMaxVirtualDisplayCount()
 {
     return mHal.getMaxVirtualDisplayCount();
 }
 
-Return<void> HwcClient::createVirtualDisplay(uint32_t width, uint32_t height,
-        PixelFormat formatHint, uint32_t outputBufferSlotCount,
+Return<void> ComposerClient::createVirtualDisplay(uint32_t width,
+        uint32_t height, PixelFormat formatHint, uint32_t outputBufferSlotCount,
         createVirtualDisplay_cb hidl_cb)
 {
     Display display = 0;
@@ -322,7 +329,7 @@
     return Void();
 }
 
-Return<Error> HwcClient::destroyVirtualDisplay(Display display)
+Return<Error> ComposerClient::destroyVirtualDisplay(Display display)
 {
     Error err = mHal.destroyVirtualDisplay(display);
     if (err == Error::NONE) {
@@ -334,8 +341,8 @@
     return err;
 }
 
-Return<void> HwcClient::createLayer(Display display, uint32_t bufferSlotCount,
-        createLayer_cb hidl_cb)
+Return<void> ComposerClient::createLayer(Display display,
+        uint32_t bufferSlotCount, createLayer_cb hidl_cb)
 {
     Layer layer = 0;
     Error err = mHal.createLayer(display, &layer);
@@ -351,7 +358,7 @@
     return Void();
 }
 
-Return<Error> HwcClient::destroyLayer(Display display, Layer layer)
+Return<Error> ComposerClient::destroyLayer(Display display, Layer layer)
 {
     Error err = mHal.destroyLayer(display, layer);
     if (err == Error::NONE) {
@@ -364,7 +371,7 @@
     return err;
 }
 
-Return<void> HwcClient::getActiveConfig(Display display,
+Return<void> ComposerClient::getActiveConfig(Display display,
         getActiveConfig_cb hidl_cb)
 {
     Config config = 0;
@@ -374,7 +381,7 @@
     return Void();
 }
 
-Return<Error> HwcClient::getClientTargetSupport(Display display,
+Return<Error> ComposerClient::getClientTargetSupport(Display display,
         uint32_t width, uint32_t height,
         PixelFormat format, Dataspace dataspace)
 {
@@ -383,7 +390,8 @@
     return err;
 }
 
-Return<void> HwcClient::getColorModes(Display display, getColorModes_cb hidl_cb)
+Return<void> ComposerClient::getColorModes(Display display,
+          getColorModes_cb hidl_cb)
 {
     hidl_vec<ColorMode> modes;
     Error err = mHal.getColorModes(display, &modes);
@@ -392,7 +400,7 @@
     return Void();
 }
 
-Return<void> HwcClient::getDisplayAttribute(Display display,
+Return<void> ComposerClient::getDisplayAttribute(Display display,
         Config config, Attribute attribute,
         getDisplayAttribute_cb hidl_cb)
 {
@@ -403,7 +411,7 @@
     return Void();
 }
 
-Return<void> HwcClient::getDisplayConfigs(Display display,
+Return<void> ComposerClient::getDisplayConfigs(Display display,
         getDisplayConfigs_cb hidl_cb)
 {
     hidl_vec<Config> configs;
@@ -413,7 +421,7 @@
     return Void();
 }
 
-Return<void> HwcClient::getDisplayName(Display display,
+Return<void> ComposerClient::getDisplayName(Display display,
         getDisplayName_cb hidl_cb)
 {
     hidl_string name;
@@ -423,7 +431,7 @@
     return Void();
 }
 
-Return<void> HwcClient::getDisplayType(Display display,
+Return<void> ComposerClient::getDisplayType(Display display,
         getDisplayType_cb hidl_cb)
 {
     DisplayType type = DisplayType::INVALID;
@@ -433,7 +441,7 @@
     return Void();
 }
 
-Return<void> HwcClient::getDozeSupport(Display display,
+Return<void> ComposerClient::getDozeSupport(Display display,
         getDozeSupport_cb hidl_cb)
 {
     bool support = false;
@@ -443,7 +451,7 @@
     return Void();
 }
 
-Return<void> HwcClient::getHdrCapabilities(Display display,
+Return<void> ComposerClient::getHdrCapabilities(Display display,
         getHdrCapabilities_cb hidl_cb)
 {
     hidl_vec<Hdr> types;
@@ -457,7 +465,7 @@
     return Void();
 }
 
-Return<Error> HwcClient::setClientTargetSlotCount(Display display,
+Return<Error> ComposerClient::setClientTargetSlotCount(Display display,
         uint32_t clientTargetSlotCount)
 {
     std::lock_guard<std::mutex> lock(mDisplayDataMutex);
@@ -472,39 +480,39 @@
     return Error::NONE;
 }
 
-Return<Error> HwcClient::setActiveConfig(Display display, Config config)
+Return<Error> ComposerClient::setActiveConfig(Display display, Config config)
 {
     Error err = mHal.setActiveConfig(display, config);
     return err;
 }
 
-Return<Error> HwcClient::setColorMode(Display display, ColorMode mode)
+Return<Error> ComposerClient::setColorMode(Display display, ColorMode mode)
 {
     Error err = mHal.setColorMode(display, mode);
     return err;
 }
 
-Return<Error> HwcClient::setPowerMode(Display display, PowerMode mode)
+Return<Error> ComposerClient::setPowerMode(Display display, PowerMode mode)
 {
     Error err = mHal.setPowerMode(display, mode);
     return err;
 }
 
-Return<Error> HwcClient::setVsyncEnabled(Display display, Vsync enabled)
+Return<Error> ComposerClient::setVsyncEnabled(Display display, Vsync enabled)
 {
     Error err = mHal.setVsyncEnabled(display, enabled);
     return err;
 }
 
-Return<Error> HwcClient::setInputCommandQueue(
+Return<Error> ComposerClient::setInputCommandQueue(
         const MQDescriptorSync<uint32_t>& descriptor)
 {
     std::lock_guard<std::mutex> lock(mCommandMutex);
-    return mReader.setMQDescriptor(descriptor) ?
+    return mReader->setMQDescriptor(descriptor) ?
         Error::NONE : Error::NO_RESOURCES;
 }
 
-Return<void> HwcClient::getOutputCommandQueue(
+Return<void> ComposerClient::getOutputCommandQueue(
         getOutputCommandQueue_cb hidl_cb)
 {
     // no locking as we require this function to be called inside
@@ -520,7 +528,7 @@
     return Void();
 }
 
-Return<void> HwcClient::executeCommands(uint32_t inLength,
+Return<void> ComposerClient::executeCommands(uint32_t inLength,
         const hidl_vec<hidl_handle>& inHandles,
         executeCommands_cb hidl_cb)
 {
@@ -530,12 +538,12 @@
     uint32_t outLength = 0;
     hidl_vec<hidl_handle> outHandles;
 
-    if (!mReader.readQueue(inLength, inHandles)) {
+    if (!mReader->readQueue(inLength, inHandles)) {
         hidl_cb(Error::BAD_PARAMETER, outChanged, outLength, outHandles);
         return Void();
     }
 
-    Error err = mReader.parse();
+    Error err = mReader->parse();
     if (err == Error::NONE &&
             !mWriter.writeQueue(&outChanged, &outLength, &outHandles)) {
         err = Error::NO_RESOURCES;
@@ -543,18 +551,29 @@
 
     hidl_cb(err, outChanged, outLength, outHandles);
 
-    mReader.reset();
+    mReader->reset();
     mWriter.reset();
 
     return Void();
 }
 
-HwcClient::CommandReader::CommandReader(HwcClient& client)
+std::unique_ptr<ComposerClient::CommandReader>
+ComposerClient::createCommandReader()
+{
+    return std::unique_ptr<ComposerClient::CommandReader>(
+        new CommandReader(*this));
+}
+
+ComposerClient::CommandReader::CommandReader(ComposerClient& client)
     : mClient(client), mHal(client.mHal), mWriter(client.mWriter)
 {
 }
 
-Error HwcClient::CommandReader::parse()
+ComposerClient::CommandReader::~CommandReader()
+{
+}
+
+Error ComposerClient::CommandReader::parse()
 {
     IComposerClient::Command command;
     uint16_t length = 0;
@@ -564,79 +583,7 @@
             break;
         }
 
-        bool parsed = false;
-        switch (command) {
-        case IComposerClient::Command::SELECT_DISPLAY:
-            parsed = parseSelectDisplay(length);
-            break;
-        case IComposerClient::Command::SELECT_LAYER:
-            parsed = parseSelectLayer(length);
-            break;
-        case IComposerClient::Command::SET_COLOR_TRANSFORM:
-            parsed = parseSetColorTransform(length);
-            break;
-        case IComposerClient::Command::SET_CLIENT_TARGET:
-            parsed = parseSetClientTarget(length);
-            break;
-        case IComposerClient::Command::SET_OUTPUT_BUFFER:
-            parsed = parseSetOutputBuffer(length);
-            break;
-        case IComposerClient::Command::VALIDATE_DISPLAY:
-            parsed = parseValidateDisplay(length);
-            break;
-        case IComposerClient::Command::ACCEPT_DISPLAY_CHANGES:
-            parsed = parseAcceptDisplayChanges(length);
-            break;
-        case IComposerClient::Command::PRESENT_DISPLAY:
-            parsed = parsePresentDisplay(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_CURSOR_POSITION:
-            parsed = parseSetLayerCursorPosition(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_BUFFER:
-            parsed = parseSetLayerBuffer(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_SURFACE_DAMAGE:
-            parsed = parseSetLayerSurfaceDamage(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_BLEND_MODE:
-            parsed = parseSetLayerBlendMode(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_COLOR:
-            parsed = parseSetLayerColor(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_COMPOSITION_TYPE:
-            parsed = parseSetLayerCompositionType(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_DATASPACE:
-            parsed = parseSetLayerDataspace(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_DISPLAY_FRAME:
-            parsed = parseSetLayerDisplayFrame(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_PLANE_ALPHA:
-            parsed = parseSetLayerPlaneAlpha(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_SIDEBAND_STREAM:
-            parsed = parseSetLayerSidebandStream(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_SOURCE_CROP:
-            parsed = parseSetLayerSourceCrop(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_TRANSFORM:
-            parsed = parseSetLayerTransform(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_VISIBLE_REGION:
-            parsed = parseSetLayerVisibleRegion(length);
-            break;
-        case IComposerClient::Command::SET_LAYER_Z_ORDER:
-            parsed = parseSetLayerZOrder(length);
-            break;
-        default:
-            parsed = false;
-            break;
-        }
-
+        bool parsed = parseCommand(command, length);
         endCommand();
 
         if (!parsed) {
@@ -649,9 +596,61 @@
     return (isEmpty()) ? Error::NONE : Error::BAD_PARAMETER;
 }
 
-bool HwcClient::CommandReader::parseSelectDisplay(uint16_t length)
+bool ComposerClient::CommandReader::parseCommand(
+        IComposerClient::Command command, uint16_t length) {
+    switch (command) {
+    case IComposerClient::Command::SELECT_DISPLAY:
+        return parseSelectDisplay(length);
+    case IComposerClient::Command::SELECT_LAYER:
+        return parseSelectLayer(length);
+    case IComposerClient::Command::SET_COLOR_TRANSFORM:
+        return parseSetColorTransform(length);
+    case IComposerClient::Command::SET_CLIENT_TARGET:
+        return parseSetClientTarget(length);
+    case IComposerClient::Command::SET_OUTPUT_BUFFER:
+        return parseSetOutputBuffer(length);
+    case IComposerClient::Command::VALIDATE_DISPLAY:
+        return parseValidateDisplay(length);
+    case IComposerClient::Command::ACCEPT_DISPLAY_CHANGES:
+        return parseAcceptDisplayChanges(length);
+    case IComposerClient::Command::PRESENT_DISPLAY:
+        return parsePresentDisplay(length);
+    case IComposerClient::Command::SET_LAYER_CURSOR_POSITION:
+        return parseSetLayerCursorPosition(length);
+    case IComposerClient::Command::SET_LAYER_BUFFER:
+        return parseSetLayerBuffer(length);
+    case IComposerClient::Command::SET_LAYER_SURFACE_DAMAGE:
+        return parseSetLayerSurfaceDamage(length);
+    case IComposerClient::Command::SET_LAYER_BLEND_MODE:
+        return parseSetLayerBlendMode(length);
+    case IComposerClient::Command::SET_LAYER_COLOR:
+        return parseSetLayerColor(length);
+    case IComposerClient::Command::SET_LAYER_COMPOSITION_TYPE:
+        return parseSetLayerCompositionType(length);
+    case IComposerClient::Command::SET_LAYER_DATASPACE:
+        return parseSetLayerDataspace(length);
+    case IComposerClient::Command::SET_LAYER_DISPLAY_FRAME:
+        return parseSetLayerDisplayFrame(length);
+    case IComposerClient::Command::SET_LAYER_PLANE_ALPHA:
+        return parseSetLayerPlaneAlpha(length);
+    case IComposerClient::Command::SET_LAYER_SIDEBAND_STREAM:
+        return parseSetLayerSidebandStream(length);
+    case IComposerClient::Command::SET_LAYER_SOURCE_CROP:
+        return parseSetLayerSourceCrop(length);
+    case IComposerClient::Command::SET_LAYER_TRANSFORM:
+        return parseSetLayerTransform(length);
+    case IComposerClient::Command::SET_LAYER_VISIBLE_REGION:
+        return parseSetLayerVisibleRegion(length);
+    case IComposerClient::Command::SET_LAYER_Z_ORDER:
+        return parseSetLayerZOrder(length);
+    default:
+        return false;
+    }
+}
+
+bool ComposerClient::CommandReader::parseSelectDisplay(uint16_t length)
 {
-    if (length != CommandWriter::kSelectDisplayLength) {
+    if (length != CommandWriterBase::kSelectDisplayLength) {
         return false;
     }
 
@@ -661,9 +660,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSelectLayer(uint16_t length)
+bool ComposerClient::CommandReader::parseSelectLayer(uint16_t length)
 {
-    if (length != CommandWriter::kSelectLayerLength) {
+    if (length != CommandWriterBase::kSelectLayerLength) {
         return false;
     }
 
@@ -672,9 +671,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetColorTransform(uint16_t length)
+bool ComposerClient::CommandReader::parseSetColorTransform(uint16_t length)
 {
-    if (length != CommandWriter::kSetColorTransformLength) {
+    if (length != CommandWriterBase::kSetColorTransformLength) {
         return false;
     }
 
@@ -692,7 +691,7 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetClientTarget(uint16_t length)
+bool ComposerClient::CommandReader::parseSetClientTarget(uint16_t length)
 {
     // 4 parameters followed by N rectangles
     if ((length - 4) % 4 != 0) {
@@ -720,9 +719,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetOutputBuffer(uint16_t length)
+bool ComposerClient::CommandReader::parseSetOutputBuffer(uint16_t length)
 {
-    if (length != CommandWriter::kSetOutputBufferLength) {
+    if (length != CommandWriterBase::kSetOutputBufferLength) {
         return false;
     }
 
@@ -744,9 +743,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseValidateDisplay(uint16_t length)
+bool ComposerClient::CommandReader::parseValidateDisplay(uint16_t length)
 {
-    if (length != CommandWriter::kValidateDisplayLength) {
+    if (length != CommandWriterBase::kValidateDisplayLength) {
         return false;
     }
 
@@ -771,9 +770,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseAcceptDisplayChanges(uint16_t length)
+bool ComposerClient::CommandReader::parseAcceptDisplayChanges(uint16_t length)
 {
-    if (length != CommandWriter::kAcceptDisplayChangesLength) {
+    if (length != CommandWriterBase::kAcceptDisplayChangesLength) {
         return false;
     }
 
@@ -785,9 +784,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parsePresentDisplay(uint16_t length)
+bool ComposerClient::CommandReader::parsePresentDisplay(uint16_t length)
 {
-    if (length != CommandWriter::kPresentDisplayLength) {
+    if (length != CommandWriterBase::kPresentDisplayLength) {
         return false;
     }
 
@@ -805,9 +804,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerCursorPosition(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerCursorPosition(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerCursorPositionLength) {
+    if (length != CommandWriterBase::kSetLayerCursorPositionLength) {
         return false;
     }
 
@@ -820,9 +819,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerBuffer(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerBuffer(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerBufferLength) {
+    if (length != CommandWriterBase::kSetLayerBufferLength) {
         return false;
     }
 
@@ -844,7 +843,7 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerSurfaceDamage(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerSurfaceDamage(uint16_t length)
 {
     // N rectangles
     if (length % 4 != 0) {
@@ -860,9 +859,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerBlendMode(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerBlendMode(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerBlendModeLength) {
+    if (length != CommandWriterBase::kSetLayerBlendModeLength) {
         return false;
     }
 
@@ -874,9 +873,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerColor(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerColor(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerColorLength) {
+    if (length != CommandWriterBase::kSetLayerColorLength) {
         return false;
     }
 
@@ -888,9 +887,10 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerCompositionType(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerCompositionType(
+        uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerCompositionTypeLength) {
+    if (length != CommandWriterBase::kSetLayerCompositionTypeLength) {
         return false;
     }
 
@@ -902,9 +902,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerDataspace(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerDataspace(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerDataspaceLength) {
+    if (length != CommandWriterBase::kSetLayerDataspaceLength) {
         return false;
     }
 
@@ -916,9 +916,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerDisplayFrame(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerDisplayFrame(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerDisplayFrameLength) {
+    if (length != CommandWriterBase::kSetLayerDisplayFrameLength) {
         return false;
     }
 
@@ -930,9 +930,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerPlaneAlpha(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerPlaneAlpha(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerPlaneAlphaLength) {
+    if (length != CommandWriterBase::kSetLayerPlaneAlphaLength) {
         return false;
     }
 
@@ -944,9 +944,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerSidebandStream(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerSidebandStream(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerSidebandStreamLength) {
+    if (length != CommandWriterBase::kSetLayerSidebandStreamLength) {
         return false;
     }
 
@@ -963,9 +963,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerSourceCrop(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerSourceCrop(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerSourceCropLength) {
+    if (length != CommandWriterBase::kSetLayerSourceCropLength) {
         return false;
     }
 
@@ -977,9 +977,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerTransform(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerTransform(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerTransformLength) {
+    if (length != CommandWriterBase::kSetLayerTransformLength) {
         return false;
     }
 
@@ -991,7 +991,7 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerVisibleRegion(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerVisibleRegion(uint16_t length)
 {
     // N rectangles
     if (length % 4 != 0) {
@@ -1007,9 +1007,9 @@
     return true;
 }
 
-bool HwcClient::CommandReader::parseSetLayerZOrder(uint16_t length)
+bool ComposerClient::CommandReader::parseSetLayerZOrder(uint16_t length)
 {
-    if (length != CommandWriter::kSetLayerZOrderLength) {
+    if (length != CommandWriterBase::kSetLayerZOrderLength) {
         return false;
     }
 
@@ -1021,7 +1021,7 @@
     return true;
 }
 
-hwc_rect_t HwcClient::CommandReader::readRect()
+hwc_rect_t ComposerClient::CommandReader::readRect()
 {
     return hwc_rect_t{
         readSigned(),
@@ -1031,7 +1031,7 @@
     };
 }
 
-std::vector<hwc_rect_t> HwcClient::CommandReader::readRegion(size_t count)
+std::vector<hwc_rect_t> ComposerClient::CommandReader::readRegion(size_t count)
 {
     std::vector<hwc_rect_t> region;
     region.reserve(count);
@@ -1043,7 +1043,7 @@
     return region;
 }
 
-hwc_frect_t HwcClient::CommandReader::readFRect()
+hwc_frect_t ComposerClient::CommandReader::readFRect()
 {
     return hwc_frect_t{
         readFloat(),
@@ -1053,8 +1053,8 @@
     };
 }
 
-Error HwcClient::CommandReader::lookupBuffer(BufferCache cache, uint32_t slot,
-        bool useCache, buffer_handle_t& handle)
+Error ComposerClient::CommandReader::lookupBuffer(BufferCache cache,
+        uint32_t slot, bool useCache, buffer_handle_t& handle)
 {
     std::lock_guard<std::mutex> lock(mClient.mDisplayDataMutex);
 
diff --git a/graphics/composer/2.1/default/HwcClient.h b/graphics/composer/2.1/default/ComposerClient.h
similarity index 88%
rename from graphics/composer/2.1/default/HwcClient.h
rename to graphics/composer/2.1/default/ComposerClient.h
index c719774..d351cfb 100644
--- a/graphics/composer/2.1/default/HwcClient.h
+++ b/graphics/composer/2.1/default/ComposerClient.h
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#ifndef ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_HWC_CLIENT_H
-#define ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_HWC_CLIENT_H
+#ifndef ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_COMPOSER_CLIENT_H
+#define ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_COMPOSER_CLIENT_H
 
 #include <mutex>
 #include <unordered_map>
@@ -50,10 +50,12 @@
     buffer_handle_t mHandle;
 };
 
-class HwcClient : public IComposerClient {
+class ComposerClient : public IComposerClient {
 public:
-    HwcClient(HwcHal& hal);
-    virtual ~HwcClient();
+    ComposerClient(ComposerBase& hal);
+    virtual ~ComposerClient();
+
+    void initialize();
 
     void onHotplug(Display display, IComposerCallback::Connection connected);
     void onRefresh(Display display);
@@ -104,7 +106,7 @@
             const hidl_vec<hidl_handle>& inHandles,
             executeCommands_cb hidl_cb) override;
 
-private:
+protected:
     struct LayerBuffers {
         std::vector<BufferClone> Buffers;
         BufferClone SidebandStream;
@@ -123,10 +125,15 @@
 
     class CommandReader : public CommandReaderBase {
     public:
-        CommandReader(HwcClient& client);
+        CommandReader(ComposerClient& client);
+        virtual ~CommandReader();
+
         Error parse();
 
-    private:
+    protected:
+        virtual bool parseCommand(IComposerClient::Command command,
+                uint16_t length);
+
         bool parseSelectDisplay(uint16_t length);
         bool parseSelectLayer(uint16_t length);
         bool parseSetColorTransform(uint16_t length);
@@ -169,22 +176,24 @@
                     0, false, handle);
         }
 
-        HwcClient& mClient;
-        HwcHal& mHal;
-        CommandWriter& mWriter;
+        ComposerClient& mClient;
+        ComposerBase& mHal;
+        CommandWriterBase& mWriter;
 
         Display mDisplay;
         Layer mLayer;
     };
 
-    HwcHal& mHal;
+    virtual std::unique_ptr<CommandReader> createCommandReader();
+
+    ComposerBase& mHal;
 
     // 64KiB minus a small space for metadata such as read/write pointers
     static constexpr size_t kWriterInitialSize =
         64 * 1024 / sizeof(uint32_t) - 16;
     std::mutex mCommandMutex;
-    CommandReader mReader;
-    CommandWriter mWriter;
+    std::unique_ptr<CommandReader> mReader;
+    CommandWriterBase mWriter;
 
     sp<IComposerCallback> mCallback;
 
@@ -199,4 +208,4 @@
 } // namespace hardware
 } // namespace android
 
-#endif  // ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_HWC_CLIENT_H
+#endif  // ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_COMPOSER_CLIENT_H
diff --git a/graphics/composer/2.1/default/Hwc.cpp b/graphics/composer/2.1/default/Hwc.cpp
index 4efb12b..cf82967 100644
--- a/graphics/composer/2.1/default/Hwc.cpp
+++ b/graphics/composer/2.1/default/Hwc.cpp
@@ -20,8 +20,8 @@
 
 #include <log/log.h>
 
+#include "ComposerClient.h"
 #include "Hwc.h"
-#include "HwcClient.h"
 
 namespace android {
 namespace hardware {
@@ -184,14 +184,15 @@
 Return<void> HwcHal::createClient(createClient_cb hidl_cb)
 {
     Error err = Error::NONE;
-    sp<HwcClient> client;
+    sp<ComposerClient> client;
 
     {
         std::lock_guard<std::mutex> lock(mClientMutex);
 
         // only one client is allowed
         if (mClient == nullptr) {
-            client = new HwcClient(*this);
+            client = new ComposerClient(*this);
+            client->initialize();
             mClient = client;
         } else {
             err = Error::NO_RESOURCES;
@@ -203,7 +204,7 @@
     return Void();
 }
 
-sp<HwcClient> HwcHal::getClient()
+sp<ComposerClient> HwcHal::getClient()
 {
     std::lock_guard<std::mutex> lock(mClientMutex);
     return (mClient != nullptr) ? mClient.promote() : nullptr;
diff --git a/graphics/composer/2.1/default/Hwc.h b/graphics/composer/2.1/default/Hwc.h
index 6420b31..ca08cf0 100644
--- a/graphics/composer/2.1/default/Hwc.h
+++ b/graphics/composer/2.1/default/Hwc.h
@@ -24,6 +24,8 @@
 #include <android/hardware/graphics/composer/2.1/IComposer.h>
 #include <hardware/hwcomposer2.h>
 
+#include "ComposerBase.h"
+
 namespace android {
 namespace hardware {
 namespace graphics {
@@ -38,96 +40,101 @@
 using android::hardware::graphics::common::V1_0::ColorTransform;
 using android::hardware::graphics::common::V1_0::Hdr;
 
-class HwcClient;
+class ComposerClient;
 
-class HwcHal : public IComposer {
+class HwcHal : public IComposer, public ComposerBase {
 public:
     HwcHal(const hw_module_t* module);
     virtual ~HwcHal();
 
+    bool hasCapability(Capability capability) const;
+
     // IComposer interface
     Return<void> getCapabilities(getCapabilities_cb hidl_cb) override;
     Return<void> dumpDebugInfo(dumpDebugInfo_cb hidl_cb) override;
     Return<void> createClient(createClient_cb hidl_cb) override;
 
-    bool hasCapability(Capability capability) const;
-
-    void removeClient();
-
-    void enableCallback(bool enable);
-
-    uint32_t getMaxVirtualDisplayCount();
+    // ComposerBase interface
+    void removeClient() override;
+    void enableCallback(bool enable) override;
+    uint32_t getMaxVirtualDisplayCount() override;
     Error createVirtualDisplay(uint32_t width, uint32_t height,
-        PixelFormat* format, Display* outDisplay);
-    Error destroyVirtualDisplay(Display display);
+        PixelFormat* format, Display* outDisplay) override;
+    Error destroyVirtualDisplay(Display display) override;
 
-    Error createLayer(Display display, Layer* outLayer);
-    Error destroyLayer(Display display, Layer layer);
+    Error createLayer(Display display, Layer* outLayer) override;
+    Error destroyLayer(Display display, Layer layer) override;
 
-    Error getActiveConfig(Display display, Config* outConfig);
+    Error getActiveConfig(Display display, Config* outConfig) override;
     Error getClientTargetSupport(Display display,
             uint32_t width, uint32_t height,
-            PixelFormat format, Dataspace dataspace);
-    Error getColorModes(Display display, hidl_vec<ColorMode>* outModes);
+            PixelFormat format, Dataspace dataspace) override;
+    Error getColorModes(Display display,
+            hidl_vec<ColorMode>* outModes) override;
     Error getDisplayAttribute(Display display, Config config,
-            IComposerClient::Attribute attribute, int32_t* outValue);
-    Error getDisplayConfigs(Display display, hidl_vec<Config>* outConfigs);
-    Error getDisplayName(Display display, hidl_string* outName);
+            IComposerClient::Attribute attribute, int32_t* outValue) override;
+    Error getDisplayConfigs(Display display,
+            hidl_vec<Config>* outConfigs) override;
+    Error getDisplayName(Display display, hidl_string* outName) override;
     Error getDisplayType(Display display,
-            IComposerClient::DisplayType* outType);
-    Error getDozeSupport(Display display, bool* outSupport);
+            IComposerClient::DisplayType* outType) override;
+    Error getDozeSupport(Display display, bool* outSupport) override;
     Error getHdrCapabilities(Display display, hidl_vec<Hdr>* outTypes,
             float* outMaxLuminance, float* outMaxAverageLuminance,
-            float* outMinLuminance);
+            float* outMinLuminance) override;
 
-    Error setActiveConfig(Display display, Config config);
-    Error setColorMode(Display display, ColorMode mode);
-    Error setPowerMode(Display display, IComposerClient::PowerMode mode);
-    Error setVsyncEnabled(Display display, IComposerClient::Vsync enabled);
+    Error setActiveConfig(Display display, Config config) override;
+    Error setColorMode(Display display, ColorMode mode) override;
+    Error setPowerMode(Display display,
+            IComposerClient::PowerMode mode) override;
+    Error setVsyncEnabled(Display display,
+            IComposerClient::Vsync enabled) override;
 
     Error setColorTransform(Display display, const float* matrix,
-            int32_t hint);
+            int32_t hint) override;
     Error setClientTarget(Display display, buffer_handle_t target,
             int32_t acquireFence, int32_t dataspace,
-            const std::vector<hwc_rect_t>& damage);
+            const std::vector<hwc_rect_t>& damage) override;
     Error setOutputBuffer(Display display, buffer_handle_t buffer,
-            int32_t releaseFence);
+            int32_t releaseFence) override;
     Error validateDisplay(Display display,
             std::vector<Layer>* outChangedLayers,
             std::vector<IComposerClient::Composition>* outCompositionTypes,
             uint32_t* outDisplayRequestMask,
             std::vector<Layer>* outRequestedLayers,
-            std::vector<uint32_t>* outRequestMasks);
-    Error acceptDisplayChanges(Display display);
+            std::vector<uint32_t>* outRequestMasks) override;
+    Error acceptDisplayChanges(Display display) override;
     Error presentDisplay(Display display, int32_t* outPresentFence,
             std::vector<Layer>* outLayers,
-            std::vector<int32_t>* outReleaseFences);
+            std::vector<int32_t>* outReleaseFences) override;
 
     Error setLayerCursorPosition(Display display, Layer layer,
-            int32_t x, int32_t y);
+            int32_t x, int32_t y) override;
     Error setLayerBuffer(Display display, Layer layer,
-            buffer_handle_t buffer, int32_t acquireFence);
+            buffer_handle_t buffer, int32_t acquireFence) override;
     Error setLayerSurfaceDamage(Display display, Layer layer,
-            const std::vector<hwc_rect_t>& damage);
-    Error setLayerBlendMode(Display display, Layer layer, int32_t mode);
+            const std::vector<hwc_rect_t>& damage) override;
+    Error setLayerBlendMode(Display display, Layer layer,
+            int32_t mode) override;
     Error setLayerColor(Display display, Layer layer,
-            IComposerClient::Color color);
+            IComposerClient::Color color) override;
     Error setLayerCompositionType(Display display, Layer layer,
-            int32_t type);
+            int32_t type) override;
     Error setLayerDataspace(Display display, Layer layer,
-            int32_t dataspace);
+            int32_t dataspace) override;
     Error setLayerDisplayFrame(Display display, Layer layer,
-            const hwc_rect_t& frame);
-    Error setLayerPlaneAlpha(Display display, Layer layer, float alpha);
+            const hwc_rect_t& frame) override;
+    Error setLayerPlaneAlpha(Display display, Layer layer,
+            float alpha) override;
     Error setLayerSidebandStream(Display display, Layer layer,
-            buffer_handle_t stream);
+            buffer_handle_t stream) override;
     Error setLayerSourceCrop(Display display, Layer layer,
-            const hwc_frect_t& crop);
+            const hwc_frect_t& crop) override;
     Error setLayerTransform(Display display, Layer layer,
-            int32_t transform);
+            int32_t transform) override;
     Error setLayerVisibleRegion(Display display, Layer layer,
-            const std::vector<hwc_rect_t>& visible);
-    Error setLayerZOrder(Display display, Layer layer, uint32_t z);
+            const std::vector<hwc_rect_t>& visible) override;
+    Error setLayerZOrder(Display display, Layer layer, uint32_t z) override;
 
 private:
     void initCapabilities();
@@ -136,7 +143,7 @@
     void initDispatch(hwc2_function_descriptor_t desc, T* outPfn);
     void initDispatch();
 
-    sp<HwcClient> getClient();
+    sp<ComposerClient> getClient();
 
     static void hotplugHook(hwc2_callback_data_t callbackData,
         hwc2_display_t display, int32_t connected);
@@ -196,7 +203,7 @@
     } mDispatch;
 
     std::mutex mClientMutex;
-    wp<HwcClient> mClient;
+    wp<ComposerClient> mClient;
 };
 
 extern "C" IComposer* HIDL_FETCH_IComposer(const char* name);
diff --git a/graphics/composer/2.1/default/IComposerCommandBuffer.h b/graphics/composer/2.1/default/IComposerCommandBuffer.h
index 65e7799..fb78ef8 100644
--- a/graphics/composer/2.1/default/IComposerCommandBuffer.h
+++ b/graphics/composer/2.1/default/IComposerCommandBuffer.h
@@ -52,16 +52,16 @@
 
 // This class helps build a command queue.  Note that all sizes/lengths are in
 // units of uint32_t's.
-class CommandWriter {
+class CommandWriterBase {
 public:
-    CommandWriter(uint32_t initialMaxSize)
+    CommandWriterBase(uint32_t initialMaxSize)
         : mDataMaxSize(initialMaxSize)
     {
         mData = std::make_unique<uint32_t[]>(mDataMaxSize);
         reset();
     }
 
-    ~CommandWriter()
+    virtual ~CommandWriterBase()
     {
         reset();
     }
diff --git a/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc b/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc
index fc21d59..4f01bd9 100644
--- a/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc
+++ b/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc
@@ -1,5 +1,6 @@
-service hwcomposer-2-1 /system/bin/hw/android.hardware.graphics.composer@2.1-service
+service hwcomposer-2-1 /vendor/bin/hw/android.hardware.graphics.composer@2.1-service
     class hal
     user system
     group graphics drmrpc readproc
+    capabilities SYS_NICE
     onrestart restart surfaceflinger
diff --git a/graphics/composer/2.1/default/service.cpp b/graphics/composer/2.1/default/service.cpp
index c2a2b19..656673e 100644
--- a/graphics/composer/2.1/default/service.cpp
+++ b/graphics/composer/2.1/default/service.cpp
@@ -14,41 +14,30 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "HWComposerService"
+#define LOG_TAG "android.hardware.graphics.composer@2.1-service"
+
+#include <sched.h>
+
+#include <android/hardware/graphics/composer/2.1/IComposer.h>
 
 #include <binder/ProcessState.h>
-#include <hidl/HidlTransportSupport.h>
-#include <utils/StrongPointer.h>
-#include "Hwc.h"
+#include <hidl/LegacySupport.h>
 
-using android::hardware::configureRpcThreadpool;
-using android::hardware::joinRpcThreadpool;
-using android::sp;
 using android::hardware::graphics::composer::V2_1::IComposer;
-using android::hardware::graphics::composer::V2_1::implementation::HIDL_FETCH_IComposer;
+using android::hardware::defaultPassthroughServiceImplementation;
 
-int main()
-{
-    const char instance[] = "hwcomposer";
-
-    ALOGI("Service is starting.");
-
-    configureRpcThreadpool(1, true /* callerWillJoin */);
-    sp<IComposer> service = HIDL_FETCH_IComposer(instance);
-    if (service == nullptr) {
-        ALOGI("getService returned NULL");
-        return -1;
-    }
-
-    LOG_FATAL_IF(service->isRemote(), "Service is REMOTE!");
-
-    service->registerAsService(instance);
-
+int main() {
     // the conventional HAL might start binder services
     android::ProcessState::self()->setThreadPoolMaxThreadCount(4);
     android::ProcessState::self()->startThreadPool();
 
-    joinRpcThreadpool();
+    // same as SF main thread
+    struct sched_param param = {0};
+    param.sched_priority = 2;
+    if (sched_setscheduler(0, SCHED_FIFO | SCHED_RESET_ON_FORK,
+                &param) != 0) {
+        ALOGE("Couldn't set SCHED_FIFO: %d", errno);
+    }
 
-    return 0;
+    return defaultPassthroughServiceImplementation<IComposer>("hwcomposer");
 }
diff --git a/graphics/composer/2.1/vts/functional/Android.bp b/graphics/composer/2.1/vts/functional/Android.bp
new file mode 100644
index 0000000..cc9ae3a
--- /dev/null
+++ b/graphics/composer/2.1/vts/functional/Android.bp
@@ -0,0 +1,41 @@
+//
+// 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: "VtsHalGraphicsComposerV2_1TargetTest",
+    gtest: true,
+    srcs: ["VtsHalGraphicsComposerV2_1TargetTest.cpp"],
+    shared_libs: [
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.composer@2.1",
+        "android.hardware.graphics.mapper@2.0",
+        "libbase",
+        "libcutils",
+        "libfmq",
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libnativehelper",
+        "libsync",
+        "libutils",
+    ],
+    static_libs: ["libgtest", "libhwcomposer-command-buffer"],
+    cflags: [
+        "-O0",
+        "-g",
+    ]
+}
diff --git a/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp
new file mode 100644
index 0000000..e3e35bb
--- /dev/null
+++ b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp
@@ -0,0 +1,1131 @@
+/*
+ * 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 "graphics_composer_hidl_hal_test"
+
+#include <IComposerCommandBuffer.h>
+#include <android-base/logging.h>
+#include <android/hardware/graphics/allocator/2.0/IAllocator.h>
+#include <android/hardware/graphics/composer/2.1/IComposer.h>
+#include <android/hardware/graphics/mapper/2.0/IMapper.h>
+
+#include <gtest/gtest.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <array>
+#include <memory>
+#include <mutex>
+#include <unordered_set>
+#include <vector>
+
+namespace android {
+namespace hardware {
+namespace graphics {
+namespace composer {
+namespace V2_1 {
+namespace tests {
+namespace {
+
+using android::hardware::graphics::allocator::V2_0::Buffer;
+using android::hardware::graphics::allocator::V2_0::BufferDescriptor;
+using android::hardware::graphics::allocator::V2_0::ConsumerUsage;
+using android::hardware::graphics::allocator::V2_0::IAllocator;
+using android::hardware::graphics::allocator::V2_0::IAllocatorClient;
+using android::hardware::graphics::allocator::V2_0::ProducerUsage;
+using android::hardware::graphics::common::V1_0::ColorMode;
+using android::hardware::graphics::common::V1_0::ColorTransform;
+using android::hardware::graphics::common::V1_0::Dataspace;
+using android::hardware::graphics::common::V1_0::PixelFormat;
+using android::hardware::graphics::common::V1_0::Transform;
+using android::hardware::graphics::mapper::V2_0::IMapper;
+using GrallocError = android::hardware::graphics::allocator::V2_0::Error;
+
+// IComposerCallback to be installed with IComposerClient::registerCallback.
+class GraphicsComposerCallback : public IComposerCallback {
+ public:
+  void setVsyncAllowed(bool allowed) {
+    std::lock_guard<std::mutex> lock(mMutex);
+    mVsyncAllowed = allowed;
+  }
+
+  std::vector<Display> getDisplays() const {
+    std::lock_guard<std::mutex> lock(mMutex);
+    return std::vector<Display>(mDisplays.begin(), mDisplays.end());
+  }
+
+  int getInvalidHotplugCount() const {
+    std::lock_guard<std::mutex> lock(mMutex);
+    return mInvalidHotplugCount;
+  }
+
+  int getInvalidRefreshCount() const {
+    std::lock_guard<std::mutex> lock(mMutex);
+    return mInvalidRefreshCount;
+  }
+
+  int getInvalidVsyncCount() const {
+    std::lock_guard<std::mutex> lock(mMutex);
+    return mInvalidVsyncCount;
+  }
+
+ private:
+  Return<void> onHotplug(Display display, Connection connection) override {
+    std::lock_guard<std::mutex> lock(mMutex);
+
+    if (connection == Connection::CONNECTED) {
+      if (!mDisplays.insert(display).second) {
+        mInvalidHotplugCount++;
+      }
+    } else if (connection == Connection::DISCONNECTED) {
+      if (!mDisplays.erase(display)) {
+        mInvalidHotplugCount++;
+      }
+    }
+
+    return Void();
+  }
+
+  Return<void> onRefresh(Display display) override {
+    std::lock_guard<std::mutex> lock(mMutex);
+
+    if (mDisplays.count(display) == 0) {
+      mInvalidRefreshCount++;
+    }
+
+    return Void();
+  }
+
+  Return<void> onVsync(Display display, int64_t) override {
+    std::lock_guard<std::mutex> lock(mMutex);
+
+    if (!mVsyncAllowed || mDisplays.count(display) == 0) {
+      mInvalidVsyncCount++;
+    }
+
+    return Void();
+  }
+
+  mutable std::mutex mMutex;
+  // the set of all currently connected displays
+  std::unordered_set<Display> mDisplays;
+  // true only when vsync is enabled
+  bool mVsyncAllowed = false;
+
+  // track invalid callbacks
+  int mInvalidHotplugCount = 0;
+  int mInvalidRefreshCount = 0;
+  int mInvalidVsyncCount = 0;
+};
+
+class GraphicsComposerHidlTest : public ::testing::Test {
+ protected:
+  void SetUp() override {
+    mComposer = IComposer::getService("hwcomposer");
+    ASSERT_NE(nullptr, mComposer.get());
+
+    mComposerClient = createClient();
+    ASSERT_NE(nullptr, mComposerClient.get());
+
+    initCapabilities();
+
+    mComposerCallback = new GraphicsComposerCallback;
+    mComposerClient->registerCallback(mComposerCallback);
+
+    // assume the first display is primary and is never removed
+    mPrimaryDisplay = waitForFirstDisplay();
+  }
+
+  void TearDown() override {
+    if (mComposerCallback != nullptr) {
+      EXPECT_EQ(0, mComposerCallback->getInvalidHotplugCount());
+      EXPECT_EQ(0, mComposerCallback->getInvalidRefreshCount());
+      EXPECT_EQ(0, mComposerCallback->getInvalidVsyncCount());
+    }
+  }
+
+  /**
+   * Initialize the set of supported capabilities.
+   */
+  void initCapabilities() {
+    mComposer->getCapabilities([this](const auto& capabilities) {
+      std::vector<IComposer::Capability> caps = capabilities;
+      mCapabilities.insert(caps.cbegin(), caps.cend());
+    });
+  }
+
+  /**
+   * Test whether a capability is supported.
+   */
+  bool hasCapability(IComposer::Capability capability) const {
+    return (mCapabilities.count(capability) > 0);
+  }
+
+  IComposerClient::DisplayType getDisplayType(Display display) {
+    IComposerClient::DisplayType type = IComposerClient::DisplayType::INVALID;
+    mComposerClient->getDisplayType(
+        display, [&](const auto& tmpError, const auto& tmpType) {
+          ASSERT_EQ(Error::NONE, tmpError);
+          type = tmpType;
+        });
+    return type;
+  }
+
+  Error createVirtualDisplay(Display* outDisplay) {
+    auto ret_count = mComposerClient->getMaxVirtualDisplayCount();
+    if (ret_count == 0) {
+      return Error::UNSUPPORTED;
+    }
+
+    Error err = Error::NO_RESOURCES;
+    Display display;
+    mComposerClient->createVirtualDisplay(
+        64, 64, PixelFormat::IMPLEMENTATION_DEFINED, kBufferSlotCount,
+        [&](const auto& tmpError, const auto& tmpDisplay, const auto&) {
+          err = tmpError;
+          display = tmpDisplay;
+        });
+
+    *outDisplay = display;
+    return err;
+  }
+
+  void destroyVirtualDisplay(Display display) {
+    auto ret = mComposerClient->destroyVirtualDisplay(display);
+    ASSERT_EQ(Error::NONE, static_cast<Error>(ret));
+  }
+
+  Error createLayer(Layer* outLayer) {
+    Error err = Error::NO_RESOURCES;
+    Layer layer;
+    mComposerClient->createLayer(
+        mPrimaryDisplay, kBufferSlotCount,
+        [&](const auto& tmpError, const auto& tmpLayer) {
+          err = tmpError;
+          layer = tmpLayer;
+        });
+
+    *outLayer = layer;
+    return err;
+  }
+
+  void destroyLayer(Layer layer) {
+    auto ret = mComposerClient->destroyLayer(mPrimaryDisplay, layer);
+    ASSERT_EQ(Error::NONE, static_cast<Error>(ret));
+  }
+
+  int32_t getDisplayAttribute(Config config,
+                              IComposerClient::Attribute attribute) {
+    int32_t value = -1;
+    mComposerClient->getDisplayAttribute(
+        mPrimaryDisplay, config, attribute,
+        [&](const auto& tmpError, const auto& tmpValue) {
+          ASSERT_EQ(Error::NONE, tmpError);
+          value = tmpValue;
+        });
+    return value;
+  }
+
+  std::vector<Config> getDisplayConfigs() {
+    std::vector<Config> configs;
+    mComposerClient->getDisplayConfigs(
+        mPrimaryDisplay, [&](const auto& tmpError, const auto& tmpConfigs) {
+          ASSERT_EQ(Error::NONE, tmpError);
+
+          configs = tmpConfigs;
+          ASSERT_FALSE(configs.empty());
+        });
+
+    return configs;
+  }
+
+  std::vector<ColorMode> getColorModes() {
+    std::vector<ColorMode> modes;
+    mComposerClient->getColorModes(
+        mPrimaryDisplay, [&](const auto& tmpError, const auto& tmpModes) {
+          ASSERT_EQ(Error::NONE, tmpError);
+
+          modes = tmpModes;
+          ASSERT_NE(modes.end(),
+                    std::find(modes.begin(), modes.end(), ColorMode::NATIVE));
+        });
+
+    return modes;
+  }
+
+  std::vector<IComposerClient::PowerMode> getPowerModes() {
+    std::vector<IComposerClient::PowerMode> modes;
+    modes.push_back(IComposerClient::PowerMode::OFF);
+
+    mComposerClient->getDozeSupport(
+        mPrimaryDisplay, [&](const auto& tmpError, const auto& tmpSupport) {
+          ASSERT_EQ(Error::NONE, tmpError);
+          if (tmpSupport) {
+            modes.push_back(IComposerClient::PowerMode::DOZE);
+            modes.push_back(IComposerClient::PowerMode::DOZE_SUSPEND);
+          }
+        });
+
+    // push ON last
+    modes.push_back(IComposerClient::PowerMode::ON);
+
+    return modes;
+  }
+
+  void setActiveConfig(Config config) {
+    auto ret = mComposerClient->setActiveConfig(mPrimaryDisplay, config);
+    ASSERT_EQ(Error::NONE, static_cast<Error>(ret));
+  }
+
+  void setColorMode(ColorMode mode) {
+    auto ret = mComposerClient->setColorMode(mPrimaryDisplay, mode);
+    ASSERT_EQ(Error::NONE, static_cast<Error>(ret));
+  }
+
+  void setPowerMode(IComposerClient::PowerMode mode) {
+    auto ret = mComposerClient->setPowerMode(mPrimaryDisplay, mode);
+    ASSERT_EQ(Error::NONE, static_cast<Error>(ret));
+  }
+
+  void setVsyncEnabled(bool enable) {
+    auto ret = mComposerClient->setVsyncEnabled(
+        mPrimaryDisplay,
+        enable ? IComposerClient::Vsync::ENABLE
+               : IComposerClient::Vsync::DISABLE);
+    ASSERT_EQ(Error::NONE, static_cast<Error>(ret));
+  }
+  // use the slot count usually set by SF
+  static constexpr uint32_t kBufferSlotCount = 64;
+
+  sp<IComposer> mComposer;
+  sp<IComposerClient> mComposerClient;
+  sp<GraphicsComposerCallback> mComposerCallback;
+  // the first display and is assumed never to be removed
+  Display mPrimaryDisplay;
+
+ private:
+  sp<IComposerClient> createClient() {
+    sp<IComposerClient> client;
+    mComposer->createClient([&](const auto& tmpError, const auto& tmpClient) {
+      if (tmpError == Error::NONE) {
+        client = tmpClient;
+      }
+    });
+
+    return client;
+  }
+
+  Display waitForFirstDisplay() {
+    while (true) {
+      std::vector<Display> displays = mComposerCallback->getDisplays();
+      if (displays.empty()) {
+        usleep(5 * 1000);
+        continue;
+      }
+
+      return displays[0];
+    }
+  }
+
+  // the set of all supported capabilities
+  std::unordered_set<IComposer::Capability> mCapabilities;
+};
+
+/**
+ * Test IComposer::getCapabilities.
+ *
+ * Test that IComposer::getCapabilities returns no invalid capabilities.
+ */
+TEST_F(GraphicsComposerHidlTest, GetCapabilities) {
+  mComposer->getCapabilities([](const auto& tmpCapabilities) {
+    std::vector<IComposer::Capability> capabilities = tmpCapabilities;
+    ASSERT_EQ(capabilities.end(),
+              std::find(capabilities.begin(), capabilities.end(),
+                        IComposer::Capability::INVALID));
+  });
+}
+
+/**
+ * Test IComposer::dumpDebugInfo.
+ */
+TEST_F(GraphicsComposerHidlTest, DumpDebugInfo) {
+  mComposer->dumpDebugInfo([](const auto&) {
+    // nothing to do
+  });
+}
+
+/**
+ * Test IComposer::createClient.
+ *
+ * Test that IComposerClient is a singleton.
+ */
+TEST_F(GraphicsComposerHidlTest, CreateClientSingleton) {
+  mComposer->createClient([&](const auto& tmpError, const auto&) {
+    EXPECT_EQ(Error::NO_RESOURCES, tmpError);
+  });
+}
+
+/**
+ * Test IComposerClient::createVirtualDisplay and
+ * IComposerClient::destroyVirtualDisplay.
+ *
+ * Test that virtual displays can be created and has the correct display type.
+ */
+TEST_F(GraphicsComposerHidlTest, CreateVirtualDisplay) {
+  Display display;
+  Error err = createVirtualDisplay(&display);
+  if (err == Error::UNSUPPORTED) {
+    GTEST_SUCCEED() << "no virtual display support";
+    return;
+  }
+  ASSERT_EQ(Error::NONE, err);
+
+  // test display type
+  IComposerClient::DisplayType type = getDisplayType(display);
+  EXPECT_EQ(IComposerClient::DisplayType::VIRTUAL, type);
+
+  destroyVirtualDisplay(display);
+}
+
+/**
+ * Test IComposerClient::createLayer and IComposerClient::destroyLayer.
+ *
+ * Test that layers can be created and destroyed.
+ */
+TEST_F(GraphicsComposerHidlTest, CreateLayer) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::getDisplayName.
+ */
+TEST_F(GraphicsComposerHidlTest, GetDisplayName) {
+  mComposerClient->getDisplayName(mPrimaryDisplay,
+                                  [&](const auto& tmpError, const auto&) {
+                                    ASSERT_EQ(Error::NONE, tmpError);
+                                  });
+}
+
+/**
+ * Test IComposerClient::getDisplayType.
+ *
+ * Test that IComposerClient::getDisplayType returns the correct display type
+ * for the primary display.
+ */
+TEST_F(GraphicsComposerHidlTest, GetDisplayType) {
+  IComposerClient::DisplayType type = getDisplayType(mPrimaryDisplay);
+  EXPECT_EQ(IComposerClient::DisplayType::PHYSICAL, type);
+}
+
+/**
+ * Test IComposerClient::getClientTargetSupport.
+ *
+ * Test that IComposerClient::getClientTargetSupport returns true for the
+ * required client targets.
+ */
+TEST_F(GraphicsComposerHidlTest, GetClientTargetSupport) {
+  std::vector<Config> configs = getDisplayConfigs();
+  for (auto config : configs) {
+    int32_t width =
+        getDisplayAttribute(config, IComposerClient::Attribute::WIDTH);
+    int32_t height =
+        getDisplayAttribute(config, IComposerClient::Attribute::HEIGHT);
+    ASSERT_LT(0, width);
+    ASSERT_LT(0, height);
+
+    setActiveConfig(config);
+
+    auto ret = mComposerClient->getClientTargetSupport(
+        mPrimaryDisplay, width, height, PixelFormat::RGBA_8888,
+        Dataspace::UNKNOWN);
+    ASSERT_EQ(Error::NONE, static_cast<Error>(ret));
+  }
+}
+
+/**
+ * Test IComposerClient::getDisplayAttribute.
+ *
+ * Test that IComposerClient::getDisplayAttribute succeeds for the required
+ * formats, and succeeds or fails correctly for optional attributes.
+ */
+TEST_F(GraphicsComposerHidlTest, GetDisplayAttribute) {
+  std::vector<Config> configs = getDisplayConfigs();
+  for (auto config : configs) {
+    const std::array<IComposerClient::Attribute, 3> requiredAttributes = {{
+        IComposerClient::Attribute::WIDTH, IComposerClient::Attribute::HEIGHT,
+        IComposerClient::Attribute::VSYNC_PERIOD,
+    }};
+    for (auto attribute : requiredAttributes) {
+      getDisplayAttribute(config, attribute);
+    }
+
+    const std::array<IComposerClient::Attribute, 2> optionalAttributes = {{
+        IComposerClient::Attribute::DPI_X, IComposerClient::Attribute::DPI_Y,
+    }};
+    for (auto attribute : optionalAttributes) {
+      mComposerClient->getDisplayAttribute(
+          mPrimaryDisplay, config, attribute,
+          [&](const auto& tmpError, const auto&) {
+            EXPECT_TRUE(tmpError == Error::NONE ||
+                        tmpError == Error::UNSUPPORTED);
+          });
+    }
+  }
+}
+
+/**
+ * Test IComposerClient::getHdrCapabilities.
+ */
+TEST_F(GraphicsComposerHidlTest, GetHdrCapabilities) {
+  mComposerClient->getHdrCapabilities(
+      mPrimaryDisplay,
+      [&](const auto& tmpError, const auto&, const auto&, const auto&,
+          const auto&) { ASSERT_EQ(Error::NONE, tmpError); });
+}
+
+/**
+ * Test IComposerClient::setClientTargetSlotCount.
+ */
+TEST_F(GraphicsComposerHidlTest, SetClientTargetSlotCount) {
+  auto ret = mComposerClient->setClientTargetSlotCount(mPrimaryDisplay,
+                                                       kBufferSlotCount);
+  ASSERT_EQ(Error::NONE, static_cast<Error>(ret));
+}
+
+/**
+ * Test IComposerClient::setActiveConfig.
+ *
+ * Test that IComposerClient::setActiveConfig succeeds for all display
+ * configs.
+ */
+TEST_F(GraphicsComposerHidlTest, SetActiveConfig) {
+  std::vector<Config> configs = getDisplayConfigs();
+  for (auto config : configs) {
+    setActiveConfig(config);
+
+    mComposerClient->getActiveConfig(
+        mPrimaryDisplay, [&](const auto& tmpError, const auto& tmpConfig) {
+          EXPECT_EQ(Error::NONE, tmpError);
+          EXPECT_EQ(config, tmpConfig);
+        });
+  }
+}
+
+/**
+ * Test IComposerClient::setColorMode.
+ *
+ * Test that IComposerClient::setColorMode succeeds for all color modes.
+ */
+TEST_F(GraphicsComposerHidlTest, SetColorMode) {
+  std::vector<ColorMode> modes = getColorModes();
+  for (auto mode : modes) {
+    setColorMode(mode);
+  }
+}
+
+/**
+ * Test IComposerClient::setPowerMode.
+ *
+ * Test that IComposerClient::setPowerMode succeeds for all power modes.
+ */
+TEST_F(GraphicsComposerHidlTest, SetPowerMode) {
+  std::vector<IComposerClient::PowerMode> modes = getPowerModes();
+  for (auto mode : modes) {
+    setPowerMode(mode);
+  }
+}
+
+/**
+ * Test IComposerClient::setVsyncEnabled.
+ *
+ * Test that IComposerClient::setVsyncEnabled succeeds and there is no
+ * spurious vsync events.
+ */
+TEST_F(GraphicsComposerHidlTest, SetVsyncEnabled) {
+  mComposerCallback->setVsyncAllowed(true);
+
+  setVsyncEnabled(true);
+  usleep(60 * 1000);
+  setVsyncEnabled(false);
+
+  mComposerCallback->setVsyncAllowed(false);
+}
+
+// Tests for IComposerClient::Command.
+class GraphicsComposerHidlCommandTest : public GraphicsComposerHidlTest {
+ protected:
+  void SetUp() override {
+    ASSERT_NO_FATAL_FAILURE(GraphicsComposerHidlTest::SetUp());
+    ASSERT_NO_FATAL_FAILURE(SetUpGralloc());
+
+    mWriter = std::make_unique<CommandWriterBase>(1024);
+    mReader = std::make_unique<CommandReader>();
+  }
+
+  void TearDown() override {
+    ASSERT_NO_FATAL_FAILURE(GraphicsComposerHidlTest::TearDown());
+  }
+
+  const native_handle_t* cloneBuffer(const native_handle_t* handle) {
+    auto clone = native_handle_clone(handle);
+    if (!clone) {
+      return nullptr;
+    }
+
+    GrallocError err = mMapper->retain(clone);
+    if (err != GrallocError::NONE) {
+      native_handle_close(clone);
+      native_handle_delete(const_cast<native_handle_t*>(clone));
+      return nullptr;
+    }
+
+    return clone;
+  }
+
+  const native_handle_t* allocate(
+      const IAllocatorClient::BufferDescriptorInfo& info) {
+    // create descriptor
+    GrallocError err = GrallocError::NO_RESOURCES;
+    BufferDescriptor descriptor;
+    mAllocatorClient->createDescriptor(
+        info, [&](const auto& tmpError, const auto& tmpDescriptor) {
+          err = tmpError;
+          descriptor = tmpDescriptor;
+        });
+    if (err != GrallocError::NONE) {
+      return nullptr;
+    }
+
+    // allocate buffer
+    hidl_vec<BufferDescriptor> descriptors;
+    hidl_vec<Buffer> buffers;
+    descriptors.setToExternal(&descriptor, 1);
+    err = GrallocError::NO_RESOURCES;
+    mAllocatorClient->allocate(
+        descriptors, [&](const auto& tmpError, const auto& tmpBuffers) {
+          err = tmpError;
+          buffers = tmpBuffers;
+        });
+    if ((err != GrallocError::NONE && err != GrallocError::NOT_SHARED) ||
+        buffers.size() != 1) {
+      mAllocatorClient->destroyDescriptor(descriptors[0]);
+      return nullptr;
+    }
+
+    // export handle
+    err = GrallocError::NO_RESOURCES;
+    const native_handle_t* handle = nullptr;
+    mAllocatorClient->exportHandle(
+        descriptors[0], buffers[0],
+        [&](const auto& tmpError, const auto& tmpHandle) {
+          err = tmpError;
+          if (err != GrallocError::NONE) {
+            return;
+          }
+
+          handle = cloneBuffer(tmpHandle.getNativeHandle());
+          if (!handle) {
+            err = GrallocError::NO_RESOURCES;
+            return;
+          }
+        });
+
+    mAllocatorClient->destroyDescriptor(descriptors[0]);
+    mAllocatorClient->free(buffers[0]);
+
+    if (err != GrallocError::NONE) {
+      return nullptr;
+    }
+
+    return handle;
+  }
+
+  const native_handle_t* allocate() {
+    IAllocatorClient::BufferDescriptorInfo info{};
+    info.width = 64;
+    info.height = 64;
+    info.layerCount = 1;
+    info.format = PixelFormat::RGBA_8888;
+    info.producerUsageMask = static_cast<uint64_t>(ProducerUsage::CPU_WRITE);
+    info.consumerUsageMask = static_cast<uint64_t>(ConsumerUsage::CPU_READ);
+
+    return allocate(info);
+  }
+
+  void free(const native_handle_t* handle) {
+    auto ret = mMapper->release(handle);
+    ASSERT_EQ(GrallocError::NONE, static_cast<GrallocError>(ret));
+  }
+
+  void execute() {
+    bool queueChanged = false;
+    uint32_t commandLength = 0;
+    hidl_vec<hidl_handle> commandHandles;
+    ASSERT_TRUE(
+        mWriter->writeQueue(&queueChanged, &commandLength, &commandHandles));
+
+    if (queueChanged) {
+      auto ret =
+          mComposerClient->setInputCommandQueue(*mWriter->getMQDescriptor());
+      ASSERT_EQ(Error::NONE, static_cast<Error>(ret));
+      return;
+    }
+
+    mComposerClient->executeCommands(
+        commandLength, commandHandles,
+        [&](const auto& tmpError, const auto& tmpOutQueueChanged,
+            const auto& tmpOutLength, const auto& tmpOutHandles) {
+          ASSERT_EQ(Error::NONE, tmpError);
+
+          if (tmpOutQueueChanged) {
+            mComposerClient->getOutputCommandQueue(
+                [&](const auto& tmpError, const auto& tmpDescriptor) {
+                  ASSERT_EQ(Error::NONE, tmpError);
+                  mReader->setMQDescriptor(tmpDescriptor);
+                });
+          }
+
+          ASSERT_TRUE(mReader->readQueue(tmpOutLength, tmpOutHandles));
+          mReader->parse();
+        });
+  }
+
+  // A command parser that checks that no error nor unexpected commands are
+  // returned.
+  class CommandReader : public CommandReaderBase {
+   public:
+    // Parse all commands in the return command queue.  Call GTEST_FAIL() for
+    // unexpected errors or commands.
+    void parse() {
+      while (!isEmpty()) {
+        IComposerClient::Command command;
+        uint16_t length;
+        ASSERT_TRUE(beginCommand(&command, &length));
+
+        switch (command) {
+          case IComposerClient::Command::SET_ERROR: {
+            ASSERT_EQ(2, length);
+            auto loc = read();
+            auto err = readSigned();
+            GTEST_FAIL() << "unexpected error " << err << " at location "
+                         << loc;
+          } break;
+          case IComposerClient::Command::SELECT_DISPLAY:
+          case IComposerClient::Command::SET_CHANGED_COMPOSITION_TYPES:
+          case IComposerClient::Command::SET_DISPLAY_REQUESTS:
+          case IComposerClient::Command::SET_PRESENT_FENCE:
+          case IComposerClient::Command::SET_RELEASE_FENCES:
+            break;
+          default:
+            GTEST_FAIL() << "unexpected return command " << std::hex
+                         << static_cast<int>(command);
+            break;
+        }
+
+        endCommand();
+      }
+    }
+  };
+
+  std::unique_ptr<CommandWriterBase> mWriter;
+  std::unique_ptr<CommandReader> mReader;
+
+ private:
+  void SetUpGralloc() {
+    mAllocator = IAllocator::getService("gralloc");
+    ASSERT_NE(nullptr, mAllocator.get());
+
+    mAllocator->createClient([this](const auto& error, const auto& client) {
+      if (error == GrallocError::NONE) {
+        mAllocatorClient = client;
+      }
+    });
+    ASSERT_NE(nullptr, mAllocatorClient.get());
+
+    mMapper = IMapper::getService("gralloc-mapper");
+    ASSERT_NE(nullptr, mMapper.get());
+    ASSERT_FALSE(mMapper->isRemote());
+  }
+
+  sp<IAllocator> mAllocator;
+  sp<IAllocatorClient> mAllocatorClient;
+  sp<IMapper> mMapper;
+};
+
+/**
+ * Test IComposerClient::Command::SET_COLOR_TRANSFORM.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_COLOR_TRANSFORM) {
+  const std::array<float, 16> identity = {{
+      1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
+      0.0f, 0.0f, 0.0f, 1.0f,
+  }};
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->setColorTransform(identity.data(), ColorTransform::IDENTITY);
+
+  execute();
+}
+
+/**
+ * Test IComposerClient::Command::SET_CLIENT_TARGET.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_CLIENT_TARGET) {
+  mComposerClient->setClientTargetSlotCount(mPrimaryDisplay, kBufferSlotCount);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->setClientTarget(0, nullptr, -1, Dataspace::UNKNOWN,
+                           std::vector<IComposerClient::Rect>());
+
+  execute();
+}
+
+/**
+ * Test IComposerClient::Command::SET_OUTPUT_BUFFER.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_OUTPUT_BUFFER) {
+  auto handle = allocate();
+  ASSERT_NE(nullptr, handle);
+
+  Display display;
+  Error err = createVirtualDisplay(&display);
+  if (err == Error::UNSUPPORTED) {
+    GTEST_SUCCEED() << "no virtual display support";
+    return;
+  }
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(display);
+  mWriter->setOutputBuffer(0, handle, -1);
+
+  destroyVirtualDisplay(display);
+  free(handle);
+}
+
+/**
+ * Test IComposerClient::Command::VALIDATE_DISPLAY.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, VALIDATE_DISPLAY) {
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->validateDisplay();
+  execute();
+}
+
+/**
+ * Test IComposerClient::Command::ACCEPT_DISPLAY_CHANGES.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, ACCEPT_DISPLAY_CHANGES) {
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->validateDisplay();
+  mWriter->acceptDisplayChanges();
+  execute();
+}
+
+/**
+ * Test IComposerClient::Command::PRESENT_DISPLAY.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, PRESENT_DISPLAY) {
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->validateDisplay();
+  mWriter->presentDisplay();
+  execute();
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_CURSOR_POSITION.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_CURSOR_POSITION) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerCursorPosition(1, 1);
+  mWriter->setLayerCursorPosition(0, 0);
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_BUFFER.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_BUFFER) {
+  auto handle = allocate();
+  ASSERT_NE(nullptr, handle);
+
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerBuffer(0, handle, -1);
+  execute();
+
+  destroyLayer(layer);
+  free(handle);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_SURFACE_DAMAGE.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_SURFACE_DAMAGE) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  IComposerClient::Rect empty{0, 0, 0, 0};
+  IComposerClient::Rect unit{0, 0, 1, 1};
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerSurfaceDamage(std::vector<IComposerClient::Rect>(1, empty));
+  mWriter->setLayerSurfaceDamage(std::vector<IComposerClient::Rect>(1, unit));
+  mWriter->setLayerSurfaceDamage(std::vector<IComposerClient::Rect>());
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_BLEND_MODE.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_BLEND_MODE) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerBlendMode(IComposerClient::BlendMode::NONE);
+  mWriter->setLayerBlendMode(IComposerClient::BlendMode::PREMULTIPLIED);
+  mWriter->setLayerBlendMode(IComposerClient::BlendMode::COVERAGE);
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_COLOR.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_COLOR) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerColor(IComposerClient::Color{0xff, 0xff, 0xff, 0xff});
+  mWriter->setLayerColor(IComposerClient::Color{0, 0, 0, 0});
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_COMPOSITION_TYPE.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_COMPOSITION_TYPE) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerCompositionType(IComposerClient::Composition::CLIENT);
+  mWriter->setLayerCompositionType(IComposerClient::Composition::DEVICE);
+  mWriter->setLayerCompositionType(IComposerClient::Composition::SOLID_COLOR);
+  mWriter->setLayerCompositionType(IComposerClient::Composition::CURSOR);
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_DATASPACE.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_DATASPACE) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerDataspace(Dataspace::UNKNOWN);
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_DISPLAY_FRAME.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_DISPLAY_FRAME) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerDisplayFrame(IComposerClient::Rect{0, 0, 1, 1});
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_PLANE_ALPHA.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_PLANE_ALPHA) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerPlaneAlpha(0.0f);
+  mWriter->setLayerPlaneAlpha(1.0f);
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_SIDEBAND_STREAM.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_SIDEBAND_STREAM) {
+  if (!hasCapability(IComposer::Capability::SIDEBAND_STREAM)) {
+    GTEST_SUCCEED() << "no sideband stream support";
+    return;
+  }
+
+  auto handle = allocate();
+  ASSERT_NE(nullptr, handle);
+
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerSidebandStream(handle);
+  execute();
+
+  destroyLayer(layer);
+  free(handle);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_SOURCE_CROP.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_SOURCE_CROP) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerSourceCrop(IComposerClient::FRect{0.0f, 0.0f, 1.0f, 1.0f});
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_TRANSFORM.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_TRANSFORM) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerTransform(static_cast<Transform>(0));
+  mWriter->setLayerTransform(Transform::FLIP_H);
+  mWriter->setLayerTransform(Transform::FLIP_V);
+  mWriter->setLayerTransform(Transform::ROT_90);
+  mWriter->setLayerTransform(Transform::ROT_180);
+  mWriter->setLayerTransform(Transform::ROT_270);
+  mWriter->setLayerTransform(
+      static_cast<Transform>(Transform::FLIP_H | Transform::ROT_90));
+  mWriter->setLayerTransform(
+      static_cast<Transform>(Transform::FLIP_V | Transform::ROT_90));
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_VISIBLE_REGION.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_VISIBLE_REGION) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  IComposerClient::Rect empty{0, 0, 0, 0};
+  IComposerClient::Rect unit{0, 0, 1, 1};
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerVisibleRegion(std::vector<IComposerClient::Rect>(1, empty));
+  mWriter->setLayerVisibleRegion(std::vector<IComposerClient::Rect>(1, unit));
+  mWriter->setLayerVisibleRegion(std::vector<IComposerClient::Rect>());
+  execute();
+
+  destroyLayer(layer);
+}
+
+/**
+ * Test IComposerClient::Command::SET_LAYER_Z_ORDER.
+ */
+TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_Z_ORDER) {
+  Layer layer;
+  Error err = createLayer(&layer);
+  ASSERT_EQ(Error::NONE, err);
+
+  mWriter->selectDisplay(mPrimaryDisplay);
+  mWriter->selectLayer(layer);
+  mWriter->setLayerZOrder(10);
+  mWriter->setLayerZOrder(0);
+  execute();
+
+  destroyLayer(layer);
+}
+
+}  // namespace anonymous
+}  // namespace tests
+}  // namespace V2_1
+}  // namespace composer
+}  // namespace graphics
+}  // namespace hardware
+}  // namespace android
+
+int main(int argc, char** argv) {
+  ::testing::InitGoogleTest(&argc, argv);
+
+  int status = RUN_ALL_TESTS();
+  LOG(INFO) << "Test result = " << status;
+
+  return status;
+}
diff --git a/boot/1.0/vts/functional/Android.mk b/graphics/composer/Android.mk
similarity index 100%
copy from boot/1.0/vts/functional/Android.mk
copy to graphics/composer/Android.mk
diff --git a/graphics/mapper/2.0/Android.bp b/graphics/mapper/2.0/Android.bp
index 4adccb9..b835b4a 100644
--- a/graphics/mapper/2.0/Android.bp
+++ b/graphics/mapper/2.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.graphics.mapper@2.0_hal",
+    srcs: [
+        "types.hal",
+        "IMapper.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.graphics.mapper@2.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.mapper@2.0",
     srcs: [
-        "types.hal",
-        "IMapper.hal",
+        ":android.hardware.graphics.mapper@2.0_hal",
     ],
     out: [
         "android/hardware/graphics/mapper/2.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.mapper@2.0",
     srcs: [
-        "types.hal",
-        "IMapper.hal",
+        ":android.hardware.graphics.mapper@2.0_hal",
     ],
     out: [
         "android/hardware/graphics/mapper/2.0/types.h",
diff --git a/graphics/mapper/2.0/default/Android.bp b/graphics/mapper/2.0/default/Android.bp
index c3d2281..ca15961 100644
--- a/graphics/mapper/2.0/default/Android.bp
+++ b/graphics/mapper/2.0/default/Android.bp
@@ -15,6 +15,7 @@
 
 cc_library_shared {
     name: "android.hardware.graphics.mapper@2.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["GrallocMapper.cpp"],
     cppflags: ["-Wall", "-Wextra"],
diff --git a/graphics/mapper/2.0/vts/Android.mk b/graphics/mapper/2.0/vts/Android.mk
deleted file mode 100644
index 6185ddc..0000000
--- a/graphics/mapper/2.0/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(LOCAL_PATH)/functional/vts/testcases/hal/graphics/mapper/hidl/target/Android.mk
diff --git a/graphics/mapper/2.0/vts/Mapper.vts b/graphics/mapper/2.0/vts/Mapper.vts
deleted file mode 100644
index 26e049f..0000000
--- a/graphics/mapper/2.0/vts/Mapper.vts
+++ /dev/null
@@ -1,280 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "IMapper"
-
-package: "android.hardware.graphics.mapper"
-
-import: "android.hardware.graphics.allocator@2.0::types"
-import: "android.hardware.graphics.common@1.0::types"
-import: "android.hardware.graphics.mapper@2.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::graphics::mapper::V2_0::IMapper::Rect"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "left"
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        struct_value: {
-            name: "top"
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        struct_value: {
-            name: "width"
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        struct_value: {
-            name: "height"
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "retain"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "release"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            exit: true
-        }
-    }
-
-    api: {
-        name: "getDimensions"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "getFormat"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::common::V1_0::PixelFormat"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "getLayerCount"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "getProducerUsageMask"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "getConsumerUsageMask"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "getBackingStore"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "getStride"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "lock"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_POINTER
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::graphics::mapper::V2_0::IMapper::Rect"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "unlock"
-        }
-    }
-
-    api: {
-        name: "lockFlex"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::graphics::mapper::V2_0::FlexLayout"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::graphics::mapper::V2_0::IMapper::Rect"
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "unlock"
-        }
-    }
-
-    api: {
-        name: "unlock"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::graphics::allocator::V2_0::Error"
-        }
-        return_type_hidl: {
-            type: TYPE_HANDLE
-        }
-        arg: {
-            type: TYPE_HANDLE
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-}
diff --git a/graphics/mapper/2.0/vts/functional/Android.bp b/graphics/mapper/2.0/vts/functional/Android.bp
index 27ea350..fbba38e 100644
--- a/graphics/mapper/2.0/vts/functional/Android.bp
+++ b/graphics/mapper/2.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "graphics_mapper_hidl_hal_test",
+    name: "VtsHalGraphicsMapperV2_0TargetTest",
     gtest: true,
-    srcs: ["graphics_mapper_hidl_hal_test.cpp"],
+    srcs: ["VtsHalGraphicsMapperV2_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -34,11 +34,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
-    ],
-    ldflags: [
-        "--coverage",
-    ],
+    ]
 }
diff --git a/graphics/mapper/2.0/vts/functional/graphics_mapper_hidl_hal_test.cpp b/graphics/mapper/2.0/vts/functional/VtsHalGraphicsMapperV2_0TargetTest.cpp
similarity index 100%
rename from graphics/mapper/2.0/vts/functional/graphics_mapper_hidl_hal_test.cpp
rename to graphics/mapper/2.0/vts/functional/VtsHalGraphicsMapperV2_0TargetTest.cpp
diff --git a/graphics/mapper/2.0/vts/functional/vts/testcases/hal/graphics/mapper/hidl/target/Android.mk b/graphics/mapper/2.0/vts/functional/vts/testcases/hal/graphics/mapper/hidl/target/Android.mk
deleted file mode 100644
index 5f7fae8..0000000
--- a/graphics/mapper/2.0/vts/functional/vts/testcases/hal/graphics/mapper/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalGraphicsMapperHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/graphics/mapper/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/graphics/mapper/2.0/vts/functional/vts/testcases/hal/graphics/mapper/hidl/target/AndroidTest.xml b/graphics/mapper/2.0/vts/functional/vts/testcases/hal/graphics/mapper/hidl/target/AndroidTest.xml
deleted file mode 100644
index b602ec4..0000000
--- a/graphics/mapper/2.0/vts/functional/vts/testcases/hal/graphics/mapper/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Graphics Mapper HIDL HAL's basic target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalGraphicsMapperHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/graphics_mapper_hidl_hal_test/graphics_mapper_hidl_hal_test,
-            _64bit::DATA/nativetest64/graphics_mapper_hidl_hal_test/graphics_mapper_hidl_hal_test,
-	    " />
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/graphics/mapper/2.0/vts/types.vts b/graphics/mapper/2.0/vts/types.vts
deleted file mode 100644
index fee8535..0000000
--- a/graphics/mapper/2.0/vts/types.vts
+++ /dev/null
@@ -1,139 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "types"
-
-package: "android.hardware.graphics.mapper"
-
-
-attribute: {
-    name: "::android::hardware::graphics::mapper::V2_0::FlexComponent"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "Y"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CB"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "CR"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "R"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "G"
-        scalar_value: {
-            int32_t: 2048
-        }
-        enumerator: "B"
-        scalar_value: {
-            int32_t: 4096
-        }
-        enumerator: "A"
-        scalar_value: {
-            int32_t: 1073741824
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::graphics::mapper::V2_0::FlexFormat"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "INVALID"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "Y"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "YCBCR"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "YCBCRA"
-        scalar_value: {
-            int32_t: 1073741831
-        }
-        enumerator: "RGB"
-        scalar_value: {
-            int32_t: 7168
-        }
-        enumerator: "RGBA"
-        scalar_value: {
-            int32_t: 1073748992
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::graphics::mapper::V2_0::FlexPlane"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "topLeft"
-        type: TYPE_POINTER
-    }
-    struct_value: {
-        name: "component"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::graphics::mapper::V2_0::FlexComponent"
-    }
-    struct_value: {
-        name: "bitsPerComponent"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "bitsUsed"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "hIncrement"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "vIncrement"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "hSubsampling"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "vSubsampling"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::graphics::mapper::V2_0::FlexLayout"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "format"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::graphics::mapper::V2_0::FlexFormat"
-    }
-    struct_value: {
-        name: "planes"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::graphics::mapper::V2_0::FlexPlane"
-        }
-    }
-}
-
diff --git a/health/1.0/Android.bp b/health/1.0/Android.bp
index b0b9549..a428c7d 100644
--- a/health/1.0/Android.bp
+++ b/health/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.health@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IHealth.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.health@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@1.0",
     srcs: [
-        "types.hal",
-        "IHealth.hal",
+        ":android.hardware.health@1.0_hal",
     ],
     out: [
         "android/hardware/health/1.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@1.0",
     srcs: [
-        "types.hal",
-        "IHealth.hal",
+        ":android.hardware.health@1.0_hal",
     ],
     out: [
         "android/hardware/health/1.0/types.h",
diff --git a/health/1.0/Android.mk b/health/1.0/Android.mk
index f05d227..ebb89a7 100644
--- a/health/1.0/Android.mk
+++ b/health/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.health@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -140,7 +140,7 @@
 LOCAL_MODULE := android.hardware.health@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -272,7 +272,7 @@
 LOCAL_MODULE := android.hardware.health@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/health/1.0/default/Android.mk b/health/1.0/default/Android.mk
index 89d28cb..3c97185 100644
--- a/health/1.0/default/Android.mk
+++ b/health/1.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.health@1.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_C_INCLUDES := system/core/healthd/include system/core/base/include
 LOCAL_SRC_FILES := \
@@ -37,6 +38,7 @@
 include $(BUILD_STATIC_LIBRARY)
 
 include $(CLEAR_VARS)
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_MODULE := android.hardware.health@1.0-service
 LOCAL_INIT_RC := android.hardware.health@1.0-service.rc
diff --git a/health/1.0/default/android.hardware.health@1.0-service.rc b/health/1.0/default/android.hardware.health@1.0-service.rc
index a0d6a56..13cd7a5 100644
--- a/health/1.0/default/android.hardware.health@1.0-service.rc
+++ b/health/1.0/default/android.hardware.health@1.0-service.rc
@@ -1,4 +1,4 @@
-service health-hal-1-0 /system/bin/hw/android.hardware.health@1.0-service
+service health-hal-1-0 /vendor/bin/hw/android.hardware.health@1.0-service
     class hal
     user system
     group system
diff --git a/ir/1.0/Android.bp b/ir/1.0/Android.bp
index fb9f070..da49579 100644
--- a/ir/1.0/Android.bp
+++ b/ir/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.ir@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IConsumerIr.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.ir@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0",
     srcs: [
-        "types.hal",
-        "IConsumerIr.hal",
+        ":android.hardware.ir@1.0_hal",
     ],
     out: [
         "android/hardware/ir/1.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0",
     srcs: [
-        "types.hal",
-        "IConsumerIr.hal",
+        ":android.hardware.ir@1.0_hal",
     ],
     out: [
         "android/hardware/ir/1.0/types.h",
@@ -54,106 +60,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.ir.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
-    srcs: [
-        "types.hal",
-        "IConsumerIr.hal",
-    ],
-    out: [
-        "android/hardware/ir/1.0/types.vts.cpp",
-        "android/hardware/ir/1.0/ConsumerIr.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.ir.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
-    srcs: [
-        "types.hal",
-        "IConsumerIr.hal",
-    ],
-    out: [
-        "android/hardware/ir/1.0/types.vts.h",
-        "android/hardware/ir/1.0/ConsumerIr.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.ir.vts.driver@1.0",
-    generated_sources: ["android.hardware.ir.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.ir.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.ir.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.ir@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
-    srcs: [
-        "IConsumerIr.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/ir/1.0/ConsumerIr.vts.cpp",
-        "android/hardware/ir/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
-    srcs: [
-        "IConsumerIr.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/ir/1.0/ConsumerIr.vts.h",
-        "android/hardware/ir/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler",
-    generated_sources: ["android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.ir@1.0",
-    ],
-}
diff --git a/ir/1.0/Android.mk b/ir/1.0/Android.mk
index 660b32b..d43286c 100644
--- a/ir/1.0/Android.mk
+++ b/ir/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.ir@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -64,7 +64,7 @@
 LOCAL_MODULE := android.hardware.ir@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/ir/1.0/default/Android.bp b/ir/1.0/default/Android.bp
index 7c441da..ed0b807 100644
--- a/ir/1.0/default/Android.bp
+++ b/ir/1.0/default/Android.bp
@@ -15,6 +15,7 @@
 cc_library_shared {
     name: "android.hardware.ir@1.0-impl",
     relative_install_path: "hw",
+    proprietary: true,
     srcs: ["ConsumerIr.cpp"],
     shared_libs: [
         "libhidlbase",
@@ -30,6 +31,7 @@
 cc_binary {
     relative_install_path: "hw",
     name: "android.hardware.ir@1.0-service",
+    proprietary: true,
     init_rc: ["android.hardware.ir@1.0-service.rc"],
     srcs: ["service.cpp"],
 
diff --git a/ir/1.0/default/android.hardware.ir@1.0-service.rc b/ir/1.0/default/android.hardware.ir@1.0-service.rc
index 5b05ba2..47f34fe 100644
--- a/ir/1.0/default/android.hardware.ir@1.0-service.rc
+++ b/ir/1.0/default/android.hardware.ir@1.0-service.rc
@@ -1,4 +1,4 @@
-service ir-hal-1-0 /system/bin/hw/android.hardware.ir@1.0-service
+service ir-hal-1-0 /vendor/bin/hw/android.hardware.ir@1.0-service
     class hal
     user system
     group system
\ No newline at end of file
diff --git a/ir/1.0/vts/Android.mk b/ir/1.0/vts/Android.mk
deleted file mode 100644
index 90c50c8..0000000
--- a/ir/1.0/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(LOCAL_PATH)/functional/vts/testcases/hal/ir/hidl/target/Android.mk
diff --git a/ir/1.0/vts/ConsumerIr.vts b/ir/1.0/vts/ConsumerIr.vts
deleted file mode 100644
index bebc6cf..0000000
--- a/ir/1.0/vts/ConsumerIr.vts
+++ /dev/null
@@ -1,44 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IConsumerIr"
-
-package: "android.hardware.ir"
-
-import: "android.hardware.ir@1.0::types"
-
-interface: {
-    api: {
-        name: "transmit"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "int32_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getCarrierFreqs"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::ir::V1_0::ConsumerIrFreqRange"
-            }
-        }
-    }
-
-}
diff --git a/ir/1.0/vts/functional/Android.bp b/ir/1.0/vts/functional/Android.bp
index c5265de..5689474 100644
--- a/ir/1.0/vts/functional/Android.bp
+++ b/ir/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "ir_hidl_hal_test",
+    name: "VtsHalIrV1_0TargetTest",
     gtest: true,
-    srcs: ["ir_hidl_hal_test.cpp"],
+    srcs: ["VtsHalIrV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -30,11 +30,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
     ],
-    ldflags: [
-        "--coverage"
-    ]
 }
diff --git a/ir/1.0/vts/functional/ir_hidl_hal_test.cpp b/ir/1.0/vts/functional/VtsHalIrV1_0TargetTest.cpp
similarity index 97%
rename from ir/1.0/vts/functional/ir_hidl_hal_test.cpp
rename to ir/1.0/vts/functional/VtsHalIrV1_0TargetTest.cpp
index 57d0b73..08c7974 100644
--- a/ir/1.0/vts/functional/ir_hidl_hal_test.cpp
+++ b/ir/1.0/vts/functional/VtsHalIrV1_0TargetTest.cpp
@@ -34,7 +34,7 @@
 class ConsumerIrHidlTest : public ::testing::Test {
  public:
   virtual void SetUp() override {
-    ir = IConsumerIr::getService(false);
+    ir = IConsumerIr::getService();
     ASSERT_NE(ir, nullptr);
   }
 
diff --git a/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/Android.mk b/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/Android.mk
deleted file mode 100644
index a69fd08..0000000
--- a/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalIrHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/ir/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/AndroidTest.xml b/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/AndroidTest.xml
deleted file mode 100644
index 3ad7e45..0000000
--- a/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS IR HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalIrHidlTargetTest"/>
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/ir_hidl_hal_test/ir_hidl_hal_test,
-            _64bit::DATA/nativetest64/ir_hidl_hal_test/ir_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="hal_hidl_gtest" />
-        <option name="hwbinder-service" value="android.hardware.ir" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/ir/1.0/vts/types.vts b/ir/1.0/vts/types.vts
deleted file mode 100644
index d308b1f..0000000
--- a/ir/1.0/vts/types.vts
+++ /dev/null
@@ -1,21 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.ir"
-
-
-attribute: {
-    name: "::android::hardware::ir::V1_0::ConsumerIrFreqRange"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "min"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "max"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
\ No newline at end of file
diff --git a/keymaster/3.0/Android.bp b/keymaster/3.0/Android.bp
index a8247e1..074bb68 100644
--- a/keymaster/3.0/Android.bp
+++ b/keymaster/3.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.keymaster@3.0_hal",
+    srcs: [
+        "types.hal",
+        "IKeymasterDevice.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.keymaster@3.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.keymaster@3.0",
     srcs: [
-        "types.hal",
-        "IKeymasterDevice.hal",
+        ":android.hardware.keymaster@3.0_hal",
     ],
     out: [
         "android/hardware/keymaster/3.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.keymaster@3.0",
     srcs: [
-        "types.hal",
-        "IKeymasterDevice.hal",
+        ":android.hardware.keymaster@3.0_hal",
     ],
     out: [
         "android/hardware/keymaster/3.0/types.h",
diff --git a/keymaster/3.0/IKeymasterDevice.hal b/keymaster/3.0/IKeymasterDevice.hal
index 19669c8..50a41ec 100644
--- a/keymaster/3.0/IKeymasterDevice.hal
+++ b/keymaster/3.0/IKeymasterDevice.hal
@@ -209,6 +209,21 @@
     deleteAllKeys() generates(ErrorCode error);
 
     /**
+     * Destroys knowledge of the device's ids. This prevents all device id attestation in the
+     * future. The destruction must be permanent so that not even a factory reset will restore the
+     * device ids.
+     *
+     * Device id attestation may be provided only if this method is fully implemented, allowing the
+     * user to permanently disable device id attestation. If this cannot be guaranteed, the device
+     * must never attest any device ids.
+     *
+     * This is a NOP if device id attestation is not supported.
+     *
+     * @return error See the ErrorCode enum.
+     */
+    destroyAttestationIds() generates(ErrorCode error);
+
+    /**
      * Begins a cryptographic operation using the specified key. If all is well, begin() will return
      * ErrorCode::OK and create an operation handle which must be passed to subsequent calls to
      * update(), finish() or abort().
diff --git a/keymaster/3.0/default/Android.mk b/keymaster/3.0/default/Android.mk
index 36d8890..87a8a05 100644
--- a/keymaster/3.0/default/Android.mk
+++ b/keymaster/3.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.keymaster@3.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     KeymasterDevice.cpp \
@@ -22,6 +23,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.keymaster@3.0-service
 LOCAL_INIT_RC := android.hardware.keymaster@3.0-service.rc
 LOCAL_SRC_FILES := \
diff --git a/keymaster/3.0/default/KeymasterDevice.cpp b/keymaster/3.0/default/KeymasterDevice.cpp
index 1208b8d..24cf53a 100644
--- a/keymaster/3.0/default/KeymasterDevice.cpp
+++ b/keymaster/3.0/default/KeymasterDevice.cpp
@@ -375,6 +375,7 @@
 }
 
 Return<ErrorCode> KeymasterDevice::addRngEntropy(const hidl_vec<uint8_t>& data) {
+    if (!data.size()) return ErrorCode::OK;
     return legacy_enum_conversion(
         keymaster_device_->add_rng_entropy(keymaster_device_, &data[0], data.size()));
 }
@@ -516,6 +517,24 @@
 
     hidl_vec<hidl_vec<uint8_t>> resultCertChain;
 
+    for (size_t i = 0; i < attestParams.size(); ++i) {
+        switch (attestParams[i].tag) {
+            case Tag::ATTESTATION_ID_BRAND:
+            case Tag::ATTESTATION_ID_DEVICE:
+            case Tag::ATTESTATION_ID_PRODUCT:
+            case Tag::ATTESTATION_ID_SERIAL:
+            case Tag::ATTESTATION_ID_IMEI:
+            case Tag::ATTESTATION_ID_MEID:
+                // Device id attestation may only be supported if the device is able to permanently
+                // destroy its knowledge of the ids. This device is unable to do this, so it must
+                // never perform any device id attestation.
+                _hidl_cb(ErrorCode::CANNOT_ATTEST_IDS, resultCertChain);
+                return Void();
+            default:
+                break;
+        }
+    }
+
     keymaster_cert_chain_t cert_chain{nullptr, 0};
 
     auto kmKeyToAttest = hidlVec2KmKeyBlob(keyToAttest);
@@ -569,9 +588,16 @@
 }
 
 Return<ErrorCode> KeymasterDevice::deleteAllKeys() {
+    if (keymaster_device_->delete_all_keys == nullptr) {
+        return ErrorCode::UNIMPLEMENTED;
+    }
     return legacy_enum_conversion(keymaster_device_->delete_all_keys(keymaster_device_));
 }
 
+Return<ErrorCode> KeymasterDevice::destroyAttestationIds() {
+    return ErrorCode::UNIMPLEMENTED;
+}
+
 Return<void> KeymasterDevice::begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
                                     const hidl_vec<KeyParameter>& inParams, begin_cb _hidl_cb) {
 
diff --git a/keymaster/3.0/default/KeymasterDevice.h b/keymaster/3.0/default/KeymasterDevice.h
index 23767ef..382f45f 100644
--- a/keymaster/3.0/default/KeymasterDevice.h
+++ b/keymaster/3.0/default/KeymasterDevice.h
@@ -71,6 +71,7 @@
                             upgradeKey_cb _hidl_cb) override;
     Return<ErrorCode> deleteKey(const hidl_vec<uint8_t>& keyBlob) override;
     Return<ErrorCode> deleteAllKeys() override;
+    Return<ErrorCode> destroyAttestationIds() override;
     Return<void> begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
                        const hidl_vec<KeyParameter>& inParams, begin_cb _hidl_cb) override;
     Return<void> update(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
diff --git a/keymaster/3.0/default/android.hardware.keymaster@3.0-service.rc b/keymaster/3.0/default/android.hardware.keymaster@3.0-service.rc
index 86ed1e7..fd43178 100644
--- a/keymaster/3.0/default/android.hardware.keymaster@3.0-service.rc
+++ b/keymaster/3.0/default/android.hardware.keymaster@3.0-service.rc
@@ -1,4 +1,4 @@
-service keymaster-3-0 /system/bin/hw/android.hardware.keymaster@3.0-service
+service keymaster-3-0 /vendor/bin/hw/android.hardware.keymaster@3.0-service
     class hal
     user system
     group system drmrpc
diff --git a/keymaster/3.0/default/service.cpp b/keymaster/3.0/default/service.cpp
index dd8c0b2..c4387c3 100644
--- a/keymaster/3.0/default/service.cpp
+++ b/keymaster/3.0/default/service.cpp
@@ -26,10 +26,8 @@
 using android::hardware::joinRpcThreadpool;
 
 using android::hardware::keymaster::V3_0::IKeymasterDevice;
-using android::hardware::registerPassthroughServiceImplementation;
+using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-    configureRpcThreadpool(1, true /*callerWillJoin*/);
-    registerPassthroughServiceImplementation<IKeymasterDevice>("keymaster");
-    joinRpcThreadpool();
+    return defaultPassthroughServiceImplementation<IKeymasterDevice>("keymaster", 1);
 }
diff --git a/keymaster/3.0/types.hal b/keymaster/3.0/types.hal
index 7123e57..9f29b6a 100644
--- a/keymaster/3.0/types.hal
+++ b/keymaster/3.0/types.hal
@@ -123,6 +123,19 @@
     ATTESTATION_APPLICATION_ID = TagType:BYTES | 709, /* Used to identify the set of possible
                                                        * applications of which one has initiated a
                                                        * key attestation */
+    ATTESTATION_ID_BRAND = TagType:BYTES | 710,  /* Used to provide the device's brand name to be
+                                                    included in attestation */
+    ATTESTATION_ID_DEVICE = TagType:BYTES | 711, /* Used to provide the device's device name to be
+                                                    included in attestation */
+    ATTESTATION_ID_PRODUCT = TagType:BYTES | 712, /* Used to provide the device's product name to be
+                                                     included in attestation */
+    ATTESTATION_ID_SERIAL = TagType:BYTES | 713, /* Used to provide the device's serial number to be
+                                                    included in attestation */
+    ATTESTATION_ID_IMEI = TagType:BYTES | 714,   /* Used to provide the device's IMEI to be included
+                                                    in attestation */
+    ATTESTATION_ID_MEID = TagType:BYTES | 715,   /* Used to provide the device's MEID to be included
+                                                    in attestation */
+
 
     /* Tags used only to provide data to or receive data from operations */
     ASSOCIATED_DATA = TagType:BYTES | 1000, /* Used to provide associated data for AEAD modes. */
@@ -312,6 +325,7 @@
     ATTESTATION_CHALLENGE_MISSING = -63,
     KEYMASTER_NOT_CONFIGURED = -64,
     ATTESTATION_APPLICATION_ID_MISSING = -65,
+    CANNOT_ATTEST_IDS = -66,
 
     UNIMPLEMENTED = -100,
     VERSION_MISMATCH = -101,
diff --git a/light/2.0/Android.bp b/light/2.0/Android.bp
index 118be88..093a9f3 100644
--- a/light/2.0/Android.bp
+++ b/light/2.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.light@2.0_hal",
+    srcs: [
+        "types.hal",
+        "ILight.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.light@2.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.light@2.0",
     srcs: [
-        "types.hal",
-        "ILight.hal",
+        ":android.hardware.light@2.0_hal",
     ],
     out: [
         "android/hardware/light/2.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.light@2.0",
     srcs: [
-        "types.hal",
-        "ILight.hal",
+        ":android.hardware.light@2.0_hal",
     ],
     out: [
         "android/hardware/light/2.0/types.h",
@@ -54,106 +60,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.light.vts.driver@2.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.light@2.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/light/2.0/ $(genDir)/android/hardware/light/2.0/",
-    srcs: [
-        "types.hal",
-        "ILight.hal",
-    ],
-    out: [
-        "android/hardware/light/2.0/types.vts.cpp",
-        "android/hardware/light/2.0/Light.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.light.vts.driver@2.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.light@2.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/light/2.0/ $(genDir)/android/hardware/light/2.0/",
-    srcs: [
-        "types.hal",
-        "ILight.hal",
-    ],
-    out: [
-        "android/hardware/light/2.0/types.vts.h",
-        "android/hardware/light/2.0/Light.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.light.vts.driver@2.0",
-    generated_sources: ["android.hardware.light.vts.driver@2.0_genc++"],
-    generated_headers: ["android.hardware.light.vts.driver@2.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.light.vts.driver@2.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.light@2.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.light@2.0-ILight-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.light@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/light/2.0/ $(genDir)/android/hardware/light/2.0/",
-    srcs: [
-        "ILight.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/light/2.0/Light.vts.cpp",
-        "android/hardware/light/2.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.light@2.0-ILight-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.light@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/light/2.0/ $(genDir)/android/hardware/light/2.0/",
-    srcs: [
-        "ILight.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/light/2.0/Light.vts.h",
-        "android/hardware/light/2.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.light@2.0-ILight-vts.profiler",
-    generated_sources: ["android.hardware.light@2.0-ILight-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.light@2.0-ILight-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.light@2.0-ILight-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.light@2.0",
-    ],
-}
diff --git a/light/2.0/Android.mk b/light/2.0/Android.mk
index ef19bad..7bb4293 100644
--- a/light/2.0/Android.mk
+++ b/light/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.light@2.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -140,7 +140,7 @@
 LOCAL_MODULE := android.hardware.light@2.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/light/2.0/default/Android.mk b/light/2.0/default/Android.mk
index d14d7c0..7bd096c 100644
--- a/light/2.0/default/Android.mk
+++ b/light/2.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.light@2.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     Light.cpp \
@@ -22,6 +23,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.light@2.0-service
 LOCAL_INIT_RC := android.hardware.light@2.0-service.rc
 LOCAL_SRC_FILES := \
diff --git a/light/2.0/default/android.hardware.light@2.0-service.rc b/light/2.0/default/android.hardware.light@2.0-service.rc
index 3ba97d8..c3284c6 100644
--- a/light/2.0/default/android.hardware.light@2.0-service.rc
+++ b/light/2.0/default/android.hardware.light@2.0-service.rc
@@ -1,4 +1,4 @@
-service light-hal-2-0 /system/bin/hw/android.hardware.light@2.0-service
+service light-hal-2-0 /vendor/bin/hw/android.hardware.light@2.0-service
     class hal
     user system
     group system
\ No newline at end of file
diff --git a/light/2.0/default/service.cpp b/light/2.0/default/service.cpp
index b3848e9..70ae565 100644
--- a/light/2.0/default/service.cpp
+++ b/light/2.0/default/service.cpp
@@ -23,5 +23,5 @@
 using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-    return defaultPassthroughServiceImplementation<ILight>("light");
+    return defaultPassthroughServiceImplementation<ILight>();
 }
diff --git a/light/2.0/vts/Light.vts b/light/2.0/vts/Light.vts
deleted file mode 100644
index 5d49822..0000000
--- a/light/2.0/vts/Light.vts
+++ /dev/null
@@ -1,37 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "ILight"
-
-package: "android.hardware.light"
-
-import: "android.hardware.light@2.0::types"
-
-interface: {
-    api: {
-        name: "setLight"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::light::V2_0::Status"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::light::V2_0::Type"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::light::V2_0::LightState"
-        }
-    }
-
-    api: {
-        name: "getSupportedTypes"
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_ENUM
-                predefined_type: "::android::hardware::light::V2_0::Type"
-            }
-        }
-    }
-
-}
diff --git a/light/2.0/vts/functional/Android.bp b/light/2.0/vts/functional/Android.bp
index 889457f..9c9ff9d 100644
--- a/light/2.0/vts/functional/Android.bp
+++ b/light/2.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "light_hidl_hal_test",
+    name: "VtsHalLightV2_0TargetTest",
     gtest: true,
-    srcs: ["light_hidl_hal_test.cpp"],
+    srcs: ["VtsHalLightV2_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "libhidlbase",
@@ -27,12 +27,8 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
-    ],
-    ldflags: [
-        "--coverage"
     ]
 }
 
diff --git a/light/2.0/vts/functional/Android.mk b/light/2.0/vts/functional/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/light/2.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/light/2.0/vts/functional/light_hidl_hal_test.cpp b/light/2.0/vts/functional/VtsHalLightV2_0TargetTest.cpp
similarity index 84%
rename from light/2.0/vts/functional/light_hidl_hal_test.cpp
rename to light/2.0/vts/functional/VtsHalLightV2_0TargetTest.cpp
index 9b9f543..7abb6e7 100644
--- a/light/2.0/vts/functional/light_hidl_hal_test.cpp
+++ b/light/2.0/vts/functional/VtsHalLightV2_0TargetTest.cpp
@@ -34,36 +34,9 @@
 using ::android::hardware::Void;
 using ::android::sp;
 
-#define LIGHT_SERVICE_NAME "light"
-
 #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
 #define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
 
-class LightHidlTest : public ::testing::Test {
-public:
-    virtual void SetUp() override {
-        light = ILight::getService(LIGHT_SERVICE_NAME);
-
-        ASSERT_NE(light, nullptr);
-        LOG(INFO) << "Test is remote " << light->isRemote();
-
-        ASSERT_OK(light->getSupportedTypes([this](const hidl_vec<Type> &types) {
-            supportedTypes = types;
-        }));
-    }
-
-    virtual void TearDown() override {}
-
-    sp<ILight> light;
-    std::vector<Type> supportedTypes;
-};
-
-class LightHidlEnvironment : public ::testing::Environment {
-public:
-    virtual void SetUp() {}
-    virtual void TearDown() {}
-};
-
 const static LightState kWhite = {
     .color = 0xFFFFFFFF,
     .flashMode = Flash::TIMED,
@@ -99,6 +72,41 @@
     Type::WIFI
 };
 
+class LightHidlTest : public ::testing::Test {
+public:
+    virtual void SetUp() override {
+        light = ILight::getService();
+
+        ASSERT_NE(light, nullptr);
+        LOG(INFO) << "Test is remote " << light->isRemote();
+
+        ASSERT_OK(light->getSupportedTypes([this](const hidl_vec<Type> &types) {
+            supportedTypes = types;
+        }));
+    }
+
+    sp<ILight> light;
+    std::vector<Type> supportedTypes;
+
+    virtual void TearDown() override {
+        for (const Type& type: supportedTypes) {
+            Return<Status> ret = light->setLight(type, kOff);
+            EXPECT_OK(ret);
+            EXPECT_EQ(Status::SUCCESS, static_cast<Status>(ret));
+        }
+
+        // must leave the device in a useable condition
+        if (std::find(supportedTypes.begin(),
+                      supportedTypes.end(),
+                      Type::BACKLIGHT) != supportedTypes.end()) {
+            Return<Status> ret = light->setLight(Type::BACKLIGHT, kWhite);
+            EXPECT_OK(ret);
+            EXPECT_EQ(Status::SUCCESS, static_cast<Status>(ret));
+        }
+    }
+
+};
+
 /**
  * Ensure all lights which are reported as supported work.
  */
@@ -108,12 +116,6 @@
         EXPECT_OK(ret);
         EXPECT_EQ(Status::SUCCESS, static_cast<Status>(ret));
     }
-
-    for (const Type& type: supportedTypes) {
-        Return<Status> ret = light->setLight(type, kOff);
-        EXPECT_OK(ret);
-        EXPECT_EQ(Status::SUCCESS, static_cast<Status>(ret));
-    }
 }
 
 /**
@@ -128,12 +130,6 @@
         EXPECT_TRUE(Status::SUCCESS == status ||
                     Status::BRIGHTNESS_NOT_SUPPORTED == status);
     }
-
-    for (const Type& type: supportedTypes) {
-        Return<Status> ret = light->setLight(type, kOff);
-        EXPECT_OK(ret);
-        EXPECT_EQ(Status::SUCCESS, static_cast<Status>(ret));
-    }
 }
 
 /**
@@ -153,7 +149,6 @@
 }
 
 int main(int argc, char **argv) {
-    ::testing::AddGlobalTestEnvironment(new LightHidlEnvironment);
     ::testing::InitGoogleTest(&argc, argv);
     int status = RUN_ALL_TESTS();
     LOG(INFO) << "Test result = " << status;
diff --git a/light/2.0/vts/functional/vts/Android.mk b/light/2.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/light/2.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/light/2.0/vts/functional/vts/testcases/Android.mk b/light/2.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/light/2.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/light/2.0/vts/functional/vts/testcases/hal/Android.mk b/light/2.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/light/2.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/light/2.0/vts/functional/vts/testcases/hal/light/Android.mk b/light/2.0/vts/functional/vts/testcases/hal/light/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/light/2.0/vts/functional/vts/testcases/hal/light/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/Android.mk b/light/2.0/vts/functional/vts/testcases/hal/light/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target/Android.mk b/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target/Android.mk
deleted file mode 100644
index 4761a3e..0000000
--- a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := LightHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/light/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target/AndroidTest.xml b/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target/AndroidTest.xml
deleted file mode 100644
index 240f1f0..0000000
--- a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Light HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="LightHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/light_hidl_hal_test/light_hidl_hal_test,
-            _64bit::DATA/nativetest64/light_hidl_hal_test/light_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
-
diff --git a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target_profiling/Android.mk b/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target_profiling/Android.mk
deleted file mode 100644
index 939929d..0000000
--- a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := LightHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/light/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target_profiling/AndroidTest.xml b/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 455802d..0000000
--- a/light/2.0/vts/functional/vts/testcases/hal/light/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Light HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="LightHidlTargetProfilingTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/light_hidl_hal_test/light_hidl_hal_test,
-            _64bit::DATA/nativetest64/light_hidl_hal_test/light_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
-
diff --git a/light/2.0/vts/types.vts b/light/2.0/vts/types.vts
deleted file mode 100644
index a9c8cab..0000000
--- a/light/2.0/vts/types.vts
+++ /dev/null
@@ -1,149 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "types"
-
-package: "android.hardware.light"
-
-
-attribute: {
-    name: "::android::hardware::light::V2_0::Status"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "LIGHT_NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "BRIGHTNESS_NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::light::V2_0::Flash"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "TIMED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "HARDWARE"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::light::V2_0::Brightness"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "USER"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SENSOR"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "LOW_PERSISTENCE"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::light::V2_0::Type"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "BACKLIGHT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "KEYBOARD"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "BUTTONS"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "BATTERY"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "NOTIFICATIONS"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "ATTENTION"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "BLUETOOTH"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "WIFI"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "COUNT"
-        scalar_value: {
-            int32_t: 8
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::light::V2_0::LightState"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "color"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "flashMode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::light::V2_0::Flash"
-    }
-    struct_value: {
-        name: "flashOnMs"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "flashOffMs"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "brightnessMode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::light::V2_0::Brightness"
-    }
-}
-
diff --git a/media/1.0/Android.bp b/media/1.0/Android.bp
index d533e5a..7518eb3 100644
--- a/media/1.0/Android.bp
+++ b/media/1.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.media@1.0_hal",
+    srcs: [
+        "types.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.media@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.media@1.0",
     srcs: [
-        "types.hal",
+        ":android.hardware.media@1.0_hal",
     ],
     out: [
         "android/hardware/media/1.0/types.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.media@1.0",
     srcs: [
-        "types.hal",
+        ":android.hardware.media@1.0_hal",
     ],
     out: [
         "android/hardware/media/1.0/types.h",
diff --git a/media/1.0/types.hal b/media/1.0/types.hal
index 89b7fa2..1f9c4dc 100644
--- a/media/1.0/types.hal
+++ b/media/1.0/types.hal
@@ -40,7 +40,9 @@
     uint32_t stride;
     PixelFormat format;
     uint32_t usage; // TODO: convert to an enum
+    uint32_t generationNumber;
     uint64_t layerCount;
+    uint64_t id;
 };
 
 /**
@@ -52,25 +54,18 @@
 };
 
 /**
- * Ref: frameworks/native/include/binder/IMemory.h
- * Ref: frameworks/native/libs/binder/IMemory.cpp
+ * Ref: frameworks/native/include/android/rect.h
+ * Ref: frameworks/native/include/ui/Rect.h
  */
-
-/**
- * This struct contains attributes for a shared memory buffer that can be put
- * into a union.
- */
-struct SharedMemoryAttributes {
-    uint32_t size;
-    uint32_t flags; // TODO: convert to an enum
-    uint32_t offset;
+struct Rect {
+    int32_t left;
+    int32_t top;
+    int32_t right;
+    int32_t bottom;
 };
 
 /**
- * A SharedMemory is simply SharedMemoryAttributes plus a native handle.
+ * Ref: frameworks/native/include/ui/Region.h
  */
-struct SharedMemory {
-    handle nativeHandle;
-    SharedMemoryAttributes attr;
-};
+typedef vec<Rect> Region;
 
diff --git a/media/omx/1.0/Android.bp b/media/omx/1.0/Android.bp
index 657c23b..85d15ae 100644
--- a/media/omx/1.0/Android.bp
+++ b/media/omx/1.0/Android.bp
@@ -1,24 +1,35 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.media.omx@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IGraphicBufferSource.hal",
+        "IOmx.hal",
+        "IOmxBufferProducer.hal",
+        "IOmxBufferSource.hal",
+        "IOmxNode.hal",
+        "IOmxObserver.hal",
+        "IOmxProducerListener.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.media.omx@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.media.omx@1.0",
     srcs: [
-        "types.hal",
-        "IGraphicBufferSource.hal",
-        "IOmx.hal",
-        "IOmxBufferSource.hal",
-        "IOmxNode.hal",
-        "IOmxObserver.hal",
+        ":android.hardware.media.omx@1.0_hal",
     ],
     out: [
         "android/hardware/media/omx/1.0/types.cpp",
         "android/hardware/media/omx/1.0/GraphicBufferSourceAll.cpp",
         "android/hardware/media/omx/1.0/OmxAll.cpp",
+        "android/hardware/media/omx/1.0/OmxBufferProducerAll.cpp",
         "android/hardware/media/omx/1.0/OmxBufferSourceAll.cpp",
         "android/hardware/media/omx/1.0/OmxNodeAll.cpp",
         "android/hardware/media/omx/1.0/OmxObserverAll.cpp",
+        "android/hardware/media/omx/1.0/OmxProducerListenerAll.cpp",
     ],
 }
 
@@ -27,12 +38,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.media.omx@1.0",
     srcs: [
-        "types.hal",
-        "IGraphicBufferSource.hal",
-        "IOmx.hal",
-        "IOmxBufferSource.hal",
-        "IOmxNode.hal",
-        "IOmxObserver.hal",
+        ":android.hardware.media.omx@1.0_hal",
     ],
     out: [
         "android/hardware/media/omx/1.0/types.h",
@@ -46,6 +52,11 @@
         "android/hardware/media/omx/1.0/BnHwOmx.h",
         "android/hardware/media/omx/1.0/BpHwOmx.h",
         "android/hardware/media/omx/1.0/BsOmx.h",
+        "android/hardware/media/omx/1.0/IOmxBufferProducer.h",
+        "android/hardware/media/omx/1.0/IHwOmxBufferProducer.h",
+        "android/hardware/media/omx/1.0/BnHwOmxBufferProducer.h",
+        "android/hardware/media/omx/1.0/BpHwOmxBufferProducer.h",
+        "android/hardware/media/omx/1.0/BsOmxBufferProducer.h",
         "android/hardware/media/omx/1.0/IOmxBufferSource.h",
         "android/hardware/media/omx/1.0/IHwOmxBufferSource.h",
         "android/hardware/media/omx/1.0/BnHwOmxBufferSource.h",
@@ -61,6 +72,11 @@
         "android/hardware/media/omx/1.0/BnHwOmxObserver.h",
         "android/hardware/media/omx/1.0/BpHwOmxObserver.h",
         "android/hardware/media/omx/1.0/BsOmxObserver.h",
+        "android/hardware/media/omx/1.0/IOmxProducerListener.h",
+        "android/hardware/media/omx/1.0/IHwOmxProducerListener.h",
+        "android/hardware/media/omx/1.0/BnHwOmxProducerListener.h",
+        "android/hardware/media/omx/1.0/BpHwOmxProducerListener.h",
+        "android/hardware/media/omx/1.0/BsOmxProducerListener.h",
     ],
 }
 
diff --git a/media/omx/1.0/IGraphicBufferSource.hal b/media/omx/1.0/IGraphicBufferSource.hal
index 9b3ab0c..4dbfd32 100644
--- a/media/omx/1.0/IGraphicBufferSource.hal
+++ b/media/omx/1.0/IGraphicBufferSource.hal
@@ -31,7 +31,7 @@
 
     configure(IOmxNode omxNode, Dataspace dataspace);
 
-    setSuspend(bool suspend);
+    setSuspend(bool suspend, int64_t timeUs);
 
     setRepeatPreviousFrameDelayUs(int64_t repeatAfterUs);
 
@@ -41,6 +41,8 @@
 
     setStartTimeUs(int64_t startTimeUs);
 
+    setStopTimeUs(int64_t stopTimeUs);
+
     setColorAspects(ColorAspects aspects);
 
     setTimeOffsetUs(int64_t timeOffsetUs);
diff --git a/media/omx/1.0/IOmx.hal b/media/omx/1.0/IOmx.hal
index e9f0b76..acb1aae 100644
--- a/media/omx/1.0/IOmx.hal
+++ b/media/omx/1.0/IOmx.hal
@@ -20,6 +20,8 @@
 
 import IOmxNode;
 import IOmxObserver;
+import IOmxBufferProducer;
+import IGraphicBufferSource;
 
 /**
  * Ref: frameworks/av/include/media/IOMX.h: IOMX
@@ -32,15 +34,15 @@
      * Information for an IOmxNode component.
      */
     struct ComponentInfo {
-        string mName;       //< Name of the component.
-        vec<string> mRoles; //< Roles of the component.
+        string mName;
+        vec<string> mRoles;
     };
 
     /**
      * List available components.
      *
-     * @param[out] status will be the status of the call.
-     * @param[out] nodeList will be a list of ComponentInfo.
+     * @param[out] status The status of the call.
+     * @param[out] nodeList The list of ComponentInfo.
      */
     listNodes(
         ) generates (
@@ -51,11 +53,11 @@
     /**
      * Allocate an IOmxNode instance with the specified component name.
      *
-     * @param[in] name is the name of the component to create.
-     * @param[in] observer is an observer object that will receive messages from
+     * @param[in] name The name of the component to create.
+     * @param[in] observer An observer object that will receive messages from
      * the created instance.
-     * @param[out] status will be the status of the call.
-     * @param[out] omxNode will be the allocated instance of IOmxNode.
+     * @param[out] status The status of the call.
+     * @param[out] omxNode The allocated instance of IOmxNode.
      */
     allocateNode(
             string name,
@@ -65,5 +67,17 @@
             IOmxNode omxNode
         );
 
+    /**
+     * Create an input surface for recording.
+     *
+     * @param[out] producer The associated producer end of the buffer queue.
+     * @param[out] source The associated `IGraphicBufferSource`.
+     */
+    createInputSurface(
+        ) generates (
+            Status status,
+            IOmxBufferProducer producer,
+            IGraphicBufferSource source
+        );
 };
 
diff --git a/media/omx/1.0/IOmxBufferProducer.hal b/media/omx/1.0/IOmxBufferProducer.hal
new file mode 100644
index 0000000..7e2172b
--- /dev/null
+++ b/media/omx/1.0/IOmxBufferProducer.hal
@@ -0,0 +1,709 @@
+/*
+ * 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.media.omx@1.0;
+
+import android.hardware.graphics.common@1.0::Dataspace;
+import android.hardware.graphics.common@1.0::PixelFormat;
+
+import android.hardware.media@1.0::types;
+import IOmxProducerListener;
+
+/**
+ * Ref: frameworks/native/include/gui/IGraphicBufferProducer.h:
+ *      IGraphicBufferProducer
+ * This is a wrapper/wrapped HAL interface for the actual binder interface.
+ */
+interface IOmxBufferProducer {
+
+    /**
+     * Ref: frameworks/native/include/ui/FenceTime.h: FenceTime::Snapshot
+     *
+     * An atomic snapshot of the FenceTime that is flattenable.
+     */
+    struct FenceTimeSnapshot {
+        enum State : int32_t {
+            EMPTY,
+            FENCE,
+            SIGNAL_TIME,
+        };
+        State state;
+        Fence fence;
+        int64_t signalTimeNs;
+    };
+
+    /**
+     * Ref: frameworks/native/include/gui/FrameTimestamp.h: FrameEventsDelta
+     *
+     * A single frame update from the consumer to producer that can be sent
+     * through a HIDL interface. Although this may be sent multiple times for
+     * the same frame as new timestamps are set, Fences only need to be sent
+     * once.
+     */
+    struct FrameEventsDelta {
+        uint32_t index;
+        uint64_t frameNumber;
+        bool addPostCompositeCalled;
+        bool addRetireCalled;
+        bool addReleaseCalled;
+        int64_t postedTimeNs;
+        int64_t requestedPresentTimeNs;
+        int64_t latchTimeNs;
+        int64_t firstRefreshStartTimeNs;
+        int64_t lastRefreshStartTimeNs;
+        int64_t dequeueReadyTime;
+        FenceTimeSnapshot gpuCompositionDoneFence;
+        FenceTimeSnapshot displayPresentFence;
+        FenceTimeSnapshot displayRetireFence;
+        FenceTimeSnapshot releaseFence;
+    };
+
+    /**
+     * Ref: frameworks/native/include/gui/FrameTimestamp.h: CompositorTiming
+     *
+     * The most recent compositor timing info sent from consumer to producer
+     * through a HIDL interface.
+     */
+    struct CompositorTiming {
+        int64_t deadlineNs;
+        int64_t intervalNs;
+        int64_t presentLatencyNs;
+    };
+
+    /**
+     * Ref: frameworks/native/include/gui/FrameTimestamp.h: FrameEventHistoryDelta
+     *
+     * A collection of updates from consumer to producer that can be sent
+     * through a HIDL interface.
+     */
+    struct FrameEventHistoryDelta {
+        vec<FrameEventsDelta> deltas;
+        CompositorTiming compositorTiming;
+    };
+
+    /**
+     * Modes for disconnection.
+     */
+    enum DisconnectMode : int32_t {
+        /** Disconnect only the specified API. */
+        API,
+        /** Disconnect any API originally connected from the process calling
+         *  disconnect. */
+        ALL_LOCAL
+    };
+
+    struct QueueBufferInput {
+        /** A monotonically increasing value in nanoseconds. */
+        int64_t timestamp;
+        /** Whether the timestamp was synthesized at queue time. */
+        int32_t isAutoTimestamp;
+        /** Description of the contents, interpretation depends on format. */
+        Dataspace dataSpace;
+        /** A crop rectangle that's used as a hint to the consumer. */
+        Rect crop;
+        /** A set of flags from NATIVE_WINDOW_SCALING_* in <window.h>. */
+        int32_t scalingMode;
+        /** A set of flags from NATIVE_WINDOW_TRANSFORM_* in <window.h>. */
+        uint32_t transform;
+        /** The sticky transform set in Surface (only used by the LEGACY camera
+         *  mode). */
+        uint32_t stickyTransform;
+        /** A fence that the consumer must wait on before reading the buffer;
+         *  set this to Fence::NO_FENCE if the buffer is ready immediately. */
+        Fence fence;
+        Region surfaceDamage;
+        /** Whether or not the latest frame timestamps should be retrieved from
+         *  the consumer. */
+        bool getFrameTimestamps;
+    };
+
+    struct QueueBufferOutput {
+        uint32_t width;
+        uint32_t height;
+        uint32_t transformHint;
+        uint32_t numPendingBuffers;
+        uint64_t nextFrameNumber;
+        bool bufferReplaced;
+        FrameEventHistoryDelta frameTimestamps;
+    };
+
+    /**
+     * requestBuffer requests a new buffer for the given index. The server (i.e.
+     * the IOmxBufferProducer implementation) assigns the newly created
+     * buffer to the given slot index, and the client is expected to mirror the
+     * slot->buffer mapping so that it's not necessary to transfer an
+     * AnwBuffer for every dequeue operation.
+     *
+     * The slot must be in the range of [0, NUM_BUFFER_SLOTS).
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned or the producer is not
+     *             connected.
+     * * BAD_VALUE - one of the two conditions occurred:
+     *              * slot was out of range (see above)
+     *              * buffer specified by the slot is not dequeued
+     */
+    requestBuffer(
+            int32_t slot
+        ) generates (
+            Status status,
+            AnwBuffer buffer
+        );
+
+    /**
+     * setMaxDequeuedBufferCount sets the maximum number of buffers that can be
+     * dequeued by the producer at one time. If this method succeeds, any new
+     * buffer slots will be both unallocated and owned by the BufferQueue object
+     * (i.e. they are not owned by the producer or consumer). Calling this may
+     * also cause some buffer slots to be emptied. If the caller is caching the
+     * contents of the buffer slots, it should empty that cache after calling
+     * this method.
+     *
+     * This function should not be called with a value of maxDequeuedBuffers
+     * that is less than the number of currently dequeued buffer slots. Doing so
+     * will result in a BAD_VALUE error.
+     *
+     * The buffer count should be at least 1 (inclusive), but at most
+     * (NUM_BUFFER_SLOTS - the minimum undequeued buffer count) (exclusive). The
+     * minimum undequeued buffer count can be obtained by calling
+     * query(NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS).
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned.
+     * * BAD_VALUE - one of the below conditions occurred:
+     *     * bufferCount was out of range (see above).
+     *     * client would have more than the requested number of dequeued
+     *       buffers after this call.
+     *     * this call would cause the maxBufferCount value to be exceeded.
+     *     * failure to adjust the number of available slots.
+     */
+    setMaxDequeuedBufferCount(
+            int32_t maxDequeuedBuffers
+        ) generates (
+            Status status
+        );
+
+    /**
+     * Set the async flag if the producer intends to asynchronously queue
+     * buffers without blocking. Typically this is used for triple-buffering
+     * and/or when the swap interval is set to zero.
+     *
+     * Enabling async mode will internally allocate an additional buffer to
+     * allow for the asynchronous behavior. If it is not enabled queue/dequeue
+     * calls may block.
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned.
+     * * BAD_VALUE - one of the following has occurred:
+     *             * this call would cause the maxBufferCount value to be
+     *               exceeded
+     *             * failure to adjust the number of available slots.
+     */
+    setAsyncMode(
+            bool async
+        ) generates (
+            Status status
+        );
+
+    /**
+     * dequeueBuffer requests a new buffer slot for the client to use. Ownership
+     * of the slot is transfered to the client, meaning that the server will not
+     * use the contents of the buffer associated with that slot.
+     *
+     * The slot index returned may or may not contain a buffer (client-side).
+     * If the slot is empty the client should call requestBuffer to assign a new
+     * buffer to that slot.
+     *
+     * Once the client is done filling this buffer, it is expected to transfer
+     * buffer ownership back to the server with either cancelBuffer on
+     * the dequeued slot or to fill in the contents of its associated buffer
+     * contents and call queueBuffer.
+     *
+     * If dequeueBuffer returns the BUFFER_NEEDS_REALLOCATION flag, the client is
+     * expected to call requestBuffer immediately.
+     *
+     * If dequeueBuffer returns the RELEASE_ALL_BUFFERS flag, the client is
+     * expected to release all of the mirrored slot->buffer mappings.
+     *
+     * The fence parameter will be updated to hold the fence associated with
+     * the buffer. The contents of the buffer must not be overwritten until the
+     * fence signals. If the fence is Fence::NO_FENCE, the buffer may be written
+     * immediately.
+     *
+     * The width and height parameters must be no greater than the minimum of
+     * GL_MAX_VIEWPORT_DIMS and GL_MAX_TEXTURE_SIZE (see: glGetIntegerv).
+     * An error due to invalid dimensions might not be reported until
+     * updateTexImage() is called.  If width and height are both zero, the
+     * default values specified by setDefaultBufferSize() are used instead.
+     *
+     * If the format is 0, the default format will be used.
+     *
+     * The usage argument specifies gralloc buffer usage flags.  The values
+     * are enumerated in <gralloc.h>, e.g. GRALLOC_USAGE_HW_RENDER.  These
+     * will be merged with the usage flags specified by
+     * IGraphicBufferConsumer::setConsumerUsageBits.
+     *
+     * This call will block until a buffer is available to be dequeued. If
+     * both the producer and consumer are controlled by the app, then this call
+     * can never block and will return WOULD_BLOCK if no buffer is available.
+     *
+     * A non-negative value with flags set (see above) will be returned upon
+     * success as status.
+     *
+     * Return of a negative means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned or the producer is not
+     *             connected.
+     * * BAD_VALUE - both in async mode and buffer count was less than the
+     *               max numbers of buffers that can be allocated at once.
+     * * INVALID_OPERATION - cannot attach the buffer because it would cause
+     *                       too many buffers to be dequeued, either because
+     *                       the producer already has a single buffer dequeued
+     *                       and did not set a buffer count, or because a
+     *                       buffer count was set and this call would cause
+     *                       it to be exceeded.
+     * * WOULD_BLOCK - no buffer is currently available, and blocking is disabled
+     *                 since both the producer/consumer are controlled by app
+     * * NO_MEMORY - out of memory, cannot allocate the graphics buffer.
+     * * TIMED_OUT - the timeout set by setDequeueTimeout was exceeded while
+     *               waiting for a buffer to become available.
+     *
+     * All other negative values are an unknown error returned downstream
+     * from the graphics allocator (typically errno).
+     */
+    dequeueBuffer(
+            uint32_t width,
+            uint32_t height,
+            PixelFormat format,
+            uint32_t usage,
+            bool getFrameTimestamps
+        ) generates (
+            Status status,
+            int32_t slot,
+            Fence fence,
+            FrameEventHistoryDelta outTimestamps
+        );
+
+    /**
+     * detachBuffer attempts to remove all ownership of the buffer in the given
+     * slot from the buffer queue. If this call succeeds, the slot will be
+     * freed, and there will be no way to obtain the buffer from this interface.
+     * The freed slot will remain unallocated until either it is selected to
+     * hold a freshly allocated buffer in dequeueBuffer or a buffer is attached
+     * to the slot. The buffer must have already been dequeued, and the caller
+     * must already possesses the sp<AnwBuffer> (i.e., must have called
+     * requestBuffer).
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned or the producer is not
+     *             connected.
+     * * BAD_VALUE - the given slot number is invalid, either because it is
+     *               out of the range [0, NUM_BUFFER_SLOTS), or because the slot
+     *               it refers to is not currently dequeued and requested.
+     */
+    detachBuffer(
+            int32_t slot
+        ) generates (
+            Status status
+        );
+
+    /**
+     * detachNextBuffer is equivalent to calling dequeueBuffer, requestBuffer,
+     * and detachBuffer in sequence, except for two things:
+     *
+     * 1) It is unnecessary to know the dimensions, format, or usage of the
+     *    next buffer.
+     * 2) It will not block, since if it cannot find an appropriate buffer to
+     *    return, it will return an error instead.
+     *
+     * Only slots that are free but still contain an AnwBuffer will be
+     * considered, and the oldest of those will be returned. buffer is
+     * equivalent to buffer from the requestBuffer call, and fence is
+     * equivalent to fence from the dequeueBuffer call.
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned or the producer is not
+     *             connected.
+     * * BAD_VALUE - either outBuffer or outFence were NULL.
+     * * NO_MEMORY - no slots were found that were both free and contained a
+     *               AnwBuffer.
+     */
+    detachNextBuffer(
+        ) generates (
+            Status status,
+            AnwBuffer buffer,
+            Fence fence
+        );
+
+    /**
+     * attachBuffer attempts to transfer ownership of a buffer to the buffer
+     * queue. If this call succeeds, it will be as if this buffer was dequeued
+     * from the returned slot number. As such, this call will fail if attaching
+     * this buffer would cause too many buffers to be simultaneously dequeued.
+     *
+     * If attachBuffer returns the RELEASE_ALL_BUFFERS flag, the caller is
+     * expected to release all of the mirrored slot->buffer mappings.
+     *
+     * A non-negative value with flags set (see above) will be returned upon
+     * success.
+     *
+     * Return of a negative value means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned or the producer is not
+     *             connected.
+     * * BAD_VALUE - outSlot or buffer were NULL, invalid combination of
+     *               async mode and buffer count override, or the generation
+     *               number of the buffer did not match the buffer queue.
+     * * INVALID_OPERATION - cannot attach the buffer because it would cause
+     *                       too many buffers to be dequeued, either because
+     *                       the producer already has a single buffer dequeued
+     *                       and did not set a buffer count, or because a
+     *                       buffer count was set and this call would cause
+     *                       it to be exceeded.
+     * * WOULD_BLOCK - no buffer slot is currently available, and blocking is
+     *                 disabled since both the producer/consumer are
+     *                 controlled by the app.
+     * * TIMED_OUT - the timeout set by setDequeueTimeout was exceeded while
+     *               waiting for a slot to become available.
+     */
+    attachBuffer(
+            AnwBuffer buffer
+        ) generates (
+            Status status,
+            int32_t slot
+        );
+
+    /**
+     * queueBuffer indicates that the client has finished filling in the
+     * contents of the buffer associated with slot and transfers ownership of
+     * that slot back to the server.
+     *
+     * It is not valid to call queueBuffer on a slot that is not owned
+     * by the client or one for which a buffer associated via requestBuffer
+     * (an attempt to do so will fail with a return value of BAD_VALUE).
+     *
+     * In addition, the input must be described by the client (as documented
+     * below). Any other properties (zero point, etc)
+     * are client-dependent, and should be documented by the client.
+     *
+     * The slot must be in the range of [0, NUM_BUFFER_SLOTS).
+     *
+     * Upon success, the output will be filled with meaningful values
+     * (refer to the documentation below).
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned or the producer is not
+     *             connected.
+     * * BAD_VALUE - one of the below conditions occurred:
+     *              * fence was NULL
+     *              * scaling mode was unknown
+     *              * both in async mode and buffer count was less than the
+     *                max numbers of buffers that can be allocated at once
+     *              * slot index was out of range (see above).
+     *              * the slot was not in the dequeued state
+     *              * the slot was enqueued without requesting a buffer
+     *              * crop rect is out of bounds of the buffer dimensions
+     */
+    queueBuffer(
+            int32_t slot,
+            QueueBufferInput input
+        ) generates (
+            Status status,
+            QueueBufferOutput output
+        );
+
+    /**
+     * cancelBuffer indicates that the client does not wish to fill in the
+     * buffer associated with slot and transfers ownership of the slot back to
+     * the server.
+     *
+     * The buffer is not queued for use by the consumer.
+     *
+     * The slot must be in the range of [0, NUM_BUFFER_SLOTS).
+     *
+     * The buffer will not be overwritten until the fence signals.  The fence
+     * will usually be the one obtained from dequeueBuffer.
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned or the producer is not
+     *             connected.
+     * * BAD_VALUE - one of the below conditions occurred:
+     *              * fence was NULL
+     *              * slot index was out of range (see above).
+     *              * the slot was not in the dequeued state
+     */
+    cancelBuffer(
+            int32_t slot,
+            Fence fence
+        ) generates (
+            Status status
+        );
+
+    /**
+     * query retrieves some information for this surface
+     * 'what' tokens allowed are that of NATIVE_WINDOW_* in <window.h>
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * NO_INIT - the buffer queue has been abandoned.
+     * * BAD_VALUE - what was out of range
+     */
+    query(
+            int32_t what
+        ) generates (
+            int32_t result,
+            int32_t value
+        );
+
+    /**
+     * connect attempts to connect a client API to the IOmxBufferProducer.
+     * This must be called before any other IOmxBufferProducer methods are
+     * called except for getAllocator. A consumer must be already connected.
+     *
+     * This method will fail if the connect was previously called on the
+     * IOmxBufferProducer and no corresponding disconnect call was made.
+     *
+     * The listener is an optional binder callback object that can be used if
+     * the producer wants to be notified when the consumer releases a buffer
+     * back to the BufferQueue. It is also used to detect the death of the
+     * producer. If only the latter functionality is desired, there is a
+     * DummyProducerListener class in IProducerListener.h that can be used.
+     *
+     * The api should be one of the NATIVE_WINDOW_API_* values in <window.h>
+     *
+     * The producerControlledByApp should be set to true if the producer is hosted
+     * by an untrusted process (typically app_process-forked processes). If both
+     * the producer and the consumer are app-controlled then all buffer queues
+     * will operate in async mode regardless of the async flag.
+     *
+     * Upon success, the output will be filled with meaningful data
+     * (refer to QueueBufferOutput documentation above).
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * NO_INIT - one of the following occurred:
+     *             * the buffer queue was abandoned
+     *             * no consumer has yet connected
+     * * BAD_VALUE - one of the following has occurred:
+     *             * the producer is already connected
+     *             * api was out of range (see above).
+     *             * output was NULL.
+     *             * Failure to adjust the number of available slots. This can
+     *               happen because of trying to allocate/deallocate the async
+     *               buffer in response to the value of producerControlledByApp.
+     * * DEAD_OBJECT - the token is hosted by an already-dead process
+     *
+     * Additional negative errors may be returned by the internals, they
+     * should be treated as opaque fatal unrecoverable errors.
+     */
+    connect(
+            IOmxProducerListener listener,
+            int32_t api,
+            bool producerControlledByApp
+        ) generates (
+            Status status,
+            QueueBufferOutput output
+        );
+
+    /**
+     * disconnect attempts to disconnect a client API from the
+     * IOmxBufferProducer.  Calling this method will cause any subsequent
+     * calls to other IOmxBufferProducer methods to fail except for
+     * getAllocator and connect.  Successfully calling connect after this will
+     * allow the other methods to succeed again.
+     *
+     * The api should be one of the NATIVE_WINDOW_API_* values in <window.h>
+     *
+     * Alternatively if mode is AllLocal, then the API value is ignored, and any API
+     * connected from the same PID calling disconnect will be disconnected.
+     *
+     * Disconnecting from an abandoned IOmxBufferProducer is legal and
+     * is considered a no-op.
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * BAD_VALUE - one of the following has occurred:
+     *             * the api specified does not match the one that was connected
+     *             * api was out of range (see above).
+     * * DEAD_OBJECT - the token is hosted by an already-dead process
+     */
+    disconnect(
+            int32_t api,
+            DisconnectMode mode /* = DisconnectMode::API */
+        ) generates (
+            Status status
+        );
+
+    /**
+     * Attaches a sideband buffer stream to the IOmxBufferProducer.
+     *
+     * A sideband stream is a device-specific mechanism for passing buffers
+     * from the producer to the consumer without using dequeueBuffer/
+     * queueBuffer. If a sideband stream is present, the consumer can choose
+     * whether to acquire buffers from the sideband stream or from the queued
+     * buffers.
+     *
+     * Passing NULL or a different stream handle will detach the previous
+     * handle if any.
+     */
+    setSidebandStream(
+            handle stream
+        ) generates (
+            Status status
+        );
+
+    /**
+     * Allocates buffers based on the given dimensions/format.
+     *
+     * This function will allocate up to the maximum number of buffers
+     * permitted by the current BufferQueue configuration. It will use the
+     * given format, dimensions, and usage bits, which are interpreted in the
+     * same way as for dequeueBuffer, and the async flag must be set the same
+     * way as for dequeueBuffer to ensure that the correct number of buffers are
+     * allocated. This is most useful to avoid an allocation delay during
+     * dequeueBuffer. If there are already the maximum number of buffers
+     * allocated, this function has no effect.
+     */
+    allocateBuffers(
+            uint32_t width,
+            uint32_t height,
+            PixelFormat format,
+            uint32_t usage
+        );
+
+    /**
+     * Sets whether dequeueBuffer is allowed to allocate new buffers.
+     *
+     * Normally dequeueBuffer does not discriminate between free slots which
+     * already have an allocated buffer and those which do not, and will
+     * allocate a new buffer if the slot doesn't have a buffer or if the slot's
+     * buffer doesn't match the requested size, format, or usage. This method
+     * allows the producer to restrict the eligible slots to those which already
+     * have an allocated buffer of the correct size, format, and usage. If no
+     * eligible slot is available, dequeueBuffer will block or return an error
+     * as usual.
+     */
+    allowAllocation(
+            bool allow
+        ) generates (
+            Status status
+        );
+
+    /**
+     * Sets the current generation number of the BufferQueue.
+     *
+     * This generation number will be inserted into any buffers allocated by the
+     * BufferQueue, and any attempts to attach a buffer with a different
+     * generation number will fail. Buffers already in the queue are not
+     * affected and will retain their current generation number. The generation
+     * number defaults to 0.
+     */
+    setGenerationNumber(
+            uint32_t generationNumber
+        ) generates (
+            Status status
+        );
+
+    /**
+     * Returns the name of the connected consumer.
+     */
+    getConsumerName(
+        ) generates (
+            string name
+        );
+
+    /**
+     * Used to enable/disable shared buffer mode.
+     *
+     * When shared buffer mode is enabled the first buffer that is queued or
+     * dequeued will be cached and returned to all subsequent calls to
+     * dequeueBuffer and acquireBuffer. This allows the producer and consumer to
+     * simultaneously access the same buffer.
+     */
+    setSharedBufferMode(
+            bool sharedBufferMode
+        ) generates (
+            Status status
+        );
+
+    /**
+     * Used to enable/disable auto-refresh.
+     *
+     * Auto refresh has no effect outside of shared buffer mode. In shared
+     * buffer mode, when enabled, it indicates to the consumer that it should
+     * attempt to acquire buffers even if it is not aware of any being
+     * available.
+     */
+    setAutoRefresh(
+            bool autoRefresh
+        ) generates (
+            Status status
+        );
+
+    /**
+     * Sets how long dequeueBuffer will wait for a buffer to become available
+     * before returning an error (TIMED_OUT).
+     *
+     * This timeout also affects the attachBuffer call, which will block if
+     * there is not a free slot available into which the attached buffer can be
+     * placed.
+     *
+     * By default, the BufferQueue will wait forever, which is indicated by a
+     * timeout of -1. If set (to a value other than -1), this will disable
+     * non-blocking mode and its corresponding spare buffer (which is used to
+     * ensure a buffer is always available).
+     *
+     * Return of a value other than NO_ERROR means an error has occurred:
+     * * BAD_VALUE - Failure to adjust the number of available slots. This can
+     *               happen because of trying to allocate/deallocate the async
+     *               buffer.
+     */
+    setDequeueTimeout(
+            int64_t timeoutNs
+        ) generates (
+            Status status
+        );
+
+    /**
+     * Returns the last queued buffer along with a fence which must signal
+     * before the contents of the buffer are read. If there are no buffers in
+     * the queue, buffer.nativeHandle and fence will be null handles.
+     *
+     * transformMatrix is meaningless if buffer.nativeHandle is null.
+     */
+    getLastQueuedBuffer(
+        ) generates (
+            Status status,
+            AnwBuffer buffer,
+            Fence fence,
+            float[16] transformMatrix
+        );
+
+    /**
+     * Gets the frame events that haven't already been retrieved.
+     */
+    getFrameTimestamps(
+        ) generates (
+            FrameEventHistoryDelta timeStamps
+        );
+
+    /**
+     * Returns a unique id for this BufferQueue.
+     */
+    getUniqueId(
+        ) generates (
+            Status status,
+            uint64_t outId
+        );
+
+};
+
+
diff --git a/media/omx/1.0/IOmxNode.hal b/media/omx/1.0/IOmxNode.hal
index 5945b44..8729637 100644
--- a/media/omx/1.0/IOmxNode.hal
+++ b/media/omx/1.0/IOmxNode.hal
@@ -35,7 +35,7 @@
     /**
      * Free the node.
      *
-     * @param[out] status will be the status of the call.
+     * @param[out] status Status of the call.
      */
     freeNode(
         ) generates (
@@ -45,9 +45,9 @@
     /**
      * Invoke a command on the node.
      *
-     * @param[in] cmd indicates the type of the command.
-     * @param[in] param is a parameter for the command.
-     * @param[out] status will be the status of the call.
+     * @param[in] cmd Type of the command.
+     * @param[in] param Parameter for the command.
+     * @param[out] status Status of the call.
      *
      * @see OMX_SendCommand() in the OpenMax IL standard.
      */
@@ -61,33 +61,33 @@
     /**
      * Retrieve a parameter setting from the node.
      *
-     * @param[in] index indicates the type of the parameter to retrieve.
-     * @param[in] inParams holds some information about the retrieval.
-     * @param[out] status will be the status of the call.
-     * @param[out] outParams will be the current parameter setting.
+     * @param[in] index Type of the parameter to retrieve.
+     * @param[in] inParams Information about the retrieval.
+     * @param[out] status Status of the call.
+     * @param[out] outParams Current parameter setting.
      *
      * @see OMX_GetParameter() in the OpenMax IL standard.
      */
     getParameter(
             uint32_t index,
-            Bytes inParams // TODO: describe structure better or point at standard
+            Bytes inParams
         ) generates (
             Status status,
-            Bytes outParams // TODO: describe structure better or point at standard
+            Bytes outParams
         );
 
     /**
      * Change a parameter setting of the node.
      *
-     * @param[in] index indicates the type of the parameter to change.
-     * @param[in] params holds the new parameter setting.
-     * @param[out] status will be the status of the call.
+     * @param[in] index Type of the parameter to change.
+     * @param[in] params New parameter setting.
+     * @param[out] status Status of the call.
      *
      * @see OMX_SetParameter() in the OpenMax IL standard.
      */
     setParameter(
             uint32_t index,
-            Bytes params // TODO: describe structure better or point at standard
+            Bytes params
         ) generates (
             Status status
         );
@@ -95,33 +95,33 @@
     /**
      * Retrieve a configuration from the node.
      *
-     * @param[in] index indicates the type of the configuration to retrieve.
-     * @param[in] inConfig holds some information about the retrieval.
-     * @param[out] status will be the status of the call.
-     * @param[out] outConfig will be the current configuration.
+     * @param[in] index Type of the configuration to retrieve.
+     * @param[in] inConfig Information about the retrieval.
+     * @param[out] status Status of the call.
+     * @param[out] outConfig Current configuration.
      *
      * @see OMX_GetConfig() in the OpenMax IL standard.
      */
     getConfig(
             uint32_t index,
-            Bytes inConfig // TODO: describe structure better or point at standard
+            Bytes inConfig
         ) generates (
             Status status,
-            Bytes outConfig // TODO: describe structure better or point at standard
+            Bytes outConfig
         );
 
     /**
      * Change a configuration of the node.
      *
-     * @param[in] index indicates the type of the configuration to change.
-     * @param[in] config holds the new configuration.
-     * @param[out] status will be the status of the call.
+     * @param[in] index Type of the configuration to change.
+     * @param[in] config New configuration.
+     * @param[out] status Status of the call.
      *
      * @see OMX_SetConfig() in the OpenMax IL standard.
      */
     setConfig(
             uint32_t index,
-            Bytes config // TODO: describe structure better or point at standard
+            Bytes config
         ) generates (
             Status status
         );
@@ -129,8 +129,9 @@
     /**
      * Set the mode of a port on the node.
      *
-     * @param[in] portIndex is the index of the port.
-     * @param[in] mode is the target mode on the specified port.
+     * @param[in] portIndex Index of the port.
+     * @param[in] mode Target mode on the specified port.
+     * @param[out] status Status of the call.
      */
     setPortMode(
             uint32_t portIndex,
@@ -143,11 +144,11 @@
      * Prepare a port for adaptive playback. This is based on the extension
      * "OMX.google.android.index.prepareForAdaptivePlayback".
      *
-     * @param[in] portIndex is the index of the port.
-     * @param[in] enable indicates whether adaptive playback is enabled or not.
-     * @param[in] maxFrameWidth specifies the maximum frame width.
-     * @param[in] maxFrameHeight specifies the maximum frame height.
-     * @param[out] status status will be the status of the call.
+     * @param[in] portIndex Index of the port.
+     * @param[in] enable Whether the adaptive playback is enabled or not.
+     * @param[in] maxFrameWidth Maximum frame width.
+     * @param[in] maxFrameHeight Maximum frame height.
+     * @param[out] status Status of the call.
      */
     prepareForAdaptivePlayback(
             uint32_t portIndex,
@@ -162,13 +163,12 @@
      * Configure a port for a tunneled playback mode. This is based on the
      * extension "OMX.google.android.index.configureVideoTunnelMode".
      *
-     * @param[in] portIndex is the index of the port.
-     * @param[in] tunneled indicates whether the tunneled mode is used or not.
-     * @param[in] audioHwSync is the HW SYNC ID of the audio HAL output stream
-     * to sync the video with.
-     * @param[out] status will be the status of the call.
-     * @param[out] sidebandHandle will contain the codec-allocated sideband
-     * window handle.
+     * @param[in] portIndex Index of the port.
+     * @param[in] tunneled Whether the tunneled mode is used or not.
+     * @param[in] audioHwSync HW SYNC ID of the audio HAL output stream to sync
+     * the video with.
+     * @param[out] status Status of the call.
+     * @param[out] sidebandHandle Codec-allocated sideband window handle.
      */
     configureVideoTunnelMode(
             uint32_t portIndex,
@@ -183,23 +183,23 @@
      * Retrieve the buffer usage on a port. This is based on the extension
      * "OMX.google.android.index.getAndroidNativeBufferUsage".
      *
-     * @param[in] portIndex is the index of the port.
-     * @param[out] status will be the status of the call.
-     * @param[out] usage will be the usage.
+     * @param[in] portIndex Index of the port.
+     * @param[out] status Status of the call.
+     * @param[out] usage Current graphic buffer usage.
      */
     getGraphicBufferUsage(
             uint32_t portIndex
         ) generates (
             Status status,
-            uint32_t usage // TODO: Ask graphics team to define an enum.
+            uint32_t usage
         );
 
     /**
      * Set up a listener to events related to the input surface.
      *
-     * @param[in] bufferSource is the listener object that implements
+     * @param[in] bufferSource Listener object that implements
      * IOmxBufferSource.
-     * @param[out] status will be the status of the call.
+     * @param[out] status Status of the call.
      *
      * @see IOmxBufferSource.
      */
@@ -212,13 +212,12 @@
     /**
      * Allocate an opaque buffer on a port as a native handle.
      *
-     * @param[in] portIndex is the index of the port.
-     * @param[in] size is the desired size of the buffer.
-     * @param[out] status will be the status of the call.
-     * @param[out] buffer will be the id of the allocated buffer, which will be
-     * needed in some other buffer-related function calls.
-     * @param[out] nativeHandle will be the native handle of the allocated
-     * buffer.
+     * @param[in] portIndex Index of the port.
+     * @param[in] size Desired size of the buffer.
+     * @param[out] status Status of the call.
+     * @param[out] buffer Id of the allocated buffer, which will be needed in
+     * other buffer-related functions.
+     * @param[out] nativeHandle Native handle of the allocated buffer.
      *
      * @see OMX_AllocateBuffer() in the OpenMax IL standard.
      */
@@ -234,11 +233,11 @@
     /**
      * Assign a buffer to a port.
      *
-     * @param[in] portIndex is the index of the port.
-     * @param[in] omxBuffer is the buffer to be assigned to the port.
-     * @param[out] status will be the status of the call.
-     * @param[out] buffer will be the id of the assigned buffer, which will be
-     * needed in some other buffer-related function calls.
+     * @param[in] portIndex Index of the port.
+     * @param[in] omxBuffer Buffer to be assigned to the port.
+     * @param[out] status Status of the call.
+     * @param[out] buffer Id of the assigned buffer, which will be needed in
+     * other buffer-related functions.
      *
      * @see OMX_UseBuffer() in the OpenMax IL standard.
      */
@@ -254,9 +253,9 @@
      * Free a buffer previously assigned to a port by allocateSecureBuffer() or
      * useBuffer().
      *
-     * @param[in] portIndex is the index of the port.
-     * @param[in] buffer is the id of the buffer to be freed.
-     * @param[out] status will be the status of the call.
+     * @param[in] portIndex Index of the port.
+     * @param[in] buffer Id of the buffer to be freed.
+     * @param[out] status Status of the call.
      *
      * @see OMX_FreeBuffer() in the OpenMax IL standard.
      */
@@ -276,10 +275,10 @@
      * the new buffer passed in via \p omxBuffer before OMX_FillThisBuffer() is
      * called. Otherwise, \p omxBuffer is not used.
      *
-     * @param[in] buffer is the id of the buffer to fill.
-     * @param[in] omxBuffer points to the new buffer in metadata mode.
-     * @param[in] fence is the fence to wait for (if not null).
-     * @param[out] status is the status of the call.
+     * @param[in] buffer Id of the buffer to fill.
+     * @param[in] omxBuffer New buffer information (in metadata mode).
+     * @param[in] fence Fence to wait for (if not null).
+     * @param[out] status Status of the call.
      *
      * @see OMX_FillThisBuffer() in the OpenMax IL standard.
      */
@@ -300,21 +299,19 @@
      * the new buffer passed in via \p omxBuffer before OMX_EmptyThisBuffer() is
      * called. Otherwise, \p omxBuffer is not used.
      *
-     * @param[in] buffer is the id of the buffer to fill.
-     * @param[in] omxBuffer points to the new buffer in metadata mode.
-     * @param[in] flags is put into the header information that is passed to
-     * OMX_EmptyBuffer().
-     * @param[in] timestampUs is put into the header information that is passed
-     * to OMX_EmptyBuffer().
-     * @param[in] fence is the fence to wait for (if not null).
-     * @param[out] status is the status of the call.
+     * @param[in] buffer Id of the buffer to fill.
+     * @param[in] omxBuffer New buffer information (in metadata mode).
+     * @param[in] flags Flags to be passed to OMX_EmptyBuffer().
+     * @param[in] timestampUs Timestamp OMX_EmptyBuffer().
+     * @param[in] fence Fence to wait for (if not null).
+     * @param[out] status Status of the call.
      *
      * @see OMX_EmptyThisBuffer() in the OpenMax IL standard.
      */
     emptyBuffer(
             BufferId buffer,
             CodecBuffer omxBuffer,
-            uint32_t flags, // TODO: describe structure better or point at standard
+            uint32_t flags,
             uint64_t timestampUs,
             Fence fence
         ) generates (
@@ -324,9 +321,9 @@
     /**
      * Request the node to translate an extension string to an index.
      *
-     * @param[in] parameterName is the requested extension string.
-     * @param[out] status is the status of the call.
-     * @param[out] index is the translated index.
+     * @param[in] parameterName Requested extension string.
+     * @param[out] status Status of the call.
+     * @param[out] index Translated index.
      *
      * @see OMX_GetExtensionIndex() in the OpenMax IL standard.
      */
@@ -343,8 +340,8 @@
      * receive the message in batches by the callback
      * IOmxObserver::onMessages().
      *
-     * @param[in] msg is the message to send.
-     * @param[out] status is the status of the call.
+     * @param[in] msg Message to send.
+     * @param[out] status Status of the call.
      *
      * @see IOmxObserver::onMessages().
      */
@@ -354,5 +351,15 @@
             Status status
         );
 
+    /**
+     * Set quirks.
+     *
+     * @param[in] quirks Quirks for the component, generally obtained from
+     * MediaCodecList::getQuirksFor().
+     */
+    oneway setQuirks(
+            uint32_t quirks
+        );
+
 };
 
diff --git a/media/omx/1.0/IOmxProducerListener.hal b/media/omx/1.0/IOmxProducerListener.hal
new file mode 100644
index 0000000..7fde93b
--- /dev/null
+++ b/media/omx/1.0/IOmxProducerListener.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.media.omx@1.0;
+
+/**
+ * Ref: frameworks/native/include/gui/IProducerListener.h: IProducerListener
+ * This is a wrapper/wrapped HAL interface for the actual binder interface.
+ */
+interface IOmxProducerListener {
+    oneway onBufferReleased();
+    needsReleaseNotify() generates (bool result);
+};
+
diff --git a/media/omx/1.0/types.hal b/media/omx/1.0/types.hal
index ccb2ddf..5413344 100644
--- a/media/omx/1.0/types.hal
+++ b/media/omx/1.0/types.hal
@@ -33,10 +33,18 @@
     NO_ERROR                = 0,
 
     NAME_NOT_FOUND          = -2,
+    WOULD_BLOCK             = -11,
     NO_MEMORY               = -12,
+    NO_INIT                 = -19,
     BAD_VALUE               = -22,
+    DEAD_OBJECT             = -32,
+    INVALID_OPERATION       = -38,
+    TIMED_OUT               = -110,
     ERROR_UNSUPPORTED       = -1010,
     UNKNOWN_ERROR           = -2147483648,
+
+    BUFFER_NEEDS_REALLOCATION = 0x1,
+    RELEASE_ALL_BUFFERS       = 0x2,
 };
 
 /**
@@ -135,10 +143,11 @@
         PRESET,
         SHARED_MEM,
         ANW_BUFFER,
-        NATIVE_HANDLE
+        NATIVE_HANDLE,
     };
 
     struct PresetAttributes {
+        uint32_t rangeOffset;
         uint32_t rangeLength;
     };
 
@@ -147,7 +156,7 @@
         PresetAttributes preset;
 
         // if bufferType == SHARED_MEM
-        SharedMemoryAttributes sharedMem;
+        // No additional attributes.
 
         // if bufferType == ANW_BUFFER
         AnwBufferAttributes anwBuffer;
@@ -167,14 +176,18 @@
     Attributes attr;
 
     /**
-     * \p nativeHandle is used only for types SHARED_MEM, ANW_BUFFER and
-     * NATIVE_HANDLE.
+     * Used only for types ANW_BUFFER and NATIVE_HANDLE.
      *
      * (A native handle cannot be put into a union as HIDL currently does not
      * support discriminated unions.)
      */
     handle nativeHandle;
 
+    /**
+     * Used only for type SHARED_MEM.
+     */
+    memory sharedMemory;
+
 };
 
 /**
diff --git a/memtrack/1.0/Android.bp b/memtrack/1.0/Android.bp
index 36e7594..9f4c7f6 100644
--- a/memtrack/1.0/Android.bp
+++ b/memtrack/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.memtrack@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IMemtrack.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.memtrack@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.memtrack@1.0",
     srcs: [
-        "types.hal",
-        "IMemtrack.hal",
+        ":android.hardware.memtrack@1.0_hal",
     ],
     out: [
         "android/hardware/memtrack/1.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.memtrack@1.0",
     srcs: [
-        "types.hal",
-        "IMemtrack.hal",
+        ":android.hardware.memtrack@1.0_hal",
     ],
     out: [
         "android/hardware/memtrack/1.0/types.h",
@@ -54,106 +60,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.memtrack.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.memtrack@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/memtrack/1.0/ $(genDir)/android/hardware/memtrack/1.0/",
-    srcs: [
-        "types.hal",
-        "IMemtrack.hal",
-    ],
-    out: [
-        "android/hardware/memtrack/1.0/types.vts.cpp",
-        "android/hardware/memtrack/1.0/Memtrack.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.memtrack.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.memtrack@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/memtrack/1.0/ $(genDir)/android/hardware/memtrack/1.0/",
-    srcs: [
-        "types.hal",
-        "IMemtrack.hal",
-    ],
-    out: [
-        "android/hardware/memtrack/1.0/types.vts.h",
-        "android/hardware/memtrack/1.0/Memtrack.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.memtrack.vts.driver@1.0",
-    generated_sources: ["android.hardware.memtrack.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.memtrack.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.memtrack.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.memtrack@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.memtrack@1.0-IMemtrack-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.memtrack@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/memtrack/1.0/ $(genDir)/android/hardware/memtrack/1.0/",
-    srcs: [
-        "IMemtrack.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/memtrack/1.0/Memtrack.vts.cpp",
-        "android/hardware/memtrack/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.memtrack@1.0-IMemtrack-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.memtrack@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/memtrack/1.0/ $(genDir)/android/hardware/memtrack/1.0/",
-    srcs: [
-        "IMemtrack.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/memtrack/1.0/Memtrack.vts.h",
-        "android/hardware/memtrack/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.memtrack@1.0-IMemtrack-vts.profiler",
-    generated_sources: ["android.hardware.memtrack@1.0-IMemtrack-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.memtrack@1.0-IMemtrack-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.memtrack@1.0-IMemtrack-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.memtrack@1.0",
-    ],
-}
diff --git a/memtrack/1.0/Android.mk b/memtrack/1.0/Android.mk
index eeb67f6..62bee97 100644
--- a/memtrack/1.0/Android.mk
+++ b/memtrack/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.memtrack@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -121,7 +121,7 @@
 LOCAL_MODULE := android.hardware.memtrack@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/memtrack/1.0/default/Android.bp b/memtrack/1.0/default/Android.bp
index 91fa1ea..b43a159 100644
--- a/memtrack/1.0/default/Android.bp
+++ b/memtrack/1.0/default/Android.bp
@@ -14,6 +14,7 @@
 
 cc_library_shared {
     name: "android.hardware.memtrack@1.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["Memtrack.cpp"],
 
@@ -32,6 +33,7 @@
 
 cc_binary {
     relative_install_path: "hw",
+    proprietary: true,
     name: "android.hardware.memtrack@1.0-service",
     init_rc: ["android.hardware.memtrack@1.0-service.rc"],
     srcs: ["service.cpp"],
diff --git a/memtrack/1.0/default/Memtrack.cpp b/memtrack/1.0/default/Memtrack.cpp
index 5c1a5c4..33a6906 100644
--- a/memtrack/1.0/default/Memtrack.cpp
+++ b/memtrack/1.0/default/Memtrack.cpp
@@ -29,7 +29,7 @@
 namespace V1_0 {
 namespace implementation {
 
-Memtrack::Memtrack(memtrack_module_t *module) : mModule(module) {
+Memtrack::Memtrack(const memtrack_module_t *module) : mModule(module) {
     if (mModule)
         mModule->init(mModule);
 }
@@ -73,26 +73,26 @@
 }
 
 
-IMemtrack* HIDL_FETCH_IMemtrack(const char* name) {
-    int ret = 0;
-    const hw_module_t* hw_module = NULL;
-    memtrack_module_t *memtrack_module = NULL;
+IMemtrack* HIDL_FETCH_IMemtrack(const char* /* name */) {
+    const hw_module_t* hw_module = nullptr;
+    const memtrack_module_t* memtrack_module = nullptr;
+    int err = hw_get_module(MEMTRACK_HARDWARE_MODULE_ID, &hw_module);
+    if (err) {
+        ALOGE ("hw_get_module %s failed: %d", MEMTRACK_HARDWARE_MODULE_ID, err);
+        return nullptr;
+    }
 
-    ret = hw_get_module(name, &hw_module);
-    if (ret == 0 && hw_module->methods->open > 0)
-    {
-        ret = hw_module->methods->open(hw_module, name,
-                reinterpret_cast<hw_device_t**>(&memtrack_module));
-        if (ret == 0)
-                return new Memtrack(memtrack_module);
-        else {
+    if (!hw_module->methods || !hw_module->methods->open) {
+        memtrack_module = reinterpret_cast<const memtrack_module_t*>(hw_module);
+    } else {
+        err = hw_module->methods->open(hw_module, MEMTRACK_HARDWARE_MODULE_ID,
+                reinterpret_cast<hw_device_t**>(const_cast<memtrack_module_t**>(&memtrack_module)));
+        if (err) {
             ALOGE("Passthrough failed to load legacy HAL.");
+            return nullptr;
         }
     }
-    else {
-        ALOGE ("hw_get_module %s failed: %d", name, ret);
-    }
-    return nullptr;
+    return new Memtrack(memtrack_module);
 }
 
 } // namespace implementation
diff --git a/memtrack/1.0/default/Memtrack.h b/memtrack/1.0/default/Memtrack.h
index a3c55e4..0adba76 100644
--- a/memtrack/1.0/default/Memtrack.h
+++ b/memtrack/1.0/default/Memtrack.h
@@ -38,12 +38,12 @@
 using ::android::sp;
 
 struct Memtrack : public IMemtrack {
-    Memtrack(memtrack_module_t* module);
+    Memtrack(const memtrack_module_t* module);
     ~Memtrack();
     Return<void> getMemory(int32_t pid, MemtrackType type, getMemory_cb _hidl_cb)  override;
 
   private:
-    memtrack_module_t* mModule;
+    const memtrack_module_t* mModule;
 };
 
 extern "C" IMemtrack* HIDL_FETCH_IMemtrack(const char* name);
diff --git a/memtrack/1.0/default/android.hardware.memtrack@1.0-service.rc b/memtrack/1.0/default/android.hardware.memtrack@1.0-service.rc
index 14e7d00..c975a18 100644
--- a/memtrack/1.0/default/android.hardware.memtrack@1.0-service.rc
+++ b/memtrack/1.0/default/android.hardware.memtrack@1.0-service.rc
@@ -1,4 +1,4 @@
-service memtrack-hal-1-0 /system/bin/hw/android.hardware.memtrack@1.0-service
+service memtrack-hal-1-0 /vendor/bin/hw/android.hardware.memtrack@1.0-service
     class hal
     user system
     group system
diff --git a/memtrack/1.0/default/service.cpp b/memtrack/1.0/default/service.cpp
index f705b15..f079743 100644
--- a/memtrack/1.0/default/service.cpp
+++ b/memtrack/1.0/default/service.cpp
@@ -23,5 +23,5 @@
 using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-    return defaultPassthroughServiceImplementation<IMemtrack>("memtrack");
+    return defaultPassthroughServiceImplementation<IMemtrack>();
 }
diff --git a/memtrack/1.0/vts/Android.mk b/memtrack/1.0/vts/Android.mk
deleted file mode 100644
index 397f946..0000000
--- a/memtrack/1.0/vts/Android.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(LOCAL_PATH)/functional/vts/testcases/hal/memtrack/hidl/target/Android.mk
diff --git a/memtrack/1.0/vts/Memtrack.vts b/memtrack/1.0/vts/Memtrack.vts
deleted file mode 100644
index 9fce2a0..0000000
--- a/memtrack/1.0/vts/Memtrack.vts
+++ /dev/null
@@ -1,33 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IMemtrack"
-
-package: "android.hardware.memtrack"
-
-import: "android.hardware.memtrack@1.0::types"
-
-interface: {
-    api: {
-        name: "getMemory"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::memtrack::V1_0::MemtrackStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::memtrack::V1_0::MemtrackRecord"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::memtrack::V1_0::MemtrackType"
-        }
-    }
-
-}
diff --git a/memtrack/1.0/vts/functional/Android.bp b/memtrack/1.0/vts/functional/Android.bp
index b3e560a..1cbcc59 100644
--- a/memtrack/1.0/vts/functional/Android.bp
+++ b/memtrack/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "memtrack_hidl_hal_test",
+    name: "VtsHalMemtrackV1_0TargetTest",
     gtest: true,
-    srcs: ["memtrack_hidl_hal_test.cpp"],
+    srcs: ["VtsHalMemtrackV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -30,11 +30,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
-    ],
-    ldflags: [
-        "--coverage"
     ]
 }
diff --git a/memtrack/1.0/vts/functional/memtrack_hidl_hal_test.cpp b/memtrack/1.0/vts/functional/VtsHalMemtrackV1_0TargetTest.cpp
similarity index 98%
rename from memtrack/1.0/vts/functional/memtrack_hidl_hal_test.cpp
rename to memtrack/1.0/vts/functional/VtsHalMemtrackV1_0TargetTest.cpp
index 597b5da..a4b4fa9 100644
--- a/memtrack/1.0/vts/functional/memtrack_hidl_hal_test.cpp
+++ b/memtrack/1.0/vts/functional/VtsHalMemtrackV1_0TargetTest.cpp
@@ -37,7 +37,7 @@
 class MemtrackHidlTest : public ::testing::Test {
  public:
   virtual void SetUp() override {
-    memtrack = IMemtrack::getService("memtrack");
+    memtrack = IMemtrack::getService();
     ASSERT_NE(memtrack, nullptr);
   }
 
diff --git a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target/Android.mk b/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target/Android.mk
deleted file mode 100644
index 8dcaabb..0000000
--- a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalMemtrackHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/memtrack/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target/AndroidTest.xml b/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target/AndroidTest.xml
deleted file mode 100644
index 9b00b4c..0000000
--- a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Memtrack HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalMemtrackHidlTargetTest"/>
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/memtrack_hidl_hal_test/memtrack_hidl_hal_test,
-            _64bit::DATA/nativetest64/memtrack_hidl_hal_test/memtrack_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="5m" />
-    </test>
-</configuration>
diff --git a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target_profiling/Android.mk b/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target_profiling/Android.mk
deleted file mode 100644
index d397621..0000000
--- a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalMemtrackHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/memtrack/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target_profiling/AndroidTest.xml b/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index d813be1..0000000
--- a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Memtrack HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalMemtrackHidlTargetProfilingTest"/>
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/memtrack_hidl_hal_test/memtrack_hidl_hal_test,
-            _64bit::DATA/nativetest64/memtrack_hidl_hal_test/memtrack_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="5m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/memtrack/1.0/vts/types.vts b/memtrack/1.0/vts/types.vts
deleted file mode 100644
index bec090f..0000000
--- a/memtrack/1.0/vts/types.vts
+++ /dev/null
@@ -1,121 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.memtrack"
-
-
-attribute: {
-    name: "::android::hardware::memtrack::V1_0::MemtrackFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SMAPS_ACCOUNTED"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "SMAPS_UNACCOUNTED"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "SHARED"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "SHARED_PSS"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "PRIVATE"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "SYSTEM"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "DEDICATED"
-        scalar_value: {
-            uint32_t: 128
-        }
-        enumerator: "NONSECURE"
-        scalar_value: {
-            uint32_t: 256
-        }
-        enumerator: "SECURE"
-        scalar_value: {
-            uint32_t: 512
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::memtrack::V1_0::MemtrackType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "OTHER"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "GL"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "GRAPHICS"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "MULTIMEDIA"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "CAMERA"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "NUM_TYPES"
-        scalar_value: {
-            uint32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::memtrack::V1_0::MemtrackStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "MEMORY_TRACKING_NOT_SUPPORTED"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "TYPE_NOT_SUPPORTED"
-        scalar_value: {
-            uint32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::memtrack::V1_0::MemtrackRecord"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sizeInBytes"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "flags"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
diff --git a/nfc/1.0/Android.bp b/nfc/1.0/Android.bp
index 0fda103..e7305b4 100644
--- a/nfc/1.0/Android.bp
+++ b/nfc/1.0/Android.bp
@@ -1,13 +1,20 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.nfc@1.0_hal",
+    srcs: [
+        "types.hal",
+        "INfc.hal",
+        "INfcClientCallback.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.nfc@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0",
     srcs: [
-        "types.hal",
-        "INfc.hal",
-        "INfcClientCallback.hal",
+        ":android.hardware.nfc@1.0_hal",
     ],
     out: [
         "android/hardware/nfc/1.0/types.cpp",
@@ -21,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0",
     srcs: [
-        "types.hal",
-        "INfc.hal",
-        "INfcClientCallback.hal",
+        ":android.hardware.nfc@1.0_hal",
     ],
     out: [
         "android/hardware/nfc/1.0/types.h",
@@ -62,155 +67,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.nfc.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/nfc/1.0/ $(genDir)/android/hardware/nfc/1.0/",
-    srcs: [
-        "types.hal",
-        "INfc.hal",
-        "INfcClientCallback.hal",
-    ],
-    out: [
-        "android/hardware/nfc/1.0/types.vts.cpp",
-        "android/hardware/nfc/1.0/Nfc.vts.cpp",
-        "android/hardware/nfc/1.0/NfcClientCallback.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.nfc.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/nfc/1.0/ $(genDir)/android/hardware/nfc/1.0/",
-    srcs: [
-        "types.hal",
-        "INfc.hal",
-        "INfcClientCallback.hal",
-    ],
-    out: [
-        "android/hardware/nfc/1.0/types.vts.h",
-        "android/hardware/nfc/1.0/Nfc.vts.h",
-        "android/hardware/nfc/1.0/NfcClientCallback.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.nfc.vts.driver@1.0",
-    generated_sources: ["android.hardware.nfc.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.nfc.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.nfc.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.nfc@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.nfc@1.0-INfc-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/nfc/1.0/ $(genDir)/android/hardware/nfc/1.0/",
-    srcs: [
-        "INfc.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/nfc/1.0/Nfc.vts.cpp",
-        "android/hardware/nfc/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.nfc@1.0-INfc-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/nfc/1.0/ $(genDir)/android/hardware/nfc/1.0/",
-    srcs: [
-        "INfc.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/nfc/1.0/Nfc.vts.h",
-        "android/hardware/nfc/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.nfc@1.0-INfc-vts.profiler",
-    generated_sources: ["android.hardware.nfc@1.0-INfc-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.nfc@1.0-INfc-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.nfc@1.0-INfc-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.nfc@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.nfc@1.0-INfcClientCallback-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/nfc/1.0/ $(genDir)/android/hardware/nfc/1.0/",
-    srcs: [
-        "INfcClientCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/nfc/1.0/NfcClientCallback.vts.cpp",
-        "android/hardware/nfc/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.nfc@1.0-INfcClientCallback-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/nfc/1.0/ $(genDir)/android/hardware/nfc/1.0/",
-    srcs: [
-        "INfcClientCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/nfc/1.0/NfcClientCallback.vts.h",
-        "android/hardware/nfc/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.nfc@1.0-INfcClientCallback-vts.profiler",
-    generated_sources: ["android.hardware.nfc@1.0-INfcClientCallback-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.nfc@1.0-INfcClientCallback-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.nfc@1.0-INfcClientCallback-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.nfc@1.0",
-    ],
-}
diff --git a/nfc/1.0/Android.mk b/nfc/1.0/Android.mk
index 823bde5..6f09764 100644
--- a/nfc/1.0/Android.mk
+++ b/nfc/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.nfc@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -106,7 +106,7 @@
 LOCAL_MODULE := android.hardware.nfc@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -204,7 +204,7 @@
 LOCAL_MODULE := android.hardware.nfc@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/nfc/1.0/default/Android.bp b/nfc/1.0/default/Android.bp
index b484ba6..02f5664 100644
--- a/nfc/1.0/default/Android.bp
+++ b/nfc/1.0/default/Android.bp
@@ -1,6 +1,7 @@
 cc_library_shared {
     name: "android.hardware.nfc@1.0-impl",
     relative_install_path: "hw",
+    proprietary: true,
     srcs: ["Nfc.cpp"],
     shared_libs: [
         "liblog",
diff --git a/nfc/1.0/default/Android.mk b/nfc/1.0/default/Android.mk
index a6c7d5c..fbb340f 100644
--- a/nfc/1.0/default/Android.mk
+++ b/nfc/1.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.nfc@1.0-service
 LOCAL_INIT_RC := android.hardware.nfc@1.0-service.rc
 LOCAL_SRC_FILES := \
@@ -22,4 +23,5 @@
 	libhidltransport \
 	android.hardware.nfc@1.0 \
 
+
 include $(BUILD_EXECUTABLE)
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 7b67577..c9b8014 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
+service nfc_hal_service /vendor/bin/hw/android.hardware.nfc@1.0-service
     class hal
     user nfc
     group nfc
diff --git a/nfc/1.0/vts/Nfc.vts b/nfc/1.0/vts/Nfc.vts
deleted file mode 100644
index 9261a60..0000000
--- a/nfc/1.0/vts/Nfc.vts
+++ /dev/null
@@ -1,157 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "INfc"
-
-package: "android.hardware.nfc"
-
-import: "android.hardware.nfc@1.0::INfcClientCallback"
-import: "android.hardware.nfc@1.0::types"
-
-interface: {
-    api: {
-        name: "open"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::nfc::V1_0::NfcStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "INfcClientCallback"
-            is_callback: true
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            next: "write"
-            next: "coreInitialized"
-            next: "prediscover"
-            next: "powerCycle"
-            next: "controlGranted"
-        }
-    }
-
-    api: {
-        name: "write"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        callflow: {
-            next: "write"
-            next: "prediscover"
-            next: "coreInitialized"
-            next: "close"
-            next: "powerCycle"
-            next: "controlGranted"
-        }
-    }
-
-    api: {
-        name: "coreInitialized"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::nfc::V1_0::NfcStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        callflow: {
-            next: "write"
-            next: "prediscover"
-            next: "close"
-        }
-    }
-
-    api: {
-        name: "prediscover"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::nfc::V1_0::NfcStatus"
-        }
-        callflow: {
-            next: "write"
-            next: "close"
-            next: "coreInitialized"
-            next: "powerCycle"
-            next: "controlGranted"
-        }
-        callflow: {
-            next: "write"
-            next: "close"
-            next: "coreInitialized"
-            next: "powerCycle"
-            next: "controlGranted"
-        }
-    }
-
-    api: {
-        name: "close"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::nfc::V1_0::NfcStatus"
-        }
-        callflow: {
-            exit: true
-        }
-        callflow: {
-            exit: true
-        }
-    }
-
-    api: {
-        name: "controlGranted"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::nfc::V1_0::NfcStatus"
-        }
-        callflow: {
-            next: "write"
-            next: "close"
-            next: "prediscover"
-            next: "coreInitialized"
-            next: "powerCycle"
-        }
-        callflow: {
-            next: "write"
-            next: "close"
-            next: "prediscover"
-            next: "coreInitialized"
-            next: "powerCycle"
-        }
-    }
-
-    api: {
-        name: "powerCycle"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::nfc::V1_0::NfcStatus"
-        }
-        callflow: {
-            next: "write"
-            next: "coreInitialized"
-            next: "prediscover"
-            next: "controlGranted"
-            next: "close"
-        }
-        callflow: {
-            next: "write"
-            next: "coreInitialized"
-            next: "prediscover"
-            next: "controlGranted"
-            next: "close"
-        }
-    }
-
-}
diff --git a/nfc/1.0/vts/NfcClientCallback.vts b/nfc/1.0/vts/NfcClientCallback.vts
deleted file mode 100644
index e39ea7c..0000000
--- a/nfc/1.0/vts/NfcClientCallback.vts
+++ /dev/null
@@ -1,33 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "INfcClientCallback"
-
-package: "android.hardware.nfc"
-
-import: "android.hardware.nfc@1.0::types"
-
-interface: {
-    api: {
-        name: "sendEvent"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::nfc::V1_0::NfcEvent"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::nfc::V1_0::NfcStatus"
-        }
-    }
-
-    api: {
-        name: "sendData"
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-}
diff --git a/nfc/1.0/vts/functional/Android.bp b/nfc/1.0/vts/functional/Android.bp
index 021f7c1..080887f 100644
--- a/nfc/1.0/vts/functional/Android.bp
+++ b/nfc/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "nfc_hidl_hal_test",
+    name: "VtsHalNfcV1_0TargetTest",
     gtest: true,
-    srcs: ["nfc_hidl_hal_test.cpp"],
+    srcs: ["VtsHalNfcV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -31,11 +31,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
     ],
-    ldflags: [
-        "--coverage"
-    ]
 }
diff --git a/nfc/1.0/vts/functional/Android.mk b/nfc/1.0/vts/functional/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/nfc/1.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
similarity index 88%
rename from nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp
rename to nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
index a50d88f..a0c5f1a 100644
--- a/nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp
+++ b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
@@ -40,6 +40,8 @@
 /* NCI Commands */
 #define CORE_RESET_CMD \
   { 0x20, 0x00, 0x01, 0x00 }
+#define CORE_RESET_CMD_CONFIG_RESET \
+  { 0x20, 0x00, 0x01, 0x01 }
 #define CORE_CONN_CREATE_CMD \
   { 0x20, 0x04, 0x02, 0x01, 0x00 }
 #define INVALID_COMMAND \
@@ -166,7 +168,7 @@
  * WriteCoreReset:
  * Sends CORE_RESET_CMD
  * Waits for CORE_RESET_RSP
- * Checks the status and the version number
+ * Checks the status, version number and configuration status
  */
 TEST_F(NfcHidlTest, WriteCoreReset) {
   std::vector<uint8_t> cmd = CORE_RESET_CMD;
@@ -178,6 +180,26 @@
   EXPECT_EQ(6ul, last_data_[0].size());
   EXPECT_EQ((int)NfcStatus::OK, last_data_[0][3]);
   EXPECT_GE(VERSION, last_data_[0][4]);
+  EXPECT_EQ(0ul, last_data_[0][5]);
+}
+
+/*
+ * WriteCoreResetConfigReset:
+ * Sends CORE_RESET_CMD_CONFIG_RESET
+ * Waits for CORE_RESET_RSP
+ * Checks the status, version number and configuration status
+ */
+TEST_F(NfcHidlTest, WriteCoreResetConfigReset) {
+  std::vector<uint8_t> cmd = CORE_RESET_CMD_CONFIG_RESET;
+  NfcData data = cmd;
+  EXPECT_EQ(data.size(), nfc_->write(data));
+  // Wait for CORE_RESET_RSP
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(1ul, last_data_.size());
+  EXPECT_EQ(6ul, last_data_[0].size());
+  EXPECT_EQ((int)NfcStatus::OK, last_data_[0][3]);
+  EXPECT_GE(VERSION, last_data_[0][4]);
+  EXPECT_EQ(1ul, last_data_[0][5]);
 }
 
 /*
@@ -273,14 +295,18 @@
     EXPECT_EQ(std::cv_status::no_timeout, wait());
     // Check if the same data was recieved back
     EXPECT_EQ(2ul, last_data_.size());
-    EXPECT_EQ(data.size(), last_data_[0].size());
+
+    /* It is possible that CORE_CONN_CREDITS_NTF is received before data,
+     * Find the order and do further checks depending on that */
+    uint8_t data_index = last_data_[0].size() == data.size() ? 0 : 1;
+    EXPECT_EQ(data.size(), last_data_[data_index].size());
     for (size_t i = 0; i < data.size(); i++) {
-      EXPECT_EQ(data[i], last_data_[0][i]);
+      EXPECT_EQ(data[i], last_data_[data_index][i]);
     }
 
-    EXPECT_EQ(6ul, last_data_[1].size());
+    EXPECT_EQ(6ul, last_data_[!data_index].size());
     // Check if the credit is refilled to 1
-    EXPECT_EQ(1, last_data_[1][5]);
+    EXPECT_EQ(1, last_data_[!data_index][5]);
   }
 }
 
diff --git a/nfc/1.0/vts/functional/vts/Android.mk b/nfc/1.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/nfc/1.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/nfc/1.0/vts/functional/vts/testcases/Android.mk b/nfc/1.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/Android.mk b/nfc/1.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/Android.mk b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/__init__.py b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/__init__.py
+++ /dev/null
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/Android.mk b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/__init__.py b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/__init__.py
+++ /dev/null
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/Android.mk b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/NfcHidlBasicTest.py b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/NfcHidlBasicTest.py
deleted file mode 100644
index cb40931..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/NfcHidlBasicTest.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/env python3.4
-#
-# 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.
-#
-
-import logging
-import time
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test_with_webdb
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.coverage import coverage_utils
-
-PASSTHROUGH_MODE_KEY = "passthrough_mode"
-
-
-class NfcHidlBasicTest(base_test_with_webdb.BaseTestWithWebDbClass):
-    """A simple testcase for the NFC HIDL HAL."""
-
-    def setUpClass(self):
-        """Creates a mirror and turns on the framework-layer NFC service."""
-        self.dut = self.registerController(android_device)[0]
-
-        self.getUserParams(opt_param_names=[PASSTHROUGH_MODE_KEY])
-
-        self.dut.shell.InvokeTerminal("one")
-        self.dut.shell.one.Execute("setenforce 0")  # SELinux permissive mode
-        self.dut.shell.one.Execute("svc nfc disable")  # Turn off
-        time.sleep(5)
-
-        if getattr(self, PASSTHROUGH_MODE_KEY, True):
-            self.dut.shell.one.Execute(
-                "setprop vts.hal.vts.hidl.get_stub true")
-        else:
-            self.dut.shell.one.Execute(
-                "setprop vts.hal.vts.hidl.get_stub false")
-
-        self.dut.hal.InitHidlHal(
-            target_type="nfc",
-            target_basepaths=self.dut.libPaths,
-            target_version=1.0,
-            target_package="android.hardware.nfc",
-            target_component_name="INfc",
-            bits=64 if self.dut.is64Bit else 32)
-
-    def tearDownClass(self):
-        """Turns off the framework-layer NFC service."""
-        # Ideally, we would want to store the nfc service's state before
-        # turning that off in setUpClass and restore the original state.
-        self.dut.shell.one.Execute("svc nfc disable")  # make sure it's off
-
-    def testBase(self):
-        """A simple test case which just calls each registered function."""
-        # TODO: extend to make realistic testcases
-        # For example, call after CORE_INIT_RSP is received.
-        # result = self.dut.hal.nfc.coreInitialized([1])
-        # logging.info("coreInitialized result: %s", result)
-
-        def send_event(NfcEvent, NfcStatus):
-            logging.info("callback send_event")
-            logging.info("arg0 %s", NfcEvent)
-            logging.info("arg1 %s", NfcStatus)
-
-        def send_data(NfcData):
-            logging.info("callback send_data")
-            logging.info("arg0 %s", NfcData)
-
-        client_callback = self.dut.hal.nfc.GetHidlCallbackInterface(
-            "INfcClientCallback",
-            sendEvent=send_event,
-            sendData=send_data)
-
-        result = self.dut.hal.nfc.open(client_callback)
-        logging.info("open result: %s", result)
-
-        result = self.dut.hal.nfc.prediscover()
-        logging.info("prediscover result: %s", result)
-
-        result = self.dut.hal.nfc.controlGranted()
-        logging.info("controlGranted result: %s", result)
-
-        result = self.dut.hal.nfc.powerCycle()
-        logging.info("powerCycle result: %s", result)
-
-        nfc_types = self.dut.hal.nfc.GetHidlTypeInterface("types")
-        logging.info("nfc_types: %s", nfc_types)
-
-        result = self.dut.hal.nfc.write([0, 1, 2, 3, 4, 5])
-        logging.info("write result: %s", result)
-
-        result = self.dut.hal.nfc.close()
-        logging.info("close result: %s", result)
-
-        self.SetCoverageData(coverage_utils.GetGcdaDict(self.dut))
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/__init__.py b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/__init__.py
+++ /dev/null
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/Android.mk b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/Android.mk
deleted file mode 100644
index cd58d32..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := NfcHidlBinderizeBasicTest
-VTS_CONFIG_SRC_DIR := testcases/hal/nfc/hidl/host/binderize
-include test/vts/tools/build/Android.host_config.mk
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/AndroidTest.xml b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/AndroidTest.xml
deleted file mode 100644
index 9671977..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS HAL NFC (Binder Mode) test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="cleanup" value="true" />
-        <option name="push" value="spec/hardware/interfaces/nfc/1.0/vts/Nfc.vts->/data/local/tmp/spec/Nfc.vts" />
-        <option name="push" value="spec/hardware/interfaces/nfc/1.0/vts/NfcClientCallback.vts->/data/local/tmp/spec/NfcClientCallback.vts" />
-        <option name="push" value="spec/hardware/interfaces/nfc/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="NfcHidlBinderizeBasicTest" />
-        <option name="test-case-path" value="vts/testcases/hal/nfc/hidl/host/NfcHidlBasicTest" />
-        <option name="test-config-path" value="vts/testcases/hal/nfc/hidl/host/binderize/NfcHidlBinderizeBasicTest.config" />
-    </test>
-</configuration>
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/NfcHidlBinderizeBasicTest.config b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/NfcHidlBinderizeBasicTest.config
deleted file mode 100644
index 5a94c6f..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/NfcHidlBinderizeBasicTest.config
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "passthrough_mode": False
-}
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/__init__.py b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/binderize/__init__.py
+++ /dev/null
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/passthrough/Android.mk b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/passthrough/Android.mk
deleted file mode 100644
index e274107..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/passthrough/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := NfcHidlPassthroughBasicTest
-VTS_CONFIG_SRC_DIR := testcases/hal/nfc/hidl/host/passthrough
-include test/vts/tools/build/Android.host_config.mk
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/passthrough/AndroidTest.xml b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/passthrough/AndroidTest.xml
deleted file mode 100644
index 2f5fdfa..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/passthrough/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS HAL NFC (Passthrough) test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="cleanup" value="true" />
-        <option name="push" value="spec/hardware/interfaces/nfc/1.0/vts/Nfc.vts->/data/local/tmp/spec/Nfc.vts" />
-        <option name="push" value="spec/hardware/interfaces/nfc/1.0/vts/NfcClientCallback.vts->/data/local/tmp/spec/NfcClientCallback.vts" />
-        <option name="push" value="spec/hardware/interfaces/nfc/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="NfcHidlPassthroughBasicTest" />
-        <option name="test-case-path" value="vts/testcases/hal/nfc/hidl/host/NfcHidlBasicTest" />
-        <option name="test-config-path" value="vts/testcases/hal/nfc/hidl/host/passthrough/NfcHidlPassthroughBasicTest.config" />
-    </test>
-</configuration>
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/passthrough/NfcHidlPassthroughBasicTest.config b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/passthrough/NfcHidlPassthroughBasicTest.config
deleted file mode 100644
index 9173e19..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/host/passthrough/NfcHidlPassthroughBasicTest.config
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "passthrough_mode": true
-}
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target/Android.mk b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target/Android.mk
deleted file mode 100644
index da9b6af..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalNfcHidlTargetBasicTest
-VTS_CONFIG_SRC_DIR := testcases/hal/nfc/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target/AndroidTest.xml b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target/AndroidTest.xml
deleted file mode 100644
index 9576183..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS NFC HIDL HAL's basic target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalNfcHidlTargetBasicTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/nfc_hidl_hal_test/nfc_hidl_hal_test,
-            _64bit::DATA/nativetest64/nfc_hidl_hal_test/nfc_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="10m" />
-    </test>
-</configuration>
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target_profiling/Android.mk b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target_profiling/Android.mk
deleted file mode 100644
index c7bf853..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-## 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.
-# #
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := NfcHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/nfc/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target_profiling/AndroidTest.xml b/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 42c7e22..0000000
--- a/nfc/1.0/vts/functional/vts/testcases/hal/nfc/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS NFC HIDL HAL's target-side profiling test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="NfcHidlTargetProfilingTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/nfc_hidl_hal_test/nfc_hidl_hal_test,
-            _64bit::DATA/nativetest64/nfc_hidl_hal_test/nfc_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="20m" />
-    <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/nfc/1.0/vts/types.vts b/nfc/1.0/vts/types.vts
deleted file mode 100644
index e43db1e..0000000
--- a/nfc/1.0/vts/types.vts
+++ /dev/null
@@ -1,73 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.nfc"
-
-
-attribute: {
-    name: "::android::hardware::nfc::V1_0::NfcEvent"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "OPEN_CPLT"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "CLOSE_CPLT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "POST_INIT_CPLT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "PRE_DISCOVER_CPLT"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "REQUEST_CONTROL"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "RELEASE_CONTROL"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "ERROR"
-        scalar_value: {
-            uint32_t: 6
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::nfc::V1_0::NfcStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "OK"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "FAILED"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "ERR_TRANSPORT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "ERR_CMD_TIMEOUT"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "REFUSED"
-        scalar_value: {
-            uint32_t: 4
-        }
-    }
-}
-
diff --git a/power/1.0/Android.bp b/power/1.0/Android.bp
index db8c721..453d525 100644
--- a/power/1.0/Android.bp
+++ b/power/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.power@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IPower.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.power@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.0",
     srcs: [
-        "types.hal",
-        "IPower.hal",
+        ":android.hardware.power@1.0_hal",
     ],
     out: [
         "android/hardware/power/1.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.0",
     srcs: [
-        "types.hal",
-        "IPower.hal",
+        ":android.hardware.power@1.0_hal",
     ],
     out: [
         "android/hardware/power/1.0/types.h",
@@ -54,106 +60,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.power.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/power/1.0/ $(genDir)/android/hardware/power/1.0/",
-    srcs: [
-        "types.hal",
-        "IPower.hal",
-    ],
-    out: [
-        "android/hardware/power/1.0/types.vts.cpp",
-        "android/hardware/power/1.0/Power.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.power.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/power/1.0/ $(genDir)/android/hardware/power/1.0/",
-    srcs: [
-        "types.hal",
-        "IPower.hal",
-    ],
-    out: [
-        "android/hardware/power/1.0/types.vts.h",
-        "android/hardware/power/1.0/Power.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.power.vts.driver@1.0",
-    generated_sources: ["android.hardware.power.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.power.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.power.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.power@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.power@1.0-IPower-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/power/1.0/ $(genDir)/android/hardware/power/1.0/",
-    srcs: [
-        "IPower.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/power/1.0/Power.vts.cpp",
-        "android/hardware/power/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.power@1.0-IPower-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/power/1.0/ $(genDir)/android/hardware/power/1.0/",
-    srcs: [
-        "IPower.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/power/1.0/Power.vts.h",
-        "android/hardware/power/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.power@1.0-IPower-vts.profiler",
-    generated_sources: ["android.hardware.power@1.0-IPower-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.power@1.0-IPower-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.power@1.0-IPower-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.power@1.0",
-    ],
-}
diff --git a/power/1.0/Android.mk b/power/1.0/Android.mk
index 4e11867..98d95a8 100644
--- a/power/1.0/Android.mk
+++ b/power/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.power@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -140,7 +140,7 @@
 LOCAL_MODULE := android.hardware.power@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/power/1.0/default/Android.bp b/power/1.0/default/Android.bp
index 1a5a897..71daaeb 100644
--- a/power/1.0/default/Android.bp
+++ b/power/1.0/default/Android.bp
@@ -14,9 +14,15 @@
 
 cc_library_shared {
     name: "android.hardware.power@1.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["Power.cpp"],
 
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+
     shared_libs: [
         "liblog",
         "libhardware",
@@ -30,11 +36,17 @@
 }
 
 cc_binary {
+    proprietary: true,
     relative_install_path: "hw",
     name: "android.hardware.power@1.0-service",
     init_rc: ["android.hardware.power@1.0-service.rc"],
     srcs: ["service.cpp"],
 
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+
     shared_libs: [
         "liblog",
         "libdl",
diff --git a/power/1.0/default/Power.cpp b/power/1.0/default/Power.cpp
index 656a2ae..6ea9167 100644
--- a/power/1.0/default/Power.cpp
+++ b/power/1.0/default/Power.cpp
@@ -40,14 +40,14 @@
 
 // Methods from ::android::hardware::power::V1_0::IPower follow.
 Return<void> Power::setInteractive(bool interactive)  {
-    if (mModule->setInteractive > 0)
+    if (mModule->setInteractive)
         mModule->setInteractive(mModule, interactive ? 1 : 0);
     return Void();
 }
 
 Return<void> Power::powerHint(PowerHint hint, int32_t data)  {
     int32_t param = data;
-    if (mModule->powerHint > 0) {
+    if (mModule->powerHint) {
         if (data)
             mModule->powerHint(mModule, static_cast<power_hint_t>(hint), &param);
         else
@@ -57,7 +57,7 @@
 }
 
 Return<void> Power::setFeature(Feature feature, bool activate)  {
-    if (mModule->setFeature > 0)
+    if (mModule->setFeature)
         mModule->setFeature(mModule, static_cast<feature_t>(feature),
                 activate ? 1 : 0);
     return Void();
@@ -79,9 +79,9 @@
     }
 
     number_platform_modes = mModule->get_number_of_platform_modes(mModule);
-    if (number_platform_modes > 0)
+    if (number_platform_modes)
     {
-       if (SIZE_MAX / sizeof(size_t) <= number_platform_modes)  // overflow
+       if ((ssize_t) (SIZE_MAX / sizeof(size_t)) <= number_platform_modes)  // overflow
            goto done;
        voters = new (std::nothrow) size_t [number_platform_modes];
        if (voters == nullptr)
@@ -91,7 +91,7 @@
        if (ret != 0)
            goto done;
 
-       if (SIZE_MAX / sizeof(power_state_platform_sleep_state_t)
+       if ((ssize_t) (SIZE_MAX / sizeof(power_state_platform_sleep_state_t))
            <= number_platform_modes)  // overflow
            goto done;
        legacy_states = new (std::nothrow)
@@ -144,24 +144,24 @@
     return Void();
 }
 
-IPower* HIDL_FETCH_IPower(const char* name) {
+IPower* HIDL_FETCH_IPower(const char* /* name */) {
     int ret = 0;
     const hw_module_t* hw_module = NULL;
     power_module_t *power_module;
-    ret = hw_get_module(name, &hw_module);
-    if (ret == 0 && hw_module->methods->open > 0) {
-        ret = hw_module->methods->open(hw_module, name,
+    ret = hw_get_module(POWER_HARDWARE_MODULE_ID, &hw_module);
+    if (ret == 0 && hw_module->methods->open) {
+        ret = hw_module->methods->open(hw_module, POWER_HARDWARE_MODULE_ID,
                 reinterpret_cast<hw_device_t**>(&power_module));
         if (ret == 0) {
             return new Power(power_module);
         }
         else {
-            ALOGE("Passthrough failed to load legacy HAL.");
+            ALOGE("Passthrough failed to load legacy power HAL.");
             return nullptr;
         }
     }
     else {
-        ALOGE ("hw_get_module %s failed: %d", name, ret);
+        ALOGE ("hw_get_module %s failed: %d", POWER_HARDWARE_MODULE_ID, ret);
         return nullptr;
     }
 }
diff --git a/power/1.0/default/android.hardware.power@1.0-service.rc b/power/1.0/default/android.hardware.power@1.0-service.rc
index 6063541..1777e90 100644
--- a/power/1.0/default/android.hardware.power@1.0-service.rc
+++ b/power/1.0/default/android.hardware.power@1.0-service.rc
@@ -1,4 +1,4 @@
-service power-hal-1-0 /system/bin/hw/android.hardware.power@1.0-service
+service power-hal-1-0 /vendor/bin/hw/android.hardware.power@1.0-service
     class hal
     user system
     group system
diff --git a/power/1.0/default/service.cpp b/power/1.0/default/service.cpp
index f77ff5b..e8618b8 100644
--- a/power/1.0/default/service.cpp
+++ b/power/1.0/default/service.cpp
@@ -23,5 +23,5 @@
 using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-    return defaultPassthroughServiceImplementation<IPower>("power");
+    return defaultPassthroughServiceImplementation<IPower>();
 }
diff --git a/power/1.0/types.hal b/power/1.0/types.hal
index c27242e..debdc35 100644
--- a/power/1.0/types.hal
+++ b/power/1.0/types.hal
@@ -76,15 +76,6 @@
     * it has been launched.
     */
     LAUNCH = 0x00000008,
-
-   /*
-    * When device enters some special modes, e.g. theater mode in Android
-    * Wear, there is no touch interaction expected between device and user.
-    * Touch controller could be disabled in those modes to save power.
-    * The data parameter is non-zero when touch could be disabled, and zero
-    * when touch needs to be re-enabled.
-    */
-    DISABLE_TOUCH = 0x00000009
 };
 
 enum Feature : uint32_t {
diff --git a/power/1.0/vts/Power.vts b/power/1.0/vts/Power.vts
deleted file mode 100644
index 1711290..0000000
--- a/power/1.0/vts/Power.vts
+++ /dev/null
@@ -1,57 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IPower"
-
-package: "android.hardware.power"
-
-import: "android.hardware.power@1.0::types"
-
-interface: {
-    api: {
-        name: "setInteractive"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "powerHint"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::power::V1_0::PowerHint"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setFeature"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::power::V1_0::Feature"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getPlatformLowPowerStats"
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::power::V1_0::PowerStatePlatformSleepState"
-            }
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::power::V1_0::Status"
-        }
-    }
-
-}
diff --git a/power/1.0/vts/functional/Android.bp b/power/1.0/vts/functional/Android.bp
index 81dc316..b2389a5 100644
--- a/power/1.0/vts/functional/Android.bp
+++ b/power/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "power_hidl_hal_test",
+    name: "VtsHalPowerV1_0TargetTest",
     gtest: true,
-    srcs: ["power_hidl_hal_test.cpp"],
+    srcs: ["VtsHalPowerV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -31,11 +31,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
-    ],
-    ldflags: [
-        "--coverage"
     ]
 }
diff --git a/power/1.0/vts/functional/Android.mk b/power/1.0/vts/functional/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/power/1.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/power/1.0/vts/functional/power_hidl_hal_test.cpp b/power/1.0/vts/functional/VtsHalPowerV1_0TargetTest.cpp
similarity index 96%
rename from power/1.0/vts/functional/power_hidl_hal_test.cpp
rename to power/1.0/vts/functional/VtsHalPowerV1_0TargetTest.cpp
index 36bdb0a..b114944 100644
--- a/power/1.0/vts/functional/power_hidl_hal_test.cpp
+++ b/power/1.0/vts/functional/VtsHalPowerV1_0TargetTest.cpp
@@ -35,7 +35,7 @@
 class PowerHidlTest : public ::testing::Test {
  public:
   virtual void SetUp() override {
-    power = IPower::getService("power");
+    power = IPower::getService();
     ASSERT_NE(power, nullptr);
   }
 
@@ -62,7 +62,7 @@
                 PowerHint::VIDEO_ENCODE,  PowerHint::VIDEO_DECODE,
                 PowerHint::LOW_POWER,     PowerHint::SUSTAINED_PERFORMANCE,
                 PowerHint::VR_MODE,       PowerHint::LAUNCH,
-                PowerHint::DISABLE_TOUCH, badHint};
+                badHint};
   Return<void> ret;
   for (auto hint : hints) {
     ret = power->powerHint(hint, 1);
diff --git a/power/1.0/vts/functional/vts/Android.mk b/power/1.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/power/1.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/power/1.0/vts/functional/vts/testcases/Android.mk b/power/1.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/power/1.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/power/1.0/vts/functional/vts/testcases/hal/Android.mk b/power/1.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/power/1.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/power/1.0/vts/functional/vts/testcases/hal/power/Android.mk b/power/1.0/vts/functional/vts/testcases/hal/power/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/power/1.0/vts/functional/vts/testcases/hal/power/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/power/1.0/vts/functional/vts/testcases/hal/power/__init__.py b/power/1.0/vts/functional/vts/testcases/hal/power/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/power/1.0/vts/functional/vts/testcases/hal/power/__init__.py
+++ /dev/null
diff --git a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/Android.mk b/power/1.0/vts/functional/vts/testcases/hal/power/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target/Android.mk b/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target/Android.mk
deleted file mode 100644
index c66b6fb..0000000
--- a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target/Android.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalPowerHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/power/hidl/target
-include test/vts/tools/build/Android.host_config.mk
-
diff --git a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target/AndroidTest.xml b/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target/AndroidTest.xml
deleted file mode 100644
index bb80de2..0000000
--- a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Power HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalPowerHidlTargetTest"/>
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/power_hidl_hal_test/power_hidl_hal_test,
-            _64bit::DATA/nativetest64/power_hidl_hal_test/power_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target_profiling/Android.mk b/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target_profiling/Android.mk
deleted file mode 100644
index 6f9e399..0000000
--- a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalPowerHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/power/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
-
diff --git a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target_profiling/AndroidTest.xml b/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 263086c..0000000
--- a/power/1.0/vts/functional/vts/testcases/hal/power/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Power HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalPowerHidlTargetProfilingTest"/>
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/power_hidl_hal_test/power_hidl_hal_test,
-            _64bit::DATA/nativetest64/power_hidl_hal_test/power_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/power/1.0/vts/types.vts b/power/1.0/vts/types.vts
deleted file mode 100644
index 94c003b..0000000
--- a/power/1.0/vts/types.vts
+++ /dev/null
@@ -1,133 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.power"
-
-
-attribute: {
-    name: "::android::hardware::power::V1_0::PowerHint"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "VSYNC"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "INTERACTION"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "VIDEO_ENCODE"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "VIDEO_DECODE"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "LOW_POWER"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "SUSTAINED_PERFORMANCE"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "VR_MODE"
-        scalar_value: {
-            uint32_t: 7
-        }
-        enumerator: "LAUNCH"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "DISABLE_TOUCH"
-        scalar_value: {
-            uint32_t: 9
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::power::V1_0::Feature"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "POWER_FEATURE_DOUBLE_TAP_TO_WAKE"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::power::V1_0::Status"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "FILESYSTEM_ERROR"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::power::V1_0::PowerStateVoter"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "totalTimeInMsecVotedForSinceBoot"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "totalNumberOfTimesVotedSinceBoot"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::power::V1_0::PowerStatePlatformSleepState"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "residencyInMsecSinceBoot"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "totalTransitions"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "supportedOnlyInSuspend"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "voters"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::power::V1_0::PowerStateVoter"
-        }
-    }
-}
-
diff --git a/radio/1.0/Android.bp b/radio/1.0/Android.bp
index e17d949..f59cf66 100644
--- a/radio/1.0/Android.bp
+++ b/radio/1.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.radio@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0",
+filegroup {
+    name: "android.hardware.radio@1.0_hal",
     srcs: [
         "types.hal",
         "IRadio.hal",
@@ -12,6 +10,15 @@
         "ISap.hal",
         "ISapCallback.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.radio@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0",
+    srcs: [
+        ":android.hardware.radio@1.0_hal",
+    ],
     out: [
         "android/hardware/radio/1.0/types.cpp",
         "android/hardware/radio/1.0/RadioAll.cpp",
@@ -27,12 +34,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0",
     srcs: [
-        "types.hal",
-        "IRadio.hal",
-        "IRadioIndication.hal",
-        "IRadioResponse.hal",
-        "ISap.hal",
-        "ISapCallback.hal",
+        ":android.hardware.radio@1.0_hal",
     ],
     out: [
         "android/hardware/radio/1.0/types.h",
@@ -86,302 +88,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.radio.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "types.hal",
-        "IRadio.hal",
-        "IRadioIndication.hal",
-        "IRadioResponse.hal",
-        "ISap.hal",
-        "ISapCallback.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/types.vts.cpp",
-        "android/hardware/radio/1.0/Radio.vts.cpp",
-        "android/hardware/radio/1.0/RadioIndication.vts.cpp",
-        "android/hardware/radio/1.0/RadioResponse.vts.cpp",
-        "android/hardware/radio/1.0/Sap.vts.cpp",
-        "android/hardware/radio/1.0/SapCallback.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "types.hal",
-        "IRadio.hal",
-        "IRadioIndication.hal",
-        "IRadioResponse.hal",
-        "ISap.hal",
-        "ISapCallback.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/types.vts.h",
-        "android/hardware/radio/1.0/Radio.vts.h",
-        "android/hardware/radio/1.0/RadioIndication.vts.h",
-        "android/hardware/radio/1.0/RadioResponse.vts.h",
-        "android/hardware/radio/1.0/Sap.vts.h",
-        "android/hardware/radio/1.0/SapCallback.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.radio.vts.driver@1.0",
-    generated_sources: ["android.hardware.radio.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.radio.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.radio.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.radio@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-IRadio-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "IRadio.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/Radio.vts.cpp",
-        "android/hardware/radio/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-IRadio-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "IRadio.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/Radio.vts.h",
-        "android/hardware/radio/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.radio@1.0-IRadio-vts.profiler",
-    generated_sources: ["android.hardware.radio@1.0-IRadio-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.radio@1.0-IRadio-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.radio@1.0-IRadio-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.radio@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-IRadioIndication-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "IRadioIndication.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/RadioIndication.vts.cpp",
-        "android/hardware/radio/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-IRadioIndication-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "IRadioIndication.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/RadioIndication.vts.h",
-        "android/hardware/radio/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.radio@1.0-IRadioIndication-vts.profiler",
-    generated_sources: ["android.hardware.radio@1.0-IRadioIndication-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.radio@1.0-IRadioIndication-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.radio@1.0-IRadioIndication-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.radio@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-IRadioResponse-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "IRadioResponse.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/RadioResponse.vts.cpp",
-        "android/hardware/radio/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-IRadioResponse-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "IRadioResponse.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/RadioResponse.vts.h",
-        "android/hardware/radio/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.radio@1.0-IRadioResponse-vts.profiler",
-    generated_sources: ["android.hardware.radio@1.0-IRadioResponse-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.radio@1.0-IRadioResponse-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.radio@1.0-IRadioResponse-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.radio@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-ISap-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "ISap.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/Sap.vts.cpp",
-        "android/hardware/radio/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-ISap-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "ISap.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/Sap.vts.h",
-        "android/hardware/radio/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.radio@1.0-ISap-vts.profiler",
-    generated_sources: ["android.hardware.radio@1.0-ISap-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.radio@1.0-ISap-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.radio@1.0-ISap-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.radio@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-ISapCallback-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "ISapCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/SapCallback.vts.cpp",
-        "android/hardware/radio/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.radio@1.0-ISapCallback-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/radio/1.0/ $(genDir)/android/hardware/radio/1.0/",
-    srcs: [
-        "ISapCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/radio/1.0/SapCallback.vts.h",
-        "android/hardware/radio/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.radio@1.0-ISapCallback-vts.profiler",
-    generated_sources: ["android.hardware.radio@1.0-ISapCallback-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.radio@1.0-ISapCallback-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.radio@1.0-ISapCallback-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.radio@1.0",
-    ],
-}
diff --git a/radio/1.0/Android.mk b/radio/1.0/Android.mk
index 059ebcb..7f4c7d4 100644
--- a/radio/1.0/Android.mk
+++ b/radio/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.radio@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -55,6 +55,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (ApnTypes)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/ApnTypes.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.ApnTypes
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (AppState)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/AppState.java
@@ -1214,9 +1233,9 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (DataProfile)
+# Build types.hal (DataProfileId)
 #
-GEN := $(intermediates)/android/hardware/radio/V1_0/DataProfile.java
+GEN := $(intermediates)/android/hardware/radio/V1_0/DataProfileId.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -1226,7 +1245,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.radio@1.0::types.DataProfile
+        android.hardware.radio@1.0::types.DataProfileId
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -1290,6 +1309,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (DeviceStateType)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/DeviceStateType.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.DeviceStateType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (Dial)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/Dial.java
@@ -1537,6 +1575,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (IndicationFilter)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/IndicationFilter.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.IndicationFilter
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (LastCallFailCause)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/LastCallFailCause.java
@@ -1651,6 +1708,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (MvnoType)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/MvnoType.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.MvnoType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (NeighboringCell)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/NeighboringCell.java
@@ -2947,7 +3023,7 @@
 LOCAL_MODULE := android.hardware.radio@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -2994,6 +3070,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (ApnTypes)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/ApnTypes.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.ApnTypes
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (AppState)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/AppState.java
@@ -4153,9 +4248,9 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (DataProfile)
+# Build types.hal (DataProfileId)
 #
-GEN := $(intermediates)/android/hardware/radio/V1_0/DataProfile.java
+GEN := $(intermediates)/android/hardware/radio/V1_0/DataProfileId.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -4165,7 +4260,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.radio@1.0::types.DataProfile
+        android.hardware.radio@1.0::types.DataProfileId
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -4229,6 +4324,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (DeviceStateType)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/DeviceStateType.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.DeviceStateType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (Dial)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/Dial.java
@@ -4476,6 +4590,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (IndicationFilter)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/IndicationFilter.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.IndicationFilter
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (LastCallFailCause)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/LastCallFailCause.java
@@ -4590,6 +4723,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (MvnoType)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/MvnoType.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.MvnoType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (NeighboringCell)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/NeighboringCell.java
diff --git a/radio/1.0/IRadio.hal b/radio/1.0/IRadio.hal
index 1cb7040..bda7d65 100644
--- a/radio/1.0/IRadio.hal
+++ b/radio/1.0/IRadio.hal
@@ -375,23 +375,16 @@
      *    number of simultaneous data call contexts.
      *
      * @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.
-     * @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".
+     * @param radioTechnology Radio technology to use.
+     * @param dataProfileInfo data profile info.
+     * @param modemCognitive Indicating this profile was sent to the modem through setDataProfile
+     *        earlier.
+     * @param roamingAllowed Indicating data roaming is allowed or not by the user.
      *
      * Response function is IRadioResponse.setupDataCallResponse()
      */
-    oneway setupDataCall(int32_t serial, int32_t radioTechnology,
-            int32_t profile, string apn, string user, string password, ApnAuthType authType,
-            string protocol);
+    oneway setupDataCall(int32_t serial, RadioTechnology radioTechnology,
+            DataProfileInfo dataProfileInfo, bool modemCognitive, bool roamingAllowed);
 
     /*
      * Request ICC I/O operation.
@@ -847,7 +840,7 @@
      * @param serial Serial number of request.
      * @param accept true = accept the call setup, false = reject the call setup
      *
-     * Response callback is IRadioCallback.handleStkCallSetupRequestFromSimResponse()
+     * Response callback is IRadioResponse.handleStkCallSetupRequestFromSimResponse()
      */
     oneway handleStkCallSetupRequestFromSim(int32_t serial,
             bool accept);
@@ -857,7 +850,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.explicitCallTransferResponse()
+     * Response callback is IRadioResponse.explicitCallTransferResponse()
      */
     oneway explicitCallTransfer(int32_t serial);
 
@@ -868,7 +861,7 @@
      * @param serial Serial number of request.
      * @param nwType PreferredNetworkType defined in types.hal
      *
-     * Response callback is IRadioCallback.setPreferredNetworkTypeResponse()
+     * Response callback is IRadioResponse.setPreferredNetworkTypeResponse()
      */
     oneway setPreferredNetworkType(int32_t serial,
             PreferredNetworkType nwType);
@@ -879,7 +872,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getPreferredNetworkTypeResponse()
+     * Response callback is IRadioResponse.getPreferredNetworkTypeResponse()
      */
     oneway getPreferredNetworkType(int32_t serial);
 
@@ -888,7 +881,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getNeighboringCidsResponse()
+     * Response callback is IRadioResponse.getNeighboringCidsResponse()
      */
     oneway getNeighboringCids(int32_t serial);
 
@@ -902,7 +895,7 @@
      * @param serial Serial number of request.
      * @param enable true = updates enabled (+CREG=2), false = updates disabled (+CREG=1)
      *
-     * Response callback is IRadioCallback.setLocationUpdatesResponse()
+     * Response callback is IRadioResponse.setLocationUpdatesResponse()
      */
     oneway setLocationUpdates(int32_t serial, bool enable);
 
@@ -913,7 +906,7 @@
      * @param serial Serial number of request.
      * @param cdmaSub CdmaSubscriptionSource
      *
-     * Response callback is IRadioCallback.setCdmaSubscriptionSourceResponse()
+     * Response callback is IRadioResponse.setCdmaSubscriptionSourceResponse()
      */
     oneway setCdmaSubscriptionSource(int32_t serial,
             CdmaSubscriptionSource cdmaSub);
@@ -924,7 +917,7 @@
      * @param serial Serial number of request.
      * @param type CdmaRoamingType defined in types.hal
      *
-     * Response callback is IRadioCallback.setCdmaRoamingPreferenceResponse()
+     * Response callback is IRadioResponse.setCdmaRoamingPreferenceResponse()
      */
     oneway setCdmaRoamingPreference(int32_t serial,
             CdmaRoamingType type);
@@ -934,7 +927,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getCdmaRoamingPreferenceResponse()
+     * Response callback is IRadioResponse.getCdmaRoamingPreferenceResponse()
      */
     oneway getCdmaRoamingPreference(int32_t serial);
 
@@ -944,7 +937,7 @@
      * @param serial Serial number of request.
      * @param mode TtyMode
      *
-     * Response callback is IRadioCallback.setTTYModeResponse()
+     * Response callback is IRadioResponse.setTTYModeResponse()
      */
     oneway setTTYMode(int32_t serial, TtyMode mode);
 
@@ -953,7 +946,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getTTYModeResponse()
+     * Response callback is IRadioResponse.getTTYModeResponse()
      */
     oneway getTTYMode(int32_t serial);
 
@@ -964,7 +957,7 @@
      * @param enable false for Standard Privacy Mode (Public Long Code Mask)
      *        true for Enhanced Privacy Mode (Private Long Code Mask)
      *
-     * Response callback is IRadioCallback.setPreferredVoicePrivacyResponse()
+     * Response callback is IRadioResponse.setPreferredVoicePrivacyResponse()
      */
     oneway setPreferredVoicePrivacy(int32_t serial, bool enable);
 
@@ -973,7 +966,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getPreferredVoicePrivacyResponse()
+     * Response callback is IRadioResponse.getPreferredVoicePrivacyResponse()
      */
     oneway getPreferredVoicePrivacy(int32_t serial);
 
@@ -983,7 +976,7 @@
      * @param serial Serial number of request.
      * @param featureCode String associated with Flash command
      *
-     * Response callback is IRadioCallback.sendCDMAFeatureCodeResponse()
+     * Response callback is IRadioResponse.sendCDMAFeatureCodeResponse()
      */
     oneway sendCDMAFeatureCode(int32_t serial, string featureCode);
 
@@ -995,7 +988,7 @@
      * @param on DTMF ON length in milliseconds, or 0 to use default
      * @param off is the DTMF OFF length in milliseconds, or 0 to use default
      *
-     * Response callback is IRadioCallback.sendBurstDtmfResponse()
+     * Response callback is IRadioResponse.sendBurstDtmfResponse()
      */
     oneway sendBurstDtmf(int32_t serial, string dtmf, int32_t on, int32_t off);
 
@@ -1005,7 +998,7 @@
      * @param serial Serial number of request.
      * @param sms Cdma Sms to be sent described by CdmaSmsMessage in types.hal
      *
-     * Response callback is IRadioCallback.sendCdmaSmsResponse()
+     * Response callback is IRadioResponse.sendCdmaSmsResponse()
      */
     oneway sendCdmaSms(int32_t serial, CdmaSmsMessage sms);
 
@@ -1016,7 +1009,7 @@
      * @param serial Serial number of request.
      * @param smsAck Cdma Sms ack to be sent described by CdmaSmsAck in types.hal
      *
-     * Response callback is IRadioCallback.acknowledgeLastIncomingCdmaSmsResponse()
+     * Response callback is IRadioResponse.acknowledgeLastIncomingCdmaSmsResponse()
      */
     oneway acknowledgeLastIncomingCdmaSms(int32_t serial, CdmaSmsAck smsAck);
 
@@ -1025,7 +1018,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getGsmBroadcastConfigResponse()
+     * Response callback is IRadioResponse.getGsmBroadcastConfigResponse()
      */
     oneway getGsmBroadcastConfig(int32_t serial);
 
@@ -1035,7 +1028,7 @@
      * @param serial Serial number of request.
      * @param configInfo Setting of GSM/WCDMA Cell broadcast config
      *
-     * Response callback is IRadioCallback.setGsmBroadcastConfigResponse()
+     * Response callback is IRadioResponse.setGsmBroadcastConfigResponse()
      */
     oneway setGsmBroadcastConfig(int32_t serial, vec<GsmBroadcastSmsConfigInfo> configInfo);
 
@@ -1046,7 +1039,7 @@
      * @param activate indicates to activate or turn off the reception of GSM/WCDMA
      *        Cell Broadcast SMS. true = activate, false = turn off
      *
-     * Response callback is IRadioCallback.setGsmBroadcastActivationResponse()
+     * Response callback is IRadioResponse.setGsmBroadcastActivationResponse()
      */
     oneway setGsmBroadcastActivation(int32_t serial, bool activate);
 
@@ -1055,7 +1048,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getCdmaBroadcastConfigResponse()
+     * Response callback is IRadioResponse.getCdmaBroadcastConfigResponse()
      */
     oneway getCdmaBroadcastConfig(int32_t serial);
 
@@ -1065,7 +1058,7 @@
      * @param serial Serial number of request.
      * @param configInfo CDMA Broadcast SMS config to be set.
      *
-     * Response callback is IRadioCallback.setCdmaBroadcastConfigResponse()
+     * Response callback is IRadioResponse.setCdmaBroadcastConfigResponse()
      */
     oneway setCdmaBroadcastConfig(int32_t serial, vec<CdmaBroadcastSmsConfigInfo> configInfo);
 
@@ -1076,7 +1069,7 @@
      * @param activate indicates to activate or turn off the reception of CDMA
      *        Cell Broadcast SMS. true = activate, false = turn off
      *
-     * Response callback is IRadioCallback.setCdmaBroadcastActivationResponse()
+     * Response callback is IRadioResponse.setCdmaBroadcastActivationResponse()
      */
     oneway setCdmaBroadcastActivation(int32_t serial, bool activate);
 
@@ -1088,7 +1081,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getCDMASubscriptionResponse()
+     * Response callback is IRadioResponse.getCDMASubscriptionResponse()
      */
     oneway getCDMASubscription(int32_t serial);
 
@@ -1098,7 +1091,7 @@
      * @param serial Serial number of request.
      * @param cdmaSms CDMA message as defined by CdmaSmsWriteArgs in types.hal
      *
-     * Response callback is IRadioCallback.writeSmsToRuimResponse()
+     * Response callback is IRadioResponse.writeSmsToRuimResponse()
      */
     oneway writeSmsToRuim(int32_t serial, CdmaSmsWriteArgs cdmaSms);
 
@@ -1108,7 +1101,7 @@
      * @param serial Serial number of request.
      * @param index record index of the message to delete
      *
-     * Response callback is IRadioCallback.deleteSmsOnRuimResponse()
+     * Response callback is IRadioResponse.deleteSmsOnRuimResponse()
      */
     oneway deleteSmsOnRuim(int32_t serial, int32_t index);
 
@@ -1120,7 +1113,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getDeviceIdentityResponse()
+     * Response callback is IRadioResponse.getDeviceIdentityResponse()
      */
     oneway getDeviceIdentity(int32_t serial);
 
@@ -1131,7 +1124,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.exitEmergencyCallbackModeResponse()
+     * Response callback is IRadioResponse.exitEmergencyCallbackModeResponse()
      */
     oneway exitEmergencyCallbackMode(int32_t serial);
 
@@ -1140,7 +1133,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getSmscAddressResponse()
+     * Response callback is IRadioResponse.getSmscAddressResponse()
      */
     oneway getSmscAddress(int32_t serial);
 
@@ -1150,7 +1143,7 @@
      * @param serial Serial number of request.
      * @param smsc Short Message Service Center address to set
      *
-     * Response callback is IRadioCallback.setSmscAddressResponse()
+     * Response callback is IRadioResponse.setSmscAddressResponse()
      */
     oneway setSmscAddress(int32_t serial, string smsc);
 
@@ -1161,7 +1154,7 @@
      * @param available true if memory is available for storing new messages,
      *        false if memory capacity is exceeded
      *
-     * Response callback is IRadioCallback.reportSmsMemoryStatusResponse()
+     * Response callback is IRadioResponse.reportSmsMemoryStatusResponse()
      */
     oneway reportSmsMemoryStatus(int32_t serial, bool available);
 
@@ -1171,7 +1164,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.reportStkServiceIsRunningResponse()
+     * Response callback is IRadioResponse.reportStkServiceIsRunningResponse()
      */
     oneway reportStkServiceIsRunning(int32_t serial);
 
@@ -1180,7 +1173,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getCdmaSubscriptionSourceResponse()
+     * Response callback is IRadioResponse.getCdmaSubscriptionSourceResponse()
      */
     oneway getCdmaSubscriptionSource(int32_t serial);
 
@@ -1191,7 +1184,7 @@
      * @param serial Serial number of request.
      * @param challenge challenge string in Base64 format
      *
-     * Response callback is IRadioCallback.requestIsimAuthenticationResponse()
+     * Response callback is IRadioResponse.requestIsimAuthenticationResponse()
      */
     oneway requestIsimAuthentication(int32_t serial, string challenge);
 
@@ -1205,7 +1198,7 @@
      *        false on failed receipt (send RP-ERROR)
      * @param ackPdu acknowledgement TPDU in hexadecimal format
      *
-     * Response callback is IRadioCallback.acknowledgeIncomingGsmSmsWithPduResponse()
+     * Response callback is IRadioResponse.acknowledgeIncomingGsmSmsWithPduResponse()
      */
     oneway acknowledgeIncomingGsmSmsWithPdu(int32_t serial, bool success, string ackPdu);
 
@@ -1224,7 +1217,7 @@
      * @param serial Serial number of request.
      * @param contents SAT/USAT command in hexadecimal format starting with command tag
      *
-     * Response callback is IRadioCallback.sendEnvelopeWithStatusResponse()
+     * Response callback is IRadioResponse.sendEnvelopeWithStatusResponse()
      */
     oneway sendEnvelopeWithStatus(int32_t serial, string contents);
 
@@ -1234,7 +1227,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getVoiceRadioTechnologyResponse()
+     * Response callback is IRadioResponse.getVoiceRadioTechnologyResponse()
      */
     oneway getVoiceRadioTechnology(int32_t serial);
 
@@ -1246,7 +1239,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getCellInfoListResponse()
+     * Response callback is IRadioResponse.getCellInfoListResponse()
      */
     oneway getCellInfoList(int32_t serial);
 
@@ -1259,7 +1252,7 @@
      * @param serial Serial number of request.
      * @param rate minimum time in milliseconds to indicate time between unsolicited cellInfoList()
      *
-     * Response callback is IRadioCallback.setCellInfoListRateResponse()
+     * Response callback is IRadioResponse.setCellInfoListRateResponse()
      */
     oneway setCellInfoListRate(int32_t serial, int32_t rate);
 
@@ -1267,26 +1260,21 @@
      * Set an apn to initial attach network
      *
      * @param serial Serial number of request.
-     * @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 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".
-     * @param authType is the PAP / CHAP auth type.
-     * @param user is the username for APN, or empty string
-     * @param password is the password for APN, or empty string
+     * @param dataProfileInfo data profile containing APN settings
+     * @param modemCognitive is indicating the data profile was sent to the modem through
+     *        setDataProfile earlier.
      *
-     * Response callback is IRadioCallback.setInitialAttachApnResponse()
+     * Response callback is IRadioResponse.setInitialAttachApnResponse()
      */
-    oneway setInitialAttachApn(int32_t serial, string apn, string protocol, ApnAuthType authType,
-            string username, string password);
+    oneway setInitialAttachApn(int32_t serial, DataProfileInfo dataProfileInfo,
+            bool modemCognitive);
 
     /*
      * Request current IMS registration state
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getImsRegistrationStateResponse()
+     * Response callback is IRadioResponse.getImsRegistrationStateResponse()
      */
     oneway getImsRegistrationState(int32_t serial);
 
@@ -1299,7 +1287,7 @@
      * @param serial Serial number of request.
      * @param message ImsSmsMessage as defined in types.hal to be sent
      *
-     * Response callback is IRadioCallback.sendImsSmsResponse()
+     * Response callback is IRadioResponse.sendImsSmsResponse()
      */
     oneway sendImsSms(int32_t serial, ImsSmsMessage message);
 
@@ -1313,7 +1301,7 @@
      * @param serial Serial number of request.
      * @param message SimApdu as defined in types.hal to be sent
      *
-     * Response callback is IRadioCallback.iccTransmitApduBasicChannelResponse()
+     * Response callback is IRadioResponse.iccTransmitApduBasicChannelResponse()
      */
     oneway iccTransmitApduBasicChannel(int32_t serial, SimApdu message);
 
@@ -1324,7 +1312,7 @@
      * @param serial Serial number of request.
      * @param aid AID value, See ETSI 102.221 and 101.220.
      *
-     * Response callback is IRadioCallback.iccOpenLogicalChannelResponse()
+     * Response callback is IRadioResponse.iccOpenLogicalChannelResponse()
      */
     oneway iccOpenLogicalChannel(int32_t serial, string aid);
 
@@ -1335,7 +1323,7 @@
      * @param serial Serial number of request.
      * @param channelId session id of the logical channel (+CCHC).
      *
-     * Response callback is IRadioCallback.iccCloseLogicalChannelResponse()
+     * Response callback is IRadioResponse.iccCloseLogicalChannelResponse()
      */
     oneway iccCloseLogicalChannel(int32_t serial, int32_t channelId);
 
@@ -1348,7 +1336,7 @@
      * @param serial Serial number of request.
      * @param message SimApdu as defined in types.hal to be sent
      *
-     * Response callback is IRadioCallback.iccTransmitApduLogicalChannelResponse()
+     * Response callback is IRadioResponse.iccTransmitApduLogicalChannelResponse()
      */
     oneway iccTransmitApduLogicalChannel(int32_t serial, SimApdu message);
 
@@ -1359,7 +1347,7 @@
      * @param serial Serial number of request.
      * @param itemId NvItem is radio NV item as defined in types.hal
      *
-     * Response callback is IRadioCallback.nvReadItemResponse()
+     * Response callback is IRadioResponse.nvReadItemResponse()
      */
     oneway nvReadItem(int32_t serial, NvItem itemId);
 
@@ -1370,7 +1358,7 @@
      * @param serial Serial number of request.
      * @param item NvWriteItem as defined in types.hal
      *
-     * Response callback is IRadioCallback.nvWriteItemResponse()
+     * Response callback is IRadioResponse.nvWriteItemResponse()
      */
     oneway nvWriteItem(int32_t serial, NvWriteItem item);
 
@@ -1381,7 +1369,7 @@
      * @param serial Serial number of request.
      * @param prl PRL as a byte array
      *
-     * Response callback is IRadioCallback.nvWriteCdmaPrlResponse()
+     * Response callback is IRadioResponse.nvWriteCdmaPrlResponse()
      */
     oneway nvWriteCdmaPrl(int32_t serial, vec<uint8_t> prl);
 
@@ -1392,7 +1380,7 @@
      * @param serial Serial number of request.
      * @param resetType ResetNvType as defined in types.hal
      *
-     * Response callback is IRadioCallback.nvResetConfigResponse()
+     * Response callback is IRadioResponse.nvResetConfigResponse()
      */
     oneway nvResetConfig(int32_t serial, ResetNvType resetType);
 
@@ -1402,7 +1390,7 @@
      * @param serial Serial number of request.
      * @param uiccSub SelectUiccSub as defined in types.hal
      *
-     * Response callback is IRadioCallback.setUiccSubscriptionResponse()
+     * Response callback is IRadioResponse.setUiccSubscriptionResponse()
      */
     oneway setUiccSubscription(int32_t serial, SelectUiccSub uiccSub);
 
@@ -1412,7 +1400,7 @@
      * @param serial Serial number of request.
      * @param allow true to allow data calls, false to disallow data calls
      *
-     * Response callback is IRadioCallback.setDataAllowedResponse()
+     * Response callback is IRadioResponse.setDataAllowedResponse()
      */
     oneway setDataAllowed(int32_t serial, bool allow);
 
@@ -1421,7 +1409,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getHardwareConfigResponse()
+     * Response callback is IRadioResponse.getHardwareConfigResponse()
      */
     oneway getHardwareConfig(int32_t serial);
 
@@ -1434,7 +1422,7 @@
      * @param authData the challenge string in Base64 format, see 3GPP TS 31.102 7.1.2
      * @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value
      *
-     * Response callback is IRadioCallback.requestIccSimAuthenticationResponse()
+     * Response callback is IRadioResponse.requestIccSimAuthenticationResponse()
      */
     oneway requestIccSimAuthentication(int32_t serial, int32_t authContext, string authData,
             string aid);
@@ -1446,7 +1434,7 @@
      * @param serial Serial number of request.
      * @param profiles Array of DataProfiles to set.
      *
-     * Response callback is IRadioCallback.setDataProfileResponse()
+     * Response callback is IRadioResponse.setDataProfileResponse()
      */
     oneway setDataProfile(int32_t serial, vec<DataProfileInfo> profiles);
 
@@ -1456,7 +1444,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.requestShutdownResponse()
+     * Response callback is IRadioResponse.requestShutdownResponse()
      */
     oneway requestShutdown(int32_t serial);
 
@@ -1465,7 +1453,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getRadioCapabilityResponse()
+     * Response callback is IRadioResponse.getRadioCapabilityResponse()
      */
     oneway getRadioCapability(int32_t serial);
 
@@ -1478,7 +1466,7 @@
      * @param serial Serial number of request.
      * @param rc RadioCapability structure to be set
      *
-     * Response callback is IRadioCallback.setRadioCapabilityResponse()
+     * Response callback is IRadioResponse.setRadioCapabilityResponse()
      */
     oneway setRadioCapability(int32_t serial, RadioCapability rc);
 
@@ -1489,7 +1477,7 @@
      * @param reportInterval desired reporting interval (ms).
      * @param pullMode LCE service mode. true: PULL; false: PUSH.
      *
-     * Response callback is IRadioCallback.startLceServiceResponse()
+     * Response callback is IRadioResponse.startLceServiceResponse()
      */
     oneway startLceService(int32_t serial, int32_t reportInterval, bool pullMode);
 
@@ -1499,7 +1487,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.stopLceServiceResponse()
+     * Response callback is IRadioResponse.stopLceServiceResponse()
      */
     oneway stopLceService(int32_t serial);
 
@@ -1508,7 +1496,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.pullLceDataResponse()
+     * Response callback is IRadioResponse.pullLceDataResponse()
      */
     oneway pullLceData(int32_t serial);
 
@@ -1520,7 +1508,7 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getModemActivityInfoResponse()
+     * Response callback is IRadioResponse.getModemActivityInfoResponse()
      */
     oneway getModemActivityInfo(int32_t serial);
 
@@ -1544,7 +1532,7 @@
      * @param carriers CarrierRestrictions consisting allowed and excluded carriers as defined
      *        in types.hal
      *
-     * Response callback is IRadioCallback.setAllowedCarriersResponse()
+     * Response callback is IRadioResponse.setAllowedCarriersResponse()
      */
     oneway setAllowedCarriers(int32_t serial, bool allAllowed, CarrierRestrictions carriers);
 
@@ -1553,14 +1541,54 @@
      *
      * @param serial Serial number of request.
      *
-     * Response callback is IRadioCallback.getAllowedCarriersResponse()
+     * Response callback is IRadioResponse.getAllowedCarriersResponse()
      */
     oneway getAllowedCarriers(int32_t serial);
 
     /*
+     * Send the updated device state.
+     * This is providing the device state information for the modem to perform power saving
+     * strategies.
+     *
+     * @param serial Serial number of request.
+     * @param deviceStateType The updated device state type.
+     * @param state The updated state. See the definition of state at DeviceStateType.
+     *
+     * Response callback is IRadioResponse.sendDeviceStateResponse()
+     */
+    oneway sendDeviceState(int32_t serial, DeviceStateType deviceStateType, bool state);
+
+    /*
+     * Set the indication filter.
+     * This is used to prevent unnecessary application processor wake up for power saving purposes
+     * by suppressing the indications in certain scenarios.
+     *
+     * @param serial Serial number of request.
+     * @param indicationFilter 32-bit bitmap of IndicationFilter. Bits set to 1 indicate the
+     *        indications are enabled. See IndicationFilter for the definition of each bit.
+     *
+     * Response callback is IRadioResponse.setIndicationFilterResponse()
+     */
+    oneway setIndicationFilter(int32_t serial, bitfield<IndicationFilter> indicationFilter);
+
+    /*
+     * Set SIM card power state.
+     * Request is equivalent to inserting or removing the card.
+     *
+     * The radio modem must generate IRadioIndication.simStatusChanged() as if the SIM had been
+     * inserted or removed.
+     *
+     * @param serial Serial number of request
+     * @param powerUp True if powering up the sim card
+     *
+     * Response callback is IRadioResponse.setSimCardPowerResponse()
+     */
+    oneway setSimCardPower(int32_t serial, bool powerUp);
+
+    /*
      * When response type received from a radio indication or radio response is
      * RadioIndicationType:UNSOLICITED_ACK_EXP or RadioResponseType:SOLICITED_ACK_EXP respectively,
-     * acknowledge the receipt of those messages by sending reseponeAcknowledgement().
+     * acknowledge the receipt of those messages by sending responseAcknowledgement().
      *
      */
     oneway responseAcknowledgement();
diff --git a/radio/1.0/IRadioIndication.hal b/radio/1.0/IRadioIndication.hal
index 79ebf30..81ac13a 100644
--- a/radio/1.0/IRadioIndication.hal
+++ b/radio/1.0/IRadioIndication.hal
@@ -42,12 +42,13 @@
     oneway callStateChanged(RadioIndicationType type);
 
     /*
-     * Indicates when voice network state changed
-     * Callee must invoke IRadio.getVoiceRegistrationState() and IRadio.getOperator()
+     * Indicates when voice or data network state changed
+     * Callee must invoke IRadio.getVoiceRegistrationState(), IRadio.getDataRegistrationState(),
+     * and IRadio.getOperator()
      *
      * @param type Type of radio indication
      */
-    oneway voiceNetworkStateChanged(RadioIndicationType type);
+    oneway networkStateChanged(RadioIndicationType type);
 
     /*
      * Indicates when new SMS is received.
@@ -342,10 +343,6 @@
    oneway exitEmergencyCallbackMode(RadioIndicationType type);
 
    /*
-    * TODO(Consider moving this to separate interface. Client will receive this function with an
-    * IRadioResponse interface so that all requests in that IRadioResponse will fail before
-    * rilConnected() is received)
-    *
     * Indicates the ril connects and returns the version
     *
     * @param type Type of radio indication
@@ -472,4 +469,4 @@
     *        restart" that explains the cause of the modem restart
     */
    oneway modemReset(RadioIndicationType type, string reason);
-};
\ No newline at end of file
+};
diff --git a/radio/1.0/IRadioResponse.hal b/radio/1.0/IRadioResponse.hal
index 8ff2e24..637f697 100644
--- a/radio/1.0/IRadioResponse.hal
+++ b/radio/1.0/IRadioResponse.hal
@@ -1562,6 +1562,16 @@
 
     /*
      * @param info Response info struct containing response type, serial no. and error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway reportStkServiceIsRunningResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. and error
      * @param source CDMA subscription source
      *
      * Valid errors returned:
@@ -1939,7 +1949,38 @@
             CarrierRestrictions carriers);
 
     /*
-     * Acknowldege the receipt of radio request sent to the vendor. This must be sent only for
+     * @param info Response info struct containing response type, serial no. and error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     */
+    oneway sendDeviceStateResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. and error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:INVALID_ARGUMENTS
+     *   RadioError:RADIO_NOT_AVAILABLE
+     */
+    oneway setIndicationFilterResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. and error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:REQUEST_NOT_SUPPORTED
+     *   RadioError:SIM_ABSENT
+     *   RadioError:INVALID_ARGUMENTS
+     */
+    oneway setSimCardPowerResponse(RadioResponseInfo info);
+
+    /*
+     * Acknowledge the receipt of radio request sent to the vendor. This must be sent only for
      * radio request which take long time to respond.
      * For more details, refer https://source.android.com/devices/tech/connect/ril.html
      *
diff --git a/radio/1.0/types.hal b/radio/1.0/types.hal
index 941a59e..91030ef 100644
--- a/radio/1.0/types.hal
+++ b/radio/1.0/types.hal
@@ -109,17 +109,14 @@
     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
+    NOT_PROVISIONED = 61,                 // Device does not have this value provisioned
+    NO_SUBSCRIPTION = 62,                 // Device does not 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
     ABORTED = 65,                         // Operation aborted
     INVALID_RESPONSE = 66,                // Response from vendor had invalid data
 
-    // 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,
@@ -223,7 +220,7 @@
     RUIM_CORPORATE,
     RUIM_SERVICE_PROVIDER,
     RUIM_RUIM,
-    RUIM_NETWORK1_PUK,                   // The corresponding perso lock is blocked
+    RUIM_NETWORK1_PUK,                    // The corresponding perso lock is blocked
     RUIM_NETWORK2_PUK,
     RUIM_HRPD_PUK,
     RUIM_CORPORATE_PUK,
@@ -232,7 +229,7 @@
 };
 
 enum RadioState : int32_t {
-    OFF = 0,                              // Radio explictly powered off (eg CFUN=0)
+    OFF = 0,                              // Radio explicitly powered off (eg CFUN=0)
     UNAVAILABLE = 1,                      // Radio unavailable (eg, resetting or not booted)
     ON = 10,                              // Radio is ON
 };
@@ -242,17 +239,17 @@
     CONNECT_FAILURE,
     MSG_SIZE_TOO_LARGE,
     MSG_SIZE_TOO_SMALL,
-    CONNECT_OK_CALL_ONGOING
+    CONNECT_OK_CALL_ONGOING,
 };
 
 enum SapDisconnectType : int32_t {
     GRACEFUL,
-    IMMEDIATE
+    IMMEDIATE,
 };
 
 enum SapApduType : int32_t {
     APDU,
-    APDU7816
+    APDU7816,
 };
 
 enum SapResultCode : int32_t {
@@ -263,7 +260,7 @@
     CARD_REMOVED,
     CARD_ALREADY_POWERED_ON,
     DATA_NOT_AVAILABLE,
-    NOT_SUPPORTED
+    NOT_SUPPORTED,
 };
 
 enum SapStatus : int32_t {
@@ -272,21 +269,21 @@
     CARD_NOT_ACCESSIBLE,
     CARD_REMOVED,
     CARD_INSERTED,
-    RECOVERED
+    RECOVERED,
 };
 
 enum SapTransferProtocol : int32_t {
     T0,
-    T1
+    T1,
 };
 
 enum CallState : int32_t {
     ACTIVE,
     HOLDING,
-    DIALING,                             // MO call only
-    ALERTING,                            // MO call only
-    INCOMING,                            // MT call only
-    WAITING,                             // MT call only
+    DIALING,                              // MO call only
+    ALERTING,                             // MO call only
+    INCOMING,                             // MT call only
+    WAITING,                              // MT call only
 };
 
 /*
@@ -311,7 +308,7 @@
     USP,                                  // User specified protocol
     OSIHLP,                               // OSI higher layer protocol
     X244,                                 // X.244
-    RMCF,                                 // Reserved for system mangement convergence function
+    RMCF,                                 // Reserved for system management convergence function
     IA5C,                                 // IA5 characters
 };
 
@@ -323,9 +320,9 @@
 };
 
 enum Clir : int32_t {
-    DEFAULT,                               // "use subscription default value"
-    INVOCATION,                            // restrict CLI presentation
-    SUPPRESSION,                           // allow CLI presentation
+    DEFAULT,                              // "use subscription default value"
+    INVOCATION,                           // restrict CLI presentation
+    SUPPRESSION,                          // allow CLI presentation
 };
 
 enum LastCallFailCause : int32_t {
@@ -462,9 +459,6 @@
     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,
@@ -519,7 +513,7 @@
                                           // 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
+    UNKNOWN_EM,                           // Same as UNKNOWN but indicates that
                                           // emergency calls are enabled.
 };
 
@@ -539,14 +533,14 @@
     EVDO_B = 12,
     EHRPD = 13,
     LTE = 14,
-    HSPAP = 15,                            // HSPA+
-    GSM = 16,                              // Only supports voice
+    HSPAP = 15,                           // HSPA+
+    GSM = 16,                             // Only supports voice
     TD_SCDMA = 17,
     IWLAN = 18,
     LTE_CA = 19,
 };
 
-enum DataProfile : int32_t {
+enum DataProfileId : int32_t {
     DEFAULT = 0,
     TETHERED = 1,
     IMS = 2,
@@ -557,7 +551,7 @@
 };
 
 enum SmsAcknowledgeFailCause : int32_t {
-    MEMORY_CAPAPCITY_EXCEEDED = 0xD3,
+    MEMORY_CAPACITY_EXCEEDED = 0xD3,
     UNSPECIFIED_ERROR = 0XFF,
 };
 
@@ -572,7 +566,7 @@
 enum ClipStatus : int32_t {
     CLIP_PROVISIONED,                     // CLIP provisioned
     CLIP_UNPROVISIONED,                   // CLIP not provisioned
-    UNKOWN,                               // unknown, e.g. no network etc
+    UNKNOWN,                              // unknown, e.g. no network etc
 };
 
 enum SmsWriteArgsStatus : int32_t {
@@ -659,63 +653,63 @@
 
 enum NvItem : int32_t {
     // CDMA radio and account information (items 1-10)
-    CDMA_MEID = 1,                       // CDMA MEID (hex)
-    CDMA_MIN = 2,                        // CDMA MIN (MSID)
-    CDMA_MDN = 3,                        // CDMA MDN
-    CDMA_ACCOLC = 4,                     // CDMA access overload control
+    CDMA_MEID = 1,                        // CDMA MEID (hex)
+    CDMA_MIN = 2,                         // CDMA MIN (MSID)
+    CDMA_MDN = 3,                         // CDMA MDN
+    CDMA_ACCOLC = 4,                      // CDMA access overload control
 
     // Carrier device provisioning (items 11-30)
-    DEVICE_MSL = 11,                     // device MSL
-    RTN_RECONDITIONED_STATUS = 12,       // RTN reconditioned status
-    RTN_ACTIVATION_DATE = 13,            // RTN activation date
-    RTN_LIFE_TIMER = 14,                 // RTN life timer
-    RTN_LIFE_CALLS = 15,                 // RTN life calls
-    RTN_LIFE_DATA_TX = 16,               // RTN life data TX
-    RTN_LIFE_DATA_RX = 17,               // RTN life data RX
-    OMADM_HFA_LEVEL = 18,                // HFA in progress
+    DEVICE_MSL = 11,                      // device MSL
+    RTN_RECONDITIONED_STATUS = 12,        // RTN reconditioned status
+    RTN_ACTIVATION_DATE = 13,             // RTN activation date
+    RTN_LIFE_TIMER = 14,                  // RTN life timer
+    RTN_LIFE_CALLS = 15,                  // RTN life calls
+    RTN_LIFE_DATA_TX = 16,                // RTN life data TX
+    RTN_LIFE_DATA_RX = 17,                // RTN life data RX
+    OMADM_HFA_LEVEL = 18,                 // HFA in progress
 
     // Mobile IP profile information (items 31-50)
-    MIP_PROFILE_NAI = 31,                // NAI realm
-    MIP_PROFILE_HOME_ADDRESS = 32,       // MIP home address
-    MIP_PROFILE_AAA_AUTH = 33,           // AAA auth
-    MIP_PROFILE_HA_AUTH = 34,            // HA auth
-    MIP_PROFILE_PRI_HA_ADDR = 35,        // primary HA address
-    MIP_PROFILE_SEC_HA_ADDR = 36,        // secondary HA address
-    MIP_PROFILE_REV_TUN_PREF = 37,       // reverse TUN preference
-    MIP_PROFILE_HA_SPI = 38,             // HA SPI
-    MIP_PROFILE_AAA_SPI = 39,            // AAA SPI
-    MIP_PROFILE_MN_HA_SS = 40,           // HA shared secret
-    MIP_PROFILE_MN_AAA_SS = 41,          // AAA shared secret
+    MIP_PROFILE_NAI = 31,                 // NAI realm
+    MIP_PROFILE_HOME_ADDRESS = 32,        // MIP home address
+    MIP_PROFILE_AAA_AUTH = 33,            // AAA auth
+    MIP_PROFILE_HA_AUTH = 34,             // HA auth
+    MIP_PROFILE_PRI_HA_ADDR = 35,         // primary HA address
+    MIP_PROFILE_SEC_HA_ADDR = 36,         // secondary HA address
+    MIP_PROFILE_REV_TUN_PREF = 37,        // reverse TUN preference
+    MIP_PROFILE_HA_SPI = 38,              // HA SPI
+    MIP_PROFILE_AAA_SPI = 39,             // AAA SPI
+    MIP_PROFILE_MN_HA_SS = 40,            // HA shared secret
+    MIP_PROFILE_MN_AAA_SS = 41,           // AAA shared secret
 
     // CDMA network and band config (items 51-70)
-    CDMA_PRL_VERSION = 51,               // CDMA PRL version
-    CDMA_BC10 = 52,                      // CDMA band class 10
-    CDMA_BC14 = 53,                      // CDMA band class 14
-    CDMA_SO68 = 54,                      // CDMA SO68
-    CDMA_SO73_COP0 = 55,                 // CDMA SO73 COP0
-    CDMA_SO73_COP1TO7 = 56,              // CDMA SO73 COP1-7
-    CDMA_1X_ADVANCED_ENABLED = 57,       // CDMA 1X Advanced enabled
-    CDMA_EHRPD_ENABLED = 58,             // CDMA eHRPD enabled
-    CDMA_EHRPD_FORCED = 59,              // CDMA eHRPD forced
+    CDMA_PRL_VERSION = 51,                // CDMA PRL version
+    CDMA_BC10 = 52,                       // CDMA band class 10
+    CDMA_BC14 = 53,                       // CDMA band class 14
+    CDMA_SO68 = 54,                       // CDMA SO68
+    CDMA_SO73_COP0 = 55,                  // CDMA SO73 COP0
+    CDMA_SO73_COP1TO7 = 56,               // CDMA SO73 COP1-7
+    CDMA_1X_ADVANCED_ENABLED = 57,        // CDMA 1X Advanced enabled
+    CDMA_EHRPD_ENABLED = 58,              // CDMA eHRPD enabled
+    CDMA_EHRPD_FORCED = 59,               // CDMA eHRPD forced
 
     // LTE network and band config (items 71-90)
-    LTE_BAND_ENABLE_25 = 71,             // LTE band 25 enable
-    LTE_BAND_ENABLE_26 = 72,             // LTE band 26 enable
-    LTE_BAND_ENABLE_41 = 73,             // LTE band 41 enable
+    LTE_BAND_ENABLE_25 = 71,              // LTE band 25 enable
+    LTE_BAND_ENABLE_26 = 72,              // LTE band 26 enable
+    LTE_BAND_ENABLE_41 = 73,              // LTE band 41 enable
 
-    LTE_SCAN_PRIORITY_25 = 74,           // LTE band 25 scan priority
-    LTE_SCAN_PRIORITY_26 = 75,           // LTE band 26 scan priority
-    LTE_SCAN_PRIORITY_41 = 76,           // LTE band 41 scan priority
+    LTE_SCAN_PRIORITY_25 = 74,            // LTE band 25 scan priority
+    LTE_SCAN_PRIORITY_26 = 75,            // LTE band 26 scan priority
+    LTE_SCAN_PRIORITY_41 = 76,            // LTE band 41 scan priority
 
-    LTE_HIDDEN_BAND_PRIORITY_25 = 77,    // LTE hidden band 25 priority
-    LTE_HIDDEN_BAND_PRIORITY_26 = 78,    // LTE hidden band 26 priority
-    LTE_HIDDEN_BAND_PRIORITY_41 = 79,    // LTE hidden band 41 priority
+    LTE_HIDDEN_BAND_PRIORITY_25 = 77,     // LTE hidden band 25 priority
+    LTE_HIDDEN_BAND_PRIORITY_26 = 78,     // LTE hidden band 26 priority
+    LTE_HIDDEN_BAND_PRIORITY_41 = 79,     // LTE hidden band 41 priority
 };
 
 enum ResetNvType : int32_t {
-    RELOAD,                              // reload all NV items
-    ERASE,                               // erase NV reset (SCRTN)
-    FACORY_RESET,                        // factory reset (RTN)
+    RELOAD,                               // reload all NV items
+    ERASE,                                // erase NV reset (SCRTN)
+    FACTORY_RESET,                        // factory reset (RTN)
 };
 
 enum HardwareConfigType : int32_t {
@@ -736,11 +730,11 @@
 };
 
 enum CarrierMatchType : int32_t {
-    ALL = 0,                               // Apply to all carriers with the same mcc/mnc
-    SPN = 1,                               // Use SPN and mcc/mnc to identify the carrier
-    IMSI_PREFIX = 2,                       // Use IMSI prefix and mcc/mnc to identify the carrier
-    GID1 = 3,                              // Use GID1 and mcc/mnc to identify the carrier
-    GID2 = 4,                              // Use GID2 and mcc/mnc to identify the carrier
+    ALL = 0,                              // Apply to all carriers with the same mcc/mnc
+    SPN = 1,                              // Use SPN and mcc/mnc to identify the carrier
+    IMSI_PREFIX = 2,                      // Use IMSI prefix and mcc/mnc to identify the carrier
+    GID1 = 3,                             // Use GID1 and mcc/mnc to identify the carrier
+    GID2 = 4,                             // Use GID2 and mcc/mnc to identify the carrier
 };
 
 struct NeighboringCell {
@@ -804,8 +798,8 @@
 };
 
 enum CdmaSmsSubaddressType : int32_t {
-    NSAP,                                // CCITT X.213 or ISO 8348 AD2
-    USER_SPECIFIED,                      // e.g. X.25
+    NSAP,                                 // CCITT X.213 or ISO 8348 AD2
+    USER_SPECIFIED,                       // e.g. X.25
 };
 
 enum CdmaSmsErrorClass : int32_t {
@@ -849,30 +843,30 @@
 };
 
 enum RadioCapabilityPhase : int32_t {
-    CONFIGURED = 0,                      // Logical Modem's (LM)  initial value
-                                         // and value after FINISH completes
-    START      = 1,                      // START is sent before APPLY and indicates that an
-                                         // APPLY is forthcoming with these same parameters
-    APPLY      = 2,                      // APPLY is sent after all LM's receive START and returned
-                                         // RadioCapability.status = 0. If any START's fail, hal
-                                         // implementation must not send APPLY.
-    UNSOL_RSP  = 3,                      // UNSOL_RSP is sent with unsol radioCapability()
-    FINISH     = 4                       // FINISH is sent after all commands have completed. If an
-                                         // error occurs in any previous command, the
-                                         // RadioAccessesFamily and logicalModemUuid fields must be
-                                         // the prior configuration thus restoring the configuration
-                                         // to the previous value. An error returned by FINISH
-                                         // will generally be ignored or may cause that logical
-                                         // modem to be removed from service.
+    CONFIGURED = 0,                       // Logical Modem's (LM)  initial value
+                                          // and value after FINISH completes
+    START      = 1,                       // START is sent before APPLY and indicates that an
+                                          // APPLY is forthcoming with these same parameters
+    APPLY      = 2,                       // APPLY is sent after all LM's receive START and returned
+                                          // RadioCapability.status = 0. If any START's fail, hal
+                                          // implementation must not send APPLY.
+    UNSOL_RSP  = 3,                       // UNSOL_RSP is sent with unsolicited radioCapability()
+    FINISH     = 4                        // FINISH is sent after all commands have completed. If an
+                                          // error occurs in any previous command, the
+                                          // RadioAccessesFamily and logicalModemUuid fields must be
+                                          // the prior configuration thus restoring the
+                                          // configuration to the previous value. An error returned
+                                          // by FINISH will generally be ignored or may cause that
+                                          // logical modem to be removed from service.
 };
 
 enum RadioCapabilityStatus : int32_t {
-    NONE       = 0,                      // This parameter has no meaning with
-                                         // RadioCapabilityPhase:START, RadioCapabilityPhase:APPLY
-    SUCCESS    = 1,                      // Tell modem the action transaction of set radio
-                                         // capability was success with RadioCapabilityPhase:FINISH
-    FAIL       = 2,                      // Tell modem the action transaction of set radio
-                                         // capability is fail with RadioCapabilityPhase:FINISH.
+    NONE       = 0,                       // This parameter has no meaning with
+                                          // RadioCapabilityPhase:START, RadioCapabilityPhase:APPLY
+    SUCCESS    = 1,                       // Tell modem the action transaction of set radio
+                                          // capability was success with RadioCapabilityPhase:FINISH
+    FAIL       = 2,                       // Tell modem the action transaction of set radio
+                                          // capability is fail with RadioCapabilityPhase:FINISH.
 };
 
 enum RadioAccessFamily : int32_t {
@@ -898,19 +892,19 @@
 };
 
 enum UssdModeType : int32_t {
-    NOTIFY,                                // USSD-Notify
-    REQUEST,                               // USSD-Request
-    NW_RELEASE,                            // Session terminated by network
-    LOCAL_CLIENT,                          // other local client (eg, SIM Toolkit) has responded
-    NOT_SUPPORTED,                         // Operation not supported
-    NW_TIMEOUT,                            // Network timeout
+    NOTIFY,                               // USSD-Notify
+    REQUEST,                              // USSD-Request
+    NW_RELEASE,                           // Session terminated by network
+    LOCAL_CLIENT,                         // other local client (eg, SIM Toolkit) has responded
+    NOT_SUPPORTED,                        // Operation not supported
+    NW_TIMEOUT,                           // Network timeout
 };
 
 enum SimRefreshType : int32_t {
-    SIM_FILE_UPDATE = 0,                   // A file on SIM has been updated.
-    SIM_INIT = 1,                          // SIM initialized. All files should be re-read.
-    SIM_RESET = 2                          // SIM reset. SIM power required, SIM may be locked a
-                                           // nd all files must be re-read.
+    SIM_FILE_UPDATE = 0,                  // A file on SIM has been updated.
+    SIM_INIT = 1,                         // SIM initialized. All files should be re-read.
+    SIM_RESET = 2                         // SIM reset. SIM power required, SIM may be locked a
+                                          // nd all files must be re-read.
 };
 
 enum SrvccState :int32_t {
@@ -938,15 +932,15 @@
 };
 
 enum PhoneRestrictedState : int32_t {
-    NONE = 0x00,                           // No restriction at all including voice/SMS/USSD/SS/AV64
-                                           // and packet data
-    CS_EMERGENCY = 0x01,                   // Block emergency call due to restriction. But allow all
-                                           // normal voice/SMS/USSD/SS/AV64.
-    CS_NORMAL = 0x02,                      // Block all normal voice/SMS/USSD/SS/AV64 due to
-                                           // restriction. Only Emergency call allowed.
-    CS_ALL = 0x04,                         // Block all voice/SMS/USSD/SS/AV64 including emergency
-                                           // call due to restriction.
-    PS_ALL = 0x10                          // Block packet data access due to restriction.
+    NONE = 0x00,                          // No restriction at all including voice/SMS/USSD/SS/AV64
+                                          // and packet data
+    CS_EMERGENCY = 0x01,                  // Block emergency call due to restriction. But allow all
+                                          // normal voice/SMS/USSD/SS/AV64.
+    CS_NORMAL = 0x02,                     // Block all normal voice/SMS/USSD/SS/AV64 due to
+                                          // restriction. Only Emergency call allowed.
+    CS_ALL = 0x04,                        // Block all voice/SMS/USSD/SS/AV64 including emergency
+                                          // call due to restriction.
+    PS_ALL = 0x10                         // Block packet data access due to restriction.
 };
 
 enum CdmaCallWaitingNumberPresentation : int32_t {
@@ -1065,6 +1059,70 @@
     MAX = 1 << 7
 };
 
+enum ApnTypes : int32_t {
+    NONE = 0,                             // None
+    DEFAULT = 1 << 0,                     // APN type for default data traffic
+    MMS = 1 << 1,                         // APN type for MMS traffic
+    SUPL = 1 << 2,                        // APN type for SUPL assisted GPS
+    DUN = 1 << 3,                         // APN type for DUN traffic
+    HIPRI = 1 << 4,                       // APN type for HiPri traffic
+    FOTA = 1 << 5,                        // APN type for FOTA
+    IMS = 1 << 6,                         // APN type for IMS
+    CBS = 1 << 7,                         // APN type for CBS
+    IA = 1 << 8,                          // APN type for IA Initial Attach APN
+    EMERGENCY = 1 << 9,                   // APN type for Emergency PDN. This is not an IA apn,
+                                          // but is used for access to carrier services in an
+                                          // emergency call situation.
+    ALL = DEFAULT | MMS | SUPL | DUN | HIPRI | FOTA | IMS | CBS | IA | EMERGENCY,
+};
+
+enum IndicationFilter : int32_t {
+    NONE = 0,
+    SIGNAL_STRENGTH = 1 << 0,             // When this bit is set, modem should always send the
+                                          // signal strength update through
+                                          // IRadioIndication.currentSignalStrength(),
+                                          // otherwise suppress it.
+    FULL_NETWORK_STATE = 1 << 1,          // When this bit is set, modem should always invoke
+                                          // IRadioIndication.networkStateChanged() when any field
+                                          // in VoiceRegStateResult or DataRegStateResult changes.
+                                          // When this bit is not set, modem should suppress
+                                          // IRadioIndication.networkStateChanged() when there are
+                                          // only changes from those insignificant fields
+                                          // (e.g. cell info). Modem should continue invoking
+                                          // IRadioIndication.networkStateChanged()
+                                          // when significant fields are updated even when this bit
+                                          // is not set. The following fields are considered
+                                          // significant, registration state and radio technology.
+    DATA_CALL_DORMANCY_CHANGED = 1 << 2,  // When this bit is set, modem should send the data call
+                                          // list changed indication
+                                          // IRadioIndication.dataCallListChanged() whenever any
+                                          // field in ITypes.SetupDataCallResult changes. Otherwise
+                                          // modem should suppress the indication when the only
+                                          // changed field is 'active' (for data dormancy).
+                                          // For all other fields change, modem should continue
+                                          // sending IRadioIndication.dataCallListChanged()
+                                          // regardless this bit is set or not.
+    ALL = SIGNAL_STRENGTH | FULL_NETWORK_STATE | DATA_CALL_DORMANCY_CHANGED,
+};
+
+enum MvnoType : int32_t {
+    NONE,                                 // None
+    IMSI,                                 // The matching data is based on IMSI.
+    GID,                                  // The matching data is based on group id.
+    SPN,                                  // The matching data is based service provider name.
+};
+
+enum DeviceStateType : int32_t {
+    POWER_SAVE_MODE,                      // Device power save mode (provided by PowerManager)
+                                          // True indicates the device is in power save mode.
+    CHARGING_STATE,                       // Device charging state (provided by BatteryManager)
+                                          // True indicates the device is charging.
+    LOW_DATA_EXPECTED                     // Low data expected mode. True indicates low data traffic
+                                          // is expected, for example, when the device is idle
+                                          // (e.g. not doing tethering in the background). Note
+                                          // this doesn't mean no data is expected.
+};
+
 struct RadioResponseInfo {
     RadioResponseType type;               // Response type
     int32_t serial;                       // Serial number of the request
@@ -1199,7 +1257,7 @@
 };
 
 struct TdScdmaSignalStrength {
-    uint32_t rscp;                        // The Received Signal Code Power in dBm multipled by -1.
+    uint32_t rscp;                        // The Received Signal Code Power in dBm multiplied by -1.
                                           // Range : 25 to 120
                                           // INT_MAX: 0x7FFFFFFF denotes invalid value.
                                           // Reference: 3GPP TS 25.123, section 9.1.1.1
@@ -1228,7 +1286,7 @@
     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 unit is milliseconds.
                                           // 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.
@@ -1266,7 +1324,7 @@
     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 is in hex ascii format eg "7f205f70"
                                           // Path must always be provided.
     int32_t p1;                           // Values of p1, p2 and p3 defined as per 3GPP TS 51.011
     int32_t p2;
@@ -1295,7 +1353,7 @@
                                           // 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.
+                                          // valid values as defined by 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
@@ -1381,11 +1439,11 @@
     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.
+                                          // valid values as defined by 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".
+                                          // Annex G.6 "Additional 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
@@ -1415,7 +1473,7 @@
     int32_t serviceClass;                 // From 27.007 +CCFC/+CLCK "class"
                                           // See table for Android mapping from
                                           // MMI service code
-                                          // 0 means user doesnt input class
+                                          // 0 means user doesn't input class
     int32_t toa;                          // "type" from TS 27.007 7.11
     string number;                        // "number" from TS 27.007 7.11.
     int32_t timeSeconds;
@@ -1439,27 +1497,27 @@
 };
 
 struct CdmaSmsAddress {
-    CdmaSmsDigitMode digitMode;          // CdmaSmsDigitMode is of two types : 4 bit and 8 bit.
-                                         // For 4-bit type, only "digits" field defined below in
-                                         // this struct is used.
-    CdmaSmsNumberMode numberMode;        // Used only when digitMode is 8-bit
-    CdmaSmsNumberType numberType;        // Used only when digitMode is 8-bit.
-                                         // To specify an international address, use the following:
-                                         // digitMode = CdmaSmsDigitMode:EIGHT_BIT:
-                                         // numberMode = CdmaSmsNumberMode:NOT_DATA_NETWORK
-                                         // numberType = CdmaSmsNumberType:INTERNATIONAL_OR_DATA_IP
-                                         // numberPlan = CdmaSmsNumberPlan:TELEPHONY
-                                         // numberOfDigits = number of digits
-                                         // digits = ASCII digits, e.g. '1', '2', '3', '4', and '5'
-    CdmaSmsNumberPlan numberPlan;        // Used only when digitMode is 8-bit
-    vec<uint8_t> digits;                 // Each byte in this array represents a 4 bit or 8-bit digit
-                                         // of address data
+    CdmaSmsDigitMode digitMode;           // CdmaSmsDigitMode is of two types : 4 bit and 8 bit.
+                                          // For 4-bit type, only "digits" field defined below in
+                                          // this struct is used.
+    CdmaSmsNumberMode numberMode;         // Used only when digitMode is 8-bit
+    CdmaSmsNumberType numberType;         // Used only when digitMode is 8-bit.
+                                          // To specify an international address, use the following:
+                                          // digitMode = CdmaSmsDigitMode:EIGHT_BIT:
+                                          // numberMode = CdmaSmsNumberMode:NOT_DATA_NETWORK
+                                          // numberType = CdmaSmsNumberType:INTERNATIONAL_OR_DATA_IP
+                                          // numberPlan = CdmaSmsNumberPlan:TELEPHONY
+                                          // numberOfDigits = number of digits
+                                          // digits = ASCII digits, e.g. '1', '2', '3', '4', and '5'
+    CdmaSmsNumberPlan numberPlan;         // Used only when digitMode is 8-bit
+    vec<uint8_t> digits;                  // Each byte in this array represents a 4 bit or 8-bit
+                                          // digit of address data
 };
 
 struct CdmaSmsSubaddress {
     CdmaSmsSubaddressType subaddressType;
-    bool odd;                            // true means the last byte's lower 4 bits must be ignored
-    vec<uint8_t> digits;                 // Each byte respresents an 8-bit digit of subaddress data
+    bool odd;                             // true means the last byte's lower 4 bits must be ignored
+    vec<uint8_t> digits;                  // Each byte represents an 8-bit digit of subaddress data
 };
 
 struct CdmaSmsMessage {
@@ -1468,29 +1526,29 @@
     int32_t serviceCategory;
     CdmaSmsAddress address;
     CdmaSmsSubaddress subAddress;
-    vec<uint8_t> bearerData;             // 3GPP2 C.S0015-B, v2.0,
+    vec<uint8_t> bearerData;              // 3GPP2 C.S0015-B, v2.0,
 };
 
 struct CdmaSmsAck {
     CdmaSmsErrorClass errorClass;
-    int32_t smsCauseCode;                // As defined in N.S00005, 6.5.2.125.
-                                         // Currently, only 35 (resource shortage) and
-                                         // 39 (other terminal problem) are reported.
+    int32_t smsCauseCode;                 // As defined in N.S00005, 6.5.2.125.
+                                          // Currently, only 35 (resource shortage) and
+                                          // 39 (other terminal problem) are reported.
 };
 
 struct CdmaBroadcastSmsConfigInfo {
-    int32_t serviceCategory;             // serviceCategory defines a Broadcast message identifier
-                                         // whose value is 0x0000 - 0xFFFF as defined in
-                                         // C.R1001G 9.3.1 and 9.3.2.
-    int32_t language;                    // language code of Broadcast Message
-                                         // whose value is 0x00 - 0x07 as defined in C.R1001G 9.2.
-    bool selected;                       // selected false means message types specified in
-                                         // serviceCategory are not accepted, while true means
-                                         // accepted.
+    int32_t serviceCategory;              // serviceCategory defines a Broadcast message identifier
+                                          // whose value is 0x0000 - 0xFFFF as defined in
+                                          // C.R1001G 9.3.1 and 9.3.2.
+    int32_t language;                     // language code of Broadcast Message
+                                          // whose value is 0x00 - 0x07 as defined in C.R1001G 9.2.
+    bool selected;                        // selected false means message types specified in
+                                          // serviceCategory are not accepted, while true means
+                                          // accepted.
 };
 
 struct CdmaSmsWriteArgs {
-    CdmaSmsWriteArgsStatus status;       // Status of message. See TS 27.005 3.1
+    CdmaSmsWriteArgsStatus status;        // Status of message. See TS 27.005 3.1
     CdmaSmsMessage message;
 };
 
@@ -1520,68 +1578,68 @@
 };
 
 struct CellIdentityGsm {
-    string mcc;                          // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
-    string mnc;                          // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
-                                         // unknown
-    int32_t lac;                         // 16-bit Location Area Code, 0..65535, INT_MAX if unknown
-    int32_t cid;                         // 16-bit GSM Cell Identity described in
-                                         // TS 27.007, 0..65535, INT_MAX if unknown
-    int32_t arfcn;                       // 16-bit GSM Absolute RF channel number, INT_MAX if
-                                         // unknown
-    uint8_t bsic;                        // 6-bit Base Station Identity Code, 0xFF if unknown
+    string mcc;                           // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
+    string mnc;                           // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
+                                          // unknown
+    int32_t lac;                          // 16-bit Location Area Code, 0..65535, INT_MAX if unknown
+    int32_t cid;                          // 16-bit GSM Cell Identity described in
+                                          // TS 27.007, 0..65535, INT_MAX if unknown
+    int32_t arfcn;                        // 16-bit GSM Absolute RF channel number, INT_MAX if
+                                          // unknown
+    uint8_t bsic;                         // 6-bit Base Station Identity Code, 0xFF if unknown
 };
 
 struct CellIdentityWcdma {
-    string mcc;                          // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
-    string mnc;                          // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX
-                                         // if unknown
-    int32_t lac;                         // 16-bit Location Area Code, 0..65535, INT_MAX if unknown
-    int32_t cid;                         // 28-bit UMTS Cell Identity described in
-                                         // TS 25.331, 0..268435455, INT_MAX if unknown
-    int32_t psc;                         // 9-bit UMTS Primary Scrambling Code described in
-                                         // TS 25.331, 0..511, INT_MAX if unknown
-    int32_t uarfcn;                      // 16-bit UMTS Absolute RF Channel Number, INT_MAX if
-                                         // unknown
+    string mcc;                           // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
+    string mnc;                           // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX
+                                          // if unknown
+    int32_t lac;                          // 16-bit Location Area Code, 0..65535, INT_MAX if unknown
+    int32_t cid;                          // 28-bit UMTS Cell Identity described in
+                                          // TS 25.331, 0..268435455, INT_MAX if unknown
+    int32_t psc;                          // 9-bit UMTS Primary Scrambling Code described in
+                                          // TS 25.331, 0..511, INT_MAX if unknown
+    int32_t uarfcn;                       // 16-bit UMTS Absolute RF Channel Number, INT_MAX if
+                                          // unknown
 };
 
 struct CellIdentityCdma {
-    int32_t networkId;                   // Network Id 0..65535, INT_MAX if unknown
-    int32_t systemId;                    // CDMA System Id 0..32767, INT_MAX if unknown
-    int32_t basestationId;               // Base Station Id 0..65535, INT_MAX if unknown
-    int32_t longitude;                   // 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). INT_MAX if unknown
-    int32_t latitude;                    // 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). INT_MAX if unknown
+    int32_t networkId;                    // Network Id 0..65535, INT_MAX if unknown
+    int32_t systemId;                     // CDMA System Id 0..32767, INT_MAX if unknown
+    int32_t baseStationId;                // Base Station Id 0..65535, INT_MAX if unknown
+    int32_t longitude;                    // 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). INT_MAX if unknown
+    int32_t latitude;                     // 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). INT_MAX if unknown
 };
 
 struct CellIdentityLte {
-    string mcc;                          // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
-    string mnc;                          // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
-                                         // unknown
-    int32_t ci;                          // 28-bit Cell Identity described in TS TS 27.007, INT_MAX
-                                         // if unknown
-    int32_t pci;                         // physical cell id 0..503, INT_MAX if unknown
-    int32_t tac;                         // 16-bit tracking area code, INT_MAX if unknown
-    int32_t earfcn;                      // 18-bit LTE Absolute RC Channel Number, INT_MAX if
-                                         // unknown
+    string mcc;                           // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
+    string mnc;                           // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
+                                          // unknown
+    int32_t ci;                           // 28-bit Cell Identity described in TS TS 27.007, INT_MAX
+                                          // if unknown
+    int32_t pci;                          // physical cell id 0..503, INT_MAX if unknown
+    int32_t tac;                          // 16-bit tracking area code, INT_MAX if unknown
+    int32_t earfcn;                       // 18-bit LTE Absolute RC Channel Number, INT_MAX if
+                                          // unknown
 };
 
 struct CellIdentityTdscdma {
-    string mcc;                          // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
-    string mnc;                          // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
-                                         // unknown
-    int32_t lac;                         // 16-bit Location Area Code, 0..65535, INT_MAX if
-                                         // unknown
-    int32_t cid;                         // 28-bit UMTS Cell Identity described in
-                                         // TS 25.331, 0..268435455, INT_MAX if unknown
-    int32_t cpid;                        // 8-bit Cell Parameters ID described in
-                                         // TS 25.331, 0..127, INT_MAX if unknown
+    string mcc;                           // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
+    string mnc;                           // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
+                                          // unknown
+    int32_t lac;                          // 16-bit Location Area Code, 0..65535, INT_MAX if
+                                          // unknown
+    int32_t cid;                          // 28-bit UMTS Cell Identity described in
+                                          // TS 25.331, 0..268435455, INT_MAX if unknown
+    int32_t cpid;                         // 8-bit Cell Parameters ID described in
+                                          // TS 25.331, 0..127, INT_MAX if unknown
 };
 
 struct CellInfoGsm {
@@ -1611,56 +1669,57 @@
 };
 
 struct CellInfo {
-    CellInfoType cellInfoType;           // cell type for selecting from union CellInfo
-    bool registered;                     // true if this cell is registered false if not registered
-    TimeStampType timeStampType;         // type of time stamp represented by timeStamp
-    uint64_t timeStamp;                  // Time in nanos as returned by ril_nano_time
+    CellInfoType cellInfoType;            // cell type for selecting from union CellInfo
+    bool registered;                      // true if this cell is registered false if not registered
+    TimeStampType timeStampType;          // type of time stamp represented by timeStamp
+    uint64_t timeStamp;                   // Time in nanos as returned by ril_nano_time
     // Only one of the below vectors must be of size 1 based on the CellInfoType and others must be
     // of size 0
-    vec<CellInfoGsm> gsm;                // Valid only if type = gsm and size = 1 else must be empty
-    vec<CellInfoCdma> cdma;              // Valid only if type = cdma and size = 1 else must be
-                                         // empty
-    vec<CellInfoLte> lte;                // Valid only if type = lte and size = 1 else must be
-                                         // empty
-    vec<CellInfoWcdma> wcdma;            // Valid only if type = wcdma and size = 1 else must be
-                                         // empty
-    vec<CellInfoTdscdma> tdscdma;        // Valid only if type = tdscdma and size = 1 else must be
-                                         // empty
+    vec<CellInfoGsm> gsm;                 // Valid only if type = gsm and size = 1 else must be
+                                          // empty
+    vec<CellInfoCdma> cdma;               // Valid only if type = cdma and size = 1 else must be
+                                          // empty
+    vec<CellInfoLte> lte;                 // Valid only if type = lte and size = 1 else must be
+                                          // empty
+    vec<CellInfoWcdma> wcdma;             // Valid only if type = wcdma and size = 1 else must be
+                                          // empty
+    vec<CellInfoTdscdma> tdscdma;         // Valid only if type = tdscdma and size = 1 else must be
+                                          // empty
 };
 
 struct GsmSmsMessage {
-    string smscPdu;                      // SMSC address in GSM BCD format prefixed by a length
-                                         // byte (as expected by TS 27.005) or empty string for
-                                         // default SMSC
-    string pdu;                          // SMS in PDU format as an ASCII hex string less the
-                                         // SMSC address. TP-Layer-Length is be "strlen(pdu)/2
+    string smscPdu;                       // SMSC address in GSM BCD format prefixed by a length
+                                          // byte (as expected by TS 27.005) or empty string for
+                                          // default SMSC
+    string pdu;                           // SMS in PDU format as an ASCII hex string less the
+                                          // SMSC address. TP-Layer-Length is be "strlen(pdu)/2
 };
 
 struct ImsSmsMessage {
     RadioTechnologyFamily tech;
-    bool retry;                          // false == not retry, true == retry */
-    int32_t messageRef;                  // Valid field if retry is set to true.
-                                         // Contains messageRef from SendSmsResult stuct
-                                         // corresponding to failed MO SMS.
+    bool retry;                           // false == not retry, true == retry */
+    int32_t messageRef;                   // Valid field if retry is set to true.
+                                          // Contains messageRef from SendSmsResult struct
+                                          // corresponding to failed MO SMS.
     // Only one of the below vectors must be of size 1 based on the RadioTechnologyFamily and others
     // must be of size 0
-    vec<CdmaSmsMessage> cdmaMessage;     // Valid field if tech is 3GPP2 and size = 1 else must be
-                                         // empty
-    vec<GsmSmsMessage> gsmMessage;       // Valid field if tech is 3GPP and size = 1 else must be
-                                         // empty
+    vec<CdmaSmsMessage> cdmaMessage;      // Valid field if tech is 3GPP2 and size = 1 else must be
+                                          // empty
+    vec<GsmSmsMessage> gsmMessage;        // Valid field if tech is 3GPP and size = 1 else must be
+                                          // empty
 };
 
 struct SimApdu {
-    int32_t sessionId;                   // "sessionid" from TS 27.007 +CGLA command. Must be
-                                         // ignored for +CSIM command.
+    int32_t sessionId;                    // "sessionid" from TS 27.007 +CGLA command. Must be
+                                          // ignored for +CSIM command.
     // Following fields are used to derive the APDU ("command" and "length"
     // values in TS 27.007 +CSIM and +CGLA commands).
     int32_t cla;
     int32_t instruction;
     int32_t p1;
     int32_t p2;
-    int32_t p3;                          // A negative P3 implies a 4 byte APDU.
-    string data;                         // In hex string format ([a-fA-F0-9]*).
+    int32_t p3;                           // A negative P3 implies a 4 byte APDU.
+    string data;                          // In hex string format ([a-fA-F0-9]*).
 };
 
 struct NvWriteItem {
@@ -1670,160 +1729,173 @@
 
 struct SelectUiccSub {
     int32_t slot;
-    int32_t appIndex;                   // array subscriptor from
-                                        // applications[RadioConst:CARD_MAX_APPS] in
-                                        // getIccCardStatus()
+    int32_t appIndex;                     // array subscriptor from
+                                          // applications[RadioConst:CARD_MAX_APPS] in
+                                          // getIccCardStatus()
     SubscriptionType subType;
     UiccSubActStatus actStatus;
 };
 
 struct HardwareConfigModem {
     int32_t rilModel;
-    uint32_t rat;                       // bitset - ref. RadioTechnology.
+    uint32_t rat;                         // bitset - ref. RadioTechnology.
     int32_t maxVoice;
     int32_t maxData;
     int32_t maxStandby;
 };
 
 struct HardwareConfigSim {
-    string modemUuid;                   // RadioConst:MAX_UUID_LENGTH is max length of the
-                                        // string
+    string modemUuid;                     // RadioConst:MAX_UUID_LENGTH is max length of the string
 };
 
 struct HardwareConfig {
     HardwareConfigType type;
-    string uuid;                         // RadioConst:MAX_UUID_LENGTH is max length of the
-                                         // string
+    string uuid;                          // RadioConst:MAX_UUID_LENGTH is max length of the string
     HardwareConfigState state;
+
     // Only one of the below vectors must have size = 1 based on the HardwareConfigType and other
     // must have size = 0.
-    vec<HardwareConfigModem> modem;      // Valid only if type is Modem and size = 1 else must be
-                                         // empty
-    vec<HardwareConfigSim> sim;          // Valid only if type is SIM or else emptyand size = 1
-                                         // else must be empty
+    vec<HardwareConfigModem> modem;       // Valid only if type is Modem and size = 1 else must be
+                                          // empty
+    vec<HardwareConfigSim> sim;           // Valid only if type is SIM or else empty and size = 1
+                                          // else must be empty
 };
 
 struct DataProfileInfo {
-    int32_t profileId;                   // id of the data profile
-    string apn;                          // The APN to connect to
-    string protocol;                     // One of the PDP_type values in TS 27.007 section 10.1.1.
-                                         // For example, "IP", "IPV6", "IPV4V6", or "PPP".
-    ApnAuthType authType;
-    string user;                         // The username for APN, or empty string
-    string password;                     // The password for APN, or empty string
-    DataProfileInfoType type;
-    int32_t maxConnsTime;                // The period in seconds to limit the maximum connections
-    int32_t maxConns;                    // The maximum connections during maxConnsTime
-    int32_t waitTime;                    // The required wait time in seconds after a successful UE
-                                         // initiated disconnect of a given PDN connection before
-                                         // the device can send a new PDN connection request for
-                                         // that given PDN
-    bool enabled;                        // True to enable the profile, false to disable
+    DataProfileId profileId;              // id of the data profile
+    string apn;                           // The APN to connect to
+    string protocol;                      // One of the PDP_type values in TS 27.007 section 10.1.1.
+                                          // For example, "IP", "IPV6", "IPV4V6", or "PPP".
+    string roamingProtocol;               // one of the PDP_type values in TS 27.007 section 10.1.1
+                                          // used on roaming network. For example, "IP", "IPV6",
+                                          // "IPV4V6", or "PPP".
+    ApnAuthType authType;                 // APN authentication type
+    string user;                          // The username for APN, or empty string
+    string password;                      // The password for APN, or empty string
+    DataProfileInfoType type;             // Data profile technology type
+    int32_t maxConnsTime;                 // The period in seconds to limit the maximum connections
+    int32_t maxConns;                     // The maximum connections during maxConnsTime
+    int32_t waitTime;                     // The required wait time in seconds after a successful UE
+                                          // initiated disconnect of a given PDN connection before
+                                          // the device can send a new PDN connection request for
+                                          // that given PDN
+    bool enabled;                         // True to enable the profile, false to disable
+    bitfield<ApnTypes> supportedApnTypesBitmap; // Supported APN types bitmap. See ApnTypes for the
+                                          // value of each bit.
+    bitfield<RadioAccessFamily> bearerBitmap; // The bearer bitmap. See RadioAccessFamily for the
+                                          // value of each bit.
+    int32_t mtu;                          // Maximum transmission unit (MTU) size in bytes
+    MvnoType mvnoType;                    // The MVNO matching data type
+    string mvnoMatchData;                 // MVNO matching data. This is defined by the carrier.
+                                          // For example,
+                                          //      SPN like: "A MOBILE", "BEN NL", etc...
+                                          //      IMSI like: "302720x94", "2060188", etc...
+                                          //      GID like: "4E", "33", etc...
 };
 
 struct RadioCapability {
-    int32_t session;                     // Unique session value defined by framework returned in
-                                         // all "responses/unsol"
+    int32_t session;                      // Unique session value defined by framework returned in
+                                          // all "responses/unsol"
     RadioCapabilityPhase phase;
-    RadioAccessFamily raf;
-    string logicalModemUuid;             // A UUID typically "com.xxxx.lmX where X is the logical
-                                         // modem. RadioConst:MAX_UUID_LENGTH is the max
-                                         // length
+    bitfield<RadioAccessFamily> raf;      // 32-bit bitmap of RadioAccessFamily
+    string logicalModemUuid;              // A UUID typically "com.xxxx.lmX where X is the logical
+                                          // modem. RadioConst:MAX_UUID_LENGTH is the max
+                                          // length
     RadioCapabilityStatus status;
 };
 
 struct LceStatusInfo {
     LceStatus lceStatus;
-    uint8_t actualIntervalMs;            // actual LCE reporting interval,
-                                         // meaningful only if LceStatus = ACTIVE.
+    uint8_t actualIntervalMs;             // actual LCE reporting interval,
+                                          // meaningful only if LceStatus = ACTIVE.
 };
 
 struct LceDataInfo {
-    uint32_t lastHopCapacityKbps;          // last-hop cellular capacity: kilobits/second.
-    uint8_t confidenceLevel;               // capacity estimate confidence: 0-100
-    bool lceSuspended;                     // LCE report going to be suspended? (e.g., radio
-                                           // moves to inactive state or network type change)
-                                           // true = suspended;
-                                           // false = not suspended.
+    uint32_t lastHopCapacityKbps;         // last-hop cellular capacity: kilobits/second.
+    uint8_t confidenceLevel;              // capacity estimate confidence: 0-100
+    bool lceSuspended;                    // LCE report going to be suspended? (e.g., radio
+                                          // moves to inactive state or network type change)
+                                          // true = suspended;
+                                          // false = not suspended.
 };
 
 struct ActivityStatsInfo {
-    uint32_t sleepModeTimeMs;              // total time (in ms) when modem is in a low power or
-                                           // sleep state
-    uint32_t idleModeTimeMs;               // total time (in ms) when modem is awake but neither
-                                           // the transmitter nor receiver are active/awake
+    uint32_t sleepModeTimeMs;             // total time (in ms) when modem is in a low power or
+                                          // sleep state
+    uint32_t idleModeTimeMs;              // total time (in ms) when modem is awake but neither
+                                          // the transmitter nor receiver are active/awake
     uint32_t[RadioConst:NUM_TX_POWER_LEVELS] txmModetimeMs;
-                                           // Each index represent total time (in ms) during which
-                                           // the transmitter is active/awake for a particular
-                                           // power range as shown below.
-                                           // index 0 = tx_power < 0dBm
-                                           // index 1 = 0dBm < tx_power < 5dBm
-                                           // index 2 = 5dBm < tx_power < 15dBm
-                                           // index 3 = 15dBm < tx_power < 20dBm
-                                           // index 4 = tx_power > 20dBm
-    uint32_t rxModeTimeMs;                 // total time (in ms) for which receiver is
-                                           // active/awake and the transmitter is inactive
+                                          // Each index represent total time (in ms) during which
+                                          // the transmitter is active/awake for a particular
+                                          // power range as shown below.
+                                          // index 0 = tx_power < 0dBm
+                                          // index 1 = 0dBm < tx_power < 5dBm
+                                          // index 2 = 5dBm < tx_power < 15dBm
+                                          // index 3 = 15dBm < tx_power < 20dBm
+                                          // index 4 = tx_power > 20dBm
+    uint32_t rxModeTimeMs;                // total time (in ms) for which receiver is
+                                          // active/awake and the transmitter is inactive
 };
 
 struct Carrier {
     string mcc;
     string mnc;
-    CarrierMatchType matchType;            // Specify match type for the carrier.
-                                           // If it’s ALL, matchData is empty string;
-                                           // otherwise, matchData is the value for the match type.
+    CarrierMatchType matchType;           // Specify match type for the carrier.
+                                          // If it’s ALL, matchData is empty string;
+                                          // otherwise, matchData is the value for the match type.
     string matchData;
 };
 
 struct CarrierRestrictions {
-    vec<Carrier> allowedCarriers;          // whitelist for allowed carriers
-    vec<Carrier> excludedCarriers;         // blacklist for explicitly excluded carriers
-                                           // which match allowed_carriers. Eg. allowedCarriers
-                                           // match mcc/mnc, excludedCarriers has same mcc/mnc and
-                                           // gid1 is ABCD. It means except the carrier whose gid1
-                                           // is ABCD, all carriers with the same mcc/mnc are
-                                           // allowed.
+    vec<Carrier> allowedCarriers;         // whitelist for allowed carriers
+    vec<Carrier> excludedCarriers;        // blacklist for explicitly excluded carriers
+                                          // which match allowed_carriers. Eg. allowedCarriers
+                                          // match mcc/mnc, excludedCarriers has same mcc/mnc and
+                                          // gid1 is ABCD. It means except the carrier whose gid1
+                                          // is ABCD, all carriers with the same mcc/mnc are
+                                          // allowed.
 };
 
 struct SuppSvcNotification {
-    bool isMT;                             // notification type
-                                           // false = MO intermediate result code
-                                           // true = MT unsolicited result code
-    int32_t code;                          // result code. See 27.007 7.17.
-    int32_t index;                         // CUG index. See 27.007 7.17.
-    int32_t type;                          // "type" from 27.007 7.17 (MT only).
-    string number;                         // "number" from 27.007 7.17
-                                           // (MT only, may be empty string).
+    bool isMT;                            // notification type
+                                          // false = MO intermediate result code
+                                          // true = MT unsolicited result code
+    int32_t code;                         // result code. See 27.007 7.17.
+    int32_t index;                        // CUG index. See 27.007 7.17.
+    int32_t type;                         // "type" from 27.007 7.17 (MT only).
+    string number;                        // "number" from 27.007 7.17
+                                          // (MT only, may be empty string).
 };
 
 struct SimRefreshResult {
     SimRefreshType type;
-    int32_t efId;                          // is the EFID of the updated file if the result is
-                                           // SIM_FILE_UPDATE or 0 for any other result.
-    string aid;                            // is AID(application ID) of the card application
-                                           // See ETSI 102.221 8.1 and 101.220 4
-                                           // For SIM_FILE_UPDATE result it must be set to AID of
-                                           // application in which updated EF resides or it must be
-                                           // empty string if EF is outside of an application.
-                                           // For SIM_INIT result this field is set to AID of
-                                           // application that caused REFRESH
-                                           // For SIM_RESET result it is empty string.
+    int32_t efId;                         // is the EFID of the updated file if the result is
+                                          // SIM_FILE_UPDATE or 0 for any other result.
+    string aid;                           // is AID(application ID) of the card application
+                                          // See ETSI 102.221 8.1 and 101.220 4
+                                          // For SIM_FILE_UPDATE result it must be set to AID of
+                                          // application in which updated EF resides or it must be
+                                          // empty string if EF is outside of an application.
+                                          // For SIM_INIT result this field is set to AID of
+                                          // application that caused REFRESH
+                                          // For SIM_RESET result it is empty string.
 };
 
 /* CDMA Signal Information Record as defined in C.S0005 section 3.7.5.5 */
 struct CdmaSignalInfoRecord {
-    bool isPresent;                        // true if signal information record is present
-    int8_t signalType;                     // as defined 3.7.5.5-1
-    int8_t alertPitch;                     // as defined 3.7.5.5-2
-    int8_t signal;                         // as defined 3.7.5.5-3, 3.7.5.5-4 or 3.7.5.5-5
+    bool isPresent;                       // true if signal information record is present
+    int8_t signalType;                    // as defined 3.7.5.5-1
+    int8_t alertPitch;                    // as defined 3.7.5.5-2
+    int8_t signal;                        // as defined 3.7.5.5-3, 3.7.5.5-4 or 3.7.5.5-5
 };
 
 struct CdmaCallWaiting {
-    string number;                         // Remote party number
+    string number;                        // Remote party number
     CdmaCallWaitingNumberPresentation numberPresentation;
-    string name;                           // Remote party name
+    string name;                          // Remote party name
     CdmaSignalInfoRecord signalInfoRecord;
     // Number type/Number plan required to support International Call Waiting
-    CdmaCallWaitingNumberType numbertype;
+    CdmaCallWaitingNumberType numberType;
     CdmaCallWaitingNumberPlan numberPlan;
 };
 
@@ -1837,7 +1909,7 @@
  * The display_tag, display_len and chari fields are all 1 byte.
  */
 struct CdmaDisplayInfoRecord {
-    string alphaBuf;                       // Max length = RadioConst:CDMA_ALPHA_INFO_BUFFER_LENGTH
+    string alphaBuf;                      // Max length = RadioConst:CDMA_ALPHA_INFO_BUFFER_LENGTH
 };
 
 /*
@@ -1846,7 +1918,7 @@
  * Connected Number Info Rec as defined in C.S0005 section 3.7.5.4
  */
 struct CdmaNumberInfoRecord {
-    string number;                         // Max length = RADIP_CDMA_NUMBER_INFO_BUFFER_LENGTH
+    string number;                        // Max length = RADIP_CDMA_NUMBER_INFO_BUFFER_LENGTH
     uint8_t numberType;
     uint8_t numberPlan;
     uint8_t pi;
@@ -1881,56 +1953,56 @@
     CdmaInfoRecName name;
     // Only one of the below vectors must have size = 1 based on the
     // CdmaInfoRecName. All other vectors must have size 0.
-    vec<CdmaDisplayInfoRecord> display;  // Display and Extended Display Info Rec
-    vec<CdmaNumberInfoRecord> number;    // Called Party Number, Calling Party Number, Connected
-                                         // number Info Rec
-    vec<CdmaSignalInfoRecord> signal;    // Signal Info Rec
+    vec<CdmaDisplayInfoRecord> display;   // Display and Extended Display Info Rec
+    vec<CdmaNumberInfoRecord> number;     // Called Party Number, Calling Party Number, Connected
+                                          // number Info Rec
+    vec<CdmaSignalInfoRecord> signal;     // Signal Info Rec
     vec<CdmaRedirectingNumberInfoRecord> redir; // Redirecting Number Info Rec
     vec<CdmaLineControlInfoRecord> lineCtrl;    // Line Control Info Rec
-    vec<CdmaT53ClirInfoRecord> clir;     // T53 CLIR Info Rec
+    vec<CdmaT53ClirInfoRecord> clir;      // T53 CLIR Info Rec
     vec<CdmaT53AudioControlInfoRecord> audioCtrl; // T53 Audio Control Info Rec
 };
 
 struct CdmaInformationRecords {
-    vec<CdmaInformationRecord> infoRec;  // Max length = RadioConst:CDMA_MAX_NUMBER_OF_INFO_RECS
+    vec<CdmaInformationRecord> infoRec;   // Max length = RadioConst:CDMA_MAX_NUMBER_OF_INFO_RECS
 };
 
 struct CfData {
-    vec<CallForwardInfo> cfInfo;         // This is the response data
-                                         // for SS request to query call
-                                         // forward status. see getCallForwardStatus()
-                                         // Max size = RadioConst:NUM_SERVICE_CLASSES
+    vec<CallForwardInfo> cfInfo;          // This is the response data
+                                          // for SS request to query call
+                                          // forward status. see getCallForwardStatus()
+                                          // Max size = RadioConst:NUM_SERVICE_CLASSES
 };
 
 struct SsInfoData {
-    vec<int32_t> ssInfo;                 // This is the response data for all of the SS GET/SET
-                                         // Radio requests. E.g. IRadio.getClir() returns
-                                         // two ints, so first two values of ssInfo[] will be
-                                         // used for response if serviceType is SS_CLIR and
-                                         // requestType is SS_INTERROGATION
-                                         // Max size = RadioConst:SS_INFO_MAX
+    vec<int32_t> ssInfo;                  // This is the response data for all of the SS GET/SET
+                                          // Radio requests. E.g. IRadio.getClir() returns
+                                          // two ints, so first two values of ssInfo[] will be
+                                          // used for response if serviceType is SS_CLIR and
+                                          // requestType is SS_INTERROGATION
+                                          // Max size = RadioConst:SS_INFO_MAX
 };
 
 struct StkCcUnsolSsResult {
     SsServiceType serviceType;
     SsRequestType requestType;
     SsTeleserviceType teleserviceType;
-    SuppServiceClass serviceClass;
+    bitfield<SuppServiceClass> serviceClass;
     RadioError result;
     // Only one of the below vectors may contain values and other must be empty
-    vec<SsInfoData> ssInfo;              // Valid only for all SsserviceType except
-                                         // SsServiceType:CF_* else empty.
-    vec<CfData> cfData;                  // Valid for SsServiceType:CF_* else empty
+    vec<SsInfoData> ssInfo;               // Valid only for all SsServiceType except
+                                          // SsServiceType:CF_* else empty.
+    vec<CfData> cfData;                   // Valid for SsServiceType:CF_* else empty
 };
 
 struct PcoDataInfo {
-    int32_t cid;                         // Context ID, uniquely identifies this call
-    string bearerProto;                  // One of the PDP_type values in TS 27.007 section 10.1.1.
-                                         // For example, "IP", "IPV6", "IPV4V6"
-    int32_t pcoId;                       // The protocol ID for this box. Note that only IDs from
-                                         // FF00H - FFFFH are accepted. If more than one is
-                                         // included from the network, multiple calls must be made
-                                         // to send all of them.
-    vec<uint8_t> contents;               // Carrier-defined content. It is binary, opaque and
-                                         // loosely defined in LTE Layer 3 spec 24.008
-};
+    int32_t cid;                          // Context ID, uniquely identifies this call
+    string bearerProto;                   // One of the PDP_type values in TS 27.007 section 10.1.1.
+                                          // For example, "IP", "IPV6", "IPV4V6"
+    int32_t pcoId;                        // The protocol ID for this box. Note that only IDs from
+                                          // FF00H - FFFFH are accepted. If more than one is
+                                          // included from the network, multiple calls must be made
+                                          // to send all of them.
+    vec<uint8_t> contents;                // Carrier-defined content. It is binary, opaque and
+                                          // loosely defined in LTE Layer 3 spec 24.008
+};
\ No newline at end of file
diff --git a/radio/1.0/vts/Android.mk b/radio/1.0/vts/Android.mk
deleted file mode 100644
index 4e1fb84..0000000
--- a/radio/1.0/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(LOCAL_PATH)/functional/vts/testcases/hal/radio/hidl/Android.mk
\ No newline at end of file
diff --git a/radio/1.0/vts/Radio.vts b/radio/1.0/vts/Radio.vts
deleted file mode 100644
index c3d998a..0000000
--- a/radio/1.0/vts/Radio.vts
+++ /dev/null
@@ -1,1497 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IRadio"
-
-package: "android.hardware.radio"
-
-import: "android.hardware.radio@1.0::IRadioIndication"
-import: "android.hardware.radio@1.0::IRadioResponse"
-import: "android.hardware.radio@1.0::types"
-
-interface: {
-    api: {
-        name: "setResponseFunctions"
-        arg: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IRadioResponse"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IRadioIndication"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "getIccCardStatus"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "supplyIccPinForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "supplyIccPukForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "supplyIccPin2ForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "supplyIccPuk2ForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "changeIccPinForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "changeIccPin2ForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "supplyNetworkDepersonalization"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getCurrentCalls"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "dial"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::Dial"
-        }
-    }
-
-    api: {
-        name: "getImsiForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "hangup"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "hangupWaitingOrBackground"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "hangupForegroundResumeBackground"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "switchWaitingOrHoldingAndActive"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "conference"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "rejectCall"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getLastCallFailCause"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getSignalStrength"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getVoiceRegistrationState"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getDataRegistrationState"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getOperator"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setRadioPower"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "sendDtmf"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "sendSms"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::GsmSmsMessage"
-        }
-    }
-
-    api: {
-        name: "sendSMSExpectMore"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::GsmSmsMessage"
-        }
-    }
-
-    api: {
-        name: "setupDataCall"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::ApnAuthType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "iccIOForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::IccIo"
-        }
-    }
-
-    api: {
-        name: "sendUssd"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "cancelPendingUssd"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getClir"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setClir"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getCallForwardStatus"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CallForwardInfo"
-        }
-    }
-
-    api: {
-        name: "setCallForward"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CallForwardInfo"
-        }
-    }
-
-    api: {
-        name: "getCallWaiting"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setCallWaiting"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "acknowledgeLastIncomingGsmSms"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SmsAcknowledgeFailCause"
-        }
-    }
-
-    api: {
-        name: "acceptCall"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "deactivateDataCall"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getFacilityLockForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setFacilityLockForApp"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setBarringPassword"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getNetworkSelectionMode"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setNetworkSelectionModeAutomatic"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setNetworkSelectionModeManual"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getAvailableNetworks"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "startDtmf"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "stopDtmf"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getBasebandVersion"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "separateConnection"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setMute"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getMute"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getClip"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getDataCallList"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "sendOemRadioRequestRaw"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "sendOemRadioRequestStrings"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRING
-            }
-        }
-    }
-
-    api: {
-        name: "sendScreenState"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setSuppServiceNotifications"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "writeSmsToSim"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SmsWriteArgs"
-        }
-    }
-
-    api: {
-        name: "deleteSmsOnSim"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setBandMode"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioBandMode"
-        }
-    }
-
-    api: {
-        name: "getAvailableBandModes"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "sendEnvelope"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "sendTerminalResponseToSim"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "handleStkCallSetupRequestFromSim"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "explicitCallTransfer"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setPreferredNetworkType"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::PreferredNetworkType"
-        }
-    }
-
-    api: {
-        name: "getPreferredNetworkType"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getNeighboringCids"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setLocationUpdates"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setCdmaSubscriptionSource"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSubscriptionSource"
-        }
-    }
-
-    api: {
-        name: "setCdmaRoamingPreference"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::CdmaRoamingType"
-        }
-    }
-
-    api: {
-        name: "getCdmaRoamingPreference"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setTTYMode"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::TtyMode"
-        }
-    }
-
-    api: {
-        name: "getTTYMode"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setPreferredVoicePrivacy"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getPreferredVoicePrivacy"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "sendCDMAFeatureCode"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "sendBurstDtmf"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "sendCdmaSms"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSmsMessage"
-        }
-    }
-
-    api: {
-        name: "acknowledgeLastIncomingCdmaSms"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSmsAck"
-        }
-    }
-
-    api: {
-        name: "getGsmBroadcastConfig"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setGsmBroadcastConfig"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::GsmBroadcastSmsConfigInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "setGsmBroadcastActivation"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getCdmaBroadcastConfig"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setCdmaBroadcastConfig"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::CdmaBroadcastSmsConfigInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "setCdmaBroadcastActivation"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getCDMASubscription"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "writeSmsToRuim"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSmsWriteArgs"
-        }
-    }
-
-    api: {
-        name: "deleteSmsOnRuim"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getDeviceIdentity"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "exitEmergencyCallbackMode"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getSmscAddress"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setSmscAddress"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "reportSmsMemoryStatus"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "reportStkServiceIsRunning"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getCdmaSubscriptionSource"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "requestIsimAuthentication"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "acknowledgeIncomingGsmSmsWithPdu"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "sendEnvelopeWithStatus"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getVoiceRadioTechnology"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getCellInfoList"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setCellInfoListRate"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setInitialAttachApn"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::ApnAuthType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getImsRegistrationState"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "sendImsSms"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::ImsSmsMessage"
-        }
-    }
-
-    api: {
-        name: "iccTransmitApduBasicChannel"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SimApdu"
-        }
-    }
-
-    api: {
-        name: "iccOpenLogicalChannel"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "iccCloseLogicalChannel"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "iccTransmitApduLogicalChannel"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SimApdu"
-        }
-    }
-
-    api: {
-        name: "nvReadItem"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::NvItem"
-        }
-    }
-
-    api: {
-        name: "nvWriteItem"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::NvWriteItem"
-        }
-    }
-
-    api: {
-        name: "nvWriteCdmaPrl"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "nvResetConfig"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::ResetNvType"
-        }
-    }
-
-    api: {
-        name: "setUiccSubscription"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SelectUiccSub"
-        }
-    }
-
-    api: {
-        name: "setDataAllowed"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getHardwareConfig"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "requestIccSimAuthentication"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setDataProfile"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::DataProfileInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "requestShutdown"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getRadioCapability"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setRadioCapability"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioCapability"
-        }
-    }
-
-    api: {
-        name: "startLceService"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "stopLceService"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "pullLceData"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getModemActivityInfo"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setAllowedCarriers"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CarrierRestrictions"
-        }
-    }
-
-    api: {
-        name: "getAllowedCarriers"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "responseAcknowledgement"
-    }
-
-}
diff --git a/radio/1.0/vts/RadioIndication.vts b/radio/1.0/vts/RadioIndication.vts
deleted file mode 100644
index fac73a9..0000000
--- a/radio/1.0/vts/RadioIndication.vts
+++ /dev/null
@@ -1,545 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IRadioIndication"
-
-package: "android.hardware.radio"
-
-import: "android.hardware.radio@1.0::types"
-
-interface: {
-    api: {
-        name: "radioStateChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioState"
-        }
-    }
-
-    api: {
-        name: "callStateChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "voiceNetworkStateChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "newSms"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "newSmsStatusReport"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "newSmsOnSim"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "onUssd"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::UssdModeType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "nitzTimeReceived"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-    }
-
-    api: {
-        name: "currentSignalStrength"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SignalStrength"
-        }
-    }
-
-    api: {
-        name: "dataCallListChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::SetupDataCallResult"
-            }
-        }
-    }
-
-    api: {
-        name: "suppSvcNotify"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SuppSvcNotification"
-        }
-    }
-
-    api: {
-        name: "stkSessionEnd"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "stkProactiveCommand"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "stkEventNotify"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "stkCallSetup"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int64_t"
-        }
-    }
-
-    api: {
-        name: "simSmsStorageFull"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "simRefresh"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SimRefreshResult"
-        }
-    }
-
-    api: {
-        name: "callRing"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSignalInfoRecord"
-        }
-    }
-
-    api: {
-        name: "simStatusChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "cdmaNewSms"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSmsMessage"
-        }
-    }
-
-    api: {
-        name: "newBroadcastSms"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "cdmaRuimSmsStorageFull"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "restrictedStateChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::PhoneRestrictedState"
-        }
-    }
-
-    api: {
-        name: "enterEmergencyCallbackMode"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "cdmaCallWaiting"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaCallWaiting"
-        }
-    }
-
-    api: {
-        name: "cdmaOtaProvisionStatus"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::CdmaOtaProvisionStatus"
-        }
-    }
-
-    api: {
-        name: "cdmaInfoRec"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaInformationRecords"
-        }
-    }
-
-    api: {
-        name: "oemHookRaw"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "indicateRingbackTone"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "resendIncallMute"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "cdmaSubscriptionSourceChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSubscriptionSource"
-        }
-    }
-
-    api: {
-        name: "cdmaPrlChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "exitEmergencyCallbackMode"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "rilConnected"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "voiceRadioTechChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioTechnology"
-        }
-    }
-
-    api: {
-        name: "cellInfoList"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::CellInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "imsNetworkStateChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-    }
-
-    api: {
-        name: "subscriptionStatusChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "srvccStateNotify"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SrvccState"
-        }
-    }
-
-    api: {
-        name: "hardwareConfigChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::HardwareConfig"
-            }
-        }
-    }
-
-    api: {
-        name: "radioCapabilityIndication"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioCapability"
-        }
-    }
-
-    api: {
-        name: "onSupplementaryServiceIndication"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::StkCcUnsolSsResult"
-        }
-    }
-
-    api: {
-        name: "stkCallControlAlphaNotify"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "lceData"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::LceDataInfo"
-        }
-    }
-
-    api: {
-        name: "pcoData"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::PcoDataInfo"
-        }
-    }
-
-    api: {
-        name: "modemReset"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-}
diff --git a/radio/1.0/vts/RadioResponse.vts b/radio/1.0/vts/RadioResponse.vts
deleted file mode 100644
index 2884d30..0000000
--- a/radio/1.0/vts/RadioResponse.vts
+++ /dev/null
@@ -1,1382 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IRadioResponse"
-
-package: "android.hardware.radio"
-
-import: "android.hardware.radio@1.0::types"
-
-interface: {
-    api: {
-        name: "getIccCardStatusResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CardStatus"
-        }
-    }
-
-    api: {
-        name: "supplyIccPinForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "supplyIccPukForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "supplyIccPin2ForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "supplyIccPuk2ForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "changeIccPinForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "changeIccPin2ForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "supplyNetworkDepersonalizationResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getCurrentCallsResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::Call"
-            }
-        }
-    }
-
-    api: {
-        name: "dialResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getIMSIForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "hangupConnectionResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "hangupWaitingOrBackgroundResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "hangupForegroundResumeBackgroundResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "switchWaitingOrHoldingAndActiveResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "conferenceResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "rejectCallResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getLastCallFailCauseResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::LastCallFailCauseInfo"
-        }
-    }
-
-    api: {
-        name: "getSignalStrengthResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SignalStrength"
-        }
-    }
-
-    api: {
-        name: "getVoiceRegistrationStateResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::VoiceRegStateResult"
-        }
-    }
-
-    api: {
-        name: "getDataRegistrationStateResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::DataRegStateResult"
-        }
-    }
-
-    api: {
-        name: "getOperatorResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setRadioPowerResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "sendDtmfResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "sendSmsResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SendSmsResult"
-        }
-    }
-
-    api: {
-        name: "sendSMSExpectMoreResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SendSmsResult"
-        }
-    }
-
-    api: {
-        name: "setupDataCallResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SetupDataCallResult"
-        }
-    }
-
-    api: {
-        name: "iccIOForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::IccIoResult"
-        }
-    }
-
-    api: {
-        name: "sendUssdResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "cancelPendingUssdResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getClirResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setClirResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getCallForwardStatusResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::CallForwardInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "setCallForwardResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getCallWaitingResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setCallWaitingResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "acknowledgeLastIncomingGsmSmsResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "acceptCallResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "deactivateDataCallResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getFacilityLockForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setFacilityLockForAppResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setBarringPasswordResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getNetworkSelectionModeResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setNetworkSelectionModeAutomaticResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setNetworkSelectionModeManualResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getAvailableNetworksResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::OperatorInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "startDtmfResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "stopDtmfResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getBasebandVersionResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "separateConnectionResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setMuteResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getMuteResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getClipResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::ClipStatus"
-        }
-    }
-
-    api: {
-        name: "getDataCallListResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::SetupDataCallResult"
-            }
-        }
-    }
-
-    api: {
-        name: "sendOemRilRequestRawResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "sendOemRilRequestStringsResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRING
-            }
-        }
-    }
-
-    api: {
-        name: "sendScreenStateResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setSuppServiceNotificationsResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "writeSmsToSimResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "deleteSmsOnSimResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setBandModeResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getAvailableBandModesResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_ENUM
-                predefined_type: "::android::hardware::radio::V1_0::RadioBandMode"
-            }
-        }
-    }
-
-    api: {
-        name: "sendEnvelopeResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "sendTerminalResponseToSimResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "handleStkCallSetupRequestFromSimResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "explicitCallTransferResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setPreferredNetworkTypeResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getPreferredNetworkTypeResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::PreferredNetworkType"
-        }
-    }
-
-    api: {
-        name: "getNeighboringCidsResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::NeighboringCell"
-            }
-        }
-    }
-
-    api: {
-        name: "setLocationUpdatesResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setCdmaSubscriptionSourceResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setCdmaRoamingPreferenceResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getCdmaRoamingPreferenceResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::CdmaRoamingType"
-        }
-    }
-
-    api: {
-        name: "setTTYModeResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getTTYModeResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::TtyMode"
-        }
-    }
-
-    api: {
-        name: "setPreferredVoicePrivacyResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getPreferredVoicePrivacyResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "sendCDMAFeatureCodeResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "sendBurstDtmfResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "sendCdmaSmsResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SendSmsResult"
-        }
-    }
-
-    api: {
-        name: "acknowledgeLastIncomingCdmaSmsResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getGsmBroadcastConfigResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::GsmBroadcastSmsConfigInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "setGsmBroadcastConfigResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setGsmBroadcastActivationResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getCdmaBroadcastConfigResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::CdmaBroadcastSmsConfigInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "setCdmaBroadcastConfigResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setCdmaBroadcastActivationResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getCDMASubscriptionResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "writeSmsToRuimResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "deleteSmsOnRuimResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getDeviceIdentityResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "exitEmergencyCallbackModeResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getSmscAddressResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setSmscAddressResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "reportSmsMemoryStatusResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getCdmaSubscriptionSourceResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSubscriptionSource"
-        }
-    }
-
-    api: {
-        name: "requestIsimAuthenticationResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "acknowledgeIncomingGsmSmsWithPduResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "sendEnvelopeWithStatusResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::IccIoResult"
-        }
-    }
-
-    api: {
-        name: "getVoiceRadioTechnologyResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioTechnology"
-        }
-    }
-
-    api: {
-        name: "getCellInfoListResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::CellInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "setCellInfoListRateResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setInitialAttachApnResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getImsRegistrationStateResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::RadioTechnologyFamily"
-        }
-    }
-
-    api: {
-        name: "sendImsSmsResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SendSmsResult"
-        }
-    }
-
-    api: {
-        name: "iccTransmitApduBasicChannelResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::IccIoResult"
-        }
-    }
-
-    api: {
-        name: "iccOpenLogicalChannelResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "int8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "iccCloseLogicalChannelResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "iccTransmitApduLogicalChannelResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::IccIoResult"
-        }
-    }
-
-    api: {
-        name: "nvReadItemResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "nvWriteItemResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "nvWriteCdmaPrlResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "nvResetConfigResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setUiccSubscriptionResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "setDataAllowedResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getHardwareConfigResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::radio::V1_0::HardwareConfig"
-            }
-        }
-    }
-
-    api: {
-        name: "requestIccSimAuthenticationResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::IccIoResult"
-        }
-    }
-
-    api: {
-        name: "setDataProfileResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "requestShutdownResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-    }
-
-    api: {
-        name: "getRadioCapabilityResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioCapability"
-        }
-    }
-
-    api: {
-        name: "setRadioCapabilityResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioCapability"
-        }
-    }
-
-    api: {
-        name: "startLceServiceResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::LceStatusInfo"
-        }
-    }
-
-    api: {
-        name: "stopLceServiceResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::LceStatusInfo"
-        }
-    }
-
-    api: {
-        name: "pullLceDataResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::LceDataInfo"
-        }
-    }
-
-    api: {
-        name: "getModemActivityInfoResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::ActivityStatsInfo"
-        }
-    }
-
-    api: {
-        name: "setAllowedCarriersResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "getAllowedCarriersResponse"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CarrierRestrictions"
-        }
-    }
-
-    api: {
-        name: "acknowledgeRequest"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-}
diff --git a/radio/1.0/vts/Sap.vts b/radio/1.0/vts/Sap.vts
deleted file mode 100644
index 23205d0..0000000
--- a/radio/1.0/vts/Sap.vts
+++ /dev/null
@@ -1,107 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISap"
-
-package: "android.hardware.radio"
-
-import: "android.hardware.radio@1.0::ISapCallback"
-import: "android.hardware.radio@1.0::types"
-
-interface: {
-    api: {
-        name: "setCallback"
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "ISapCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "connectReq"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "disconnectReq"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "apduReq"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapApduType"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "transferAtrReq"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "powerReq"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "resetSimReq"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "transferCardReaderStatusReq"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "setTransferProtocolReq"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapTransferProtocol"
-        }
-    }
-
-}
diff --git a/radio/1.0/vts/SapCallback.vts b/radio/1.0/vts/SapCallback.vts
deleted file mode 100644
index 2e61ce6..0000000
--- a/radio/1.0/vts/SapCallback.vts
+++ /dev/null
@@ -1,156 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISapCallback"
-
-package: "android.hardware.radio"
-
-import: "android.hardware.radio@1.0::types"
-
-interface: {
-    api: {
-        name: "connectResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapConnectRsp"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "disconnectResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "disconnectIndication"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapDisconnectType"
-        }
-    }
-
-    api: {
-        name: "apduResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapResultCode"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "transferAtrResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapResultCode"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "powerResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapResultCode"
-        }
-    }
-
-    api: {
-        name: "resetSimResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapResultCode"
-        }
-    }
-
-    api: {
-        name: "statusIndication"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapStatus"
-        }
-    }
-
-    api: {
-        name: "transferCardReaderStatusResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapResultCode"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "errorResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "transferProtocolResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::SapResultCode"
-        }
-    }
-
-}
diff --git a/radio/1.0/vts/functional/Android.bp b/radio/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..6615f03
--- /dev/null
+++ b/radio/1.0/vts/functional/Android.bp
@@ -0,0 +1,40 @@
+//
+// Copyright (C) 2017 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: "VtsHalRadioV1_0TargetTest",
+    gtest: true,
+    srcs: ["radio_hidl_hal_test.cpp",
+           "radio_response.cpp",
+           "radio_hidl_hal_icc.cpp",
+           "VtsHalRadioV1_0TargetTest.cpp"],
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libcutils",
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libnativehelper",
+        "libutils",
+        "android.hardware.radio@1.0",
+    ],
+    static_libs: ["libgtest"],
+    cflags: [
+        "-O0",
+        "-g",
+    ],
+}
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp b/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp
new file mode 100644
index 0000000..d01adf2
--- /dev/null
+++ b/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include<radio_hidl_hal_utils.h>
+
+int main(int argc, char** argv) {
+    ::testing::AddGlobalTestEnvironment(new RadioHidlEnvironment);
+    ::testing::InitGoogleTest(&argc, argv);
+
+    int status = RUN_ALL_TESTS();
+    LOG(INFO) << "Test result = " << status;
+
+    return status;
+}
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp b/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp
new file mode 100644
index 0000000..9b540e8
--- /dev/null
+++ b/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ #include<radio_hidl_hal_utils.h>
+
+/*
+ * Test IRadio.getIccCardStatus() for the response returned.
+ */
+TEST_F(RadioHidlTest, getIccCardStatus) {
+    radio->getIccCardStatus(1);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(1, radioRsp->rspInfo.serial);
+    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::NONE);
+
+    EXPECT_LE(radioRsp->cardStatus.applications.size(), (unsigned int) RadioConst::CARD_MAX_APPS);
+    EXPECT_LT(radioRsp->cardStatus.gsmUmtsSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
+    EXPECT_LT(radioRsp->cardStatus.cdmaSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
+    EXPECT_LT(radioRsp->cardStatus.imsSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
+}
+
+/*
+ * Test IRadio.supplyIccPinForApp() for the response returned.
+ */
+TEST_F(RadioHidlTest, supplyIccPinForApp) {
+    radio->supplyIccPinForApp(2, hidl_string("test1"), hidl_string());
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(2, radioRsp->rspInfo.serial);
+
+    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
+}
+
+/*
+ * Test IRadio.supplyIccPukForApp() for the response returned.
+ */
+TEST_F(RadioHidlTest, supplyIccPukForApp) {
+    radio->supplyIccPukForApp(3, hidl_string("test1"), hidl_string("test2"), hidl_string());
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(3, radioRsp->rspInfo.serial);
+
+    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
+}
+
+/*
+ * Test IRadio.supplyIccPin2ForApp() for the response returned.
+ */
+TEST_F(RadioHidlTest, supplyIccPin2ForApp) {
+    radio->supplyIccPin2ForApp(4, hidl_string("test1"), hidl_string());
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(4, radioRsp->rspInfo.serial);
+
+    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
+}
+
+/*
+ * Test IRadio.supplyIccPuk2ForApp() for the response returned.
+ */
+TEST_F(RadioHidlTest, supplyIccPuk2ForApp) {
+    radio->supplyIccPuk2ForApp(5, hidl_string("test1"), hidl_string("test2"), hidl_string());
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(5, radioRsp->rspInfo.serial);
+
+    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
+}
+
+/*
+ * Test IRadio.changeIccPinForApp() for the response returned.
+ */
+TEST_F(RadioHidlTest, changeIccPinForApp) {
+    radio->changeIccPinForApp(6, hidl_string("test1"), hidl_string("test2"), hidl_string());
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(6, radioRsp->rspInfo.serial);
+
+    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
+}
+
+/*
+ * Test IRadio.changeIccPin2ForApp() for the response returned.
+ */
+TEST_F(RadioHidlTest, changeIccPin2ForApp) {
+    radio->changeIccPin2ForApp(7, hidl_string("test1"), hidl_string("test2"), hidl_string());
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(7, radioRsp->rspInfo.serial);
+
+    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
+}
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_test.cpp b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
new file mode 100644
index 0000000..2a67954
--- /dev/null
+++ b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include<radio_hidl_hal_utils.h>
+
+void RadioHidlTest::SetUp() {
+    radio = IRadio::getService(hidl_string("rild"));
+    ASSERT_NE(radio, nullptr);
+
+    radioRsp = new RadioResponse(*this);
+    ASSERT_NE(radioRsp, nullptr);
+
+    count = 0;
+
+    radioInd = NULL;
+    radio->setResponseFunctions(radioRsp, radioInd);
+}
+
+void RadioHidlTest::TearDown() {
+}
+
+void RadioHidlTest::notify() {
+    std::unique_lock<std::mutex> lock(mtx);
+    count++;
+    cv.notify_one();
+}
+
+std::cv_status RadioHidlTest::wait() {
+    std::unique_lock<std::mutex> lock(mtx);
+
+    std::cv_status status = std::cv_status::no_timeout;
+    auto now = std::chrono::system_clock::now();
+    while (count == 0) {
+        status = cv.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
+        if (status == std::cv_status::timeout) {
+            return status;
+        }
+    }
+    count--;
+    return status;
+}
+
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_utils.h b/radio/1.0/vts/functional/radio_hidl_hal_utils.h
new file mode 100644
index 0000000..23b6ffa
--- /dev/null
+++ b/radio/1.0/vts/functional/radio_hidl_hal_utils.h
@@ -0,0 +1,453 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <android-base/logging.h>
+
+#include <gtest/gtest.h>
+#include <chrono>
+#include <condition_variable>
+#include <mutex>
+
+#include <android/hardware/radio/1.0/IRadio.h>
+#include <android/hardware/radio/1.0/IRadioResponse.h>
+#include <android/hardware/radio/1.0/IRadioIndication.h>
+#include <android/hardware/radio/1.0/types.h>
+
+using ::android::hardware::radio::V1_0::ActivityStatsInfo;
+using ::android::hardware::radio::V1_0::CardStatus;
+using ::android::hardware::radio::V1_0::Call;
+using ::android::hardware::radio::V1_0::CallForwardInfo;
+using ::android::hardware::radio::V1_0::CarrierRestrictions;
+using ::android::hardware::radio::V1_0::CdmaRoamingType;
+using ::android::hardware::radio::V1_0::CdmaBroadcastSmsConfigInfo;
+using ::android::hardware::radio::V1_0::CdmaSubscriptionSource;
+using ::android::hardware::radio::V1_0::CellInfo;
+using ::android::hardware::radio::V1_0::ClipStatus;
+using ::android::hardware::radio::V1_0::DataRegStateResult;
+using ::android::hardware::radio::V1_0::GsmBroadcastSmsConfigInfo;
+using ::android::hardware::radio::V1_0::HardwareConfig;
+using ::android::hardware::radio::V1_0::IccIoResult;
+using ::android::hardware::radio::V1_0::IRadio;
+using ::android::hardware::radio::V1_0::IRadioResponse;
+using ::android::hardware::radio::V1_0::IRadioIndication;
+using ::android::hardware::radio::V1_0::RadioConst;
+using ::android::hardware::radio::V1_0::RadioError;
+using ::android::hardware::radio::V1_0::RadioResponseInfo;
+using ::android::hardware::radio::V1_0::LastCallFailCauseInfo;
+using ::android::hardware::radio::V1_0::LceDataInfo;
+using ::android::hardware::radio::V1_0::LceStatusInfo;
+using ::android::hardware::radio::V1_0::NeighboringCell;
+using ::android::hardware::radio::V1_0::OperatorInfo;
+using ::android::hardware::radio::V1_0::PreferredNetworkType;
+using ::android::hardware::radio::V1_0::RadioBandMode;
+using ::android::hardware::radio::V1_0::RadioCapability;
+using ::android::hardware::radio::V1_0::RadioResponseType;
+using ::android::hardware::radio::V1_0::RadioTechnology;
+using ::android::hardware::radio::V1_0::RadioTechnologyFamily;
+using ::android::hardware::radio::V1_0::SendSmsResult;
+using ::android::hardware::radio::V1_0::SetupDataCallResult;
+using ::android::hardware::radio::V1_0::SignalStrength;
+using ::android::hardware::radio::V1_0::TtyMode;
+using ::android::hardware::radio::V1_0::VoiceRegStateResult;
+
+using ::android::hardware::hidl_string;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+#define TIMEOUT_PERIOD 20
+
+class RadioHidlTest;
+
+/* Callback class for radio response */
+class RadioResponse : public IRadioResponse {
+private:
+    RadioHidlTest& parent;
+
+public:
+    RadioResponseInfo rspInfo;
+    CardStatus cardStatus;
+
+    RadioResponse(RadioHidlTest& parent);
+
+    virtual ~RadioResponse() = default;
+
+    Return<void> getIccCardStatusResponse(const RadioResponseInfo& info,
+            const CardStatus& cardStatus);
+
+    Return<void> supplyIccPinForAppResponse(const RadioResponseInfo& info,
+            int32_t remainingRetries);
+
+    Return<void> supplyIccPukForAppResponse(const RadioResponseInfo& info,
+            int32_t remainingRetries);
+
+    Return<void> supplyIccPin2ForAppResponse(const RadioResponseInfo& info,
+            int32_t remainingRetries);
+
+    Return<void> supplyIccPuk2ForAppResponse(const RadioResponseInfo& info,
+            int32_t remainingRetries);
+
+    Return<void> changeIccPinForAppResponse(const RadioResponseInfo& info,
+            int32_t remainingRetries);
+
+    Return<void> changeIccPin2ForAppResponse(const RadioResponseInfo& info,
+            int32_t remainingRetries);
+
+    Return<void> supplyNetworkDepersonalizationResponse(
+            const RadioResponseInfo& info, int32_t remainingRetries);
+
+    Return<void> getCurrentCallsResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<Call>& calls);
+
+    Return<void> dialResponse(const RadioResponseInfo& info);
+
+    Return<void> getIMSIForAppResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_string& imsi);
+
+    Return<void> hangupConnectionResponse(const RadioResponseInfo& info);
+
+    Return<void> hangupWaitingOrBackgroundResponse(
+            const RadioResponseInfo& info);
+
+    Return<void> hangupForegroundResumeBackgroundResponse(
+            const RadioResponseInfo& info);
+
+    Return<void> switchWaitingOrHoldingAndActiveResponse(
+            const RadioResponseInfo& info);
+
+    Return<void> conferenceResponse(const RadioResponseInfo& info);
+
+    Return<void> rejectCallResponse(const RadioResponseInfo& info);
+
+    Return<void> getLastCallFailCauseResponse(const RadioResponseInfo& info,
+            const LastCallFailCauseInfo& failCauseInfo);
+
+    Return<void> getSignalStrengthResponse(const RadioResponseInfo& info,
+            const SignalStrength& sigStrength);
+
+    Return<void> getVoiceRegistrationStateResponse(const RadioResponseInfo& info,
+            const VoiceRegStateResult& voiceRegResponse);
+
+    Return<void> getDataRegistrationStateResponse(const RadioResponseInfo& info,
+            const DataRegStateResult& dataRegResponse);
+
+    Return<void> getOperatorResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_string& longName,
+            const ::android::hardware::hidl_string& shortName,
+            const ::android::hardware::hidl_string& numeric);
+
+    Return<void> setRadioPowerResponse(const RadioResponseInfo& info);
+
+    Return<void> sendDtmfResponse(const RadioResponseInfo& info);
+
+    Return<void> sendSmsResponse(const RadioResponseInfo& info,
+            const SendSmsResult& sms);
+
+    Return<void> sendSMSExpectMoreResponse(const RadioResponseInfo& info,
+            const SendSmsResult& sms);
+
+    Return<void> setupDataCallResponse(const RadioResponseInfo& info,
+            const SetupDataCallResult& dcResponse);
+
+    Return<void> iccIOForAppResponse(const RadioResponseInfo& info,
+            const IccIoResult& iccIo);
+
+    Return<void> sendUssdResponse(const RadioResponseInfo& info);
+
+    Return<void> cancelPendingUssdResponse(const RadioResponseInfo& info);
+
+    Return<void> getClirResponse(const RadioResponseInfo& info, int32_t n, int32_t m);
+
+    Return<void> setClirResponse(const RadioResponseInfo& info);
+
+    Return<void> getCallForwardStatusResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<CallForwardInfo>& call_forwardInfos);
+
+    Return<void> setCallForwardResponse(const RadioResponseInfo& info);
+
+    Return<void> getCallWaitingResponse(const RadioResponseInfo& info,
+            bool enable, int32_t serviceClass);
+
+    Return<void> setCallWaitingResponse(const RadioResponseInfo& info);
+
+    Return<void> acknowledgeLastIncomingGsmSmsResponse(const RadioResponseInfo& info);
+
+    Return<void> acceptCallResponse(const RadioResponseInfo& info);
+
+    Return<void> deactivateDataCallResponse(const RadioResponseInfo& info);
+
+    Return<void> getFacilityLockForAppResponse(const RadioResponseInfo& info,int32_t response);
+
+    Return<void> setFacilityLockForAppResponse(const RadioResponseInfo& info,int32_t retry);
+
+    Return<void> setBarringPasswordResponse(const RadioResponseInfo& info);
+
+    Return<void> getNetworkSelectionModeResponse(const RadioResponseInfo& info,bool manual);
+
+    Return<void> setNetworkSelectionModeAutomaticResponse(const RadioResponseInfo& info);
+
+    Return<void> setNetworkSelectionModeManualResponse(const RadioResponseInfo& info);
+
+    Return<void> getAvailableNetworksResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<OperatorInfo>& networkInfos);
+
+    Return<void> startDtmfResponse(const RadioResponseInfo& info);
+
+    Return<void> stopDtmfResponse(const RadioResponseInfo& info);
+
+    Return<void> getBasebandVersionResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_string& version);
+
+    Return<void> separateConnectionResponse(const RadioResponseInfo& info);
+
+    Return<void> setMuteResponse(const RadioResponseInfo& info);
+
+    Return<void> getMuteResponse(const RadioResponseInfo& info, bool enable);
+
+    Return<void> getClipResponse(const RadioResponseInfo& info,ClipStatus status);
+
+    Return<void> getDataCallListResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<SetupDataCallResult>& dcResponse);
+
+    Return<void> sendOemRilRequestRawResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<uint8_t>& data);
+
+    Return<void> sendOemRilRequestStringsResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<::android::hardware::hidl_string>& data);
+
+    Return<void> sendScreenStateResponse(const RadioResponseInfo& info);
+
+    Return<void> setSuppServiceNotificationsResponse(
+            const RadioResponseInfo& info);
+
+    Return<void> writeSmsToSimResponse(const RadioResponseInfo& info,int32_t index);
+
+    Return<void> deleteSmsOnSimResponse(const RadioResponseInfo& info);
+
+    Return<void> setBandModeResponse(const RadioResponseInfo& info);
+
+    Return<void> getAvailableBandModesResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<RadioBandMode>& bandModes);
+
+    Return<void> sendEnvelopeResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_string& commandResponse);
+
+    Return<void> sendTerminalResponseToSimResponse(const RadioResponseInfo& info);
+
+    Return<void> handleStkCallSetupRequestFromSimResponse(
+            const RadioResponseInfo& info);
+
+    Return<void> explicitCallTransferResponse(const RadioResponseInfo& info);
+
+    Return<void> setPreferredNetworkTypeResponse(const RadioResponseInfo& info);
+
+    Return<void> getPreferredNetworkTypeResponse(const RadioResponseInfo& info,
+            PreferredNetworkType nwType);
+
+    Return<void> getNeighboringCidsResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<NeighboringCell>& cells);
+
+    Return<void> setLocationUpdatesResponse(const RadioResponseInfo& info);
+
+    Return<void> setCdmaSubscriptionSourceResponse(const RadioResponseInfo& info);
+
+    Return<void> setCdmaRoamingPreferenceResponse(const RadioResponseInfo& info);
+
+    Return<void> getCdmaRoamingPreferenceResponse(const RadioResponseInfo& info,
+            CdmaRoamingType type);
+
+    Return<void> setTTYModeResponse(const RadioResponseInfo& info);
+
+    Return<void> getTTYModeResponse(const RadioResponseInfo& info, TtyMode mode);
+
+    Return<void> setPreferredVoicePrivacyResponse(const RadioResponseInfo& info);
+
+    Return<void> getPreferredVoicePrivacyResponse(const RadioResponseInfo& info, bool enable);
+
+    Return<void> sendCDMAFeatureCodeResponse(const RadioResponseInfo& info);
+
+    Return<void> sendBurstDtmfResponse(const RadioResponseInfo& info);
+
+    Return<void> sendCdmaSmsResponse(const RadioResponseInfo& info, const SendSmsResult& sms);
+
+    Return<void> acknowledgeLastIncomingCdmaSmsResponse(const RadioResponseInfo& info);
+
+    Return<void> getGsmBroadcastConfigResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>& configs);
+
+    Return<void> setGsmBroadcastConfigResponse(const RadioResponseInfo& info);
+
+    Return<void> setGsmBroadcastActivationResponse(const RadioResponseInfo& info);
+
+    Return<void> getCdmaBroadcastConfigResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>& configs);
+
+    Return<void> setCdmaBroadcastConfigResponse(const RadioResponseInfo& info);
+
+    Return<void> setCdmaBroadcastActivationResponse(const RadioResponseInfo& info);
+
+    Return<void> getCDMASubscriptionResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_string& mdn,
+            const ::android::hardware::hidl_string& hSid,
+            const ::android::hardware::hidl_string& hNid,
+            const ::android::hardware::hidl_string& min,
+            const ::android::hardware::hidl_string& prl);
+
+    Return<void> writeSmsToRuimResponse(const RadioResponseInfo& info, uint32_t index);
+
+    Return<void> deleteSmsOnRuimResponse(const RadioResponseInfo& info);
+
+    Return<void> getDeviceIdentityResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_string& imei,
+            const ::android::hardware::hidl_string& imeisv,
+            const ::android::hardware::hidl_string& esn,
+            const ::android::hardware::hidl_string& meid);
+
+    Return<void> exitEmergencyCallbackModeResponse(const RadioResponseInfo& info);
+
+    Return<void> getSmscAddressResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_string& smsc);
+
+    Return<void> setSmscAddressResponse(const RadioResponseInfo& info);
+
+    Return<void> reportSmsMemoryStatusResponse(const RadioResponseInfo& info);
+
+    Return<void> reportStkServiceIsRunningResponse(const RadioResponseInfo& info);
+
+    Return<void> getCdmaSubscriptionSourceResponse(const RadioResponseInfo& info,
+            CdmaSubscriptionSource source);
+
+    Return<void> requestIsimAuthenticationResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_string& response);
+
+    Return<void> acknowledgeIncomingGsmSmsWithPduResponse(
+            const RadioResponseInfo& info);
+
+    Return<void> sendEnvelopeWithStatusResponse(const RadioResponseInfo& info,
+            const IccIoResult& iccIo);
+
+    Return<void> getVoiceRadioTechnologyResponse(const RadioResponseInfo& info,
+            RadioTechnology rat);
+
+    Return<void> getCellInfoListResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<CellInfo>& cellInfo);
+
+    Return<void> setCellInfoListRateResponse(const RadioResponseInfo& info);
+
+    Return<void> setInitialAttachApnResponse(const RadioResponseInfo& info);
+
+    Return<void> getImsRegistrationStateResponse(const RadioResponseInfo& info,
+            bool isRegistered, RadioTechnologyFamily ratFamily);
+
+    Return<void> sendImsSmsResponse(const RadioResponseInfo& info,
+            const SendSmsResult& sms);
+
+    Return<void> iccTransmitApduBasicChannelResponse(
+            const RadioResponseInfo& info, const IccIoResult& result);
+
+    Return<void> iccOpenLogicalChannelResponse(const RadioResponseInfo& info,
+            int32_t channelId, const ::android::hardware::hidl_vec<int8_t>& selectResponse);
+
+    Return<void> iccCloseLogicalChannelResponse(const RadioResponseInfo& info);
+
+    Return<void> iccTransmitApduLogicalChannelResponse(
+            const RadioResponseInfo& info, const IccIoResult& result);
+
+    Return<void> nvReadItemResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_string& result);
+
+    Return<void> nvWriteItemResponse(const RadioResponseInfo& info);
+
+    Return<void> nvWriteCdmaPrlResponse(const RadioResponseInfo& info);
+
+    Return<void> nvResetConfigResponse(const RadioResponseInfo& info);
+
+    Return<void> setUiccSubscriptionResponse(const RadioResponseInfo& info);
+
+    Return<void> setDataAllowedResponse(const RadioResponseInfo& info);
+
+    Return<void> getHardwareConfigResponse(const RadioResponseInfo& info,
+            const ::android::hardware::hidl_vec<HardwareConfig>& config);
+
+    Return<void> requestIccSimAuthenticationResponse(
+            const RadioResponseInfo& info, const IccIoResult& result);
+
+    Return<void> setDataProfileResponse(const RadioResponseInfo& info);
+
+    Return<void> requestShutdownResponse(const RadioResponseInfo& info);
+
+    Return<void> getRadioCapabilityResponse(const RadioResponseInfo& info,
+            const RadioCapability& rc);
+
+    Return<void> setRadioCapabilityResponse(const RadioResponseInfo& info,
+            const RadioCapability& rc);
+
+    Return<void> startLceServiceResponse(const RadioResponseInfo& info,
+            const LceStatusInfo& statusInfo);
+
+    Return<void> stopLceServiceResponse(const RadioResponseInfo& info,
+            const LceStatusInfo& statusInfo);
+
+    Return<void> pullLceDataResponse(const RadioResponseInfo& info,
+            const LceDataInfo& lceInfo);
+
+    Return<void> getModemActivityInfoResponse(const RadioResponseInfo& info,
+            const ActivityStatsInfo& activityInfo);
+
+    Return<void> setAllowedCarriersResponse(const RadioResponseInfo& info,
+            int32_t numAllowed);
+
+    Return<void> getAllowedCarriersResponse(const RadioResponseInfo& info,
+            bool allAllowed, const CarrierRestrictions& carriers);
+
+    Return<void> sendDeviceStateResponse(const RadioResponseInfo& info);
+
+    Return<void> setIndicationFilterResponse(const RadioResponseInfo& info);
+
+    Return<void> setSimCardPowerResponse(const RadioResponseInfo& info);
+
+    Return<void> acknowledgeRequest(int32_t serial);
+};
+
+// The main test class for Radio HIDL.
+class RadioHidlTest : public ::testing::Test {
+private:
+    std::mutex mtx;
+    std::condition_variable cv;
+    int count;
+
+public:
+    virtual void SetUp() override;
+
+    virtual void TearDown() override;
+
+    /* Used as a mechanism to inform the test about data/event callback */
+    void notify();
+
+    /* Test code calls this function to wait for response */
+    std::cv_status wait();
+
+    sp<IRadio> radio;
+    sp<RadioResponse> radioRsp;
+    sp<IRadioIndication> radioInd;
+};
+
+// A class for test environment setup
+class RadioHidlEnvironment : public ::testing::Environment {
+public:
+    virtual void SetUp() {}
+    virtual void TearDown() {}
+};
diff --git a/radio/1.0/vts/functional/radio_response.cpp b/radio/1.0/vts/functional/radio_response.cpp
new file mode 100644
index 0000000..b2a74f4
--- /dev/null
+++ b/radio/1.0/vts/functional/radio_response.cpp
@@ -0,0 +1,665 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include<radio_hidl_hal_utils.h>
+
+RadioResponse::RadioResponse(RadioHidlTest& parent) : parent(parent) {
+}
+
+Return<void> RadioResponse::getIccCardStatusResponse(
+        const RadioResponseInfo& info, const CardStatus& card_status) {
+    rspInfo = info;
+    cardStatus = card_status;
+    parent.notify();
+    return Void();
+}
+
+Return<void> RadioResponse::supplyIccPinForAppResponse(
+        const RadioResponseInfo& info, int32_t remainingRetries) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
+}
+
+Return<void> RadioResponse::supplyIccPukForAppResponse(
+        const RadioResponseInfo& info, int32_t remainingRetries) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
+}
+
+Return<void> RadioResponse::supplyIccPin2ForAppResponse(
+        const RadioResponseInfo& info, int32_t remainingRetries) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
+}
+
+Return<void> RadioResponse::supplyIccPuk2ForAppResponse(
+        const RadioResponseInfo& info, int32_t remainingRetries) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
+}
+
+Return<void> RadioResponse::changeIccPinForAppResponse(
+        const RadioResponseInfo& info, int32_t remainingRetries) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
+}
+
+Return<void> RadioResponse::changeIccPin2ForAppResponse(
+        const RadioResponseInfo& info, int32_t remaining_retries) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
+}
+
+Return<void> RadioResponse::supplyNetworkDepersonalizationResponse(
+        const RadioResponseInfo& info, int32_t remainingRetries) {
+    return Void();
+}
+
+Return<void> RadioResponse::getCurrentCallsResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_vec<Call>& calls) {
+    return Void();
+}
+
+Return<void> RadioResponse::dialResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getIMSIForAppResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_string& imsi) {
+    return Void();
+}
+
+Return<void> RadioResponse::hangupConnectionResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::hangupWaitingOrBackgroundResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::hangupForegroundResumeBackgroundResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::switchWaitingOrHoldingAndActiveResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::conferenceResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::rejectCallResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getLastCallFailCauseResponse(
+        const RadioResponseInfo& info, const LastCallFailCauseInfo& failCauseInfo) {
+    return Void();
+}
+
+Return<void> RadioResponse::getSignalStrengthResponse(
+        const RadioResponseInfo& info, const SignalStrength& sig_strength) {
+    return Void();
+}
+
+Return<void> RadioResponse::getVoiceRegistrationStateResponse(
+        const RadioResponseInfo& info, const VoiceRegStateResult& voiceRegResponse) {
+    return Void();
+}
+
+Return<void> RadioResponse::getDataRegistrationStateResponse(
+        const RadioResponseInfo& info, const DataRegStateResult& dataRegResponse) {
+    return Void();
+}
+
+Return<void> RadioResponse::getOperatorResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_string& longName,
+        const ::android::hardware::hidl_string& shortName,
+        const ::android::hardware::hidl_string& numeric) {
+    return Void();
+}
+
+Return<void> RadioResponse::setRadioPowerResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendDtmfResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendSmsResponse(const RadioResponseInfo& info,
+        const SendSmsResult& sms) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendSMSExpectMoreResponse(
+        const RadioResponseInfo& info, const SendSmsResult& sms) {
+    return Void();
+}
+
+Return<void> RadioResponse::setupDataCallResponse(
+        const RadioResponseInfo& info, const SetupDataCallResult& dcResponse) {
+    return Void();
+}
+
+Return<void> RadioResponse::iccIOForAppResponse(
+        const RadioResponseInfo& info, const IccIoResult& iccIo) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendUssdResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::cancelPendingUssdResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getClirResponse(const RadioResponseInfo& info, int32_t n, int32_t m) {
+    return Void();
+}
+
+Return<void> RadioResponse::setClirResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getCallForwardStatusResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_vec<CallForwardInfo>&
+        callForwardInfos) {
+    return Void();
+}
+
+Return<void> RadioResponse::setCallForwardResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getCallWaitingResponse(
+        const RadioResponseInfo& info, bool enable, int32_t serviceClass) {
+    return Void();
+}
+
+Return<void> RadioResponse::setCallWaitingResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::acknowledgeLastIncomingGsmSmsResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::acceptCallResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::deactivateDataCallResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getFacilityLockForAppResponse(const RadioResponseInfo& info,
+        int32_t response) {
+    return Void();
+}
+
+Return<void> RadioResponse::setFacilityLockForAppResponse(const RadioResponseInfo& info,
+        int32_t retry) {
+    return Void();
+}
+
+Return<void> RadioResponse::setBarringPasswordResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getNetworkSelectionModeResponse(
+        const RadioResponseInfo& info, bool manual) {
+    return Void();
+}
+
+Return<void> RadioResponse::setNetworkSelectionModeAutomaticResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setNetworkSelectionModeManualResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getAvailableNetworksResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<OperatorInfo>& networkInfos) {
+    return Void();
+}
+
+Return<void> RadioResponse::startDtmfResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::stopDtmfResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getBasebandVersionResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_string& version) {
+    return Void();
+}
+
+Return<void> RadioResponse::separateConnectionResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setMuteResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getMuteResponse(const RadioResponseInfo& info, bool enable) {
+    return Void();
+}
+
+Return<void> RadioResponse::getClipResponse(const RadioResponseInfo& info, ClipStatus status) {
+    return Void();
+}
+
+Return<void> RadioResponse::getDataCallListResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<SetupDataCallResult>& dcResponse) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendOemRilRequestRawResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<uint8_t>& data) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendOemRilRequestStringsResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<::android::hardware::hidl_string>& data) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendScreenStateResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setSuppServiceNotificationsResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::writeSmsToSimResponse(
+        const RadioResponseInfo& info, int32_t index) {
+    return Void();
+}
+
+Return<void> RadioResponse::deleteSmsOnSimResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setBandModeResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getAvailableBandModesResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<RadioBandMode>& bandModes) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendEnvelopeResponse(const RadioResponseInfo& info,
+        const ::android::hardware::hidl_string& commandResponse) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendTerminalResponseToSimResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::handleStkCallSetupRequestFromSimResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::explicitCallTransferResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setPreferredNetworkTypeResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getPreferredNetworkTypeResponse(
+        const RadioResponseInfo& info, PreferredNetworkType nw_type) {
+    return Void();
+}
+
+Return<void> RadioResponse::getNeighboringCidsResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<NeighboringCell>& cells) {
+    return Void();
+}
+
+Return<void> RadioResponse::setLocationUpdatesResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setCdmaSubscriptionSourceResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setCdmaRoamingPreferenceResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getCdmaRoamingPreferenceResponse(
+        const RadioResponseInfo& info, CdmaRoamingType type) {
+    return Void();
+}
+
+Return<void> RadioResponse::setTTYModeResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getTTYModeResponse(const RadioResponseInfo& info, TtyMode mode) {
+    return Void();
+}
+
+Return<void> RadioResponse::setPreferredVoicePrivacyResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getPreferredVoicePrivacyResponse(
+        const RadioResponseInfo& info, bool enable) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendCDMAFeatureCodeResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendBurstDtmfResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendCdmaSmsResponse(
+        const RadioResponseInfo& info, const SendSmsResult& sms) {
+    return Void();
+}
+
+Return<void> RadioResponse::acknowledgeLastIncomingCdmaSmsResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getGsmBroadcastConfigResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>& configs) {
+    return Void();
+}
+
+Return<void> RadioResponse::setGsmBroadcastConfigResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setGsmBroadcastActivationResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getCdmaBroadcastConfigResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>& configs) {
+    return Void();
+}
+
+Return<void> RadioResponse::setCdmaBroadcastConfigResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setCdmaBroadcastActivationResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getCDMASubscriptionResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_string& mdn,
+        const ::android::hardware::hidl_string& hSid, const ::android::hardware::hidl_string& hNid,
+        const ::android::hardware::hidl_string& min,
+        const ::android::hardware::hidl_string& prl) {
+    return Void();
+}
+
+Return<void> RadioResponse::writeSmsToRuimResponse(
+        const RadioResponseInfo& info, uint32_t index) {
+    return Void();
+}
+
+Return<void> RadioResponse::deleteSmsOnRuimResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getDeviceIdentityResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_string& imei,
+        const ::android::hardware::hidl_string& imeisv, const ::android::hardware::hidl_string& esn,
+        const ::android::hardware::hidl_string& meid) {
+    return Void();
+}
+
+Return<void> RadioResponse::exitEmergencyCallbackModeResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getSmscAddressResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_string& smsc) {
+    return Void();
+}
+
+Return<void> RadioResponse::setSmscAddressResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::reportSmsMemoryStatusResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::reportStkServiceIsRunningResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getCdmaSubscriptionSourceResponse(
+        const RadioResponseInfo& info, CdmaSubscriptionSource source) {
+    return Void();
+}
+
+Return<void> RadioResponse::requestIsimAuthenticationResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_string& response) {
+    return Void();
+}
+
+Return<void> RadioResponse::acknowledgeIncomingGsmSmsWithPduResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendEnvelopeWithStatusResponse(
+        const RadioResponseInfo& info, const IccIoResult& iccIo) {
+    return Void();
+}
+
+Return<void> RadioResponse::getVoiceRadioTechnologyResponse(
+        const RadioResponseInfo& info, RadioTechnology rat) {
+    return Void();
+}
+
+Return<void> RadioResponse::getCellInfoListResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_vec<CellInfo>& cellInfo) {
+    return Void();
+}
+
+Return<void> RadioResponse::setCellInfoListRateResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setInitialAttachApnResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getImsRegistrationStateResponse(
+        const RadioResponseInfo& info, bool isRegistered, RadioTechnologyFamily ratFamily) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendImsSmsResponse(
+        const RadioResponseInfo& info, const SendSmsResult& sms) {
+    return Void();
+}
+
+Return<void> RadioResponse::iccTransmitApduBasicChannelResponse(
+        const RadioResponseInfo& info, const IccIoResult& result) {
+    return Void();
+}
+
+Return<void> RadioResponse::iccOpenLogicalChannelResponse(
+        const RadioResponseInfo& info, int32_t channelId,
+        const ::android::hardware::hidl_vec<int8_t>& selectResponse) {
+    return Void();
+}
+
+Return<void> RadioResponse::iccCloseLogicalChannelResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::iccTransmitApduLogicalChannelResponse(
+        const RadioResponseInfo& info, const IccIoResult& result) {
+    return Void();
+}
+
+Return<void> RadioResponse::nvReadItemResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_string& result) {
+    return Void();
+}
+
+Return<void> RadioResponse::nvWriteItemResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::nvWriteCdmaPrlResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::nvResetConfigResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setUiccSubscriptionResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setDataAllowedResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getHardwareConfigResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<HardwareConfig>& config) {
+    return Void();
+}
+
+Return<void> RadioResponse::requestIccSimAuthenticationResponse(
+        const RadioResponseInfo& info, const IccIoResult& result) {
+    return Void();
+}
+
+Return<void> RadioResponse::setDataProfileResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::requestShutdownResponse(const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::getRadioCapabilityResponse(
+        const RadioResponseInfo& info, const RadioCapability& rc) {
+    return Void();
+}
+
+Return<void> RadioResponse::setRadioCapabilityResponse(
+        const RadioResponseInfo& info, const RadioCapability& rc) {
+    return Void();
+}
+
+Return<void> RadioResponse::startLceServiceResponse(
+        const RadioResponseInfo& info, const LceStatusInfo& statusInfo) {
+    return Void();
+}
+
+Return<void> RadioResponse::stopLceServiceResponse(
+        const RadioResponseInfo& info, const LceStatusInfo& statusInfo) {
+    return Void();
+}
+
+Return<void> RadioResponse::pullLceDataResponse(
+        const RadioResponseInfo& info, const LceDataInfo& lceInfo) {
+    return Void();
+}
+
+Return<void> RadioResponse::getModemActivityInfoResponse(
+        const RadioResponseInfo& info, const ActivityStatsInfo& activityInfo) {
+    return Void();
+}
+
+Return<void> RadioResponse::setAllowedCarriersResponse(
+        const RadioResponseInfo& info, int32_t numAllowed) {
+    return Void();
+}
+
+Return<void> RadioResponse::getAllowedCarriersResponse(
+        const RadioResponseInfo& info, bool allAllowed, const CarrierRestrictions& carriers) {
+    return Void();
+}
+
+Return<void> RadioResponse::sendDeviceStateResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setIndicationFilterResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::setSimCardPowerResponse(
+        const RadioResponseInfo& info) {
+    return Void();
+}
+
+Return<void> RadioResponse::acknowledgeRequest(int32_t serial) {
+    return Void();
+}
diff --git a/radio/1.0/vts/functional/vts/testcases/hal/radio/__init__.py b/radio/1.0/vts/functional/vts/testcases/hal/radio/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/radio/1.0/vts/functional/vts/testcases/hal/radio/__init__.py
+++ /dev/null
diff --git a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/Android.mk b/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/__init__.py b/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/__init__.py
+++ /dev/null
diff --git a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/Android.mk b/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/Android.mk
deleted file mode 100644
index 59f7c85..0000000
--- a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := RadioHidlTest
-VTS_CONFIG_SRC_DIR := testcases/hal/radio/hidl/host
-include test/vts/tools/build/Android.host_config.mk
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/AndroidTest.xml b/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/AndroidTest.xml
deleted file mode 100644
index a826d20..0000000
--- a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/AndroidTest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 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.
--->
-<configuration description="Config for VTS HAL Radio test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="cleanup" value="true" />
-        <option name="push" value="spec/hardware/interfaces/radio/1.0/vts/Radio.vts->/data/local/tmp/spec/Radio.vts" />
-        <option name="push" value="spec/hardware/interfaces/radio/1.0/vts/RadioIndication.vts->/data/local/tmp/spec/RadioIndication.vts" />
-        <option name="push" value="spec/hardware/interfaces/radio/1.0/vts/RadioResponse.vts->/data/local/tmp/spec/RadioResponse.vts" />
-        <option name="push" value="spec/hardware/interfaces/radio/1.0/vts/Sap.vts->/data/local/tmp/spec/Sap.vts" />
-        <option name="push" value="spec/hardware/interfaces/radio/1.0/vts/SapCallback.vts->/data/local/tmp/spec/SapCallback.vts" />
-        <option name="push" value="spec/hardware/interfaces/radio/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="RadioHidlTest" />
-        <option name="test-case-path" value="vts/testcases/hal/radio/hidl/host/RadioHidlTest" />
-    </test>
-</configuration>
diff --git a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/RadioHidlTest.py b/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/RadioHidlTest.py
deleted file mode 100644
index 33dac35..0000000
--- a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/RadioHidlTest.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env python3.4
-#
-# 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.
-#
-
-import logging
-import time
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test_with_webdb
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.profiling import profiling_utils
-
-
-class VehicleHidlTest(base_test_with_webdb.BaseTestWithWebDbClass):
-    """A simple testcase for the VEHICLE HIDL HAL."""
-
-    def setUpClass(self):
-        """Creates a mirror and init vehicle hal."""
-        self.dut = self.registerController(android_device)[0]
-
-        self.dut.shell.InvokeTerminal("one")
-        self.dut.shell.one.Execute("setenforce 0")  # SELinux permissive mode
-
-        if self.enable_profiling:
-            profiling_utils.EnableVTSProfiling(self.dut.shell.one)
-
-        self.dut.hal.InitHidlHal(
-            target_type="radio",
-            target_basepaths=self.dut.libPaths,
-            target_version=1.0,
-            target_package="android.hardware.radio",
-            target_component_name="IRadio",
-            hw_binder_service_name="Radio",
-            bits=64 if self.dut.is64Bit else 32)
-
-        self.radio = self.dut.hal.radio  # shortcut
-        self.radio_types = self.dut.hal.radio.GetHidlTypeInterface("types")
-        logging.info("Radio types: %s", self.radio_types)
-
-    def tearDownClass(self):
-        """Disables the profiling.
-
-        If profiling is enabled for the test, collect the profiling data
-        and disable profiling after the test is done.
-        """
-        if self.enable_profiling:
-            profiling_trace_path = getattr(
-                self, self.VTS_PROFILING_TRACING_PATH, "")
-            self.ProcessAndUploadTraceData(self.dut, profiling_trace_path)
-            profiling_utils.DisableVTSProfiling(self.dut.shell.one)
-
-    def testHelloWorld(self):
-        logging.info('hello world')
-
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/__init__.py b/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/radio/1.0/vts/functional/vts/testcases/hal/radio/hidl/host/__init__.py
+++ /dev/null
diff --git a/radio/1.0/vts/types.vts b/radio/1.0/vts/types.vts
deleted file mode 100644
index c11db63..0000000
--- a/radio/1.0/vts/types.vts
+++ /dev/null
@@ -1,5532 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.radio"
-
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioConst"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "CDMA_ALPHA_INFO_BUFFER_LENGTH"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "CDMA_NUMBER_INFO_BUFFER_LENGTH"
-        scalar_value: {
-            int32_t: 81
-        }
-        enumerator: "MAX_RILDS"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "MAX_SOCKET_NAME_LENGTH"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "MAX_CLIENT_ID_LENGTH"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "MAX_DEBUG_SOCKET_NAME_LENGTH"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "MAX_QEMU_PIPE_NAME_LENGTH"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "MAX_UUID_LENGTH"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "CARD_MAX_APPS"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "CDMA_MAX_NUMBER_OF_INFO_RECS"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "SS_INFO_MAX"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "NUM_SERVICE_CLASSES"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "NUM_TX_POWER_LEVELS"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioCdmaSmsConst"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ADDRESS_MAX"
-        scalar_value: {
-            int32_t: 36
-        }
-        enumerator: "SUBADDRESS_MAX"
-        scalar_value: {
-            int32_t: 36
-        }
-        enumerator: "BEARER_DATA_MAX"
-        scalar_value: {
-            int32_t: 255
-        }
-        enumerator: "UDH_MAX_SND_SIZE"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "UDH_EO_DATA_SEGMENT_MAX"
-        scalar_value: {
-            int32_t: 131
-        }
-        enumerator: "MAX_UD_HEADERS"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "USER_DATA_MAX"
-        scalar_value: {
-            int32_t: 229
-        }
-        enumerator: "UDH_LARGE_PIC_SIZE"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "UDH_SMALL_PIC_SIZE"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "UDH_VAR_PIC_SIZE"
-        scalar_value: {
-            int32_t: 134
-        }
-        enumerator: "UDH_ANIM_NUM_BITMAPS"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "UDH_LARGE_BITMAP_SIZE"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "UDH_SMALL_BITMAP_SIZE"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "UDH_OTHER_SIZE"
-        scalar_value: {
-            int32_t: 226
-        }
-        enumerator: "IP_ADDRESS_SIZE"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioError"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RADIO_NOT_AVAILABLE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "GENERIC_FAILURE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "PASSWORD_INCORRECT"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SIM_PIN2"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "SIM_PUK2"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "REQUEST_NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "CANCELLED"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "OP_NOT_ALLOWED_DURING_VOICE_CALL"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "OP_NOT_ALLOWED_BEFORE_REG_TO_NW"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "SMS_SEND_FAIL_RETRY"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "SIM_ABSENT"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "SUBSCRIPTION_NOT_AVAILABLE"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "MODE_NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "FDN_CHECK_FAILURE"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "ILLEGAL_SIM_OR_ME"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "MISSING_RESOURCE"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "NO_SUCH_ELEMENT"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "DIAL_MODIFIED_TO_USSD"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "DIAL_MODIFIED_TO_SS"
-        scalar_value: {
-            int32_t: 19
-        }
-        enumerator: "DIAL_MODIFIED_TO_DIAL"
-        scalar_value: {
-            int32_t: 20
-        }
-        enumerator: "USSD_MODIFIED_TO_DIAL"
-        scalar_value: {
-            int32_t: 21
-        }
-        enumerator: "USSD_MODIFIED_TO_SS"
-        scalar_value: {
-            int32_t: 22
-        }
-        enumerator: "USSD_MODIFIED_TO_USSD"
-        scalar_value: {
-            int32_t: 23
-        }
-        enumerator: "SS_MODIFIED_TO_DIAL"
-        scalar_value: {
-            int32_t: 24
-        }
-        enumerator: "SS_MODIFIED_TO_USSD"
-        scalar_value: {
-            int32_t: 25
-        }
-        enumerator: "SUBSCRIPTION_NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 26
-        }
-        enumerator: "SS_MODIFIED_TO_SS"
-        scalar_value: {
-            int32_t: 27
-        }
-        enumerator: "LCE_NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 36
-        }
-        enumerator: "NO_MEMORY"
-        scalar_value: {
-            int32_t: 37
-        }
-        enumerator: "INTERNAL_ERR"
-        scalar_value: {
-            int32_t: 38
-        }
-        enumerator: "SYSTEM_ERR"
-        scalar_value: {
-            int32_t: 39
-        }
-        enumerator: "MODEM_ERR"
-        scalar_value: {
-            int32_t: 40
-        }
-        enumerator: "INVALID_STATE"
-        scalar_value: {
-            int32_t: 41
-        }
-        enumerator: "NO_RESOURCES"
-        scalar_value: {
-            int32_t: 42
-        }
-        enumerator: "SIM_ERR"
-        scalar_value: {
-            int32_t: 43
-        }
-        enumerator: "INVALID_ARGUMENTS"
-        scalar_value: {
-            int32_t: 44
-        }
-        enumerator: "INVALID_SIM_STATE"
-        scalar_value: {
-            int32_t: 45
-        }
-        enumerator: "INVALID_MODEM_STATE"
-        scalar_value: {
-            int32_t: 46
-        }
-        enumerator: "INVALID_CALL_ID"
-        scalar_value: {
-            int32_t: 47
-        }
-        enumerator: "NO_SMS_TO_ACK"
-        scalar_value: {
-            int32_t: 48
-        }
-        enumerator: "NETWORK_ERR"
-        scalar_value: {
-            int32_t: 49
-        }
-        enumerator: "REQUEST_RATE_LIMITED"
-        scalar_value: {
-            int32_t: 50
-        }
-        enumerator: "SIM_BUSY"
-        scalar_value: {
-            int32_t: 51
-        }
-        enumerator: "SIM_FULL"
-        scalar_value: {
-            int32_t: 52
-        }
-        enumerator: "NETWORK_REJECT"
-        scalar_value: {
-            int32_t: 53
-        }
-        enumerator: "OPERATION_NOT_ALLOWED"
-        scalar_value: {
-            int32_t: 54
-        }
-        enumerator: "EMPTY_RECORD"
-        scalar_value: {
-            int32_t: 55
-        }
-        enumerator: "INVALID_SMS_FORMAT"
-        scalar_value: {
-            int32_t: 56
-        }
-        enumerator: "ENCODING_ERR"
-        scalar_value: {
-            int32_t: 57
-        }
-        enumerator: "INVALID_SMSC_ADDRESS"
-        scalar_value: {
-            int32_t: 58
-        }
-        enumerator: "NO_SUCH_ENTRY"
-        scalar_value: {
-            int32_t: 59
-        }
-        enumerator: "NETWORK_NOT_READY"
-        scalar_value: {
-            int32_t: 60
-        }
-        enumerator: "NOT_PROVISIONED"
-        scalar_value: {
-            int32_t: 61
-        }
-        enumerator: "NO_SUBSCRIPTION"
-        scalar_value: {
-            int32_t: 62
-        }
-        enumerator: "NO_NETWORK_FOUND"
-        scalar_value: {
-            int32_t: 63
-        }
-        enumerator: "DEVICE_IN_USE"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "ABORTED"
-        scalar_value: {
-            int32_t: 65
-        }
-        enumerator: "INVALID_RESPONSE"
-        scalar_value: {
-            int32_t: 66
-        }
-        enumerator: "OEM_ERROR_1"
-        scalar_value: {
-            int32_t: 501
-        }
-        enumerator: "OEM_ERROR_2"
-        scalar_value: {
-            int32_t: 502
-        }
-        enumerator: "OEM_ERROR_3"
-        scalar_value: {
-            int32_t: 503
-        }
-        enumerator: "OEM_ERROR_4"
-        scalar_value: {
-            int32_t: 504
-        }
-        enumerator: "OEM_ERROR_5"
-        scalar_value: {
-            int32_t: 505
-        }
-        enumerator: "OEM_ERROR_6"
-        scalar_value: {
-            int32_t: 506
-        }
-        enumerator: "OEM_ERROR_7"
-        scalar_value: {
-            int32_t: 507
-        }
-        enumerator: "OEM_ERROR_8"
-        scalar_value: {
-            int32_t: 508
-        }
-        enumerator: "OEM_ERROR_9"
-        scalar_value: {
-            int32_t: 509
-        }
-        enumerator: "OEM_ERROR_10"
-        scalar_value: {
-            int32_t: 510
-        }
-        enumerator: "OEM_ERROR_11"
-        scalar_value: {
-            int32_t: 511
-        }
-        enumerator: "OEM_ERROR_12"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "OEM_ERROR_13"
-        scalar_value: {
-            int32_t: 513
-        }
-        enumerator: "OEM_ERROR_14"
-        scalar_value: {
-            int32_t: 514
-        }
-        enumerator: "OEM_ERROR_15"
-        scalar_value: {
-            int32_t: 515
-        }
-        enumerator: "OEM_ERROR_16"
-        scalar_value: {
-            int32_t: 516
-        }
-        enumerator: "OEM_ERROR_17"
-        scalar_value: {
-            int32_t: 517
-        }
-        enumerator: "OEM_ERROR_18"
-        scalar_value: {
-            int32_t: 518
-        }
-        enumerator: "OEM_ERROR_19"
-        scalar_value: {
-            int32_t: 519
-        }
-        enumerator: "OEM_ERROR_20"
-        scalar_value: {
-            int32_t: 520
-        }
-        enumerator: "OEM_ERROR_21"
-        scalar_value: {
-            int32_t: 521
-        }
-        enumerator: "OEM_ERROR_22"
-        scalar_value: {
-            int32_t: 522
-        }
-        enumerator: "OEM_ERROR_23"
-        scalar_value: {
-            int32_t: 523
-        }
-        enumerator: "OEM_ERROR_24"
-        scalar_value: {
-            int32_t: 524
-        }
-        enumerator: "OEM_ERROR_25"
-        scalar_value: {
-            int32_t: 525
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioResponseType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SOLICITED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SOLICITED_ACK"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "SOLICITED_ACK_EXP"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioIndicationType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNSOLICITED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "UNSOLICITED_ACK_EXP"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RestrictedState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "CS_EMERGENCY"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CS_NORMAL"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "CS_ALL"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "PS_ALL"
-        scalar_value: {
-            int32_t: 16
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CardState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ABSENT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "PRESENT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ERROR"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "RESTRICTED"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::PinState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ENABLED_NOT_VERIFIED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ENABLED_VERIFIED"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "DISABLED"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ENABLED_BLOCKED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "ENABLED_PERM_BLOCKED"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::AppType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SIM"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "USIM"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "RUIM"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CSIM"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "ISIM"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::AppState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "DETECTED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "PIN"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "PUK"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SUBSCRIPTION_PERSO"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "READY"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::PersoSubstate"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "IN_PROGRESS"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "READY"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "SIM_NETWORK"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SIM_NETWORK_SUBSET"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "SIM_CORPORATE"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "SIM_SERVICE_PROVIDER"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "SIM_SIM"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "SIM_NETWORK_PUK"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "SIM_NETWORK_SUBSET_PUK"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "SIM_CORPORATE_PUK"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "SIM_SERVICE_PROVIDER_PUK"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "SIM_SIM_PUK"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "RUIM_NETWORK1"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "RUIM_NETWORK2"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "RUIM_HRPD"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "RUIM_CORPORATE"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "RUIM_SERVICE_PROVIDER"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "RUIM_RUIM"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "RUIM_NETWORK1_PUK"
-        scalar_value: {
-            int32_t: 19
-        }
-        enumerator: "RUIM_NETWORK2_PUK"
-        scalar_value: {
-            int32_t: 20
-        }
-        enumerator: "RUIM_HRPD_PUK"
-        scalar_value: {
-            int32_t: 21
-        }
-        enumerator: "RUIM_CORPORATE_PUK"
-        scalar_value: {
-            int32_t: 22
-        }
-        enumerator: "RUIM_SERVICE_PROVIDER_PUK"
-        scalar_value: {
-            int32_t: 23
-        }
-        enumerator: "RUIM_RUIM_PUK"
-        scalar_value: {
-            int32_t: 24
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OFF"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "UNAVAILABLE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ON"
-        scalar_value: {
-            int32_t: 10
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SapConnectRsp"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "CONNECT_FAILURE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "MSG_SIZE_TOO_LARGE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "MSG_SIZE_TOO_SMALL"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CONNECT_OK_CALL_ONGOING"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SapDisconnectType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "GRACEFUL"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "IMMEDIATE"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SapApduType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "APDU"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "APDU7816"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SapResultCode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "GENERIC_FAILURE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CARD_NOT_ACCESSSIBLE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "CARD_ALREADY_POWERED_OFF"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CARD_REMOVED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "CARD_ALREADY_POWERED_ON"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "DATA_NOT_AVAILABLE"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 7
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SapStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN_ERROR"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "CARD_RESET"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CARD_NOT_ACCESSIBLE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "CARD_REMOVED"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CARD_INSERTED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "RECOVERED"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SapTransferProtocol"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "T0"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "T1"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CallState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ACTIVE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "HOLDING"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "DIALING"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "ALERTING"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "INCOMING"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "WAITING"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::UusType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "TYPE1_IMPLICIT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "TYPE1_REQUIRED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "TYPE1_NOT_REQUIRED"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "TYPE2_REQUIRED"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "TYPE2_NOT_REQUIRED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "TYPE3_REQUIRED"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "TYPE3_NOT_REQUIRED"
-        scalar_value: {
-            int32_t: 6
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::UusDcs"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "USP"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "OSIHLP"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "X244"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "RMCF"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "IA5C"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CallPresentation"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ALLOWED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RESTRICTED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "PAYPHONE"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::Clir"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DEFAULT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "INVOCATION"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "SUPPRESSION"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::LastCallFailCause"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNOBTAINABLE_NUMBER"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "NO_ROUTE_TO_DESTINATION"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CHANNEL_UNACCEPTABLE"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "OPERATOR_DETERMINED_BARRING"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "NORMAL"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "BUSY"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "NO_USER_RESPONDING"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "NO_ANSWER_FROM_USER"
-        scalar_value: {
-            int32_t: 19
-        }
-        enumerator: "CALL_REJECTED"
-        scalar_value: {
-            int32_t: 21
-        }
-        enumerator: "NUMBER_CHANGED"
-        scalar_value: {
-            int32_t: 22
-        }
-        enumerator: "PREEMPTION"
-        scalar_value: {
-            int32_t: 25
-        }
-        enumerator: "DESTINATION_OUT_OF_ORDER"
-        scalar_value: {
-            int32_t: 27
-        }
-        enumerator: "INVALID_NUMBER_FORMAT"
-        scalar_value: {
-            int32_t: 28
-        }
-        enumerator: "FACILITY_REJECTED"
-        scalar_value: {
-            int32_t: 29
-        }
-        enumerator: "RESP_TO_STATUS_ENQUIRY"
-        scalar_value: {
-            int32_t: 30
-        }
-        enumerator: "NORMAL_UNSPECIFIED"
-        scalar_value: {
-            int32_t: 31
-        }
-        enumerator: "CONGESTION"
-        scalar_value: {
-            int32_t: 34
-        }
-        enumerator: "NETWORK_OUT_OF_ORDER"
-        scalar_value: {
-            int32_t: 38
-        }
-        enumerator: "TEMPORARY_FAILURE"
-        scalar_value: {
-            int32_t: 41
-        }
-        enumerator: "SWITCHING_EQUIPMENT_CONGESTION"
-        scalar_value: {
-            int32_t: 42
-        }
-        enumerator: "ACCESS_INFORMATION_DISCARDED"
-        scalar_value: {
-            int32_t: 43
-        }
-        enumerator: "REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE"
-        scalar_value: {
-            int32_t: 44
-        }
-        enumerator: "RESOURCES_UNAVAILABLE_OR_UNSPECIFIED"
-        scalar_value: {
-            int32_t: 47
-        }
-        enumerator: "QOS_UNAVAILABLE"
-        scalar_value: {
-            int32_t: 49
-        }
-        enumerator: "REQUESTED_FACILITY_NOT_SUBSCRIBED"
-        scalar_value: {
-            int32_t: 50
-        }
-        enumerator: "INCOMING_CALLS_BARRED_WITHIN_CUG"
-        scalar_value: {
-            int32_t: 55
-        }
-        enumerator: "BEARER_CAPABILITY_NOT_AUTHORIZED"
-        scalar_value: {
-            int32_t: 57
-        }
-        enumerator: "BEARER_CAPABILITY_UNAVAILABLE"
-        scalar_value: {
-            int32_t: 58
-        }
-        enumerator: "SERVICE_OPTION_NOT_AVAILABLE"
-        scalar_value: {
-            int32_t: 63
-        }
-        enumerator: "BEARER_SERVICE_NOT_IMPLEMENTED"
-        scalar_value: {
-            int32_t: 65
-        }
-        enumerator: "ACM_LIMIT_EXCEEDED"
-        scalar_value: {
-            int32_t: 68
-        }
-        enumerator: "REQUESTED_FACILITY_NOT_IMPLEMENTED"
-        scalar_value: {
-            int32_t: 69
-        }
-        enumerator: "ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE"
-        scalar_value: {
-            int32_t: 70
-        }
-        enumerator: "SERVICE_OR_OPTION_NOT_IMPLEMENTED"
-        scalar_value: {
-            int32_t: 79
-        }
-        enumerator: "INVALID_TRANSACTION_IDENTIFIER"
-        scalar_value: {
-            int32_t: 81
-        }
-        enumerator: "USER_NOT_MEMBER_OF_CUG"
-        scalar_value: {
-            int32_t: 87
-        }
-        enumerator: "INCOMPATIBLE_DESTINATION"
-        scalar_value: {
-            int32_t: 88
-        }
-        enumerator: "INVALID_TRANSIT_NW_SELECTION"
-        scalar_value: {
-            int32_t: 91
-        }
-        enumerator: "SEMANTICALLY_INCORRECT_MESSAGE"
-        scalar_value: {
-            int32_t: 95
-        }
-        enumerator: "INVALID_MANDATORY_INFORMATION"
-        scalar_value: {
-            int32_t: 96
-        }
-        enumerator: "MESSAGE_TYPE_NON_IMPLEMENTED"
-        scalar_value: {
-            int32_t: 97
-        }
-        enumerator: "MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE"
-        scalar_value: {
-            int32_t: 98
-        }
-        enumerator: "INFORMATION_ELEMENT_NON_EXISTENT"
-        scalar_value: {
-            int32_t: 99
-        }
-        enumerator: "CONDITIONAL_IE_ERROR"
-        scalar_value: {
-            int32_t: 100
-        }
-        enumerator: "MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE"
-        scalar_value: {
-            int32_t: 101
-        }
-        enumerator: "RECOVERY_ON_TIMER_EXPIRED"
-        scalar_value: {
-            int32_t: 102
-        }
-        enumerator: "PROTOCOL_ERROR_UNSPECIFIED"
-        scalar_value: {
-            int32_t: 111
-        }
-        enumerator: "INTERWORKING_UNSPECIFIED"
-        scalar_value: {
-            int32_t: 127
-        }
-        enumerator: "CALL_BARRED"
-        scalar_value: {
-            int32_t: 240
-        }
-        enumerator: "FDN_BLOCKED"
-        scalar_value: {
-            int32_t: 241
-        }
-        enumerator: "IMSI_UNKNOWN_IN_VLR"
-        scalar_value: {
-            int32_t: 242
-        }
-        enumerator: "IMEI_NOT_ACCEPTED"
-        scalar_value: {
-            int32_t: 243
-        }
-        enumerator: "DIAL_MODIFIED_TO_USSD"
-        scalar_value: {
-            int32_t: 244
-        }
-        enumerator: "DIAL_MODIFIED_TO_SS"
-        scalar_value: {
-            int32_t: 245
-        }
-        enumerator: "DIAL_MODIFIED_TO_DIAL"
-        scalar_value: {
-            int32_t: 246
-        }
-        enumerator: "CDMA_LOCKED_UNTIL_POWER_CYCLE"
-        scalar_value: {
-            int32_t: 1000
-        }
-        enumerator: "CDMA_DROP"
-        scalar_value: {
-            int32_t: 1001
-        }
-        enumerator: "CDMA_INTERCEPT"
-        scalar_value: {
-            int32_t: 1002
-        }
-        enumerator: "CDMA_REORDER"
-        scalar_value: {
-            int32_t: 1003
-        }
-        enumerator: "CDMA_SO_REJECT"
-        scalar_value: {
-            int32_t: 1004
-        }
-        enumerator: "CDMA_RETRY_ORDER"
-        scalar_value: {
-            int32_t: 1005
-        }
-        enumerator: "CDMA_ACCESS_FAILURE"
-        scalar_value: {
-            int32_t: 1006
-        }
-        enumerator: "CDMA_PREEMPTED"
-        scalar_value: {
-            int32_t: 1007
-        }
-        enumerator: "CDMA_NOT_EMERGENCY"
-        scalar_value: {
-            int32_t: 1008
-        }
-        enumerator: "CDMA_ACCESS_BLOCKED"
-        scalar_value: {
-            int32_t: 1009
-        }
-        enumerator: "ERROR_UNSPECIFIED"
-        scalar_value: {
-            int32_t: 65535
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::DataCallFailCause"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "OPERATOR_BARRED"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "NAS_SIGNALLING"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "INSUFFICIENT_RESOURCES"
-        scalar_value: {
-            int32_t: 26
-        }
-        enumerator: "MISSING_UKNOWN_APN"
-        scalar_value: {
-            int32_t: 27
-        }
-        enumerator: "UNKNOWN_PDP_ADDRESS_TYPE"
-        scalar_value: {
-            int32_t: 28
-        }
-        enumerator: "USER_AUTHENTICATION"
-        scalar_value: {
-            int32_t: 29
-        }
-        enumerator: "ACTIVATION_REJECT_GGSN"
-        scalar_value: {
-            int32_t: 30
-        }
-        enumerator: "ACTIVATION_REJECT_UNSPECIFIED"
-        scalar_value: {
-            int32_t: 31
-        }
-        enumerator: "SERVICE_OPTION_NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "SERVICE_OPTION_NOT_SUBSCRIBED"
-        scalar_value: {
-            int32_t: 33
-        }
-        enumerator: "SERVICE_OPTION_OUT_OF_ORDER"
-        scalar_value: {
-            int32_t: 34
-        }
-        enumerator: "NSAPI_IN_USE"
-        scalar_value: {
-            int32_t: 35
-        }
-        enumerator: "REGULAR_DEACTIVATION"
-        scalar_value: {
-            int32_t: 36
-        }
-        enumerator: "QOS_NOT_ACCEPTED"
-        scalar_value: {
-            int32_t: 37
-        }
-        enumerator: "NETWORK_FAILURE"
-        scalar_value: {
-            int32_t: 38
-        }
-        enumerator: "UMTS_REACTIVATION_REQ"
-        scalar_value: {
-            int32_t: 39
-        }
-        enumerator: "FEATURE_NOT_SUPP"
-        scalar_value: {
-            int32_t: 40
-        }
-        enumerator: "TFT_SEMANTIC_ERROR"
-        scalar_value: {
-            int32_t: 41
-        }
-        enumerator: "TFT_SYTAX_ERROR"
-        scalar_value: {
-            int32_t: 42
-        }
-        enumerator: "UNKNOWN_PDP_CONTEXT"
-        scalar_value: {
-            int32_t: 43
-        }
-        enumerator: "FILTER_SEMANTIC_ERROR"
-        scalar_value: {
-            int32_t: 44
-        }
-        enumerator: "FILTER_SYTAX_ERROR"
-        scalar_value: {
-            int32_t: 45
-        }
-        enumerator: "PDP_WITHOUT_ACTIVE_TFT"
-        scalar_value: {
-            int32_t: 46
-        }
-        enumerator: "ONLY_IPV4_ALLOWED"
-        scalar_value: {
-            int32_t: 50
-        }
-        enumerator: "ONLY_IPV6_ALLOWED"
-        scalar_value: {
-            int32_t: 51
-        }
-        enumerator: "ONLY_SINGLE_BEARER_ALLOWED"
-        scalar_value: {
-            int32_t: 52
-        }
-        enumerator: "ESM_INFO_NOT_RECEIVED"
-        scalar_value: {
-            int32_t: 53
-        }
-        enumerator: "PDN_CONN_DOES_NOT_EXIST"
-        scalar_value: {
-            int32_t: 54
-        }
-        enumerator: "MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED"
-        scalar_value: {
-            int32_t: 55
-        }
-        enumerator: "MAX_ACTIVE_PDP_CONTEXT_REACHED"
-        scalar_value: {
-            int32_t: 65
-        }
-        enumerator: "UNSUPPORTED_APN_IN_CURRENT_PLMN"
-        scalar_value: {
-            int32_t: 66
-        }
-        enumerator: "INVALID_TRANSACTION_ID"
-        scalar_value: {
-            int32_t: 81
-        }
-        enumerator: "MESSAGE_INCORRECT_SEMANTIC"
-        scalar_value: {
-            int32_t: 95
-        }
-        enumerator: "INVALID_MANDATORY_INFO"
-        scalar_value: {
-            int32_t: 96
-        }
-        enumerator: "MESSAGE_TYPE_UNSUPPORTED"
-        scalar_value: {
-            int32_t: 97
-        }
-        enumerator: "MSG_TYPE_NONCOMPATIBLE_STATE"
-        scalar_value: {
-            int32_t: 98
-        }
-        enumerator: "UNKNOWN_INFO_ELEMENT"
-        scalar_value: {
-            int32_t: 99
-        }
-        enumerator: "CONDITIONAL_IE_ERROR"
-        scalar_value: {
-            int32_t: 100
-        }
-        enumerator: "MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE"
-        scalar_value: {
-            int32_t: 101
-        }
-        enumerator: "PROTOCOL_ERRORS"
-        scalar_value: {
-            int32_t: 111
-        }
-        enumerator: "APN_TYPE_CONFLICT"
-        scalar_value: {
-            int32_t: 112
-        }
-        enumerator: "INVALID_PCSCF_ADDR"
-        scalar_value: {
-            int32_t: 113
-        }
-        enumerator: "INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN"
-        scalar_value: {
-            int32_t: 114
-        }
-        enumerator: "EMM_ACCESS_BARRED"
-        scalar_value: {
-            int32_t: 115
-        }
-        enumerator: "EMERGENCY_IFACE_ONLY"
-        scalar_value: {
-            int32_t: 116
-        }
-        enumerator: "IFACE_MISMATCH"
-        scalar_value: {
-            int32_t: 117
-        }
-        enumerator: "COMPANION_IFACE_IN_USE"
-        scalar_value: {
-            int32_t: 118
-        }
-        enumerator: "IP_ADDRESS_MISMATCH"
-        scalar_value: {
-            int32_t: 119
-        }
-        enumerator: "IFACE_AND_POL_FAMILY_MISMATCH"
-        scalar_value: {
-            int32_t: 120
-        }
-        enumerator: "EMM_ACCESS_BARRED_INFINITE_RETRY"
-        scalar_value: {
-            int32_t: 121
-        }
-        enumerator: "AUTH_FAILURE_ON_EMERGENCY_CALL"
-        scalar_value: {
-            int32_t: 122
-        }
-        enumerator: "OEM_DCFAILCAUSE_1"
-        scalar_value: {
-            int32_t: 4097
-        }
-        enumerator: "OEM_DCFAILCAUSE_2"
-        scalar_value: {
-            int32_t: 4098
-        }
-        enumerator: "OEM_DCFAILCAUSE_3"
-        scalar_value: {
-            int32_t: 4099
-        }
-        enumerator: "OEM_DCFAILCAUSE_4"
-        scalar_value: {
-            int32_t: 4100
-        }
-        enumerator: "OEM_DCFAILCAUSE_5"
-        scalar_value: {
-            int32_t: 4101
-        }
-        enumerator: "OEM_DCFAILCAUSE_6"
-        scalar_value: {
-            int32_t: 4102
-        }
-        enumerator: "OEM_DCFAILCAUSE_7"
-        scalar_value: {
-            int32_t: 4103
-        }
-        enumerator: "OEM_DCFAILCAUSE_8"
-        scalar_value: {
-            int32_t: 4104
-        }
-        enumerator: "OEM_DCFAILCAUSE_9"
-        scalar_value: {
-            int32_t: 4105
-        }
-        enumerator: "OEM_DCFAILCAUSE_10"
-        scalar_value: {
-            int32_t: 4106
-        }
-        enumerator: "OEM_DCFAILCAUSE_11"
-        scalar_value: {
-            int32_t: 4107
-        }
-        enumerator: "OEM_DCFAILCAUSE_12"
-        scalar_value: {
-            int32_t: 4108
-        }
-        enumerator: "OEM_DCFAILCAUSE_13"
-        scalar_value: {
-            int32_t: 4109
-        }
-        enumerator: "OEM_DCFAILCAUSE_14"
-        scalar_value: {
-            int32_t: 4110
-        }
-        enumerator: "OEM_DCFAILCAUSE_15"
-        scalar_value: {
-            int32_t: 4111
-        }
-        enumerator: "VOICE_REGISTRATION_FAIL"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "DATA_REGISTRATION_FAIL"
-        scalar_value: {
-            int32_t: -2
-        }
-        enumerator: "SIGNAL_LOST"
-        scalar_value: {
-            int32_t: -3
-        }
-        enumerator: "PREF_RADIO_TECH_CHANGED"
-        scalar_value: {
-            int32_t: -4
-        }
-        enumerator: "RADIO_POWER_OFF"
-        scalar_value: {
-            int32_t: -5
-        }
-        enumerator: "TETHERED_CALL_ACTIVE"
-        scalar_value: {
-            int32_t: -6
-        }
-        enumerator: "ERROR_UNSPECIFIED"
-        scalar_value: {
-            int32_t: 65535
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RegState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NOT_REG_MT_NOT_SEARCHING_OP"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "REG_HOME"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "NOT_REG_MT_SEARCHING_OP"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "REG_DENIED"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "REG_ROAMING"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "NOT_REG_MT_NOT_SEARCHING_OP_EM"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "NOT_REG_MT_SEARCHING_OP_EM"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "REG_DENIED_EM"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "UNKNOWN_EM"
-        scalar_value: {
-            int32_t: 9
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioTechnology"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "GPRS"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "EDGE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "UMTS"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "IS95A"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "IS95B"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "ONE_X_RTT"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "EVDO_0"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "EVDO_A"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "HSDPA"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "HSUPA"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "HSPA"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "EVDO_B"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "EHRPD"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "LTE"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "HSPAP"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "GSM"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "TD_SCDMA"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "IWLAN"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "LTE_CA"
-        scalar_value: {
-            int32_t: 19
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::DataProfile"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DEFAULT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "TETHERED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "IMS"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FOTA"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CBS"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "OEM_BASE"
-        scalar_value: {
-            int32_t: 1000
-        }
-        enumerator: "INVALID"
-        scalar_value: {
-            int32_t: -1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SmsAcknowledgeFailCause"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "MEMORY_CAPAPCITY_EXCEEDED"
-        scalar_value: {
-            int32_t: 211
-        }
-        enumerator: "UNSPECIFIED_ERROR"
-        scalar_value: {
-            int32_t: 255
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CallForwardInfoStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DISABLE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ENABLE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "INTERROGATE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "REGISTRATION"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ERASURE"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::ClipStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "CLIP_PROVISIONED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "CLIP_UNPROVISIONED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "UNKOWN"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SmsWriteArgsStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "REC_UNREAD"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "REC_READ"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "STO_UNSENT"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "STO_SENT"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioBandMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "BAND_MODE_UNSPECIFIED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "BAND_MODE_EURO"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "BAND_MODE_USA"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "BAND_MODE_JPN"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "BAND_MODE_AUS"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "BAND_MODE_AUS_2"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "BAND_MODE_CELL_800"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "BAND_MODE_PCS"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "BAND_MODE_JTACS"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "BAND_MODE_KOREA_PCS"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "BAND_MODE_5_450M"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "BAND_MODE_IMT2000"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "BAND_MODE_7_700M_2"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "BAND_MODE_8_1800M"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "BAND_MODE_9_900M"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "BAND_MODE_10_800M_2"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "BAND_MODE_EURO_PAMR_400M"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "BAND_MODE_AWS"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "BAND_MODE_USA_2500M"
-        scalar_value: {
-            int32_t: 18
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::OperatorStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "AVAILABLE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CURRENT"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FORBIDDEN"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::PreferredNetworkType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "GSM_WCDMA"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "GSM_ONLY"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "WCDMA"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "GSM_WCDMA_AUTO"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CDMA_EVDO_AUTO"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "CDMA_ONLY"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "EVDO_ONLY"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "GSM_WCDMA_CDMA_EVDO_AUTO"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "LTE_CDMA_EVDO"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "LTE_GSM_WCDMA"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "LTE_CMDA_EVDO_GSM_WCDMA"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "LTE_ONLY"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "LTE_WCDMA"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "TD_SCDMA_ONLY"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "TD_SCDMA_WCDMA"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "TD_SCDMA_LTE"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "TD_SCDMA_GSM"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "TD_SCDMA_GSM_LTE"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "TD_SCDMA_GSM_WCDMA"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "TD_SCDMA_WCDMA_LTE"
-        scalar_value: {
-            int32_t: 19
-        }
-        enumerator: "TD_SCDMA_GSM_WCDMA_LTE"
-        scalar_value: {
-            int32_t: 20
-        }
-        enumerator: "TD_SCDMA_GSM_WCDMA_CDMA_EVDO_AUTO"
-        scalar_value: {
-            int32_t: 21
-        }
-        enumerator: "TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA"
-        scalar_value: {
-            int32_t: 22
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSubscriptionSource"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "RUIM_SIM"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "NV"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaRoamingType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "HOME_NETWORK"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "AFFILIATED_ROAM"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ANY_ROAM"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::TtyMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OFF"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "FULL"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "HCO"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "VCO"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::NvItem"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "CDMA_MEID"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CDMA_MIN"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "CDMA_MDN"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CDMA_ACCOLC"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "DEVICE_MSL"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "RTN_RECONDITIONED_STATUS"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "RTN_ACTIVATION_DATE"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "RTN_LIFE_TIMER"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "RTN_LIFE_CALLS"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "RTN_LIFE_DATA_TX"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "RTN_LIFE_DATA_RX"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "OMADM_HFA_LEVEL"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "MIP_PROFILE_NAI"
-        scalar_value: {
-            int32_t: 31
-        }
-        enumerator: "MIP_PROFILE_HOME_ADDRESS"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "MIP_PROFILE_AAA_AUTH"
-        scalar_value: {
-            int32_t: 33
-        }
-        enumerator: "MIP_PROFILE_HA_AUTH"
-        scalar_value: {
-            int32_t: 34
-        }
-        enumerator: "MIP_PROFILE_PRI_HA_ADDR"
-        scalar_value: {
-            int32_t: 35
-        }
-        enumerator: "MIP_PROFILE_SEC_HA_ADDR"
-        scalar_value: {
-            int32_t: 36
-        }
-        enumerator: "MIP_PROFILE_REV_TUN_PREF"
-        scalar_value: {
-            int32_t: 37
-        }
-        enumerator: "MIP_PROFILE_HA_SPI"
-        scalar_value: {
-            int32_t: 38
-        }
-        enumerator: "MIP_PROFILE_AAA_SPI"
-        scalar_value: {
-            int32_t: 39
-        }
-        enumerator: "MIP_PROFILE_MN_HA_SS"
-        scalar_value: {
-            int32_t: 40
-        }
-        enumerator: "MIP_PROFILE_MN_AAA_SS"
-        scalar_value: {
-            int32_t: 41
-        }
-        enumerator: "CDMA_PRL_VERSION"
-        scalar_value: {
-            int32_t: 51
-        }
-        enumerator: "CDMA_BC10"
-        scalar_value: {
-            int32_t: 52
-        }
-        enumerator: "CDMA_BC14"
-        scalar_value: {
-            int32_t: 53
-        }
-        enumerator: "CDMA_SO68"
-        scalar_value: {
-            int32_t: 54
-        }
-        enumerator: "CDMA_SO73_COP0"
-        scalar_value: {
-            int32_t: 55
-        }
-        enumerator: "CDMA_SO73_COP1TO7"
-        scalar_value: {
-            int32_t: 56
-        }
-        enumerator: "CDMA_1X_ADVANCED_ENABLED"
-        scalar_value: {
-            int32_t: 57
-        }
-        enumerator: "CDMA_EHRPD_ENABLED"
-        scalar_value: {
-            int32_t: 58
-        }
-        enumerator: "CDMA_EHRPD_FORCED"
-        scalar_value: {
-            int32_t: 59
-        }
-        enumerator: "LTE_BAND_ENABLE_25"
-        scalar_value: {
-            int32_t: 71
-        }
-        enumerator: "LTE_BAND_ENABLE_26"
-        scalar_value: {
-            int32_t: 72
-        }
-        enumerator: "LTE_BAND_ENABLE_41"
-        scalar_value: {
-            int32_t: 73
-        }
-        enumerator: "LTE_SCAN_PRIORITY_25"
-        scalar_value: {
-            int32_t: 74
-        }
-        enumerator: "LTE_SCAN_PRIORITY_26"
-        scalar_value: {
-            int32_t: 75
-        }
-        enumerator: "LTE_SCAN_PRIORITY_41"
-        scalar_value: {
-            int32_t: 76
-        }
-        enumerator: "LTE_HIDDEN_BAND_PRIORITY_25"
-        scalar_value: {
-            int32_t: 77
-        }
-        enumerator: "LTE_HIDDEN_BAND_PRIORITY_26"
-        scalar_value: {
-            int32_t: 78
-        }
-        enumerator: "LTE_HIDDEN_BAND_PRIORITY_41"
-        scalar_value: {
-            int32_t: 79
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::ResetNvType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "RELOAD"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ERASE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "FACORY_RESET"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::HardwareConfigType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "MODEM"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SIM"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::HardwareConfigState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ENABLED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "STANDBY"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "DISABLED"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::LceStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "STOPPED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ACTIVE"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CarrierMatchType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ALL"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SPN"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "IMSI_PREFIX"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "GID1"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "GID2"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::NeighboringCell"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cid"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "rssi"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsDigitMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "FOUR_BIT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "EIGHT_BIT"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsNumberMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NOT_DATA_NETWORK"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "DATA_NETWORK"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsNumberType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "INTERNATIONAL_OR_DATA_IP"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "NATIONAL_OR_INTERNET_MAIL"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "NETWORK"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SUBSCRIBER"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "ALPHANUMERIC"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "ABBREVIATED"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "RESERVED_7"
-        scalar_value: {
-            int32_t: 7
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsNumberPlan"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "TELEPHONY"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "RESERVED_2"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "DATA"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "TELEX"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "RESERVED_5"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "RESERVED_6"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "RESERVED_7"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "RESERVED_8"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "PRIVATE"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "RESERVED_10"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "RESERVED_11"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "RESERVED_12"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "RESERVED_13"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "RESERVED_14"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "RESERVED_15"
-        scalar_value: {
-            int32_t: 15
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsSubaddressType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NSAP"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "USER_SPECIFIED"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsErrorClass"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NO_ERROR"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ERROR"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsWriteArgsStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "REC_UNREAD"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "REC_READ"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "STO_UNSENT"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "STO_SENT"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellInfoType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "GSM"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CDMA"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "LTE"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "WCDMA"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "TD_SCDMA"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::TimeStampType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ANTENNA"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "MODEM"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "OEM_RIL"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "JAVA_RIL"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::ApnAuthType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NO_PAP_NO_CHAP"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "PAP_NO_CHAP"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "NO_PAP_CHAP"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "PAP_CHAP"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioTechnologyFamily"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "THREE_GPP"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "THREE_GPP2"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioCapabilityPhase"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "CONFIGURED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "START"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "APPLY"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "UNSOL_RSP"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "FINISH"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioCapabilityStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SUCCESS"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "FAIL"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioAccessFamily"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "GPRS"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "EDGE"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "UMTS"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "IS95A"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "IS95B"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "ONE_X_RTT"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "EVDO_0"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "EVDO_A"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "HSDPA"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "HSUPA"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "HSPA"
-        scalar_value: {
-            int32_t: 2048
-        }
-        enumerator: "EVDO_B"
-        scalar_value: {
-            int32_t: 4096
-        }
-        enumerator: "EHRPD"
-        scalar_value: {
-            int32_t: 8192
-        }
-        enumerator: "LTE"
-        scalar_value: {
-            int32_t: 16384
-        }
-        enumerator: "HSPAP"
-        scalar_value: {
-            int32_t: 32768
-        }
-        enumerator: "GSM"
-        scalar_value: {
-            int32_t: 65536
-        }
-        enumerator: "TD_SCDMA"
-        scalar_value: {
-            int32_t: 131072
-        }
-        enumerator: "LTE_CA"
-        scalar_value: {
-            int32_t: 524288
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::UssdModeType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NOTIFY"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "REQUEST"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "NW_RELEASE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "LOCAL_CLIENT"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "NW_TIMEOUT"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SimRefreshType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SIM_FILE_UPDATE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SIM_INIT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "SIM_RESET"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SrvccState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "HANDOVER_STARTED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "HANDOVER_COMPLETED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "HANDOVER_FAILED"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "HANDOVER_CANCELED"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::UiccSubActStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DEACTIVATE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ACTIVATE"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SubscriptionType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SUBSCRIPTION_1"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SUBSCRIPTION_2"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "SUBSCRIPTION_3"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::DataProfileInfoType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "COMMON"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "THREE_GPP"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "THREE_GPP2"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::PhoneRestrictedState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "CS_EMERGENCY"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CS_NORMAL"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "CS_ALL"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "PS_ALL"
-        scalar_value: {
-            int32_t: 16
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaCallWaitingNumberPresentation"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ALLOWED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RESTRICTED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaCallWaitingNumberType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "INTERNATIONAL"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "NATIONAL"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "NETWORK_SPECIFIC"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SUBSCRIBER"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaCallWaitingNumberPlan"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ISDN"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "DATA"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "TELEX"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "NATIONAL"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "PRIVATE"
-        scalar_value: {
-            int32_t: 9
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaOtaProvisionStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SPL_UNLOCKED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SPC_RETRIES_EXCEEDED"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "A_KEY_EXCHANGED"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "SSD_UPDATED"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "NAM_DOWNLOADED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "MDN_DOWNLOADED"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "IMSI_DOWNLOADED"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "PRL_DOWNLOADED"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "COMMITTED"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "OTAPA_STARTED"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "OTAPA_STOPPED"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "OTAPA_ABORTED"
-        scalar_value: {
-            int32_t: 11
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaInfoRecName"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DISPLAY"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "CALLED_PARTY_NUMBER"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CALLING_PARTY_NUMBER"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "CONNECTED_NUMBER"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SIGNAL"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "REDIRECTING_NUMBER"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "LINE_CONTROL"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "EXTENDED_DISPLAY"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "T53_CLIR"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "T53_RELEASE"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "T53_AUDIO_CONTROL"
-        scalar_value: {
-            int32_t: 10
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaRedirectingReason"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "CALL_FORWARDING_BUSY"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CALL_FORWARDING_NO_REPLY"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "CALLED_DTE_OUT_OF_ORDER"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "CALL_FORWARDING_BY_THE_CALLED_DTE"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "CALL_FORWARDING_UNCONDITIONAL"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "RESERVED"
-        scalar_value: {
-            int32_t: 16
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SsServiceType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "CFU"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "CF_BUSY"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CF_NO_REPLY"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "CF_NOT_REACHABLE"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CF_ALL"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "CF_ALL_CONDITIONAL"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "CLIP"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "CLIR"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "COLP"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "COLR"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "WAIT"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "BAOC"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "BAOIC"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "BAOIC_EXC_HOME"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "BAIC"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "BAIC_ROAMING"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "ALL_BARRING"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "OUTGOING_BARRING"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "INCOMING_BARRING"
-        scalar_value: {
-            int32_t: 18
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SsRequestType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ACTIVATION"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "DEACTIVATION"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "INTERROGATION"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "REGISTRATION"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ERASURE"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SsTeleserviceType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ALL_TELE_AND_BEARER_SERVICES"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ALL_TELESEVICES"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "TELEPHONY"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "ALL_DATA_TELESERVICES"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SMS_SERVICES"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "ALL_TELESERVICES_EXCEPT_SMS"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SuppServiceClass"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "VOICE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "DATA"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FAX"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "SMS"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "DATA_SYNC"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "DATA_ASYNC"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "PACKET"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "PAD"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "MAX"
-        scalar_value: {
-            int32_t: 128
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioResponseInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::RadioResponseType"
-    }
-    struct_value: {
-        name: "serial"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "error"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::RadioError"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::AppStatus"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "appType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::AppType"
-    }
-    struct_value: {
-        name: "appState"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::AppState"
-    }
-    struct_value: {
-        name: "persoSubstate"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::PersoSubstate"
-    }
-    struct_value: {
-        name: "aidPtr"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "appLabelPtr"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "pin1Replaced"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "pin1"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::PinState"
-    }
-    struct_value: {
-        name: "pin2"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::PinState"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CardStatus"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cardState"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CardState"
-    }
-    struct_value: {
-        name: "universalPinState"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::PinState"
-    }
-    struct_value: {
-        name: "gsmUmtsSubscriptionAppIndex"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cdmaSubscriptionAppIndex"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "imsSubscriptionAppIndex"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "applications"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::AppStatus"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::UusInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "uusType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::UusType"
-    }
-    struct_value: {
-        name: "uusDcs"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::UusDcs"
-    }
-    struct_value: {
-        name: "uusData"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::Call"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "state"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CallState"
-    }
-    struct_value: {
-        name: "index"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "toa"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "isMpty"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "isMT"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "als"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "isVoice"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "isVoicePrivacy"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "number"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "numberPresentation"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CallPresentation"
-    }
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "namePresentation"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CallPresentation"
-    }
-    struct_value: {
-        name: "uusInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::UusInfo"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::Dial"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "address"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "clir"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::Clir"
-    }
-    struct_value: {
-        name: "uusInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::UusInfo"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::LastCallFailCauseInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "causeCode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::LastCallFailCause"
-    }
-    struct_value: {
-        name: "vendorCause"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::GsmSignalStrength"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "signalStrength"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "bitErrorRate"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "timingAdvance"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::WcdmaSignalStrength"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "signalStrength"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "bitErrorRate"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSignalStrength"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "dbm"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "ecio"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::EvdoSignalStrength"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "dbm"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "ecio"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "signalNoiseRatio"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::LteSignalStrength"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "signalStrength"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "rsrp"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "rsrq"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "rssnr"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cqi"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "timingAdvance"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::TdScdmaSignalStrength"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "rscp"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SignalStrength"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "gw"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::GsmSignalStrength"
-    }
-    struct_value: {
-        name: "cdma"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSignalStrength"
-    }
-    struct_value: {
-        name: "evdo"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::EvdoSignalStrength"
-    }
-    struct_value: {
-        name: "lte"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::LteSignalStrength"
-    }
-    struct_value: {
-        name: "tdScdma"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::TdScdmaSignalStrength"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SendSmsResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "messageRef"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "ackPDU"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "errorCode"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SetupDataCallResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "status"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "suggestedRetryTime"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "active"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "ifname"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "addresses"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "dnses"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "gateways"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "pcscf"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "mtu"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::IccIo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "command"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "fileId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "path"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "p1"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "p2"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "p3"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "data"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "pin2"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "aid"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::IccIoResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sw1"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "sw2"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "simResponse"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::VoiceRegStateResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "regState"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::RegState"
-    }
-    struct_value: {
-        name: "lac"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "rat"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "baseStationId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "baseStationLatitude"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "baseStationLongitude"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cssSupported"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "systemId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "networkId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "roamingIndicator"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "systemIsInPrl"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "defaultRoamingIndicator"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "reasonForDenial"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "psc"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::DataRegStateResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "regState"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::RegState"
-    }
-    struct_value: {
-        name: "lac"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "rat"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "reasonDataDenied"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "maxDataCalls"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "tac"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "phyCid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "eci"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "csgid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "tadv"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CallForwardInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "status"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CallForwardInfoStatus"
-    }
-    struct_value: {
-        name: "reason"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "serviceClass"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "toa"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "number"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "timeSeconds"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::OperatorInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "alphaLong"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "alphaShort"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "operatorNumeric"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "status"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::OperatorStatus"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SmsWriteArgs"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "status"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::SmsWriteArgsStatus"
-    }
-    struct_value: {
-        name: "pdu"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "smsc"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsAddress"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "digitMode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsDigitMode"
-    }
-    struct_value: {
-        name: "numberMode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsNumberMode"
-    }
-    struct_value: {
-        name: "numberType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsNumberType"
-    }
-    struct_value: {
-        name: "numberPlan"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsNumberPlan"
-    }
-    struct_value: {
-        name: "digits"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsSubaddress"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "subaddressType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsSubaddressType"
-    }
-    struct_value: {
-        name: "odd"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "digits"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsMessage"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "teleserviceId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "isServicePresent"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "serviceCategory"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "address"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsAddress"
-    }
-    struct_value: {
-        name: "subAddress"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsSubaddress"
-    }
-    struct_value: {
-        name: "bearerData"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsAck"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "errorClass"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsErrorClass"
-    }
-    struct_value: {
-        name: "smsCauseCode"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaBroadcastSmsConfigInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "serviceCategory"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "language"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "selected"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSmsWriteArgs"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "status"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsWriteArgsStatus"
-    }
-    struct_value: {
-        name: "message"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSmsMessage"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::GsmBroadcastSmsConfigInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "fromServiceId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "toServiceId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "fromCodeScheme"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "toCodeScheme"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "selected"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellIdentityGsm"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "mcc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "mnc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "lac"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "arfcn"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "bsic"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellIdentityWcdma"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "mcc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "mnc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "lac"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "psc"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "uarfcn"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellIdentityCdma"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "networkId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "systemId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "basestationId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "longitude"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "latitude"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellIdentityLte"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "mcc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "mnc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "ci"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "pci"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "tac"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "earfcn"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellIdentityTdscdma"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "mcc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "mnc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "lac"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cpid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellInfoGsm"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cellIdentityGsm"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CellIdentityGsm"
-    }
-    struct_value: {
-        name: "signalStrengthGsm"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::GsmSignalStrength"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellInfoWcdma"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cellIdentityWcdma"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CellIdentityWcdma"
-    }
-    struct_value: {
-        name: "signalStrengthWcdma"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::WcdmaSignalStrength"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellInfoCdma"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cellIdentityCdma"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CellIdentityCdma"
-    }
-    struct_value: {
-        name: "signalStrengthCdma"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSignalStrength"
-    }
-    struct_value: {
-        name: "signalStrengthEvdo"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::EvdoSignalStrength"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellInfoLte"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cellIdentityLte"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CellIdentityLte"
-    }
-    struct_value: {
-        name: "signalStrengthLte"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::LteSignalStrength"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellInfoTdscdma"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cellIdentityTdscdma"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CellIdentityTdscdma"
-    }
-    struct_value: {
-        name: "signalStrengthTdscdma"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::TdScdmaSignalStrength"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CellInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cellInfoType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CellInfoType"
-    }
-    struct_value: {
-        name: "registered"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "timeStampType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::TimeStampType"
-    }
-    struct_value: {
-        name: "timeStamp"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "gsm"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CellInfoGsm"
-        }
-    }
-    struct_value: {
-        name: "cdma"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CellInfoCdma"
-        }
-    }
-    struct_value: {
-        name: "lte"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CellInfoLte"
-        }
-    }
-    struct_value: {
-        name: "wcdma"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CellInfoWcdma"
-        }
-    }
-    struct_value: {
-        name: "tdscdma"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CellInfoTdscdma"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::GsmSmsMessage"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "smscPdu"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "pdu"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::ImsSmsMessage"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "tech"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::RadioTechnologyFamily"
-    }
-    struct_value: {
-        name: "retry"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "messageRef"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cdmaMessage"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSmsMessage"
-        }
-    }
-    struct_value: {
-        name: "gsmMessage"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::GsmSmsMessage"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SimApdu"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sessionId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "cla"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "instruction"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "p1"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "p2"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "p3"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "data"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::NvWriteItem"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "itemId"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::NvItem"
-    }
-    struct_value: {
-        name: "value"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SelectUiccSub"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "slot"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "appIndex"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "subType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::SubscriptionType"
-    }
-    struct_value: {
-        name: "actStatus"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::UiccSubActStatus"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::HardwareConfigModem"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "rilModel"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "rat"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxVoice"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "maxData"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "maxStandby"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::HardwareConfigSim"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "modemUuid"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::HardwareConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::HardwareConfigType"
-    }
-    struct_value: {
-        name: "uuid"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "state"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::HardwareConfigState"
-    }
-    struct_value: {
-        name: "modem"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::HardwareConfigModem"
-        }
-    }
-    struct_value: {
-        name: "sim"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::HardwareConfigSim"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::DataProfileInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "profileId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "apn"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "protocol"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "authType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::ApnAuthType"
-    }
-    struct_value: {
-        name: "user"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "password"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::DataProfileInfoType"
-    }
-    struct_value: {
-        name: "maxConnsTime"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "maxConns"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "waitTime"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "enabled"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::RadioCapability"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "session"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "phase"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::RadioCapabilityPhase"
-    }
-    struct_value: {
-        name: "raf"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::RadioAccessFamily"
-    }
-    struct_value: {
-        name: "logicalModemUuid"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "status"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::RadioCapabilityStatus"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::LceStatusInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "lceStatus"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::LceStatus"
-    }
-    struct_value: {
-        name: "actualIntervalMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::LceDataInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "lastHopCapacityKbps"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "confidenceLevel"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "lceSuspended"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::ActivityStatsInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sleepModeTimeMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "idleModeTimeMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "txmModetimeMs"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 5
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-    struct_value: {
-        name: "rxModeTimeMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::Carrier"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "mcc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "mnc"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "matchType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CarrierMatchType"
-    }
-    struct_value: {
-        name: "matchData"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CarrierRestrictions"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "allowedCarriers"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::Carrier"
-        }
-    }
-    struct_value: {
-        name: "excludedCarriers"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::Carrier"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SuppSvcNotification"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "isMT"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "code"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "index"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "number"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SimRefreshResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::SimRefreshType"
-    }
-    struct_value: {
-        name: "efId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "aid"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaSignalInfoRecord"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "isPresent"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "signalType"
-        type: TYPE_SCALAR
-        scalar_type: "int8_t"
-    }
-    struct_value: {
-        name: "alertPitch"
-        type: TYPE_SCALAR
-        scalar_type: "int8_t"
-    }
-    struct_value: {
-        name: "signal"
-        type: TYPE_SCALAR
-        scalar_type: "int8_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaCallWaiting"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "number"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "numberPresentation"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaCallWaitingNumberPresentation"
-    }
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "signalInfoRecord"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CdmaSignalInfoRecord"
-    }
-    struct_value: {
-        name: "numbertype"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaCallWaitingNumberType"
-    }
-    struct_value: {
-        name: "numberPlan"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaCallWaitingNumberPlan"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaDisplayInfoRecord"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "alphaBuf"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaNumberInfoRecord"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "number"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "numberType"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "numberPlan"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "pi"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "si"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaRedirectingNumberInfoRecord"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "redirectingNumber"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::radio::V1_0::CdmaNumberInfoRecord"
-    }
-    struct_value: {
-        name: "redirectingReason"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaRedirectingReason"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaLineControlInfoRecord"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "lineCtrlPolarityIncluded"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "lineCtrlToggle"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "lineCtrlReverse"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "lineCtrlPowerDenial"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaT53ClirInfoRecord"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cause"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaT53AudioControlInfoRecord"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "upLink"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "downLink"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaInformationRecord"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "name"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::CdmaInfoRecName"
-    }
-    struct_value: {
-        name: "display"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaDisplayInfoRecord"
-        }
-    }
-    struct_value: {
-        name: "number"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaNumberInfoRecord"
-        }
-    }
-    struct_value: {
-        name: "signal"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaSignalInfoRecord"
-        }
-    }
-    struct_value: {
-        name: "redir"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaRedirectingNumberInfoRecord"
-        }
-    }
-    struct_value: {
-        name: "lineCtrl"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaLineControlInfoRecord"
-        }
-    }
-    struct_value: {
-        name: "clir"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaT53ClirInfoRecord"
-        }
-    }
-    struct_value: {
-        name: "audioCtrl"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaT53AudioControlInfoRecord"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CdmaInformationRecords"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "infoRec"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CdmaInformationRecord"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::CfData"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cfInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CallForwardInfo"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::SsInfoData"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "ssInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::StkCcUnsolSsResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "serviceType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::SsServiceType"
-    }
-    struct_value: {
-        name: "requestType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::SsRequestType"
-    }
-    struct_value: {
-        name: "teleserviceType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::SsTeleserviceType"
-    }
-    struct_value: {
-        name: "serviceClass"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::SuppServiceClass"
-    }
-    struct_value: {
-        name: "result"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::radio::V1_0::RadioError"
-    }
-    struct_value: {
-        name: "ssInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::SsInfoData"
-        }
-    }
-    struct_value: {
-        name: "cfData"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::radio::V1_0::CfData"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::radio::V1_0::PcoDataInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "cid"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "bearerProto"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "pcoId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "contents"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
diff --git a/radio/Android.bp b/radio/Android.bp
index bbb3e4b..33f70eb 100644
--- a/radio/Android.bp
+++ b/radio/Android.bp
@@ -1,4 +1,5 @@
 // This is an autogenerated file, do not edit.
 subdirs = [
     "1.0",
+    "1.0/vts/functional",
 ]
diff --git a/renderscript/1.0/Android.bp b/renderscript/1.0/Android.bp
new file mode 100644
index 0000000..cce34e7
--- /dev/null
+++ b/renderscript/1.0/Android.bp
@@ -0,0 +1,69 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.renderscript@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IContext.hal",
+        "IDevice.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.renderscript@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.renderscript@1.0",
+    srcs: [
+        ":android.hardware.renderscript@1.0_hal",
+    ],
+    out: [
+        "android/hardware/renderscript/1.0/types.cpp",
+        "android/hardware/renderscript/1.0/ContextAll.cpp",
+        "android/hardware/renderscript/1.0/DeviceAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.renderscript@1.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.renderscript@1.0",
+    srcs: [
+        ":android.hardware.renderscript@1.0_hal",
+    ],
+    out: [
+        "android/hardware/renderscript/1.0/types.h",
+        "android/hardware/renderscript/1.0/IContext.h",
+        "android/hardware/renderscript/1.0/IHwContext.h",
+        "android/hardware/renderscript/1.0/BnHwContext.h",
+        "android/hardware/renderscript/1.0/BpHwContext.h",
+        "android/hardware/renderscript/1.0/BsContext.h",
+        "android/hardware/renderscript/1.0/IDevice.h",
+        "android/hardware/renderscript/1.0/IHwDevice.h",
+        "android/hardware/renderscript/1.0/BnHwDevice.h",
+        "android/hardware/renderscript/1.0/BpHwDevice.h",
+        "android/hardware/renderscript/1.0/BsDevice.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.renderscript@1.0",
+    generated_sources: ["android.hardware.renderscript@1.0_genc++"],
+    generated_headers: ["android.hardware.renderscript@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.renderscript@1.0_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/renderscript/1.0/Android.mk b/renderscript/1.0/Android.mk
new file mode 100644
index 0000000..5c3a37d
--- /dev/null
+++ b/renderscript/1.0/Android.mk
@@ -0,0 +1,41 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.renderscript@1.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/renderscript/V1_0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/IContext.hal
+$(GEN): $(LOCAL_PATH)/IDevice.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.renderscript@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/renderscript/1.0/IContext.hal b/renderscript/1.0/IContext.hal
new file mode 100644
index 0000000..2e386d2
--- /dev/null
+++ b/renderscript/1.0/IContext.hal
@@ -0,0 +1,1177 @@
+/*
+ * Copyright (C) 2017 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.renderscript@1.0;
+
+import android.hardware.renderscript@1.0::types;
+
+// TODO: is there any way to keep this documentation in sync with the
+// corresponding Java doc?
+//
+// TODO: Some of the documentation was taken from Java docs, whereas others were
+// undocumented. Because of this, there's somewhat two different styles of
+// comments. Look into having a consistent convention.
+//
+// TODO: There was some confusion as to why some paramters use vec<> and others
+// use Ptr/Size. The convention is that vec<> is used whenever the paramter is
+// only an input parameter. HIDL is not supposed to include any output
+// parameters, so a more explicit Ptr/Size is used.
+
+interface IContext {
+
+    /*
+     * TODO: Do we need to define "selectors"? It may be a property of the
+     * "adapted allocation" that's returned.
+     *
+     * Creates an arbitrary window into the base allocation. The type describes
+     * the shape of the window. Any dimensions present in the type must be
+     * equal to or smaller than the dimensions in the source allocation. A
+     * dimension present in the allocation that is not present in the type must
+     * be constrained away with the selectors. If a dimension is present in
+     * both the type and allocation, one of two things must happen. If the type
+     * is smaller than the allocation, a window must be created, the selected
+     * value in the adapter for that dimension must act as the base address,
+     * and the type must describe the size of the view starting at that point.
+     * If the type and allocation dimension are of the same size, then setting
+     * the selector for the dimension must be an error.
+     *
+     * @param type Type describing data layout
+     * @param baseAlloc Allocation
+     * @return subAlloc AllocationAdapter
+     */
+    @callflow(next={"*"})
+    allocationAdapterCreate(Type type, Allocation baseAlloc)
+                 generates (AllocationAdapter subAlloc);
+
+    /*
+     * TODO: Need to relate "offset" back to the terminology in
+     * allocationAdapterCreate() -- the latter uses the terms "selector" and
+     * "selected value". Can we use consistent terminology? Are "offset" and
+     * "selector" actually two different things?
+     *
+     * TODO: Explain the flattened layout in the offsets vec
+     *
+     * Sets the offsets for an Allocation Adapter.
+     *
+     * @param alloc AllocationAdapter
+     * @param offsets Collection of offsets
+     */
+    @callflow(next={"*"})
+    allocationAdapterOffset(AllocationAdapter alloc, vec<uint32_t> offsets);
+
+    /*
+     * TODO: add more explanation here.
+     *
+     * Returns the Type of the Allocation.
+     *
+     * @param allocation Allocation
+     * @return type Allocation's Type
+     */
+    @callflow(next={"*"})
+    allocationGetType(Allocation allocation) generates (Type type);
+
+    /*
+     * TODO: more clarification needed describing if the pointer can be aliased
+     * or if the data can outlive the allocation.
+     *
+     * Creates an Allocation for use by scripts with a given Type and a backing
+     * pointer. For use with ALLOCATION_USAGE_SHARED.
+     *
+     * @param type Type describing data layout
+     * @param mips AllocationMipmapControl specifies desired mipmap behavior for
+     *             the allocation
+     * @param usage Bit field specifying how the Allocation is utilized
+     * @param ptr Pointer to client-side data
+     * @return allocation Created Allocation
+     */
+    @callflow(next={"*"})
+    allocationCreateTyped(Type type, AllocationMipmapControl mips,
+                          bitfield<AllocationUsageType> usage, Ptr ptr)
+               generates (Allocation allocation);
+
+    /*
+     * Creates an Allocation from a Bitmap.
+     *
+     * @param type Type describing data layout
+     * @param mips AllocationMipmapControl specifies desired mipmap behavior for
+     *             the allocation
+     * @param bitmap Bitmap source for the allocation data
+     * @param usage Bit field specifying how the Allocation is utilized
+     * @return allocation Created Allocation containing bitmap data
+     */
+    @callflow(next={"*"})
+    allocationCreateFromBitmap(Type type, AllocationMipmapControl mips,
+                               vec<uint8_t> bitmap,
+                               bitfield<AllocationUsageType> usage)
+                    generates (Allocation allocation);
+
+    /*
+     * Creates a Cubemapped Allocation from a Bitmap.
+     *
+     * @param type Type describing data layout
+     * @param mips AllocationMipmapControl specifies desired mipmap behavior
+     *             for the allocation
+     * @param bitmap Bitmap with cubemap faces layed out in the following
+     *               format: right, left, top, bottom, front, back
+     * @param usage Bit field specifying how the Allocation is used
+     * @return allocation Created Allocation containing cubemap data
+     */
+    @callflow(next={"*"})
+    allocationCubeCreateFromBitmap(Type type, AllocationMipmapControl mips,
+                                   vec<uint8_t> bitmap,
+                                   bitfield<AllocationUsageType> usage)
+                        generates (Allocation allocation);
+
+    /*
+     * Returns the handle to a raw buffer that is being managed by the screen
+     * compositor. This operation is only valid for Allocations with
+     * USAGE_IO_INPUT.
+     *
+     * @param allocation Allocation
+     * @return nativeWindow NativeWindow object associated with allocation
+     */
+    @callflow(next={"*"})
+    allocationGetNativeWindow(Allocation allocation)
+                   generates (NativeWindow nativeWindow);
+
+    /*
+     * TODO: more clarification needed
+     *
+     * Sets the NativeWindow of an Allocation. This operation is only valid
+     * for Allocations with USAGE_IO_INPUT.
+     *
+     * @param allocation Allocation to be modified
+     * @pram nativeWindow NativeWindow to associate with allocation
+     */
+    @callflow(next={"*"})
+    allocationSetNativeWindow(Allocation allocation, NativeWindow nativewindow);
+
+    /*
+     * Initialize BufferQueue with specified max number of buffers.
+     *
+     * @param alloc Allocation
+     * @param numBuffer Maximum number of buffers
+     */
+    @callflow(next={"*"})
+    allocationSetupBufferQueue(Allocation alloc, uint32_t numBuffer);
+
+    /*
+     * TODO: clearly define baseAlloc vs subAlloc
+     *
+     * Shares the BufferQueue with another Allocation. Both must be
+     * USAGE_IO_INPUT Allocations.
+     *
+     * @param baseAlloc Base Allocation
+     * @param subAlloc Allocation to use the same buffer queue as the Base
+     *                 Allocation
+     */
+    @callflow(next={"*"})
+    allocationShareBufferQueue(Allocation baseAlloc, Allocation subAlloc);
+
+    /*
+     * Copies from the Allocation into a Bitmap. The bitmap must match the
+     * dimensions of the Allocation.
+     *
+     * HIDL is always running in Passthrough mode for RenderScript, so the
+     * buffer is modified directly by the driver.
+     *
+     * @param allocation Allocation
+     * @param data Buffer to be copied into
+     * @param sizeBytes Size of the buffer pointed to by "data"
+     */
+    @callflow(next={"*"})
+    allocationCopyToBitmap(Allocation allocation, Ptr data, Size sizeBytes);
+
+    /*
+     * TODO: should we consolidate all [123]DWrite functions or [123]DRead
+     * functions into the same API call? Our current plan is to be very similar
+     * to the dispatch table API. How much should we deviate from the original
+     * API?
+     * TODO: better description on Vec3/Vec4 and padding.
+     *
+     * Copies data into a 1D region of this Allocation.
+     *
+     * When this HAL entry is executed, all Vec3 elements have been explicitly
+     * padded as Vec4 elements.
+     *
+     * The size of the region is: count * Element's size.
+     *
+     * @param allocation Allocation to be modified
+     * @param offset The offset of the first element to be copied
+     * @param lod Selected mipmap level of detail
+     * @param count Number of elements to be copied
+     * @param data Source data to be copied to Allocation
+     */
+    @callflow(next={"*"})
+    allocation1DWrite(Allocation allocation, uint32_t offset, uint32_t lod,
+                      uint32_t count, vec<uint8_t> data);
+
+    /*
+     * Copies a value into a single sub-Element of this Allocation.
+     *
+     * @param allocation Allocation to be updated
+     * @param x X position of the first element in the Allocation to be updated
+     * @param y Y position of the first element in the Allocation to be
+     *          updated; for a 1D Allocation, this value must be 0
+     * @param z Z position of the first element in the Allocation to be
+     *          updated; for a 1D or 2D Allocation, this value must be 0
+     * @param lod Selected mipmap level of detail
+     * @param data Data to be copied from
+     * @param compIdx Component number to identify which sub-Element is updated
+     */
+    @callflow(next={"*"})
+    allocationElementWrite(Allocation allocation, uint32_t x, uint32_t y,
+                           uint32_t z, uint32_t lod, vec<uint8_t> data,
+                           Size compIdx);
+
+    /*
+     * Copies from an array into a rectangular region in this Allocation.
+     *
+     * When this HAL entry is executed, all Vec3 elements have been explicitly
+     * padded as Vec4 elements.
+     *
+     * The size of the region is: w * h * Element's size.
+     *
+     * @param allocation Allocation to be modified
+     * @param xoff X offset of the region to update in this Allocation
+     * @param yoff Y offset of the region to update in this Allocation
+     * @param lod Selected mipmap level of detail
+     * @param face AllocationCubemapFace
+     * @param w Width of the region to update
+     * @param h Height of the region to update
+     * @param data Data to be placed into the Allocation
+     * @param stride For 1D Allocation, the stride must be the number of bytes
+     *               of this Allocation. For 2D and 3D Allocations, the stride
+     *               must be the stride in X dimension measuring in bytes.
+     */
+    @callflow(next={"*"})
+    allocation2DWrite(Allocation allocation, uint32_t xoff, uint32_t yoff,
+                      uint32_t lod, AllocationCubemapFace face, uint32_t w,
+                      uint32_t h, vec<uint8_t> data, Size stride);
+
+    /*
+     * Copies from an array into a 3D region in this Allocation.
+     *
+     * When this HAL entry is executed, all Vec3 elements have been explicitly
+     * padded as Vec4 elements.
+     *
+     * The size of the region is: w * h * d * Element's size.
+     *
+     * @param allocation Allocation to be modified
+     * @param xoff X offset of the region to update in this Allocation
+     * @param yoff Y offset of the region to update in this Allocation
+     * @param zoff Z offset of the region to update in this Allocation
+     * @param lod Selected mipmap level of detail
+     * @param w Width of the region to update
+     * @param h Height of the region to update
+     * @param d Depth of the region to update
+     * @param data Data to be placed in the Allocation
+     * @param stride For 1D Allocation, the stride must be the number of bytes
+     *               of this Allocation. For 2D and 3D Allocations, the stride
+     *               must be the stride in X dimension measuring in bytes.
+     */
+    @callflow(next={"*"})
+    allocation3DWrite(Allocation allocation, uint32_t xoff, uint32_t yoff,
+                      uint32_t zoff, uint32_t lod, uint32_t w, uint32_t h,
+                      uint32_t d, vec<uint8_t> data, Size stride);
+
+    /*
+     * Generates a mipmap chain. This is only valid if the Type of the
+     * Allocation includes mipmaps.
+     *
+     * This function generates a complete set of mipmaps from the top level
+     * LOD.
+     *
+     * If the Allocation is also using other memory spaces, a call to
+     * allocationSyncAll(context, allocation, usage) is required.
+     *
+     * @param allocation Allocation which has its top LOD read and lower LOD
+     *                   written to
+     */
+    @callflow(next={"*"})
+    allocationGenerateMipmaps(Allocation allocation);
+
+    /*
+     * Copies all of an Allocation's data into an array.
+     *
+     * All Vec3 elements of an Allocation are padded to be Vec4, so the data
+     * returned by this function automatically includes padding.
+     *
+     * HIDL is always running in Passthrough mode for RenderScript, so the
+     * buffer is modified directly by the driver.
+     *
+     * @param allocation Allocation to be read
+     * @param data Buffer to be copied into
+     * @param sizeBytes Size of the buffer pointed to by "data"
+     */
+    @callflow(next={"*"})
+    allocationRead(Allocation allocation, Ptr data, Size sizeBytes);
+
+    /*
+     * Copies a 1D region of this Allocation into an array.
+     *
+     * All Vec3 elements of an Allocation are padded to be Vec4, so the data
+     * returned by this function automatically includes padding.
+     *
+     * The size of the region is: count * Element's size.
+     *
+     * HIDL is always running in Passthrough mode for RenderScript, so the
+     * buffer is modified directly by the driver.
+     *
+     * @param allocation Allocation to be read
+     * @param xoff X offset of the first element to be copied
+     * @param lod Mipmap level of detail
+     * @param count The number of elements to be copied
+     * @param data Buffer to be copied into
+     * @param sizeBytes Size of the buffer pointed to by "data"
+     */
+    @callflow(next={"*"})
+    allocation1DRead(Allocation allocation, uint32_t xoff, uint32_t lod,
+                     uint32_t count, Ptr data, Size sizeBytes);
+
+    /*
+     * Returns the value of a single sub-Element of this Allocation.
+     *
+     * HIDL is always running in Passthrough mode for RenderScript, so the
+     * buffer is modified directly by the driver.
+     *
+     * @param allocation Allocation to be read
+     * @param x X position of the first element in the Allocation to be read
+     * @param y Y position of the first element in the Allocation to be read
+     * @param z Z position of the first element in the Allocation to be read
+     * @param lod Mipmap level of detail
+     * @param data Buffer to be copied into
+     * @param sizeBytes Size of the buffer pointed to by "data"
+     * @param compIdx Component number to identify which sub-Element is updated
+     */
+    @callflow(next={"*"})
+    allocationElementRead(Allocation allocation, uint32_t x, uint32_t y,
+                          uint32_t z, uint32_t lod, Ptr data, Size sizeBytes,
+                          Size compIdx);
+
+    /*
+     * Copies from a rectangular region in this Allocation to an array.
+     *
+     * All Vec3 elements of an Allocation are padded to be Vec4, so the data
+     * returned by this function automatically includes padding.
+     *
+     * The size of the region is: w * h * Element's size.
+     *
+     * HIDL is always running in Passthrough mode for RenderScript, so the
+     * buffer is modified directly by the driver.
+     *
+     * @param allocation Allocation to be read
+     * @param xoff X offset of the region to copy in this array
+     * @param yoff Y offset of the region to copy in this array
+     * @param lod Mipmap level of detail
+     * @param face AllocationCubemapFace
+     * @param w Width of the region to copy
+     * @param h Height of the region to copy
+     * @param data Buffer to be copied into
+     * @param sizeBytes Size of the buffer pointed to by "data"
+     * @param stride For 1D Allocation, the stride must be the number of bytes
+     *               of this Allocation. For 2D and 3D Allocations, the stride
+     *               must be the stride in X dimension measuring in bytes.
+     */
+    @callflow(next={"*"})
+    allocation2DRead(Allocation allocation, uint32_t xoff, uint32_t yoff,
+                     uint32_t lod, AllocationCubemapFace face, uint32_t w,
+                     uint32_t h, Ptr data, Size sizeBytes, Size stride);
+
+    /*
+     * Copies from a rectangular cuboid region in this Allocation to an array.
+     *
+     * All Vec3 elements of an Allocation are padded to be Vec4, so the data
+     * returned by this function automatically includes padding.
+     *
+     * The size of the region is: w * h * d * Element's size.
+     *
+     * HIDL is always running in Passthrough mode for RenderScript, so the
+     * buffer is modified directly by the driver.
+     *
+     * @param allocation Allocation to be read
+     * @param xoff X offset of the region to copy in this array
+     * @param yoff Y offset of the region to copy in this array
+     * @param zoff Z offset of the region to copy in this array
+     * @param lod Mipmap level of detail
+     * @param w Width of the region to copy
+     * @param h Height of the region to copy
+     * @param d Depth of the region to copy
+     * @param data Buffer to be copied into
+     * @param sizeBytes Size of the buffer pointed to by "data"
+     * @param stride For 1D Allocation, the stride must be the number of bytes
+     *               of this Allocation. For 2D and 3D Allocations, the stride
+     *               must be the stride in X dimension measuring in bytes.
+     */
+    @callflow(next={"*"})
+    allocation3DRead(Allocation allocation, uint32_t xoff, uint32_t yoff,
+                     uint32_t zoff, uint32_t lod, uint32_t w, uint32_t h,
+                     uint32_t d, Ptr data, Size sizeBytes, Size stride);
+
+    /*
+     * Propagates changes from one usage of the Allocation to the other usages
+     * of the Allocation.
+     *
+     * @param allocation First usage of the Allocation
+     * @param usageType Allocation usage type
+     */
+    @callflow(next={"*"})
+    allocationSyncAll(Allocation allocation, AllocationUsageType usageType);
+
+    /*
+     * TODO: describe the functionality of resize1D better
+     * TODO: original Java Doc description seems to contradict itself ("with
+     * null contents and the region is otherwise undefined")
+     * TODO: should "new elements" be "new cells"?
+     * TODO: what does "objects are created" mean?
+     * TODO: what does "new dimension" mean? IS the type of the resized
+     * allocation different than the type before resizing?
+     *
+     * Resizes a 1D allocation. The contents of the allocation are preserved.
+     * If new elements are allocated, objects are created with null contents
+     * and the new region is otherwise undefined.
+     *
+     * If the new region is smaller, the references of any object outside the
+     * new region must be released.
+     *
+     * A new type must be created with the new dimension.
+     *
+     * @param allocation Allocation to be resized
+     * @param dimX New size along the x dimension of the Allocation
+     */
+    @callflow(next={"*"})
+    allocationResize1D(Allocation allocation, uint32_t dimX);
+
+    /*
+     * TODO: There are allocationCopy2DRange and 3DRange, but no 1DRange. Should
+     * the interface be cleaned up more?
+     *
+     * Copies a rectangular region from an Allocation into a rectangular region
+     * in this Allocation.
+     *
+     * @param dstAlloc Allocation to be updated
+     * @param dstXoff X offset of the region to update
+     * @param dstYoff Y offset of the region to update
+     * @param dstMip Selected mipmap level of the Allocation to update
+     * @param dstFace Destination AllocationCubemapFace
+     * @param width Width of the region to update
+     * @param height Height of the region to update
+     * @param srcAlloc Source Allocation, to be read
+     * @param srcXoff X offset of the region in the source Allocation
+     * @param srcYoff Y offset of the region in the source Allocation
+     * @param srcMip Selected mipmap level of the source Allocation
+     * @param srcFace Source AllocationCubemapFace
+     */
+    @callflow(next={"*"})
+    allocationCopy2DRange(Allocation dstAlloc, uint32_t dstXoff,
+                          uint32_t dstYoff, uint32_t dstMip,
+                          AllocationCubemapFace dstFace, uint32_t width,
+                          uint32_t height, Allocation srcAlloc,
+                          uint32_t srcXoff, uint32_t srcYoff, uint32_t srcMip,
+                          AllocationCubemapFace srcFace);
+
+    /*
+     * Copies a rectangular cuboid region into the allocation from another
+     * Allocation.
+     *
+     * @param dstAlloc Allocation to be updated
+     * @param dstXoff X offset of the region to update
+     * @param dstYoff Y offset of the region to update
+     * @param dstZoff Z offset of the region to update
+     * @param dstMip Selected mipmap level of the Allocation to update
+     * @param width Width of the region to update
+     * @param height Height of the region to update
+     * @param depth Depth of the region to update
+     * @param srcAlloc Source Allocation, to be read
+     * @param srcXoff Source X offset of the region in the source Allocation
+     * @param srcYoff Source Y offset of the region in the source Allocation
+     * @param srcZoff Source Z offset of the region in the souce Allocation
+     * @param srcMip Selected mipmap level of the Allocation to read
+     */
+    @callflow(next={"*"})
+    allocationCopy3DRange(Allocation dstAlloc, uint32_t dstXoff,
+                          uint32_t dstYoff, uint32_t dstZoff, uint32_t dstMip,
+                          uint32_t width, uint32_t height, uint32_t depth,
+                          Allocation srcAlloc, uint32_t srcXoff,
+                          uint32_t srcYoff, uint32_t srcZoff, uint32_t srcMip);
+
+    /*
+     * TODO: define buffer and output stream
+     *
+     * Sends a buffer to the output stream. The contents of the Allocation may
+     * be undefined after this operation. This operation is only valid if
+     * USAGE_IO_OUTPUT is set on the Allocation.
+     *
+     * @param allocation Allocation to be sent
+     */
+    @callflow(next={"*"})
+    allocationIoSend(Allocation allocation);
+
+    /*
+     * Receives the latest input into the Allocation. This operation is only
+     * valid if USAGE_IO_INPUT is set on the Allocation, otherwise an error
+     * must be reported and no operations may be executed.
+     *
+     * @param allocation Allocation to be updated
+     */
+    @callflow(next={"*"})
+    allocationIoReceive(Allocation allocation);
+
+    /*
+     * TODO: describe default values for lod, face, and z better.
+     * TODO: what cases can invalidate the pointer? Resize? It should be
+     * clarified that this method should always return a valid pointer, but the
+     * returned pointer might become invalid later.
+     *
+     * Retrieves the pointer to the actual data an Allocation contains as well
+     * as the data's stride.
+     *
+     * If Allocation lacks the corresponding dimension for lod, face, or z, an
+     * error message must be sent to the message queue and nullptr must be
+     * returned for dataPtr and 0 for stride. All missing values must be 0 or
+     * NONE in the corresponding enum.
+     *
+     * @param allocation Allocation
+     * @param lod Mipmap level of detail
+     * @param face AllocationCubemapFace
+     * @param z Z position
+     * @return pointer Pointer to the server-side data; if this points to an
+     *                 invalid location in memory (because the buffer was
+     *                 freed), this may result in undefined behavior
+     * @return stride For 1D Allocation, the stride must be the number of bytes
+     *                of this Allocation. For 2D and 3D Allocations, the stride
+     *                must be the stride in X dimension measuring in bytes.
+     */
+    @callflow(next={"*"})
+    allocationGetPointer(Allocation allocation, uint32_t lod,
+                         AllocationCubemapFace face, uint32_t z)
+              generates (Ptr dataPtr, Size stride);
+
+    /*
+     * Retrieves an Element's metadata from native code.
+     *
+     * @param element Element to be read
+     * @return elemData Element data
+     */
+    @callflow(next={"*"})
+    elementGetNativeMetadata(Element element)
+                  generates (vec<uint32_t> elemData);
+
+    /*
+     * TODO: define Sub-Element handles better.
+     *
+     * Retrieves an Element's sub Elements, specifically their identifiers,
+     * names, and sizes.
+     *
+     * @param element Element to be read
+     * @param numSubElem Number of sub-Elements
+     * @return ids Sub-Element handles
+     * @return names Sub-Element Names
+     * @return arraySizes Sizes of sub-Element arrays
+     */
+    @callflow(next={"*"})
+    elementGetSubElements(Element element, Size numSubElem)
+               generates (vec<Element> ids, vec<string> names,
+                          vec<Size> arraySizes);
+
+    /*
+     * TODO: can normalization flag be removed?
+     *
+     * Creates an Element.
+     *
+     * @param dt Data type
+     * @param dk Data kind
+     * @param norm Flag for normalization
+     * @param size Vector length, with scalar = 1
+     * @return element Created Element
+     */
+    @callflow(next={"*"})
+    elementCreate(DataType dt, DataKind dk, bool norm, uint32_t size)
+       generates (Element element);
+
+    /*
+     * Creates a complex Element.
+     *
+     * @param einsPtr Container of input Elements
+     * @param namesPtr Container of input names
+     * @param arraySizesPtr Container of array sizes
+     * @return element Created Element
+     */
+    @callflow(next={"*"})
+    elementComplexCreate(vec<Element> einsPtr, vec<string> names,
+                         vec<Size> arraySizesPtr)
+              generates (Element element);
+
+    /*
+     * Retrives a Type's metadata from native code.
+     *
+     * @param type Type describing data layout
+     * @return metadata Type's native metadata
+     */
+    @callflow(next={"*"})
+    typeGetNativeMetadata(Type type) generates (vec<OpaqueHandle> metadata);
+
+    /*
+     * Creates a new Type.
+     *
+     * If Type is 1D, Y and Z must be 0. If Type is 2D, Z must be 0.
+     *
+     * @param element Element of the Type
+     * @param dimX X dimension
+     * @param dimY Y dimension
+     * @param dimZ Z dimension
+     * @param mipmaps Flag indicating whether Type has mipmaps
+     * @param faces Flag indicating whether Type has faces
+     * @param yuv Enumeration specifying which type of YUV format, if any, Type
+     *            uses
+     * @return type Created Type
+     */
+    @callflow(next={"*"})
+    typeCreate(Element element, uint32_t dimX, uint32_t dimY, uint32_t dimZ,
+               bool mipmaps, bool faces, YuvFormat yuv)
+    generates (Type type);
+
+    /*
+     * Destroys provided RenderScript context, including all objects created in
+     * this context.
+     */
+    @exit
+    contextDestroy();
+
+    /*
+     * TODO: provide overview of messaging model and figure out if this should
+     * be part of HAL or not.
+     * TODO: what is the "client" for purposes of this interface?
+     * TODO: consider using send/receive to be more similar to other calls
+     * TODO: define the purpose of size more
+     *
+     * Fills the provided buffer with message data. "size" should be at least
+     * as large as the message size. Returns the MessageType and size of the
+     * message are returned.
+     *
+     * @param data A pointer to a buffer to be filled with a message
+     * @param size Size in bytes of the buffer pointed to by "data"
+     * @return messageType Type of message sent to the client
+     * @return receiveLen Length of the message in bytes
+     */
+    @callflow(next={"*"})
+    contextGetMessage(Ptr data, Size size)
+           generates (MessageToClientType messageType, Size receiveLen);
+
+    /*
+     * TODO: define subID better.
+     *
+     * Gets the metadata of a message to ensure entire message can be properly
+     * received. Can be used to determine size of data to allocate when calling
+     * contextGetMessage.
+     *
+     * @return messageType Type of message sent to the client
+     * @return receiveLen Length of message
+     * @return subID Message sub identifier
+     */
+    @callflow(next={"*"})
+    contextPeekMessage()
+            generates (MessageToClientType messageType, Size receiveLen,
+                       uint32_t subID);
+
+    /*
+     * TODO: Define "previous commands" better
+     * TODO: Is the message identifier the same as subID?
+     *
+     * Places a message into the message queue to be sent back to the message
+     * handler once all previous commands have been executed. The message data
+     * is copied into the queue and can be discarded by the client after this
+     * call.
+     *
+     * @param id Message identifier
+     * @param data Message data
+     */
+    @callflow(next={"*"})
+    contextSendMessage(uint32_t id, vec<uint8_t> data);
+
+    /*
+     * TODO: Can this be done automatically as part of context creation? What
+     * happens if we perform message operations before doing this?
+     *
+     * Initializes the messaging thread, so that the front-end API can receive
+     * messages from the driver. This call also waits for the messaging FIFO to
+     * start up.
+     */
+    @callflow(next={"*"})
+    contextInitToClient();
+
+    /*
+     * TODO: Why doesn't this happen automatically as part of context
+     * destruction? What happens if the FIFO is not empty?
+     *
+     * Deinitializes a the messaging thread. Shuts down the FIFO.
+     */
+    @callflow(next={"*"})
+    contextDeinitToClient();
+
+    /*
+     * TODO: do we need to mark asynchronous operations in this interface
+     * definition?
+     *
+     * Waits for any pending asynchronous operations (such as copies to a RS
+     * allocation or RS script executions) to complete.
+     */
+    @callflow(next={"*"})
+    contextFinish();
+
+    /*
+     * Prints the currently available debugging information about the state of
+     * the RS context to the logcat.
+     */
+    @callflow(next={"*"})
+    contextLog();
+
+    /*
+     * TODO: full path? relative path? Investigate further.
+     *
+     * Sets the cache directory of the context.
+     *
+     * @param cacheDir Name of the application's cache directory
+     */
+    @callflow(next={"*"})
+    contextSetCacheDir(string cacheDir);
+
+    /*
+     * TODO: does this apply to the GPU as well?
+     *
+     * Changes the priority of the cpu worker threads for this context.
+     *
+     * @param priority Priority of the thread
+     */
+    @callflow(next={"*"})
+    contextSetPriority(ThreadPriorities priority);
+
+    /*
+     * TODO: does this need to be part of the HAL? What if the object already
+     * has a name?
+     *
+     * Assigns a name to a base object.
+     *
+     * @param obj Object to be named
+     * @param name Assigned name
+     */
+    @callflow(next={"*"})
+    assignName(ObjectBase obj, string name);
+
+    /*
+     * TODO: what if the object has no name?
+     *
+     * Returns the name of an object.
+     *
+     * @param obj Object to be read
+     * @return name Name of the object
+     */
+    @callflow(next={"*"})
+    getName(ObjectBase obj) generates (string name);
+
+    /*
+     * TODO: starting here we have a set of interfaces for use with
+     * ScriptGroups. At the very least we should indicate for each one that's
+     * what it's for. Should we include ScriptGroup in the interface names?
+     * TODO: sweep whole file and remove prefix "v" from all parameter names
+     * TODO: there are some places where we use Size for size, and others where
+     * we use int32_t. Is there a reason it's int32_t? In some cases, it
+     * requires a negative value.
+     *
+     * Creates a Closure which represents a function call to a ForEach Kernel
+     * combined with arguments and values for global variables.
+     *
+     * @param kernelID Kernel identifier
+     * @param returnValue Allocation used in output of Closure
+     * @param fieldIDS Collection of Script's Field identifiers
+     * @param values Collection of Script's data values
+     * @param sizes Collection of Script's data sizes
+     * @param depClosures Collection of Closures
+     * @param depFieldIDS Collection of Script's dependent Field identifiers
+     * @return closure Created Closure
+     */
+    @callflow(next={"*"})
+    closureCreate(ScriptKernelID kernelID, Allocation returnValue,
+                  vec<ScriptFieldID> fieldIDS, vec<int64_t> values,
+                  vec<int32_t> sizes, vec<Closure> depClosures,
+                  vec<ScriptFieldID> depFieldIDS)
+       generates (Closure closure);
+
+    /*
+     * Creates a Closure which represents a function call to a invocable
+     * function, combined with arguments and values for global variables.
+     *
+     * @param invokeID Invokable function identifier
+     * @param params Collection of Invoke script parameters
+     * @param fieldIDS Collection of Script Field identifiers
+     * @param values Collection of values
+     * @param sizes Collection of sizes
+     * @return closure Created Closure
+     */
+    @callflow(next={"*"})
+    invokeClosureCreate(ScriptInvokeID invokeID, vec<uint8_t> params,
+                        vec<ScriptFieldID> fieldIDS, vec<int64_t> values,
+                        vec<int32_t> sizes)
+             generates (Closure closure);
+
+    /*
+     * Sets the argument of a Closure at specified index and size to provided
+     * value.
+     *
+     * @param closure Closure to be modified
+     * @param index Index
+     * @param value Value
+     * @param size Size
+     */
+    @callflow(next={"*"})
+    closureSetArg(Closure closure, uint32_t index, Ptr value, int32_t size);
+
+    /*
+     * Sets a global variable in a Closure.
+     *
+     * @param closure Closure
+     * @param fieldID Global's Field identifier
+     * @param value Value
+     * @param size Size
+     */
+    @callflow(next={"*"})
+    closureSetGlobal(Closure closure, ScriptFieldID fieldID, int64_t value,
+                     int32_t size);
+
+    /*
+     * TODO: should slot be unsigned? (applies to other two ID interfaces, too)
+     *
+     * Creates a Script Kernel ID.
+     *
+     * @param script Script
+     * @param slot Slot
+     * @param sig Bitfield describing Kernel signature and operation
+     * @return scriptKernelID Script's Kernel identifier
+     */
+    @callflow(next={"*"})
+    scriptKernelIDCreate(Script script, int32_t slot,
+                         bitfield<MetadataSignatureBitval> sig)
+              generates (ScriptKernelID scriptKernelID);
+
+    /*
+     * Creates a Script Invoke ID.
+     *
+     * @param script Script
+     * @param slot Slot
+     * @return scriptInvokeID Invoke Script's identifier
+     */
+    @callflow(next={"*"})
+    scriptInvokeIDCreate(Script script, int32_t slot)
+              generates (ScriptInvokeID scriptInvokeID);
+
+    /*
+     * TODO: describe the return value better. What is it?
+     *
+     * Creates a Script Field ID.
+     *
+     * @param script Script
+     * @param slot Slot
+     * @return scriptFieldID Script's Field identifier
+     */
+    @callflow(next={"*"})
+    scriptFieldIDCreate(Script script, int32_t slot)
+             generates (ScriptFieldID scriptFieldID);
+
+    /*
+     * TODO: add more description
+     *
+     * Creates a Script Group.
+     *
+     * @param kernels Collection of Scripts' Kernel identifiers
+     * @param srcK Source Kernel identifiers
+     * @param dstK Destination Kernel identifiers
+     * @param dstF Destination Script Field identifiers
+     * @param types Collection of Types describing data layout
+     * @return scriptGroup Created Script Group
+     */
+    @callflow(next={"*"})
+    scriptGroupCreate(vec<ScriptKernelID> kernels, vec<ScriptKernelID> srcK,
+                      vec<ScriptKernelID> dstK, vec<ScriptFieldID> dstF,
+                      vec<Type> types)
+           generates (ScriptGroup scriptGroup);
+
+    /*
+     * Creates a Script Group.
+     *
+     * @param name Name
+     * @param cacheDir Cache directory
+     * @param closures Collection of Closures
+     * @return scriptGroup2 Created Script Group
+     */
+    @callflow(next={"*"})
+    scriptGroup2Create(string name, string cacheDir, vec<Closure> closures)
+            generates (ScriptGroup2 scriptGroup2);
+
+    /*
+     * TODO: if SetInput/Output corresponds to the Java API setInput() and
+     * setOutput(), which are documented as deprecated in API 23, do we need to
+     * support them? Or can we fallback to the CPU when they're used? Or can't
+     * we tell whether they're used early enough to do fallback?
+     *
+     * Sets an output of the ScriptGroup. This specifies an Allocation to be
+     * used for the kernels that require an output Allocation visible after the
+     * ScriptGroup is executed.
+     *
+     * @param sg Script Group
+     * @param kid Script's Kernel identifier to be changed
+     * @param alloc Allocation to be filled by output
+     */
+    @callflow(next={"*"})
+    scriptGroupSetOutput(ScriptGroup sg, ScriptKernelID kid, Allocation alloc);
+
+    /*
+     * Sets an input of the Script Group. This specifies an Allocation to be
+     * used for kernels that require an input Allocation provided from outside
+     * of the Script Group.
+     *
+     * @param sg Script Group
+     * @param kid Script's Kernel identifier to be changed
+     * @param alloc Allocation to be read as input
+     */
+    @callflow(next={"*"})
+    scriptGroupSetInput(ScriptGroup sg, ScriptKernelID kid, Allocation alloc);
+
+    /*
+     * Executes a Script Group.
+     *
+     * @param sg Script Group to be executed.
+     */
+    @callflow(next={"*"})
+    scriptGroupExecute( ScriptGroup sg);
+
+    /*
+     * Frees any native resources associated with this object. The primary use
+     * is to force immediate cleanup of resources when it is believed the GC
+     * may not respond quickly enough.
+     *
+     * @param handle Opaque handle to the server-side object to be destroyed
+     */
+    @callflow(next={"*"})
+    objDestroy(ObjectBase obj);
+
+    /*
+     * Creates a Sampler.
+     *
+     * @param magFilter Magnification value for the filter
+     * @param minFilter Minification value for the filter
+     * @param wrapS S wrapping mode for the sampler
+     * @param wrapT T wrapping mode for the sampler
+     * @param wrapR R wrapping mode for the sampler
+     * @param aniso Anisotropy setting for the sampler
+     * @return sampler Created Sampler
+     */
+    @callflow(next={"*"})
+    samplerCreate(SamplerValue magFilter, SamplerValue minFilter,
+                  SamplerValue wrapS, SamplerValue wrapT, SamplerValue wrapR,
+                  float aniso)
+       generates (Sampler sampler);
+
+    /*
+     * Binds an Allocation to a global pointer in the Script.
+     *
+     * @param script Script to be bound to
+     * @param allocation Allocation to be bound
+     * @param slot Slot of a global variable
+     */
+    @callflow(next={"*"})
+    scriptBindAllocation(Script script, Allocation allocation, uint32_t slot);
+
+    /*
+     * TODO: is this necessary?
+     *
+     * Sets the timezone of a Script.
+     *
+     * @param script Script to be altered
+     * @param timeZone Time Zone value as text
+     */
+    @callflow(next={"*"})
+    scriptSetTimeZone(Script script, string timeZone);
+
+    /*
+     * TODO: can scriptInvoke be combined with scriptInvokeV?
+     *
+     * Launches an invokable function.
+     *
+     * @param vs Script to be invoked
+     * @param slot Slot of invokable function
+     */
+    @callflow(next={"*"})
+    scriptInvoke(Script vs, uint32_t slot);
+
+    /*
+     * Invokes a Script with values.
+     *
+     * @param vs Script to be invoked
+     * @param slot Slot
+     * @param data Data buffer of packed arguments
+     */
+    @callflow(next={"*"})
+    scriptInvokeV(Script vs, uint32_t slot, vec<uint8_t> data);
+
+    /*
+     * TODO: add documentation for params
+     * TODO: Should we rename "ScriptCall" to "LaunchOptions"?
+     *
+     * Launches a ForEach kernel.
+     *
+     * @param vs Script
+     * @param slot Slot of ForEach Kernel
+     * @param vains Collection of input Allocations or null
+     * @param vaout Output Allocation or null
+     * @param params Collection of parameters
+     * @param sc Pointer to a ScriptCall, nullptr if unused
+     */
+    @callflow(next={"*"})
+    scriptForEach(Script vs, uint32_t slot, vec<Allocation> vains,
+                  Allocation vaout, vec<uint8_t> params, Ptr sc);
+
+    /*
+     * Launches a Reduction kernel.
+     *
+     * @param vs Script
+     * @param slot Slot of Reduction Kernel
+     * @param vains Collection of input Allocations
+     * @param vaout Output Allocation
+     * @param sc Pointer to a ScriptCall, nullptr if unused
+     */
+    @callflow(next={"*"})
+    scriptReduce(Script vs, uint32_t slot, vec<Allocation> vains,
+                 Allocation vaout, Ptr sc);
+
+    /*
+     * Sets a Script's integer variable to a value.
+     *
+     * @param vs RenderScript Script
+     * @param slot Slot number of variable to be updated
+     * @param value Value to be pushed to variable
+     */
+    @callflow(next={"*"})
+    scriptSetVarI(Script vs, uint32_t slot, int32_t value);
+
+    /*
+     * Sets a Script's Object variable to a value
+     *
+     * @param vs RenderScript Script
+     * @param slot Slot number of variable to be updated
+     * @param obj ObjectBase
+     */
+    @callflow(next={"*"})
+    scriptSetVarObj( Script vs,  uint32_t slot, ObjectBase obj);
+
+    /*
+     * Sets a Script's long variable to a value.
+     *
+     * @param vs RenderScript Script
+     * @param slot Slot number of variable to be updated
+     * @param value Value to be pushed to variable
+     */
+    @callflow(next={"*"})
+    scriptSetVarJ(Script vs, uint32_t slot, int64_t value);
+
+    /*
+     * Sets a Script's float variable to a value.
+     *
+     * @param vs RenderScript Script
+     * @param slot Slot number of variable to be updated
+     * @param value Value to be pushed to variable
+     */
+    @callflow(next={"*"})
+    scriptSetVarF(Script vs, uint32_t slot, float value);
+
+    /*
+     * Sets a Script's double variable to a value.
+     *
+     * @param vs RenderScript Script
+     * @param slot Slot number of variable to be updated
+     * @param value Value to be pushed to variable
+     */
+    @callflow(next={"*"})
+    scriptSetVarD(Script vs, uint32_t slot, double value);
+
+    /*
+     * Sets a Script's struct variable to a value.
+     *
+     * @param vs RenderScript Script
+     * @param slot Slot number of variable to be updated
+     * @param data Data to be pushed to variable
+     */
+    @callflow(next={"*"})
+    scriptSetVarV(Script vs, uint32_t slot, vec<uint8_t> data);
+
+    /*
+     * TODO: Why do we have typed setters but only untyped getter?
+     *
+     * Retrieves the value from a global variable in a script.
+     *
+     * @param vs RenderScript Script
+     * @param slot Slot number of variable to be read
+     * @param len Size of data to be filled
+     * @return data Data to be updated
+     */
+    @callflow(next={"*"})
+    scriptGetVarV(Script vs, uint32_t slot, Size len)
+       generates (vec<uint8_t> data);
+
+    /*
+     * TODO: Is this a value to be replicated for each member of the array? Or
+     * is there a representation for each separate member?
+     *
+     * Sets the value of a global array of structs, given the Element and
+     * dimension.
+     *
+     * @param vs RenderScript Script
+     * @param slot Slot number of variable to be updated
+     * @param data Data
+     * @param ve Element
+     * @param dims Collection of dimensions
+     */
+    @callflow(next={"*"})
+    scriptSetVarVE(Script vs, uint32_t slot, vec<uint8_t> data, Element ve,
+                   vec<uint32_t> dims);
+
+    /*
+     * TODO: is cacheDir redundant with createCache() function? Can we remove
+     * it?
+     * TODO: define resName more clearly
+     *
+     * Creates a RenderScript C99 kernel script.
+     *
+     * @param resName Resource name of the bitcode
+     * @param cacheDir Cache directory name
+     * @param text The kernel's bitcode as a uint8_t vector
+     * @return script Created Script
+     */
+    @callflow(next={"*"})
+    scriptCCreate(string resName, string cacheDir, vec<uint8_t> text)
+       generates (Script script);
+
+    /*
+     * Creates a RenderScript Intrinsic script.
+     *
+     * @param id Intrinsic Script identifier
+     * @param elem Element
+     * @return script Created Script
+     */
+    @callflow(next={"*"})
+    scriptIntrinsicCreate(ScriptIntrinsicID id, Element elem)
+               generates (Script script);
+
+};
diff --git a/renderscript/1.0/IDevice.hal b/renderscript/1.0/IDevice.hal
new file mode 100644
index 0000000..7b1b866
--- /dev/null
+++ b/renderscript/1.0/IDevice.hal
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2017 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.renderscript@1.0;
+
+import android.hardware.renderscript@1.0::types;
+import IContext;
+
+interface IDevice {
+
+    /*
+     * Creates a RenderScript context.
+     *
+     * @param sdkVersion Target RS API level
+     * @param ct Context type
+     * @param flags Optional flags for this context
+     * @return context Created context
+     */
+    @entry
+    @callflow(next={"*"})
+    contextCreate(uint32_t sdkVersion, ContextType ct,
+                  bitfield<ContextFlags> flags)
+       generates (IContext context);
+
+};
diff --git a/renderscript/1.0/default/Android.bp b/renderscript/1.0/default/Android.bp
new file mode 100644
index 0000000..348f6af
--- /dev/null
+++ b/renderscript/1.0/default/Android.bp
@@ -0,0 +1,22 @@
+cc_library_shared {
+    name: "android.hardware.renderscript@1.0-impl",
+    relative_install_path: "hw",
+    proprietary: true,
+    srcs: [
+        "Context.cpp",
+        "Device.cpp",
+    ],
+    include_dirs: [
+        "frameworks/rs",
+    ],
+    shared_libs: [
+        "libdl",
+        "liblog",
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.renderscript@1.0",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/renderscript/1.0/default/Context.cpp b/renderscript/1.0/default/Context.cpp
new file mode 100644
index 0000000..4e0964e
--- /dev/null
+++ b/renderscript/1.0/default/Context.cpp
@@ -0,0 +1,757 @@
+#define LOG_TAG "android.hardware.renderscript@1.0-impl"
+
+#include "Context.h"
+#include "Device.h"
+
+namespace android {
+namespace hardware {
+namespace renderscript {
+namespace V1_0 {
+namespace implementation {
+
+
+Context::Context(uint32_t sdkVersion, ContextType ct, int32_t flags) {
+    RsDevice _dev = nullptr;
+    uint32_t _version = 0;
+    uint32_t _sdkVersion = sdkVersion;
+    RsContextType _ct = static_cast<RsContextType>(ct);
+    int32_t _flags = flags;
+    mContext = Device::getHal().ContextCreate(_dev, _version, _sdkVersion, _ct, _flags);
+}
+
+
+// Helper functions
+template<typename ReturnType>
+static ReturnType hidl_to_rs(OpaqueHandle src) {
+    return reinterpret_cast<ReturnType>(static_cast<uintptr_t>(src));
+}
+
+template<typename ReturnType, typename SourceType>
+static ReturnType hidl_to_rs(SourceType* src) {
+    return reinterpret_cast<ReturnType>(src);
+}
+
+template<typename RsType, typename HidlType, typename Operation>
+static std::vector<RsType> hidl_to_rs(const hidl_vec<HidlType>& src, Operation operation) {
+    std::vector<RsType> dst(src.size());
+    std::transform(src.begin(), src.end(), dst.begin(), operation);
+    return dst;
+}
+
+template<typename ReturnType, typename SourceType>
+static ReturnType rs_to_hidl(SourceType* src) {
+    return static_cast<ReturnType>(reinterpret_cast<uintptr_t>(src));
+}
+
+template<typename HidlType, typename RsType, typename Operation>
+static hidl_vec<HidlType> rs_to_hidl(const std::vector<RsType>& src, Operation operation) {
+    std::vector<HidlType> dst(src.size());
+    std::transform(src.begin(), src.end(), dst.begin(), operation);
+    return dst;
+}
+
+
+// Methods from ::android::hardware::renderscript::V1_0::IContext follow.
+
+Return<Allocation> Context::allocationAdapterCreate(Type type, Allocation baseAlloc) {
+    RsType _type = hidl_to_rs<RsType>(type);
+    RsAllocation _baseAlloc = hidl_to_rs<RsAllocation>(baseAlloc);
+    RsAllocation _subAlloc = Device::getHal().AllocationAdapterCreate(mContext, _type, _baseAlloc);
+    return rs_to_hidl<Allocation>(_subAlloc);
+}
+
+Return<void> Context::allocationAdapterOffset(Allocation alloc, const hidl_vec<uint32_t>& offsets) {
+    RsAllocation _alloc = hidl_to_rs<RsAllocation>(alloc);
+    const hidl_vec<uint32_t>& _offsets = offsets;
+    Device::getHal().AllocationAdapterOffset(mContext, _alloc, _offsets.data(), _offsets.size());
+    return Void();
+}
+
+Return<Type> Context::allocationGetType(Allocation allocation) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    const void* _type = Device::getHal().AllocationGetType(mContext, _allocation);
+    return rs_to_hidl<Type>(_type);
+}
+
+Return<Allocation> Context::allocationCreateTyped(Type type, AllocationMipmapControl amips, int32_t usage, Ptr ptr) {
+    RsType _type = hidl_to_rs<RsType>(type);
+    RsAllocationMipmapControl _amips = static_cast<RsAllocationMipmapControl>(amips);
+    uint32_t _usage = usage;
+    uintptr_t _ptr = hidl_to_rs<uintptr_t>(ptr);
+    RsAllocation _allocation = Device::getHal().AllocationCreateTyped(mContext, _type, _amips, _usage, _ptr);
+    return rs_to_hidl<Allocation>(_allocation);
+}
+
+Return<Allocation> Context::allocationCreateFromBitmap(Type type, AllocationMipmapControl amips, const hidl_vec<uint8_t>& bitmap, int32_t usage) {
+    RsType _type = hidl_to_rs<RsType>(type);
+    RsAllocationMipmapControl _amips = static_cast<RsAllocationMipmapControl>(amips);
+    const hidl_vec<uint8_t>& _bitmap = bitmap;
+    uint32_t _usage = usage;
+    RsAllocation _allocation = Device::getHal().AllocationCreateFromBitmap(mContext, _type, _amips, _bitmap.data(), _bitmap.size(), _usage);
+    return rs_to_hidl<Allocation>(_allocation);
+}
+
+Return<Allocation> Context::allocationCubeCreateFromBitmap(Type type, AllocationMipmapControl amips, const hidl_vec<uint8_t>& bitmap, int32_t usage) {
+    RsType _type = hidl_to_rs<RsType>(type);
+    RsAllocationMipmapControl _amips = static_cast<RsAllocationMipmapControl>(amips);
+    const hidl_vec<uint8_t>& _bitmap = bitmap;
+    uint32_t _usage = usage;
+    RsAllocation _allocation = Device::getHal().AllocationCubeCreateFromBitmap(mContext, _type, _amips, _bitmap.data(), _bitmap.size(), _usage);
+    return rs_to_hidl<Allocation>(_allocation);
+}
+
+Return<NativeWindow> Context::allocationGetNativeWindow(Allocation allocation) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    RsNativeWindow _nativeWindow = Device::getHal().AllocationGetSurface(mContext, _allocation);
+    return rs_to_hidl<NativeWindow>(_nativeWindow);
+}
+
+Return<void> Context::allocationSetNativeWindow(Allocation allocation, NativeWindow nativewindow) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    RsNativeWindow _nativewindow = hidl_to_rs<RsNativeWindow>(nativewindow);
+    Device::getHal().AllocationSetSurface(mContext, _allocation, _nativewindow);
+    return Void();
+}
+
+Return<void> Context::allocationSetupBufferQueue(Allocation alloc, uint32_t numBuffer) {
+    RsAllocation _alloc = hidl_to_rs<RsAllocation>(alloc);
+    uint32_t _numBuffer = numBuffer;
+    Device::getHal().AllocationSetupBufferQueue(mContext, _alloc, _numBuffer);
+    return Void();
+}
+
+Return<void> Context::allocationShareBufferQueue(Allocation baseAlloc, Allocation subAlloc) {
+    RsAllocation _baseAlloc = hidl_to_rs<RsAllocation>(baseAlloc);
+    RsAllocation _subAlloc = hidl_to_rs<RsAllocation>(subAlloc);
+    Device::getHal().AllocationShareBufferQueue(mContext, _baseAlloc, _subAlloc);
+    return Void();
+}
+
+Return<void> Context::allocationCopyToBitmap(Allocation allocation, Ptr data, Size sizeBytes) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    void* _data = hidl_to_rs<void*>(data);
+    size_t _sizeBytes = static_cast<size_t>(sizeBytes);
+    Device::getHal().AllocationCopyToBitmap(mContext, _allocation, _data, _sizeBytes);
+    return Void();
+}
+
+Return<void> Context::allocation1DWrite(Allocation allocation, uint32_t offset, uint32_t lod, uint32_t count, const hidl_vec<uint8_t>& data) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _offset = offset;
+    uint32_t _lod = lod;
+    uint32_t _count = count;
+    const void* _dataPtr = hidl_to_rs<const void*>(data.data());
+    size_t _sizeBytes = data.size();
+    Device::getHal().Allocation1DData(mContext, _allocation, _offset, _lod, _count, _dataPtr, _sizeBytes);
+    return Void();
+}
+
+Return<void> Context::allocationElementWrite(Allocation allocation, uint32_t x, uint32_t y, uint32_t z, uint32_t lod, const hidl_vec<uint8_t>& data, Size compIdx) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _x = x;
+    uint32_t _y = y;
+    uint32_t _z = z;
+    uint32_t _lod = lod;
+    const void* _dataPtr = hidl_to_rs<const void*>(data.data());
+    size_t _sizeBytes = data.size();
+    size_t _compIdx = static_cast<size_t>(compIdx);
+    Device::getHal().AllocationElementData(mContext, _allocation, _x, _y, _z, _lod, _dataPtr, _sizeBytes, _compIdx);
+    return Void();
+}
+
+Return<void> Context::allocation2DWrite(Allocation allocation, uint32_t xoff, uint32_t yoff, uint32_t lod, AllocationCubemapFace face, uint32_t w, uint32_t h, const hidl_vec<uint8_t>& data, Size stride) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _xoff = xoff;
+    uint32_t _yoff = yoff;
+    uint32_t _lod = lod;
+    RsAllocationCubemapFace _face = static_cast<RsAllocationCubemapFace>(face);
+    uint32_t _w = w;
+    uint32_t _h = h;
+    const void* _dataPtr = hidl_to_rs<const void*>(data.data());
+    size_t _sizeBytes = data.size();
+    size_t _stride = static_cast<size_t>(stride);
+    Device::getHal().Allocation2DData(mContext, _allocation, _xoff, _yoff, _lod, _face, _w, _h, _dataPtr, _sizeBytes, _stride);
+    return Void();
+}
+
+Return<void> Context::allocation3DWrite(Allocation allocation, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, uint32_t w, uint32_t h, uint32_t d, const hidl_vec<uint8_t>& data, Size stride) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _xoff = xoff;
+    uint32_t _yoff = yoff;
+    uint32_t _zoff = zoff;
+    uint32_t _lod = lod;
+    uint32_t _w = w;
+    uint32_t _h = h;
+    uint32_t _d = d;
+    const void* _dataPtr = hidl_to_rs<const void*>(data.data());
+    size_t _sizeBytes = data.size();
+    size_t _stride = static_cast<size_t>(stride);
+    Device::getHal().Allocation3DData(mContext, _allocation, _xoff, _yoff, _zoff, _lod, _w, _h, _d, _dataPtr, _sizeBytes, _stride);
+    return Void();
+}
+
+Return<void> Context::allocationGenerateMipmaps(Allocation allocation) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    Device::getHal().AllocationGenerateMipmaps(mContext, _allocation);
+    return Void();
+}
+
+Return<void> Context::allocationRead(Allocation allocation, Ptr data, Size sizeBytes) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    void* _data = hidl_to_rs<void*>(data);
+    size_t _sizeBytes = static_cast<size_t>(sizeBytes);
+    Device::getHal().AllocationRead(mContext, _allocation, _data, _sizeBytes);
+    return Void();
+}
+
+Return<void> Context::allocation1DRead(Allocation allocation, uint32_t xoff, uint32_t lod, uint32_t count, Ptr data, Size sizeBytes) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _xoff = xoff;
+    uint32_t _lod = lod;
+    uint32_t _count = count;
+    void* _data = hidl_to_rs<void*>(data);
+    size_t _sizeBytes = static_cast<size_t>(sizeBytes);
+    Device::getHal().Allocation1DRead(mContext, _allocation, _xoff, _lod, _count, _data, _sizeBytes);
+    return Void();
+}
+
+Return<void> Context::allocationElementRead(Allocation allocation, uint32_t x, uint32_t y, uint32_t z, uint32_t lod, Ptr data, Size sizeBytes, Size compIdx) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _x = x;
+    uint32_t _y = y;
+    uint32_t _z = z;
+    uint32_t _lod = lod;
+    void* _data = hidl_to_rs<void*>(data);
+    size_t _sizeBytes = static_cast<size_t>(sizeBytes);
+    size_t _compIdx = static_cast<size_t>(compIdx);
+    Device::getHal().AllocationElementRead(mContext, _allocation, _x, _y, _z, _lod, _data, _sizeBytes, _compIdx);
+    return Void();
+}
+
+Return<void> Context::allocation2DRead(Allocation allocation, uint32_t xoff, uint32_t yoff, uint32_t lod, AllocationCubemapFace face, uint32_t w, uint32_t h, Ptr data, Size sizeBytes, Size stride) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _xoff = xoff;
+    uint32_t _yoff = yoff;
+    uint32_t _lod = lod;
+    RsAllocationCubemapFace _face = static_cast<RsAllocationCubemapFace>(face);
+    uint32_t _w = w;
+    uint32_t _h = h;
+    void* _data = hidl_to_rs<void*>(data);
+    size_t _sizeBytes = static_cast<size_t>(sizeBytes);
+    size_t _stride = static_cast<size_t>(stride);
+    Device::getHal().Allocation2DRead(mContext, _allocation, _xoff, _yoff, _lod, _face, _w, _h, _data, _sizeBytes, _stride);
+    return Void();
+}
+
+Return<void> Context::allocation3DRead(Allocation allocation, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, uint32_t w, uint32_t h, uint32_t d, Ptr data, Size sizeBytes, Size stride) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _xoff = xoff;
+    uint32_t _yoff = yoff;
+    uint32_t _zoff = zoff;
+    uint32_t _lod = lod;
+    uint32_t _w = w;
+    uint32_t _h = h;
+    uint32_t _d = d;
+    void* _dataPtr = hidl_to_rs<void*>(data);
+    size_t _sizeBytes = static_cast<size_t>(sizeBytes);
+    size_t _stride = static_cast<size_t>(stride);
+    Device::getHal().Allocation3DRead(mContext, _allocation, _xoff, _yoff, _zoff, _lod, _w, _h, _d, _dataPtr, _sizeBytes, _stride);
+    return Void();
+}
+
+Return<void> Context::allocationSyncAll(Allocation allocation, AllocationUsageType usageType) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    RsAllocationUsageType _usageType = static_cast<RsAllocationUsageType>(usageType);
+    Device::getHal().AllocationSyncAll(mContext, _allocation, _usageType);
+    return Void();
+}
+
+Return<void> Context::allocationResize1D(Allocation allocation, uint32_t dimX) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _dimX = dimX;
+    Device::getHal().AllocationResize1D(mContext, _allocation, _dimX);
+    return Void();
+}
+
+Return<void> Context::allocationCopy2DRange(Allocation dstAlloc, uint32_t dstXoff, uint32_t dstYoff, uint32_t dstMip, AllocationCubemapFace dstFace, uint32_t width, uint32_t height, Allocation srcAlloc, uint32_t srcXoff, uint32_t srcYoff, uint32_t srcMip, AllocationCubemapFace srcFace) {
+    RsAllocation _dstAlloc = hidl_to_rs<RsAllocation>(dstAlloc);
+    uint32_t _dstXoff = dstXoff;
+    uint32_t _dstYoff = dstYoff;
+    uint32_t _dstMip = dstMip;
+    RsAllocationCubemapFace _dstFace = static_cast<RsAllocationCubemapFace>(dstFace);
+    uint32_t _width = width;
+    uint32_t _height = height;
+    RsAllocation _srcAlloc = hidl_to_rs<RsAllocation>(srcAlloc);
+    uint32_t _srcXoff = srcXoff;
+    uint32_t _srcYoff = srcYoff;
+    uint32_t _srcMip = srcMip;
+    RsAllocationCubemapFace _srcFace = static_cast<RsAllocationCubemapFace>(srcFace);
+    Device::getHal().AllocationCopy2DRange(mContext, _dstAlloc, _dstXoff, _dstYoff, _dstMip, _dstFace, _width, _height, _srcAlloc, _srcXoff, _srcYoff, _srcMip, _srcFace);
+    return Void();
+}
+
+Return<void> Context::allocationCopy3DRange(Allocation dstAlloc, uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, uint32_t dstMip, uint32_t width, uint32_t height, uint32_t depth, Allocation srcAlloc, uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, uint32_t srcMip) {
+    RsAllocation _dstAlloc = hidl_to_rs<RsAllocation>(dstAlloc);
+    uint32_t _dstXoff = dstXoff;
+    uint32_t _dstYoff = dstYoff;
+    uint32_t _dstZoff = dstZoff;
+    uint32_t _dstMip = dstMip;
+    uint32_t _width = width;
+    uint32_t _height = height;
+    uint32_t _depth = depth;
+    RsAllocation _srcAlloc = hidl_to_rs<RsAllocation>(srcAlloc);
+    uint32_t _srcXoff = srcXoff;
+    uint32_t _srcYoff = srcYoff;
+    uint32_t _srcZoff = srcZoff;
+    uint32_t _srcMip = srcMip;
+    Device::getHal().AllocationCopy3DRange(mContext, _dstAlloc, _dstXoff, _dstYoff, _dstZoff, _dstMip, _width, _height, _depth, _srcAlloc, _srcXoff, _srcYoff, _srcZoff, _srcMip);
+    return Void();
+}
+
+Return<void> Context::allocationIoSend(Allocation allocation) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    Device::getHal().AllocationIoSend(mContext, _allocation);
+    return Void();
+}
+
+Return<void> Context::allocationIoReceive(Allocation allocation) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    Device::getHal().AllocationIoReceive(mContext, _allocation);
+    return Void();
+}
+
+Return<void> Context::allocationGetPointer(Allocation allocation, uint32_t lod, AllocationCubemapFace face, uint32_t z, allocationGetPointer_cb _hidl_cb) {
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _lod = lod;
+    RsAllocationCubemapFace _face = static_cast<RsAllocationCubemapFace>(face);
+    uint32_t _z = z;
+    uint32_t _array = 0;
+    size_t _stride = 0;
+    void* _dataPtr = Device::getHal().AllocationGetPointer(mContext, _allocation, _lod, _face, _z, _array, &_stride, sizeof(size_t));
+    Ptr dataPtr = reinterpret_cast<Ptr>(_dataPtr);
+    Size stride = static_cast<Size>(_stride);
+    _hidl_cb(dataPtr, stride);
+    return Void();
+}
+
+Return<void> Context::elementGetNativeMetadata(Element element, elementGetNativeMetadata_cb _hidl_cb) {
+    RsElement _element = hidl_to_rs<RsElement>(element);
+    std::vector<uint32_t> _elemData(5);
+    Device::getHal().ElementGetNativeData(mContext, _element, _elemData.data(), _elemData.size());
+    hidl_vec<uint32_t> elemData = _elemData;
+    _hidl_cb(elemData);
+    return Void();
+}
+
+Return<void> Context::elementGetSubElements(Element element, Size numSubElem, elementGetSubElements_cb _hidl_cb) {
+    RsElement _element = hidl_to_rs<RsElement>(element);
+    uint32_t _numSubElem = static_cast<uint32_t>(numSubElem);
+    std::vector<uintptr_t> _ids(_numSubElem);
+    std::vector<const char*> _names(_numSubElem);
+    std::vector<size_t> _arraySizes(_numSubElem);
+    Device::getHal().ElementGetSubElements(mContext, _element, _ids.data(), _names.data(), _arraySizes.data(), _numSubElem);
+    hidl_vec<Element>     ids        = rs_to_hidl<Element>(_ids,       [](uintptr_t val) { return static_cast<Element>(val); });
+    hidl_vec<hidl_string> names      = rs_to_hidl<hidl_string>(_names, [](const char* val) { return val; });
+    hidl_vec<Size>        arraySizes = rs_to_hidl<Size>(_arraySizes,   [](size_t val) { return static_cast<Size>(val); });
+    _hidl_cb(ids, names, arraySizes);
+    return Void();
+}
+
+Return<Element> Context::elementCreate(DataType dt, DataKind dk, bool norm, uint32_t size) {
+    RsDataType _dt = static_cast<RsDataType>(dt);
+    RsDataKind _dk = static_cast<RsDataKind>(dk);
+    bool _norm = norm;
+    uint32_t _size = size;
+    RsElement _element = Device::getHal().ElementCreate(mContext, _dt, _dk, _norm, _size);
+    return rs_to_hidl<Element>(_element);
+}
+
+Return<Element> Context::elementComplexCreate(const hidl_vec<Element>& eins, const hidl_vec<hidl_string>& names, const hidl_vec<Size>& arraySizes) {
+    std::vector<RsElement>   _eins           = hidl_to_rs<RsElement>(eins,      [](Element val) { return hidl_to_rs<RsElement>(val); });
+    std::vector<const char*> _namesPtr       = hidl_to_rs<const char*>(names,   [](const hidl_string& val) { return val.c_str(); });
+    std::vector<size_t>      _nameLengthsPtr = hidl_to_rs<size_t>(names,        [](const hidl_string& val) { return val.size(); });
+    std::vector<uint32_t>    _arraySizes     = hidl_to_rs<uint32_t>(arraySizes, [](Size val) { return static_cast<uint32_t>(val); });
+    RsElement _element = Device::getHal().ElementCreate2(mContext, _eins.data(), _eins.size(), _namesPtr.data(), _namesPtr.size(), _nameLengthsPtr.data(), _arraySizes.data(), _arraySizes.size());
+    return rs_to_hidl<Element>(_element);
+}
+
+Return<void> Context::typeGetNativeMetadata(Type type, typeGetNativeMetadata_cb _hidl_cb) {
+    RsType _type = hidl_to_rs<RsType>(type);
+    std::vector<uintptr_t> _metadata(6);
+    Device::getHal().TypeGetNativeData(mContext, _type, _metadata.data(), _metadata.size());
+    hidl_vec<OpaqueHandle> metadata = rs_to_hidl<OpaqueHandle>(_metadata, [](uintptr_t val) { return static_cast<OpaqueHandle>(val); });
+    _hidl_cb(metadata);
+    return Void();
+}
+
+Return<Type> Context::typeCreate(Element element, uint32_t dimX, uint32_t dimY, uint32_t dimZ, bool mipmaps, bool faces, YuvFormat yuv) {
+    RsElement _element = hidl_to_rs<RsElement>(element);
+    uint32_t _dimX = dimX;
+    uint32_t _dimY = dimY;
+    uint32_t _dimZ = dimZ;
+    bool _mipmaps = mipmaps;
+    bool _faces = faces;
+    RsYuvFormat _yuv = static_cast<RsYuvFormat>(yuv);
+    RsType _type = Device::getHal().TypeCreate(mContext, _element, _dimX, _dimY, _dimZ, _mipmaps, _faces, _yuv);
+    return rs_to_hidl<Type>(_type);
+}
+
+Return<void> Context::contextDestroy() {
+    Device::getHal().ContextDestroy(mContext);
+    mContext = nullptr;
+    return Void();
+}
+
+Return<void> Context::contextGetMessage(Ptr data, Size size, contextGetMessage_cb _hidl_cb) {
+    void* _data = hidl_to_rs<void*>(data);
+    size_t _size = static_cast<size_t>(size);
+    size_t _receiveLen = 0;
+    uint32_t _subID = 0;
+    RsMessageToClientType _messageType = Device::getHal().ContextGetMessage(mContext, _data, _size, &_receiveLen, sizeof(size_t), &_subID, sizeof(uint32_t));
+    MessageToClientType messageType = static_cast<MessageToClientType>(_messageType);
+    Size receiveLen = static_cast<Size>(_receiveLen);
+    _hidl_cb(messageType, receiveLen);
+    return Void();
+}
+
+Return<void> Context::contextPeekMessage(contextPeekMessage_cb _hidl_cb) {
+    size_t _receiveLen = 0;
+    uint32_t _subID = 0;
+    RsMessageToClientType _messageType = Device::getHal().ContextPeekMessage(mContext, &_receiveLen, sizeof(size_t), &_subID, sizeof(uint32_t));
+    MessageToClientType messageType = static_cast<MessageToClientType>(_messageType);
+    Size receiveLen = static_cast<Size>(_receiveLen);
+    uint32_t subID = _subID;
+    _hidl_cb(messageType, receiveLen, subID);
+    return Void();
+}
+
+Return<void> Context::contextSendMessage(uint32_t id, const hidl_vec<uint8_t>& data) {
+    uint32_t _id = id;
+    const uint8_t* _dataPtr = data.data();
+    size_t _dataSize = data.size();
+    Device::getHal().ContextSendMessage(mContext, _id, _dataPtr, _dataSize);
+    return Void();
+}
+
+Return<void> Context::contextInitToClient() {
+    Device::getHal().ContextInitToClient(mContext);
+    return Void();
+}
+
+Return<void> Context::contextDeinitToClient() {
+    Device::getHal().ContextDeinitToClient(mContext);
+    return Void();
+}
+
+Return<void> Context::contextFinish() {
+    Device::getHal().ContextFinish(mContext);
+    return Void();
+}
+
+Return<void> Context::contextLog() {
+    uint32_t _bits = 0;
+    Device::getHal().ContextDump(mContext, _bits);
+    return Void();
+}
+
+Return<void> Context::contextSetPriority(ThreadPriorities priority) {
+    RsThreadPriorities _priority = static_cast<RsThreadPriorities>(priority);
+    Device::getHal().ContextSetPriority(mContext, _priority);
+    return Void();
+}
+
+Return<void> Context::contextSetCacheDir(const hidl_string& cacheDir) {
+    Device::getHal().ContextSetCacheDir(mContext, cacheDir.c_str(), cacheDir.size());
+    return Void();
+}
+
+Return<void> Context::assignName(ObjectBase obj, const hidl_string& name) {
+    RsObjectBase _obj = hidl_to_rs<RsObjectBase>(obj);
+    const hidl_string& _name = name;
+    Device::getHal().AssignName(mContext, _obj, _name.c_str(), _name.size());
+    return Void();
+}
+
+Return<void> Context::getName(ObjectBase obj, getName_cb _hidl_cb) {
+    void* _obj = hidl_to_rs<void*>(obj);
+    const char* _name = nullptr;
+    Device::getHal().GetName(mContext, _obj, &_name);
+    hidl_string name = _name;
+    _hidl_cb(name);
+    return Void();
+}
+
+Return<Closure> Context::closureCreate(ScriptKernelID kernelID, Allocation returnValue, const hidl_vec<ScriptFieldID>& fieldIDS, const hidl_vec<int64_t>& values, const hidl_vec<int32_t>& sizes, const hidl_vec<Closure>& depClosures, const hidl_vec<ScriptFieldID>& depFieldIDS) {
+    RsScriptKernelID _kernelID = hidl_to_rs<RsScriptKernelID>(kernelID);
+    RsAllocation _returnValue = hidl_to_rs<RsAllocation>(returnValue);
+    std::vector<RsScriptFieldID> _fieldIDS = hidl_to_rs<RsScriptFieldID>(fieldIDS, [](ScriptFieldID val) { return hidl_to_rs<RsScriptFieldID>(val); });
+    int64_t* _valuesPtr = const_cast<int64_t*>(values.data());
+    size_t _valuesLength = values.size();
+    std::vector<int>             _sizes       = hidl_to_rs<int>(sizes,                   [](int32_t val) { return static_cast<int>(val); });
+    std::vector<RsClosure>       _depClosures = hidl_to_rs<RsClosure>(depClosures,       [](Closure val) { return hidl_to_rs<RsClosure>(val); });
+    std::vector<RsScriptFieldID> _depFieldIDS = hidl_to_rs<RsScriptFieldID>(depFieldIDS, [](ScriptFieldID val) { return hidl_to_rs<RsScriptFieldID>(val); });
+    RsClosure _closure = Device::getHal().ClosureCreate(mContext, _kernelID, _returnValue, _fieldIDS.data(), _fieldIDS.size(), _valuesPtr, _valuesLength, _sizes.data(), _sizes.size(), _depClosures.data(), _depClosures.size(), _depFieldIDS.data(), _depFieldIDS.size());
+    return rs_to_hidl<Closure>(_closure);
+}
+
+Return<Closure> Context::invokeClosureCreate(ScriptInvokeID invokeID, const hidl_vec<uint8_t>& params, const hidl_vec<ScriptFieldID>& fieldIDS, const hidl_vec<int64_t>& values, const hidl_vec<int32_t>& sizes) {
+    RsScriptInvokeID _invokeID = hidl_to_rs<RsScriptInvokeID>(invokeID);
+    const void* _paramsPtr = params.data();
+    size_t _paramsSize = params.size();
+    std::vector<RsScriptFieldID> _fieldIDS = hidl_to_rs<RsScriptFieldID>(fieldIDS, [](ScriptFieldID val) { return hidl_to_rs<RsScriptFieldID>(val); });
+    const int64_t* _valuesPtr = values.data();
+    size_t _valuesLength = values.size();
+    std::vector<int> _sizes = hidl_to_rs<int>(sizes, [](int32_t val) { return static_cast<int>(val); });
+    RsClosure _closure = Device::getHal().InvokeClosureCreate(mContext, _invokeID, _paramsPtr, _paramsSize, _fieldIDS.data(), _fieldIDS.size(), _valuesPtr, _valuesLength, _sizes.data(), _sizes.size());
+    return rs_to_hidl<Closure>(_closure);
+}
+
+Return<void> Context::closureSetArg(Closure closure, uint32_t index, Ptr value, int32_t size) {
+    RsClosure _closure = hidl_to_rs<RsClosure>(closure);
+    uint32_t _index = index;
+    uintptr_t _value = hidl_to_rs<uintptr_t>(value);
+    int _size = static_cast<int>(size);
+    Device::getHal().ClosureSetArg(mContext, _closure, _index, _value, _size);
+    return Void();
+}
+
+Return<void> Context::closureSetGlobal(Closure closure, ScriptFieldID fieldID, int64_t value, int32_t size) {
+    RsClosure _closure = hidl_to_rs<RsClosure>(closure);
+    RsScriptFieldID _fieldID = hidl_to_rs<RsScriptFieldID>(fieldID);
+    int64_t _value = value;
+    int _size = static_cast<int>(size);
+    Device::getHal().ClosureSetGlobal(mContext, _closure, _fieldID, _value, _size);
+    return Void();
+}
+
+Return<ScriptKernelID> Context::scriptKernelIDCreate(Script script, int32_t slot, int32_t sig) {
+    RsScript _script = hidl_to_rs<RsScript>(script);
+    int _slot = static_cast<int>(slot);
+    int _sig = static_cast<int>(sig);
+    RsScriptKernelID _scriptKernelID = Device::getHal().ScriptKernelIDCreate(mContext, _script, _slot, _sig);
+    return rs_to_hidl<ScriptKernelID>(_scriptKernelID);
+}
+
+Return<ScriptInvokeID> Context::scriptInvokeIDCreate(Script script, int32_t slot) {
+    RsScript _script = hidl_to_rs<RsScript>(script);
+    int _slot = static_cast<int>(slot);
+    RsScriptInvokeID _scriptInvokeID = Device::getHal().ScriptInvokeIDCreate(mContext, _script, _slot);
+    return rs_to_hidl<ScriptInvokeID>(_scriptInvokeID);
+}
+
+Return<ScriptFieldID> Context::scriptFieldIDCreate(Script script, int32_t slot) {
+    RsScript _script = hidl_to_rs<RsScript>(script);
+    int _slot = static_cast<int>(slot);
+    RsScriptFieldID _scriptFieldID = Device::getHal().ScriptFieldIDCreate(mContext, _script, _slot);
+    return rs_to_hidl<ScriptFieldID>(_scriptFieldID);
+}
+
+Return<ScriptGroup> Context::scriptGroupCreate(const hidl_vec<ScriptKernelID>& kernels, const hidl_vec<ScriptKernelID>& srcK, const hidl_vec<ScriptKernelID>& dstK, const hidl_vec<ScriptFieldID>& dstF, const hidl_vec<Type>& types) {
+    std::vector<RsScriptKernelID> _kernels = hidl_to_rs<RsScriptKernelID>(kernels, [](ScriptFieldID val) { return hidl_to_rs<RsScriptKernelID>(val); });
+    std::vector<RsScriptKernelID> _srcK    = hidl_to_rs<RsScriptKernelID>(srcK,    [](ScriptFieldID val) { return hidl_to_rs<RsScriptKernelID>(val); });
+    std::vector<RsScriptKernelID> _dstK    = hidl_to_rs<RsScriptKernelID>(dstK,    [](ScriptFieldID val) { return hidl_to_rs<RsScriptKernelID>(val); });
+    std::vector<RsScriptFieldID>  _dstF    = hidl_to_rs<RsScriptFieldID>(dstF,     [](ScriptFieldID val) { return hidl_to_rs<RsScriptFieldID>(val); });
+    std::vector<RsType>           _types   = hidl_to_rs<RsType>(types,             [](Type val) { return hidl_to_rs<RsType>(val); });
+    RsScriptGroup _scriptGroup = Device::getHal().ScriptGroupCreate(mContext, _kernels.data(), _kernels.size(), _srcK.data(), _srcK.size(), _dstK.data(), _dstK.size(), _dstF.data(), _dstF.size(), _types.data(), _types.size());
+    return rs_to_hidl<ScriptGroup>(_scriptGroup);
+}
+
+Return<ScriptGroup2> Context::scriptGroup2Create(const hidl_string& name, const hidl_string& cacheDir, const hidl_vec<Closure>& closures) {
+    const hidl_string& _name = name;
+    const hidl_string& _cacheDir = cacheDir;
+    std::vector<RsClosure> _closures = hidl_to_rs<RsClosure>(closures, [](Closure val) { return hidl_to_rs<RsClosure>(val); });
+    RsScriptGroup2 _scriptGroup2 = Device::getHal().ScriptGroup2Create(mContext, _name.c_str(), _name.size(), _cacheDir.c_str(), _cacheDir.size(), _closures.data(), _closures.size());
+    return rs_to_hidl<ScriptGroup2>(_scriptGroup2);
+}
+
+Return<void> Context::scriptGroupSetOutput(ScriptGroup sg, ScriptKernelID kid, Allocation alloc) {
+    RsScriptGroup _sg = hidl_to_rs<RsScriptGroup>(sg);
+    RsScriptKernelID _kid = hidl_to_rs<RsScriptKernelID>(kid);
+    RsAllocation _alloc = hidl_to_rs<RsAllocation>(alloc);
+    Device::getHal().ScriptGroupSetOutput(mContext, _sg, _kid, _alloc);
+    return Void();
+}
+
+Return<void> Context::scriptGroupSetInput(ScriptGroup sg, ScriptKernelID kid, Allocation alloc) {
+    RsScriptGroup _sg = hidl_to_rs<RsScriptGroup>(sg);
+    RsScriptKernelID _kid = hidl_to_rs<RsScriptKernelID>(kid);
+    RsAllocation _alloc = hidl_to_rs<RsAllocation>(alloc);
+    Device::getHal().ScriptGroupSetInput(mContext, _sg, _kid, _alloc);
+    return Void();
+}
+
+Return<void> Context::scriptGroupExecute(ScriptGroup sg) {
+    RsScriptGroup _sg = hidl_to_rs<RsScriptGroup>(sg);
+    Device::getHal().ScriptGroupExecute(mContext, _sg);
+    return Void();
+}
+
+Return<void> Context::objDestroy(ObjectBase obj) {
+    RsAsyncVoidPtr _obj = hidl_to_rs<RsAsyncVoidPtr>(obj);
+    Device::getHal().ObjDestroy(mContext, _obj);
+    return Void();
+}
+
+Return<Sampler> Context::samplerCreate(SamplerValue magFilter, SamplerValue minFilter, SamplerValue wrapS, SamplerValue wrapT, SamplerValue wrapR, float aniso) {
+    RsSamplerValue _magFilter = static_cast<RsSamplerValue>(magFilter);
+    RsSamplerValue _minFilter = static_cast<RsSamplerValue>(minFilter);
+    RsSamplerValue _wrapS = static_cast<RsSamplerValue>(wrapS);
+    RsSamplerValue _wrapT = static_cast<RsSamplerValue>(wrapT);
+    RsSamplerValue _wrapR = static_cast<RsSamplerValue>(wrapR);
+    float _aniso = static_cast<float>(aniso);
+    RsSampler _sampler = Device::getHal().SamplerCreate(mContext, _magFilter, _minFilter, _wrapS, _wrapT, _wrapR, _aniso);
+    return rs_to_hidl<Sampler>(_sampler);
+}
+
+Return<void> Context::scriptBindAllocation(Script script, Allocation allocation, uint32_t slot) {
+    RsScript _script = hidl_to_rs<RsScript>(script);
+    RsAllocation _allocation = hidl_to_rs<RsAllocation>(allocation);
+    uint32_t _slot = slot;
+    Device::getHal().ScriptBindAllocation(mContext, _script, _allocation, _slot);
+    return Void();
+}
+
+Return<void> Context::scriptSetTimeZone(Script script, const hidl_string& timeZone) {
+    RsScript _script = hidl_to_rs<RsScript>(script);
+    const hidl_string& _timeZone = timeZone;
+    Device::getHal().ScriptSetTimeZone(mContext, _script, _timeZone.c_str(), _timeZone.size());
+    return Void();
+}
+
+Return<void> Context::scriptInvoke(Script vs, uint32_t slot) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    Device::getHal().ScriptInvoke(mContext, _vs, _slot);
+    return Void();
+}
+
+Return<void> Context::scriptInvokeV(Script vs, uint32_t slot, const hidl_vec<uint8_t>& data) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    const void* _dataPtr = hidl_to_rs<const void*>(data.data());
+    size_t _len = data.size();
+    Device::getHal().ScriptInvokeV(mContext, _vs, _slot, _dataPtr, _len);
+    return Void();
+}
+
+Return<void> Context::scriptForEach(Script vs, uint32_t slot, const hidl_vec<Allocation>& vains, Allocation vaout, const hidl_vec<uint8_t>& params, Ptr sc) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    std::vector<RsAllocation> _vains = hidl_to_rs<RsAllocation>(vains, [](Allocation val) { return hidl_to_rs<RsAllocation>(val); });
+    RsAllocation _vaout = hidl_to_rs<RsAllocation>(vaout);
+    const void* _paramsPtr = hidl_to_rs<const void*>(params.data());
+    size_t _paramLen = params.size();
+    const RsScriptCall* _sc = hidl_to_rs<const RsScriptCall*>(sc);
+    size_t _scLen = _sc != nullptr ? sizeof(ScriptCall) : 0;
+    Device::getHal().ScriptForEachMulti(mContext, _vs, _slot, _vains.data(), _vains.size(), _vaout, _paramsPtr, _paramLen, _sc, _scLen);
+    return Void();
+}
+
+Return<void> Context::scriptReduce(Script vs, uint32_t slot, const hidl_vec<Allocation>& vains, Allocation vaout, Ptr sc) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    std::vector<RsAllocation> _vains = hidl_to_rs<RsAllocation>(vains, [](Allocation val) { return hidl_to_rs<RsAllocation>(val); });
+    RsAllocation _vaout = hidl_to_rs<RsAllocation>(vaout);
+    const RsScriptCall* _sc = hidl_to_rs<const RsScriptCall*>(sc);
+    size_t _scLen = _sc != nullptr ? sizeof(ScriptCall) : 0;
+    Device::getHal().ScriptReduce(mContext, _vs, _slot, _vains.data(), _vains.size(), _vaout, _sc, _scLen);
+    return Void();
+}
+
+Return<void> Context::scriptSetVarI(Script vs, uint32_t slot, int32_t value) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    int _value = static_cast<int>(value);
+    Device::getHal().ScriptSetVarI(mContext, _vs, _slot, _value);
+    return Void();
+}
+
+Return<void> Context::scriptSetVarObj(Script vs, uint32_t slot, ObjectBase obj) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    RsObjectBase _obj = hidl_to_rs<RsObjectBase>(obj);
+    Device::getHal().ScriptSetVarObj(mContext, _vs, _slot, _obj);
+    return Void();
+}
+
+Return<void> Context::scriptSetVarJ(Script vs, uint32_t slot, int64_t value) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    int64_t _value = static_cast<int64_t>(value);
+    Device::getHal().ScriptSetVarJ(mContext, _vs, _slot, _value);
+    return Void();
+}
+
+Return<void> Context::scriptSetVarF(Script vs, uint32_t slot, float value) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    float _value = value;
+    Device::getHal().ScriptSetVarF(mContext, _vs, _slot, _value);
+    return Void();
+}
+
+Return<void> Context::scriptSetVarD(Script vs, uint32_t slot, double value) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    double _value = value;
+    Device::getHal().ScriptSetVarD(mContext, _vs, _slot, _value);
+    return Void();
+}
+
+Return<void> Context::scriptSetVarV(Script vs, uint32_t slot, const hidl_vec<uint8_t>& data) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    const void* _dataPtr = hidl_to_rs<const void*>(data.data());
+    size_t _len = data.size();
+    Device::getHal().ScriptSetVarV(mContext, _vs, _slot, _dataPtr, _len);
+    return Void();
+}
+
+Return<void> Context::scriptGetVarV(Script vs, uint32_t slot, Size len, scriptGetVarV_cb _hidl_cb) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    size_t _len = static_cast<size_t>(len);
+    std::vector<uint8_t> _data(static_cast<size_t>(len));
+    Device::getHal().ScriptGetVarV(mContext, _vs, _slot, _data.data(), _data.size());
+    hidl_vec<uint8_t> data = _data;
+    _hidl_cb(data);
+    return Void();
+}
+
+Return<void> Context::scriptSetVarVE(Script vs, uint32_t slot, const hidl_vec<uint8_t>& data, Element ve, const hidl_vec<uint32_t>& dims) {
+    RsScript _vs = hidl_to_rs<RsScript>(vs);
+    uint32_t _slot = slot;
+    const void* _dataPtr = hidl_to_rs<const void*>(data.data());
+    size_t _len = data.size();
+    RsElement _ve = hidl_to_rs<RsElement>(ve);
+    const uint32_t* _dimsPtr = dims.data();
+    size_t _dimLen = dims.size();
+    Device::getHal().ScriptSetVarVE(mContext, _vs, _slot, _dataPtr, _len, _ve, _dimsPtr, _dimLen);
+    return Void();
+}
+
+Return<Script> Context::scriptCCreate(const hidl_string& resName, const hidl_string& cacheDir, const hidl_vec<uint8_t>& text) {
+    const hidl_string& _resName = resName;
+    const hidl_string& _cacheDir = cacheDir;
+    const char* _textPtr = hidl_to_rs<const char*>(text.data());
+    size_t _textSize = text.size();
+    RsScript _script = Device::getHal().ScriptCCreate(mContext, _resName.c_str(), _resName.size(), _cacheDir.c_str(), _cacheDir.size(), _textPtr, _textSize);
+    return rs_to_hidl<Script>(_script);
+}
+
+Return<Script> Context::scriptIntrinsicCreate(ScriptIntrinsicID id, Element elem) {
+    RsScriptIntrinsicID _id = static_cast<RsScriptIntrinsicID>(id);
+    RsElement _elem = hidl_to_rs<RsElement>(elem);
+    RsScript _script = Device::getHal().ScriptIntrinsicCreate(mContext, _id, _elem);
+    return rs_to_hidl<Script>(_script);
+}
+
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace renderscript
+}  // namespace hardware
+}  // namespace android
diff --git a/renderscript/1.0/default/Context.h b/renderscript/1.0/default/Context.h
new file mode 100644
index 0000000..d8bfe4f
--- /dev/null
+++ b/renderscript/1.0/default/Context.h
@@ -0,0 +1,129 @@
+#ifndef ANDROID_HARDWARE_RENDERSCRIPT_V1_0_CONTEXT_H
+#define ANDROID_HARDWARE_RENDERSCRIPT_V1_0_CONTEXT_H
+
+#include "cpp/rsDispatch.h"
+#include "dlfcn.h"
+#include <android/hardware/renderscript/1.0/IContext.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace renderscript {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::renderscript::V1_0::AllocationCubemapFace;
+using ::android::hardware::renderscript::V1_0::AllocationMipmapControl;
+using ::android::hardware::renderscript::V1_0::AllocationUsageType;
+using ::android::hardware::renderscript::V1_0::ContextType;
+using ::android::hardware::renderscript::V1_0::DataKind;
+using ::android::hardware::renderscript::V1_0::DataType;
+using ::android::hardware::renderscript::V1_0::IContext;
+using ::android::hardware::renderscript::V1_0::MessageToClientType;
+using ::android::hardware::renderscript::V1_0::SamplerValue;
+using ::android::hardware::renderscript::V1_0::ScriptCall;
+using ::android::hardware::renderscript::V1_0::ScriptIntrinsicID;
+using ::android::hardware::renderscript::V1_0::ThreadPriorities;
+using ::android::hardware::renderscript::V1_0::YuvFormat;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct Context : public IContext {
+    Context(uint32_t sdkVersion, ContextType ct, int32_t flags);
+
+    // Methods from ::android::hardware::renderscript::V1_0::IContext follow.
+    Return<Allocation> allocationAdapterCreate(Type type, Allocation baseAlloc) override;
+    Return<void> allocationAdapterOffset(Allocation alloc, const hidl_vec<uint32_t>& offsets) override;
+    Return<Type> allocationGetType(Allocation allocation) override;
+    Return<Allocation> allocationCreateTyped(Type type, AllocationMipmapControl amips, int32_t usage, Ptr ptr) override;
+    Return<Allocation> allocationCreateFromBitmap(Type type, AllocationMipmapControl amips, const hidl_vec<uint8_t>& bitmap, int32_t usage) override;
+    Return<Allocation> allocationCubeCreateFromBitmap(Type type, AllocationMipmapControl amips, const hidl_vec<uint8_t>& bitmap, int32_t usage) override;
+    Return<NativeWindow> allocationGetNativeWindow(Allocation allocation) override;
+    Return<void> allocationSetNativeWindow(Allocation allocation, NativeWindow nativewindow) override;
+    Return<void> allocationSetupBufferQueue(Allocation alloc, uint32_t numBuffer) override;
+    Return<void> allocationShareBufferQueue(Allocation baseAlloc, Allocation subAlloc) override;
+    Return<void> allocationCopyToBitmap(Allocation allocation, Ptr data, Size sizeBytes) override;
+    Return<void> allocation1DWrite(Allocation allocation, uint32_t offset, uint32_t lod, uint32_t count, const hidl_vec<uint8_t>& data) override;
+    Return<void> allocationElementWrite(Allocation allocation, uint32_t x, uint32_t y, uint32_t z, uint32_t lod, const hidl_vec<uint8_t>& data, Size compIdx) override;
+    Return<void> allocation2DWrite(Allocation allocation, uint32_t xoff, uint32_t yoff, uint32_t lod, AllocationCubemapFace face, uint32_t w, uint32_t h, const hidl_vec<uint8_t>& data, Size stride) override;
+    Return<void> allocation3DWrite(Allocation allocation, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, uint32_t w, uint32_t h, uint32_t d, const hidl_vec<uint8_t>& data, Size stride) override;
+    Return<void> allocationGenerateMipmaps(Allocation allocation) override;
+    Return<void> allocationRead(Allocation allocation, Ptr data, Size sizeBytes) override;
+    Return<void> allocation1DRead(Allocation allocation, uint32_t xoff, uint32_t lod, uint32_t count, Ptr data, Size sizeBytes) override;
+    Return<void> allocationElementRead(Allocation allocation, uint32_t x, uint32_t y, uint32_t z, uint32_t lod, Ptr data, Size sizeBytes, Size compIdx) override;
+    Return<void> allocation2DRead(Allocation allocation, uint32_t xoff, uint32_t yoff, uint32_t lod, AllocationCubemapFace face, uint32_t w, uint32_t h, Ptr data, Size sizeBytes, Size stride) override;
+    Return<void> allocation3DRead(Allocation allocation, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, uint32_t w, uint32_t h, uint32_t d, Ptr data, Size sizeBytes, Size stride) override;
+    Return<void> allocationSyncAll(Allocation allocation, AllocationUsageType usageType) override;
+    Return<void> allocationResize1D(Allocation allocation, uint32_t dimX) override;
+    Return<void> allocationCopy2DRange(Allocation dstAlloc, uint32_t dstXoff, uint32_t dstYoff, uint32_t dstMip, AllocationCubemapFace dstFace, uint32_t width, uint32_t height, Allocation srcAlloc, uint32_t srcXoff, uint32_t srcYoff, uint32_t srcMip, AllocationCubemapFace srcFace) override;
+    Return<void> allocationCopy3DRange(Allocation dstAlloc, uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, uint32_t dstMip, uint32_t width, uint32_t height, uint32_t depth, Allocation srcAlloc, uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, uint32_t srcMip) override;
+    Return<void> allocationIoSend(Allocation allocation) override;
+    Return<void> allocationIoReceive(Allocation allocation) override;
+    Return<void> allocationGetPointer(Allocation allocation, uint32_t lod, AllocationCubemapFace face, uint32_t z, allocationGetPointer_cb _hidl_cb) override;
+    Return<void> elementGetNativeMetadata(Element element, elementGetNativeMetadata_cb _hidl_cb) override;
+    Return<void> elementGetSubElements(Element element, Size numSubElem, elementGetSubElements_cb _hidl_cb) override;
+    Return<Element> elementCreate(DataType dt, DataKind dk, bool norm, uint32_t size) override;
+    Return<Element> elementComplexCreate(const hidl_vec<Element>& eins, const hidl_vec<hidl_string>& names, const hidl_vec<Size>& arraySizes) override;
+    Return<void> typeGetNativeMetadata(Type type, typeGetNativeMetadata_cb _hidl_cb) override;
+    Return<Type> typeCreate(Element element, uint32_t dimX, uint32_t dimY, uint32_t dimZ, bool mipmaps, bool faces, YuvFormat yuv) override;
+    Return<void> contextDestroy() override;
+    Return<void> contextGetMessage(Ptr data, Size size, contextGetMessage_cb _hidl_cb) override;
+    Return<void> contextPeekMessage(contextPeekMessage_cb _hidl_cb) override;
+    Return<void> contextSendMessage(uint32_t id, const hidl_vec<uint8_t>& data) override;
+    Return<void> contextInitToClient() override;
+    Return<void> contextDeinitToClient() override;
+    Return<void> contextFinish() override;
+    Return<void> contextLog() override;
+    Return<void> contextSetPriority(ThreadPriorities priority) override;
+    Return<void> contextSetCacheDir(const hidl_string& cacheDir) override;
+    Return<void> assignName(ObjectBase obj, const hidl_string& name) override;
+    Return<void> getName(ObjectBase obj, getName_cb _hidl_cb) override;
+    Return<Closure> closureCreate(ScriptKernelID kernelID, Allocation returnValue, const hidl_vec<ScriptFieldID>& fieldIDS, const hidl_vec<int64_t>& values, const hidl_vec<int32_t>& sizes, const hidl_vec<Closure>& depClosures, const hidl_vec<ScriptFieldID>& depFieldIDS) override;
+    Return<Closure> invokeClosureCreate(ScriptInvokeID invokeID, const hidl_vec<uint8_t>& params, const hidl_vec<ScriptFieldID>& fieldIDS, const hidl_vec<int64_t>& values, const hidl_vec<int32_t>& sizes) override;
+    Return<void> closureSetArg(Closure closure, uint32_t index, Ptr value, int32_t size) override;
+    Return<void> closureSetGlobal(Closure closure, ScriptFieldID fieldID, int64_t value, int32_t size) override;
+    Return<ScriptKernelID> scriptKernelIDCreate(Script script, int32_t slot, int32_t sig) override;
+    Return<ScriptInvokeID> scriptInvokeIDCreate(Script script, int32_t slot) override;
+    Return<ScriptFieldID> scriptFieldIDCreate(Script script, int32_t slot) override;
+    Return<ScriptGroup> scriptGroupCreate(const hidl_vec<ScriptKernelID>& kernels, const hidl_vec<ScriptKernelID>& srcK, const hidl_vec<ScriptKernelID>& dstK, const hidl_vec<ScriptFieldID>& dstF, const hidl_vec<Type>& types) override;
+    Return<ScriptGroup2> scriptGroup2Create(const hidl_string& name, const hidl_string& cacheDir, const hidl_vec<Closure>& closures) override;
+    Return<void> scriptGroupSetOutput(ScriptGroup sg, ScriptKernelID kid, Allocation alloc) override;
+    Return<void> scriptGroupSetInput(ScriptGroup sg, ScriptKernelID kid, Allocation alloc) override;
+    Return<void> scriptGroupExecute(ScriptGroup sg) override;
+    Return<void> objDestroy(ObjectBase obj) override;
+    Return<Sampler> samplerCreate(SamplerValue magFilter, SamplerValue minFilter, SamplerValue wrapS, SamplerValue wrapT, SamplerValue wrapR, float aniso) override;
+    Return<void> scriptBindAllocation(Script script, Allocation allocation, uint32_t slot) override;
+    Return<void> scriptSetTimeZone(Script script, const hidl_string& timeZone) override;
+    Return<void> scriptInvoke(Script vs, uint32_t slot) override;
+    Return<void> scriptInvokeV(Script vs, uint32_t slot, const hidl_vec<uint8_t>& data) override;
+    Return<void> scriptForEach(Script vs, uint32_t slot, const hidl_vec<Allocation>& vains, Allocation vaout, const hidl_vec<uint8_t>& params, Ptr sc) override;
+    Return<void> scriptReduce(Script vs, uint32_t slot, const hidl_vec<Allocation>& vains, Allocation vaout, Ptr sc) override;
+    Return<void> scriptSetVarI(Script vs, uint32_t slot, int32_t value) override;
+    Return<void> scriptSetVarObj(Script vs, uint32_t slot, ObjectBase obj) override;
+    Return<void> scriptSetVarJ(Script vs, uint32_t slot, int64_t value) override;
+    Return<void> scriptSetVarF(Script vs, uint32_t slot, float value) override;
+    Return<void> scriptSetVarD(Script vs, uint32_t slot, double value) override;
+    Return<void> scriptSetVarV(Script vs, uint32_t slot, const hidl_vec<uint8_t>& data) override;
+    Return<void> scriptGetVarV(Script vs, uint32_t slot, Size len, scriptGetVarV_cb _hidl_cb) override;
+    Return<void> scriptSetVarVE(Script vs, uint32_t slot, const hidl_vec<uint8_t>& data, Element ve, const hidl_vec<uint32_t>& dims) override;
+    Return<Script> scriptCCreate(const hidl_string& resName, const hidl_string& cacheDir, const hidl_vec<uint8_t>& text) override;
+    Return<Script> scriptIntrinsicCreate(ScriptIntrinsicID id, Element elem) override;
+
+    // Methods from ::android::hidl::base::V1_0::IBase follow.
+
+ private:
+    RsContext mContext;
+};
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace renderscript
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_RENDERSCRIPT_V1_0_CONTEXT_H
diff --git a/renderscript/1.0/default/Device.cpp b/renderscript/1.0/default/Device.cpp
new file mode 100644
index 0000000..86cf8eb
--- /dev/null
+++ b/renderscript/1.0/default/Device.cpp
@@ -0,0 +1,139 @@
+#include "Context.h"
+#include "Device.h"
+
+namespace android {
+namespace hardware {
+namespace renderscript {
+namespace V1_0 {
+namespace implementation {
+
+
+static dispatchTable loadHAL();
+dispatchTable Device::mDispatchHal = loadHAL();
+
+Device::Device() {
+}
+
+dispatchTable& Device::getHal() {
+    return mDispatchHal;
+}
+
+
+// Methods from ::android::hardware::renderscript::V1_0::IDevice follow.
+
+Return<sp<IContext>> Device::contextCreate(uint32_t sdkVersion, ContextType ct, int32_t flags) {
+    return new Context(sdkVersion, ct, flags);
+}
+
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+IDevice* HIDL_FETCH_IDevice(const char* /* name */) {
+    return new Device();
+}
+
+// Helper function
+dispatchTable loadHAL() {
+
+    static_assert(sizeof(void*) <= sizeof(uint64_t), "RenderScript HIDL Error: sizeof(void*) > sizeof(uint64_t)");
+    static_assert(sizeof(size_t) <= sizeof(uint64_t), "RenderScript HIDL Error: sizeof(size_t) > sizeof(uint64_t)");
+
+    const char* filename = "libRS_internal.so";
+    void* handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
+
+    dispatchTable dispatchHal = {
+        .SetNativeLibDir = (SetNativeLibDirFnPtr)nullptr,
+
+        .Allocation1DData = (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData"),
+        .Allocation1DElementData = (Allocation1DElementDataFnPtr)nullptr,
+        .Allocation1DRead = (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead"),
+        .Allocation2DData = (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData"),
+        .Allocation2DRead = (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead"),
+        .Allocation3DData = (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData"),
+        .Allocation3DRead = (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead"),
+        .AllocationAdapterCreate = (AllocationAdapterCreateFnPtr)dlsym(handle, "rsAllocationAdapterCreate"),
+        .AllocationAdapterOffset = (AllocationAdapterOffsetFnPtr)dlsym(handle, "rsAllocationAdapterOffset"),
+        .AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange"),
+        .AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange"),
+        .AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap"),
+        .AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap"),
+        .AllocationCreateStrided = (AllocationCreateStridedFnPtr)dlsym(handle, "rsAllocationCreateStrided"),
+        .AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped"),
+        .AllocationCubeCreateFromBitmap = (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap"),
+        .AllocationElementData = (AllocationElementDataFnPtr)dlsym(handle, "rsAllocationElementData"),
+        .AllocationElementRead = (AllocationElementReadFnPtr)dlsym(handle, "rsAllocationElementRead"),
+        .AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps"),
+        .AllocationGetPointer = (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer"),
+        .AllocationGetSurface = (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface"),
+        .AllocationGetType = (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType"),
+        .AllocationIoReceive = (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive"),
+        .AllocationIoSend = (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend"),
+        .AllocationRead = (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead"),
+        .AllocationResize1D = (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D"),
+        .AllocationSetSurface = (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface"),
+        .AllocationSetupBufferQueue = (AllocationSetupBufferQueueFnPtr)dlsym(handle, "rsAllocationSetupBufferQueue"),
+        .AllocationShareBufferQueue = (AllocationShareBufferQueueFnPtr)dlsym(handle, "rsAllocationShareBufferQueue"),
+        .AllocationSyncAll = (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll"),
+        .AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName"),
+        .ClosureCreate = (ClosureCreateFnPtr)dlsym(handle, "rsClosureCreate"),
+        .ClosureSetArg = (ClosureSetArgFnPtr)dlsym(handle, "rsClosureSetArg"),
+        .ClosureSetGlobal = (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal"),
+        .ContextCreate = (ContextCreateFnPtr)dlsym(handle, "rsContextCreate"),
+        .ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient"),
+        .ContextDestroy = (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy"),
+        .ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump"),
+        .ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish"),
+        .ContextGetMessage = (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage"),
+        .ContextInitToClient = (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient"),
+        .ContextPeekMessage = (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage"),
+        .ContextSendMessage = (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage"),
+        .ContextSetCacheDir = (ContextSetCacheDirFnPtr)dlsym(handle, "rsContextSetCacheDir"),
+        .ContextSetPriority = (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority"),
+        .DeviceCreate = (DeviceCreateFnPtr)nullptr,
+        .DeviceDestroy = (DeviceDestroyFnPtr)nullptr,
+        .DeviceSetConfig = (DeviceSetConfigFnPtr)nullptr,
+        .ElementCreate2 = (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2"),
+        .ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate"),
+        .ElementGetNativeData = (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData"),
+        .ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements"),
+        .GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName"),
+        .InvokeClosureCreate = (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate"),
+        .ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy"),
+        .SamplerCreate = (SamplerCreateFnPtr)dlsym(handle, "rsSamplerCreate"),
+        .ScriptBindAllocation = (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation"),
+        .ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate"),
+        .ScriptFieldIDCreate = (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate"),
+        .ScriptForEach = (ScriptForEachFnPtr)nullptr,
+        .ScriptForEachMulti = (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti"),
+        .ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV"),
+        .ScriptGroup2Create = (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create"),
+        .ScriptGroupCreate = (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate"),
+        .ScriptGroupExecute = (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute"),
+        .ScriptGroupSetInput = (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput"),
+        .ScriptGroupSetOutput = (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput"),
+        .ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate"),
+        .ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke"),
+        .ScriptInvokeIDCreate = (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate"),
+        .ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV"),
+        .ScriptKernelIDCreate = (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate"),
+        .ScriptReduce = (ScriptReduceFnPtr)dlsym(handle, "rsScriptReduce"),
+        .ScriptSetTimeZone = (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone"),
+        .ScriptSetVarD = (ScriptSetVarDFnPtr)dlsym(handle, "rsScriptSetVarD"),
+        .ScriptSetVarF = (ScriptSetVarFFnPtr)dlsym(handle, "rsScriptSetVarF"),
+        .ScriptSetVarI = (ScriptSetVarIFnPtr)dlsym(handle, "rsScriptSetVarI"),
+        .ScriptSetVarJ = (ScriptSetVarJFnPtr)dlsym(handle, "rsScriptSetVarJ"),
+        .ScriptSetVarObj = (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj"),
+        .ScriptSetVarVE = (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE"),
+        .ScriptSetVarV = (ScriptSetVarVFnPtr)dlsym(handle, "rsScriptSetVarV"),
+        .TypeCreate = (TypeCreateFnPtr)dlsym(handle, "rsTypeCreate"),
+        .TypeGetNativeData = (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData"),
+    };
+
+    return dispatchHal;
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace renderscript
+}  // namespace hardware
+}  // namespace android
diff --git a/renderscript/1.0/default/Device.h b/renderscript/1.0/default/Device.h
new file mode 100644
index 0000000..f5bda37
--- /dev/null
+++ b/renderscript/1.0/default/Device.h
@@ -0,0 +1,44 @@
+#ifndef ANDROID_HARDWARE_RENDERSCRIPT_V1_0_DEVICE_H
+#define ANDROID_HARDWARE_RENDERSCRIPT_V1_0_DEVICE_H
+
+#include "cpp/rsDispatch.h"
+#include "dlfcn.h"
+#include <android/hardware/renderscript/1.0/IDevice.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace renderscript {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::renderscript::V1_0::ContextType;
+using ::android::hardware::renderscript::V1_0::IContext;
+using ::android::hardware::renderscript::V1_0::IDevice;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::Return;
+using ::android::sp;
+
+struct Device : public IDevice {
+    Device();
+    static dispatchTable& getHal();
+
+    // Methods from ::android::hardware::renderscript::V1_0::IDevice follow.
+    Return<sp<IContext>> contextCreate(uint32_t sdkVersion, ContextType ct, int32_t flags) override;
+
+    // Methods from ::android::hidl::base::V1_0::IBase follow.
+
+ private:
+    static dispatchTable mDispatchHal;
+};
+
+extern "C" IDevice* HIDL_FETCH_IDevice(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace renderscript
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_RENDERSCRIPT_V1_0_DEVICE_H
diff --git a/renderscript/1.0/types.hal b/renderscript/1.0/types.hal
new file mode 100644
index 0000000..7c32188
--- /dev/null
+++ b/renderscript/1.0/types.hal
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+// TODO: Currently, most of the types are simply typedefs of uint64_t, so
+// misusing one type as another won't be caught by the compiler. Should we wrap
+// each type in a unique class to have stronger type guarantees?
+// TODO: is there an enum for intrinsics?
+
+package android.hardware.renderscript@1.0;
+
+// OpaqueHandle is an object that is used entirely in the driver but still needs
+// to be identified by the framework.
+typedef uint64_t OpaqueHandle;
+
+// A pointer is an actual local pointer that can be accessed by both the
+// framework and the driver. This is possible because RenderScript is always
+// running in Passthrough mode.
+typedef pointer Ptr;
+
+// This is an abstraction of size_t because it is not supported in HIDL.
+typedef uint64_t Size;
+
+// In RenderScript code, these are all defined as void*, but act only as
+// handles.
+typedef OpaqueHandle Allocation;
+typedef OpaqueHandle AllocationAdapter;
+typedef OpaqueHandle Closure;
+typedef OpaqueHandle Element;
+typedef OpaqueHandle NativeWindow;
+typedef OpaqueHandle ObjectBase;
+typedef OpaqueHandle Sampler;
+typedef OpaqueHandle Script;
+typedef OpaqueHandle ScriptFieldID;
+typedef OpaqueHandle ScriptGroup;
+typedef OpaqueHandle ScriptGroup2;
+typedef OpaqueHandle ScriptInvokeID;
+typedef OpaqueHandle ScriptKernelID;
+typedef OpaqueHandle Type;
+
+// types below are same as those in frameworks/rs/rsDefines.h
+
+@export(name="RsContextType", value_prefix="RS_CONTEXT_TYPE_")
+enum ContextType : int32_t {
+    NORMAL,
+    DEBUG,
+    PROFILE,
+};
+
+@export(name="RsAllocationUsageType", value_prefix="RS_ALLOCATION_USAGE_")
+enum AllocationUsageType : int32_t {
+    SCRIPT                 = 0x0001,
+    GRAPHICS_TEXTURE       = 0x0002,
+    GRAPHICS_VERTEX        = 0x0004,
+    GRAPHICS_CONSTANTS     = 0x0008,
+    GRAPHICS_RENDER_TARGET = 0x0010,
+    IO_INPUT               = 0x0020,
+    IO_OUTPUT              = 0x0040,
+    SHARED                 = 0x0080,
+    OEM                    = 0x8000,
+    ALL                    = 0x80FF,
+};
+
+@export(name="RsAllocationMipmapControl", value_prefix="RS_ALLOCATION_MIPMAP_")
+enum AllocationMipmapControl : int32_t {
+    NONE               = 0,
+    FULL               = 1,
+    ON_SYNC_TO_TEXTURE = 2,
+};
+
+@export(name="RsAllocationCubemapFace",
+        value_prefix="RS_ALLOCATION_CUBEMAP_FACE_")
+enum AllocationCubemapFace : int32_t {
+    POSITIVE_X = 0,
+    NEGATIVE_X = 1,
+    POSITIVE_Y = 2,
+    NEGATIVE_Y = 3,
+    POSITIVE_Z = 4,
+    NEGATIVE_Z = 5,
+};
+
+@export(name="RsDataType", value_prefix="RS_TYPE_")
+enum DataType : int32_t {
+    NONE = 0,
+    FLOAT_16,
+    FLOAT_32,
+    FLOAT_64,
+    SIGNED_8,
+    SIGNED_16,
+    SIGNED_32,
+    SIGNED_64,
+    UNSIGNED_8,
+    UNSIGNED_16,
+    UNSIGNED_32,
+    UNSIGNED_64,
+    BOOLEAN,
+    UNSIGNED_5_6_5,
+    UNSIGNED_5_5_5_1,
+    UNSIGNED_4_4_4_4,
+    MATRIX_4X4,
+    MATRIX_3X3,
+    MATRIX_2X2,
+    ELEMENT = 1000,
+    TYPE,
+    ALLOCATION,
+    SAMPLER,
+    SCRIPT,
+    MESH,
+    PROGRAM_FRAGMENT,
+    PROGRAM_VERTEX,
+    PROGRAM_RASTER,
+    PROGRAM_STORE,
+    FONT,
+    INVALID = 10000,
+};
+
+@export(name="RsDataKind", value_prefix="RS_KIND_")
+enum DataKind : int32_t {
+    USER,
+    PIXEL_L = 7,
+    PIXEL_A,
+    PIXEL_LA,
+    PIXEL_RGB,
+    PIXEL_RGBA,
+    PIXEL_DEPTH,
+    PIXEL_YUV,
+    INVALID = 100,
+};
+
+@export(name="RsYuvFormat", value_prefix="RS_")
+enum YuvFormat : int32_t {
+    YUV_NONE    = 0,
+    YUV_YV12    = 0x32315659, // HAL_PIXEL_FORMAT_YV12 in system/graphics.h
+    YUV_NV21    = 0x11,       // HAL_PIXEL_FORMAT_YCrCb_420_SP
+    YUV_420_888 = 0x23,       // HAL_PIXEL_FORMAT_YCbCr_420_888
+};
+
+@export(name="RsSamplerValue", value_prefix="RS_SAMPLER_")
+enum SamplerValue : int32_t {
+    NEAREST,
+    LINEAR,
+    LINEAR_MIP_LINEAR,
+    WRAP,
+    CLAMP,
+    LINEAR_MIP_NEAREST,
+    MIRRORED_REPEAT,
+    INVALID = 100,
+};
+
+@export(name="RsForEachStrategy", value_prefix="RS_FOR_EACH_STRATEGY_")
+enum ForEachStrategy : int32_t {
+    SERIAL      = 0,
+    DONT_CARE   = 1,
+    DST_LINEAR  = 2,
+    TILE_SMALL  = 3,
+    TILE_MEDIUM = 4,
+    TILE_LARGE  = 5,
+};
+
+// Script to Script
+@export(name="RsScriptCall")
+struct ScriptCall {
+    ForEachStrategy strategy;
+    uint32_t        xStart;
+    uint32_t        xEnd;
+    uint32_t        yStart;
+    uint32_t        yEnd;
+    uint32_t        zStart;
+    uint32_t        zEnd;
+    uint32_t        arrayStart;
+    uint32_t        arrayEnd;
+    uint32_t        array2Start;
+    uint32_t        array2End;
+    uint32_t        array3Start;
+    uint32_t        array3End;
+    uint32_t        array4Start;
+    uint32_t        array4End;
+};
+
+@export(name="RsContextFlags", value_prefix="RS_CONTEXT_")
+enum ContextFlags : int32_t {
+    SYNCHRONOUS     = 1<<0,
+    LOW_LATENCY     = 1<<1,
+    LOW_POWER       = 1<<2,
+    WAIT_FOR_ATTACH = 1<<3,
+};
+
+// types below are same as those in frameworks/rs/rsInternalDefines.h
+
+@export(name="RsMessageToClientType", value_prefix="RS_MESSAGE_TO_CLIENT_")
+enum MessageToClientType : int32_t {
+    NONE       = 0,
+    EXCEPTION  = 1,
+    RESIZE     = 2,
+    ERROR      = 3,
+    USER       = 4,
+    NEW_BUFFER = 5,
+};
+
+@export(name="RsScriptIntrinsicID", value_prefix="RS_SCRIPT_INTRINSIC_")
+enum ScriptIntrinsicID : int32_t {
+    ID_UNDEFINED    = 0,
+    ID_CONVOLVE_3X3 = 1,
+    ID_COLOR_MATRIX = 2,
+    ID_LUT          = 3,
+    ID_CONVOLVE_5X5 = 4,
+    ID_BLUR         = 5,
+    ID_YUV_TO_RGB   = 6,
+    ID_BLEND        = 7,
+    ID_3DLUT        = 8,
+    ID_HISTOGRAM    = 9,
+    // unused 10, 11
+    ID_RESIZE       = 12,
+    ID_BLAS         = 13,
+    ID_EXTBLAS      = 14,
+    ID_OEM_START    = 0x10000000,
+};
+
+@export(name="RsThreadPriorities", value_prefix="RS_THREAD_PRIORITY_")
+enum ThreadPriorities : int32_t {
+    LOW             = 15,
+    NORMAL_GRAPHICS = -8,
+    NORMAL          = -1,
+    LOW_LATENCY     = -4,
+};
+
+// types below are same as those in
+// frameworks/compile/libbcc/include/bcinfo/MetadataExtractor.h
+
+@export(name="", value_prefix="RS_MD_")
+enum MetadataSignatureBitval : int32_t {
+    SIG_None        = 0,
+    SIG_In          = 1<<0,
+    SIG_Out         = 1<<1,
+    SIG_Usr         = 1<<2,
+    SIG_X           = 1<<3,
+    SIG_Y           = 1<<4,
+    SIG_Kernel      = 1<<5,
+    SIG_Z           = 1<<6,
+    SIG_Ctxt        = 1<<7,
+};
diff --git a/example/Android.bp b/renderscript/Android.bp
similarity index 66%
rename from example/Android.bp
rename to renderscript/Android.bp
index ea6dbb5..ba90f2c 100644
--- a/example/Android.bp
+++ b/renderscript/Android.bp
@@ -1,4 +1,5 @@
 // This is an autogenerated file, do not edit.
 subdirs = [
-    "extension/light/2.0",
+    "1.0",
+    "1.0/default",
 ]
diff --git a/sensors/1.0/Android.bp b/sensors/1.0/Android.bp
index 2995504..8357dbe 100644
--- a/sensors/1.0/Android.bp
+++ b/sensors/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.sensors@1.0_hal",
+    srcs: [
+        "types.hal",
+        "ISensors.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.sensors@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.sensors@1.0",
     srcs: [
-        "types.hal",
-        "ISensors.hal",
+        ":android.hardware.sensors@1.0_hal",
     ],
     out: [
         "android/hardware/sensors/1.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.sensors@1.0",
     srcs: [
-        "types.hal",
-        "ISensors.hal",
+        ":android.hardware.sensors@1.0_hal",
     ],
     out: [
         "android/hardware/sensors/1.0/types.h",
@@ -54,106 +60,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.sensors.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.sensors@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/sensors/1.0/ $(genDir)/android/hardware/sensors/1.0/",
-    srcs: [
-        "types.hal",
-        "ISensors.hal",
-    ],
-    out: [
-        "android/hardware/sensors/1.0/types.vts.cpp",
-        "android/hardware/sensors/1.0/Sensors.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.sensors.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.sensors@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/sensors/1.0/ $(genDir)/android/hardware/sensors/1.0/",
-    srcs: [
-        "types.hal",
-        "ISensors.hal",
-    ],
-    out: [
-        "android/hardware/sensors/1.0/types.vts.h",
-        "android/hardware/sensors/1.0/Sensors.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.sensors.vts.driver@1.0",
-    generated_sources: ["android.hardware.sensors.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.sensors.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.sensors.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.sensors@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.sensors@1.0-ISensors-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.sensors@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/sensors/1.0/ $(genDir)/android/hardware/sensors/1.0/",
-    srcs: [
-        "ISensors.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/sensors/1.0/Sensors.vts.cpp",
-        "android/hardware/sensors/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.sensors@1.0-ISensors-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.sensors@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/sensors/1.0/ $(genDir)/android/hardware/sensors/1.0/",
-    srcs: [
-        "ISensors.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/sensors/1.0/Sensors.vts.h",
-        "android/hardware/sensors/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.sensors@1.0-ISensors-vts.profiler",
-    generated_sources: ["android.hardware.sensors@1.0-ISensors-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.sensors@1.0-ISensors-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.sensors@1.0-ISensors-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.sensors@1.0",
-    ],
-}
diff --git a/sensors/1.0/Android.mk b/sensors/1.0/Android.mk
index 5784916..29f7c7e 100644
--- a/sensors/1.0/Android.mk
+++ b/sensors/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.sensors@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/sensors/1.0/default/Android.bp b/sensors/1.0/default/Android.bp
index 994febe..3930504 100644
--- a/sensors/1.0/default/Android.bp
+++ b/sensors/1.0/default/Android.bp
@@ -1,5 +1,6 @@
 cc_library_shared {
     name: "android.hardware.sensors@1.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["Sensors.cpp"],
     shared_libs: [
diff --git a/sensors/1.0/default/Android.mk b/sensors/1.0/default/Android.mk
index f37c3cb..6a1aab4 100644
--- a/sensors/1.0/default/Android.mk
+++ b/sensors/1.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.sensors@1.0-service
 LOCAL_INIT_RC := android.hardware.sensors@1.0-service.rc
 LOCAL_SRC_FILES := \
diff --git a/sensors/1.0/default/android.hardware.sensors@1.0-service.rc b/sensors/1.0/default/android.hardware.sensors@1.0-service.rc
index 2cba0fc..2360863 100644
--- a/sensors/1.0/default/android.hardware.sensors@1.0-service.rc
+++ b/sensors/1.0/default/android.hardware.sensors@1.0-service.rc
@@ -1,4 +1,4 @@
-service sensors-hal-1-0 /system/bin/hw/android.hardware.sensors@1.0-service
+service sensors-hal-1-0 /vendor/bin/hw/android.hardware.sensors@1.0-service
     class main
     user system
     group system readproc
diff --git a/sensors/1.0/default/convert.cpp b/sensors/1.0/default/convert.cpp
index acff6ca..748a963 100644
--- a/sensors/1.0/default/convert.cpp
+++ b/sensors/1.0/default/convert.cpp
@@ -25,8 +25,8 @@
 namespace implementation {
 
 void convertFromSensor(const sensor_t &src, SensorInfo *dst) {
-    dst->name = src.name;
-    dst->vendor = src.vendor;
+    dst->name = src.name == nullptr ? "" : src.name;
+    dst->vendor = src.vendor == nullptr ? "" : src.vendor;
     dst->version = src.version;
     dst->sensorHandle = src.handle;
     dst->type = (SensorType)src.type;
@@ -36,8 +36,8 @@
     dst->minDelay = src.minDelay;
     dst->fifoReservedEventCount = src.fifoReservedEventCount;
     dst->fifoMaxEventCount = src.fifoMaxEventCount;
-    dst->typeAsString = src.stringType;
-    dst->requiredPermission = src.requiredPermission;
+    dst->typeAsString = src.stringType == nullptr ? "" : src.stringType;
+    dst->requiredPermission = src.requiredPermission == nullptr ? "" : src.requiredPermission;
     dst->maxDelay = src.maxDelay;
     dst->flags = src.flags;
 }
@@ -75,6 +75,10 @@
         case SensorType::META_DATA:
         {
             dst->u.meta.what = (MetaDataEventType)src.meta_data.what;
+            // Legacy HALs contain the handle reference in the meta data field.
+            // Copy that over to the handle of the event. In legacy HALs this
+            // field was expected to be 0.
+            dst->sensorHandle = src.meta_data.sensor;
             break;
         }
 
@@ -212,8 +216,12 @@
   switch (src.sensorType) {
       case SensorType::META_DATA:
       {
+          // Legacy HALs expect the handle reference in the meta data field.
+          // Copy it over from the handle of the event.
           dst->meta_data.what = (int32_t)src.u.meta.what;
-          dst->meta_data.sensor = dst->sensor;
+          dst->meta_data.sensor = src.sensorHandle;
+          // Set the sensor handle to 0 to maintain compatibility.
+          dst->sensor = 0;
           break;
       }
 
diff --git a/sensors/1.0/default/service.cpp b/sensors/1.0/default/service.cpp
index 5bcfe4b..65f6d81 100644
--- a/sensors/1.0/default/service.cpp
+++ b/sensors/1.0/default/service.cpp
@@ -23,5 +23,9 @@
 using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-    return defaultPassthroughServiceImplementation<ISensors>();
+    /* Sensors framework service needs at least two threads.
+     * One thread blocks on a "poll"
+     * The second thread is needed for all other HAL methods.
+     */
+    return defaultPassthroughServiceImplementation<ISensors>(2);
 }
diff --git a/sensors/1.0/vts/Android.mk b/sensors/1.0/vts/Android.mk
deleted file mode 100644
index e22fba7..0000000
--- a/sensors/1.0/vts/Android.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-# include hidl test makefiles
-include $(LOCAL_PATH)/functional/vts/testcases/hal/sensors/hidl/Android.mk
diff --git a/sensors/1.0/vts/Sensors.vts b/sensors/1.0/vts/Sensors.vts
deleted file mode 100644
index 9e90755..0000000
--- a/sensors/1.0/vts/Sensors.vts
+++ /dev/null
@@ -1,171 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISensors"
-
-package: "android.hardware.sensors"
-
-import: "android.hardware.sensors@1.0::types"
-
-interface: {
-    api: {
-        name: "getSensorsList"
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::sensors::V1_0::SensorInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "setOperationMode"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::Result"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::OperationMode"
-        }
-    }
-
-    api: {
-        name: "activate"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::Result"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "poll"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::Result"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::sensors::V1_0::Event"
-            }
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::sensors::V1_0::SensorInfo"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "batch"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::Result"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int64_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int64_t"
-        }
-    }
-
-    api: {
-        name: "flush"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::Result"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "injectSensorData"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::Result"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::sensors::V1_0::Event"
-        }
-    }
-
-    api: {
-        name: "registerDirectChannel"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::Result"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::sensors::V1_0::SharedMemInfo"
-        }
-    }
-
-    api: {
-        name: "unregisterDirectChannel"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::Result"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "configDirectReport"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::Result"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::sensors::V1_0::RateLevel"
-        }
-    }
-
-}
diff --git a/sensors/1.0/vts/functional/Android.bp b/sensors/1.0/vts/functional/Android.bp
index 9ca6230..c2889c5 100644
--- a/sensors/1.0/vts/functional/Android.bp
+++ b/sensors/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "sensors_hidl_hal_test",
+    name: "VtsHalSensorsV1_0TargetTest",
     gtest: true,
-    srcs: ["sensors_hidl_hal_test.cpp"],
+    srcs: ["VtsHalSensorsV1_0TargetTest.cpp"],
     shared_libs: [
         "android.hardware.sensors@1.0",
         "libcutils",
diff --git a/sensors/1.0/vts/functional/sensors_hidl_hal_test.cpp b/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp
similarity index 99%
rename from sensors/1.0/vts/functional/sensors_hidl_hal_test.cpp
rename to sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp
index 194afc2..9a71745 100644
--- a/sensors/1.0/vts/functional/sensors_hidl_hal_test.cpp
+++ b/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp
@@ -80,7 +80,7 @@
 };
 
 void SensorsHidlEnvironment::SetUp() {
-  sensors = ISensors::getService(false);
+  sensors = ISensors::getService();
   ALOGI_IF(sensors, "sensors is not nullptr, %p", sensors.get());
   ASSERT_NE(sensors, nullptr);
 
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/__init__.py b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/__init__.py
+++ /dev/null
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/Android.mk b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/__init__.py b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/__init__.py
+++ /dev/null
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/Android.mk b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/Android.mk
deleted file mode 100644
index 79f8f7a..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := SensorsHidlTest
-VTS_CONFIG_SRC_DIR := testcases/hal/sensors/hidl/host
-include test/vts/tools/build/Android.host_config.mk
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/AndroidTest.xml b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/AndroidTest.xml
deleted file mode 100644
index 6e40610..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/AndroidTest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS HAL sensors test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="cleanup" value="true" />
-        <option name="push" value="spec/hardware/interfaces/sensors/1.0/vts/Sensors.vts->/data/local/tmp/spec/Sensors.vts" />
-        <option name="push" value="spec/hardware/interfaces/sensors/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="SensorsHidlTest" />
-        <option name="test-case-path" value="vts/testcases/hal/sensors/hidl/host/SensorsHidlTest" />
-        <option name="test-timeout" value="3m" />
-    </test>
-</configuration>
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/SensorsHidlTest.py b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/SensorsHidlTest.py
deleted file mode 100644
index db210d9..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/SensorsHidlTest.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python3.4
-#
-# 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.
-#
-
-import logging
-import time
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test_with_webdb
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.profiling import profiling_utils
-
-
-class SensorsHidlTest(base_test_with_webdb.BaseTestWithWebDbClass):
-    """Host testcase class for the SENSORS HIDL HAL.
-
-    This class set-up/tear-down the webDB host test framwork and contains host test cases for
-    sensors HIDL HAL.
-    """
-
-    def setUpClass(self):
-        """Creates a mirror and turns on the framework-layer SENSORS service."""
-        self.dut = self.registerController(android_device)[0]
-
-        self.dut.shell.InvokeTerminal("one")
-        self.dut.shell.one.Execute("setenforce 0")  # SELinux permissive mode
-
-        # Test using the binderized mode
-        self.dut.shell.one.Execute(
-            "setprop vts.hal.vts.hidl.get_stub true")
-
-        self.dut.hal.InitHidlHal(
-            target_type="sensors",
-            target_basepaths=self.dut.libPaths,
-            target_version=1.0,
-            target_package="android.hardware.sensors",
-            target_component_name="ISensors",
-            hw_binder_service_name=None,
-            bits=64 if self.dut.is64Bit else 32)
-
-    def tearDownClass(self):
-        """ If profiling is enabled for the test, collect the profiling data
-            and disable profiling after the test is done.
-        """
-        if self.enable_profiling:
-            self.ProcessAndUploadTraceData()
-
-    def setUpTest(self):
-        if self.enable_profiling:
-            profiling_utils.EnableVTSProfiling(self.dut.shell.one)
-
-    def tearDownTest(self):
-        if self.enable_profiling:
-            profiling_trace_path = getattr(
-                self, self.VTS_PROFILING_TRACING_PATH, "")
-            self.ProcessTraceDataForTestCase(self.dut, profiling_trace_path)
-            profiling_utils.DisableVTSProfiling(self.dut.shell.one)
-
-    def testSensorsBasic(self):
-        """Test the basic operation of test framework and sensor HIDL HAL
-
-        This test obtains predefined enum values via sensors HIDL HAL host test framework and
-        compares them to known values as a sanity check to make sure both sensors HAL
-        and the test framework are working properly.
-        """
-        sensors_types = self.dut.hal.sensors.GetHidlTypeInterface("types")
-        logging.info("sensors_types: %s", sensors_types)
-        logging.info("OK: %s", sensors_types.OK)
-        logging.info("BAD_VALUE: %s", sensors_types.BAD_VALUE)
-        logging.info("PERMISSION_DENIED: %s", sensors_types.PERMISSION_DENIED)
-        logging.info("INVALID_OPERATION: %s", sensors_types.INVALID_OPERATION)
-        asserts.assertEqual(sensors_types.OK, 0);
-        asserts.assertEqual(sensors_types.BAD_VALUE, 1);
-
-        logging.info("sensor types:")
-        logging.info("SENSOR_TYPE_ACCELEROMETER: %s", sensors_types.SENSOR_TYPE_ACCELEROMETER)
-        logging.info("SENSOR_TYPE_GEOMAGNETIC_FIELD: %s", sensors_types.SENSOR_TYPE_GEOMAGNETIC_FIELD)
-        logging.info("SENSOR_TYPE_GYROSCOPE: %s", sensors_types.SENSOR_TYPE_GYROSCOPE)
-        asserts.assertEqual(sensors_types.SENSOR_TYPE_ACCELEROMETER, 1);
-        asserts.assertEqual(sensors_types.SENSOR_TYPE_GEOMAGNETIC_FIELD, 2);
-        asserts.assertEqual(sensors_types.SENSOR_TYPE_GYROSCOPE, 4);
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/__init__.py b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/__init__.py
+++ /dev/null
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host_profiling/Android.mk b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host_profiling/Android.mk
deleted file mode 100644
index 6029cc0..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := SensorsHidlProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/sensors/hidl/host_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host_profiling/AndroidTest.xml b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host_profiling/AndroidTest.xml
deleted file mode 100644
index c056d90..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS HAL sensors test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="cleanup" value="true" />
-        <option name="push" value="spec/hardware/interfaces/sensors/1.0/vts/Sensors.vts->/data/local/tmp/spec/Sensors.vts" />
-        <option name="push" value="spec/hardware/interfaces/sensors/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="SensorsHidlProfilingTest" />
-        <option name="test-case-path" value="vts/testcases/hal/sensors/hidl/host/SensorsHidlTest" />
-        <option name="test-timeout" value="3m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target/Android.mk b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target/Android.mk
deleted file mode 100644
index c71a661..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := SensorsHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/sensors/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target/AndroidTest.xml b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target/AndroidTest.xml
deleted file mode 100644
index 6329d5d..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS sensors HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="SensorsHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/sensors_hidl_hal_test/sensors_hidl_hal_test,
-            _64bit::DATA/nativetest64/sensors_hidl_hal_test/sensors_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="binary-test-disable-framework" value="true" />
-        <option name="test-timeout" value="10m" />
-    </test>
-</configuration>
-
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target_profiling/Android.mk b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target_profiling/Android.mk
deleted file mode 100644
index 1b81381..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := SensorsHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/sensors/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target_profiling/AndroidTest.xml b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 80e46b7..0000000
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS sensors HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="SensorsHidlTargetProfilingTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/sensors_hidl_hal_test/sensors_hidl_hal_test,
-            _64bit::DATA/nativetest64/sensors_hidl_hal_test/sensors_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="binary-test-disable-framework" value="true" />
-        <option name="test-timeout" value="10m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
-
diff --git a/sensors/1.0/vts/types.vts b/sensors/1.0/vts/types.vts
deleted file mode 100644
index 1b48916..0000000
--- a/sensors/1.0/vts/types.vts
+++ /dev/null
@@ -1,900 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.sensors"
-
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::Result"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OK"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "PERMISSION_DENIED"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "NO_MEMORY"
-        scalar_value: {
-            int32_t: -12
-        }
-        enumerator: "BAD_VALUE"
-        scalar_value: {
-            int32_t: -22
-        }
-        enumerator: "INVALID_OPERATION"
-        scalar_value: {
-            int32_t: -38
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::OperationMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NORMAL"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "DATA_INJECTION"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::SensorType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "META_DATA"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ACCELEROMETER"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "MAGNETIC_FIELD"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "ORIENTATION"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "GYROSCOPE"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "LIGHT"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "PRESSURE"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "TEMPERATURE"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "PROXIMITY"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "GRAVITY"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "LINEAR_ACCELERATION"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "ROTATION_VECTOR"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "RELATIVE_HUMIDITY"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "AMBIENT_TEMPERATURE"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "MAGNETIC_FIELD_UNCALIBRATED"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "GAME_ROTATION_VECTOR"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "GYROSCOPE_UNCALIBRATED"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "SIGNIFICANT_MOTION"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "STEP_DETECTOR"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "STEP_COUNTER"
-        scalar_value: {
-            int32_t: 19
-        }
-        enumerator: "GEOMAGNETIC_ROTATION_VECTOR"
-        scalar_value: {
-            int32_t: 20
-        }
-        enumerator: "HEART_RATE"
-        scalar_value: {
-            int32_t: 21
-        }
-        enumerator: "TILT_DETECTOR"
-        scalar_value: {
-            int32_t: 22
-        }
-        enumerator: "WAKE_GESTURE"
-        scalar_value: {
-            int32_t: 23
-        }
-        enumerator: "GLANCE_GESTURE"
-        scalar_value: {
-            int32_t: 24
-        }
-        enumerator: "PICK_UP_GESTURE"
-        scalar_value: {
-            int32_t: 25
-        }
-        enumerator: "WRIST_TILT_GESTURE"
-        scalar_value: {
-            int32_t: 26
-        }
-        enumerator: "DEVICE_ORIENTATION"
-        scalar_value: {
-            int32_t: 27
-        }
-        enumerator: "POSE_6DOF"
-        scalar_value: {
-            int32_t: 28
-        }
-        enumerator: "STATIONARY_DETECT"
-        scalar_value: {
-            int32_t: 29
-        }
-        enumerator: "MOTION_DETECT"
-        scalar_value: {
-            int32_t: 30
-        }
-        enumerator: "HEART_BEAT"
-        scalar_value: {
-            int32_t: 31
-        }
-        enumerator: "DYNAMIC_SENSOR_META"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "ADDITIONAL_INFO"
-        scalar_value: {
-            int32_t: 33
-        }
-        enumerator: "LOW_LATENCY_OFFBODY_DETECT"
-        scalar_value: {
-            int32_t: 34
-        }
-        enumerator: "ACCELEROMETER_UNCALIBRATED"
-        scalar_value: {
-            int32_t: 35
-        }
-        enumerator: "DEVICE_PRIVATE_BASE"
-        scalar_value: {
-            int32_t: 65536
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::SensorFlagBits"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "WAKE_UP"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "CONTINUOUS_MODE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "ON_CHANGE_MODE"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "ONE_SHOT_MODE"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "SPECIAL_REPORTING_MODE"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "DATA_INJECTION"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "DYNAMIC_SENSOR"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "ADDITIONAL_INFO"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "DIRECT_CHANNEL_ASHMEM"
-        scalar_value: {
-            uint32_t: 1024
-        }
-        enumerator: "DIRECT_CHANNEL_GRALLOC"
-        scalar_value: {
-            uint32_t: 2048
-        }
-        enumerator: "MASK_REPORTING_MODE"
-        scalar_value: {
-            uint32_t: 14
-        }
-        enumerator: "MASK_DIRECT_REPORT"
-        scalar_value: {
-            uint32_t: 896
-        }
-        enumerator: "MASK_DIRECT_CHANNEL"
-        scalar_value: {
-            uint32_t: 3072
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::SensorFlagShift"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint8_t"
-
-        enumerator: "REPORTING_MODE"
-        scalar_value: {
-            uint8_t: 1
-        }
-        enumerator: "DATA_INJECTION"
-        scalar_value: {
-            uint8_t: 4
-        }
-        enumerator: "DYNAMIC_SENSOR"
-        scalar_value: {
-            uint8_t: 5
-        }
-        enumerator: "ADDITIONAL_INFO"
-        scalar_value: {
-            uint8_t: 6
-        }
-        enumerator: "DIRECT_REPORT"
-        scalar_value: {
-            uint8_t: 7
-        }
-        enumerator: "DIRECT_CHANNEL"
-        scalar_value: {
-            uint8_t: 10
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::SensorInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sensorHandle"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "vendor"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "version"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::sensors::V1_0::SensorType"
-    }
-    struct_value: {
-        name: "typeAsString"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "maxRange"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "resolution"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "power"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "minDelay"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "fifoReservedEventCount"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "fifoMaxEventCount"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "requiredPermission"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "maxDelay"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "flags"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::sensors::V1_0::SensorFlagBits"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::SensorStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int8_t"
-
-        enumerator: "NO_CONTACT"
-        scalar_value: {
-            int8_t: -1
-        }
-        enumerator: "UNRELIABLE"
-        scalar_value: {
-            int8_t: 0
-        }
-        enumerator: "ACCURACY_LOW"
-        scalar_value: {
-            int8_t: 1
-        }
-        enumerator: "ACCURACY_MEDIUM"
-        scalar_value: {
-            int8_t: 2
-        }
-        enumerator: "ACCURACY_HIGH"
-        scalar_value: {
-            int8_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::Vec3"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "x"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "y"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "z"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "status"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::sensors::V1_0::SensorStatus"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::Vec4"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "x"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "y"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "z"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "w"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::Uncal"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "x"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "y"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "z"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "x_bias"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "y_bias"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "z_bias"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::HeartRate"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "bpm"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "status"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::sensors::V1_0::SensorStatus"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::MetaDataEventType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "META_DATA_FLUSH_COMPLETE"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::MetaData"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "what"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::sensors::V1_0::MetaDataEventType"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::DynamicSensorInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "connected"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "sensorHandle"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "uuid"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 16
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::AdditionalInfoType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "AINFO_BEGIN"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "AINFO_END"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "AINFO_UNTRACKED_DELAY"
-        scalar_value: {
-            uint32_t: 65536
-        }
-        enumerator: "AINFO_INTERNAL_TEMPERATURE"
-        scalar_value: {
-            uint32_t: 65537
-        }
-        enumerator: "AINFO_VEC3_CALIBRATION"
-        scalar_value: {
-            uint32_t: 65538
-        }
-        enumerator: "AINFO_SENSOR_PLACEMENT"
-        scalar_value: {
-            uint32_t: 65539
-        }
-        enumerator: "AINFO_SAMPLING"
-        scalar_value: {
-            uint32_t: 65540
-        }
-        enumerator: "AINFO_CHANNEL_NOISE"
-        scalar_value: {
-            uint32_t: 131072
-        }
-        enumerator: "AINFO_CHANNEL_SAMPLER"
-        scalar_value: {
-            uint32_t: 131073
-        }
-        enumerator: "AINFO_CHANNEL_FILTER"
-        scalar_value: {
-            uint32_t: 131074
-        }
-        enumerator: "AINFO_CHANNEL_LINEAR_TRANSFORM"
-        scalar_value: {
-            uint32_t: 131075
-        }
-        enumerator: "AINFO_CHANNEL_NONLINEAR_MAP"
-        scalar_value: {
-            uint32_t: 131076
-        }
-        enumerator: "AINFO_CHANNEL_RESAMPLER"
-        scalar_value: {
-            uint32_t: 131077
-        }
-        enumerator: "AINFO_LOCAL_GEOMAGNETIC_FIELD"
-        scalar_value: {
-            uint32_t: 196608
-        }
-        enumerator: "AINFO_LOCAL_GRAVITY"
-        scalar_value: {
-            uint32_t: 196609
-        }
-        enumerator: "AINFO_DOCK_STATE"
-        scalar_value: {
-            uint32_t: 196610
-        }
-        enumerator: "AINFO_HIGH_PERFORMANCE_MODE"
-        scalar_value: {
-            uint32_t: 196611
-        }
-        enumerator: "AINFO_MAGNETIC_FIELD_CALIBRATION"
-        scalar_value: {
-            uint32_t: 196612
-        }
-        enumerator: "AINFO_CUSTOM_START"
-        scalar_value: {
-            uint32_t: 268435456
-        }
-        enumerator: "AINFO_DEBUGGING_START"
-        scalar_value: {
-            uint32_t: 1073741824
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::AdditionalInfo"
-    type: TYPE_STRUCT
-    sub_struct: {
-        name: "::android::hardware::sensors::V1_0::AdditionalInfo::Payload"
-        type: TYPE_UNION
-        union_value: {
-            name: "data_int32"
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 14
-                type: TYPE_SCALAR
-                scalar_type: "int32_t"
-            }
-        }
-        union_value: {
-            name: "data_float"
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 14
-                type: TYPE_SCALAR
-                scalar_type: "float_t"
-            }
-        }
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::sensors::V1_0::AdditionalInfoType"
-    }
-    struct_value: {
-        name: "serial"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "u"
-        type: TYPE_UNION
-        predefined_type: "::android::hardware::sensors::V1_0::AdditionalInfo::Payload"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::EventPayload"
-    type: TYPE_UNION
-    union_value: {
-        name: "vec3"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::sensors::V1_0::Vec3"
-    }
-    union_value: {
-        name: "vec4"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::sensors::V1_0::Vec4"
-    }
-    union_value: {
-        name: "uncal"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::sensors::V1_0::Uncal"
-    }
-    union_value: {
-        name: "meta"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::sensors::V1_0::MetaData"
-    }
-    union_value: {
-        name: "scalar"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    union_value: {
-        name: "stepCount"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    union_value: {
-        name: "heartRate"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::sensors::V1_0::HeartRate"
-    }
-    union_value: {
-        name: "pose6DOF"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 15
-            type: TYPE_SCALAR
-            scalar_type: "float_t"
-        }
-    }
-    union_value: {
-        name: "dynamic"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::sensors::V1_0::DynamicSensorInfo"
-    }
-    union_value: {
-        name: "additional"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::sensors::V1_0::AdditionalInfo"
-    }
-    union_value: {
-        name: "data"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 16
-            type: TYPE_SCALAR
-            scalar_type: "float_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::Event"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "timestamp"
-        type: TYPE_SCALAR
-        scalar_type: "int64_t"
-    }
-    struct_value: {
-        name: "sensorHandle"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "sensorType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::sensors::V1_0::SensorType"
-    }
-    struct_value: {
-        name: "u"
-        type: TYPE_UNION
-        predefined_type: "::android::hardware::sensors::V1_0::EventPayload"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::RateLevel"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STOP"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "NORMAL"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "FAST"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "VERY_FAST"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::SharedMemType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ASHMEM"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "GRALLOC"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::SharedMemFormat"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SENSORS_EVENT"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::SensorsEventFormatOffset"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint16_t"
-
-        enumerator: "SIZE_FIELD"
-        scalar_value: {
-            uint16_t: 0
-        }
-        enumerator: "REPORT_TOKEN"
-        scalar_value: {
-            uint16_t: 4
-        }
-        enumerator: "SENSOR_TYPE"
-        scalar_value: {
-            uint16_t: 8
-        }
-        enumerator: "ATOMIC_COUNTER"
-        scalar_value: {
-            uint16_t: 12
-        }
-        enumerator: "TIMESTAMP"
-        scalar_value: {
-            uint16_t: 16
-        }
-        enumerator: "DATA"
-        scalar_value: {
-            uint16_t: 24
-        }
-        enumerator: "RESERVED"
-        scalar_value: {
-            uint16_t: 88
-        }
-        enumerator: "TOTAL_LENGTH"
-        scalar_value: {
-            uint16_t: 104
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::sensors::V1_0::SharedMemInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::sensors::V1_0::SharedMemType"
-    }
-    struct_value: {
-        name: "format"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::sensors::V1_0::SharedMemFormat"
-    }
-    struct_value: {
-        name: "size"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "memoryHandle"
-        type: TYPE_HANDLE
-    }
-}
-
diff --git a/soundtrigger/2.0/Android.bp b/soundtrigger/2.0/Android.bp
index 5b50f39..4d2bb1a 100644
--- a/soundtrigger/2.0/Android.bp
+++ b/soundtrigger/2.0/Android.bp
@@ -1,13 +1,20 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.soundtrigger@2.0_hal",
+    srcs: [
+        "types.hal",
+        "ISoundTriggerHw.hal",
+        "ISoundTriggerHwCallback.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.soundtrigger@2.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0",
     srcs: [
-        "types.hal",
-        "ISoundTriggerHw.hal",
-        "ISoundTriggerHwCallback.hal",
+        ":android.hardware.soundtrigger@2.0_hal",
     ],
     out: [
         "android/hardware/soundtrigger/2.0/types.cpp",
@@ -21,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0",
     srcs: [
-        "types.hal",
-        "ISoundTriggerHw.hal",
-        "ISoundTriggerHwCallback.hal",
+        ":android.hardware.soundtrigger@2.0_hal",
     ],
     out: [
         "android/hardware/soundtrigger/2.0/types.h",
@@ -64,159 +69,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.soundtrigger.vts.driver@2.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/soundtrigger/2.0/ $(genDir)/android/hardware/soundtrigger/2.0/",
-    srcs: [
-        "types.hal",
-        "ISoundTriggerHw.hal",
-        "ISoundTriggerHwCallback.hal",
-    ],
-    out: [
-        "android/hardware/soundtrigger/2.0/types.vts.cpp",
-        "android/hardware/soundtrigger/2.0/SoundTriggerHw.vts.cpp",
-        "android/hardware/soundtrigger/2.0/SoundTriggerHwCallback.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.soundtrigger.vts.driver@2.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/soundtrigger/2.0/ $(genDir)/android/hardware/soundtrigger/2.0/",
-    srcs: [
-        "types.hal",
-        "ISoundTriggerHw.hal",
-        "ISoundTriggerHwCallback.hal",
-    ],
-    out: [
-        "android/hardware/soundtrigger/2.0/types.vts.h",
-        "android/hardware/soundtrigger/2.0/SoundTriggerHw.vts.h",
-        "android/hardware/soundtrigger/2.0/SoundTriggerHwCallback.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.soundtrigger.vts.driver@2.0",
-    generated_sources: ["android.hardware.soundtrigger.vts.driver@2.0_genc++"],
-    generated_headers: ["android.hardware.soundtrigger.vts.driver@2.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.soundtrigger.vts.driver@2.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hardware.audio.common@2.0",
-        "android.hidl.base@1.0",
-        "android.hardware.soundtrigger@2.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hardware.audio.common@2.0",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.soundtrigger@2.0-ISoundTriggerHw-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/soundtrigger/2.0/ $(genDir)/android/hardware/soundtrigger/2.0/",
-    srcs: [
-        "ISoundTriggerHw.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/soundtrigger/2.0/SoundTriggerHw.vts.cpp",
-        "android/hardware/soundtrigger/2.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.soundtrigger@2.0-ISoundTriggerHw-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/soundtrigger/2.0/ $(genDir)/android/hardware/soundtrigger/2.0/",
-    srcs: [
-        "ISoundTriggerHw.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/soundtrigger/2.0/SoundTriggerHw.vts.h",
-        "android/hardware/soundtrigger/2.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.soundtrigger@2.0-ISoundTriggerHw-vts.profiler",
-    generated_sources: ["android.hardware.soundtrigger@2.0-ISoundTriggerHw-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.soundtrigger@2.0-ISoundTriggerHw-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.soundtrigger@2.0-ISoundTriggerHw-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hardware.audio.common@2.0",
-        "android.hidl.base@1.0",
-        "android.hardware.soundtrigger@2.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.soundtrigger@2.0-ISoundTriggerHwCallback-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/soundtrigger/2.0/ $(genDir)/android/hardware/soundtrigger/2.0/",
-    srcs: [
-        "ISoundTriggerHwCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/soundtrigger/2.0/SoundTriggerHwCallback.vts.cpp",
-        "android/hardware/soundtrigger/2.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.soundtrigger@2.0-ISoundTriggerHwCallback-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/soundtrigger/2.0/ $(genDir)/android/hardware/soundtrigger/2.0/",
-    srcs: [
-        "ISoundTriggerHwCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/soundtrigger/2.0/SoundTriggerHwCallback.vts.h",
-        "android/hardware/soundtrigger/2.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.soundtrigger@2.0-ISoundTriggerHwCallback-vts.profiler",
-    generated_sources: ["android.hardware.soundtrigger@2.0-ISoundTriggerHwCallback-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.soundtrigger@2.0-ISoundTriggerHwCallback-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.soundtrigger@2.0-ISoundTriggerHwCallback-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hardware.audio.common@2.0",
-        "android.hidl.base@1.0",
-        "android.hardware.soundtrigger@2.0",
-    ],
-}
diff --git a/soundtrigger/2.0/default/Android.mk b/soundtrigger/2.0/default/Android.mk
index 498c54f..70c78e0 100644
--- a/soundtrigger/2.0/default/Android.mk
+++ b/soundtrigger/2.0/default/Android.mk
@@ -18,6 +18,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.soundtrigger@2.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     SoundTriggerHalImpl.cpp
diff --git a/soundtrigger/2.0/vts/functional/Android.bp b/soundtrigger/2.0/vts/functional/Android.bp
index 8abdf06..7e2e12a 100644
--- a/soundtrigger/2.0/vts/functional/Android.bp
+++ b/soundtrigger/2.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "soundtrigger_hidl_hal_test",
+    name: "VtsHalSoundtriggerV2_0TargetTest",
     gtest: true,
-    srcs: ["soundtrigger_hidl_hal_test.cpp"],
+    srcs: ["VtsHalSoundtriggerV2_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
diff --git a/soundtrigger/2.0/vts/functional/Android.mk b/soundtrigger/2.0/vts/functional/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/soundtrigger/2.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/soundtrigger/2.0/vts/functional/soundtrigger_hidl_hal_test.cpp b/soundtrigger/2.0/vts/functional/VtsHalSoundtriggerV2_0TargetTest.cpp
similarity index 100%
rename from soundtrigger/2.0/vts/functional/soundtrigger_hidl_hal_test.cpp
rename to soundtrigger/2.0/vts/functional/VtsHalSoundtriggerV2_0TargetTest.cpp
diff --git a/soundtrigger/2.0/vts/functional/vts/Android.mk b/soundtrigger/2.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/soundtrigger/2.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/Android.mk b/soundtrigger/2.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/hal/Android.mk b/soundtrigger/2.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/Android.mk b/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/Android.mk b/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/Android.mk b/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/Android.mk
deleted file mode 100644
index a99f4ce..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalSoundTriggerHidlTargetBasicTest
-VTS_CONFIG_SRC_DIR := testcases/hal/soundtrigger/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/AndroidTest.xml b/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/AndroidTest.xml
deleted file mode 100644
index ca8ecdb..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS sound trigger HIDL HAL's basic target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalSoundTriggerHidlTargetBasicTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/soundtrigger_hidl_hal_test/soundtrigger_hidl_hal_test,
-            _64bit::DATA/nativetest64/soundtrigger_hidl_hal_test/soundtrigger_hidl_hal_test,
-            "/>
-        <option name="test-config-path" value="vts/testcases/hal/soundtrigger/hidl/target/HalSoundTriggerHidlTargetBasicTest.config" />
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/HalSoundTriggerHidlTargetBasicTest.config b/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/HalSoundTriggerHidlTargetBasicTest.config
deleted file mode 100644
index 5c12d13..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/HalSoundTriggerHidlTargetBasicTest.config
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-    "use_gae_db": true,
-    "coverage": true,
-    "modules": [
-        {
-            "module_name": "system/lib/hw/sound_trigger.primary.bullhead",
-            "git_project": {
-                "name": "platform/vendor/lge/bullhead",
-                "path": "vendor/lge/bullhead"
-            }
-        },
-        {
-            "module_name": "system/lib/hw/sound_trigger.primary.angler",
-            "git_project": {
-                "name": "platform/vendor/huawei/angler",
-                "path": "vendor/huawei/angler"
-            }
-        },
-        {
-            "module_name": "system/lib/hw/sound_trigger.primary.marlin",
-            "git_project": {
-                "name": "platform/vendor/google_devices/marlin",
-                "path": "vendor/google_devices/marlin"
-            }
-        },
-        {
-            "module_name": "system/lib/hw/sound_trigger.primary.sailfish",
-            "git_project": {
-                "name": "platform/vendor/google_devices/marlin",
-                "path": "vendor/google_devices/marlin"
-            }
-        },
-        {
-            "module_name": "system/lib/hw/android.hardware.soundtrigger@2.0-impl",
-            "git_project": {
-                "name": "platform/hardware/interfaces",
-                "path": "hardware/interfaces"
-            }
-        }
-    ]
-}
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target_profiling/Android.mk b/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target_profiling/Android.mk
deleted file mode 100644
index fc0f9c4..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalSoundTriggerHidlTargetBasicProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/soundtrigger/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target_profiling/AndroidTest.xml b/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index e95a406..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS sound trigger HIDL HAL's basic target-side, profiling test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="HalSoundTriggerHidlTargetBasicTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/soundtrigger_hidl_hal_test/soundtrigger_hidl_hal_test,
-            _64bit::DATA/nativetest64/soundtrigger_hidl_hal_test/soundtrigger_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/tests/Android.bp b/tests/Android.bp
index 8b3e8b1..040a6fb 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -4,6 +4,7 @@
     "bar/1.0/default",
     "baz/1.0",
     "expression/1.0",
+    "extension/light/2.0",
     "foo/1.0",
     "foo/1.0/default",
     "foo/1.0/default/lib",
@@ -17,4 +18,7 @@
     "pointer/1.0",
     "pointer/1.0/default",
     "pointer/1.0/default/lib",
+    "versioning/1.0",
+    "versioning/2.2",
+    "versioning/2.3",
 ]
diff --git a/tests/bar/1.0/Android.bp b/tests/bar/1.0/Android.bp
index fbec8d1..694804c 100644
--- a/tests/bar/1.0/Android.bp
+++ b/tests/bar/1.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.tests.bar@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.bar@1.0",
+filegroup {
+    name: "android.hardware.tests.bar@1.0_hal",
     srcs: [
         "types.hal",
         "IBar.hal",
@@ -12,6 +10,15 @@
         "IImportRules.hal",
         "IImportTypes.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.tests.bar@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.bar@1.0",
+    srcs: [
+        ":android.hardware.tests.bar@1.0_hal",
+    ],
     out: [
         "android/hardware/tests/bar/1.0/types.cpp",
         "android/hardware/tests/bar/1.0/BarAll.cpp",
@@ -27,12 +34,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.bar@1.0",
     srcs: [
-        "types.hal",
-        "IBar.hal",
-        "IComplicated.hal",
-        "IFooCallback.hal",
-        "IImportRules.hal",
-        "IImportTypes.hal",
+        ":android.hardware.tests.bar@1.0_hal",
     ],
     out: [
         "android/hardware/tests/bar/1.0/types.h",
diff --git a/tests/bar/1.0/default/Android.bp b/tests/bar/1.0/default/Android.bp
index 7e349c2..2c79357 100644
--- a/tests/bar/1.0/default/Android.bp
+++ b/tests/bar/1.0/default/Android.bp
@@ -3,6 +3,7 @@
 cc_library_shared {
     name: "android.hardware.tests.bar@1.0-impl",
     relative_install_path: "hw",
+    proprietary: true,
     srcs: [
         "Bar.cpp",
         "ImportTypes.cpp",
diff --git a/tests/baz/1.0/Android.bp b/tests/baz/1.0/Android.bp
index 4106838..7939444 100644
--- a/tests/baz/1.0/Android.bp
+++ b/tests/baz/1.0/Android.bp
@@ -1,15 +1,22 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.tests.baz@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.baz@1.0",
+filegroup {
+    name: "android.hardware.tests.baz@1.0_hal",
     srcs: [
         "types.hal",
         "IBase.hal",
         "IBaz.hal",
         "IBazCallback.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.tests.baz@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.baz@1.0",
+    srcs: [
+        ":android.hardware.tests.baz@1.0_hal",
+    ],
     out: [
         "android/hardware/tests/baz/1.0/types.cpp",
         "android/hardware/tests/baz/1.0/BaseAll.cpp",
@@ -23,10 +30,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.baz@1.0",
     srcs: [
-        "types.hal",
-        "IBase.hal",
-        "IBaz.hal",
-        "IBazCallback.hal",
+        ":android.hardware.tests.baz@1.0_hal",
     ],
     out: [
         "android/hardware/tests/baz/1.0/types.h",
diff --git a/tests/baz/1.0/Android.mk b/tests/baz/1.0/Android.mk
index 82ba3cb..40026ec 100644
--- a/tests/baz/1.0/Android.mk
+++ b/tests/baz/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tests.baz@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -85,7 +85,7 @@
 LOCAL_MODULE := android.hardware.tests.baz@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/tests/expression/1.0/Android.bp b/tests/expression/1.0/Android.bp
index bb7aedd..5279503 100644
--- a/tests/expression/1.0/Android.bp
+++ b/tests/expression/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.tests.expression@1.0_hal",
+    srcs: [
+        "IExpression.hal",
+        "IExpressionExt.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.tests.expression@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.expression@1.0",
     srcs: [
-        "IExpression.hal",
-        "IExpressionExt.hal",
+        ":android.hardware.tests.expression@1.0_hal",
     ],
     out: [
         "android/hardware/tests/expression/1.0/ExpressionAll.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.expression@1.0",
     srcs: [
-        "IExpression.hal",
-        "IExpressionExt.hal",
+        ":android.hardware.tests.expression@1.0_hal",
     ],
     out: [
         "android/hardware/tests/expression/1.0/IExpression.h",
diff --git a/tests/expression/1.0/Android.mk b/tests/expression/1.0/Android.mk
index 1c7da4b..6bc9390 100644
--- a/tests/expression/1.0/Android.mk
+++ b/tests/expression/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tests.expression@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -64,7 +64,7 @@
 LOCAL_MODULE := android.hardware.tests.expression@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/tests/extension/light/2.0/Android.bp b/tests/extension/light/2.0/Android.bp
new file mode 100644
index 0000000..5203da6
--- /dev/null
+++ b/tests/extension/light/2.0/Android.bp
@@ -0,0 +1,62 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.tests.extension.light@2.0_hal",
+    srcs: [
+        "types.hal",
+        "IExtLight.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.extension.light@2.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.extension.light@2.0",
+    srcs: [
+        ":android.hardware.tests.extension.light@2.0_hal",
+    ],
+    out: [
+        "android/hardware/tests/extension/light/2.0/types.cpp",
+        "android/hardware/tests/extension/light/2.0/ExtLightAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.extension.light@2.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.extension.light@2.0",
+    srcs: [
+        ":android.hardware.tests.extension.light@2.0_hal",
+    ],
+    out: [
+        "android/hardware/tests/extension/light/2.0/types.h",
+        "android/hardware/tests/extension/light/2.0/IExtLight.h",
+        "android/hardware/tests/extension/light/2.0/IHwExtLight.h",
+        "android/hardware/tests/extension/light/2.0/BnHwExtLight.h",
+        "android/hardware/tests/extension/light/2.0/BpHwExtLight.h",
+        "android/hardware/tests/extension/light/2.0/BsExtLight.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.tests.extension.light@2.0",
+    generated_sources: ["android.hardware.tests.extension.light@2.0_genc++"],
+    generated_headers: ["android.hardware.tests.extension.light@2.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.tests.extension.light@2.0_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hardware.light@2.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.light@2.0",
+    ],
+}
diff --git a/example/extension/light/2.0/Android.mk b/tests/extension/light/2.0/Android.mk
similarity index 76%
rename from example/extension/light/2.0/Android.mk
rename to tests/extension/light/2.0/Android.mk
index deb7a2a..16424a3 100644
--- a/example/extension/light/2.0/Android.mk
+++ b/tests/extension/light/2.0/Android.mk
@@ -5,10 +5,10 @@
 ################################################################################
 
 include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.example.extension.light@2.0-java
+LOCAL_MODULE := android.hardware.tests.extension.light@2.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -20,7 +20,7 @@
 #
 # Build types.hal (Default)
 #
-GEN := $(intermediates)/android/hardware/example/extension/light/V2_0/Default.java
+GEN := $(intermediates)/android/hardware/tests/extension/light/V2_0/Default.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -30,7 +30,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.example.extension.light@2.0::types.Default
+        android.hardware.tests.extension.light@2.0::types.Default
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -39,7 +39,7 @@
 #
 # Build types.hal (ExtBrightness)
 #
-GEN := $(intermediates)/android/hardware/example/extension/light/V2_0/ExtBrightness.java
+GEN := $(intermediates)/android/hardware/tests/extension/light/V2_0/ExtBrightness.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -49,7 +49,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.example.extension.light@2.0::types.ExtBrightness
+        android.hardware.tests.extension.light@2.0::types.ExtBrightness
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -58,7 +58,7 @@
 #
 # Build types.hal (ExtLightState)
 #
-GEN := $(intermediates)/android/hardware/example/extension/light/V2_0/ExtLightState.java
+GEN := $(intermediates)/android/hardware/tests/extension/light/V2_0/ExtLightState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -68,7 +68,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.example.extension.light@2.0::types.ExtLightState
+        android.hardware.tests.extension.light@2.0::types.ExtLightState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -77,7 +77,7 @@
 #
 # Build IExtLight.hal
 #
-GEN := $(intermediates)/android/hardware/example/extension/light/V2_0/IExtLight.java
+GEN := $(intermediates)/android/hardware/tests/extension/light/V2_0/IExtLight.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IExtLight.hal
@@ -89,7 +89,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.example.extension.light@2.0::IExtLight
+        android.hardware.tests.extension.light@2.0::IExtLight
 
 $(GEN): $(LOCAL_PATH)/IExtLight.hal
 	$(transform-generated-source)
@@ -100,10 +100,10 @@
 ################################################################################
 
 include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.example.extension.light@2.0-java-static
+LOCAL_MODULE := android.hardware.tests.extension.light@2.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -115,7 +115,7 @@
 #
 # Build types.hal (Default)
 #
-GEN := $(intermediates)/android/hardware/example/extension/light/V2_0/Default.java
+GEN := $(intermediates)/android/hardware/tests/extension/light/V2_0/Default.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -125,7 +125,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.example.extension.light@2.0::types.Default
+        android.hardware.tests.extension.light@2.0::types.Default
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -134,7 +134,7 @@
 #
 # Build types.hal (ExtBrightness)
 #
-GEN := $(intermediates)/android/hardware/example/extension/light/V2_0/ExtBrightness.java
+GEN := $(intermediates)/android/hardware/tests/extension/light/V2_0/ExtBrightness.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -144,7 +144,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.example.extension.light@2.0::types.ExtBrightness
+        android.hardware.tests.extension.light@2.0::types.ExtBrightness
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -153,7 +153,7 @@
 #
 # Build types.hal (ExtLightState)
 #
-GEN := $(intermediates)/android/hardware/example/extension/light/V2_0/ExtLightState.java
+GEN := $(intermediates)/android/hardware/tests/extension/light/V2_0/ExtLightState.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -163,7 +163,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.example.extension.light@2.0::types.ExtLightState
+        android.hardware.tests.extension.light@2.0::types.ExtLightState
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -172,7 +172,7 @@
 #
 # Build IExtLight.hal
 #
-GEN := $(intermediates)/android/hardware/example/extension/light/V2_0/IExtLight.java
+GEN := $(intermediates)/android/hardware/tests/extension/light/V2_0/IExtLight.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IExtLight.hal
@@ -184,7 +184,7 @@
         -Ljava \
         -randroid.hardware:hardware/interfaces \
         -randroid.hidl:system/libhidl/transport \
-        android.hardware.example.extension.light@2.0::IExtLight
+        android.hardware.tests.extension.light@2.0::IExtLight
 
 $(GEN): $(LOCAL_PATH)/IExtLight.hal
 	$(transform-generated-source)
diff --git a/example/extension/light/2.0/IExtLight.hal b/tests/extension/light/2.0/IExtLight.hal
similarity index 95%
rename from example/extension/light/2.0/IExtLight.hal
rename to tests/extension/light/2.0/IExtLight.hal
index f12a272..1515b86 100644
--- a/example/extension/light/2.0/IExtLight.hal
+++ b/tests/extension/light/2.0/IExtLight.hal
@@ -17,7 +17,7 @@
 // Would normally be 'vendor.example.extension.light@2.0' however, this is
 // a google extension example. A vendor extension should also live in the
 // vendor partition.
-package android.hardware.example.extension.light@2.0;
+package android.hardware.tests.extension.light@2.0;
 
 import android.hardware.light@2.0;
 
diff --git a/tests/extension/light/2.0/default/Android.mk b/tests/extension/light/2.0/default/Android.mk
new file mode 100644
index 0000000..4dee3ee
--- /dev/null
+++ b/tests/extension/light/2.0/default/Android.mk
@@ -0,0 +1,20 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.extension.light@2.0-service
+LOCAL_INIT_RC := android.hardware.tests.extension.light@2.0-service.rc
+LOCAL_PROPRIETARY_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_SRC_FILES := \
+    Light.cpp \
+    service.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    libutils \
+    android.hardware.light@2.0 \
+    android.hardware.tests.extension.light@2.0 \
+
+include $(BUILD_EXECUTABLE)
diff --git a/example/extension/light/2.0/default/Light.cpp b/tests/extension/light/2.0/default/Light.cpp
similarity index 97%
rename from example/extension/light/2.0/default/Light.cpp
rename to tests/extension/light/2.0/default/Light.cpp
index 2e56319..d941e73 100644
--- a/example/extension/light/2.0/default/Light.cpp
+++ b/tests/extension/light/2.0/default/Light.cpp
@@ -17,7 +17,7 @@
 
 namespace android {
 namespace hardware {
-namespace example {
+namespace tests {
 namespace extension {
 namespace light {
 namespace V2_0 {
@@ -66,6 +66,6 @@
 }  // namespace V2_0
 }  // namespace light
 }  // namespace extension
-}  // namespace example
+}  // namespace tests
 }  // namespace hardware
 }  // namespace android
diff --git a/example/extension/light/2.0/default/Light.h b/tests/extension/light/2.0/default/Light.h
similarity index 79%
rename from example/extension/light/2.0/default/Light.h
rename to tests/extension/light/2.0/default/Light.h
index e3b60df..dc2c5dd 100644
--- a/example/extension/light/2.0/default/Light.h
+++ b/tests/extension/light/2.0/default/Light.h
@@ -13,23 +13,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef ANDROID_HARDWARE_EXAMPLE_EXTENSION_LIGHT_V2_0_LIGHT_H
-#define ANDROID_HARDWARE_EXAMPLE_EXTENSION_LIGHT_V2_0_LIGHT_H
+#ifndef ANDROID_HARDWARE_TESTS_EXTENSION_LIGHT_V2_0_LIGHT_H
+#define ANDROID_HARDWARE_TESTS_EXTENSION_LIGHT_V2_0_LIGHT_H
 
-#include <android/hardware/example/extension/light/2.0/IExtLight.h>
+#include <android/hardware/tests/extension/light/2.0/IExtLight.h>
 #include <hidl/Status.h>
 
 #include <hidl/MQDescriptor.h>
 namespace android {
 namespace hardware {
-namespace example {
+namespace tests {
 namespace extension {
 namespace light {
 namespace V2_0 {
 namespace implementation {
 
-using ::android::hardware::example::extension::light::V2_0::ExtLightState;
-using ::android::hardware::example::extension::light::V2_0::IExtLight;
+using ::android::hardware::tests::extension::light::V2_0::ExtLightState;
+using ::android::hardware::tests::extension::light::V2_0::IExtLight;
 using ::android::hardware::light::V2_0::ILight;
 using ::android::hardware::light::V2_0::LightState;
 using ::android::hardware::light::V2_0::Status;
@@ -54,8 +54,8 @@
 }  // namespace V2_0
 }  // namespace light
 }  // namespace extension
-}  // namespace example
+}  // namespace tests
 }  // namespace hardware
 }  // namespace android
 
-#endif  // ANDROID_HARDWARE_EXAMPLE_EXTENSION_LIGHT_V2_0_LIGHT_H
+#endif  // ANDROID_HARDWARE_TESTS_EXTENSION_LIGHT_V2_0_LIGHT_H
diff --git a/tests/extension/light/2.0/default/android.hardware.tests.extension.light@2.0-service.rc b/tests/extension/light/2.0/default/android.hardware.tests.extension.light@2.0-service.rc
new file mode 100644
index 0000000..8f379ee
--- /dev/null
+++ b/tests/extension/light/2.0/default/android.hardware.tests.extension.light@2.0-service.rc
@@ -0,0 +1,4 @@
+service light-ext-2-0 /vendor/bin/hw/android.hardware.tests.extension.light@2.0-service
+    class hal
+    user system
+    group system
\ No newline at end of file
diff --git a/example/extension/light/2.0/default/service.cpp b/tests/extension/light/2.0/default/service.cpp
similarity index 84%
rename from example/extension/light/2.0/default/service.cpp
rename to tests/extension/light/2.0/default/service.cpp
index d3fb4de..4d839b2 100644
--- a/example/extension/light/2.0/default/service.cpp
+++ b/tests/extension/light/2.0/default/service.cpp
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#define LOG_TAG "android.hardware.light@2.0-service"
+#define LOG_TAG "android.hardware.tests.extension.light@2.0-service"
 
 #include <android/log.h>
 #include <hidl/HidlTransportSupport.h>
@@ -24,14 +24,12 @@
 using android::hardware::joinRpcThreadpool;
 using android::sp;
 
-// Generated HIDL files
 using android::hardware::light::V2_0::ILight;
+using android::hardware::tests::extension::light::V2_0::implementation::Light;
 
 int main() {
-    const char instance[] = "light";
-
     android::sp<ILight> service = new Light();
     configureRpcThreadpool(1, true /*callerWillJoin*/);
-    service->registerAsService(instance);
+    service->registerAsService();
     joinRpcThreadpool();
 }
diff --git a/example/extension/light/2.0/types.hal b/tests/extension/light/2.0/types.hal
similarity index 97%
rename from example/extension/light/2.0/types.hal
rename to tests/extension/light/2.0/types.hal
index 5be41bb..1b09479 100644
--- a/example/extension/light/2.0/types.hal
+++ b/tests/extension/light/2.0/types.hal
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.hardware.example.extension.light@2.0;
+package android.hardware.tests.extension.light@2.0;
 
 import android.hardware.light@2.0;
 
diff --git a/tests/foo/1.0/Android.bp b/tests/foo/1.0/Android.bp
index 8294c65..9572855 100644
--- a/tests/foo/1.0/Android.bp
+++ b/tests/foo/1.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.tests.foo@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.foo@1.0",
+filegroup {
+    name: "android.hardware.tests.foo@1.0_hal",
     srcs: [
         "types.hal",
         "IFoo.hal",
@@ -12,6 +10,15 @@
         "ISimple.hal",
         "ITheirTypes.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.tests.foo@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.foo@1.0",
+    srcs: [
+        ":android.hardware.tests.foo@1.0_hal",
+    ],
     out: [
         "android/hardware/tests/foo/1.0/types.cpp",
         "android/hardware/tests/foo/1.0/FooAll.cpp",
@@ -27,12 +34,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.foo@1.0",
     srcs: [
-        "types.hal",
-        "IFoo.hal",
-        "IFooCallback.hal",
-        "IMyTypes.hal",
-        "ISimple.hal",
-        "ITheirTypes.hal",
+        ":android.hardware.tests.foo@1.0_hal",
     ],
     out: [
         "android/hardware/tests/foo/1.0/types.h",
diff --git a/tests/foo/1.0/default/Android.bp b/tests/foo/1.0/default/Android.bp
index 952f25d..f4a80d5 100644
--- a/tests/foo/1.0/default/Android.bp
+++ b/tests/foo/1.0/default/Android.bp
@@ -3,6 +3,7 @@
 cc_library_shared {
     name: "android.hardware.tests.foo@1.0-impl",
     relative_install_path: "hw",
+    proprietary: true,
     srcs: [
         "Foo.cpp",
     ],
diff --git a/tests/inheritance/1.0/Android.bp b/tests/inheritance/1.0/Android.bp
index 4389147..f50aee4 100644
--- a/tests/inheritance/1.0/Android.bp
+++ b/tests/inheritance/1.0/Android.bp
@@ -1,15 +1,22 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.tests.inheritance@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.inheritance@1.0",
+filegroup {
+    name: "android.hardware.tests.inheritance@1.0_hal",
     srcs: [
         "IChild.hal",
         "IFetcher.hal",
         "IGrandparent.hal",
         "IParent.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.tests.inheritance@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.inheritance@1.0",
+    srcs: [
+        ":android.hardware.tests.inheritance@1.0_hal",
+    ],
     out: [
         "android/hardware/tests/inheritance/1.0/ChildAll.cpp",
         "android/hardware/tests/inheritance/1.0/FetcherAll.cpp",
@@ -23,10 +30,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.inheritance@1.0",
     srcs: [
-        "IChild.hal",
-        "IFetcher.hal",
-        "IGrandparent.hal",
-        "IParent.hal",
+        ":android.hardware.tests.inheritance@1.0_hal",
     ],
     out: [
         "android/hardware/tests/inheritance/1.0/IChild.h",
diff --git a/tests/inheritance/1.0/Android.mk b/tests/inheritance/1.0/Android.mk
index 8c1b1c8..21aac00 100644
--- a/tests/inheritance/1.0/Android.mk
+++ b/tests/inheritance/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tests.inheritance@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -110,7 +110,7 @@
 LOCAL_MODULE := android.hardware.tests.inheritance@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/tests/inheritance/1.0/default/Android.bp b/tests/inheritance/1.0/default/Android.bp
index 638d3a4..090c36e 100644
--- a/tests/inheritance/1.0/default/Android.bp
+++ b/tests/inheritance/1.0/default/Android.bp
@@ -3,6 +3,7 @@
 cc_library_shared {
     name: "android.hardware.tests.inheritance@1.0-impl",
     relative_install_path: "hw",
+    proprietary: true,
     srcs: [
         "Fetcher.cpp",
         "Parent.cpp",
diff --git a/tests/libhwbinder/1.0/Android.bp b/tests/libhwbinder/1.0/Android.bp
index 8c27225..580e961 100644
--- a/tests/libhwbinder/1.0/Android.bp
+++ b/tests/libhwbinder/1.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.tests.libhwbinder@1.0_hal",
+    srcs: [
+        "IBenchmark.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.tests.libhwbinder@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.libhwbinder@1.0",
     srcs: [
-        "IBenchmark.hal",
+        ":android.hardware.tests.libhwbinder@1.0_hal",
     ],
     out: [
         "android/hardware/tests/libhwbinder/1.0/BenchmarkAll.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.libhwbinder@1.0",
     srcs: [
-        "IBenchmark.hal",
+        ":android.hardware.tests.libhwbinder@1.0_hal",
     ],
     out: [
         "android/hardware/tests/libhwbinder/1.0/IBenchmark.h",
diff --git a/tests/libhwbinder/1.0/Android.mk b/tests/libhwbinder/1.0/Android.mk
index ae873af..2ee26d6 100644
--- a/tests/libhwbinder/1.0/Android.mk
+++ b/tests/libhwbinder/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tests.libhwbinder@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -43,7 +43,7 @@
 LOCAL_MODULE := android.hardware.tests.libhwbinder@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/tests/libhwbinder/1.0/default/Android.bp b/tests/libhwbinder/1.0/default/Android.bp
index 73dcc61..0edabfc 100644
--- a/tests/libhwbinder/1.0/default/Android.bp
+++ b/tests/libhwbinder/1.0/default/Android.bp
@@ -1,6 +1,7 @@
 cc_library_shared {
     name: "android.hardware.tests.libhwbinder@1.0-impl",
     relative_install_path: "hw",
+    proprietary: true,
     srcs: [
         "Benchmark.cpp",
     ],
diff --git a/tests/memory/1.0/Android.bp b/tests/memory/1.0/Android.bp
index d8fe811..49faf41 100644
--- a/tests/memory/1.0/Android.bp
+++ b/tests/memory/1.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.tests.memory@1.0_hal",
+    srcs: [
+        "IMemoryTest.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.tests.memory@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.memory@1.0",
     srcs: [
-        "IMemoryTest.hal",
+        ":android.hardware.tests.memory@1.0_hal",
     ],
     out: [
         "android/hardware/tests/memory/1.0/MemoryTestAll.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.memory@1.0",
     srcs: [
-        "IMemoryTest.hal",
+        ":android.hardware.tests.memory@1.0_hal",
     ],
     out: [
         "android/hardware/tests/memory/1.0/IMemoryTest.h",
diff --git a/tests/memory/1.0/default/Android.bp b/tests/memory/1.0/default/Android.bp
index bde7c03..14dc08d 100644
--- a/tests/memory/1.0/default/Android.bp
+++ b/tests/memory/1.0/default/Android.bp
@@ -14,6 +14,7 @@
 
 cc_library_shared {
     name: "android.hardware.tests.memory@1.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: [
         "MemoryTest.cpp",
diff --git a/tests/msgq/1.0/Android.bp b/tests/msgq/1.0/Android.bp
index 669722e..d17efe4 100644
--- a/tests/msgq/1.0/Android.bp
+++ b/tests/msgq/1.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.tests.msgq@1.0_hal",
+    srcs: [
+        "ITestMsgQ.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.tests.msgq@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.msgq@1.0",
     srcs: [
-        "ITestMsgQ.hal",
+        ":android.hardware.tests.msgq@1.0_hal",
     ],
     out: [
         "android/hardware/tests/msgq/1.0/TestMsgQAll.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.msgq@1.0",
     srcs: [
-        "ITestMsgQ.hal",
+        ":android.hardware.tests.msgq@1.0_hal",
     ],
     out: [
         "android/hardware/tests/msgq/1.0/ITestMsgQ.h",
diff --git a/tests/msgq/1.0/ITestMsgQ.hal b/tests/msgq/1.0/ITestMsgQ.hal
index 3ed1b37..dfb9be4 100644
--- a/tests/msgq/1.0/ITestMsgQ.hal
+++ b/tests/msgq/1.0/ITestMsgQ.hal
@@ -34,15 +34,19 @@
         generates(bool ret, fmq_sync<uint16_t> mqDesc);
 
     /*
-     * This method requests the service to set up an unsynchronized write
-     * wait-free FMQ with the client as reader.
+     * This method requests the service to return an MQDescriptor to
+     * an unsynchronized FMQ set up by the server. If 'configureFmq' is
+     * true, then the server sets up a new unsynchronized FMQ. This
+     * method is to be used to test multiple reader processes.
      *
-     * @return ret True if the setup is successful.
-     * @return mqDesc This structure describes the FMQ that was
+     * @param configureFmq The server sets up a new unsynchronized FMQ if
+     * this parameter is true.
+     *
+     * @return ret True if successful.
+     * @return mqDesc This structure describes the unsynchronized FMQ that was
      * set up by the service. Client can use it to set up the FMQ at its end.
      */
-    configureFmqUnsyncWrite()
-        generates(bool ret, fmq_unsync<uint16_t> mqDesc);
+    getFmqUnsyncWrite(bool configureFmq) generates(bool ret, fmq_unsync<uint16_t> mqDesc);
 
     /*
      * This method request the service to write into the synchronized read/write
diff --git a/tests/pointer/1.0/Android.bp b/tests/pointer/1.0/Android.bp
index be7f873..7f66e2a 100644
--- a/tests/pointer/1.0/Android.bp
+++ b/tests/pointer/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.tests.pointer@1.0_hal",
+    srcs: [
+        "IGraph.hal",
+        "IPointer.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.tests.pointer@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.pointer@1.0",
     srcs: [
-        "IGraph.hal",
-        "IPointer.hal",
+        ":android.hardware.tests.pointer@1.0_hal",
     ],
     out: [
         "android/hardware/tests/pointer/1.0/GraphAll.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.pointer@1.0",
     srcs: [
-        "IGraph.hal",
-        "IPointer.hal",
+        ":android.hardware.tests.pointer@1.0_hal",
     ],
     out: [
         "android/hardware/tests/pointer/1.0/IGraph.h",
diff --git a/tests/pointer/1.0/default/Android.bp b/tests/pointer/1.0/default/Android.bp
index f7180f1..ab7f8fa 100644
--- a/tests/pointer/1.0/default/Android.bp
+++ b/tests/pointer/1.0/default/Android.bp
@@ -3,6 +3,7 @@
 cc_library_shared {
     name: "android.hardware.tests.pointer@1.0-impl",
     relative_install_path: "hw",
+    proprietary: true,
     srcs: [
         "Graph.cpp",
         "Pointer.cpp",
diff --git a/tests/versioning/1.0/Android.bp b/tests/versioning/1.0/Android.bp
new file mode 100644
index 0000000..fbabc10
--- /dev/null
+++ b/tests/versioning/1.0/Android.bp
@@ -0,0 +1,59 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.tests.versioning@1.0_hal",
+    srcs: [
+        "IFoo.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.versioning@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@1.0",
+    srcs: [
+        ":android.hardware.tests.versioning@1.0_hal",
+    ],
+    out: [
+        "android/hardware/tests/versioning/1.0/FooAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.versioning@1.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@1.0",
+    srcs: [
+        ":android.hardware.tests.versioning@1.0_hal",
+    ],
+    out: [
+        "android/hardware/tests/versioning/1.0/IFoo.h",
+        "android/hardware/tests/versioning/1.0/IHwFoo.h",
+        "android/hardware/tests/versioning/1.0/BnHwFoo.h",
+        "android/hardware/tests/versioning/1.0/BpHwFoo.h",
+        "android/hardware/tests/versioning/1.0/BsFoo.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.tests.versioning@1.0",
+    generated_sources: ["android.hardware.tests.versioning@1.0_genc++"],
+    generated_headers: ["android.hardware.tests.versioning@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.tests.versioning@1.0_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/tests/versioning/1.0/Android.mk b/tests/versioning/1.0/Android.mk
new file mode 100644
index 0000000..ba18384
--- /dev/null
+++ b/tests/versioning/1.0/Android.mk
@@ -0,0 +1,76 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.versioning@1.0-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java \
+
+
+#
+# Build IFoo.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V1_0/IFoo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@1.0::IFoo
+
+$(GEN): $(LOCAL_PATH)/IFoo.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.versioning@1.0-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java-static \
+
+
+#
+# Build IFoo.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V1_0/IFoo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@1.0::IFoo
+
+$(GEN): $(LOCAL_PATH)/IFoo.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/versioning/1.0/IFoo.hal b/tests/versioning/1.0/IFoo.hal
new file mode 100644
index 0000000..0571eff
--- /dev/null
+++ b/tests/versioning/1.0/IFoo.hal
@@ -0,0 +1,20 @@
+/*
+ * 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.versioning@1.0;
+
+interface IFoo {
+};
diff --git a/tests/versioning/2.2/Android.bp b/tests/versioning/2.2/Android.bp
new file mode 100644
index 0000000..953b6df
--- /dev/null
+++ b/tests/versioning/2.2/Android.bp
@@ -0,0 +1,66 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.tests.versioning@2.2_hal",
+    srcs: [
+        "IBar.hal",
+        "IFoo.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.versioning@2.2_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.2",
+    srcs: [
+        ":android.hardware.tests.versioning@2.2_hal",
+    ],
+    out: [
+        "android/hardware/tests/versioning/2.2/BarAll.cpp",
+        "android/hardware/tests/versioning/2.2/FooAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.versioning@2.2_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.2",
+    srcs: [
+        ":android.hardware.tests.versioning@2.2_hal",
+    ],
+    out: [
+        "android/hardware/tests/versioning/2.2/IBar.h",
+        "android/hardware/tests/versioning/2.2/IHwBar.h",
+        "android/hardware/tests/versioning/2.2/BnHwBar.h",
+        "android/hardware/tests/versioning/2.2/BpHwBar.h",
+        "android/hardware/tests/versioning/2.2/BsBar.h",
+        "android/hardware/tests/versioning/2.2/IFoo.h",
+        "android/hardware/tests/versioning/2.2/IHwFoo.h",
+        "android/hardware/tests/versioning/2.2/BnHwFoo.h",
+        "android/hardware/tests/versioning/2.2/BpHwFoo.h",
+        "android/hardware/tests/versioning/2.2/BsFoo.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.tests.versioning@2.2",
+    generated_sources: ["android.hardware.tests.versioning@2.2_genc++"],
+    generated_headers: ["android.hardware.tests.versioning@2.2_genc++_headers"],
+    export_generated_headers: ["android.hardware.tests.versioning@2.2_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/tests/versioning/2.2/Android.mk b/tests/versioning/2.2/Android.mk
new file mode 100644
index 0000000..e2a2ff7
--- /dev/null
+++ b/tests/versioning/2.2/Android.mk
@@ -0,0 +1,114 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.versioning@2.2-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java \
+
+
+#
+# Build IBar.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_2/IBar.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBar.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.2::IBar
+
+$(GEN): $(LOCAL_PATH)/IBar.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IFoo.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_2/IFoo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.2::IFoo
+
+$(GEN): $(LOCAL_PATH)/IFoo.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.versioning@2.2-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java-static \
+
+
+#
+# Build IBar.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_2/IBar.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBar.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.2::IBar
+
+$(GEN): $(LOCAL_PATH)/IBar.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IFoo.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_2/IFoo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.2::IFoo
+
+$(GEN): $(LOCAL_PATH)/IFoo.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/versioning/2.2/IBar.hal b/tests/versioning/2.2/IBar.hal
new file mode 100644
index 0000000..e28ce19
--- /dev/null
+++ b/tests/versioning/2.2/IBar.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.versioning@2.2;
+
+interface IBar {
+
+};
diff --git a/tests/versioning/2.2/IFoo.hal b/tests/versioning/2.2/IFoo.hal
new file mode 100644
index 0000000..d6b8782
--- /dev/null
+++ b/tests/versioning/2.2/IFoo.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.versioning@2.2;
+
+interface IFoo {
+
+};
diff --git a/tests/versioning/2.3/Android.bp b/tests/versioning/2.3/Android.bp
new file mode 100644
index 0000000..122c484
--- /dev/null
+++ b/tests/versioning/2.3/Android.bp
@@ -0,0 +1,75 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.tests.versioning@2.3_hal",
+    srcs: [
+        "IBar.hal",
+        "IBaz.hal",
+        "IFoo.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.versioning@2.3_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.3",
+    srcs: [
+        ":android.hardware.tests.versioning@2.3_hal",
+    ],
+    out: [
+        "android/hardware/tests/versioning/2.3/BarAll.cpp",
+        "android/hardware/tests/versioning/2.3/BazAll.cpp",
+        "android/hardware/tests/versioning/2.3/FooAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.versioning@2.3_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.3",
+    srcs: [
+        ":android.hardware.tests.versioning@2.3_hal",
+    ],
+    out: [
+        "android/hardware/tests/versioning/2.3/IBar.h",
+        "android/hardware/tests/versioning/2.3/IHwBar.h",
+        "android/hardware/tests/versioning/2.3/BnHwBar.h",
+        "android/hardware/tests/versioning/2.3/BpHwBar.h",
+        "android/hardware/tests/versioning/2.3/BsBar.h",
+        "android/hardware/tests/versioning/2.3/IBaz.h",
+        "android/hardware/tests/versioning/2.3/IHwBaz.h",
+        "android/hardware/tests/versioning/2.3/BnHwBaz.h",
+        "android/hardware/tests/versioning/2.3/BpHwBaz.h",
+        "android/hardware/tests/versioning/2.3/BsBaz.h",
+        "android/hardware/tests/versioning/2.3/IFoo.h",
+        "android/hardware/tests/versioning/2.3/IHwFoo.h",
+        "android/hardware/tests/versioning/2.3/BnHwFoo.h",
+        "android/hardware/tests/versioning/2.3/BpHwFoo.h",
+        "android/hardware/tests/versioning/2.3/BsFoo.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.tests.versioning@2.3",
+    generated_sources: ["android.hardware.tests.versioning@2.3_genc++"],
+    generated_headers: ["android.hardware.tests.versioning@2.3_genc++_headers"],
+    export_generated_headers: ["android.hardware.tests.versioning@2.3_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hardware.tests.versioning@1.0",
+        "android.hardware.tests.versioning@2.2",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.tests.versioning@1.0",
+        "android.hardware.tests.versioning@2.2",
+    ],
+}
diff --git a/tests/versioning/2.3/Android.mk b/tests/versioning/2.3/Android.mk
new file mode 100644
index 0000000..68e6be4
--- /dev/null
+++ b/tests/versioning/2.3/Android.mk
@@ -0,0 +1,156 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.versioning@2.3-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+    android.hardware.tests.versioning@1.0-java \
+    android.hardware.tests.versioning@2.2-java \
+    android.hidl.base@1.0-java \
+
+
+#
+# Build IBar.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IBar.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBar.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.3::IBar
+
+$(GEN): $(LOCAL_PATH)/IBar.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IBaz.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IBaz.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBaz.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.3::IBaz
+
+$(GEN): $(LOCAL_PATH)/IBaz.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IFoo.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IFoo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.3::IFoo
+
+$(GEN): $(LOCAL_PATH)/IFoo.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.versioning@2.3-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hardware.tests.versioning@1.0-java-static \
+    android.hardware.tests.versioning@2.2-java-static \
+    android.hidl.base@1.0-java-static \
+
+
+#
+# Build IBar.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IBar.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBar.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.3::IBar
+
+$(GEN): $(LOCAL_PATH)/IBar.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IBaz.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IBaz.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBaz.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.3::IBaz
+
+$(GEN): $(LOCAL_PATH)/IBaz.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IFoo.hal
+#
+GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IFoo.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.versioning@2.3::IFoo
+
+$(GEN): $(LOCAL_PATH)/IFoo.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/versioning/2.3/IBar.hal b/tests/versioning/2.3/IBar.hal
new file mode 100644
index 0000000..fe38e76
--- /dev/null
+++ b/tests/versioning/2.3/IBar.hal
@@ -0,0 +1,24 @@
+/*
+ * 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.versioning@2.3;
+
+import @2.2::IBar;
+
+// Must extend @2.2::IBar.
+interface IBar extends @2.2::IBar {
+
+};
diff --git a/tests/versioning/2.3/IBaz.hal b/tests/versioning/2.3/IBaz.hal
new file mode 100644
index 0000000..e28792c
--- /dev/null
+++ b/tests/versioning/2.3/IBaz.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.versioning@2.3;
+
+import @1.0::IFoo;
+
+interface IBaz extends @1.0::IFoo {
+
+};
diff --git a/tests/versioning/2.3/IFoo.hal b/tests/versioning/2.3/IFoo.hal
new file mode 100644
index 0000000..2c76500
--- /dev/null
+++ b/tests/versioning/2.3/IFoo.hal
@@ -0,0 +1,24 @@
+/*
+ * 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.versioning@2.3;
+
+import @2.2::IFoo;
+
+// Must extend @2.2::IFoo.
+interface IFoo extends @2.2::IFoo {
+
+};
diff --git a/thermal/1.0/Android.bp b/thermal/1.0/Android.bp
index e80bedc..fab5533 100644
--- a/thermal/1.0/Android.bp
+++ b/thermal/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.thermal@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IThermal.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.thermal@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.0",
     srcs: [
-        "types.hal",
-        "IThermal.hal",
+        ":android.hardware.thermal@1.0_hal",
     ],
     out: [
         "android/hardware/thermal/1.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.0",
     srcs: [
-        "types.hal",
-        "IThermal.hal",
+        ":android.hardware.thermal@1.0_hal",
     ],
     out: [
         "android/hardware/thermal/1.0/types.h",
@@ -54,106 +60,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.thermal.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/thermal/1.0/ $(genDir)/android/hardware/thermal/1.0/",
-    srcs: [
-        "types.hal",
-        "IThermal.hal",
-    ],
-    out: [
-        "android/hardware/thermal/1.0/types.vts.cpp",
-        "android/hardware/thermal/1.0/Thermal.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.thermal.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/thermal/1.0/ $(genDir)/android/hardware/thermal/1.0/",
-    srcs: [
-        "types.hal",
-        "IThermal.hal",
-    ],
-    out: [
-        "android/hardware/thermal/1.0/types.vts.h",
-        "android/hardware/thermal/1.0/Thermal.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.thermal.vts.driver@1.0",
-    generated_sources: ["android.hardware.thermal.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.thermal.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.thermal.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.thermal@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.thermal@1.0-IThermal-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/thermal/1.0/ $(genDir)/android/hardware/thermal/1.0/",
-    srcs: [
-        "IThermal.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/thermal/1.0/Thermal.vts.cpp",
-        "android/hardware/thermal/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.thermal@1.0-IThermal-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/thermal/1.0/ $(genDir)/android/hardware/thermal/1.0/",
-    srcs: [
-        "IThermal.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/thermal/1.0/Thermal.vts.h",
-        "android/hardware/thermal/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.thermal@1.0-IThermal-vts.profiler",
-    generated_sources: ["android.hardware.thermal@1.0-IThermal-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.thermal@1.0-IThermal-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.thermal@1.0-IThermal-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.thermal@1.0",
-    ],
-}
diff --git a/thermal/1.0/Android.mk b/thermal/1.0/Android.mk
index b88bb81..7748b9e 100644
--- a/thermal/1.0/Android.mk
+++ b/thermal/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.thermal@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -178,7 +178,7 @@
 LOCAL_MODULE := android.hardware.thermal@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -348,7 +348,7 @@
 LOCAL_MODULE := android.hardware.thermal@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/thermal/1.0/default/Android.bp b/thermal/1.0/default/Android.bp
index 819f0b1..96f69cc 100644
--- a/thermal/1.0/default/Android.bp
+++ b/thermal/1.0/default/Android.bp
@@ -1,5 +1,6 @@
 cc_library_shared {
     name: "android.hardware.thermal@1.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["Thermal.cpp"],
     shared_libs: [
diff --git a/thermal/1.0/default/Android.mk b/thermal/1.0/default/Android.mk
index 9039e9f..72c46af 100644
--- a/thermal/1.0/default/Android.mk
+++ b/thermal/1.0/default/Android.mk
@@ -17,6 +17,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.thermal@1.0-service
 LOCAL_INIT_RC := android.hardware.thermal@1.0-service.rc
 LOCAL_SRC_FILES := \
diff --git a/thermal/1.0/default/android.hardware.thermal@1.0-service.rc b/thermal/1.0/default/android.hardware.thermal@1.0-service.rc
index cc7ba6a..f8da101 100644
--- a/thermal/1.0/default/android.hardware.thermal@1.0-service.rc
+++ b/thermal/1.0/default/android.hardware.thermal@1.0-service.rc
@@ -1,4 +1,4 @@
-service thermal-hal-1-0 /system/bin/hw/android.hardware.thermal@1.0-service
+service thermal-hal-1-0 /vendor/bin/hw/android.hardware.thermal@1.0-service
     class hal
     user system
     group system readproc
diff --git a/thermal/1.0/default/service.cpp b/thermal/1.0/default/service.cpp
index ea86de4..b83cbf8 100644
--- a/thermal/1.0/default/service.cpp
+++ b/thermal/1.0/default/service.cpp
@@ -23,5 +23,5 @@
 using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-    return defaultPassthroughServiceImplementation<IThermal>("thermal");
+    return defaultPassthroughServiceImplementation<IThermal>();
 }
diff --git a/thermal/1.0/vts/Thermal.vts b/thermal/1.0/vts/Thermal.vts
deleted file mode 100644
index e76d943..0000000
--- a/thermal/1.0/vts/Thermal.vts
+++ /dev/null
@@ -1,82 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IThermal"
-
-package: "android.hardware.thermal"
-
-import: "android.hardware.thermal@1.0::types"
-
-interface: {
-    api: {
-        name: "getTemperatures"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::thermal::V1_0::ThermalStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::thermal::V1_0::Temperature"
-            }
-        }
-        callflow: {
-            next: "*"
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            exit: true
-        }
-    }
-
-    api: {
-        name: "getCpuUsages"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::thermal::V1_0::ThermalStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::thermal::V1_0::CpuUsage"
-            }
-        }
-        callflow: {
-            next: "*"
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            exit: true
-        }
-    }
-
-    api: {
-        name: "getCoolingDevices"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::thermal::V1_0::ThermalStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::thermal::V1_0::CoolingDevice"
-            }
-        }
-        callflow: {
-            next: "*"
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            exit: true
-        }
-    }
-
-}
diff --git a/thermal/1.0/vts/functional/Android.bp b/thermal/1.0/vts/functional/Android.bp
index bef7bc2..92f8c49 100644
--- a/thermal/1.0/vts/functional/Android.bp
+++ b/thermal/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "thermal_hidl_hal_test",
+    name: "VtsHalThermalV1_0TargetTest",
     gtest: true,
-    srcs: ["thermal_hidl_hal_test.cpp"],
+    srcs: ["VtsHalThermalV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -31,12 +31,8 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
     ],
-    ldflags: [
-        "--coverage"
-    ]
 }
 
diff --git a/thermal/1.0/vts/functional/Android.mk b/thermal/1.0/vts/functional/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/thermal/1.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp b/thermal/1.0/vts/functional/VtsHalThermalV1_0TargetTest.cpp
similarity index 98%
rename from thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp
rename to thermal/1.0/vts/functional/VtsHalThermalV1_0TargetTest.cpp
index d922169..5bdd2c2 100644
--- a/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp
+++ b/thermal/1.0/vts/functional/VtsHalThermalV1_0TargetTest.cpp
@@ -40,7 +40,6 @@
 using ::android::hardware::Void;
 using ::android::sp;
 
-#define THERMAL_SERVICE_NAME "thermal"
 #define MONITORING_OPERATION_NUMBER 10
 
 #define MAX_DEVICE_TEMPERATURE 200
@@ -50,7 +49,7 @@
 class ThermalHidlTest : public ::testing::Test {
  public:
   virtual void SetUp() override {
-    thermal_ = IThermal::getService(THERMAL_SERVICE_NAME, false);
+    thermal_ = IThermal::getService();
     ASSERT_NE(thermal_, nullptr);
     baseSize_ = 0;
     names_.clear();
diff --git a/thermal/1.0/vts/functional/vts/Android.mk b/thermal/1.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/thermal/1.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/thermal/1.0/vts/functional/vts/testcases/Android.mk b/thermal/1.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/thermal/1.0/vts/functional/vts/testcases/hal/Android.mk b/thermal/1.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/Android.mk b/thermal/1.0/vts/functional/vts/testcases/hal/thermal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/__init__.py b/thermal/1.0/vts/functional/vts/testcases/hal/thermal/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/__init__.py
+++ /dev/null
diff --git a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/Android.mk b/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/__init__.py b/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/__init__.py
+++ /dev/null
diff --git a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target/Android.mk b/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target/Android.mk
deleted file mode 100644
index 1c3ceb3..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := ThermalHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/thermal/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target/AndroidTest.xml b/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target/AndroidTest.xml
deleted file mode 100644
index 169264d..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS VIBRATOR HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="ThermalHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/thermal_hidl_hal_test/thermal_hidl_hal_test,
-            _64bit::DATA/nativetest64/thermal_hidl_hal_test/thermal_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="5m" />
-    </test>
-</configuration>
-
diff --git a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target_profiling/Android.mk b/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target_profiling/Android.mk
deleted file mode 100644
index 1f937fa..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := ThermalHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/thermal/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target_profiling/AndroidTest.xml b/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 46ae05a..0000000
--- a/thermal/1.0/vts/functional/vts/testcases/hal/thermal/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS THERMAL HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="ThermalHidlTargetProfilingTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/thermal_hidl_hal_test/thermal_hidl_hal_test,
-            _64bit::DATA/nativetest64/thermal_hidl_hal_test/thermal_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="5m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
-
diff --git a/thermal/1.0/vts/types.vts b/thermal/1.0/vts/types.vts
deleted file mode 100644
index 1e60f48..0000000
--- a/thermal/1.0/vts/types.vts
+++ /dev/null
@@ -1,157 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.thermal"
-
-
-attribute: {
-    name: "::android::hardware::thermal::V1_0::TemperatureType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            uint32_t: 1000
-        }
-        enumerator: "CPU"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "GPU"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "BATTERY"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "SKIN"
-        scalar_value: {
-            uint32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::thermal::V1_0::CoolingType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "FAN_RPM"
-        scalar_value: {
-            uint32_t: 0
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::thermal::V1_0::Temperature"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::thermal::V1_0::TemperatureType"
-    }
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "currentValue"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "throttlingThreshold"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "shutdownThreshold"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "vrThrottlingThreshold"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::thermal::V1_0::CoolingDevice"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::thermal::V1_0::CoolingType"
-    }
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "currentValue"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::thermal::V1_0::CpuUsage"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "active"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "total"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "isOnline"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::thermal::V1_0::ThermalStatusCode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "FAILURE"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::thermal::V1_0::ThermalStatus"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "code"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::thermal::V1_0::ThermalStatusCode"
-    }
-    struct_value: {
-        name: "debugMessage"
-        type: TYPE_STRING
-    }
-}
-
diff --git a/tv/Android.bp b/tv/Android.bp
index 5ad82f4..ac54910 100644
--- a/tv/Android.bp
+++ b/tv/Android.bp
@@ -2,4 +2,5 @@
 subdirs = [
     "cec/1.0",
     "input/1.0",
+    "input/1.0/vts/functional",
 ]
diff --git a/tv/cec/1.0/Android.bp b/tv/cec/1.0/Android.bp
index 21233ab..5c6919d 100644
--- a/tv/cec/1.0/Android.bp
+++ b/tv/cec/1.0/Android.bp
@@ -1,13 +1,20 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.tv.cec@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IHdmiCec.hal",
+        "IHdmiCecCallback.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.tv.cec@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0",
     srcs: [
-        "types.hal",
-        "IHdmiCec.hal",
-        "IHdmiCecCallback.hal",
+        ":android.hardware.tv.cec@1.0_hal",
     ],
     out: [
         "android/hardware/tv/cec/1.0/types.cpp",
@@ -21,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0",
     srcs: [
-        "types.hal",
-        "IHdmiCec.hal",
-        "IHdmiCecCallback.hal",
+        ":android.hardware.tv.cec@1.0_hal",
     ],
     out: [
         "android/hardware/tv/cec/1.0/types.h",
@@ -62,155 +67,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.tv.cec.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/tv/cec/1.0/ $(genDir)/android/hardware/tv/cec/1.0/",
-    srcs: [
-        "types.hal",
-        "IHdmiCec.hal",
-        "IHdmiCecCallback.hal",
-    ],
-    out: [
-        "android/hardware/tv/cec/1.0/types.vts.cpp",
-        "android/hardware/tv/cec/1.0/HdmiCec.vts.cpp",
-        "android/hardware/tv/cec/1.0/HdmiCecCallback.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.cec.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/tv/cec/1.0/ $(genDir)/android/hardware/tv/cec/1.0/",
-    srcs: [
-        "types.hal",
-        "IHdmiCec.hal",
-        "IHdmiCecCallback.hal",
-    ],
-    out: [
-        "android/hardware/tv/cec/1.0/types.vts.h",
-        "android/hardware/tv/cec/1.0/HdmiCec.vts.h",
-        "android/hardware/tv/cec/1.0/HdmiCecCallback.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tv.cec.vts.driver@1.0",
-    generated_sources: ["android.hardware.tv.cec.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.tv.cec.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.tv.cec.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.tv.cec@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.cec@1.0-IHdmiCec-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/tv/cec/1.0/ $(genDir)/android/hardware/tv/cec/1.0/",
-    srcs: [
-        "IHdmiCec.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/tv/cec/1.0/HdmiCec.vts.cpp",
-        "android/hardware/tv/cec/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.cec@1.0-IHdmiCec-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/tv/cec/1.0/ $(genDir)/android/hardware/tv/cec/1.0/",
-    srcs: [
-        "IHdmiCec.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/tv/cec/1.0/HdmiCec.vts.h",
-        "android/hardware/tv/cec/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tv.cec@1.0-IHdmiCec-vts.profiler",
-    generated_sources: ["android.hardware.tv.cec@1.0-IHdmiCec-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.tv.cec@1.0-IHdmiCec-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.tv.cec@1.0-IHdmiCec-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.tv.cec@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.cec@1.0-IHdmiCecCallback-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/tv/cec/1.0/ $(genDir)/android/hardware/tv/cec/1.0/",
-    srcs: [
-        "IHdmiCecCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/tv/cec/1.0/HdmiCecCallback.vts.cpp",
-        "android/hardware/tv/cec/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.cec@1.0-IHdmiCecCallback-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/tv/cec/1.0/ $(genDir)/android/hardware/tv/cec/1.0/",
-    srcs: [
-        "IHdmiCecCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/tv/cec/1.0/HdmiCecCallback.vts.h",
-        "android/hardware/tv/cec/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tv.cec@1.0-IHdmiCecCallback-vts.profiler",
-    generated_sources: ["android.hardware.tv.cec@1.0-IHdmiCecCallback-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.tv.cec@1.0-IHdmiCecCallback-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.tv.cec@1.0-IHdmiCecCallback-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.tv.cec@1.0",
-    ],
-}
diff --git a/tv/cec/1.0/Android.mk b/tv/cec/1.0/Android.mk
index efa71a1..b08099e 100644
--- a/tv/cec/1.0/Android.mk
+++ b/tv/cec/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tv.cec@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -296,7 +296,7 @@
 LOCAL_MODULE := android.hardware.tv.cec@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/tv/cec/1.0/default/Android.mk b/tv/cec/1.0/default/Android.mk
index 492fc8c..3f986e6 100644
--- a/tv/cec/1.0/default/Android.mk
+++ b/tv/cec/1.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.tv.cec@1.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     HdmiCec.cpp
@@ -21,6 +22,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.tv.cec@1.0-service
 LOCAL_INIT_RC := android.hardware.tv.cec@1.0-service.rc
 LOCAL_SRC_FILES := \
diff --git a/tv/cec/1.0/default/android.hardware.tv.cec@1.0-service.rc b/tv/cec/1.0/default/android.hardware.tv.cec@1.0-service.rc
index 1af32cb..9c80094 100644
--- a/tv/cec/1.0/default/android.hardware.tv.cec@1.0-service.rc
+++ b/tv/cec/1.0/default/android.hardware.tv.cec@1.0-service.rc
@@ -1,4 +1,4 @@
-service cec-hal-1-0 /system/bin/hw/android.hardware.tv.cec@1.0-service
+service cec-hal-1-0 /vendor/bin/hw/android.hardware.tv.cec@1.0-service
     class hal
     user system
     group system
diff --git a/tv/cec/1.0/default/service.cpp b/tv/cec/1.0/default/service.cpp
index 3c11e24..74b1f62 100644
--- a/tv/cec/1.0/default/service.cpp
+++ b/tv/cec/1.0/default/service.cpp
@@ -23,5 +23,5 @@
 using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-    return defaultPassthroughServiceImplementation<IHdmiCec>("tv.cec");
+    return defaultPassthroughServiceImplementation<IHdmiCec>();
 }
diff --git a/tv/cec/1.0/vts/Android.mk b/tv/cec/1.0/vts/Android.mk
deleted file mode 100644
index fc636f7..0000000
--- a/tv/cec/1.0/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(LOCAL_PATH)/functional/vts/testcases/hal/tv_cec/hidl/Android.mk
diff --git a/tv/cec/1.0/vts/HdmiCec.vts b/tv/cec/1.0/vts/HdmiCec.vts
deleted file mode 100644
index d7d09de..0000000
--- a/tv/cec/1.0/vts/HdmiCec.vts
+++ /dev/null
@@ -1,172 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IHdmiCec"
-
-package: "android.hardware.tv.cec"
-
-import: "android.hardware.tv.cec@1.0::IHdmiCecCallback"
-import: "android.hardware.tv.cec@1.0::types"
-
-interface: {
-    api: {
-        name: "addLogicalAddress"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::tv::cec::V1_0::Result"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::tv::cec::V1_0::CecLogicalAddress"
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "clearLogicalAddress"
-        callflow: {
-            next: "addLogicalAddress"
-        }
-        callflow: {
-            exit: true
-        }
-    }
-
-    api: {
-        name: "getPhysicalAddress"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::tv::cec::V1_0::Result"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "sendMessage"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::tv::cec::V1_0::SendMessageResult"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::tv::cec::V1_0::CecMessage"
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "setCallback"
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "IHdmiCecCallback"
-            is_callback: true
-        }
-        callflow: {
-            next: "addLogicalAddress"
-        }
-        callflow: {
-            entry: true
-        }
-    }
-
-    api: {
-        name: "getCecVersion"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "getVendorId"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "getPortInfo"
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::tv::cec::V1_0::HdmiPortInfo"
-            }
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "setOption"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::tv::cec::V1_0::OptionKey"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "setLanguage"
-        arg: {
-            type: TYPE_STRING
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "enableAudioReturnChannel"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "isConnected"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-}
diff --git a/tv/cec/1.0/vts/HdmiCecCallback.vts b/tv/cec/1.0/vts/HdmiCecCallback.vts
deleted file mode 100644
index 864e6f5..0000000
--- a/tv/cec/1.0/vts/HdmiCecCallback.vts
+++ /dev/null
@@ -1,26 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IHdmiCecCallback"
-
-package: "android.hardware.tv.cec"
-
-import: "android.hardware.tv.cec@1.0::types"
-
-interface: {
-    api: {
-        name: "onCecMessage"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::tv::cec::V1_0::CecMessage"
-        }
-    }
-
-    api: {
-        name: "onHotplugEvent"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::tv::cec::V1_0::HotplugEvent"
-        }
-    }
-
-}
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/__init__.py b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/__init__.py
+++ /dev/null
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/Android.mk b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/__init__.py b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/__init__.py
+++ /dev/null
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/Android.mk b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/Android.mk
deleted file mode 100644
index ece38d7..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := TvCecHidlTest
-VTS_CONFIG_SRC_DIR := testcases/hal/tv_cec/hidl/host
-include test/vts/tools/build/Android.host_config.mk
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/AndroidTest.xml b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/AndroidTest.xml
deleted file mode 100644
index 79584d5..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Tv Input HIDL HAL's host-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="push" value="spec/hardware/interfaces/tv/cec/1.0/vts/HdmiCec.vts->/data/local/tmp/spec/HdmiCec.vts" />
-        <option name="push" value="spec/hardware/interfaces/tv/cec/1.0/vts/HdmiCecCallback.vts->/data/local/tmp/spec/HdmiCecCallback.vts" />
-        <option name="push" value="spec/hardware/interfaces/tv/cec/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-        <option name="cleanup" value="true" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer">
-    </target_preparer>
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="TvCecHidlTest" />
-        <option name="test-case-path" value="vts/testcases/hal/tv_cec/hidl/host/TvCecHidlTest" />
-    </test>
-</configuration>
\ No newline at end of file
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/TvCecHidlTest.py b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/TvCecHidlTest.py
deleted file mode 100644
index 5f7aaf1..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/TvCecHidlTest.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-#
-
-import logging
-
-from vts.proto import ComponentSpecificationMessage_pb2 as CompSpecMsg
-from vts.runners.host import asserts
-from vts.runners.host import base_test_with_webdb
-from vts.runners.host import const
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-
-
-class TvCecHidlTest(base_test_with_webdb.BaseTestWithWebDbClass):
-    """Host testcase class for the TV HDMI_CEC HIDL HAL."""
-
-    def setUpClass(self):
-        """Creates a mirror and init tv hdmi cec hal service."""
-        self.dut = self.registerController(android_device)[0]
-
-        self.dut.shell.InvokeTerminal("one")
-        self.dut.shell.one.Execute("setenforce 0")  # SELinux permissive mode
-
-        self.dut.shell.one.Execute(
-            "setprop vts.hal.vts.hidl.get_stub true")
-
-        self.dut.hal.InitHidlHal(
-            target_type="tv_cec",
-            target_basepaths=self.dut.libPaths,
-            target_version=1.0,
-            target_package="android.hardware.tv.cec",
-            target_component_name="IHdmiCec",
-            hw_binder_service_name="cec-hal-1-0",
-            bits=64 if self.dut.is64Bit else 32)
-
-    def testGetCecVersion1(self):
-        """A simple test case which queries the cec version."""
-        logging.info('DIR HAL %s', dir(self.dut.hal))
-        version = self.dut.hal.tv_cec.getCecVersion()
-        logging.info('Cec version: %s', version)
-
-    def testSendRandomMessage(self):
-        """A test case which sends a random message."""
-        self.vtypes = self.dut.hal.tv_cec.GetHidlTypeInterface("types")
-        logging.info("tv_cec types: %s", self.vtypes)
-
-        cec_message = {
-            "initiator": self.vtypes.TV,
-            "destination": self.vtypes.PLAYBACK_1,
-            "body": [1, 2, 3]
-        }
-        message = self.vtypes.Py2Pb("CecMessage", cec_message)
-        logging.info("message: %s", message)
-        result = self.dut.hal.tv_cec.sendMessage(message)
-        logging.info('sendMessage result: %s', result)
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/__init__.py b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/__init__.py
+++ /dev/null
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/Android.mk b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/Android.mk
deleted file mode 100644
index 40536a5..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Copyright (C) 2017 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := TvCecHidlProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/tv_cec/hidl/host_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/AndroidTest.xml b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/AndroidTest.xml
deleted file mode 100644
index ffd857e..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 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.
--->
-<configuration description="Config for VTS Tv Input HIDL HAL's host-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="push" value="spec/hardware/interfaces/tv/cec/1.0/vts/HdmiCec.vts->/data/local/tmp/spec/HdmiCec.vts" />
-        <option name="push" value="spec/hardware/interfaces/tv/cec/1.0/vts/HdmiCecCallback.vts->/data/local/tmp/spec/HdmiCecCallback.vts" />
-        <option name="push" value="spec/hardware/interfaces/tv/cec/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-        <option name="cleanup" value="true" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer">
-    </target_preparer>
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="TvCecHidlProfilingTest" />
-        <option name="test-case-path" value="vts/testcases/hal/tv_cec/hidl/host/TvCecHidlTest" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
\ No newline at end of file
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/__init__.py b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/__init__.py
+++ /dev/null
diff --git a/tv/cec/1.0/vts/types.vts b/tv/cec/1.0/vts/types.vts
deleted file mode 100644
index ae972a5..0000000
--- a/tv/cec/1.0/vts/types.vts
+++ /dev/null
@@ -1,604 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.tv.cec"
-
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::MaxLength"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "MESSAGE_BODY"
-        scalar_value: {
-            int32_t: 15
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::CecDeviceType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "INACTIVE"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "TV"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RECORDER"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "TUNER"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "PLAYBACK"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "AUDIO_SYSTEM"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "MAX"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::CecLogicalAddress"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "TV"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RECORDER_1"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "RECORDER_2"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "TUNER_1"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "PLAYBACK_1"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "AUDIO_SYSTEM"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "TUNER_2"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "TUNER_3"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "PLAYBACK_2"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "RECORDER_3"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "TUNER_4"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "PLAYBACK_3"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "FREE_USE"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "UNREGISTERED"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "BROADCAST"
-        scalar_value: {
-            int32_t: 15
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::CecMessageType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "FEATURE_ABORT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "IMAGE_VIEW_ON"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "TUNER_STEP_INCREMENT"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "TUNER_STEP_DECREMENT"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "TUNER_DEVICE_STATUS"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "GIVE_TUNER_DEVICE_STATUS"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "RECORD_ON"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "RECORD_STATUS"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "RECORD_OFF"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "TEXT_VIEW_ON"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "RECORD_TV_SCREEN"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "GIVE_DECK_STATUS"
-        scalar_value: {
-            int32_t: 26
-        }
-        enumerator: "DECK_STATUS"
-        scalar_value: {
-            int32_t: 27
-        }
-        enumerator: "SET_MENU_LANGUAGE"
-        scalar_value: {
-            int32_t: 50
-        }
-        enumerator: "CLEAR_ANALOG_TIMER"
-        scalar_value: {
-            int32_t: 51
-        }
-        enumerator: "SET_ANALOG_TIMER"
-        scalar_value: {
-            int32_t: 52
-        }
-        enumerator: "TIMER_STATUS"
-        scalar_value: {
-            int32_t: 53
-        }
-        enumerator: "STANDBY"
-        scalar_value: {
-            int32_t: 54
-        }
-        enumerator: "PLAY"
-        scalar_value: {
-            int32_t: 65
-        }
-        enumerator: "DECK_CONTROL"
-        scalar_value: {
-            int32_t: 66
-        }
-        enumerator: "TIMER_CLEARED_STATUS"
-        scalar_value: {
-            int32_t: 67
-        }
-        enumerator: "USER_CONTROL_PRESSED"
-        scalar_value: {
-            int32_t: 68
-        }
-        enumerator: "USER_CONTROL_RELEASED"
-        scalar_value: {
-            int32_t: 69
-        }
-        enumerator: "GIVE_OSD_NAME"
-        scalar_value: {
-            int32_t: 70
-        }
-        enumerator: "SET_OSD_NAME"
-        scalar_value: {
-            int32_t: 71
-        }
-        enumerator: "SET_OSD_STRING"
-        scalar_value: {
-            int32_t: 100
-        }
-        enumerator: "SET_TIMER_PROGRAM_TITLE"
-        scalar_value: {
-            int32_t: 103
-        }
-        enumerator: "SYSTEM_AUDIO_MODE_REQUEST"
-        scalar_value: {
-            int32_t: 112
-        }
-        enumerator: "GIVE_AUDIO_STATUS"
-        scalar_value: {
-            int32_t: 113
-        }
-        enumerator: "SET_SYSTEM_AUDIO_MODE"
-        scalar_value: {
-            int32_t: 114
-        }
-        enumerator: "REPORT_AUDIO_STATUS"
-        scalar_value: {
-            int32_t: 122
-        }
-        enumerator: "GIVE_SYSTEM_AUDIO_MODE_STATUS"
-        scalar_value: {
-            int32_t: 125
-        }
-        enumerator: "SYSTEM_AUDIO_MODE_STATUS"
-        scalar_value: {
-            int32_t: 126
-        }
-        enumerator: "ROUTING_CHANGE"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "ROUTING_INFORMATION"
-        scalar_value: {
-            int32_t: 129
-        }
-        enumerator: "ACTIVE_SOURCE"
-        scalar_value: {
-            int32_t: 130
-        }
-        enumerator: "GIVE_PHYSICAL_ADDRESS"
-        scalar_value: {
-            int32_t: 131
-        }
-        enumerator: "REPORT_PHYSICAL_ADDRESS"
-        scalar_value: {
-            int32_t: 132
-        }
-        enumerator: "REQUEST_ACTIVE_SOURCE"
-        scalar_value: {
-            int32_t: 133
-        }
-        enumerator: "SET_STREAM_PATH"
-        scalar_value: {
-            int32_t: 134
-        }
-        enumerator: "DEVICE_VENDOR_ID"
-        scalar_value: {
-            int32_t: 135
-        }
-        enumerator: "VENDOR_COMMAND"
-        scalar_value: {
-            int32_t: 137
-        }
-        enumerator: "VENDOR_REMOTE_BUTTON_DOWN"
-        scalar_value: {
-            int32_t: 138
-        }
-        enumerator: "VENDOR_REMOTE_BUTTON_UP"
-        scalar_value: {
-            int32_t: 139
-        }
-        enumerator: "GIVE_DEVICE_VENDOR_ID"
-        scalar_value: {
-            int32_t: 140
-        }
-        enumerator: "MENU_REQUEST"
-        scalar_value: {
-            int32_t: 141
-        }
-        enumerator: "MENU_STATUS"
-        scalar_value: {
-            int32_t: 142
-        }
-        enumerator: "GIVE_DEVICE_POWER_STATUS"
-        scalar_value: {
-            int32_t: 143
-        }
-        enumerator: "REPORT_POWER_STATUS"
-        scalar_value: {
-            int32_t: 144
-        }
-        enumerator: "GET_MENU_LANGUAGE"
-        scalar_value: {
-            int32_t: 145
-        }
-        enumerator: "SELECT_ANALOG_SERVICE"
-        scalar_value: {
-            int32_t: 146
-        }
-        enumerator: "SELECT_DIGITAL_SERVICE"
-        scalar_value: {
-            int32_t: 147
-        }
-        enumerator: "SET_DIGITAL_TIMER"
-        scalar_value: {
-            int32_t: 151
-        }
-        enumerator: "CLEAR_DIGITAL_TIMER"
-        scalar_value: {
-            int32_t: 153
-        }
-        enumerator: "SET_AUDIO_RATE"
-        scalar_value: {
-            int32_t: 154
-        }
-        enumerator: "INACTIVE_SOURCE"
-        scalar_value: {
-            int32_t: 157
-        }
-        enumerator: "CEC_VERSION"
-        scalar_value: {
-            int32_t: 158
-        }
-        enumerator: "GET_CEC_VERSION"
-        scalar_value: {
-            int32_t: 159
-        }
-        enumerator: "VENDOR_COMMAND_WITH_ID"
-        scalar_value: {
-            int32_t: 160
-        }
-        enumerator: "CLEAR_EXTERNAL_TIMER"
-        scalar_value: {
-            int32_t: 161
-        }
-        enumerator: "SET_EXTERNAL_TIMER"
-        scalar_value: {
-            int32_t: 162
-        }
-        enumerator: "INITIATE_ARC"
-        scalar_value: {
-            int32_t: 192
-        }
-        enumerator: "REPORT_ARC_INITIATED"
-        scalar_value: {
-            int32_t: 193
-        }
-        enumerator: "REPORT_ARC_TERMINATED"
-        scalar_value: {
-            int32_t: 194
-        }
-        enumerator: "REQUEST_ARC_INITIATION"
-        scalar_value: {
-            int32_t: 195
-        }
-        enumerator: "REQUEST_ARC_TERMINATION"
-        scalar_value: {
-            int32_t: 196
-        }
-        enumerator: "TERMINATE_ARC"
-        scalar_value: {
-            int32_t: 197
-        }
-        enumerator: "ABORT"
-        scalar_value: {
-            int32_t: 255
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::AbortReason"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNRECOGNIZED_MODE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "NOT_IN_CORRECT_MODE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CANNOT_PROVIDE_SOURCE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "INVALID_OPERAND"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "REFUSED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "UNABLE_TO_DETERMINE"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::Result"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "FAILURE_UNKNOWN"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "FAILURE_INVALID_ARGS"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FAILURE_INVALID_STATE"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "FAILURE_NOT_SUPPORTED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "FAILURE_BUSY"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::SendMessageResult"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "NACK"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "BUSY"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FAIL"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::HdmiPortType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "INPUT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "OUTPUT"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::OptionKey"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "WAKEUP"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ENABLE_CEC"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "SYSTEM_CEC_CONTROL"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::CecMessage"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "initiator"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::tv::cec::V1_0::CecLogicalAddress"
-    }
-    struct_value: {
-        name: "destination"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::tv::cec::V1_0::CecLogicalAddress"
-    }
-    struct_value: {
-        name: "body"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::HotplugEvent"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "connected"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "portId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::cec::V1_0::HdmiPortInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::tv::cec::V1_0::HdmiPortType"
-    }
-    struct_value: {
-        name: "portId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "cecSupported"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "arcSupported"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "physicalAddress"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-}
-
diff --git a/tv/input/1.0/Android.bp b/tv/input/1.0/Android.bp
index 6bcb985..ae5e3de 100644
--- a/tv/input/1.0/Android.bp
+++ b/tv/input/1.0/Android.bp
@@ -1,13 +1,20 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.tv.input@1.0_hal",
+    srcs: [
+        "types.hal",
+        "ITvInput.hal",
+        "ITvInputCallback.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.tv.input@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0",
     srcs: [
-        "types.hal",
-        "ITvInput.hal",
-        "ITvInputCallback.hal",
+        ":android.hardware.tv.input@1.0_hal",
     ],
     out: [
         "android/hardware/tv/input/1.0/types.cpp",
@@ -21,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0",
     srcs: [
-        "types.hal",
-        "ITvInput.hal",
-        "ITvInputCallback.hal",
+        ":android.hardware.tv.input@1.0_hal",
     ],
     out: [
         "android/hardware/tv/input/1.0/types.h",
@@ -64,159 +69,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.tv.input.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/tv/input/1.0/ $(genDir)/android/hardware/tv/input/1.0/",
-    srcs: [
-        "types.hal",
-        "ITvInput.hal",
-        "ITvInputCallback.hal",
-    ],
-    out: [
-        "android/hardware/tv/input/1.0/types.vts.cpp",
-        "android/hardware/tv/input/1.0/TvInput.vts.cpp",
-        "android/hardware/tv/input/1.0/TvInputCallback.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.input.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/tv/input/1.0/ $(genDir)/android/hardware/tv/input/1.0/",
-    srcs: [
-        "types.hal",
-        "ITvInput.hal",
-        "ITvInputCallback.hal",
-    ],
-    out: [
-        "android/hardware/tv/input/1.0/types.vts.h",
-        "android/hardware/tv/input/1.0/TvInput.vts.h",
-        "android/hardware/tv/input/1.0/TvInputCallback.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tv.input.vts.driver@1.0",
-    generated_sources: ["android.hardware.tv.input.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.tv.input.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.tv.input.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hardware.audio.common@2.0",
-        "android.hidl.base@1.0",
-        "android.hardware.tv.input@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hardware.audio.common@2.0",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.input@1.0-ITvInput-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/tv/input/1.0/ $(genDir)/android/hardware/tv/input/1.0/",
-    srcs: [
-        "ITvInput.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/tv/input/1.0/TvInput.vts.cpp",
-        "android/hardware/tv/input/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.input@1.0-ITvInput-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/tv/input/1.0/ $(genDir)/android/hardware/tv/input/1.0/",
-    srcs: [
-        "ITvInput.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/tv/input/1.0/TvInput.vts.h",
-        "android/hardware/tv/input/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tv.input@1.0-ITvInput-vts.profiler",
-    generated_sources: ["android.hardware.tv.input@1.0-ITvInput-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.tv.input@1.0-ITvInput-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.tv.input@1.0-ITvInput-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hardware.audio.common@2.0",
-        "android.hidl.base@1.0",
-        "android.hardware.tv.input@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.input@1.0-ITvInputCallback-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/tv/input/1.0/ $(genDir)/android/hardware/tv/input/1.0/",
-    srcs: [
-        "ITvInputCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/tv/input/1.0/TvInputCallback.vts.cpp",
-        "android/hardware/tv/input/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tv.input@1.0-ITvInputCallback-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/tv/input/1.0/ $(genDir)/android/hardware/tv/input/1.0/",
-    srcs: [
-        "ITvInputCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/tv/input/1.0/TvInputCallback.vts.h",
-        "android/hardware/tv/input/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tv.input@1.0-ITvInputCallback-vts.profiler",
-    generated_sources: ["android.hardware.tv.input@1.0-ITvInputCallback-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.tv.input@1.0-ITvInputCallback-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.tv.input@1.0-ITvInputCallback-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hardware.audio.common@2.0",
-        "android.hidl.base@1.0",
-        "android.hardware.tv.input@1.0",
-    ],
-}
diff --git a/tv/input/1.0/default/Android.mk b/tv/input/1.0/default/Android.mk
index 9728015..be1775d 100644
--- a/tv/input/1.0/default/Android.mk
+++ b/tv/input/1.0/default/Android.mk
@@ -2,6 +2,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.tv.input@1.0-impl
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
     TvInput.cpp \
@@ -21,6 +22,7 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE := android.hardware.tv.input@1.0-service
 LOCAL_INIT_RC := android.hardware.tv.input@1.0-service.rc
 LOCAL_SRC_FILES := \
diff --git a/tv/input/1.0/default/TvInput.cpp b/tv/input/1.0/default/TvInput.cpp
index 4cd1d40..6fcb2e5 100644
--- a/tv/input/1.0/default/TvInput.cpp
+++ b/tv/input/1.0/default/TvInput.cpp
@@ -98,6 +98,8 @@
                 ++pos;
             }
         }
+    } else if (ret == -EINVAL) {
+        res = Result::INVALID_ARGUMENTS;
     }
     cb(res, tvStreamConfigs);
     return Void();
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
index c5bc0b7..9edeba6 100644
--- 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
@@ -1,4 +1,4 @@
-service tv-input-1-0 /system/bin/hw/android.hardware.tv.input@1.0-service
+service tv-input-1-0 /vendor/bin/hw/android.hardware.tv.input@1.0-service
     class hal
     user system
     group system readproc
diff --git a/tv/input/1.0/vts/Android.mk b/tv/input/1.0/vts/Android.mk
deleted file mode 100644
index e0ad01e..0000000
--- a/tv/input/1.0/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(LOCAL_PATH)/functional/vts/testcases/hal/tv_input/hidl/Android.mk
diff --git a/tv/input/1.0/vts/TvInput.vts b/tv/input/1.0/vts/TvInput.vts
deleted file mode 100644
index 73b322a..0000000
--- a/tv/input/1.0/vts/TvInput.vts
+++ /dev/null
@@ -1,98 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ITvInput"
-
-package: "android.hardware.tv.input"
-
-import: "android.hardware.tv.input@1.0::ITvInputCallback"
-import: "android.hardware.tv.input@1.0::types"
-
-interface: {
-    api: {
-        name: "setCallback"
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "ITvInputCallback"
-            is_callback: true
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            exit: true
-        }
-        callflow: {
-            next: "getStreamConfigurations"
-        }
-    }
-
-    api: {
-        name: "getStreamConfigurations"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::tv::input::V1_0::Result"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::tv::input::V1_0::TvStreamConfig"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        callflow: {
-            next: "openStream"
-            next: "getStreamConfigurations"
-            next: "closeStream"
-        }
-    }
-
-    api: {
-        name: "openStream"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::tv::input::V1_0::Result"
-        }
-        return_type_hidl: {
-            type: TYPE_HANDLE
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        callflow: {
-            next: "closeStream"
-            next: "getStreamConfigurations"
-            next: "openStream"
-        }
-    }
-
-    api: {
-        name: "closeStream"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::tv::input::V1_0::Result"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        callflow: {
-            next: "getStreamConfigurations"
-            next: "openStream"
-            next: "closeStream"
-        }
-    }
-
-}
diff --git a/tv/input/1.0/vts/TvInputCallback.vts b/tv/input/1.0/vts/TvInputCallback.vts
deleted file mode 100644
index b1738a8..0000000
--- a/tv/input/1.0/vts/TvInputCallback.vts
+++ /dev/null
@@ -1,18 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ITvInputCallback"
-
-package: "android.hardware.tv.input"
-
-import: "android.hardware.tv.input@1.0::types"
-
-interface: {
-    api: {
-        name: "notify"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::tv::input::V1_0::TvInputEvent"
-        }
-    }
-
-}
diff --git a/tv/input/1.0/vts/functional/Android.bp b/tv/input/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..b93111d
--- /dev/null
+++ b/tv/input/1.0/vts/functional/Android.bp
@@ -0,0 +1,38 @@
+//
+// Copyright (C) 2017 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: "VtsHalTvInputV1_0TargetTest",
+    gtest: true,
+    srcs: ["VtsHalTvInputV1_0TargetTest.cpp"],
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libcutils",
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libnativehelper",
+        "libutils",
+        "android.hardware.tv.input@1.0",
+    ],
+    static_libs: ["libgtest"],
+    cflags: [
+        "-O0",
+        "-g",
+    ]
+}
+
diff --git a/tv/input/1.0/vts/functional/VtsHalTvInputV1_0TargetTest.cpp b/tv/input/1.0/vts/functional/VtsHalTvInputV1_0TargetTest.cpp
new file mode 100644
index 0000000..3747dc5
--- /dev/null
+++ b/tv/input/1.0/vts/functional/VtsHalTvInputV1_0TargetTest.cpp
@@ -0,0 +1,363 @@
+/*
+ * Copyright (C) 2017 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 "tv_input_hidl_hal_test"
+#include <android-base/logging.h>
+
+#include <android/hardware/tv/input/1.0/types.h>
+#include <android/hardware/tv/input/1.0/ITvInput.h>
+#include <android/hardware/tv/input/1.0/ITvInputCallback.h>
+
+#include <gtest/gtest.h>
+#include <utils/KeyedVector.h>
+#include <mutex>
+#include <vector>
+
+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::TvInputType;
+using ::android::hardware::tv::input::V1_0::TvInputDeviceInfo;
+using ::android::hardware::tv::input::V1_0::TvInputEventType;
+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::sp;
+
+#define WAIT_FOR_EVENT_TIMEOUT 5
+#define DEFAULT_ID INT32_MIN
+
+/* The main test class for TV Input HIDL HAL. */
+class TvInputHidlTest : public ::testing::Test {
+ public:
+  virtual void SetUp() override {
+    tv_input_ = ITvInput::getService();
+    ASSERT_NE(tv_input_, nullptr);
+    tv_input_callback_ = new TvInputCallback(*this);
+    ASSERT_NE(tv_input_callback_, nullptr);
+    tv_input_->setCallback(tv_input_callback_);
+    // All events received within the timeout should be handled.
+    sleep(WAIT_FOR_EVENT_TIMEOUT);
+  }
+
+  virtual void TearDown() override {}
+
+  /* Called when a DEVICE_AVAILABLE event is received. */
+  void onDeviceAvailable(const TvInputDeviceInfo& deviceInfo) {
+    device_info_.add(deviceInfo.deviceId, deviceInfo);
+  }
+
+  /* Called when a DEVICE_UNAVAILABLE event is received. */
+  void onDeviceUnavailable(int32_t deviceId) {
+    device_info_.removeItem(deviceId);
+  }
+
+  /* Called when a DEVICE_CONFIGURATIONS_CHANGED event is received. */
+  Result onStreamConfigurationsChanged(int32_t deviceId) {
+    return updateStreamConfigurations(deviceId);
+  }
+
+  /* Gets and updates the stream configurations for a device. */
+  Result updateStreamConfigurations(int32_t deviceId) {
+    stream_config_.removeItem(deviceId);
+    Result result = Result::UNKNOWN;
+    hidl_vec<TvStreamConfig> list;
+    tv_input_->getStreamConfigurations(deviceId,
+        [&result, &list](Result res, hidl_vec<TvStreamConfig> configs) {
+          result = res;
+          if (res == Result::OK) {
+            list = configs;
+          }
+        });
+    if (result == Result::OK) {
+      stream_config_.add(deviceId, list);
+    }
+    return result;
+  }
+
+  /* Gets and updates the stream configurations for all existing devices. */
+  void updateAllStreamConfigurations() {
+    for (size_t i = 0; i < device_info_.size(); i++) {
+      int32_t device_id = device_info_.keyAt(i);
+      updateStreamConfigurations(device_id);
+    }
+  }
+
+  /* Returns a list of indices of stream_config_ whose corresponding values are not empty. */
+  std::vector<size_t> getConfigIndices() {
+    std::vector<size_t> indices;
+    for (size_t i = 0; i < stream_config_.size(); i++) {
+      if (stream_config_.valueAt(i).size() != 0) {
+        indices.push_back(i);
+      }
+    }
+    return indices;
+  }
+
+  /*
+   * Returns DEFAULT_ID if there is no missing integer in the range [0, the size of nums).
+   * Otherwise, returns the smallest missing non-negative integer.
+   */
+  int32_t getNumNotIn(std::vector<int32_t>& nums) {
+    int32_t result = DEFAULT_ID;
+    int32_t size = static_cast<int32_t>(nums.size());
+    for (int32_t i = 0; i < size; i++) {
+      // Put every element to its target position, if possible.
+      int32_t target_pos = nums[i];
+      while (target_pos >= 0 && target_pos < size && i != target_pos && nums[i] != nums[target_pos]) {
+        std::swap(nums[i], nums[target_pos]);
+        target_pos = nums[i];
+      }
+    }
+
+    for (int32_t i = 0; i < size; i++) {
+      if (nums[i] != i) {
+        return i;
+      }
+    }
+    return result;
+  }
+
+  /* A simple test implementation of TvInputCallback for TV Input Events. */
+  class TvInputCallback : public ITvInputCallback {
+    public:
+     TvInputCallback(TvInputHidlTest& parent) : parent_(parent){};
+
+     virtual ~TvInputCallback() = default;
+
+     /*
+      * Notifies the client that an event has occured. For possible event types,
+      * check TvInputEventType.
+      */
+     Return<void> notify(const TvInputEvent& event) override {
+       std::unique_lock<std::mutex> lock(parent_.mutex_);
+       switch(event.type) {
+         case TvInputEventType::DEVICE_AVAILABLE:
+           parent_.onDeviceAvailable(event.deviceInfo);
+           break;
+         case TvInputEventType::DEVICE_UNAVAILABLE:
+           parent_.onDeviceUnavailable(event.deviceInfo.deviceId);
+           break;
+         case TvInputEventType::STREAM_CONFIGURATIONS_CHANGED:
+           parent_.onStreamConfigurationsChanged(event.deviceInfo.deviceId);
+           break;
+       }
+       return Void();
+     };
+    private:
+     /* The test contains this callback instance. */
+     TvInputHidlTest& parent_;
+  };
+
+  /* The TvInput used for the test. */
+  sp<ITvInput> tv_input_;
+
+  /* The TvInputCallback used for the test. */
+  sp<ITvInputCallback> tv_input_callback_;
+
+  /*
+   * A KeyedVector stores device information of every available device.
+   * A key is a device ID and the corresponding value is the TvInputDeviceInfo.
+   */
+  android::KeyedVector<int32_t, TvInputDeviceInfo> device_info_;
+
+  /*
+   * A KeyedVector stores a list of stream configurations of every available device.
+   * A key is a device ID and the corresponding value is the stream configuration list.
+   */
+  android::KeyedVector<int32_t, hidl_vec<TvStreamConfig>> stream_config_;
+
+  /* The mutex controls the access of shared data. */
+  std::mutex mutex_;
+};
+
+
+/* A class for test environment setup. */
+class TvInputHidlEnvironment : public ::testing::Environment {
+ public:
+  virtual void SetUp() {}
+  virtual void TearDown() {}
+
+ private:
+};
+
+/*
+ * GetStreamConfigTest:
+ * Calls updateStreamConfigurations() for each existing device
+ * Checks returned results
+ */
+TEST_F(TvInputHidlTest, GetStreamConfigTest) {
+  std::unique_lock<std::mutex> lock(mutex_);
+  for (size_t i = 0; i < device_info_.size(); i++) {
+    int32_t device_id = device_info_.keyAt(i);
+    Result result = updateStreamConfigurations(device_id);
+    EXPECT_EQ(Result::OK, result);
+  }
+}
+
+/*
+ * OpenAndCloseStreamTest:
+ * Calls openStream() and then closeStream() for each existing stream
+ * Checks returned results
+ */
+TEST_F(TvInputHidlTest, OpenAndCloseStreamTest) {
+  std::unique_lock<std::mutex> lock(mutex_);
+  updateAllStreamConfigurations();
+  for (size_t j = 0; j < stream_config_.size(); j++) {
+    int32_t device_id = stream_config_.keyAt(j);
+    hidl_vec<TvStreamConfig> config = stream_config_.valueAt(j);
+    for (size_t i = 0; i < config.size(); i++) {
+      Result result = Result::UNKNOWN;
+      int32_t stream_id = config[i].streamId;
+      tv_input_->openStream(device_id, stream_id,
+          [&result](Result res, const native_handle_t*) {
+              result = res;
+          });
+      EXPECT_EQ(Result::OK, result);
+
+      result = Result::UNKNOWN;
+      result = tv_input_->closeStream(device_id, stream_id);
+      EXPECT_EQ(Result::OK, result);
+    }
+  }
+}
+
+/*
+ * InvalidDeviceIdTest:
+ * Calls updateStreamConfigurations(), openStream(), and closeStream()
+ * for a non-existing device
+ * Checks returned results
+ * The results should be Result::INVALID_ARGUMENTS
+ */
+TEST_F(TvInputHidlTest, InvalidDeviceIdTest) {
+  std::unique_lock<std::mutex> lock(mutex_);
+
+  std::vector<int32_t> device_ids;
+  for (size_t i = 0; i < device_info_.size(); i++) {
+    device_ids.push_back(device_info_.keyAt(i));
+  }
+  // Get a non-existing device ID.
+  int32_t id = getNumNotIn(device_ids);
+  EXPECT_EQ(Result::INVALID_ARGUMENTS, updateStreamConfigurations(id));
+
+  Result result = Result::UNKNOWN;
+  int32_t stream_id = 0;
+  tv_input_->openStream(id, stream_id,
+      [&result](Result res, const native_handle_t*) {
+          result = res;
+      });
+  EXPECT_EQ(Result::INVALID_ARGUMENTS, result);
+
+  result = Result::UNKNOWN;
+  result = tv_input_->closeStream(id, stream_id);
+  EXPECT_EQ(Result::INVALID_ARGUMENTS, result);
+}
+
+/*
+ * InvalidStreamIdTest:
+ * Calls openStream(), and closeStream() for a non-existing stream
+ * Checks returned results
+ * The results should be Result::INVALID_ARGUMENTS
+ */
+TEST_F(TvInputHidlTest, InvalidStreamIdTest) {
+  std::unique_lock<std::mutex> lock(mutex_);
+  if (device_info_.isEmpty()) {
+    return;
+  }
+  updateAllStreamConfigurations();
+
+  int32_t device_id = device_info_.keyAt(0);
+  // Get a non-existing stream ID.
+  int32_t id = DEFAULT_ID;
+  if (stream_config_.indexOfKey(device_id) >= 0) {
+    std::vector<int32_t> stream_ids;
+    hidl_vec<TvStreamConfig> config = stream_config_.valueFor(device_id);
+    for (size_t i = 0; i < config.size(); i++) {
+      stream_ids.push_back(config[i].streamId);
+    }
+    id = getNumNotIn(stream_ids);
+  }
+
+  Result result = Result::UNKNOWN;
+  tv_input_->openStream(device_id, id,
+      [&result](Result res, const native_handle_t*) {
+          result = res;
+      });
+  EXPECT_EQ(Result::INVALID_ARGUMENTS, result);
+
+  result = Result::UNKNOWN;
+  result = tv_input_->closeStream(device_id, id);
+  EXPECT_EQ(Result::INVALID_ARGUMENTS, result);
+}
+
+/*
+ * OpenAnOpenedStreamsTest:
+ * Calls openStream() twice for a stream (if any)
+ * Checks returned results
+ * The result of the second call should be Result::INVALID_STATE
+ */
+TEST_F(TvInputHidlTest, OpenAnOpenedStreamsTest) {
+  std::unique_lock<std::mutex> lock(mutex_);
+  updateAllStreamConfigurations();
+  std::vector<size_t> indices = getConfigIndices();
+  if (indices.empty()) {
+    return;
+  }
+  int32_t device_id = stream_config_.keyAt(indices[0]);
+  int32_t stream_id = stream_config_.valueAt(indices[0])[0].streamId;
+
+  Result result = Result::UNKNOWN;
+  tv_input_->openStream(device_id, stream_id,
+      [&result](Result res, const native_handle_t*) {
+          result = res;
+      });
+  EXPECT_EQ(Result::OK, result);
+
+  tv_input_->openStream(device_id, stream_id,
+      [&result](Result res, const native_handle_t*) {
+          result = res;
+      });
+  EXPECT_EQ(Result::INVALID_STATE, result);
+}
+
+/*
+ * CloseStreamBeforeOpenTest:
+ * Calls closeStream() without calling openStream() for a stream (if any)
+ * Checks the returned result
+ * The result should be Result::INVALID_STATE
+ */
+TEST_F(TvInputHidlTest, CloseStreamBeforeOpenTest) {
+  std::unique_lock<std::mutex> lock(mutex_);
+  updateAllStreamConfigurations();
+  std::vector<size_t> indices = getConfigIndices();
+  if (indices.empty()) {
+    return;
+  }
+  int32_t device_id = stream_config_.keyAt(indices[0]);
+  int32_t stream_id = stream_config_.valueAt(indices[0])[0].streamId;
+  EXPECT_EQ(Result::INVALID_STATE, tv_input_->closeStream(device_id, stream_id));
+}
+
+int main(int argc, char **argv) {
+  ::testing::AddGlobalTestEnvironment(new TvInputHidlEnvironment);
+  ::testing::InitGoogleTest(&argc, argv);
+  int status = RUN_ALL_TESTS();
+  ALOGI("Test result = %d", status);
+  return status;
+}
+
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/__init__.py b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/__init__.py
+++ /dev/null
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/Android.mk b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/__init__.py b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/__init__.py
+++ /dev/null
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/Android.mk b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/Android.mk
deleted file mode 100644
index 2703d8c..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := TvInputHidlTest
-VTS_CONFIG_SRC_DIR := testcases/hal/tv_input/hidl/host
-include test/vts/tools/build/Android.host_config.mk
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/AndroidTest.xml b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/AndroidTest.xml
deleted file mode 100644
index 8fdd72d..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS Tv Input HIDL HAL's host-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="push" value="spec/hardware/interfaces/tv/input/1.0/vts/TvInput.vts->/data/local/tmp/spec/TvInput.vts" />
-        <option name="push" value="spec/hardware/interfaces/tv/input/1.0/vts/TvInputCallback.vts->/data/local/tmp/spec/TvInputCallback.vts" />
-        <option name="push" value="spec/hardware/interfaces/tv/input/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-        <option name="cleanup" value="true" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer">
-    </target_preparer>
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="TvInputHidlTest" />
-        <option name="test-case-path" value="vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest" />
-    </test>
-</configuration>
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest.py b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest.py
deleted file mode 100644
index b5becd6..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-#
-
-import logging
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test_with_webdb
-from vts.runners.host import const
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-
-
-class TvInputHidlTest(base_test_with_webdb.BaseTestWithWebDbClass):
-    """Two hello world test cases which use the shell driver."""
-
-    def setUpClass(self):
-        """Creates a mirror and init tv input hal."""
-        self.dut = self.registerController(android_device)[0]
-
-        self.dut.shell.InvokeTerminal("one")
-        self.dut.shell.one.Execute("setenforce 0")  # SELinux permissive mode
-
-        self.dut.hal.InitHidlHal(target_type="tv_input",
-                                 target_basepaths=["/system/lib64"],
-                                 target_version=1.0,
-                                 target_package="android.hardware.tv.input",
-                                 target_component_name="ITvInput",
-                                 bits=64 if self.dut.is64Bit else 32)
-
-        self.dut.shell.InvokeTerminal("one")
-
-    def testGetStreamConfigurations(self):
-        configs = self.dut.hal.tv_input.getStreamConfigurations(0)
-        logging.info('return value of getStreamConfigurations(0): %s', configs)
-
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/__init__.py b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/__init__.py
+++ /dev/null
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/Android.mk b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/Android.mk
deleted file mode 100644
index 514df20..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Copyright (C) 2017 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := TvInputHidlProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/tv_input/hidl/host_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/AndroidTest.xml b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/AndroidTest.xml
deleted file mode 100644
index 5b8e6f9..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 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.
--->
-<configuration description="Config for VTS Tv Input HIDL HAL's host-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="push" value="spec/hardware/interfaces/tv/input/1.0/vts/TvInput.vts->/data/local/tmp/spec/TvInput.vts" />
-        <option name="push" value="spec/hardware/interfaces/tv/input/1.0/vts/TvInputCallback.vts->/data/local/tmp/spec/TvInputCallback.vts" />
-        <option name="push" value="spec/hardware/interfaces/tv/input/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-        <option name="cleanup" value="true" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer">
-    </target_preparer>
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="TvInputHidlProfilingTest" />
-        <option name="test-case-path" value="vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/__init__.py b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/__init__.py
+++ /dev/null
diff --git a/tv/input/1.0/vts/types.vts b/tv/input/1.0/vts/types.vts
deleted file mode 100644
index d03e065..0000000
--- a/tv/input/1.0/vts/types.vts
+++ /dev/null
@@ -1,2096 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.tv.input"
-
-import: "android.hardware.audio.common@2.0::types"
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioHandleConsts"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "AUDIO_IO_HANDLE_NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "AUDIO_MODULE_HANDLE_NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "AUDIO_PORT_HANDLE_NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "AUDIO_PATCH_HANDLE_NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::Uuid"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "timeLow"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "timeMid"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "versionAndTimeHigh"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "variantAndClockSeqHigh"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "node"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioStreamType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DEFAULT"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "MIN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "VOICE_CALL"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SYSTEM"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "RING"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "MUSIC"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ALARM"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "NOTIFICATION"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "BLUETOOTH_SCO"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "ENFORCED_AUDIBLE"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "DTMF"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "TTS"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "ACCESSIBILITY"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "REROUTING"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "PATCH"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "PUBLIC_CNT"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "FOR_POLICY_CNT"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "CNT"
-        scalar_value: {
-            int32_t: 13
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioSource"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DEFAULT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "MIC"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "VOICE_UPLINK"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "VOICE_DOWNLINK"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "VOICE_CALL"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "CAMCORDER"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "VOICE_RECOGNITION"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "VOICE_COMMUNICATION"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "REMOTE_SUBMIX"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "UNPROCESSED"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "CNT"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "MAX"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "FM_TUNER"
-        scalar_value: {
-            int32_t: 1998
-        }
-        enumerator: "HOTWORD"
-        scalar_value: {
-            int32_t: 1999
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioSessionConsts"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OUTPUT_STAGE"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "OUTPUT_MIX"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ALLOCATE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioFormat"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "INVALID"
-        scalar_value: {
-            uint32_t: 4294967295
-        }
-        enumerator: "DEFAULT"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "PCM"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "MP3"
-        scalar_value: {
-            uint32_t: 16777216
-        }
-        enumerator: "AMR_NB"
-        scalar_value: {
-            uint32_t: 33554432
-        }
-        enumerator: "AMR_WB"
-        scalar_value: {
-            uint32_t: 50331648
-        }
-        enumerator: "AAC"
-        scalar_value: {
-            uint32_t: 67108864
-        }
-        enumerator: "HE_AAC_V1"
-        scalar_value: {
-            uint32_t: 83886080
-        }
-        enumerator: "HE_AAC_V2"
-        scalar_value: {
-            uint32_t: 100663296
-        }
-        enumerator: "VORBIS"
-        scalar_value: {
-            uint32_t: 117440512
-        }
-        enumerator: "OPUS"
-        scalar_value: {
-            uint32_t: 134217728
-        }
-        enumerator: "AC3"
-        scalar_value: {
-            uint32_t: 150994944
-        }
-        enumerator: "E_AC3"
-        scalar_value: {
-            uint32_t: 167772160
-        }
-        enumerator: "DTS"
-        scalar_value: {
-            uint32_t: 184549376
-        }
-        enumerator: "DTS_HD"
-        scalar_value: {
-            uint32_t: 201326592
-        }
-        enumerator: "IEC61937"
-        scalar_value: {
-            uint32_t: 218103808
-        }
-        enumerator: "DOLBY_TRUEHD"
-        scalar_value: {
-            uint32_t: 234881024
-        }
-        enumerator: "EVRC"
-        scalar_value: {
-            uint32_t: 268435456
-        }
-        enumerator: "EVRCB"
-        scalar_value: {
-            uint32_t: 285212672
-        }
-        enumerator: "EVRCWB"
-        scalar_value: {
-            uint32_t: 301989888
-        }
-        enumerator: "EVRCNW"
-        scalar_value: {
-            uint32_t: 318767104
-        }
-        enumerator: "AAC_ADIF"
-        scalar_value: {
-            uint32_t: 335544320
-        }
-        enumerator: "WMA"
-        scalar_value: {
-            uint32_t: 352321536
-        }
-        enumerator: "WMA_PRO"
-        scalar_value: {
-            uint32_t: 369098752
-        }
-        enumerator: "AMR_WB_PLUS"
-        scalar_value: {
-            uint32_t: 385875968
-        }
-        enumerator: "MP2"
-        scalar_value: {
-            uint32_t: 402653184
-        }
-        enumerator: "QCELP"
-        scalar_value: {
-            uint32_t: 419430400
-        }
-        enumerator: "DSD"
-        scalar_value: {
-            uint32_t: 436207616
-        }
-        enumerator: "FLAC"
-        scalar_value: {
-            uint32_t: 452984832
-        }
-        enumerator: "ALAC"
-        scalar_value: {
-            uint32_t: 469762048
-        }
-        enumerator: "APE"
-        scalar_value: {
-            uint32_t: 486539264
-        }
-        enumerator: "AAC_ADTS"
-        scalar_value: {
-            uint32_t: 503316480
-        }
-        enumerator: "SBC"
-        scalar_value: {
-            uint32_t: 520093696
-        }
-        enumerator: "APTX"
-        scalar_value: {
-            uint32_t: 536870912
-        }
-        enumerator: "APTX_HD"
-        scalar_value: {
-            uint32_t: 553648128
-        }
-        enumerator: "LDAC"
-        scalar_value: {
-            uint32_t: 570425344
-        }
-        enumerator: "MAIN_MASK"
-        scalar_value: {
-            uint32_t: 4278190080
-        }
-        enumerator: "SUB_MASK"
-        scalar_value: {
-            uint32_t: 16777215
-        }
-        enumerator: "PCM_SUB_16_BIT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "PCM_SUB_8_BIT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "PCM_SUB_32_BIT"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "PCM_SUB_8_24_BIT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "PCM_SUB_FLOAT"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "PCM_SUB_24_BIT_PACKED"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "MP3_SUB_NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "AMR_SUB_NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "AAC_SUB_MAIN"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "AAC_SUB_LC"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "AAC_SUB_SSR"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "AAC_SUB_LTP"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "AAC_SUB_HE_V1"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "AAC_SUB_SCALABLE"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "AAC_SUB_ERLC"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "AAC_SUB_LD"
-        scalar_value: {
-            uint32_t: 128
-        }
-        enumerator: "AAC_SUB_HE_V2"
-        scalar_value: {
-            uint32_t: 256
-        }
-        enumerator: "AAC_SUB_ELD"
-        scalar_value: {
-            uint32_t: 512
-        }
-        enumerator: "VORBIS_SUB_NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "PCM_16_BIT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "PCM_8_BIT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "PCM_32_BIT"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "PCM_8_24_BIT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "PCM_FLOAT"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "PCM_24_BIT_PACKED"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "AAC_MAIN"
-        scalar_value: {
-            uint32_t: 67108865
-        }
-        enumerator: "AAC_LC"
-        scalar_value: {
-            uint32_t: 67108866
-        }
-        enumerator: "AAC_SSR"
-        scalar_value: {
-            uint32_t: 67108868
-        }
-        enumerator: "AAC_LTP"
-        scalar_value: {
-            uint32_t: 67108872
-        }
-        enumerator: "AAC_HE_V1"
-        scalar_value: {
-            uint32_t: 67108880
-        }
-        enumerator: "AAC_SCALABLE"
-        scalar_value: {
-            uint32_t: 67108896
-        }
-        enumerator: "AAC_ERLC"
-        scalar_value: {
-            uint32_t: 67108928
-        }
-        enumerator: "AAC_LD"
-        scalar_value: {
-            uint32_t: 67108992
-        }
-        enumerator: "AAC_HE_V2"
-        scalar_value: {
-            uint32_t: 67109120
-        }
-        enumerator: "AAC_ELD"
-        scalar_value: {
-            uint32_t: 67109376
-        }
-        enumerator: "AAC_ADTS_MAIN"
-        scalar_value: {
-            uint32_t: 503316481
-        }
-        enumerator: "AAC_ADTS_LC"
-        scalar_value: {
-            uint32_t: 503316482
-        }
-        enumerator: "AAC_ADTS_SSR"
-        scalar_value: {
-            uint32_t: 503316484
-        }
-        enumerator: "AAC_ADTS_LTP"
-        scalar_value: {
-            uint32_t: 503316488
-        }
-        enumerator: "AAC_ADTS_HE_V1"
-        scalar_value: {
-            uint32_t: 503316496
-        }
-        enumerator: "AAC_ADTS_SCALABLE"
-        scalar_value: {
-            uint32_t: 503316512
-        }
-        enumerator: "AAC_ADTS_ERLC"
-        scalar_value: {
-            uint32_t: 503316544
-        }
-        enumerator: "AAC_ADTS_LD"
-        scalar_value: {
-            uint32_t: 503316608
-        }
-        enumerator: "AAC_ADTS_HE_V2"
-        scalar_value: {
-            uint32_t: 503316736
-        }
-        enumerator: "AAC_ADTS_ELD"
-        scalar_value: {
-            uint32_t: 503316992
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::FixedChannelCount"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "FCC_2"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FCC_8"
-        scalar_value: {
-            int32_t: 8
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "REPRESENTATION_POSITION"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "REPRESENTATION_INDEX"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "INVALID"
-        scalar_value: {
-            uint32_t: 3221225472
-        }
-        enumerator: "OUT_FRONT_LEFT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "OUT_FRONT_RIGHT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "OUT_FRONT_CENTER"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "OUT_LOW_FREQUENCY"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "OUT_BACK_LEFT"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "OUT_BACK_RIGHT"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "OUT_FRONT_LEFT_OF_CENTER"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "OUT_FRONT_RIGHT_OF_CENTER"
-        scalar_value: {
-            uint32_t: 128
-        }
-        enumerator: "OUT_BACK_CENTER"
-        scalar_value: {
-            uint32_t: 256
-        }
-        enumerator: "OUT_SIDE_LEFT"
-        scalar_value: {
-            uint32_t: 512
-        }
-        enumerator: "OUT_SIDE_RIGHT"
-        scalar_value: {
-            uint32_t: 1024
-        }
-        enumerator: "OUT_TOP_CENTER"
-        scalar_value: {
-            uint32_t: 2048
-        }
-        enumerator: "OUT_TOP_FRONT_LEFT"
-        scalar_value: {
-            uint32_t: 4096
-        }
-        enumerator: "OUT_TOP_FRONT_CENTER"
-        scalar_value: {
-            uint32_t: 8192
-        }
-        enumerator: "OUT_TOP_FRONT_RIGHT"
-        scalar_value: {
-            uint32_t: 16384
-        }
-        enumerator: "OUT_TOP_BACK_LEFT"
-        scalar_value: {
-            uint32_t: 32768
-        }
-        enumerator: "OUT_TOP_BACK_CENTER"
-        scalar_value: {
-            uint32_t: 65536
-        }
-        enumerator: "OUT_TOP_BACK_RIGHT"
-        scalar_value: {
-            uint32_t: 131072
-        }
-        enumerator: "OUT_MONO"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "OUT_STEREO"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "OUT_2POINT1"
-        scalar_value: {
-            uint32_t: 11
-        }
-        enumerator: "OUT_QUAD"
-        scalar_value: {
-            uint32_t: 51
-        }
-        enumerator: "OUT_QUAD_BACK"
-        scalar_value: {
-            uint32_t: 51
-        }
-        enumerator: "OUT_QUAD_SIDE"
-        scalar_value: {
-            uint32_t: 1539
-        }
-        enumerator: "OUT_SURROUND"
-        scalar_value: {
-            uint32_t: 263
-        }
-        enumerator: "OUT_PENTA"
-        scalar_value: {
-            uint32_t: 55
-        }
-        enumerator: "OUT_5POINT1"
-        scalar_value: {
-            uint32_t: 63
-        }
-        enumerator: "OUT_5POINT1_BACK"
-        scalar_value: {
-            uint32_t: 63
-        }
-        enumerator: "OUT_5POINT1_SIDE"
-        scalar_value: {
-            uint32_t: 1551
-        }
-        enumerator: "OUT_6POINT1"
-        scalar_value: {
-            uint32_t: 319
-        }
-        enumerator: "OUT_7POINT1"
-        scalar_value: {
-            uint32_t: 1599
-        }
-        enumerator: "OUT_ALL"
-        scalar_value: {
-            uint32_t: 262143
-        }
-        enumerator: "IN_LEFT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "IN_RIGHT"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "IN_FRONT"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "IN_BACK"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "IN_LEFT_PROCESSED"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "IN_RIGHT_PROCESSED"
-        scalar_value: {
-            uint32_t: 128
-        }
-        enumerator: "IN_FRONT_PROCESSED"
-        scalar_value: {
-            uint32_t: 256
-        }
-        enumerator: "IN_BACK_PROCESSED"
-        scalar_value: {
-            uint32_t: 512
-        }
-        enumerator: "IN_PRESSURE"
-        scalar_value: {
-            uint32_t: 1024
-        }
-        enumerator: "IN_X_AXIS"
-        scalar_value: {
-            uint32_t: 2048
-        }
-        enumerator: "IN_Y_AXIS"
-        scalar_value: {
-            uint32_t: 4096
-        }
-        enumerator: "IN_Z_AXIS"
-        scalar_value: {
-            uint32_t: 8192
-        }
-        enumerator: "IN_VOICE_UPLINK"
-        scalar_value: {
-            uint32_t: 16384
-        }
-        enumerator: "IN_VOICE_DNLINK"
-        scalar_value: {
-            uint32_t: 32768
-        }
-        enumerator: "IN_MONO"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "IN_STEREO"
-        scalar_value: {
-            uint32_t: 12
-        }
-        enumerator: "IN_FRONT_BACK"
-        scalar_value: {
-            uint32_t: 48
-        }
-        enumerator: "IN_VOICE_UPLINK_MONO"
-        scalar_value: {
-            uint32_t: 16400
-        }
-        enumerator: "IN_VOICE_DNLINK_MONO"
-        scalar_value: {
-            uint32_t: 32784
-        }
-        enumerator: "IN_VOICE_CALL_MONO"
-        scalar_value: {
-            uint32_t: 49168
-        }
-        enumerator: "IN_ALL"
-        scalar_value: {
-            uint32_t: 65532
-        }
-        enumerator: "COUNT_MAX"
-        scalar_value: {
-            uint32_t: 30
-        }
-        enumerator: "INDEX_HDR"
-        scalar_value: {
-            uint32_t: 2147483648
-        }
-        enumerator: "INDEX_MASK_1"
-        scalar_value: {
-            uint32_t: 2147483649
-        }
-        enumerator: "INDEX_MASK_2"
-        scalar_value: {
-            uint32_t: 2147483651
-        }
-        enumerator: "INDEX_MASK_3"
-        scalar_value: {
-            uint32_t: 2147483655
-        }
-        enumerator: "INDEX_MASK_4"
-        scalar_value: {
-            uint32_t: 2147483663
-        }
-        enumerator: "INDEX_MASK_5"
-        scalar_value: {
-            uint32_t: 2147483679
-        }
-        enumerator: "INDEX_MASK_6"
-        scalar_value: {
-            uint32_t: 2147483711
-        }
-        enumerator: "INDEX_MASK_7"
-        scalar_value: {
-            uint32_t: 2147483775
-        }
-        enumerator: "INDEX_MASK_8"
-        scalar_value: {
-            uint32_t: 2147483903
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioInterleave"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "LEFT"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RIGHT"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "INVALID"
-        scalar_value: {
-            int32_t: -2
-        }
-        enumerator: "CURRENT"
-        scalar_value: {
-            int32_t: -1
-        }
-        enumerator: "NORMAL"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RINGTONE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "IN_CALL"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "IN_COMMUNICATION"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "CNT"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "MAX"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioDevice"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "BIT_IN"
-        scalar_value: {
-            uint32_t: 2147483648
-        }
-        enumerator: "BIT_DEFAULT"
-        scalar_value: {
-            uint32_t: 1073741824
-        }
-        enumerator: "OUT_EARPIECE"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "OUT_SPEAKER"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "OUT_WIRED_HEADSET"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "OUT_WIRED_HEADPHONE"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "OUT_BLUETOOTH_SCO"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "OUT_BLUETOOTH_SCO_HEADSET"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "OUT_BLUETOOTH_SCO_CARKIT"
-        scalar_value: {
-            uint32_t: 64
-        }
-        enumerator: "OUT_BLUETOOTH_A2DP"
-        scalar_value: {
-            uint32_t: 128
-        }
-        enumerator: "OUT_BLUETOOTH_A2DP_HEADPHONES"
-        scalar_value: {
-            uint32_t: 256
-        }
-        enumerator: "OUT_BLUETOOTH_A2DP_SPEAKER"
-        scalar_value: {
-            uint32_t: 512
-        }
-        enumerator: "OUT_AUX_DIGITAL"
-        scalar_value: {
-            uint32_t: 1024
-        }
-        enumerator: "OUT_HDMI"
-        scalar_value: {
-            uint32_t: 1024
-        }
-        enumerator: "OUT_ANLG_DOCK_HEADSET"
-        scalar_value: {
-            uint32_t: 2048
-        }
-        enumerator: "OUT_DGTL_DOCK_HEADSET"
-        scalar_value: {
-            uint32_t: 4096
-        }
-        enumerator: "OUT_USB_ACCESSORY"
-        scalar_value: {
-            uint32_t: 8192
-        }
-        enumerator: "OUT_USB_DEVICE"
-        scalar_value: {
-            uint32_t: 16384
-        }
-        enumerator: "OUT_REMOTE_SUBMIX"
-        scalar_value: {
-            uint32_t: 32768
-        }
-        enumerator: "OUT_TELEPHONY_TX"
-        scalar_value: {
-            uint32_t: 65536
-        }
-        enumerator: "OUT_LINE"
-        scalar_value: {
-            uint32_t: 131072
-        }
-        enumerator: "OUT_HDMI_ARC"
-        scalar_value: {
-            uint32_t: 262144
-        }
-        enumerator: "OUT_SPDIF"
-        scalar_value: {
-            uint32_t: 524288
-        }
-        enumerator: "OUT_FM"
-        scalar_value: {
-            uint32_t: 1048576
-        }
-        enumerator: "OUT_AUX_LINE"
-        scalar_value: {
-            uint32_t: 2097152
-        }
-        enumerator: "OUT_SPEAKER_SAFE"
-        scalar_value: {
-            uint32_t: 4194304
-        }
-        enumerator: "OUT_IP"
-        scalar_value: {
-            uint32_t: 8388608
-        }
-        enumerator: "OUT_BUS"
-        scalar_value: {
-            uint32_t: 16777216
-        }
-        enumerator: "OUT_PROXY"
-        scalar_value: {
-            uint32_t: 33554432
-        }
-        enumerator: "OUT_DEFAULT"
-        scalar_value: {
-            uint32_t: 1073741824
-        }
-        enumerator: "OUT_ALL"
-        scalar_value: {
-            uint32_t: 1140850687
-        }
-        enumerator: "OUT_ALL_A2DP"
-        scalar_value: {
-            uint32_t: 896
-        }
-        enumerator: "OUT_ALL_SCO"
-        scalar_value: {
-            uint32_t: 112
-        }
-        enumerator: "OUT_ALL_USB"
-        scalar_value: {
-            uint32_t: 24576
-        }
-        enumerator: "IN_COMMUNICATION"
-        scalar_value: {
-            uint32_t: 2147483649
-        }
-        enumerator: "IN_AMBIENT"
-        scalar_value: {
-            uint32_t: 2147483650
-        }
-        enumerator: "IN_BUILTIN_MIC"
-        scalar_value: {
-            uint32_t: 2147483652
-        }
-        enumerator: "IN_BLUETOOTH_SCO_HEADSET"
-        scalar_value: {
-            uint32_t: 2147483656
-        }
-        enumerator: "IN_WIRED_HEADSET"
-        scalar_value: {
-            uint32_t: 2147483664
-        }
-        enumerator: "IN_AUX_DIGITAL"
-        scalar_value: {
-            uint32_t: 2147483680
-        }
-        enumerator: "IN_HDMI"
-        scalar_value: {
-            uint32_t: 2147483680
-        }
-        enumerator: "IN_VOICE_CALL"
-        scalar_value: {
-            uint32_t: 2147483712
-        }
-        enumerator: "IN_TELEPHONY_RX"
-        scalar_value: {
-            uint32_t: 2147483712
-        }
-        enumerator: "IN_BACK_MIC"
-        scalar_value: {
-            uint32_t: 2147483776
-        }
-        enumerator: "IN_REMOTE_SUBMIX"
-        scalar_value: {
-            uint32_t: 2147483904
-        }
-        enumerator: "IN_ANLG_DOCK_HEADSET"
-        scalar_value: {
-            uint32_t: 2147484160
-        }
-        enumerator: "IN_DGTL_DOCK_HEADSET"
-        scalar_value: {
-            uint32_t: 2147484672
-        }
-        enumerator: "IN_USB_ACCESSORY"
-        scalar_value: {
-            uint32_t: 2147485696
-        }
-        enumerator: "IN_USB_DEVICE"
-        scalar_value: {
-            uint32_t: 2147487744
-        }
-        enumerator: "IN_FM_TUNER"
-        scalar_value: {
-            uint32_t: 2147491840
-        }
-        enumerator: "IN_TV_TUNER"
-        scalar_value: {
-            uint32_t: 2147500032
-        }
-        enumerator: "IN_LINE"
-        scalar_value: {
-            uint32_t: 2147516416
-        }
-        enumerator: "IN_SPDIF"
-        scalar_value: {
-            uint32_t: 2147549184
-        }
-        enumerator: "IN_BLUETOOTH_A2DP"
-        scalar_value: {
-            uint32_t: 2147614720
-        }
-        enumerator: "IN_LOOPBACK"
-        scalar_value: {
-            uint32_t: 2147745792
-        }
-        enumerator: "IN_IP"
-        scalar_value: {
-            uint32_t: 2148007936
-        }
-        enumerator: "IN_BUS"
-        scalar_value: {
-            uint32_t: 2148532224
-        }
-        enumerator: "IN_PROXY"
-        scalar_value: {
-            uint32_t: 2164260864
-        }
-        enumerator: "IN_DEFAULT"
-        scalar_value: {
-            uint32_t: 3221225472
-        }
-        enumerator: "IN_ALL"
-        scalar_value: {
-            uint32_t: 3240099839
-        }
-        enumerator: "IN_ALL_SCO"
-        scalar_value: {
-            uint32_t: 2147483656
-        }
-        enumerator: "IN_ALL_USB"
-        scalar_value: {
-            uint32_t: 2147489792
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioOutputFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "DIRECT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "PRIMARY"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FAST"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "DEEP_BUFFER"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "COMPRESS_OFFLOAD"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "NON_BLOCKING"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "HW_AV_SYNC"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "TTS"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "RAW"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "SYNC"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "IEC958_NONAUDIO"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "DIRECT_PCM"
-        scalar_value: {
-            int32_t: 8192
-        }
-        enumerator: "MMAP_NOIRQ"
-        scalar_value: {
-            int32_t: 16384
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioInputFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "FAST"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "HW_HOTWORD"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "RAW"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "SYNC"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "MMAP_NOIRQ"
-        scalar_value: {
-            int32_t: 16
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioUsage"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "MEDIA"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "VOICE_COMMUNICATION"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "VOICE_COMMUNICATION_SIGNALLING"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ALARM"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "NOTIFICATION"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "NOTIFICATION_TELEPHONY_RINGTONE"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "NOTIFICATION_COMMUNICATION_REQUEST"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "NOTIFICATION_COMMUNICATION_INSTANT"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "NOTIFICATION_COMMUNICATION_DELAYED"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "NOTIFICATION_EVENT"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "ASSISTANCE_ACCESSIBILITY"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "ASSISTANCE_NAVIGATION_GUIDANCE"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "ASSISTANCE_SONIFICATION"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "GAME"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "VIRTUAL_SOURCE"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "CNT"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "MAX"
-        scalar_value: {
-            int32_t: 15
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioOffloadInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sampleRateHz"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "format"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioFormat"
-    }
-    struct_value: {
-        name: "streamType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioStreamType"
-    }
-    struct_value: {
-        name: "bitRatePerSecond"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "durationMicroseconds"
-        type: TYPE_SCALAR
-        scalar_type: "int64_t"
-    }
-    struct_value: {
-        name: "hasVideo"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "isStreaming"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "bitWidth"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "bufferSize"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "usage"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioUsage"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sampleRateHz"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "format"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioFormat"
-    }
-    struct_value: {
-        name: "offloadInfo"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioOffloadInfo"
-    }
-    struct_value: {
-        name: "frameCount"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioGainMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "JOINT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "CHANNELS"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "RAMP"
-        scalar_value: {
-            uint32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioGain"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "mode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioGainMode"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "minValue"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "maxValue"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "defaultValue"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "stepValue"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "minRampMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxRampMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioGainConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "index"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "mode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioGainMode"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "values"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 32
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-    struct_value: {
-        name: "rampDurationMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortRole"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SOURCE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "SINK"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "DEVICE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "MIX"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "SESSION"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortConfigDeviceExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "hwModule"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioDevice"
-    }
-    struct_value: {
-        name: "address"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 32
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortConfigSessionExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "session"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortConfigMask"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SAMPLE_RATE"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "CHANNEL_MASK"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "FORMAT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "GAIN"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "ALL"
-        scalar_value: {
-            uint32_t: 15
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortConfig"
-    type: TYPE_STRUCT
-    sub_struct: {
-        name: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext"
-        type: TYPE_UNION
-        sub_union: {
-            name: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext::AudioPortConfigMixExt"
-            type: TYPE_STRUCT
-            sub_struct: {
-                name: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext::AudioPortConfigMixExt::UseCase"
-                type: TYPE_UNION
-                union_value: {
-                    name: "stream"
-                    type: TYPE_ENUM
-                    predefined_type: "::android::hardware::audio::common::V2_0::AudioStreamType"
-                }
-                union_value: {
-                    name: "source"
-                    type: TYPE_ENUM
-                    predefined_type: "::android::hardware::audio::common::V2_0::AudioSource"
-                }
-            }
-            struct_value: {
-                name: "hwModule"
-                type: TYPE_SCALAR
-                scalar_type: "int32_t"
-            }
-            struct_value: {
-                name: "ioHandle"
-                type: TYPE_SCALAR
-                scalar_type: "int32_t"
-            }
-            struct_value: {
-                name: "useCase"
-                type: TYPE_UNION
-                predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext::AudioPortConfigMixExt::UseCase"
-            }
-        }
-        union_value: {
-            name: "device"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfigDeviceExt"
-        }
-        union_value: {
-            name: "mix"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext::AudioPortConfigMixExt"
-        }
-        union_value: {
-            name: "session"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfigSessionExt"
-        }
-    }
-    struct_value: {
-        name: "id"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "configMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfigMask"
-    }
-    struct_value: {
-        name: "sampleRateHz"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "channelMask"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-    }
-    struct_value: {
-        name: "format"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioFormat"
-    }
-    struct_value: {
-        name: "gain"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioGainConfig"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortType"
-    }
-    struct_value: {
-        name: "role"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortRole"
-    }
-    struct_value: {
-        name: "ext"
-        type: TYPE_UNION
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfig::Ext"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortDeviceExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "hwModule"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioDevice"
-    }
-    struct_value: {
-        name: "address"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 32
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioMixLatencyClass"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "LOW"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "NORMAL"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortMixExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "hwModule"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "ioHandle"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "latencyClass"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioMixLatencyClass"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPortSessionExt"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "session"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::audio::common::V2_0::AudioPort"
-    type: TYPE_STRUCT
-    sub_struct: {
-        name: "::android::hardware::audio::common::V2_0::AudioPort::Ext"
-        type: TYPE_UNION
-        union_value: {
-            name: "device"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortDeviceExt"
-        }
-        union_value: {
-            name: "mix"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortMixExt"
-        }
-        union_value: {
-            name: "session"
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioPortSessionExt"
-        }
-    }
-    struct_value: {
-        name: "id"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "role"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortRole"
-    }
-    struct_value: {
-        name: "name"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "sampleRates"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-    struct_value: {
-        name: "channelMasks"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioChannelMask"
-        }
-    }
-    struct_value: {
-        name: "formats"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioFormat"
-        }
-    }
-    struct_value: {
-        name: "gains"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::audio::common::V2_0::AudioGain"
-        }
-    }
-    struct_value: {
-        name: "activeConfig"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortConfig"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPortType"
-    }
-    struct_value: {
-        name: "ext"
-        type: TYPE_UNION
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioPort::Ext"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::input::V1_0::Result"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OK"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "NO_RESOURCE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "INVALID_ARGUMENTS"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "INVALID_STATE"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::input::V1_0::TvInputType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OTHER"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "TUNER"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "COMPOSITE"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SVIDEO"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "SCART"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "COMPONENT"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "VGA"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "DVI"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "HDMI"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "DISPLAY_PORT"
-        scalar_value: {
-            int32_t: 10
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::input::V1_0::TvInputDeviceInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "deviceId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::tv::input::V1_0::TvInputType"
-    }
-    struct_value: {
-        name: "portId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "audioType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::audio::common::V2_0::AudioDevice"
-    }
-    struct_value: {
-        name: "audioAddress"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 32
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::input::V1_0::TvInputEventType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DEVICE_AVAILABLE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "DEVICE_UNAVAILABLE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "STREAM_CONFIGURATIONS_CHANGED"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::input::V1_0::TvInputEvent"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::tv::input::V1_0::TvInputEventType"
-    }
-    struct_value: {
-        name: "deviceInfo"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::tv::input::V1_0::TvInputDeviceInfo"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::tv::input::V1_0::TvStreamConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "streamId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "maxVideoWidth"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxVideoHeight"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
diff --git a/update-base-files.sh b/update-base-files.sh
index e2331f5..1eb6b51 100755
--- a/update-base-files.sh
+++ b/update-base-files.sh
@@ -25,6 +25,9 @@
 hidl-gen $options \
          -o hardware/libhardware/include/hardware/nfc-base.h \
          android.hardware.nfc@1.0
+hidl-gen $options \
+         -o hardware/libhardware/include/hardware/gnss-base.h \
+         android.hardware.gnss@1.0
 
 # system/core
 hidl-gen $options \
diff --git a/usb/1.0/Android.bp b/usb/1.0/Android.bp
new file mode 100644
index 0000000..0b641f1
--- /dev/null
+++ b/usb/1.0/Android.bp
@@ -0,0 +1,69 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.usb@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IUsb.hal",
+        "IUsbCallback.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.usb@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.0",
+    srcs: [
+        ":android.hardware.usb@1.0_hal",
+    ],
+    out: [
+        "android/hardware/usb/1.0/types.cpp",
+        "android/hardware/usb/1.0/UsbAll.cpp",
+        "android/hardware/usb/1.0/UsbCallbackAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.usb@1.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.0",
+    srcs: [
+        ":android.hardware.usb@1.0_hal",
+    ],
+    out: [
+        "android/hardware/usb/1.0/types.h",
+        "android/hardware/usb/1.0/IUsb.h",
+        "android/hardware/usb/1.0/IHwUsb.h",
+        "android/hardware/usb/1.0/BnHwUsb.h",
+        "android/hardware/usb/1.0/BpHwUsb.h",
+        "android/hardware/usb/1.0/BsUsb.h",
+        "android/hardware/usb/1.0/IUsbCallback.h",
+        "android/hardware/usb/1.0/IHwUsbCallback.h",
+        "android/hardware/usb/1.0/BnHwUsbCallback.h",
+        "android/hardware/usb/1.0/BpHwUsbCallback.h",
+        "android/hardware/usb/1.0/BsUsbCallback.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.usb@1.0",
+    generated_sources: ["android.hardware.usb@1.0_genc++"],
+    generated_headers: ["android.hardware.usb@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.usb@1.0_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/usb/1.0/Android.mk b/usb/1.0/Android.mk
new file mode 100644
index 0000000..7be7147
--- /dev/null
+++ b/usb/1.0/Android.mk
@@ -0,0 +1,427 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.usb@1.0-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java \
+
+
+#
+# Build types.hal (PortDataRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortDataRole.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortDataRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortMode)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortMode.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortMode
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortPowerRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortPowerRole.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortPowerRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortRole.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortRoleType)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortRoleType.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortRoleType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortStatus)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortStatus.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Status)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/Status.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.Status
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IUsb.hal
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/IUsb.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IUsb.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IUsbCallback.hal
+$(GEN): $(LOCAL_PATH)/IUsbCallback.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::IUsb
+
+$(GEN): $(LOCAL_PATH)/IUsb.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IUsbCallback.hal
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/IUsbCallback.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IUsbCallback.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::IUsbCallback
+
+$(GEN): $(LOCAL_PATH)/IUsbCallback.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.usb@1.0-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java-static \
+
+
+#
+# Build types.hal (PortDataRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortDataRole.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortDataRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortMode)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortMode.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortMode
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortPowerRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortPowerRole.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortPowerRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortRole.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortRoleType)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortRoleType.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortRoleType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortStatus)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortStatus.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.PortStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Status)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/Status.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::types.Status
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IUsb.hal
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/IUsb.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IUsb.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IUsbCallback.hal
+$(GEN): $(LOCAL_PATH)/IUsbCallback.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::IUsb
+
+$(GEN): $(LOCAL_PATH)/IUsb.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IUsbCallback.hal
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/IUsbCallback.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IUsbCallback.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@1.0::IUsbCallback
+
+$(GEN): $(LOCAL_PATH)/IUsbCallback.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.usb@1.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/IUsb.hal
+$(GEN): $(LOCAL_PATH)/IUsbCallback.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 \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.usb@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/usb/1.0/IUsb.hal b/usb/1.0/IUsb.hal
new file mode 100644
index 0000000..965326a
--- /dev/null
+++ b/usb/1.0/IUsb.hal
@@ -0,0 +1,57 @@
+/*
+ * 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.usb@1.0;
+
+import IUsbCallback;
+
+interface IUsb {
+    /*
+     * This function is used to change the port role of a specific port.
+     * For example, when PD_SWAP or PR_SWAP is supported.
+     * This is function is asynchronous. The status of the role switch
+     * will be informed through IUsbCallback object's notifyPortStatusChange
+     * method.
+     *
+     * @param portName name of the port for which the role has to be changed
+     * @param role the new port role.
+     */
+    oneway switchRole(string portName, PortRole role);
+
+    /*
+     * This function is used to register a callback function which is
+     * called by the HAL whenever there is a change in the port state.
+     * i.e. DATA_ROLE, POWER_ROLE or MODE.
+     *
+     * Also the same callback object would be called to inform the caller
+     * of the roleSwitch status.
+     *
+     * @param callback IUsbCallback object used to convey status to the
+     * userspace.
+     */
+    oneway setCallback(IUsbCallback callback);
+
+    /*
+     * This functions is used to request the hal for the current status
+     * status of the Type-C ports. This method is async/oneway. The result of the
+     * query would be sent through the IUsbCallback object's notifyRoleSwitchStatus
+     * to the caller. This api would would let the caller know of the number
+     * of type-c ports that are present and their connection status through the
+     * PortStatus type.
+     */
+    oneway queryPortStatus();
+};
+
diff --git a/usb/1.0/IUsbCallback.hal b/usb/1.0/IUsbCallback.hal
new file mode 100644
index 0000000..b665ba3
--- /dev/null
+++ b/usb/1.0/IUsbCallback.hal
@@ -0,0 +1,45 @@
+/*
+ * 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.usb@1.0;
+
+/*
+ * Callback object used for all the IUsb async methods which expects a result.
+ * Caller is expected to register the callback object using setCallback method
+ * to receive updates on the PortStatus.
+ */
+interface IUsbCallback {
+    /*
+     * Used to convey the current port status to the caller.
+     * Called either when PortState changes due to the port partner (or)
+     * when caller requested for the PortStatus update through queryPortStatus.
+     *
+     * @param currentPortStatus vector object of current status of all the
+     * typeC ports in the device.
+     * @param retval SUCCESS when query was done successfully.
+     * ERROR otherwise.
+     */
+    oneway notifyPortStatusChange(vec<PortStatus> currentPortStatus, Status retval);
+
+    /*
+     * Used to notify the result of the switchRole call to the caller.
+     *
+     * @param portName name of the port for which the roleswap is requested.
+     * @param newRole the new role requested by the caller.
+     * @param retval SUCCESS if the role switch succeeded. FAILURE otherwise.
+     */
+    oneway notifyRoleSwitchStatus(string portName, PortRole newRole, Status retval);
+};
diff --git a/usb/1.0/default/Android.mk b/usb/1.0/default/Android.mk
new file mode 100644
index 0000000..489293c
--- /dev/null
+++ b/usb/1.0/default/Android.mk
@@ -0,0 +1,22 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_PROPRIETARY_MODULE := true
+LOCAL_MODULE := android.hardware.usb@1.0-service
+LOCAL_INIT_RC := android.hardware.usb@1.0-service.rc
+LOCAL_SRC_FILES := \
+    service.cpp \
+    Usb.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+    libcutils \
+    libhidlbase \
+    libhidltransport \
+    liblog \
+    libhwbinder \
+    libutils \
+    libhardware \
+    android.hardware.usb@1.0 \
+
+include $(BUILD_EXECUTABLE)
diff --git a/usb/1.0/default/Usb.cpp b/usb/1.0/default/Usb.cpp
new file mode 100644
index 0000000..f46ff66
--- /dev/null
+++ b/usb/1.0/default/Usb.cpp
@@ -0,0 +1,428 @@
+/*
+ * 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.
+ */
+#include <dirent.h>
+#include <iostream>
+#include <fstream>
+#include <pthread.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <cutils/uevent.h>
+#include <sys/epoll.h>
+#include <utils/Errors.h>
+#include <utils/StrongPointer.h>
+
+#include "Usb.h"
+
+namespace android {
+namespace hardware {
+namespace usb {
+namespace V1_0 {
+namespace implementation {
+
+int32_t readFile(std::string filename, std::string& contents) {
+    std::ifstream file(filename);
+
+    if (file.is_open()) {
+        getline(file, contents);
+        file.close();
+        return 0;
+    }
+    return -1;
+}
+
+std::string appendRoleNodeHelper(const std::string portName, PortRoleType type) {
+    std::string node("/sys/class/dual_role_usb/" + portName);
+
+    switch(type) {
+        case PortRoleType::DATA_ROLE:
+            return node + "/data_role";
+        case PortRoleType::POWER_ROLE:
+            return node + "/power_role";
+        default:
+            return node + "/mode";
+    }
+}
+
+std::string convertRoletoString(PortRole role) {
+    if (role.type == PortRoleType::POWER_ROLE) {
+        if (role.role == static_cast<uint32_t> (PortPowerRole::SOURCE))
+            return "source";
+        else if (role.role ==  static_cast<uint32_t> (PortPowerRole::SINK))
+            return "sink";
+    } else if (role.type == PortRoleType::DATA_ROLE) {
+        if (role.role == static_cast<uint32_t> (PortDataRole::HOST))
+            return "host";
+        if (role.role == static_cast<uint32_t> (PortDataRole::DEVICE))
+            return "device";
+    } else if (role.type == PortRoleType::MODE) {
+        if (role.role == static_cast<uint32_t> (PortMode::UFP))
+            return "ufp";
+        if (role.role == static_cast<uint32_t> (PortMode::DFP))
+            return "dfp";
+    }
+    return "none";
+}
+
+Return<void> Usb::switchRole(const hidl_string& portName,
+        const PortRole& newRole) {
+    std::string filename = appendRoleNodeHelper(std::string(portName.c_str()),
+        newRole.type);
+    std::ofstream file(filename);
+    std::string written;
+
+    ALOGI("filename write: %s role:%d", filename.c_str(), newRole.role);
+
+    if (file.is_open()) {
+        file << convertRoletoString(newRole).c_str();
+        file.close();
+        if (!readFile(filename, written)) {
+            ALOGI("written: %s", written.c_str());
+            if (written == convertRoletoString(newRole)) {
+                ALOGI("Role switch successfull");
+                Return<void> ret =
+                    mCallback->notifyRoleSwitchStatus(portName, newRole,
+                    Status::SUCCESS);
+                if (!ret.isOk())
+                    ALOGE("RoleSwitchStatus error %s",
+                        ret.description().c_str());
+            }
+        }
+    }
+
+    Return<void> ret = mCallback->notifyRoleSwitchStatus(portName, newRole, Status::ERROR);
+    if (!ret.isOk())
+        ALOGE("RoleSwitchStatus error %s", ret.description().c_str());
+
+    return Void();
+}
+
+Status getCurrentRoleHelper(std::string portName,
+        PortRoleType type, uint32_t &currentRole)  {
+    std::string filename;
+    std::string roleName;
+
+    if (type == PortRoleType::POWER_ROLE) {
+        filename = "/sys/class/dual_role_usb/" +
+            portName + "/power_role";
+        currentRole = static_cast<uint32_t>(PortPowerRole::NONE);
+    } else if (type == PortRoleType::DATA_ROLE) {
+        filename = "/sys/class/dual_role_usb/" +
+            portName + "/data_role";
+        currentRole = static_cast<uint32_t> (PortDataRole::NONE);
+    } else if (type == PortRoleType::MODE) {
+        filename = "/sys/class/dual_role_usb/" +
+            portName + "/mode";
+        currentRole = static_cast<uint32_t> (PortMode::NONE);
+    }
+
+    if (readFile(filename, roleName)) {
+        ALOGE("getCurrentRole: Failed to open filesystem node");
+        return Status::ERROR;
+    }
+
+    if (roleName == "dfp")
+        currentRole = static_cast<uint32_t> (PortMode::DFP);
+    else if (roleName == "ufp")
+        currentRole = static_cast<uint32_t> (PortMode::UFP);
+    else if (roleName == "source")
+        currentRole = static_cast<uint32_t> (PortPowerRole::SOURCE);
+    else if (roleName == "sink")
+        currentRole = static_cast<uint32_t> (PortPowerRole::SINK);
+    else if (roleName == "host")
+        currentRole = static_cast<uint32_t> (PortDataRole::HOST);
+    else if (roleName == "device")
+        currentRole = static_cast<uint32_t> (PortDataRole::DEVICE);
+    else if (roleName != "none") {
+         /* case for none has already been addressed.
+          * so we check if the role isnt none.
+          */
+        return Status::UNRECOGNIZED_ROLE;
+    }
+    return Status::SUCCESS;
+}
+
+Status getTypeCPortNamesHelper(std::vector<std::string>& names) {
+    DIR *dp;
+
+    dp = opendir("/sys/class/dual_role_usb");
+    if (dp != NULL)
+    {
+rescan:
+        int32_t ports = 0;
+        int32_t current = 0;
+        struct dirent *ep;
+
+        while ((ep = readdir (dp))) {
+            if (ep->d_type == DT_LNK) {
+                ports++;
+            }
+        }
+        names.resize(ports);
+        rewinddir(dp);
+
+        while ((ep = readdir (dp))) {
+            /* Check to see if new ports were added since the first pass. */
+            if (current >= ports) {
+               rewinddir(dp);
+               goto rescan;
+            }
+
+            if (ep->d_type == DT_LNK) {
+                names[current++] = ep->d_name;
+            }
+        }
+
+        closedir (dp);
+        return Status::SUCCESS;
+    }
+
+    ALOGE("Failed to open /sys/class/dual_role_usb");
+    return Status::ERROR;
+}
+
+bool canSwitchRoleHelper(const std::string portName, PortRoleType type)  {
+    std::string filename = appendRoleNodeHelper(portName, type);
+    std::ofstream file(filename);
+
+    if (file.is_open()) {
+        file.close();
+        return true;
+    }
+    return false;
+}
+
+Status getPortModeHelper(const std::string portName, PortMode& portMode)  {
+    std::string filename = "/sys/class/dual_role_usb/" +
+    std::string(portName.c_str()) + "/supported_modes";
+    std::string modes;
+
+    if (readFile(filename, modes)) {
+        ALOGE("getSupportedRoles: Failed to open filesystem node");
+        return Status::ERROR;
+    }
+
+    if (modes == "ufp dfp")
+        portMode = PortMode::DRP;
+    else  if (modes == "ufp")
+        portMode = PortMode::UFP;
+    else if  (modes == "dfp")
+        portMode = PortMode::DFP;
+    else
+        return Status::UNRECOGNIZED_ROLE;
+
+        return Status::SUCCESS;
+}
+
+Status getPortStatusHelper (hidl_vec<PortStatus>& currentPortStatus) {
+    std::vector<std::string> names;
+    Status result = getTypeCPortNamesHelper(names);
+
+    if (result == Status::SUCCESS) {
+        currentPortStatus.resize(names.size());
+        for(std::vector<std::string>::size_type i = 0; i != names.size(); i++) {
+            ALOGI("%s", names[i].c_str());
+            currentPortStatus[i].portName = names[i];
+
+            uint32_t currentRole;
+            if (getCurrentRoleHelper(names[i], PortRoleType::POWER_ROLE,
+                    currentRole) == Status::SUCCESS) {
+                currentPortStatus[i].currentPowerRole =
+                static_cast<PortPowerRole> (currentRole);
+            } else {
+                ALOGE("Error while retreiving portNames");
+                goto done;
+            }
+
+            if (getCurrentRoleHelper(names[i],
+                    PortRoleType::DATA_ROLE, currentRole) == Status::SUCCESS) {
+                currentPortStatus[i].currentDataRole =
+                        static_cast<PortDataRole> (currentRole);
+            } else {
+                ALOGE("Error while retreiving current port role");
+                goto done;
+            }
+
+            if (getCurrentRoleHelper(names[i], PortRoleType::MODE,
+                    currentRole) == Status::SUCCESS) {
+                currentPortStatus[i].currentMode =
+                    static_cast<PortMode> (currentRole);
+            } else {
+                ALOGE("Error while retreiving current data role");
+                goto done;
+            }
+
+            currentPortStatus[i].canChangeMode =
+                canSwitchRoleHelper(names[i], PortRoleType::MODE);
+            currentPortStatus[i].canChangeDataRole =
+                canSwitchRoleHelper(names[i], PortRoleType::DATA_ROLE);
+            currentPortStatus[i].canChangePowerRole =
+                canSwitchRoleHelper(names[i], PortRoleType::POWER_ROLE);
+
+            ALOGI("canChangeMode: %d canChagedata: %d canChangePower:%d",
+                currentPortStatus[i].canChangeMode,
+                currentPortStatus[i].canChangeDataRole,
+                currentPortStatus[i].canChangePowerRole);
+
+            if (getPortModeHelper(names[i], currentPortStatus[i].supportedModes)
+                  != Status::SUCCESS) {
+                ALOGE("Error while retrieving port modes");
+                goto done;
+            }
+        }
+        return Status::SUCCESS;
+    }
+done:
+    return Status::ERROR;
+}
+
+Return<void> Usb::queryPortStatus() {
+    hidl_vec<PortStatus> currentPortStatus;
+    Status status;
+
+    status = getPortStatusHelper(currentPortStatus);
+    Return<void> ret = mCallback->notifyPortStatusChange(currentPortStatus,
+       status);
+    if (!ret.isOk())
+        ALOGE("queryPortStatus error %s", ret.description().c_str());
+
+    return Void();
+}
+struct data {
+    int uevent_fd;
+    android::hardware::usb::V1_0::implementation::Usb *usb;
+};
+
+static void uevent_event(uint32_t /*epevents*/, struct data *payload) {
+    char msg[UEVENT_MSG_LEN + 2];
+    char *cp;
+    int n;
+
+    n = uevent_kernel_multicast_recv(payload->uevent_fd, msg, UEVENT_MSG_LEN);
+    if (n <= 0)
+        return;
+    if (n >= UEVENT_MSG_LEN)   /* overflow -- discard */
+        return;
+
+    msg[n] = '\0';
+    msg[n + 1] = '\0';
+    cp = msg;
+
+    while (*cp) {
+        if (!strcmp(cp, "SUBSYSTEM=dual_role_usb")) {
+            ALOGE("uevent received %s", cp);
+            if (payload->usb->mCallback != NULL) {
+                hidl_vec<PortStatus> currentPortStatus;
+                Status status = getPortStatusHelper(currentPortStatus);
+                Return<void> ret =
+                    payload->usb->mCallback->notifyPortStatusChange(currentPortStatus, status);
+                if (!ret.isOk())
+                    ALOGE("error %s", ret.description().c_str());
+            }
+            break;
+        }
+        /* advance to after the next \0 */
+        while (*cp++);
+    }
+}
+
+void* work(void* param) {
+    int epoll_fd, uevent_fd;
+    struct epoll_event ev;
+    int nevents = 0;
+    struct data payload;
+
+    ALOGE("creating thread");
+
+    uevent_fd = uevent_open_socket(64*1024, true);
+
+    if (uevent_fd < 0) {
+        ALOGE("uevent_init: uevent_open_socket failed\n");
+        return NULL;
+    }
+
+    payload.uevent_fd = uevent_fd;
+    payload.usb = (android::hardware::usb::V1_0::implementation::Usb *)param;
+
+    fcntl(uevent_fd, F_SETFL, O_NONBLOCK);
+
+    ev.events = EPOLLIN;
+    ev.data.ptr = (void *)uevent_event;
+
+    epoll_fd = epoll_create(64);
+    if (epoll_fd == -1) {
+        ALOGE("epoll_create failed; errno=%d", errno);
+        goto error;
+    }
+
+    if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, uevent_fd, &ev) == -1) {
+        ALOGE("epoll_ctl failed; errno=%d", errno);
+        goto error;
+    }
+
+    while (1) {
+        struct epoll_event events[64];
+
+        nevents = epoll_wait(epoll_fd, events, 64, -1);
+        if (nevents == -1) {
+            if (errno == EINTR)
+                continue;
+            ALOGE("usb epoll_wait failed; errno=%d", errno);
+            break;
+        }
+
+        for (int n = 0; n < nevents; ++n) {
+            if (events[n].data.ptr)
+                (*(void (*)(int, struct data *payload))events[n].data.ptr)
+                    (events[n].events, &payload);
+        }
+    }
+
+error:
+    close(uevent_fd);
+
+    if (epoll_fd >= 0)
+        close(epoll_fd);
+
+    return NULL;
+}
+
+
+Return<void> Usb::setCallback(const sp<IUsbCallback>& callback) {
+
+    if (mCallback != NULL) {
+        ALOGE("Callback already registered");
+        return Void();
+    }
+
+    mCallback = callback;
+    ALOGI("registering callback");
+
+    if (pthread_create(&mPoll, NULL, work, this)) {
+        ALOGE("pthread creation failed %d", errno);
+        mCallback = NULL;
+        return Void();
+    }
+
+    return Void();
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace usb
+}  // namespace hardware
+}  // namespace android
diff --git a/usb/1.0/default/Usb.h b/usb/1.0/default/Usb.h
new file mode 100644
index 0000000..cf418f4
--- /dev/null
+++ b/usb/1.0/default/Usb.h
@@ -0,0 +1,50 @@
+#ifndef ANDROID_HARDWARE_USB_V1_0_USB_H
+#define ANDROID_HARDWARE_USB_V1_0_USB_H
+
+#include <android/hardware/usb/1.0/IUsb.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <utils/Log.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "android.hardware.usb@1.0-service"
+#define UEVENT_MSG_LEN 2048
+
+namespace android {
+namespace hardware {
+namespace usb {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::usb::V1_0::IUsb;
+using ::android::hardware::usb::V1_0::IUsbCallback;
+using ::android::hardware::usb::V1_0::PortRole;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct Usb : public IUsb {
+    Return<void> switchRole(const hidl_string& portName, const PortRole& role) override;
+    Return<void> setCallback(const sp<IUsbCallback>& callback) override;
+    Return<void> queryPortStatus() override;
+
+    sp<IUsbCallback> mCallback;
+    private:
+        pthread_t mPoll;
+};
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace usb
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_USB_V1_0_USB_H
diff --git a/usb/1.0/default/android.hardware.usb@1.0-service.rc b/usb/1.0/default/android.hardware.usb@1.0-service.rc
new file mode 100644
index 0000000..6ea0720
--- /dev/null
+++ b/usb/1.0/default/android.hardware.usb@1.0-service.rc
@@ -0,0 +1,4 @@
+service usb-hal-1-0 /vendor/bin/hw/android.hardware.usb@1.0-service
+    class hal
+    user system
+    group system
diff --git a/example/extension/light/2.0/default/service.cpp b/usb/1.0/default/service.cpp
similarity index 79%
copy from example/extension/light/2.0/default/service.cpp
copy to usb/1.0/default/service.cpp
index d3fb4de..b4db241 100644
--- a/example/extension/light/2.0/default/service.cpp
+++ b/usb/1.0/default/service.cpp
@@ -13,25 +13,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#define LOG_TAG "android.hardware.light@2.0-service"
 
-#include <android/log.h>
 #include <hidl/HidlTransportSupport.h>
+#include "Usb.h"
 
-#include "Light.h"
-
-using android::hardware::configureRpcThreadpool;
-using android::hardware::joinRpcThreadpool;
 using android::sp;
 
+// libhwbinder:
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+
 // Generated HIDL files
-using android::hardware::light::V2_0::ILight;
+using android::hardware::usb::V1_0::IUsb;
+using android::hardware::usb::V1_0::implementation::Usb;
 
 int main() {
-    const char instance[] = "light";
+    const char instance[] = "usb_hal";
 
-    android::sp<ILight> service = new Light();
+    android::sp<IUsb> service = new Usb();
+
     configureRpcThreadpool(1, true /*callerWillJoin*/);
     service->registerAsService(instance);
+
+    ALOGI("USB HAL Ready.");
     joinRpcThreadpool();
 }
diff --git a/usb/1.0/types.hal b/usb/1.0/types.hal
new file mode 100644
index 0000000..17cd8c7
--- /dev/null
+++ b/usb/1.0/types.hal
@@ -0,0 +1,214 @@
+/*
+ * 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.usb@1.0;
+
+
+enum Status : uint32_t {
+    SUCCESS = 0,
+
+    /*
+     * error value when the HAL operation fails for reasons not listed here.
+     */
+    ERROR = 1,
+
+    /*
+     * error value returned when input argument is invalid.
+     */
+    INVALID_ARGUMENT = 2,
+
+    /*
+     * error value returned when role string is unrecognized.
+     */
+    UNRECOGNIZED_ROLE = 3,
+};
+
+/*
+ * Denotes the Port role type.
+ * Passed as an argument for functions used to query or change port roles.
+ */
+enum PortRoleType : uint32_t {
+    /*
+     * Denotes the data role of the port.
+     * The port can either be a "host" or a "device" for data.
+     * This maps to the PortDataRole enum.
+     */
+    DATA_ROLE = 0,
+
+    /*
+     * Denotes the power role of the port.
+     * The port can either be a "source" or "sink" for power.
+     * This maps to PortPowerRole enum.
+     */
+    POWER_ROLE = 1,
+
+    /*
+     * USB ports can be a pure DFP port which can only act
+     * as a host. A UFP port which can only act as a device.
+     * Or a dual role ports which can either can as a host or
+     * a device. This property is used to mention them.
+     */
+    MODE = 2,
+};
+
+@export
+enum PortDataRole : uint32_t {
+    /*
+     * Indicates that the port does not have a data role.
+     * In case of DRP, the current data role of the port is only resolved
+     * when the type-c handshake happens.
+     */
+    NONE = 0,
+
+    /*
+     * Indicates that the port is acting as a host for data.
+     */
+    HOST = 1,
+
+    /*
+     * Indicated that the port is acting as a device for data.
+     */
+    DEVICE = 2,
+
+    NUM_DATA_ROLES = 3,
+};
+
+@export
+enum PortPowerRole : uint32_t {
+    /*
+     * Indicates that the port does not have a power role.
+     * In case of DRP, the current power role of the port is only resolved
+     * when the type-c handshake happens.
+     */
+    NONE = 0,
+
+    /*
+     * Indicates that the port is supplying power to the other port.
+     */
+    SOURCE = 1,
+
+    /*
+     * Indicates that the port is sinking power from the other port.
+     */
+    SINK = 2,
+
+    NUM_POWER_ROLES = 3,
+};
+
+@export
+enum PortMode : uint32_t {
+    /*
+     * Indicates that the port does not have a mode.
+     * In case of DRP, the current mode of the port is only resolved
+     * when the type-c handshake happens.
+     */
+    NONE = 0,
+    /*
+     * Indicates that port can only act as device for data and sink for power.
+     */
+    UFP = 1,
+
+    /*
+     * Indicates the port can only act as host for data and source for power.
+     */
+    DFP = 2,
+
+    /*
+     * Indicates can either act as UFP or DFP at a given point of time.
+     */
+    DRP = 3,
+
+    NUM_MODES = 4,
+};
+
+/*
+ * Used as a container to send port role information.
+ */
+struct PortRole {
+    /*
+     * Indicates the type of Port Role.
+     * Maps to the PortRoleType enum.
+     */
+    PortRoleType type;
+
+    /*
+     * when type is HAL_USB_DATA_ROLE pass values from enum PortDataRole.
+     * when type is HAL_USB_POWER_ROLE pass values from enum PortPowerRole.
+     * when type is HAL_USB_MODE pass values from enum PortMode.
+     */
+    uint32_t role;
+};
+
+/*
+ * Used as the container to report data back to the caller.
+ * Represents the current connection status of a single USB port.
+ */
+struct PortStatus {
+     /*
+      * Name of the port.
+      * Used as the port's id by the caller.
+      */
+     string portName;
+
+     /*
+      * Data role of the port.
+      */
+     PortDataRole currentDataRole;
+
+     /*
+      * Power Role of thte port.
+      */
+     PortPowerRole currentPowerRole;
+
+     /*
+      * Mode in which the port is connected.
+      * Can be UFP or DFP.
+      */
+     PortMode currentMode;
+
+     /*
+      * True indicates that the port's mode can
+      * be changed. False otherwise.
+      */
+     bool canChangeMode;
+
+     /*
+      * True indicates that the port's data role
+      * can be changed. False otherwise.
+      * For example, true if Type-C PD PD_SWAP
+      * is supported.
+      */
+     bool canChangeDataRole;
+
+     /*
+      * True indicates that the port's power role
+      * can be changed. False otherwise.
+      * For example, true if Type-C PD PR_SWAP
+      * is supported.
+      */
+     bool canChangePowerRole;
+
+     /*
+      * Identifies the type of the local port.
+      *
+      * UFP - Indicates that port can only act as device for
+      *       data and sink for power.
+      * DFP - Indicates the port can only act as host for data
+      *       and source for power.
+      * DRP - Indicates can either act as UFP or DFP at a
+      *       given point of time.
+      */
+      PortMode supportedModes;
+};
diff --git a/usb/1.0/vts/functional/Android.bp b/usb/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..de11a8c
--- /dev/null
+++ b/usb/1.0/vts/functional/Android.bp
@@ -0,0 +1,37 @@
+//
+// Copyright (C) 2017 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: "VtsHalUsbV1_0TargetTest",
+    gtest: true,
+    srcs: ["VtsHalUsbV1_0TargetTest.cpp"],
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libcutils",
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libnativehelper",
+        "libutils",
+        "android.hardware.usb@1.0",
+    ],
+    static_libs: ["libgtest"],
+    cflags: [
+        "-O0",
+        "-g",
+    ],
+}
diff --git a/usb/1.0/vts/functional/VtsHalUsbV1_0TargetTest.cpp b/usb/1.0/vts/functional/VtsHalUsbV1_0TargetTest.cpp
new file mode 100644
index 0000000..658e6b1
--- /dev/null
+++ b/usb/1.0/vts/functional/VtsHalUsbV1_0TargetTest.cpp
@@ -0,0 +1,351 @@
+/*
+ * Copyright (C) 2017 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 "VtsHalUsbV1_0TargetTest"
+#include <android-base/logging.h>
+
+#include <android/hardware/usb/1.0/IUsb.h>
+#include <android/hardware/usb/1.0/IUsbCallback.h>
+#include <android/hardware/usb/1.0/types.h>
+
+#include <gtest/gtest.h>
+#include <stdlib.h>
+#include <chrono>
+#include <condition_variable>
+#include <mutex>
+
+#define TIMEOUT_PERIOD 10
+
+using ::android::hardware::usb::V1_0::IUsbCallback;
+using ::android::hardware::usb::V1_0::IUsb;
+using ::android::hardware::usb::V1_0::PortDataRole;
+using ::android::hardware::usb::V1_0::PortMode;
+using ::android::hardware::usb::V1_0::PortPowerRole;
+using ::android::hardware::usb::V1_0::PortRole;
+using ::android::hardware::usb::V1_0::PortRoleType;
+using ::android::hardware::usb::V1_0::PortStatus;
+using ::android::hardware::usb::V1_0::Status;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+#define USB_SERVICE_NAME "usb_hal"
+
+// The main test class for the USB hidl HAL
+class UsbHidlTest : public ::testing::Test {
+ public:
+  // Callback class for the USB HIDL hal.
+  // Usb Hal will call this object upon role switch or port query.
+  class UsbCallback : public IUsbCallback {
+    UsbHidlTest& parent_;
+    int cookie;
+
+   public:
+    UsbCallback(UsbHidlTest& parent, int cookie)
+        : parent_(parent), cookie(cookie){};
+
+    virtual ~UsbCallback() = default;
+
+    // Callback method for the port status.
+    Return<void> notifyPortStatusChange(
+        const hidl_vec<PortStatus>& currentPortStatus, Status retval) override {
+      if (retval == Status::SUCCESS) {
+        parent_.usb_last_port_status.portName =
+            currentPortStatus[0].portName.c_str();
+        parent_.usb_last_port_status.currentDataRole =
+            currentPortStatus[0].currentDataRole;
+        parent_.usb_last_port_status.currentPowerRole =
+            currentPortStatus[0].currentPowerRole;
+        parent_.usb_last_port_status.currentMode =
+            currentPortStatus[0].currentMode;
+      }
+      parent_.usb_last_cookie = cookie;
+      parent_.notify();
+      return Void();
+    };
+
+    // Callback method for the status of role switch operation.
+    Return<void> notifyRoleSwitchStatus(const hidl_string& /*portName*/,
+                                        const PortRole& newRole,
+                                        Status retval) override {
+      parent_.usb_last_status = retval;
+      parent_.usb_last_cookie = cookie;
+      parent_.usb_last_port_role = newRole;
+      parent_.usb_role_switch_done = true;
+      parent_.notify();
+      return Void();
+    };
+  };
+
+  virtual void SetUp() override {
+    ALOGI("Setup");
+    usb = IUsb::getService(USB_SERVICE_NAME);
+    ASSERT_NE(usb, nullptr);
+
+    usb_cb_2 = new UsbCallback(*this, 2);
+    ASSERT_NE(usb_cb_2, nullptr);
+    Return<void> ret = usb->setCallback(usb_cb_2);
+    ASSERT_TRUE(ret.isOk());
+  }
+
+  virtual void TearDown() override { ALOGI("Teardown"); }
+
+  // Used as a mechanism to inform the test about data/event callback.
+  inline void notify() {
+    std::unique_lock<std::mutex> lock(usb_mtx);
+    usb_count++;
+    usb_cv.notify_one();
+  }
+
+  // Test code calls this function to wait for data/event callback.
+  inline std::cv_status wait() {
+    std::unique_lock<std::mutex> lock(usb_mtx);
+
+    std::cv_status status = std::cv_status::no_timeout;
+    auto now = std::chrono::system_clock::now();
+    while (usb_count == 0) {
+      status =
+          usb_cv.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
+      if (status == std::cv_status::timeout) {
+        ALOGI("timeout");
+        return status;
+      }
+    }
+    usb_count--;
+    return status;
+  }
+
+  // USB hidl hal Proxy
+  sp<IUsb> usb;
+
+  // Callback objects for usb hidl
+  // Methods of these objects are called to notify port status updates.
+  sp<IUsbCallback> usb_cb_1, usb_cb_2;
+
+  // The last conveyed status of the USB ports.
+  // Stores information of currentt_data_role, power_role for all the USB ports
+  PortStatus usb_last_port_status;
+
+  // Status of the last role switch operation.
+  Status usb_last_status;
+
+  // Port role information of the last role switch operation.
+  PortRole usb_last_port_role;
+
+  // Flag to indicate the invocation of role switch callback.
+  bool usb_role_switch_done;
+
+  // Identifier for the usb callback object.
+  // Stores the cookie of the last invoked usb callback object.
+  int usb_last_cookie;
+
+  // synchronization primitives to coordinate between main test thread
+  // and the callback thread.
+  std::mutex usb_mtx;
+  std::condition_variable usb_cv;
+  int usb_count;
+};
+
+/*
+ * Test to see if setCallback succeeds.
+ * Callback oject is created and registered.
+ * Check to see if the hidl transaction succeeded.
+ */
+TEST_F(UsbHidlTest, setCallback) {
+  usb_cb_1 = new UsbCallback(*this, 1);
+  ASSERT_NE(usb_cb_1, nullptr);
+  Return<void> ret = usb->setCallback(usb_cb_1);
+  ASSERT_TRUE(ret.isOk());
+}
+
+/*
+ * Check to see if querying type-c
+ * port status succeeds.
+ */
+TEST_F(UsbHidlTest, queryPortStatus) {
+  Return<void> ret = usb->queryPortStatus();
+  ASSERT_TRUE(ret.isOk());
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(2, usb_last_cookie);
+  ALOGI("rightafter: %s", usb_last_port_status.portName.c_str());
+}
+
+/*
+ * Trying to switch a non-existent port should fail.
+ * This test case tried to switch the port with empty
+ * name which is expected to fail.
+ */
+TEST_F(UsbHidlTest, switchEmptyPort) {
+  struct PortRole role;
+  role.type = PortRoleType::DATA_ROLE;
+
+  Return<void> ret = usb->switchRole("", role);
+  ASSERT_TRUE(ret.isOk());
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(Status::ERROR, usb_last_status);
+  EXPECT_EQ(2, usb_last_cookie);
+}
+
+/*
+ * Test switching the mode of usb port.
+ * Test case queries the usb ports present in device.
+ * If there is atleast one usb port, a mode switch
+ * to DFP is attempted for the port.
+ * The callback parametes are checked to see if the mode
+ * switch was successfull. Upon success, Status::SUCCESS
+ * is expected to be returned.
+ */
+TEST_F(UsbHidlTest, switchModetoDFP) {
+  struct PortRole role;
+  role.type = PortRoleType::MODE;
+  role.role = static_cast<uint32_t>(PortMode::DFP);
+
+  Return<void> ret = usb->queryPortStatus();
+  ASSERT_TRUE(ret.isOk());
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(2, usb_last_cookie);
+
+  if (!usb_last_port_status.portName.empty()) {
+    hidl_string portBeingSwitched = usb_last_port_status.portName;
+    ALOGI("mode portname:%s", portBeingSwitched.c_str());
+    usb_role_switch_done = false;
+    Return<void> ret = usb->switchRole(portBeingSwitched.c_str(), role);
+    ASSERT_TRUE(ret.isOk());
+
+    std::cv_status waitStatus = wait();
+    while (waitStatus == std::cv_status::no_timeout &&
+           usb_role_switch_done == false)
+      waitStatus = wait();
+
+    EXPECT_EQ(std::cv_status::no_timeout, waitStatus);
+    EXPECT_EQ(2, usb_last_cookie);
+
+    EXPECT_EQ(static_cast<uint32_t>(PortRoleType::MODE),
+              static_cast<uint32_t>(usb_last_port_role.type));
+    if (usb_last_status == Status::SUCCESS) {
+      EXPECT_EQ(static_cast<uint32_t>(PortMode::DFP),
+                static_cast<uint32_t>(usb_last_port_role.role));
+    } else {
+      EXPECT_NE(static_cast<uint32_t>(PortMode::UFP),
+                static_cast<uint32_t>(usb_last_port_role.role));
+    }
+  }
+}
+
+/*
+ * Test switching the power role of usb port.
+ * Test case queries the usb ports present in device.
+ * If there is atleast one usb port, a power role switch
+ * to SOURCE is attempted for the port.
+ * The callback parametes are checked to see if the power role
+ * switch was successfull. Upon success, Status::SUCCESS
+ * is expected to be returned.
+ */
+
+TEST_F(UsbHidlTest, switchPowerRole) {
+  struct PortRole role;
+  role.type = PortRoleType::POWER_ROLE;
+  role.role = static_cast<uint32_t>(PortPowerRole::SOURCE);
+
+  Return<void> ret = usb->queryPortStatus();
+  ASSERT_TRUE(ret.isOk());
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(2, usb_last_cookie);
+
+  if (!usb_last_port_status.portName.empty()) {
+    hidl_string portBeingSwitched = usb_last_port_status.portName;
+    ALOGI("switchPower role portname:%s", portBeingSwitched.c_str());
+    usb_role_switch_done = false;
+    Return<void> ret = usb->switchRole(portBeingSwitched.c_str(), role);
+    ASSERT_TRUE(ret.isOk());
+
+    std::cv_status waitStatus = wait();
+    while (waitStatus == std::cv_status::no_timeout &&
+           usb_role_switch_done == false)
+      waitStatus = wait();
+
+    EXPECT_EQ(std::cv_status::no_timeout, waitStatus);
+    EXPECT_EQ(2, usb_last_cookie);
+
+    EXPECT_EQ(static_cast<uint32_t>(PortRoleType::POWER_ROLE),
+              static_cast<uint32_t>(usb_last_port_role.type));
+    if (usb_last_status == Status::SUCCESS) {
+      EXPECT_EQ(static_cast<uint32_t>(PortPowerRole::SOURCE),
+                static_cast<uint32_t>(usb_last_port_role.role));
+    } else {
+      EXPECT_NE(static_cast<uint32_t>(PortPowerRole::SINK),
+                static_cast<uint32_t>(usb_last_port_role.role));
+    }
+  }
+}
+
+/*
+ * Test switching the data role of usb port.
+ * Test case queries the usb ports present in device.
+ * If there is atleast one usb port, a power role switch
+ * to HOST is attempted for the port.
+ * The callback parametes are checked to see if the power role
+ * switch was successfull. Upon success, Status::SUCCESS
+ * is expected to be returned.
+ */
+TEST_F(UsbHidlTest, switchDataRole) {
+  struct PortRole role;
+  role.type = PortRoleType::DATA_ROLE;
+  role.role = static_cast<uint32_t>(PortDataRole::HOST);
+
+  Return<void> ret = usb->queryPortStatus();
+  ASSERT_TRUE(ret.isOk());
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(2, usb_last_cookie);
+
+  if (!usb_last_port_status.portName.empty()) {
+    hidl_string portBeingSwitched = usb_last_port_status.portName;
+    ALOGI("portname:%s", portBeingSwitched.c_str());
+    usb_role_switch_done = false;
+    Return<void> ret = usb->switchRole(portBeingSwitched.c_str(), role);
+    ASSERT_TRUE(ret.isOk());
+
+    std::cv_status waitStatus = wait();
+    while (waitStatus == std::cv_status::no_timeout &&
+           usb_role_switch_done == false)
+      waitStatus = wait();
+
+    EXPECT_EQ(std::cv_status::no_timeout, waitStatus);
+    EXPECT_EQ(2, usb_last_cookie);
+
+    EXPECT_EQ(static_cast<uint32_t>(PortRoleType::DATA_ROLE),
+              static_cast<uint32_t>(usb_last_port_role.type));
+    if (usb_last_status == Status::SUCCESS) {
+      EXPECT_EQ(static_cast<uint32_t>(PortDataRole::HOST),
+                static_cast<uint32_t>(usb_last_port_role.role));
+    } else {
+      EXPECT_NE(static_cast<uint32_t>(PortDataRole::DEVICE),
+                static_cast<uint32_t>(usb_last_port_role.role));
+    }
+  }
+}
+
+int main(int argc, char** argv) {
+  ::testing::InitGoogleTest(&argc, argv);
+  int status = RUN_ALL_TESTS();
+  ALOGI("Test result = %d", status);
+  return status;
+}
diff --git a/example/Android.bp b/usb/Android.bp
similarity index 62%
copy from example/Android.bp
copy to usb/Android.bp
index ea6dbb5..33f70eb 100644
--- a/example/Android.bp
+++ b/usb/Android.bp
@@ -1,4 +1,5 @@
 // This is an autogenerated file, do not edit.
 subdirs = [
-    "extension/light/2.0",
+    "1.0",
+    "1.0/vts/functional",
 ]
diff --git a/vehicle/2.0/Android.bp b/vehicle/2.0/Android.bp
deleted file mode 100644
index 986fb74..0000000
--- a/vehicle/2.0/Android.bp
+++ /dev/null
@@ -1,216 +0,0 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
-
-genrule {
-    name: "android.hardware.vehicle@2.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vehicle@2.0",
-    srcs: [
-        "types.hal",
-        "IVehicle.hal",
-        "IVehicleCallback.hal",
-    ],
-    out: [
-        "android/hardware/vehicle/2.0/types.cpp",
-        "android/hardware/vehicle/2.0/VehicleAll.cpp",
-        "android/hardware/vehicle/2.0/VehicleCallbackAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vehicle@2.0_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vehicle@2.0",
-    srcs: [
-        "types.hal",
-        "IVehicle.hal",
-        "IVehicleCallback.hal",
-    ],
-    out: [
-        "android/hardware/vehicle/2.0/types.h",
-        "android/hardware/vehicle/2.0/IVehicle.h",
-        "android/hardware/vehicle/2.0/IHwVehicle.h",
-        "android/hardware/vehicle/2.0/BnHwVehicle.h",
-        "android/hardware/vehicle/2.0/BpHwVehicle.h",
-        "android/hardware/vehicle/2.0/BsVehicle.h",
-        "android/hardware/vehicle/2.0/IVehicleCallback.h",
-        "android/hardware/vehicle/2.0/IHwVehicleCallback.h",
-        "android/hardware/vehicle/2.0/BnHwVehicleCallback.h",
-        "android/hardware/vehicle/2.0/BpHwVehicleCallback.h",
-        "android/hardware/vehicle/2.0/BsVehicleCallback.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.vehicle@2.0",
-    generated_sources: ["android.hardware.vehicle@2.0_genc++"],
-    generated_headers: ["android.hardware.vehicle@2.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.vehicle@2.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "android.hidl.base@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vehicle.vts.driver@2.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vehicle@2.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/vehicle/2.0/ $(genDir)/android/hardware/vehicle/2.0/",
-    srcs: [
-        "types.hal",
-        "IVehicle.hal",
-        "IVehicleCallback.hal",
-    ],
-    out: [
-        "android/hardware/vehicle/2.0/types.vts.cpp",
-        "android/hardware/vehicle/2.0/Vehicle.vts.cpp",
-        "android/hardware/vehicle/2.0/VehicleCallback.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vehicle.vts.driver@2.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vehicle@2.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/vehicle/2.0/ $(genDir)/android/hardware/vehicle/2.0/",
-    srcs: [
-        "types.hal",
-        "IVehicle.hal",
-        "IVehicleCallback.hal",
-    ],
-    out: [
-        "android/hardware/vehicle/2.0/types.vts.h",
-        "android/hardware/vehicle/2.0/Vehicle.vts.h",
-        "android/hardware/vehicle/2.0/VehicleCallback.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.vehicle.vts.driver@2.0",
-    generated_sources: ["android.hardware.vehicle.vts.driver@2.0_genc++"],
-    generated_headers: ["android.hardware.vehicle.vts.driver@2.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.vehicle.vts.driver@2.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.vehicle@2.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vehicle@2.0-IVehicle-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vehicle@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/vehicle/2.0/ $(genDir)/android/hardware/vehicle/2.0/",
-    srcs: [
-        "IVehicle.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/vehicle/2.0/Vehicle.vts.cpp",
-        "android/hardware/vehicle/2.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vehicle@2.0-IVehicle-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vehicle@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/vehicle/2.0/ $(genDir)/android/hardware/vehicle/2.0/",
-    srcs: [
-        "IVehicle.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/vehicle/2.0/Vehicle.vts.h",
-        "android/hardware/vehicle/2.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.vehicle@2.0-IVehicle-vts.profiler",
-    generated_sources: ["android.hardware.vehicle@2.0-IVehicle-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.vehicle@2.0-IVehicle-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.vehicle@2.0-IVehicle-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.vehicle@2.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vehicle@2.0-IVehicleCallback-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vehicle@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/vehicle/2.0/ $(genDir)/android/hardware/vehicle/2.0/",
-    srcs: [
-        "IVehicleCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/vehicle/2.0/VehicleCallback.vts.cpp",
-        "android/hardware/vehicle/2.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vehicle@2.0-IVehicleCallback-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vehicle@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/vehicle/2.0/ $(genDir)/android/hardware/vehicle/2.0/",
-    srcs: [
-        "IVehicleCallback.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/vehicle/2.0/VehicleCallback.vts.h",
-        "android/hardware/vehicle/2.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.vehicle@2.0-IVehicleCallback-vts.profiler",
-    generated_sources: ["android.hardware.vehicle@2.0-IVehicleCallback-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.vehicle@2.0-IVehicleCallback-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.vehicle@2.0-IVehicleCallback-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.vehicle@2.0",
-    ],
-}
diff --git a/vehicle/2.0/default/Android.mk b/vehicle/2.0/default/Android.mk
deleted file mode 100644
index 4a27eeb..0000000
--- a/vehicle/2.0/default/Android.mk
+++ /dev/null
@@ -1,118 +0,0 @@
-# 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.
-
-LOCAL_PATH := $(call my-dir)
-
-module_prefix = android.hardware.vehicle@2.0
-
-###############################################################################
-# Vehicle reference implementation lib
-###############################################################################
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(module_prefix)-manager-lib
-LOCAL_SRC_FILES := \
-    vehicle_hal_manager/AccessControlConfigParser.cpp \
-    vehicle_hal_manager/SubscriptionManager.cpp \
-    vehicle_hal_manager/VehicleHalManager.cpp \
-    vehicle_hal_manager/VehicleObjectPool.cpp \
-    vehicle_hal_manager/VehicleUtils.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
-    libbinder \
-    libhidlbase \
-    libhidltransport \
-    libhwbinder \
-    liblog \
-    libutils \
-    $(module_prefix) \
-
-include $(BUILD_STATIC_LIBRARY)
-
-###############################################################################
-# Vehicle default VehicleHAL implementation
-###############################################################################
-include $(CLEAR_VARS)
-
-LOCAL_MODULE:= $(module_prefix)-default-impl-lib
-LOCAL_SRC_FILES:= \
-    impl/DefaultVehicleHal.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
-    libbinder \
-    libhidlbase \
-    libhidltransport \
-    libhwbinder \
-    liblog \
-    libutils \
-    $(module_prefix) \
-
-include $(BUILD_STATIC_LIBRARY)
-
-
-###############################################################################
-# Vehicle reference implementation unit tests
-###############################################################################
-include $(CLEAR_VARS)
-
-LOCAL_MODULE:= $(module_prefix)-manager-unit-tests
-
-LOCAL_WHOLE_STATIC_LIBRARIES := $(module_prefix)-manager-lib
-
-LOCAL_SRC_FILES:= \
-    tests/AccessControlConfigParser_test.cpp \
-    tests/SubscriptionManager_test.cpp \
-    tests/VehicleHalManager_test.cpp \
-    tests/VehicleObjectPool_test.cpp \
-    tests/VehiclePropConfigIndex_test.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
-    libbinder \
-    libhidlbase \
-    libhidltransport \
-    libhwbinder \
-    liblog \
-    libutils \
-    $(module_prefix) \
-
-LOCAL_CFLAGS += -Wall -Wextra
-LOCAL_MODULE_TAGS := tests
-
-include $(BUILD_NATIVE_TEST)
-
-
-###############################################################################
-# Vehicle HAL service
-###############################################################################
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(module_prefix)-service
-LOCAL_INIT_RC := $(module_prefix)-service.rc
-LOCAL_MODULE_RELATIVE_PATH := hw
-
-LOCAL_SRC_FILES := \
-    VehicleService.cpp
-
-LOCAL_WHOLE_STATIC_LIBRARIES := \
-    $(module_prefix)-manager-lib \
-    $(module_prefix)-default-impl-lib \
-
-LOCAL_SHARED_LIBRARIES := \
-    libbinder \
-    libhidlbase \
-    libhidltransport \
-    libhwbinder \
-    liblog \
-    libutils \
-    android.hardware.vehicle@2.0
-
-include $(BUILD_EXECUTABLE)
diff --git a/vehicle/2.0/default/android.hardware.vehicle@2.0-service.rc b/vehicle/2.0/default/android.hardware.vehicle@2.0-service.rc
deleted file mode 100644
index 622cb1e..0000000
--- a/vehicle/2.0/default/android.hardware.vehicle@2.0-service.rc
+++ /dev/null
@@ -1,4 +0,0 @@
-service vehicle-hal-2.0 /system/bin/hw/android.hardware.vehicle@2.0-service
-    class hal
-    user vehicle_network
-    group system
diff --git a/vehicle/2.0/default/impl/DefaultVehicleHal.cpp b/vehicle/2.0/default/impl/DefaultVehicleHal.cpp
deleted file mode 100644
index 4541168..0000000
--- a/vehicle/2.0/default/impl/DefaultVehicleHal.cpp
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * 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.
- */
-
-#include "DefaultVehicleHal.h"
-
-#define LOG_TAG "default_vehicle"
-#include <android/log.h>
-
-namespace android {
-namespace hardware {
-namespace vehicle {
-namespace V2_0 {
-
-namespace impl {
-
-VehicleHal::VehiclePropValuePtr DefaultVehicleHal::get(
-        const VehiclePropValue& requestedPropValue, StatusCode* outStatus) {
-    *outStatus = StatusCode::OK;
-
-    VehiclePropValuePtr v;
-    VehicleProperty property = requestedPropValue.prop;
-    int32_t areaId = requestedPropValue.areaId;
-    auto& pool = *getValuePool();
-
-    switch (property) {
-        case VehicleProperty::INFO_MAKE:
-            v = pool.obtainString("Default Car");
-            break;
-        case VehicleProperty::HVAC_FAN_SPEED:
-            v = pool.obtainInt32(mFanSpeed);
-            break;
-        case VehicleProperty::HVAC_POWER_ON:
-            v = pool.obtainBoolean(mHvacPowerOn);
-            break;
-        case VehicleProperty::HVAC_RECIRC_ON:
-            v = pool.obtainBoolean(mHvacRecircOn);
-            break;
-        case VehicleProperty::HVAC_AC_ON:
-            v = pool.obtainBoolean(mHvacAcOn);
-            break;
-        case VehicleProperty::HVAC_AUTO_ON:
-            v = pool.obtainBoolean(mHvacAutoOn);
-            break;
-        case VehicleProperty::HVAC_FAN_DIRECTION:
-            v = pool.obtainInt32(toInt(mFanDirection));
-            break;
-        case VehicleProperty::HVAC_DEFROSTER:
-            bool defroster;
-            *outStatus = getHvacDefroster(areaId, &defroster);
-            if (StatusCode::OK == *outStatus) {
-                v = pool.obtainBoolean(defroster);
-            }
-            break;
-        case VehicleProperty::HVAC_TEMPERATURE_SET:
-            float value;
-            *outStatus = getHvacTemperature(requestedPropValue.areaId,
-                                            &value);
-            if (StatusCode::OK == *outStatus) {
-                v = pool.obtainFloat(value);
-            }
-            break;
-        case VehicleProperty::INFO_FUEL_CAPACITY:
-            v = pool.obtainFloat(0.75f);
-            break;
-        case VehicleProperty::DISPLAY_BRIGHTNESS:
-            v = pool.obtainInt32(mBrightness);
-            break;
-        case VehicleProperty::NIGHT_MODE:
-            v = pool.obtainBoolean(false);
-            break;
-        case VehicleProperty::GEAR_SELECTION:
-            v = pool.obtainInt32(toInt(VehicleGear::GEAR_PARK));
-            break;
-        case VehicleProperty::DRIVING_STATUS:
-            v = pool.obtainInt32(toInt(VehicleDrivingStatus::UNRESTRICTED));
-            break;
-        case VehicleProperty::IGNITION_STATE:
-            v = pool.obtainInt32(toInt(VehicleIgnitionState::ACC));
-            break;
-        case VehicleProperty::OBD2_LIVE_FRAME:
-            v = pool.obtainComplex();
-            *outStatus = fillObd2LiveFrame(&v);
-            break;
-        case VehicleProperty::OBD2_FREEZE_FRAME:
-            v = pool.obtainComplex();
-            *outStatus = fillObd2FreezeFrame(&v);
-            break;
-        default:
-            *outStatus = StatusCode::INVALID_ARG;
-    }
-
-    if (StatusCode::OK == *outStatus && v.get() != nullptr) {
-        v->prop = property;
-        v->areaId = areaId;
-        v->timestamp = elapsedRealtimeNano();
-    }
-
-    return v;
-}
-
-StatusCode DefaultVehicleHal::set(const VehiclePropValue& propValue) {
-    auto property = propValue.prop;
-    const auto& v = propValue.value;
-
-    StatusCode status = StatusCode::OK;
-
-    switch (property) {
-        case VehicleProperty::HVAC_POWER_ON:
-            mHvacPowerOn = v.int32Values[0] == 1;
-            break;
-        case VehicleProperty::HVAC_RECIRC_ON:
-            mHvacRecircOn = v.int32Values[0] == 1;
-            break;
-        case VehicleProperty::HVAC_AC_ON:
-            mHvacAcOn = v.int32Values[0] == 1;
-            break;
-        case VehicleProperty::HVAC_AUTO_ON:
-            mHvacAutoOn = v.int32Values[0] == 1;
-            break;
-        case VehicleProperty::HVAC_DEFROSTER:
-            status = setHvacDefroster(propValue.areaId, v.int32Values[0] == 1);
-            break;
-        case VehicleProperty::HVAC_FAN_DIRECTION:
-            mFanDirection =
-                    static_cast<VehicleHvacFanDirection>(v.int32Values[0]);
-            break;
-        case VehicleProperty::HVAC_FAN_SPEED:
-            mFanSpeed = v.int32Values[0];
-            break;
-        case VehicleProperty::HVAC_TEMPERATURE_SET:
-            status = setHvacTemperature(propValue.areaId, v.floatValues[0]);
-            break;
-        case VehicleProperty::DISPLAY_BRIGHTNESS:
-            mBrightness = v.int32Values[0];
-            break;
-        default:
-            status = StatusCode::INVALID_ARG;
-    }
-
-    return status;
-}
-
-StatusCode DefaultVehicleHal::getHvacTemperature(int32_t areaId,
-                                                 float* outValue)  {
-    if (areaId == toInt(VehicleAreaZone::ROW_1_LEFT)) {
-        *outValue = mRow1LeftHvacTemperatureSet;
-    } else if (areaId == toInt(VehicleAreaZone::ROW_1_RIGHT)) {
-        *outValue = mRow1RightHvacTemperatureSet;
-    } else {
-        return StatusCode::INVALID_ARG;
-    }
-    return StatusCode::OK;
-}
-
-StatusCode DefaultVehicleHal::setHvacTemperature(
-    int32_t areaId, float value) {
-    if (areaId == toInt(VehicleAreaZone::ROW_1_LEFT)) {
-        mRow1LeftHvacTemperatureSet = value;
-    } else if (areaId == toInt(VehicleAreaZone::ROW_1_RIGHT)) {
-        mRow1RightHvacTemperatureSet = value;
-    } else {
-        return StatusCode::INVALID_ARG;
-    }
-    return StatusCode::OK;
-}
-
-StatusCode DefaultVehicleHal::getHvacDefroster(int32_t areaId,
-                                               bool* outValue) {
-    ALOGI("Getting Hvac defroster for area: 0x%x", areaId);
-
-    if (areaId == toInt(VehicleAreaWindow::FRONT_WINDSHIELD)) {
-        *outValue = mFrontDefroster;
-    } else if (areaId == toInt(VehicleAreaWindow::REAR_WINDSHIELD)) {
-        *outValue = mRearDefroster;
-    } else {
-        ALOGE("Unable to get hvac defroster for area: 0x%x", areaId);
-        return StatusCode::INVALID_ARG;
-    }
-
-    ALOGI("Getting Hvac defroster for area: 0x%x, OK", areaId);
-    return StatusCode::OK;
-}
-
-StatusCode DefaultVehicleHal::setHvacDefroster(int32_t areaId, bool value) {
-    if (areaId == toInt(VehicleAreaWindow::FRONT_WINDSHIELD)) {
-        mFrontDefroster = value;
-    } else if (areaId == toInt(VehicleAreaWindow::REAR_WINDSHIELD)) {
-        mRearDefroster = value;
-    } else {
-        return StatusCode::INVALID_ARG;
-    }
-    return StatusCode::OK;
-}
-
-static std::vector<int32_t> fillObd2IntValues() {
-    std::vector<int32_t> intValues(toInt(Obd2IntegerSensorIndex::LAST_SYSTEM_INDEX));
-#define SENSOR(name) toInt(Obd2IntegerSensorIndex:: name)
-    intValues[SENSOR(FUEL_SYSTEM_STATUS)] = toInt(FuelSystemStatus::CLOSED_LOOP);
-    intValues[SENSOR(MALFUNCTION_INDICATOR_LIGHT_ON)] = 0;
-    intValues[SENSOR(IGNITION_MONITORS_SUPPORTED)] = toInt(IgnitionMonitorKind::SPARK);
-    intValues[SENSOR(IGNITION_SPECIFIC_MONITORS)] =
-        CommonIgnitionMonitors::COMPONENTS_AVAILABLE |
-        CommonIgnitionMonitors::MISFIRE_AVAILABLE |
-        SparkIgnitionMonitors::AC_REFRIGERANT_AVAILABLE |
-        SparkIgnitionMonitors::EVAPORATIVE_SYSTEM_AVAILABLE;
-    intValues[SENSOR(INTAKE_AIR_TEMPERATURE)] = 35;
-    intValues[SENSOR(COMMANDED_SECONDARY_AIR_STATUS)] =
-        toInt(SecondaryAirStatus::FROM_OUTSIDE_OR_OFF);
-    intValues[SENSOR(NUM_OXYGEN_SENSORS_PRESENT)] = 1;
-    intValues[SENSOR(RUNTIME_SINCE_ENGINE_START)] = 500;
-    intValues[SENSOR(DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON)] = 0;
-    intValues[SENSOR(WARMUPS_SINCE_CODES_CLEARED)] = 51;
-    intValues[SENSOR(DISTANCE_TRAVELED_SINCE_CODES_CLEARED)] = 365;
-    intValues[SENSOR(ABSOLUTE_BAROMETRIC_PRESSURE)] = 30;
-    intValues[SENSOR(CONTROL_MODULE_VOLTAGE)] = 12;
-    intValues[SENSOR(AMBIENT_AIR_TEMPERATURE)] = 18;
-    intValues[SENSOR(MAX_FUEL_AIR_EQUIVALENCE_RATIO)] = 1;
-    intValues[SENSOR(FUEL_TYPE)] = toInt(FuelType::GASOLINE);
-#undef SENSOR
-    return intValues;
-}
-
-static std::vector<float> fillObd2FloatValues() {
-    std::vector<float> floatValues(toInt(Obd2FloatSensorIndex::LAST_SYSTEM_INDEX));
-#define SENSOR(name) toInt(Obd2FloatSensorIndex:: name)
-    floatValues[SENSOR(CALCULATED_ENGINE_LOAD)] = 0.153;
-    floatValues[SENSOR(SHORT_TERM_FUEL_TRIM_BANK1)] = -0.16;
-    floatValues[SENSOR(LONG_TERM_FUEL_TRIM_BANK1)] = -0.16;
-    floatValues[SENSOR(SHORT_TERM_FUEL_TRIM_BANK2)] = -0.16;
-    floatValues[SENSOR(LONG_TERM_FUEL_TRIM_BANK2)] = -0.16;
-    floatValues[SENSOR(INTAKE_MANIFOLD_ABSOLUTE_PRESSURE)] = 7.5;
-    floatValues[SENSOR(ENGINE_RPM)] = 1250.;
-    floatValues[SENSOR(VEHICLE_SPEED)] = 40.;
-    floatValues[SENSOR(TIMING_ADVANCE)] = 2.5;
-    floatValues[SENSOR(THROTTLE_POSITION)] = 19.75;
-    floatValues[SENSOR(OXYGEN_SENSOR1_VOLTAGE)] = 0.265;
-    floatValues[SENSOR(FUEL_TANK_LEVEL_INPUT)] = 0.824;
-    floatValues[SENSOR(EVAPORATION_SYSTEM_VAPOR_PRESSURE)] = -0.373;
-    floatValues[SENSOR(CATALYST_TEMPERATURE_BANK1_SENSOR1)] = 190.;
-    floatValues[SENSOR(RELATIVE_THROTTLE_POSITION)] = 3.;
-    floatValues[SENSOR(ABSOLUTE_THROTTLE_POSITION_B)] = 0.306;
-    floatValues[SENSOR(ACCELERATOR_PEDAL_POSITION_D)] = 0.188;
-    floatValues[SENSOR(ACCELERATOR_PEDAL_POSITION_E)] = 0.094;
-    floatValues[SENSOR(COMMANDED_THROTTLE_ACTUATOR)] = 0.024;
-#undef SENSOR
-    return floatValues;
-}
-
-StatusCode DefaultVehicleHal::fillObd2LiveFrame(VehiclePropValuePtr* v) {
-    static std::vector<int32_t> intValues(fillObd2IntValues());
-    static std::vector<float> floatValues(fillObd2FloatValues());
-    (*v)->value.int32Values = intValues;
-    (*v)->value.floatValues = floatValues;
-    return StatusCode::OK;
-}
-
-StatusCode DefaultVehicleHal::fillObd2FreezeFrame(VehiclePropValuePtr* v) {
-    static std::vector<int32_t> intValues(fillObd2IntValues());
-    static std::vector<float> floatValues(fillObd2FloatValues());
-    (*v)->value.int32Values = intValues;
-    (*v)->value.floatValues = floatValues;
-    (*v)->value.stringValue = "P0010";
-    return StatusCode::OK;
-}
-
-
-}  // impl
-
-}  // namespace V2_0
-}  // namespace vehicle
-}  // namespace hardware
-}  // namespace android
diff --git a/vehicle/2.0/default/impl/DefaultVehicleHal.h b/vehicle/2.0/default/impl/DefaultVehicleHal.h
deleted file mode 100644
index 15a4789..0000000
--- a/vehicle/2.0/default/impl/DefaultVehicleHal.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * 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 android_hardware_vehicle_V2_0_impl_DefaultVehicleHal_H_
-#define android_hardware_vehicle_V2_0_impl_DefaultVehicleHal_H_
-
-#include <VehicleHal.h>
-#include <impl/DefaultConfig.h>
-#include <utils/SystemClock.h>
-
-namespace android {
-namespace hardware {
-namespace vehicle {
-namespace V2_0 {
-
-namespace impl {
-
-class DefaultVehicleHal : public VehicleHal {
-public:
-    std::vector<VehiclePropConfig> listProperties() override {
-        return std::vector<VehiclePropConfig>(std::begin(kVehicleProperties),
-                                              std::end(kVehicleProperties));
-    }
-
-    VehiclePropValuePtr get(const VehiclePropValue& requestedPropValue,
-                            StatusCode* outStatus) override;
-
-    StatusCode set(const VehiclePropValue& propValue) override;
-
-    StatusCode subscribe(VehicleProperty property,
-                       int32_t areas,
-                       float sampleRate) {
-        // TODO(pavelm): implement
-        return StatusCode::OK;
-    }
-
-    StatusCode unsubscribe(VehicleProperty property) {
-        // TODO(pavelm): implement
-        return StatusCode::OK;
-    }
-
-private:
-    StatusCode getHvacTemperature(int32_t areaId, float* outValue);
-    StatusCode setHvacTemperature(int32_t areaId, float value);
-    StatusCode getHvacDefroster(int32_t areaId, bool* outValue);
-    StatusCode setHvacDefroster(int32_t areaId, bool value);
-    StatusCode fillObd2LiveFrame (VehiclePropValuePtr* v);
-    StatusCode fillObd2FreezeFrame (VehiclePropValuePtr* v);
-private:
-    int32_t mFanSpeed = 3;
-    int32_t mBrightness = 7;
-    float mRow1LeftHvacTemperatureSet = 16;
-    float mRow1RightHvacTemperatureSet = 22;
-    bool mFrontDefroster = false;
-    bool mRearDefroster = false;
-    bool mHvacPowerOn = true;
-    bool mHvacRecircOn = true;
-    bool mHvacAcOn = true;
-    bool mHvacAutoOn = true;
-    VehicleHvacFanDirection mFanDirection = VehicleHvacFanDirection::FACE;
-};
-
-}  // impl
-
-}  // namespace V2_0
-}  // namespace vehicle
-}  // namespace hardware
-}  // namespace android
-
-
-#endif  // android_hardware_vehicle_V2_0_impl_DefaultVehicleHal_H_
diff --git a/vehicle/2.0/vts/Android.mk b/vehicle/2.0/vts/Android.mk
deleted file mode 100644
index 31fa999..0000000
--- a/vehicle/2.0/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(LOCAL_PATH)/functional/vts/testcases/hal/vehicle/hidl/Android.mk
\ No newline at end of file
diff --git a/vehicle/2.0/vts/Vehicle.vts b/vehicle/2.0/vts/Vehicle.vts
deleted file mode 100644
index 7fecfa9..0000000
--- a/vehicle/2.0/vts/Vehicle.vts
+++ /dev/null
@@ -1,116 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "IVehicle"
-
-package: "android.hardware.vehicle"
-
-import: "android.hardware.vehicle@2.0::IVehicleCallback"
-import: "android.hardware.vehicle@2.0::types"
-
-interface: {
-    api: {
-        name: "getAllPropConfigs"
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropConfig"
-            }
-        }
-    }
-
-    api: {
-        name: "getPropConfigs"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vehicle::V2_0::StatusCode"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropConfig"
-            }
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_ENUM
-                predefined_type: "::android::hardware::vehicle::V2_0::VehicleProperty"
-            }
-        }
-    }
-
-    api: {
-        name: "get"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vehicle::V2_0::StatusCode"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropValue"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropValue"
-        }
-    }
-
-    api: {
-        name: "set"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vehicle::V2_0::StatusCode"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropValue"
-        }
-    }
-
-    api: {
-        name: "subscribe"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vehicle::V2_0::StatusCode"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "IVehicleCallback"
-            is_callback: true
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::vehicle::V2_0::SubscribeOptions"
-            }
-        }
-    }
-
-    api: {
-        name: "unsubscribe"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vehicle::V2_0::StatusCode"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "IVehicleCallback"
-            is_callback: true
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vehicle::V2_0::VehicleProperty"
-        }
-    }
-
-    api: {
-        name: "debugDump"
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-}
diff --git a/vehicle/2.0/vts/VehicleCallback.vts b/vehicle/2.0/vts/VehicleCallback.vts
deleted file mode 100644
index b5ee152..0000000
--- a/vehicle/2.0/vts/VehicleCallback.vts
+++ /dev/null
@@ -1,45 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "IVehicleCallback"
-
-package: "android.hardware.vehicle"
-
-import: "android.hardware.vehicle@2.0::types"
-
-interface: {
-    api: {
-        name: "onPropertyEvent"
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropValue"
-            }
-        }
-    }
-
-    api: {
-        name: "onPropertySet"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropValue"
-        }
-    }
-
-    api: {
-        name: "onPropertySetError"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vehicle::V2_0::StatusCode"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vehicle::V2_0::VehicleProperty"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-}
diff --git a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/__init__.py b/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/__init__.py
+++ /dev/null
diff --git a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/Android.mk b/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/__init__.py b/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/__init__.py
+++ /dev/null
diff --git a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/Android.mk b/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/Android.mk
deleted file mode 100644
index 716a41c..0000000
--- a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VehicleHidlTest
-VTS_CONFIG_SRC_DIR := testcases/hal/vehicle/hidl/host
-include test/vts/tools/build/Android.host_config.mk
\ No newline at end of file
diff --git a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/AndroidTest.xml b/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/AndroidTest.xml
deleted file mode 100644
index 16b7c29..0000000
--- a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/AndroidTest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS HAL Vehicle test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="cleanup" value="true" />
-        <option name="push" value="spec/hardware/interfaces/vehicle/2.0/vts/Vehicle.vts->/data/local/tmp/spec/Vehicle.vts" />
-        <option name="push" value="spec/hardware/interfaces/vehicle/2.0/vts/VehicleCallback.vts->/data/local/tmp/spec/VehicleCallBack.vts" />
-        <option name="push" value="spec/hardware/interfaces/vehicle/2.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VehicleHidlTest" />
-        <option name="test-case-path" value="vts/testcases/hal/vehicle/hidl/host/VehicleHidlTest" />
-    </test>
-</configuration>
diff --git a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/VehicleHidlTest.py b/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/VehicleHidlTest.py
deleted file mode 100644
index cd52abf..0000000
--- a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/VehicleHidlTest.py
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/env python3.4
-#
-# 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.
-#
-
-import logging
-import time
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test_with_webdb
-from vts.runners.host import const
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.profiling import profiling_utils
-
-
-class VehicleHidlTest(base_test_with_webdb.BaseTestWithWebDbClass):
-    """A simple testcase for the VEHICLE HIDL HAL."""
-
-    def setUpClass(self):
-        """Creates a mirror and init vehicle hal."""
-        self.dut = self.registerController(android_device)[0]
-
-        self.dut.shell.InvokeTerminal("one")
-        self.dut.shell.one.Execute("setenforce 0")  # SELinux permissive mode
-
-        results = self.dut.shell.one.Execute("id -u system")
-        system_uid = results[const.STDOUT][0].strip()
-        logging.info("system_uid: %s", system_uid)
-
-        self.dut.hal.InitHidlHal(
-            target_type="vehicle",
-            target_basepaths=self.dut.libPaths,
-            target_version=2.0,
-            target_package="android.hardware.vehicle",
-            target_component_name="IVehicle",
-            hw_binder_service_name="Vehicle",
-            bits=64 if self.dut.is64Bit else 32)
-
-        self.vehicle = self.dut.hal.vehicle  # shortcut
-        self.vehicle.SetCallerUid(system_uid)
-        self.vtypes = self.dut.hal.vehicle.GetHidlTypeInterface("types")
-        logging.info("vehicle types: %s", self.vtypes)
-
-    def tearDownClass(self):
-        """Disables the profiling.
-
-        If profiling is enabled for the test, collect the profiling data
-        and disable profiling after the test is done.
-        """
-        if self.enable_profiling:
-            self.ProcessAndUploadTraceData()
-
-    def setUpTest(self):
-        if self.enable_profiling:
-            profiling_utils.EnableVTSProfiling(self.dut.shell.one)
-
-    def tearDownTest(self):
-        if self.enable_profiling:
-            profiling_trace_path = getattr(
-                self, self.VTS_PROFILING_TRACING_PATH, "")
-            self.ProcessTraceDataForTestCase(self.dut, profiling_trace_path)
-            profiling_utils.DisableVTSProfiling(self.dut.shell.one)
-
-    def testListProperties(self):
-        """Checks whether some PropConfigs are returned.
-
-        Verifies that call to getAllPropConfigs is not failing and
-        it returns at least 1 vehicle property config.
-        """
-        allConfigs = self.vehicle.getAllPropConfigs()
-        logging.info("all supported properties: %s", allConfigs)
-        asserts.assertLess(0, len(allConfigs))
-
-    def testMandatoryProperties(self):
-        """Verifies that all mandatory properties are supported."""
-        mandatoryProps = set([self.vtypes.DRIVING_STATUS])  # 1 property so far
-        logging.info(self.vtypes.DRIVING_STATUS)
-        allConfigs = self.dut.hal.vehicle.getAllPropConfigs()
-
-        for config in allConfigs:
-            mandatoryProps.discard(config['prop'])
-
-        asserts.assertEqual(0, len(mandatoryProps))
-
-    def getSupportInfo(self):
-        """Check whether OBD2_{LIVE|FREEZE}_FRAME is supported."""
-        isLiveSupported, isFreezeSupported = False, False
-        allConfigs = self.vehicle.getAllPropConfigs()
-        for config in allConfigs:
-            if config['prop'] == self.vtypes.OBD2_LIVE_FRAME:
-                isLiveSupported = True
-            elif config['prop'] == self.vtypes.OBD2_FREEZE_FRAME:
-                isFreezeSupported = True
-            if isLiveSupported and isFreezeSupported:
-                break
-        return isLiveSupported, isFreezeSupported
-
-    def testObd2SensorProperties(self):
-        """Test reading the live and freeze OBD2 frame properties.
-
-        OBD2 (On-Board Diagnostics 2) is the industry standard protocol
-        for retrieving diagnostic sensor information from vehicles.
-        """
-        def checkLiveFrameRead():
-            """Validates reading the OBD2_LIVE_FRAME (if available)."""
-            logging.info("checkLiveFrameRead no-op pass")
-
-        def checkFreezeFrameRead():
-            """Validates reading the OBD2_FREEZE_FRAME (if available)."""
-            logging.info("checkLiveFrameRead no-op pass")
-
-        isLiveSupported, isFreezeSupported = self.getSupportInfo()
-        logging.info("isLiveSupported = %s, isFreezeSupported = %s",
-                     isLiveSupported, isFreezeSupported)
-        if isLiveSupported:
-            checkLiveFrameRead()
-        if isFreezeSupported:
-            checkFreezeFrameRead()
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/__init__.py b/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/__init__.py
+++ /dev/null
diff --git a/vehicle/2.0/vts/types.vts b/vehicle/2.0/vts/types.vts
deleted file mode 100644
index fa7d892..0000000
--- a/vehicle/2.0/vts/types.vts
+++ /dev/null
@@ -1,2673 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 2.0
-component_name: "types"
-
-package: "android.hardware.vehicle"
-
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehiclePropertyType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STRING"
-        scalar_value: {
-            int32_t: 1048576
-        }
-        enumerator: "BOOLEAN"
-        scalar_value: {
-            int32_t: 2097152
-        }
-        enumerator: "INT32"
-        scalar_value: {
-            int32_t: 4194304
-        }
-        enumerator: "INT32_VEC"
-        scalar_value: {
-            int32_t: 4259840
-        }
-        enumerator: "INT64"
-        scalar_value: {
-            int32_t: 5242880
-        }
-        enumerator: "FLOAT"
-        scalar_value: {
-            int32_t: 6291456
-        }
-        enumerator: "FLOAT_VEC"
-        scalar_value: {
-            int32_t: 6356992
-        }
-        enumerator: "BYTES"
-        scalar_value: {
-            int32_t: 7340032
-        }
-        enumerator: "COMPLEX"
-        scalar_value: {
-            int32_t: 14680064
-        }
-        enumerator: "MASK"
-        scalar_value: {
-            int32_t: 16711680
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleArea"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "GLOBAL"
-        scalar_value: {
-            int32_t: 16777216
-        }
-        enumerator: "ZONE"
-        scalar_value: {
-            int32_t: 33554432
-        }
-        enumerator: "WINDOW"
-        scalar_value: {
-            int32_t: 50331648
-        }
-        enumerator: "MIRROR"
-        scalar_value: {
-            int32_t: 67108864
-        }
-        enumerator: "SEAT"
-        scalar_value: {
-            int32_t: 83886080
-        }
-        enumerator: "DOOR"
-        scalar_value: {
-            int32_t: 100663296
-        }
-        enumerator: "MASK"
-        scalar_value: {
-            int32_t: 251658240
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehiclePropertyGroup"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SYSTEM"
-        scalar_value: {
-            int32_t: 268435456
-        }
-        enumerator: "VENDOR"
-        scalar_value: {
-            int32_t: 536870912
-        }
-        enumerator: "MASK"
-        scalar_value: {
-            int32_t: -268435456
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleProperty"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "INVALID"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "INFO_VIN"
-        scalar_value: {
-            int32_t: 286261504
-        }
-        enumerator: "INFO_MAKE"
-        scalar_value: {
-            int32_t: 286261505
-        }
-        enumerator: "INFO_MODEL"
-        scalar_value: {
-            int32_t: 286261506
-        }
-        enumerator: "INFO_MODEL_YEAR"
-        scalar_value: {
-            int32_t: 289407235
-        }
-        enumerator: "INFO_FUEL_CAPACITY"
-        scalar_value: {
-            int32_t: 291504388
-        }
-        enumerator: "PERF_ODOMETER"
-        scalar_value: {
-            int32_t: 291504644
-        }
-        enumerator: "PERF_VEHICLE_SPEED"
-        scalar_value: {
-            int32_t: 291504647
-        }
-        enumerator: "ENGINE_COOLANT_TEMP"
-        scalar_value: {
-            int32_t: 291504897
-        }
-        enumerator: "ENGINE_OIL_TEMP"
-        scalar_value: {
-            int32_t: 291504900
-        }
-        enumerator: "ENGINE_RPM"
-        scalar_value: {
-            int32_t: 291504901
-        }
-        enumerator: "GEAR_SELECTION"
-        scalar_value: {
-            int32_t: 289408000
-        }
-        enumerator: "CURRENT_GEAR"
-        scalar_value: {
-            int32_t: 289408001
-        }
-        enumerator: "PARKING_BRAKE_ON"
-        scalar_value: {
-            int32_t: 287310850
-        }
-        enumerator: "DRIVING_STATUS"
-        scalar_value: {
-            int32_t: 289408004
-        }
-        enumerator: "FUEL_LEVEL_LOW"
-        scalar_value: {
-            int32_t: 287310853
-        }
-        enumerator: "NIGHT_MODE"
-        scalar_value: {
-            int32_t: 287310855
-        }
-        enumerator: "TURN_SIGNAL_STATE"
-        scalar_value: {
-            int32_t: 289408008
-        }
-        enumerator: "IGNITION_STATE"
-        scalar_value: {
-            int32_t: 289408009
-        }
-        enumerator: "HVAC_FAN_SPEED"
-        scalar_value: {
-            int32_t: 306185472
-        }
-        enumerator: "HVAC_FAN_DIRECTION"
-        scalar_value: {
-            int32_t: 306185473
-        }
-        enumerator: "HVAC_TEMPERATURE_CURRENT"
-        scalar_value: {
-            int32_t: 308282626
-        }
-        enumerator: "HVAC_TEMPERATURE_SET"
-        scalar_value: {
-            int32_t: 308282627
-        }
-        enumerator: "HVAC_DEFROSTER"
-        scalar_value: {
-            int32_t: 320865540
-        }
-        enumerator: "HVAC_AC_ON"
-        scalar_value: {
-            int32_t: 304088325
-        }
-        enumerator: "HVAC_MAX_AC_ON"
-        scalar_value: {
-            int32_t: 304088326
-        }
-        enumerator: "HVAC_MAX_DEFROST_ON"
-        scalar_value: {
-            int32_t: 304088327
-        }
-        enumerator: "HVAC_RECIRC_ON"
-        scalar_value: {
-            int32_t: 304088328
-        }
-        enumerator: "HVAC_DUAL_ON"
-        scalar_value: {
-            int32_t: 304088329
-        }
-        enumerator: "HVAC_AUTO_ON"
-        scalar_value: {
-            int32_t: 304088330
-        }
-        enumerator: "HVAC_SEAT_TEMPERATURE"
-        scalar_value: {
-            int32_t: 356517131
-        }
-        enumerator: "HVAC_SIDE_MIRROR_HEAT"
-        scalar_value: {
-            int32_t: 339739916
-        }
-        enumerator: "HVAC_STEERING_WHEEL_TEMP"
-        scalar_value: {
-            int32_t: 289408269
-        }
-        enumerator: "HVAC_TEMPERATURE_UNITS"
-        scalar_value: {
-            int32_t: 306185486
-        }
-        enumerator: "HVAC_ACTUAL_FAN_SPEED_RPM"
-        scalar_value: {
-            int32_t: 306185487
-        }
-        enumerator: "HVAC_FAN_DIRECTION_AVAILABLE"
-        scalar_value: {
-            int32_t: 306185489
-        }
-        enumerator: "HVAC_POWER_ON"
-        scalar_value: {
-            int32_t: 304088336
-        }
-        enumerator: "ENV_OUTSIDE_TEMPERATURE"
-        scalar_value: {
-            int32_t: 291505923
-        }
-        enumerator: "ENV_CABIN_TEMPERATURE"
-        scalar_value: {
-            int32_t: 291505924
-        }
-        enumerator: "RADIO_PRESET"
-        scalar_value: {
-            int32_t: 289474561
-        }
-        enumerator: "AUDIO_FOCUS"
-        scalar_value: {
-            int32_t: 289474816
-        }
-        enumerator: "AUDIO_VOLUME"
-        scalar_value: {
-            int32_t: 289474817
-        }
-        enumerator: "AUDIO_VOLUME_LIMIT"
-        scalar_value: {
-            int32_t: 289474818
-        }
-        enumerator: "AUDIO_ROUTING_POLICY"
-        scalar_value: {
-            int32_t: 289474819
-        }
-        enumerator: "AUDIO_HW_VARIANT"
-        scalar_value: {
-            int32_t: 289409284
-        }
-        enumerator: "AUDIO_EXT_ROUTING_HINT"
-        scalar_value: {
-            int32_t: 289474821
-        }
-        enumerator: "AP_POWER_STATE"
-        scalar_value: {
-            int32_t: 2560
-        }
-        enumerator: "DISPLAY_BRIGHTNESS"
-        scalar_value: {
-            int32_t: 289409537
-        }
-        enumerator: "AP_POWER_BOOTUP_REASON"
-        scalar_value: {
-            int32_t: 289409538
-        }
-        enumerator: "HW_KEY_INPUT"
-        scalar_value: {
-            int32_t: 289475088
-        }
-        enumerator: "INSTRUMENT_CLUSTER_INFO"
-        scalar_value: {
-            int32_t: 289475104
-        }
-        enumerator: "UNIX_TIME"
-        scalar_value: {
-            int32_t: 290458160
-        }
-        enumerator: "CURRENT_TIME_IN_SECONDS"
-        scalar_value: {
-            int32_t: 289409585
-        }
-        enumerator: "DOOR_POS"
-        scalar_value: {
-            int32_t: 373295872
-        }
-        enumerator: "DOOR_MOVE"
-        scalar_value: {
-            int32_t: 373295873
-        }
-        enumerator: "DOOR_LOCK"
-        scalar_value: {
-            int32_t: 371198722
-        }
-        enumerator: "MIRROR_Z_POS"
-        scalar_value: {
-            int32_t: 339741504
-        }
-        enumerator: "MIRROR_Z_MOVE"
-        scalar_value: {
-            int32_t: 339741505
-        }
-        enumerator: "MIRROR_Y_POS"
-        scalar_value: {
-            int32_t: 339741506
-        }
-        enumerator: "MIRROR_Y_MOVE"
-        scalar_value: {
-            int32_t: 339741507
-        }
-        enumerator: "MIRROR_LOCK"
-        scalar_value: {
-            int32_t: 287312708
-        }
-        enumerator: "MIRROR_FOLD"
-        scalar_value: {
-            int32_t: 287312709
-        }
-        enumerator: "SEAT_MEMORY_SELECT"
-        scalar_value: {
-            int32_t: 356518784
-        }
-        enumerator: "SEAT_MEMORY_SET"
-        scalar_value: {
-            int32_t: 356518785
-        }
-        enumerator: "SEAT_BELT_BUCKLED"
-        scalar_value: {
-            int32_t: 354421634
-        }
-        enumerator: "SEAT_BELT_HEIGHT_POS"
-        scalar_value: {
-            int32_t: 356518787
-        }
-        enumerator: "SEAT_BELT_HEIGHT_MOVE"
-        scalar_value: {
-            int32_t: 356518788
-        }
-        enumerator: "SEAT_FORE_AFT_POS"
-        scalar_value: {
-            int32_t: 356518789
-        }
-        enumerator: "SEAT_FORE_AFT_MOVE"
-        scalar_value: {
-            int32_t: 356518790
-        }
-        enumerator: "SEAT_BACKREST_ANGLE_1_POS"
-        scalar_value: {
-            int32_t: 356518791
-        }
-        enumerator: "SEAT_BACKREST_ANGLE_1_MOVE"
-        scalar_value: {
-            int32_t: 356518792
-        }
-        enumerator: "SEAT_BACKREST_ANGLE_2_POS"
-        scalar_value: {
-            int32_t: 356518793
-        }
-        enumerator: "SEAT_BACKREST_ANGLE_2_MOVE"
-        scalar_value: {
-            int32_t: 356518794
-        }
-        enumerator: "SEAT_HEIGHT_POS"
-        scalar_value: {
-            int32_t: 356518795
-        }
-        enumerator: "SEAT_HEIGHT_MOVE"
-        scalar_value: {
-            int32_t: 356518796
-        }
-        enumerator: "SEAT_DEPTH_POS"
-        scalar_value: {
-            int32_t: 356518797
-        }
-        enumerator: "SEAT_DEPTH_MOVE"
-        scalar_value: {
-            int32_t: 356518798
-        }
-        enumerator: "SEAT_TILT_POS"
-        scalar_value: {
-            int32_t: 356518799
-        }
-        enumerator: "SEAT_TILT_MOVE"
-        scalar_value: {
-            int32_t: 356518800
-        }
-        enumerator: "SEAT_LUMBAR_FORE_AFT_POS"
-        scalar_value: {
-            int32_t: 356518801
-        }
-        enumerator: "SEAT_LUMBAR_FORE_AFT_MOVE"
-        scalar_value: {
-            int32_t: 356518802
-        }
-        enumerator: "SEAT_LUMBAR_SIDE_SUPPORT_POS"
-        scalar_value: {
-            int32_t: 356518803
-        }
-        enumerator: "SEAT_LUMBAR_SIDE_SUPPORT_MOVE"
-        scalar_value: {
-            int32_t: 356518804
-        }
-        enumerator: "SEAT_HEADREST_HEIGHT_POS"
-        scalar_value: {
-            int32_t: 289409941
-        }
-        enumerator: "SEAT_HEADREST_HEIGHT_MOVE"
-        scalar_value: {
-            int32_t: 356518806
-        }
-        enumerator: "SEAT_HEADREST_ANGLE_POS"
-        scalar_value: {
-            int32_t: 356518807
-        }
-        enumerator: "SEAT_HEADREST_ANGLE_MOVE"
-        scalar_value: {
-            int32_t: 356518808
-        }
-        enumerator: "SEAT_HEADREST_FORE_AFT_POS"
-        scalar_value: {
-            int32_t: 356518809
-        }
-        enumerator: "SEAT_HEADREST_FORE_AFT_MOVE"
-        scalar_value: {
-            int32_t: 356518810
-        }
-        enumerator: "WINDOW_POS"
-        scalar_value: {
-            int32_t: 289409984
-        }
-        enumerator: "WINDOW_MOVE"
-        scalar_value: {
-            int32_t: 289409985
-        }
-        enumerator: "WINDOW_VENT_POS"
-        scalar_value: {
-            int32_t: 289409986
-        }
-        enumerator: "WINDOW_VENT_MOVE"
-        scalar_value: {
-            int32_t: 289409987
-        }
-        enumerator: "WINDOW_LOCK"
-        scalar_value: {
-            int32_t: 287312836
-        }
-        enumerator: "VEHICLE_MAPS_DATA_SERVICE"
-        scalar_value: {
-            int32_t: 299895808
-        }
-        enumerator: "OBD2_LIVE_FRAME"
-        scalar_value: {
-            int32_t: 299896064
-        }
-        enumerator: "OBD2_FREEZE_FRAME"
-        scalar_value: {
-            int32_t: 299896065
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleHvacFanDirection"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "FACE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "FLOOR"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FACE_AND_FLOOR"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "DEFROST"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "DEFROST_AND_FLOOR"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleRadioConstants"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "VEHICLE_RADIO_PRESET_MIN_VALUE"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioFocusRequest"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "REQUEST_GAIN"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "REQUEST_GAIN_TRANSIENT"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "REQUEST_GAIN_TRANSIENT_MAY_DUCK"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "REQUEST_GAIN_TRANSIENT_NO_DUCK"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "REQUEST_RELEASE"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioFocusState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STATE_GAIN"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "STATE_GAIN_TRANSIENT"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "STATE_LOSS_TRANSIENT_CAN_DUCK"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "STATE_LOSS_TRANSIENT"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "STATE_LOSS"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "STATE_LOSS_TRANSIENT_EXLCUSIVE"
-        scalar_value: {
-            int32_t: 6
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioStreamFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STREAM0_FLAG"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "STREAM1_FLAG"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "STREAM2_FLAG"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioStream"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STREAM0"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "STREAM1"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioExtFocusFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE_FLAG"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "PERMANENT_FLAG"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "TRANSIENT_FLAG"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "PLAY_ONLY_FLAG"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "MUTE_MEDIA_FLAG"
-        scalar_value: {
-            int32_t: 8
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioFocusIndex"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "FOCUS"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "STREAMS"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "EXTERNAL_FOCUS_STATE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "AUDIO_CONTEXTS"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioContextFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "MUSIC_FLAG"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "NAVIGATION_FLAG"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "VOICE_COMMAND_FLAG"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "CALL_FLAG"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "ALARM_FLAG"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "NOTIFICATION_FLAG"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "UNKNOWN_FLAG"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "SAFETY_ALERT_FLAG"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "CD_ROM_FLAG"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "AUX_AUDIO_FLAG"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "SYSTEM_SOUND_FLAG"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "RADIO_FLAG"
-        scalar_value: {
-            int32_t: 2048
-        }
-        enumerator: "EXT_SOURCE_FLAG"
-        scalar_value: {
-            int32_t: 4096
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioVolumeCapabilityFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "PERSISTENT_STORAGE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "MASTER_VOLUME_ONLY"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioVolumeState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STATE_OK"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "LIMIT_REACHED"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioVolumeIndex"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "INDEX_STREAM"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "INDEX_VOLUME"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "INDEX_STATE"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioVolumeLimitIndex"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STREAM"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "MAX_VOLUME"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioRoutingPolicyIndex"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STREAM"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "CONTEXTS"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAudioHwVariantConfigFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "INTERNAL_RADIO_FLAG"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleApPowerStateConfigFlag"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ENABLE_DEEP_SLEEP_FLAG"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CONFIG_SUPPORT_TIMER_POWER_ON_FLAG"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleApPowerState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OFF"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "DEEP_SLEEP"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ON_DISP_OFF"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "ON_FULL"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SHUTDOWN_PREPARE"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleApPowerStateShutdownParam"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SHUTDOWN_IMMEDIATELY"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CAN_SLEEP"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "SHUTDOWN_ONLY"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleApPowerSetState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "BOOT_COMPLETE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "DEEP_SLEEP_ENTRY"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "DEEP_SLEEP_EXIT"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SHUTDOWN_POSTPONE"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "SHUTDOWN_START"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "DISPLAY_OFF"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "DISPLAY_ON"
-        scalar_value: {
-            int32_t: 7
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleApPowerStateIndex"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STATE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ADDITIONAL"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleApPowerBootupReason"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "USER_POWER_ON"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "USER_UNLOCK"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "TIMER"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleHwKeyInputAction"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ACTION_DOWN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ACTION_UP"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleDisplay"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "MAIN"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "INSTRUMENT_CLUSTER"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleInstrumentClusterType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "HAL_INTERFACE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "EXTERNAL_DISPLAY"
-        scalar_value: {
-            int32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleUnit"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SHOULD_NOT_USE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "METER_PER_SEC"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "RPM"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "HERTZ"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "PERCENTILE"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "MILLIMETER"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "METER"
-        scalar_value: {
-            int32_t: 33
-        }
-        enumerator: "KILOMETER"
-        scalar_value: {
-            int32_t: 35
-        }
-        enumerator: "CELSIUS"
-        scalar_value: {
-            int32_t: 48
-        }
-        enumerator: "FAHRENHEIT"
-        scalar_value: {
-            int32_t: 49
-        }
-        enumerator: "KELVIN"
-        scalar_value: {
-            int32_t: 50
-        }
-        enumerator: "MILLILITER"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "NANO_SECS"
-        scalar_value: {
-            int32_t: 80
-        }
-        enumerator: "SECS"
-        scalar_value: {
-            int32_t: 83
-        }
-        enumerator: "YEAR"
-        scalar_value: {
-            int32_t: 89
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehiclePropertyChangeMode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "STATIC"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ON_CHANGE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CONTINUOUS"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "POLL"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ON_SET"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehiclePropertyAccess"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "READ"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "WRITE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "READ_WRITE"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleDrivingStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNRESTRICTED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "NO_VIDEO"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "NO_KEYBOARD_INPUT"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "NO_VOICE_INPUT"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "NO_CONFIG"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "LIMIT_MESSAGE_LEN"
-        scalar_value: {
-            int32_t: 16
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleGear"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "GEAR_NEUTRAL"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "GEAR_REVERSE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "GEAR_PARK"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "GEAR_DRIVE"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "GEAR_LOW"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "GEAR_1"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "GEAR_2"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "GEAR_3"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "GEAR_4"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "GEAR_5"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "GEAR_6"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "GEAR_7"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "GEAR_8"
-        scalar_value: {
-            int32_t: 2048
-        }
-        enumerator: "GEAR_9"
-        scalar_value: {
-            int32_t: 4096
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAreaZone"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ROW_1_LEFT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ROW_1_CENTER"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "ROW_1_RIGHT"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "ROW_1"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "ROW_2_LEFT"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "ROW_2_CENTER"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "ROW_2_RIGHT"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "ROW_2"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "ROW_3_LEFT"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "ROW_3_CENTER"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "ROW_3_RIGHT"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "ROW_3"
-        scalar_value: {
-            int32_t: 2048
-        }
-        enumerator: "ROW_4_LEFT"
-        scalar_value: {
-            int32_t: 4096
-        }
-        enumerator: "ROW_4_CENTER"
-        scalar_value: {
-            int32_t: 8192
-        }
-        enumerator: "ROW_4_RIGHT"
-        scalar_value: {
-            int32_t: 16384
-        }
-        enumerator: "ROW_4"
-        scalar_value: {
-            int32_t: 32768
-        }
-        enumerator: "WHOLE_CABIN"
-        scalar_value: {
-            int32_t: -2147483648
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAreaSeat"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ROW_1_LEFT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ROW_1_CENTER"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "ROW_1_RIGHT"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "ROW_2_LEFT"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "ROW_2_CENTER"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "ROW_2_RIGHT"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "ROW_3_LEFT"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "ROW_3_CENTER"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "ROW_3_RIGHT"
-        scalar_value: {
-            int32_t: 1024
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAreaWindow"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "FRONT_WINDSHIELD"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "REAR_WINDSHIELD"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "ROOF_TOP"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "ROW_1_LEFT"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "ROW_1_RIGHT"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "ROW_2_LEFT"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "ROW_2_RIGHT"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "ROW_3_LEFT"
-        scalar_value: {
-            int32_t: 4096
-        }
-        enumerator: "ROW_3_RIGHT"
-        scalar_value: {
-            int32_t: 8192
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAreaDoor"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "ROW_1_LEFT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "ROW_1_RIGHT"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "ROW_2_LEFT"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "ROW_2_RIGHT"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "ROW_3_LEFT"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "ROW_3_RIGHT"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "HOOD"
-        scalar_value: {
-            int32_t: 268435456
-        }
-        enumerator: "REAR"
-        scalar_value: {
-            int32_t: 536870912
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAreaMirror"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "DRIVER_LEFT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "DRIVER_RIGHT"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "DRIVER_CENTER"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleTurnSignal"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "RIGHT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "LEFT"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "EMERGENCY"
-        scalar_value: {
-            int32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleAreaConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "areaId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "minInt32Value"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "maxInt32Value"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "minInt64Value"
-        type: TYPE_SCALAR
-        scalar_type: "int64_t"
-    }
-    struct_value: {
-        name: "maxInt64Value"
-        type: TYPE_SCALAR
-        scalar_type: "int64_t"
-    }
-    struct_value: {
-        name: "minFloatValue"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "maxFloatValue"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehiclePropConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "prop"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::vehicle::V2_0::VehicleProperty"
-    }
-    struct_value: {
-        name: "access"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropertyAccess"
-    }
-    struct_value: {
-        name: "changeMode"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropertyChangeMode"
-    }
-    struct_value: {
-        name: "supportedAreas"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "areaConfigs"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::vehicle::V2_0::VehicleAreaConfig"
-        }
-    }
-    struct_value: {
-        name: "configFlags"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "configArray"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-    struct_value: {
-        name: "configString"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "minSampleRate"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "maxSampleRate"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehiclePropValue"
-    type: TYPE_STRUCT
-    sub_struct: {
-        name: "::android::hardware::vehicle::V2_0::VehiclePropValue::RawValue"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "int32Values"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "int32_t"
-            }
-        }
-        struct_value: {
-            name: "floatValues"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "float_t"
-            }
-        }
-        struct_value: {
-            name: "int64Values"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "int64_t"
-            }
-        }
-        struct_value: {
-            name: "bytes"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "stringValue"
-            type: TYPE_STRING
-        }
-    }
-    struct_value: {
-        name: "prop"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::vehicle::V2_0::VehicleProperty"
-    }
-    struct_value: {
-        name: "timestamp"
-        type: TYPE_SCALAR
-        scalar_type: "int64_t"
-    }
-    struct_value: {
-        name: "areaId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "value"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::vehicle::V2_0::VehiclePropValue::RawValue"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehicleIgnitionState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNDEFINED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "LOCK"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "OFF"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "ACC"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ON"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "START"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::VehiclePropertyOperation"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "GENERIC"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "SET"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "GET"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "SUBSCRIBE"
-        scalar_value: {
-            int32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::SubscribeFlags"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UNDEFINED"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "HAL_EVENT"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "SET_CALL"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "DEFAULT"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::SubscribeOptions"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "propId"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::vehicle::V2_0::VehicleProperty"
-    }
-    struct_value: {
-        name: "vehicleAreas"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "sampleRate"
-        type: TYPE_SCALAR
-        scalar_type: "float_t"
-    }
-    struct_value: {
-        name: "flags"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::vehicle::V2_0::SubscribeFlags"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::StatusCode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OK"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "TRY_AGAIN"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "INVALID_ARG"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "NOT_AVAILABLE"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "ACCESS_DENIED"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "INTERNAL_ERROR"
-        scalar_value: {
-            int32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::FuelSystemStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "OPEN_INSUFFICIENT_ENGINE_TEMPERATURE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "CLOSED_LOOP"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "OPEN_ENGINE_LOAD_OR_DECELERATION"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "OPEN_SYSTEM_FAILURE"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "CLOSED_LOOP_BUT_FEEDBACK_FAULT"
-        scalar_value: {
-            int32_t: 16
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::IgnitionMonitorKind"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "SPARK"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "COMPRESSION"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::CommonIgnitionMonitors"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "COMPONENTS_AVAILABLE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "COMPONENTS_INCOMPLETE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FUEL_SYSTEM_AVAILABLE"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "FUEL_SYSTEM_INCOMPLETE"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "MISFIRE_AVAILABLE"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "MISFIRE_INCOMPLETE"
-        scalar_value: {
-            int32_t: 32
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::SparkIgnitionMonitors"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "COMPONENTS_AVAILABLE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "COMPONENTS_INCOMPLETE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FUEL_SYSTEM_AVAILABLE"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "FUEL_SYSTEM_INCOMPLETE"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "MISFIRE_AVAILABLE"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "MISFIRE_INCOMPLETE"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "EGR_AVAILABLE"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "EGR_INCOMPLETE"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "OXYGEN_SENSOR_HEATER_AVAILABLE"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "OXYGEN_SENSOR_HEATER_INCOMPLETE"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "OXYGEN_SENSOR_AVAILABLE"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "OXYGEN_SENSOR_INCOMPLETE"
-        scalar_value: {
-            int32_t: 2048
-        }
-        enumerator: "AC_REFRIGERANT_AVAILABLE"
-        scalar_value: {
-            int32_t: 4096
-        }
-        enumerator: "AC_REFRIGERANT_INCOMPLETE"
-        scalar_value: {
-            int32_t: 8192
-        }
-        enumerator: "SECONDARY_AIR_SYSTEM_AVAILABLE"
-        scalar_value: {
-            int32_t: 16384
-        }
-        enumerator: "SECONDARY_AIR_SYSTEM_INCOMPLETE"
-        scalar_value: {
-            int32_t: 32768
-        }
-        enumerator: "EVAPORATIVE_SYSTEM_AVAILABLE"
-        scalar_value: {
-            int32_t: 65536
-        }
-        enumerator: "EVAPORATIVE_SYSTEM_INCOMPLETE"
-        scalar_value: {
-            int32_t: 131072
-        }
-        enumerator: "HEATED_CATALYST_AVAILABLE"
-        scalar_value: {
-            int32_t: 262144
-        }
-        enumerator: "HEATED_CATALYST_INCOMPLETE"
-        scalar_value: {
-            int32_t: 524288
-        }
-        enumerator: "CATALYST_AVAILABLE"
-        scalar_value: {
-            int32_t: 1048576
-        }
-        enumerator: "CATALYST_INCOMPLETE"
-        scalar_value: {
-            int32_t: 2097152
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::CompressionIgnitionMonitors"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "COMPONENTS_AVAILABLE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "COMPONENTS_INCOMPLETE"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FUEL_SYSTEM_AVAILABLE"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "FUEL_SYSTEM_INCOMPLETE"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "MISFIRE_AVAILABLE"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "MISFIRE_INCOMPLETE"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "EGR_OR_VVT_AVAILABLE"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "EGR_OR_VVT_INCOMPLETE"
-        scalar_value: {
-            int32_t: 128
-        }
-        enumerator: "PM_FILTER_AVAILABLE"
-        scalar_value: {
-            int32_t: 256
-        }
-        enumerator: "PM_FILTER_INCOMPLETE"
-        scalar_value: {
-            int32_t: 512
-        }
-        enumerator: "EXHAUST_GAS_SENSOR_AVAILABLE"
-        scalar_value: {
-            int32_t: 1024
-        }
-        enumerator: "EXHAUST_GAS_SENSOR_INCOMPLETE"
-        scalar_value: {
-            int32_t: 2048
-        }
-        enumerator: "BOOST_PRESSURE_AVAILABLE"
-        scalar_value: {
-            int32_t: 4096
-        }
-        enumerator: "BOOST_PRESSURE_INCOMPLETE"
-        scalar_value: {
-            int32_t: 8192
-        }
-        enumerator: "NOx_SCR__AVAILABLE"
-        scalar_value: {
-            int32_t: 16384
-        }
-        enumerator: "NOx_SCR_INCOMPLETE"
-        scalar_value: {
-            int32_t: 32768
-        }
-        enumerator: "NMHC_CATALYST_AVAILABLE"
-        scalar_value: {
-            int32_t: 65536
-        }
-        enumerator: "NMHC_CATALYST_INCOMPLETE"
-        scalar_value: {
-            int32_t: 131072
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::SecondaryAirStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "UPSTREAM"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "DOWNSTREAM_OF_CATALYCIC_CONVERTER"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "FROM_OUTSIDE_OR_OFF"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "PUMP_ON_FOR_DIAGNOSTICS"
-        scalar_value: {
-            int32_t: 8
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::FuelType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "NOT_AVAILABLE"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "GASOLINE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "METHANOL"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "ETHANOL"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "DIESEL"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "LPG"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "CNG"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "PROPANE"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "ELECTRIC"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "BIFUEL_RUNNING_GASOLINE"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "BIFUEL_RUNNING_METHANOL"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "BIFUEL_RUNNING_ETHANOL"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "BIFUEL_RUNNING_LPG"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "BIFUEL_RUNNING_CNG"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "BIFUEL_RUNNING_PROPANE"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "BIFUEL_RUNNING_ELECTRIC"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "BIFUEL_RUNNING_ELECTRIC_AND_COMBUSTION"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "HYBRID_GASOLINE"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "HYBRID_ETHANOL"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "HYBRID_DIESEL"
-        scalar_value: {
-            int32_t: 19
-        }
-        enumerator: "HYBRID_ELECTRIC"
-        scalar_value: {
-            int32_t: 20
-        }
-        enumerator: "HYBRID_RUNNING_ELECTRIC_AND_COMBUSTION"
-        scalar_value: {
-            int32_t: 21
-        }
-        enumerator: "HYBRID_REGENERATIVE"
-        scalar_value: {
-            int32_t: 22
-        }
-        enumerator: "BIFUEL_RUNNING_DIESEL"
-        scalar_value: {
-            int32_t: 23
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::Obd2IntegerSensorIndex"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "FUEL_SYSTEM_STATUS"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "MALFUNCTION_INDICATOR_LIGHT_ON"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "IGNITION_MONITORS_SUPPORTED"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "COMMANDED_SECONDARY_AIR_STATUS"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "NUM_OXYGEN_SENSORS_PRESENT"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "RUNTIME_SINCE_ENGINE_START"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "WARMUPS_SINCE_CODES_CLEARED"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "DISTANCE_TRAVELED_SINCE_CODES_CLEARED"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "ABSOLUTE_BAROMETRIC_PRESSURE"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "CONTROL_MODULE_VOLTAGE"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "AMBIENT_AIR_TEMPERATURE"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "TIME_WITH_MALFUNCTION_LIGHT_ON"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "TIME_SINCE_TROUBLE_CODES_CLEARED"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "MAX_FUEL_AIR_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "MAX_OXYGEN_SENSOR_VOLTAGE"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "MAX_OXYGEN_SENSOR_CURRENT"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE"
-        scalar_value: {
-            int32_t: 19
-        }
-        enumerator: "MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR"
-        scalar_value: {
-            int32_t: 20
-        }
-        enumerator: "FUEL_TYPE"
-        scalar_value: {
-            int32_t: 21
-        }
-        enumerator: "FUEL_RAIL_ABSOLUTE_PRESSURE"
-        scalar_value: {
-            int32_t: 22
-        }
-        enumerator: "ENGINE_OIL_TEMPERATURE"
-        scalar_value: {
-            int32_t: 23
-        }
-        enumerator: "DRIVER_DEMAND_PERCENT_TORQUE"
-        scalar_value: {
-            int32_t: 24
-        }
-        enumerator: "ENGINE_ACTUAL_PERCENT_TORQUE"
-        scalar_value: {
-            int32_t: 25
-        }
-        enumerator: "ENGINE_REFERENCE_PERCENT_TORQUE"
-        scalar_value: {
-            int32_t: 26
-        }
-        enumerator: "ENGINE_PERCENT_TORQUE_DATA_IDLE"
-        scalar_value: {
-            int32_t: 27
-        }
-        enumerator: "ENGINE_PERCENT_TORQUE_DATA_POINT1"
-        scalar_value: {
-            int32_t: 28
-        }
-        enumerator: "ENGINE_PERCENT_TORQUE_DATA_POINT2"
-        scalar_value: {
-            int32_t: 29
-        }
-        enumerator: "ENGINE_PERCENT_TORQUE_DATA_POINT3"
-        scalar_value: {
-            int32_t: 30
-        }
-        enumerator: "ENGINE_PERCENT_TORQUE_DATA_POINT4"
-        scalar_value: {
-            int32_t: 31
-        }
-        enumerator: "LAST_SYSTEM_INDEX"
-        scalar_value: {
-            int32_t: 31
-        }
-        enumerator: "VENDOR_START_INDEX"
-        scalar_value: {
-            int32_t: 32
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::vehicle::V2_0::Obd2FloatSensorIndex"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "CALCULATED_ENGINE_LOAD"
-        scalar_value: {
-            int32_t: 0
-        }
-        enumerator: "ENGINE_COOLANT_TEMPERATURE"
-        scalar_value: {
-            int32_t: 1
-        }
-        enumerator: "SHORT_TERM_FUEL_TRIM_BANK1"
-        scalar_value: {
-            int32_t: 2
-        }
-        enumerator: "LONG_TERM_FUEL_TRIM_BANK1"
-        scalar_value: {
-            int32_t: 3
-        }
-        enumerator: "SHORT_TERM_FUEL_TRIM_BANK2"
-        scalar_value: {
-            int32_t: 4
-        }
-        enumerator: "LONG_TERM_FUEL_TRIM_BANK2"
-        scalar_value: {
-            int32_t: 5
-        }
-        enumerator: "FUEL_PRESSURE"
-        scalar_value: {
-            int32_t: 6
-        }
-        enumerator: "INTAKE_MANIFOLD_ABSOLUTE_PRESSURE"
-        scalar_value: {
-            int32_t: 7
-        }
-        enumerator: "ENGINE_RPM"
-        scalar_value: {
-            int32_t: 8
-        }
-        enumerator: "VEHICLE_SPEED"
-        scalar_value: {
-            int32_t: 9
-        }
-        enumerator: "TIMING_ADVANCE"
-        scalar_value: {
-            int32_t: 10
-        }
-        enumerator: "MAF_AIR_FLOW_RATE"
-        scalar_value: {
-            int32_t: 11
-        }
-        enumerator: "THROTTLE_POSITION"
-        scalar_value: {
-            int32_t: 12
-        }
-        enumerator: "OXYGEN_SENSOR1_VOLTAGE"
-        scalar_value: {
-            int32_t: 13
-        }
-        enumerator: "OXYGEN_SENSOR1_SHORT_TERM_FUEL_TRIM"
-        scalar_value: {
-            int32_t: 14
-        }
-        enumerator: "OXYGEN_SENSOR1_FUEL_AIR_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 15
-        }
-        enumerator: "OXYGEN_SENSOR2_VOLTAGE"
-        scalar_value: {
-            int32_t: 16
-        }
-        enumerator: "OXYGEN_SENSOR2_SHORT_TERM_FUEL_TRIM"
-        scalar_value: {
-            int32_t: 17
-        }
-        enumerator: "OXYGEN_SENSOR2_FUEL_AIR_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 18
-        }
-        enumerator: "OXYGEN_SENSOR3_VOLTAGE"
-        scalar_value: {
-            int32_t: 19
-        }
-        enumerator: "OXYGEN_SENSOR3_SHORT_TERM_FUEL_TRIM"
-        scalar_value: {
-            int32_t: 20
-        }
-        enumerator: "OXYGEN_SENSOR3_FUEL_AIR_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 21
-        }
-        enumerator: "OXYGEN_SENSOR4_VOLTAGE"
-        scalar_value: {
-            int32_t: 22
-        }
-        enumerator: "OXYGEN_SENSOR4_SHORT_TERM_FUEL_TRIM"
-        scalar_value: {
-            int32_t: 23
-        }
-        enumerator: "OXYGEN_SENSOR4_FUEL_AIR_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 24
-        }
-        enumerator: "OXYGEN_SENSOR5_VOLTAGE"
-        scalar_value: {
-            int32_t: 25
-        }
-        enumerator: "OXYGEN_SENSOR5_SHORT_TERM_FUEL_TRIM"
-        scalar_value: {
-            int32_t: 26
-        }
-        enumerator: "OXYGEN_SENSOR5_FUEL_AIR_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 27
-        }
-        enumerator: "OXYGEN_SENSOR6_VOLTAGE"
-        scalar_value: {
-            int32_t: 28
-        }
-        enumerator: "OXYGEN_SENSOR6_SHORT_TERM_FUEL_TRIM"
-        scalar_value: {
-            int32_t: 29
-        }
-        enumerator: "OXYGEN_SENSOR6_FUEL_AIR_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 30
-        }
-        enumerator: "OXYGEN_SENSOR7_VOLTAGE"
-        scalar_value: {
-            int32_t: 31
-        }
-        enumerator: "OXYGEN_SENSOR7_SHORT_TERM_FUEL_TRIM"
-        scalar_value: {
-            int32_t: 32
-        }
-        enumerator: "OXYGEN_SENSOR7_FUEL_AIR_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 33
-        }
-        enumerator: "OXYGEN_SENSOR8_VOLTAGE"
-        scalar_value: {
-            int32_t: 34
-        }
-        enumerator: "OXYGEN_SENSOR8_SHORT_TERM_FUEL_TRIM"
-        scalar_value: {
-            int32_t: 35
-        }
-        enumerator: "OXYGEN_SENSOR8_FUEL_AIR_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 36
-        }
-        enumerator: "FUEL_RAIL_PRESSURE"
-        scalar_value: {
-            int32_t: 37
-        }
-        enumerator: "FUEL_RAIL_GAUGE_PRESSURE"
-        scalar_value: {
-            int32_t: 38
-        }
-        enumerator: "COMMANDED_EXHAUST_GAS_RECIRCULATION"
-        scalar_value: {
-            int32_t: 39
-        }
-        enumerator: "EXHAUST_GAS_RECIRCULATION_ERROR"
-        scalar_value: {
-            int32_t: 40
-        }
-        enumerator: "COMMANDED_EVAPORATIVE_PURGE"
-        scalar_value: {
-            int32_t: 41
-        }
-        enumerator: "FUEL_TANK_LEVEL_INPUT"
-        scalar_value: {
-            int32_t: 42
-        }
-        enumerator: "EVAPORATION_SYSTEM_VAPOR_PRESSURE"
-        scalar_value: {
-            int32_t: 43
-        }
-        enumerator: "CATALYST_TEMPERATURE_BANK1_SENSOR1"
-        scalar_value: {
-            int32_t: 44
-        }
-        enumerator: "CATALYST_TEMPERATURE_BANK2_SENSOR1"
-        scalar_value: {
-            int32_t: 45
-        }
-        enumerator: "CATALYST_TEMPERATURE_BANK1_SENSOR2"
-        scalar_value: {
-            int32_t: 46
-        }
-        enumerator: "CATALYST_TEMPERATURE_BANK2_SENSOR2"
-        scalar_value: {
-            int32_t: 47
-        }
-        enumerator: "ABSOLUTE_LOAD_VALUE"
-        scalar_value: {
-            int32_t: 48
-        }
-        enumerator: "FUEL_AIR_COMMANDED_EQUIVALENCE_RATIO"
-        scalar_value: {
-            int32_t: 49
-        }
-        enumerator: "RELATIVE_THROTTLE_POSITION"
-        scalar_value: {
-            int32_t: 50
-        }
-        enumerator: "ABSOLUTE_THROTTLE_POSITION_B"
-        scalar_value: {
-            int32_t: 51
-        }
-        enumerator: "ABSOLUTE_THROTTLE_POSITION_C"
-        scalar_value: {
-            int32_t: 52
-        }
-        enumerator: "ACCELERATOR_PEDAL_POSITION_D"
-        scalar_value: {
-            int32_t: 53
-        }
-        enumerator: "ACCELERATOR_PEDAL_POSITION_E"
-        scalar_value: {
-            int32_t: 54
-        }
-        enumerator: "ACCELERATOR_PEDAL_POSITION_F"
-        scalar_value: {
-            int32_t: 55
-        }
-        enumerator: "COMMANDED_THROTTLE_ACTUATOR"
-        scalar_value: {
-            int32_t: 56
-        }
-        enumerator: "ETHANOL_FUEL_PERCENTAGE"
-        scalar_value: {
-            int32_t: 57
-        }
-        enumerator: "ABSOLUTE_EVAPORATION_SYSTEM_VAPOR_PRESSURE"
-        scalar_value: {
-            int32_t: 58
-        }
-        enumerator: "SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1"
-        scalar_value: {
-            int32_t: 59
-        }
-        enumerator: "SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2"
-        scalar_value: {
-            int32_t: 60
-        }
-        enumerator: "SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3"
-        scalar_value: {
-            int32_t: 61
-        }
-        enumerator: "SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4"
-        scalar_value: {
-            int32_t: 62
-        }
-        enumerator: "LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1"
-        scalar_value: {
-            int32_t: 63
-        }
-        enumerator: "LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2"
-        scalar_value: {
-            int32_t: 64
-        }
-        enumerator: "LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3"
-        scalar_value: {
-            int32_t: 65
-        }
-        enumerator: "LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4"
-        scalar_value: {
-            int32_t: 66
-        }
-        enumerator: "RELATIVE_ACCELERATOR_PEDAL_POSITION"
-        scalar_value: {
-            int32_t: 67
-        }
-        enumerator: "HYBRID_BATTERY_PACK_REMAINING_LIFE"
-        scalar_value: {
-            int32_t: 68
-        }
-        enumerator: "FUEL_INJECTION_TIMING"
-        scalar_value: {
-            int32_t: 69
-        }
-        enumerator: "ENGINE_FUEL_RATE"
-        scalar_value: {
-            int32_t: 70
-        }
-        enumerator: "LAST_SYSTEM_INDEX"
-        scalar_value: {
-            int32_t: 70
-        }
-        enumerator: "VENDOR_START_INDEX"
-        scalar_value: {
-            int32_t: 71
-        }
-    }
-}
-
diff --git a/vibrator/1.0/Android.bp b/vibrator/1.0/Android.bp
index 497274b..d6813ea 100644
--- a/vibrator/1.0/Android.bp
+++ b/vibrator/1.0/Android.bp
@@ -1,12 +1,19 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.vibrator@1.0_hal",
+    srcs: [
+        "types.hal",
+        "IVibrator.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.vibrator@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.0",
     srcs: [
-        "types.hal",
-        "IVibrator.hal",
+        ":android.hardware.vibrator@1.0_hal",
     ],
     out: [
         "android/hardware/vibrator/1.0/types.cpp",
@@ -19,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.0",
     srcs: [
-        "types.hal",
-        "IVibrator.hal",
+        ":android.hardware.vibrator@1.0_hal",
     ],
     out: [
         "android/hardware/vibrator/1.0/types.h",
@@ -54,106 +60,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.vibrator.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/vibrator/1.0/ $(genDir)/android/hardware/vibrator/1.0/",
-    srcs: [
-        "types.hal",
-        "IVibrator.hal",
-    ],
-    out: [
-        "android/hardware/vibrator/1.0/types.vts.cpp",
-        "android/hardware/vibrator/1.0/Vibrator.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vibrator.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/vibrator/1.0/ $(genDir)/android/hardware/vibrator/1.0/",
-    srcs: [
-        "types.hal",
-        "IVibrator.hal",
-    ],
-    out: [
-        "android/hardware/vibrator/1.0/types.vts.h",
-        "android/hardware/vibrator/1.0/Vibrator.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.vibrator.vts.driver@1.0",
-    generated_sources: ["android.hardware.vibrator.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.vibrator.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.vibrator.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.vibrator@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vibrator@1.0-IVibrator-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/vibrator/1.0/ $(genDir)/android/hardware/vibrator/1.0/",
-    srcs: [
-        "IVibrator.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/vibrator/1.0/Vibrator.vts.cpp",
-        "android/hardware/vibrator/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vibrator@1.0-IVibrator-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/vibrator/1.0/ $(genDir)/android/hardware/vibrator/1.0/",
-    srcs: [
-        "IVibrator.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/vibrator/1.0/Vibrator.vts.h",
-        "android/hardware/vibrator/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.vibrator@1.0-IVibrator-vts.profiler",
-    generated_sources: ["android.hardware.vibrator@1.0-IVibrator-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.vibrator@1.0-IVibrator-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.vibrator@1.0-IVibrator-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.vibrator@1.0",
-    ],
-}
diff --git a/vibrator/1.0/Android.mk b/vibrator/1.0/Android.mk
index 1437d44..4e1ba6a 100644
--- a/vibrator/1.0/Android.mk
+++ b/vibrator/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.vibrator@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -64,7 +64,7 @@
 LOCAL_MODULE := android.hardware.vibrator@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/vibrator/1.0/default/Android.bp b/vibrator/1.0/default/Android.bp
index 5e488e6..6cb9802 100644
--- a/vibrator/1.0/default/Android.bp
+++ b/vibrator/1.0/default/Android.bp
@@ -12,8 +12,10 @@
 // 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_library_shared {
     name: "android.hardware.vibrator@1.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["Vibrator.cpp"],
     shared_libs: [
diff --git a/vibrator/1.0/default/Android.mk b/vibrator/1.0/default/Android.mk
index 5ba334b..091d615 100644
--- a/vibrator/1.0/default/Android.mk
+++ b/vibrator/1.0/default/Android.mk
@@ -19,6 +19,7 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.vibrator@1.0-service
 LOCAL_INIT_RC := android.hardware.vibrator@1.0-service.rc
+LOCAL_PROPRIETARY_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := \
   service.cpp \
diff --git a/vibrator/1.0/default/android.hardware.vibrator@1.0-service.rc b/vibrator/1.0/default/android.hardware.vibrator@1.0-service.rc
index a7836b3..4153c44 100644
--- a/vibrator/1.0/default/android.hardware.vibrator@1.0-service.rc
+++ b/vibrator/1.0/default/android.hardware.vibrator@1.0-service.rc
@@ -1,4 +1,4 @@
-service vibrator-1-0 /system/bin/hw/android.hardware.vibrator@1.0-service
+service vibrator-1-0 /vendor/bin/hw/android.hardware.vibrator@1.0-service
     class hal
     user system
     group system readproc
diff --git a/vibrator/1.0/default/service.cpp b/vibrator/1.0/default/service.cpp
index 064e1e2..7cc0744 100644
--- a/vibrator/1.0/default/service.cpp
+++ b/vibrator/1.0/default/service.cpp
@@ -22,5 +22,5 @@
 using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-    return defaultPassthroughServiceImplementation<IVibrator>("vibrator");
+    return defaultPassthroughServiceImplementation<IVibrator>();
 }
diff --git a/vibrator/1.0/vts/Vibrator.vts b/vibrator/1.0/vts/Vibrator.vts
deleted file mode 100644
index e0de3fb..0000000
--- a/vibrator/1.0/vts/Vibrator.vts
+++ /dev/null
@@ -1,30 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IVibrator"
-
-package: "android.hardware.vibrator"
-
-import: "android.hardware.vibrator@1.0::types"
-
-interface: {
-    api: {
-        name: "on"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vibrator::V1_0::Status"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "off"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::vibrator::V1_0::Status"
-        }
-    }
-
-}
diff --git a/vibrator/1.0/vts/functional/Android.bp b/vibrator/1.0/vts/functional/Android.bp
index a24cf5c..640de01 100644
--- a/vibrator/1.0/vts/functional/Android.bp
+++ b/vibrator/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "vibrator_hidl_hal_test",
+    name: "VtsHalVibratorV1_0TargetTest",
     gtest: true,
-    srcs: ["vibrator_hidl_hal_test.cpp"],
+    srcs: ["VtsHalVibratorV1_0TargetTest.cpp"],
     shared_libs: [
         "libbase",
         "libhidlbase",
diff --git a/vibrator/1.0/vts/functional/Android.mk b/vibrator/1.0/vts/functional/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vibrator/1.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vibrator/1.0/vts/functional/vibrator_hidl_hal_test.cpp b/vibrator/1.0/vts/functional/VtsHalVibratorV1_0TargetTest.cpp
similarity index 97%
rename from vibrator/1.0/vts/functional/vibrator_hidl_hal_test.cpp
rename to vibrator/1.0/vts/functional/VtsHalVibratorV1_0TargetTest.cpp
index 782a763..435b002 100644
--- a/vibrator/1.0/vts/functional/vibrator_hidl_hal_test.cpp
+++ b/vibrator/1.0/vts/functional/VtsHalVibratorV1_0TargetTest.cpp
@@ -32,7 +32,7 @@
 class VibratorHidlTest : public ::testing::Test {
  public:
   virtual void SetUp() override {
-    vibrator = IVibrator::getService(false);
+    vibrator = IVibrator::getService();
     ASSERT_NE(vibrator, nullptr);
   }
 
diff --git a/vibrator/1.0/vts/functional/vts/Android.mk b/vibrator/1.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vibrator/1.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vibrator/1.0/vts/functional/vts/testcases/Android.mk b/vibrator/1.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/Android.mk b/vibrator/1.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/Android.mk b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/__init__.py b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/__init__.py
+++ /dev/null
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/Android.mk b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/__init__.py b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/__init__.py
+++ /dev/null
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/Android.mk b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/Android.mk
deleted file mode 100644
index d005450..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VibratorHidlTest
-VTS_CONFIG_SRC_DIR := testcases/hal/vibrator/hidl/host
-include test/vts/tools/build/Android.host_config.mk
\ No newline at end of file
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/AndroidTest.xml b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/AndroidTest.xml
deleted file mode 100644
index c5074ee..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/AndroidTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS HAL vibrator test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="cleanup" value="true" />
-        <option name="push" value="spec/hardware/interfaces/vibrator/1.0/vts/Vibrator.vts->/data/local/tmp/spec/Vibrator.vts" />
-        <option name="push" value="spec/hardware/interfaces/vibrator/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VibratorHidlTest" />
-        <option name="test-case-path" value="vts/testcases/hal/vibrator/hidl/host/VibratorHidlTest" />
-    </test>
-</configuration>
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/VibratorHidlTest.py b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/VibratorHidlTest.py
deleted file mode 100644
index 84f2907..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/VibratorHidlTest.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/env python3.4
-#
-# 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.
-#
-
-import logging
-import time
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test_with_webdb
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.profiling import profiling_utils
-
-
-class VibratorHidlTest(base_test_with_webdb.BaseTestWithWebDbClass):
-    """A simple testcase for the VIBRATOR HIDL HAL."""
-
-    def setUpClass(self):
-        """Creates a mirror and turns on the framework-layer VIBRATOR service."""
-        self.dut = self.registerController(android_device)[0]
-
-        self.dut.shell.InvokeTerminal("one")
-        self.dut.shell.one.Execute("setenforce 0")  # SELinux permissive mode
-
-        # Test using the binderized mode
-        self.dut.shell.one.Execute(
-            "setprop vts.hal.vts.hidl.get_stub true")
-
-        self.dut.hal.InitHidlHal(
-            target_type="vibrator",
-            target_basepaths=self.dut.libPaths,
-            target_version=1.0,
-            target_package="android.hardware.vibrator",
-            target_component_name="IVibrator",
-            bits=64 if self.dut.is64Bit else 32)
-
-    def tearDownClass(self):
-        """ If profiling is enabled for the test, collect the profiling data
-            and disable profiling after the test is done.
-        """
-        if self.enable_profiling:
-            self.ProcessAndUploadTraceData()
-
-    def setUpTest(self):
-        if self.enable_profiling:
-            profiling_utils.EnableVTSProfiling(self.dut.shell.one)
-
-    def tearDownTest(self):
-        if self.enable_profiling:
-            profiling_trace_path = getattr(
-                self, self.VTS_PROFILING_TRACING_PATH, "")
-            self.ProcessTraceDataForTestCase(self.dut, profiling_trace_path)
-            profiling_utils.DisableVTSProfiling(self.dut.shell.one)
-
-    def testVibratorBasic(self):
-        """A simple test case which just calls each registered function."""
-        vibrator_types = self.dut.hal.vibrator.GetHidlTypeInterface("types")
-        logging.info("vibrator_types: %s", vibrator_types)
-        logging.info("OK: %s", vibrator_types.OK)
-        logging.info("ERR: %s", vibrator_types.ERR)
-
-        result = self.dut.hal.vibrator.on(10000)
-        logging.info("on result: %s", result)
-        asserts.assertEqual(vibrator_types.OK, result)
-
-        time.sleep(1)
-
-        result = self.dut.hal.vibrator.off()
-        logging.info("off result: %s", result)
-        asserts.assertEqual(vibrator_types.OK, result)
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/__init__.py b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/__init__.py
+++ /dev/null
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host_profiling/Android.mk b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host_profiling/Android.mk
deleted file mode 100644
index ec73e06..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VibratorHidlProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/vibrator/hidl/host_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host_profiling/AndroidTest.xml b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host_profiling/AndroidTest.xml
deleted file mode 100644
index 54830f0..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS HAL vibrator test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="cleanup" value="true" />
-        <option name="push" value="spec/hardware/interfaces/vibrator/1.0/vts/Vibrator.vts->/data/local/tmp/spec/Vibrator.vts" />
-        <option name="push" value="spec/hardware/interfaces/vibrator/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VibratorHidlProfilingTest" />
-        <option name="test-case-path" value="vts/testcases/hal/vibrator/hidl/host/VibratorHidlTest" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target/Android.mk b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target/Android.mk
deleted file mode 100644
index 704d985..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VibratorHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/vibrator/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target/AndroidTest.xml b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target/AndroidTest.xml
deleted file mode 100644
index 7948c86..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS VIBRATOR HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VibratorHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/vibrator_hidl_hal_test/vibrator_hidl_hal_test,
-            _64bit::DATA/nativetest64/vibrator_hidl_hal_test/vibrator_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
-
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target_profiling/Android.mk b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target_profiling/Android.mk
deleted file mode 100644
index a1f43e4..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VibratorHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/vibrator/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target_profiling/AndroidTest.xml b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 4643e23..0000000
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS VIBRATOR HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VibratorHidlTargetProfilingTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/vibrator_hidl_hal_test/vibrator_hidl_hal_test,
-            _64bit::DATA/nativetest64/vibrator_hidl_hal_test/vibrator_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
-
diff --git a/vibrator/1.0/vts/types.vts b/vibrator/1.0/vts/types.vts
deleted file mode 100644
index d1bf1e1..0000000
--- a/vibrator/1.0/vts/types.vts
+++ /dev/null
@@ -1,24 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.vibrator"
-
-
-attribute: {
-    name: "::android::hardware::vibrator::V1_0::Status"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "OK"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "ERR"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
diff --git a/vr/1.0/Android.bp b/vr/1.0/Android.bp
index f175610..b48d010 100644
--- a/vr/1.0/Android.bp
+++ b/vr/1.0/Android.bp
@@ -1,11 +1,18 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
+filegroup {
+    name: "android.hardware.vr@1.0_hal",
+    srcs: [
+        "IVr.hal",
+    ],
+}
+
 genrule {
     name: "android.hardware.vr@1.0_genc++",
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vr@1.0",
     srcs: [
-        "IVr.hal",
+        ":android.hardware.vr@1.0_hal",
     ],
     out: [
         "android/hardware/vr/1.0/VrAll.cpp",
@@ -17,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vr@1.0",
     srcs: [
-        "IVr.hal",
+        ":android.hardware.vr@1.0_hal",
     ],
     out: [
         "android/hardware/vr/1.0/IVr.h",
@@ -50,98 +57,3 @@
         "android.hidl.base@1.0",
     ],
 }
-
-genrule {
-    name: "android.hardware.vr.vts.driver@1.0_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vr@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/vr/1.0/ $(genDir)/android/hardware/vr/1.0/",
-    srcs: [
-        "IVr.hal",
-    ],
-    out: [
-        "android/hardware/vr/1.0/Vr.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vr.vts.driver@1.0_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vr@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/vr/1.0/ $(genDir)/android/hardware/vr/1.0/",
-    srcs: [
-        "IVr.hal",
-    ],
-    out: [
-        "android/hardware/vr/1.0/Vr.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.vr.vts.driver@1.0",
-    generated_sources: ["android.hardware.vr.vts.driver@1.0_genc++"],
-    generated_headers: ["android.hardware.vr.vts.driver@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.vr.vts.driver@1.0_genc++_headers"],
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "libvts_common",
-        "libvts_datatype",
-        "libvts_measurement",
-        "libvts_multidevice_proto",
-        "libcamera_metadata",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.vr@1.0",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hidl.base@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vr@1.0-IVr-vts.profiler_genc++",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vr@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/vr/1.0/ $(genDir)/android/hardware/vr/1.0/",
-    srcs: [
-        "IVr.hal",
-    ],
-    out: [
-        "android/hardware/vr/1.0/Vr.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.vr@1.0-IVr-vts.profiler_genc++_headers",
-    tools: ["hidl-gen", "vtsc"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vr@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/vr/1.0/ $(genDir)/android/hardware/vr/1.0/",
-    srcs: [
-        "IVr.hal",
-    ],
-    out: [
-        "android/hardware/vr/1.0/Vr.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.vr@1.0-IVr-vts.profiler",
-    generated_sources: ["android.hardware.vr@1.0-IVr-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.vr@1.0-IVr-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.vr@1.0-IVr-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.vr@1.0",
-    ],
-}
diff --git a/vr/1.0/Android.mk b/vr/1.0/Android.mk
index 1b8e8c7..0fbdaf7 100644
--- a/vr/1.0/Android.mk
+++ b/vr/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.vr@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -43,7 +43,7 @@
 LOCAL_MODULE := android.hardware.vr@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/vr/1.0/default/Android.bp b/vr/1.0/default/Android.bp
index d100570..0d374d3 100644
--- a/vr/1.0/default/Android.bp
+++ b/vr/1.0/default/Android.bp
@@ -1,5 +1,6 @@
 cc_library_shared {
     name: "android.hardware.vr@1.0-impl",
+    proprietary: true,
     relative_install_path: "hw",
     srcs: ["Vr.cpp"],
     shared_libs: [
@@ -15,3 +16,21 @@
         "android.hardware.vr@1.0",
     ],
 }
+
+cc_binary {
+    relative_install_path: "hw",
+    proprietary: true,
+    name: "android.hardware.vr@1.0-service",
+    init_rc: ["android.hardware.vr@1.0-service.rc"],
+    srcs: ["service.cpp"],
+    shared_libs: [
+        "liblog",
+        "libdl",
+        "libutils",
+        "libhardware",
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "android.hardware.vr@1.0",
+    ],
+}
diff --git a/vr/1.0/default/android.hardware.vr@1.0-service.rc b/vr/1.0/default/android.hardware.vr@1.0-service.rc
index 6177089..ba43302 100644
--- a/vr/1.0/default/android.hardware.vr@1.0-service.rc
+++ b/vr/1.0/default/android.hardware.vr@1.0-service.rc
@@ -1,4 +1,4 @@
-service vr-1-0 /system/bin/hw/android.hardware.vr@1.0-service
+service vr-1-0 /vendor/bin/hw/android.hardware.vr@1.0-service
     class hal
     user system
     group system readproc
diff --git a/vr/1.0/vts/Android.mk b/vr/1.0/vts/Android.mk
deleted file mode 100644
index e8afa86..0000000
--- a/vr/1.0/vts/Android.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-# include hidl test makefiles
-include $(LOCAL_PATH)/functional/vts/testcases/hal/vr/hidl/Android.mk
diff --git a/vr/1.0/vts/Vr.vts b/vr/1.0/vts/Vr.vts
deleted file mode 100644
index 36ec11f..0000000
--- a/vr/1.0/vts/Vr.vts
+++ /dev/null
@@ -1,36 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IVr"
-
-package: "android.hardware.vr"
-
-
-interface: {
-    api: {
-        name: "init"
-        callflow: {
-            next: "*"
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            exit: true
-        }
-    }
-
-    api: {
-        name: "setVrMode"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        callflow: {
-            next: "*"
-        }
-        callflow: {
-            exit: true
-        }
-    }
-
-}
diff --git a/vr/1.0/vts/functional/Android.bp b/vr/1.0/vts/functional/Android.bp
index 551f27c..36bc527 100644
--- a/vr/1.0/vts/functional/Android.bp
+++ b/vr/1.0/vts/functional/Android.bp
@@ -15,9 +15,9 @@
 //
 
 cc_test {
-    name: "vr_hidl_hal_test",
+    name: "VtsHalVrV1_0TargetTest",
     gtest: true,
-    srcs: ["vr_hidl_hal_test.cpp"],
+    srcs: ["VtsHalVrV1_0TargetTest.cpp"],
     shared_libs: [
         "liblog",
         "libhidlbase",
@@ -26,11 +26,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-       "--coverage",
        "-O0",
         "-g",
-    ],
-    ldflags: [
-        "--coverage"
     ]
 }
diff --git a/vr/1.0/vts/functional/vr_hidl_hal_test.cpp b/vr/1.0/vts/functional/VtsHalVrV1_0TargetTest.cpp
similarity index 94%
rename from vr/1.0/vts/functional/vr_hidl_hal_test.cpp
rename to vr/1.0/vts/functional/VtsHalVrV1_0TargetTest.cpp
index 85ecbdc..29888fd 100644
--- a/vr/1.0/vts/functional/vr_hidl_hal_test.cpp
+++ b/vr/1.0/vts/functional/VtsHalVrV1_0TargetTest.cpp
@@ -32,10 +32,8 @@
 class VrHidlTest : public ::testing::Test {
  public:
   void SetUp() override {
-    // currently test passthrough mode only
-    vr = IVr::getService(VR_SERVICE_NAME, true);
+    vr = IVr::getService(VR_SERVICE_NAME);
     ASSERT_NE(vr, nullptr);
-    ASSERT_TRUE(!vr->isRemote());
   }
 
   void TearDown() override {}
diff --git a/vr/1.0/vts/functional/vts/Android.mk b/vr/1.0/vts/functional/vts/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vr/1.0/vts/functional/vts/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vr/1.0/vts/functional/vts/testcases/Android.mk b/vr/1.0/vts/functional/vts/testcases/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vr/1.0/vts/functional/vts/testcases/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/Android.mk b/vr/1.0/vts/functional/vts/testcases/hal/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/Android.mk b/vr/1.0/vts/functional/vts/testcases/hal/vr/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/__init__.py b/vr/1.0/vts/functional/vts/testcases/hal/vr/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/__init__.py
+++ /dev/null
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/Android.mk b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/__init__.py b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/__init__.py
+++ /dev/null
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/Android.mk b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/Android.mk
deleted file mode 100644
index 9388b8d..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VrHidlTest
-VTS_CONFIG_SRC_DIR := testcases/hal/vr/hidl/host
-include test/vts/tools/build/Android.host_config.mk
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/AndroidTest.xml b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/AndroidTest.xml
deleted file mode 100644
index 1cd2a80..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/AndroidTest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS HAL VR test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-        <option name="cleanup" value="true" />
-        <option name="push" value="spec/hardware/interfaces/vr/1.0/vts/Vr.vts->/data/local/tmp/spec/Vr.vts" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VrHidlTest" />
-        <option name="test-case-path" value="vts/testcases/hal/vr/hidl/host/VrHidlTest" />
-    </test>
-</configuration>
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/VrHidlTest.py b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/VrHidlTest.py
deleted file mode 100644
index d20e9ce..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/VrHidlTest.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/env python3.4
-#
-# 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.
-#
-
-import logging
-import time
-
-from vts.runners.host import asserts
-from vts.runners.host import base_test_with_webdb
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.profiling import profiling_utils
-
-
-class VrHidlTest(base_test_with_webdb.BaseTestWithWebDbClass):
-    """A simple testcase for the VR HIDL HAL."""
-
-    def setUpClass(self):
-        """Creates a mirror and turns on the framework-layer VR service."""
-        self.dut = self.registerController(android_device)[0]
-
-        self.dut.shell.InvokeTerminal("one")
-        self.dut.shell.one.Execute("setenforce 0")  # SELinux permissive mode
-
-        # Test using the binderized mode
-        self.dut.shell.one.Execute(
-            "setprop vts.hal.vts.hidl.get_stub true")
-
-        self.dut.hal.InitHidlHal(
-            target_type="vr",
-            target_basepaths=["/system/lib64"],
-            target_version=1.0,
-            target_package="android.hardware.vr",
-            target_component_name="IVr",
-            hw_binder_service_name=None,
-            bits=64)
-
-    def tearDownClass(self):
-        """ If profiling is enabled for the test, collect the profiling data
-            and disable profiling after the test is done.
-        """
-        if self.enable_profiling:
-            self.ProcessAndUploadTraceData()
-
-    def setUpTest(self):
-        if self.enable_profiling:
-            profiling_utils.EnableVTSProfiling(self.dut.shell.one)
-
-    def tearDownTest(self):
-        if self.enable_profiling:
-            profiling_trace_path = getattr(
-                self, self.VTS_PROFILING_TRACING_PATH, "")
-            self.ProcessTraceDataForTestCase(self.dut, profiling_trace_path)
-            profiling_utils.DisableVTSProfiling(self.dut.shell.one)
-
-    def testVrBasic(self):
-        """A simple test case which just calls each registered function."""
-        result = self.dut.hal.vr.init()
-        logging.info("init result: %s", result)
-
-        time.sleep(1)
-
-        result = self.dut.hal.vr.setVrMode(True)
-        logging.info("setVrMode(true) result: %s", result)
-
-        time.sleep(1)
-
-        result = self.dut.hal.vr.setVrMode(False)
-        logging.info("setVrMode(false) result: %s", result)
-
-
-if __name__ == "__main__":
-    test_runner.main()
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/__init__.py b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/host/__init__.py
+++ /dev/null
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/Android.mk b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/Android.mk
deleted file mode 100644
index 691d1a4..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VrHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/vr/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/AndroidTest.xml b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/AndroidTest.xml
deleted file mode 100644
index aa5a48f..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS VR HIDL HAL's target-side test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VrHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/vr_hidl_hal_test/vr_hidl_hal_test,
-            _64bit::DATA/nativetest64/vr_hidl_hal_test/vr_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="hal_hidl_gtest" />
-        <option name="hwbinder-service" value="android.hardware.vr" />
-        <option name="test-timeout" value="1m" />
-        <option name="test-config-path" value="vts/testcases/hal/vr/hidl/target/VrHidlTargetTest.config" />
-</test>
-</configuration>
-
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/VrHidlTargetTest.config b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/VrHidlTargetTest.config
deleted file mode 100644
index ec01b5f..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/VrHidlTargetTest.config
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-    "use_gae_db": true,
-    "coverage": true,
-    "modules": [{
-                    "module_name": "system/lib64/hw/vr.marlin",
-                    "git_project": {
-                        "name": "device/google/marlin",
-                        "path": "device/google/marlin"
-                    }
-                },
-                {
-                    "module_name": "system/lib64/hw/vr.sailfish",
-                    "git_project": {
-                        "name": "device/google/marlin",
-                        "path": "device/google/marlin"
-                    }
-                },
-                {
-                    "module_name": "system/lib64/hw/android.hardware.vr@1.0-impl",
-                    "git_project": {
-                        "name": "platform/hardware/interfaces",
-                        "path": "hardware/interfaces"
-                    }
-                }]
-}
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target_profiling/Android.mk b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target_profiling/Android.mk
deleted file mode 100644
index 6f60af3..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target_profiling/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VrHidlTargetProfilingTest
-VTS_CONFIG_SRC_DIR := testcases/hal/vr/hidl/target_profiling
-include test/vts/tools/build/Android.host_config.mk
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target_profiling/AndroidTest.xml b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target_profiling/AndroidTest.xml
deleted file mode 100644
index 3bc711a..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target_profiling/AndroidTest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for VTS VR HIDL HAL's target-side, profiling test cases">
-    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
-        <option name="push-group" value="HidlHalTest.push" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
-    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
-        <option name="test-module-name" value="VrHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/vr_hidl_hal_test/vr_hidl_hal_test,
-            _64bit::DATA/nativetest64/vr_hidl_hal_test/vr_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
-
diff --git a/wifi/.clang-format b/wifi/.clang-format
new file mode 100644
index 0000000..25ed932
--- /dev/null
+++ b/wifi/.clang-format
@@ -0,0 +1,2 @@
+BasedOnStyle: Google
+IndentWidth: 4
\ No newline at end of file
diff --git a/wifi/1.0/Android.bp b/wifi/1.0/Android.bp
index 049d5d7..2319999 100644
--- a/wifi/1.0/Android.bp
+++ b/wifi/1.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.wifi@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.0",
+filegroup {
+    name: "android.hardware.wifi@1.0_hal",
     srcs: [
         "types.hal",
         "IWifi.hal",
@@ -20,6 +18,15 @@
         "IWifiStaIface.hal",
         "IWifiStaIfaceEventCallback.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.wifi@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.0",
+    srcs: [
+        ":android.hardware.wifi@1.0_hal",
+    ],
     out: [
         "android/hardware/wifi/1.0/types.cpp",
         "android/hardware/wifi/1.0/WifiAll.cpp",
@@ -43,20 +50,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.0",
     srcs: [
-        "types.hal",
-        "IWifi.hal",
-        "IWifiApIface.hal",
-        "IWifiChip.hal",
-        "IWifiChipEventCallback.hal",
-        "IWifiEventCallback.hal",
-        "IWifiIface.hal",
-        "IWifiNanIface.hal",
-        "IWifiNanIfaceEventCallback.hal",
-        "IWifiP2pIface.hal",
-        "IWifiRttController.hal",
-        "IWifiRttControllerEventCallback.hal",
-        "IWifiStaIface.hal",
-        "IWifiStaIfaceEventCallback.hal",
+        ":android.hardware.wifi@1.0_hal",
     ],
     out: [
         "android/hardware/wifi/1.0/types.h",
diff --git a/wifi/1.0/Android.mk b/wifi/1.0/Android.mk
index 1058cc7..4476b14 100644
--- a/wifi/1.0/Android.mk
+++ b/wifi/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.wifi@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -74,44 +74,6 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NanBeaconSdfPayloadInd)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanBeaconSdfPayloadInd.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 \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanBeaconSdfPayloadInd
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (NanBeaconSdfPayloadRequest)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanBeaconSdfPayloadRequest.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 \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanBeaconSdfPayloadRequest
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
 # Build types.hal (NanCapabilities)
 #
 GEN := $(intermediates)/android/hardware/wifi/V1_0/NanCapabilities.java
@@ -587,25 +549,6 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NanVsaRxFrameMask)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanVsaRxFrameMask.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 \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanVsaRxFrameMask
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
 # Build types.hal (RttBw)
 #
 GEN := $(intermediates)/android/hardware/wifi/V1_0/RttBw.java
@@ -1589,6 +1532,8 @@
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IWifiApIface.hal
 $(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IWifiIface.hal
 $(GEN): $(LOCAL_PATH)/IWifiIface.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) \
@@ -1866,7 +1811,7 @@
 LOCAL_MODULE := android.hardware.wifi@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -1932,44 +1877,6 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NanBeaconSdfPayloadInd)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanBeaconSdfPayloadInd.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 \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanBeaconSdfPayloadInd
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (NanBeaconSdfPayloadRequest)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanBeaconSdfPayloadRequest.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 \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanBeaconSdfPayloadRequest
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
 # Build types.hal (NanCapabilities)
 #
 GEN := $(intermediates)/android/hardware/wifi/V1_0/NanCapabilities.java
@@ -2445,25 +2352,6 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NanVsaRxFrameMask)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanVsaRxFrameMask.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 \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanVsaRxFrameMask
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
 # Build types.hal (RttBw)
 #
 GEN := $(intermediates)/android/hardware/wifi/V1_0/RttBw.java
@@ -3447,6 +3335,8 @@
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IWifiApIface.hal
 $(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IWifiIface.hal
 $(GEN): $(LOCAL_PATH)/IWifiIface.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) \
diff --git a/wifi/1.0/IWifiApIface.hal b/wifi/1.0/IWifiApIface.hal
index 6bc3580..aeca2cd 100644
--- a/wifi/1.0/IWifiApIface.hal
+++ b/wifi/1.0/IWifiApIface.hal
@@ -22,5 +22,15 @@
  * Interface used to represent a single AP iface.
  */
 interface IWifiApIface extends IWifiIface {
-  /** TODO(rpius): Add methods to the interface. */
+  /**
+   * Set country code for this iface.
+   *
+   * @param code 2 byte country code (as defined in ISO 3166) to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |WifiStatusCode.SUCCESS|,
+   *         |WifiStatusCode.FAILURE_UNKNOWN|,
+   *         |WifiStatusCode.FAILURE_IFACE_INVALID|
+   */
+  setCountryCode(int8_t[2] code) generates (WifiStatus status);
 };
diff --git a/wifi/1.0/IWifiNanIface.hal b/wifi/1.0/IWifiNanIface.hal
index 3362339..d1d4ca5 100644
--- a/wifi/1.0/IWifiNanIface.hal
+++ b/wifi/1.0/IWifiNanIface.hal
@@ -21,6 +21,9 @@
 
 /**
  * Interface used to represent a single NAN(Neighbour Aware Network) iface.
+ *
+ * References to "NAN Spec" are to the Wi-Fi Alliance "Wi-Fi Neighbor Awareness
+ * Networking (NAN) Technical Specification".
  */
 interface IWifiNanIface extends IWifiIface {
   /**
@@ -39,7 +42,8 @@
       generates (WifiStatus status);
 
   /**
-   * Get NAN capabilities.
+   * Get NAN capabilities. Asynchronous response is with
+   * |IWifiNanIfaceEventCallback.notifyCapabilitiesResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @return status WifiStatus of the operation.
@@ -53,8 +57,9 @@
   /**
    * Enable NAN: configures and activates NAN clustering (does not start
    * a discovery session or set up data-interfaces or data-paths). Use the
-   * |configureRequest| method to change the configuration of an already enabled
+   * |IWifiNanIface.configureRequest| method to change the configuration of an already enabled
    * NAN interface.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyEnableResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param msg Instance of |NanEnableRequest|.
@@ -70,7 +75,8 @@
 
   /**
    * Configure NAN: configures an existing NAN functionality (i.e. assumes
-   * |enableRequest| already submitted and succeeded).
+   * |IWifiNanIface.enableRequest| already submitted and succeeded).
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyConfigResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param msg Instance of |NanConfigRequest|.
@@ -86,6 +92,7 @@
 
   /**
    * Disable NAN functionality.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyDisableResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @return status WifiStatus of the operation.
@@ -98,6 +105,7 @@
 
   /**
    * Publish request to start advertising a discovery service.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyStartPublishResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param msg Instance of |NanPublishRequest|.
@@ -113,6 +121,7 @@
 
   /**
    * Stop publishing a discovery service.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyStopPublishResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param sessionId ID of the publish discovery session to be stopped.
@@ -122,11 +131,12 @@
    *         |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|,
    *         |WifiStatusCode.ERROR_UNKNOWN|
    */
-  stopPublishRequest(CommandIdShort cmdId, uint16_t sessionId)
+  stopPublishRequest(CommandIdShort cmdId, uint8_t sessionId)
       generates (WifiStatus status);
 
   /**
    * Subscribe request to start searching for a discovery service.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyStartSubscribeResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param msg Instance of |NanSubscribeRequest|.
@@ -142,6 +152,7 @@
 
   /**
    * Stop subscribing to a discovery service.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyStopSubscribeResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param sessionId ID of the subscribe discovery session to be stopped.
@@ -151,11 +162,12 @@
    *         |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|,
    *         |WifiStatusCode.ERROR_UNKNOWN|
    */
-  stopSubscribeRequest(CommandIdShort cmdId, uint16_t sessionId)
+  stopSubscribeRequest(CommandIdShort cmdId, uint8_t sessionId)
       generates (WifiStatus status);
 
   /**
    * NAN transmit follow up message request.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyTransmitFollowupResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param msg Instance of |NanTransmitFollowupRequest|.
@@ -171,6 +183,7 @@
 
   /**
    * Create a NAN Data Interface.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyCreateDataInterfaceResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @return status WifiStatus of the operation.
@@ -184,6 +197,7 @@
 
   /**
    * Delete a NAN Data Interface.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyDeleteDataInterfaceResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @return status WifiStatus of the operation.
@@ -197,6 +211,7 @@
 
   /**
    * Initiate a data-path (NDP) setup operation: Initiator.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyInitiateDataPathResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param msg Instance of |NanInitiateDataPathRequest|.
@@ -213,6 +228,8 @@
   /**
    * Respond to a received data indication as part of a data-path (NDP) setup operation. An
    * indication is received by the Responder from the Initiator.
+   * Asynchronous response is with
+   * |IWifiNanIfaceEventCallback.notifyRespondToDataPathIndicationResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param msg Instance of |NanRespondToDataPathIndicationRequest|.
@@ -229,6 +246,7 @@
 
   /**
    * Data-path (NDP) termination request: executed by either Initiator or Responder.
+   * Asynchronous response is with |IWifiNanIfaceEventCallback.notifyTerminateDataPathResponse|.
    *
    * @param cmdId command Id to use for this invocation.
    * @param ndpInstanceId Data-path instance ID to be terminated.
@@ -240,19 +258,4 @@
    */
   terminateDataPathRequest(CommandIdShort cmdId, uint32_t ndpInstanceId)
       generates (WifiStatus status);
-
-  /**
-   * Configure NAN Beacon or SDF payload to include vendor-specific payload.
-   *
-   * @param cmdId command Id to use for this invocation.
-   * @param msg Instance of |NanBeaconSdfPayloadRequest|.
-   * @return status WifiStatus of the operation.
-   *         Possible status codes:
-   *         |WifiStatusCode.SUCCESS|,
-   *         |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|,
-   *         |WifiStatusCode.ERROR_INVALID_ARGS|,
-   *         |WifiStatusCode.ERROR_UNKNOWN|
-   */
-  beaconSdfPayloadRequest(CommandIdShort cmdId, NanBeaconSdfPayloadRequest msg)
-      generates (WifiStatus status);
 };
diff --git a/wifi/1.0/IWifiNanIfaceEventCallback.hal b/wifi/1.0/IWifiNanIfaceEventCallback.hal
index 906d673..dd956d6 100644
--- a/wifi/1.0/IWifiNanIfaceEventCallback.hal
+++ b/wifi/1.0/IWifiNanIfaceEventCallback.hal
@@ -18,10 +18,19 @@
 
 /**
  * NAN Response and Asynchronous Event Callbacks.
+ *
+ * References to "NAN Spec" are to the Wi-Fi Alliance "Wi-Fi Neighbor Awareness
+ * Networking (NAN) Technical Specification".
  */
 interface IWifiNanIfaceEventCallback {
   /**
-   * Callback invoked in response to a capability request |getCapabilitiesRequest|.
+   * Notify callbacks are asynchronous callbacks - but in response to |IWifiNanIface| method calls.
+   * Each method will receive a notify callback to return results (on success) or failure status.
+   */
+
+  /**
+   * Asynchronous callback invoked in response to a capability request
+   * |IWifiNanIface.getCapabilitiesRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -32,7 +41,7 @@
                                     NanCapabilities capabilities);
 
   /**
-   * Callback invoked in response to an enable request |enableRequest|.
+   * Asynchronous callback invoked in response to an enable request |IWifiNanIface.enableRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -46,7 +55,7 @@
   oneway notifyEnableResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked in response to a config request |configRequest|.
+   * Asynchronous callback invoked in response to a config request |IWifiNanIface.configRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -58,7 +67,7 @@
   oneway notifyConfigResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked in response to a disable request |disableRequest|.
+   * Asynchronous callback invoked in response to a disable request |IWifiNanIface.disableRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -68,7 +77,8 @@
   oneway notifyDisableResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked to notify the status of the start publish request |startPublishRequest|.
+   * Asynchronous callback invoked to notify the status of the start publish request
+   * |IWifiNanIface.startPublishRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -79,10 +89,11 @@
    *        |NanStatusType.INVALID_SESSION_ID|
    * @param sessionId ID of the new publish session (if successfully created).
    */
-  oneway notifyStartPublishResponse(CommandIdShort id, WifiNanStatus status, uint16_t sessionId);
+  oneway notifyStartPublishResponse(CommandIdShort id, WifiNanStatus status, uint8_t sessionId);
 
   /**
-   * Callback invoked in response to a stop publish request |stopPublishRequest|.
+   * Asynchronous callback invoked in response to a stop publish request
+   * |IWifiNanIface.stopPublishRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -93,7 +104,8 @@
   oneway notifyStopPublishResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked to notify the status of the start subscribe request |startSubscribeRequest|.
+   * Asynchronous callback invoked to notify the status of the start subscribe request
+   * |IWifiNanIface.startSubscribeRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -104,10 +116,11 @@
    *        |NanStatusType.INVALID_SESSION_ID|
    * @param sessionId ID of the new subscribe session (if successfully created).
    */
-  oneway notifyStartSubscribeResponse(CommandIdShort id, WifiNanStatus status, uint16_t sessionId);
+  oneway notifyStartSubscribeResponse(CommandIdShort id, WifiNanStatus status, uint8_t sessionId);
 
   /**
-   * Callback invoked in response to a stop subscribe request |stopSubscribeRequest|.
+   * Asynchronous callback invoked in response to a stop subscribe request
+   * |IWifiNanIface.stopSubscribeRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -118,7 +131,8 @@
   oneway notifyStopSubscribeResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked in response to a transmit followup request |transmitFollowupRequest|.
+   * Asynchronous callback invoked in response to a transmit followup request
+   * |IWifiNanIface.transmitFollowupRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -127,11 +141,13 @@
    *        |NanStatusType.INTERNAL_FAILURE|
    *        |NanStatusType.INVALID_SESSION_ID|
    *        |NanStatusType.INVALID_PEER_ID|
+   *        |NanStatusType.FOLLOWUP_TX_QUEUE_FULL|
    */
   oneway notifyTransmitFollowupResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked in response to a create data interface request |createDataInterfaceRequest|.
+   * Asynchronous callback invoked in response to a create data interface request
+   * |IWifiNanIface.createDataInterfaceRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -142,7 +158,8 @@
   oneway notifyCreateDataInterfaceResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked in response to a delete data interface request |deleteDataInterfaceRequest|.
+   * Asynchronous callback invoked in response to a delete data interface request
+   * |IWifiNanIface.deleteDataInterfaceRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -153,7 +170,8 @@
   oneway notifyDeleteDataInterfaceResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked in response to an initiate data path request |initiateDataPathRequest|.
+   * Asynchronous callback invoked in response to an initiate data path request
+   * |IWifiNanIface.initiateDataPathRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -162,12 +180,14 @@
    *        |NanStatusType.INTERNAL_FAILURE|
    *        |NanStatusType.PROTOCOL_FAILURE|
    *        |NanStatusType.INVALID_PEER_ID|
+   * @param ndpInstanceId ID of the new data path being negotiated (on successful status).
    */
-  oneway notifyInitiateDataPathResponse(CommandIdShort id, WifiNanStatus status);
+  oneway notifyInitiateDataPathResponse(CommandIdShort id, WifiNanStatus status,
+        uint32_t ndpInstanceId );
 
   /**
-   * Callback invoked in response to a respond to data path indication request
-   * |respondToDataPathIndicationRequest|.
+   * Asynchronous callback invoked in response to a respond to data path indication request
+   * |IWifiNanIface.respondToDataPathIndicationRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -176,13 +196,12 @@
    *        |NanStatusType.INTERNAL_FAILURE|
    *        |NanStatusType.PROTOCOL_FAILURE|
    *        |NanStatusType.INVALID_NDP_ID|
-   * @param ndpInstanceId ID of the new data path being negotiated (on successful status).
    */
-  oneway notifyRespondToDataPathIndicationResponse(CommandIdShort id, WifiNanStatus status,
-                                                   uint32_t ndpInstanceId);
+  oneway notifyRespondToDataPathIndicationResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked in response to a terminate data path request |terminateDataPathRequest|.
+   * Asynchronous callback invoked in response to a terminate data path request
+   * |IWifiNanIface.terminateDataPathRequest|.
    *
    * @param cmdId command Id corresponding to the original request.
    * @param status WifiNanStatus of the operation. Possible status codes are:
@@ -195,18 +214,6 @@
   oneway notifyTerminateDataPathResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked in response to a request to include vendor-specific payload in beacon or SDF
-   * frames |beaconSdfPayloadRequest|.
-   *
-   * @param cmdId command Id corresponding to the original request.
-   * @param status WifiNanStatus of the operation. Possible status codes are:
-   *        |NanStatusType.SUCCESS|
-   *        |NanStatusType.INVALID_ARGS|
-   *        |NanStatusType.INTERNAL_FAILURE|
-   */
-  oneway notifyBeaconSdfPayloadResponse(CommandIdShort id, WifiNanStatus status);
-
-  /**
    * Callbacks for the various asynchornous NAN Events.
    */
 
@@ -235,7 +242,7 @@
    *                Possible status codes are:
    *                |NanStatusType.SUCCESS|
    */
-  oneway eventPublishTerminated(uint16_t sessionId, WifiNanStatus status);
+  oneway eventPublishTerminated(uint8_t sessionId, WifiNanStatus status);
 
   /**
    * Asynchronous callback indicating that an active subscribe session has terminated.
@@ -245,7 +252,7 @@
    *                 Possible status codes are:
    *                |NanStatusType.SUCCESS|
    */
-  oneway eventSubscribeTerminated(uint16_t sessionId, WifiNanStatus status);
+  oneway eventSubscribeTerminated(uint8_t sessionId, WifiNanStatus status);
 
   /**
    * Asynchronous callback indicating that a match has occurred: i.e. a service has been
@@ -261,7 +268,7 @@
    * @param discoverySessionId: The discovery session ID of the expired match.
    * @param peerId: The peer ID of the expired match.
    */
-  oneway eventMatchExpired(uint16_t discoverySessionId, uint32_t peerId);
+  oneway eventMatchExpired(uint8_t discoverySessionId, uint32_t peerId);
 
   /**
    * Asynchronous callback indicating that a followup message has been received from a peer.
@@ -275,8 +282,9 @@
    *
    * @param cmdId command Id corresponding to the original |transmitFollowupRequest| request.
    * @param status WifiNanStatus of the operation.  Possible status codes are:
+   *               |NanStatusType.SUCCESS|
    *               |NanStatusType.NO_OTA_ACK|
-   *               |NanStatusType.FOLLOWUP_TX_QUEUE_FULL|
+   *               |NanStatusType.PROTOCOL_FAILURE|
    */
   oneway eventTransmitFollowup(CommandIdShort id, WifiNanStatus status);
 
@@ -303,11 +311,4 @@
    * @param ndpInstanceId: data-path ID of the terminated data-path.
    */
   oneway eventDataPathTerminated(uint32_t ndpInstanceId);
-
-  /**
-   * Asynchronous callback indicating vendor-specific payload received in NAN beacon or SDF frame.
-   *
-   * @param event: NanBeaconSdfPayloadInd containing event details.
-   */
-  oneway eventBeaconSdfPayload(NanBeaconSdfPayloadInd event);
 };
diff --git a/wifi/1.0/IWifiStaIface.hal b/wifi/1.0/IWifiStaIface.hal
index 6a738a9..96dc54a 100644
--- a/wifi/1.0/IWifiStaIface.hal
+++ b/wifi/1.0/IWifiStaIface.hal
@@ -438,8 +438,22 @@
   stopSendingKeepAlivePackets(CommandId cmdId) generates (WifiStatus status);
 
   /**
+   * Set the MAC OUI during scanning.
+   * An OUI {Organizationally Unique Identifier} is a 24-bit number that
+   * uniquely identifies a vendor or manufacturer.
+   *
+   * @return status WifiStatus of the operation.
+   *         Possible status codes:
+   *         |WifiStatusCode.SUCCESS|,
+   *         |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|,
+   *         |WifiStatusCode.ERROR_UNKNOWN|
+   */
+  setScanningMacOui(uint8_t[3] oui) generates (WifiStatus status);
+
+  /**
    * API to start packet fate monitoring.
-   * - Once stared, monitoring must remain active until HAL is unloaded.
+   * - Once started, monitoring must remain active until HAL is stopped or the
+   *   chip is reconfigured.
    * - When HAL is unloaded, all packet fate buffers must be cleared.
    * - The packet fates are used to monitor the state of packets transmitted/
    *   received during association.
@@ -455,20 +469,6 @@
   startDebugPacketFateMonitoring() generates (WifiStatus status);
 
   /**
-   * API to stop packet fate monitoring.
-   *
-   * @return status WifiStatus of the operation.
-   *         Possible status codes:
-   *         |WifiStatusCode.SUCCESS|,
-   *         |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|,
-   *         |WifiStatusCode.ERROR_NOT_SUPPORTED|,
-   *         |WifiStatusCode.ERROR_NOT_STARTED|,
-   *         |WifiStatusCode.ERROR_NOT_AVAILABLE|,
-   *         |WifiStatusCode.ERROR_UNKNOWN|
-   */
-  stopDebugPacketFateMonitoring() generates (WifiStatus status);
-
-  /**
    * API to retrieve fates of outbound packets.
    * - HAL implementation must return the fates of
    *   all the frames transmitted for the most recent association.
diff --git a/wifi/1.0/default/Android.mk b/wifi/1.0/default/Android.mk
index f0c78ea..2d2d898 100644
--- a/wifi/1.0/default/Android.mk
+++ b/wifi/1.0/default/Android.mk
@@ -16,9 +16,11 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := android.hardware.wifi@1.0-service
 LOCAL_MODULE_RELATIVE_PATH := hw
-LOCAL_CPPFLAGS := -Wall -Wno-unused-parameter -Werror -Wextra
+LOCAL_PROPRIETARY_MODULE := true
+LOCAL_CPPFLAGS := -Wall -Werror -Wextra
 LOCAL_SRC_FILES := \
     hidl_struct_util.cpp \
+    hidl_sync_util.cpp \
     service.cpp \
     wifi.cpp \
     wifi_ap_iface.cpp \
diff --git a/wifi/1.0/default/THREADING.README b/wifi/1.0/default/THREADING.README
new file mode 100644
index 0000000..8366ca0
--- /dev/null
+++ b/wifi/1.0/default/THREADING.README
@@ -0,0 +1,35 @@
+Vendor HAL Threading Model
+==========================
+The vendor HAL service has two threads:
+1. HIDL thread: This is the main thread which processes all the incoming HIDL
+RPC's.
+2. Legacy HAL event loop thread: This is the thread forked off for processing
+the legacy HAL event loop (wifi_event_loop()). This thread is used to process
+any asynchronous netlink events posted by the driver. Any asynchronous
+callbacks passed to the legacy HAL API's are invoked on this thread.
+
+Synchronization Concerns
+========================
+wifi_legacy_hal.cpp has a bunch of global "C" style functions to handle the
+legacy callbacks. Each of these "C" style function invokes a corresponding
+"std::function" version of the callback which does the actual processing.
+The variables holding these "std::function" callbacks are reset from the HIDL
+thread when they are no longer used. For example: stopGscan() will reset the
+corresponding "on_gscan_*" callback variables which were set when startGscan()
+was invoked. This is not thread safe since these callback variables are
+accesed from the legacy hal event loop thread as well.
+
+Synchronization Solution
+========================
+Adding a global lock seems to be the most trivial solution to the problem.
+a) All of the asynchronous "C" style callbacks will acquire the global lock
+before invoking the corresponding "std::function" callback variables.
+b) All of the HIDL methods will also acquire the global lock before processing
+(in hidl_return_util::validateAndCall()).
+
+Note: It's important that we only acquire the global lock for asynchronous
+callbacks, because there is no guarantee (or documentation to clarify) that the
+synchronous callbacks are invoked on the same invocation thread. If that is not
+the case in some implementation, we will end up deadlocking the system since the
+HIDL thread would have acquired the global lock which is needed by the
+synchronous callback executed on the legacy hal event loop thread.
diff --git a/wifi/1.0/default/android.hardware.wifi@1.0-service.rc b/wifi/1.0/default/android.hardware.wifi@1.0-service.rc
index 9d09347..c0ae4d4 100644
--- a/wifi/1.0/default/android.hardware.wifi@1.0-service.rc
+++ b/wifi/1.0/default/android.hardware.wifi@1.0-service.rc
@@ -1,4 +1,4 @@
-service wifi_hal_legacy /system/bin/hw/android.hardware.wifi@1.0-service
+service wifi_hal_legacy /vendor/bin/hw/android.hardware.wifi@1.0-service
     class hal
     user wifi
     group wifi
diff --git a/wifi/1.0/default/hidl_callback_util.h b/wifi/1.0/default/hidl_callback_util.h
new file mode 100644
index 0000000..a1c6819
--- /dev/null
+++ b/wifi/1.0/default/hidl_callback_util.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2017 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_CALLBACK_UTIL_H_
+#define HIDL_CALLBACK_UTIL_H_
+
+#include <set>
+
+#include <hidl/HidlSupport.h>
+
+namespace {
+// Type of callback invoked by the death handler.
+using on_death_cb_function = std::function<void(uint64_t)>;
+
+// Private class used to keep track of death of individual
+// callbacks stored in HidlCallbackHandler.
+template <typename CallbackType>
+class HidlDeathHandler : public android::hardware::hidl_death_recipient {
+ public:
+  HidlDeathHandler(const on_death_cb_function& user_cb_function)
+      : cb_function_(user_cb_function) {}
+  ~HidlDeathHandler() = default;
+
+  // Death notification for callbacks.
+  void serviceDied(
+      uint64_t cookie,
+      const android::wp<android::hidl::base::V1_0::IBase>& /* who */) override {
+    cb_function_(cookie);
+  }
+
+ private:
+  on_death_cb_function cb_function_;
+
+  DISALLOW_COPY_AND_ASSIGN(HidlDeathHandler);
+};
+}  // namespace
+
+namespace android {
+namespace hardware {
+namespace wifi {
+namespace V1_0 {
+namespace implementation {
+namespace hidl_callback_util {
+template <typename CallbackType>
+// Provides a class to manage callbacks for the various HIDL interfaces and
+// handle the death of the process hosting each callback.
+class HidlCallbackHandler {
+ public:
+  HidlCallbackHandler()
+      : death_handler_(new HidlDeathHandler<CallbackType>(
+            std::bind(&HidlCallbackHandler::onObjectDeath,
+                      this,
+                      std::placeholders::_1))) {}
+  ~HidlCallbackHandler() = default;
+
+  bool addCallback(const sp<CallbackType>& cb) {
+    // TODO(b/33818800): Can't compare proxies yet. So, use the cookie
+    // (callback proxy's raw pointer) to track the death of individual clients.
+    uint64_t cookie = reinterpret_cast<uint64_t>(cb.get());
+    if (cb_set_.find(cb) != cb_set_.end()) {
+      LOG(WARNING) << "Duplicate death notification registration";
+      return true;
+    }
+    if (!cb->linkToDeath(death_handler_, cookie)) {
+      LOG(ERROR) << "Failed to register death notification";
+      return false;
+    }
+    cb_set_.insert(cb);
+    return true;
+  }
+
+  const std::set<android::sp<CallbackType>> getCallbacks() {
+    return cb_set_;
+  }
+
+  // Death notification for callbacks.
+  void onObjectDeath(uint64_t cookie) {
+    CallbackType *cb = reinterpret_cast<CallbackType*>(cookie);
+    const auto& iter =  cb_set_.find(cb);
+    if (iter == cb_set_.end()) {
+      LOG(ERROR) << "Unknown callback death notification received";
+      return;
+    }
+    cb_set_.erase(iter);
+    LOG(DEBUG) << "Dead callback removed from list";
+  }
+
+  void invalidate() {
+    for (const sp<CallbackType>& cb : cb_set_) {
+      if (!cb->unlinkToDeath(death_handler_)) {
+        LOG(ERROR) << "Failed to deregister death notification";
+      }
+    }
+    cb_set_.clear();
+  }
+
+ private:
+  std::set<sp<CallbackType>> cb_set_;
+  sp<HidlDeathHandler<CallbackType>> death_handler_;
+
+  DISALLOW_COPY_AND_ASSIGN(HidlCallbackHandler);
+};
+
+}  // namespace hidl_callback_util
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace wifi
+}  // namespace hardware
+}  // namespace android
+#endif  // HIDL_CALLBACK_UTIL_H_
diff --git a/wifi/1.0/default/hidl_return_util.h b/wifi/1.0/default/hidl_return_util.h
index 2986165..3f6364b 100644
--- a/wifi/1.0/default/hidl_return_util.h
+++ b/wifi/1.0/default/hidl_return_util.h
@@ -17,6 +17,7 @@
 #ifndef HIDL_RETURN_UTIL_H_
 #define HIDL_RETURN_UTIL_H_
 
+#include "hidl_sync_util.h"
 #include "wifi_status_util.h"
 
 namespace android {
@@ -44,6 +45,7 @@
     WorkFuncT&& work,
     const std::function<void(const WifiStatus&)>& hidl_cb,
     Args&&... args) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (obj->isValid()) {
     hidl_cb((obj->*work)(std::forward<Args>(args)...));
   } else {
@@ -61,6 +63,7 @@
     WorkFuncT&& work,
     const std::function<void(const WifiStatus&, ReturnT)>& hidl_cb,
     Args&&... args) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (obj->isValid()) {
     const auto& ret_pair = (obj->*work)(std::forward<Args>(args)...);
     const WifiStatus& status = std::get<0>(ret_pair);
@@ -86,6 +89,7 @@
     WorkFuncT&& work,
     const std::function<void(const WifiStatus&, ReturnT1, ReturnT2)>& hidl_cb,
     Args&&... args) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (obj->isValid()) {
     const auto& ret_tuple = (obj->*work)(std::forward<Args>(args)...);
     const WifiStatus& status = std::get<0>(ret_tuple);
diff --git a/wifi/1.0/default/hidl_struct_util.cpp b/wifi/1.0/default/hidl_struct_util.cpp
index 37fcfea..7dbc8eb 100644
--- a/wifi/1.0/default/hidl_struct_util.cpp
+++ b/wifi/1.0/default/hidl_struct_util.cpp
@@ -134,6 +134,7 @@
     return false;
   }
   hidl_status->ringName = reinterpret_cast<const char*>(legacy_status.name);
+  hidl_status->flags = 0;
   for (const auto flag : {WIFI_RING_BUFFER_FLAG_HAS_BINARY_ENTRIES,
                           WIFI_RING_BUFFER_FLAG_HAS_ASCII_ENTRIES}) {
     if (flag & legacy_status.flags) {
@@ -457,6 +458,7 @@
   if (!hidl_scan_data) {
     return false;
   }
+  hidl_scan_data->flags = 0;
   for (const auto flag : {legacy_hal::WIFI_SCAN_FLAG_INTERRUPTED}) {
     if (legacy_cached_scan_result.flags & flag) {
       hidl_scan_data->flags |=
@@ -759,17 +761,17 @@
     const NanEnableRequest& hidl_request,
     legacy_hal::NanEnableRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: null legacy_request";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanEnableRequest));
 
-  // TODO: b/34059183 tracks missing configurations in legacy HAL or uknown defaults
   legacy_request->config_2dot4g_support = 1;
   legacy_request->support_2dot4g_val = hidl_request.operateInBand[
         (size_t) NanBandIndex::NAN_BAND_24GHZ];
   legacy_request->config_support_5g = 1;
   legacy_request->support_5g_val = hidl_request.operateInBand[(size_t) NanBandIndex::NAN_BAND_5GHZ];
-  legacy_request->config_hop_count_limit = 0; // TODO: don't know default yet
+  legacy_request->config_hop_count_limit = 1;
   legacy_request->hop_count_limit_val = hidl_request.hopCountMax;
   legacy_request->master_pref = hidl_request.configParams.masterPref;
   legacy_request->discovery_indication_cfg = 0;
@@ -780,32 +782,36 @@
   legacy_request->discovery_indication_cfg |=
         hidl_request.configParams.disableJoinedClusterIndication ? 0x4 : 0x0;
   legacy_request->config_sid_beacon = 1;
-  if (hidl_request.configParams.numberOfServiceIdsInBeacon > 127) {
+  if (hidl_request.configParams.numberOfPublishServiceIdsInBeacon > 127) {
+    LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: numberOfPublishServiceIdsInBeacon > 127";
     return false;
   }
-  legacy_request->sid_beacon_val = (hidl_request.configParams.includeServiceIdsInBeacon ? 0x1 : 0x0)
-        | (hidl_request.configParams.numberOfServiceIdsInBeacon << 1);
-  legacy_request->config_rssi_window_size = 0; // TODO: don't know default yet
+  legacy_request->sid_beacon_val =
+        (hidl_request.configParams.includePublishServiceIdsInBeacon ? 0x1 : 0x0)
+            | (hidl_request.configParams.numberOfPublishServiceIdsInBeacon << 1);
+  // TODO: b/35195516 connect SubscribeServiceIds to legacy HAL once implemented
+  legacy_request->config_rssi_window_size = 1;
   legacy_request->rssi_window_size_val = hidl_request.configParams.rssiWindowSize;
   legacy_request->config_disc_mac_addr_randomization = 1;
   legacy_request->disc_mac_addr_rand_interval_sec =
         hidl_request.configParams.macAddressRandomizationIntervalSec;
-  legacy_request->config_responder_auto_response = 1;
-  legacy_request->ranging_auto_response_cfg = hidl_request.configParams.acceptRangingRequests ?
-       legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE;
-  legacy_request->config_2dot4g_rssi_close = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_close = 1;
+  if (hidl_request.configParams.bandSpecificConfig.size() != 2) {
+    LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: bandSpecificConfig.size() != 2";
+    return false;
+  }
   legacy_request->rssi_close_2dot4g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiClose;
-  legacy_request->config_2dot4g_rssi_middle = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_middle = 1;
   legacy_request->rssi_middle_2dot4g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiMiddle;
-  legacy_request->config_2dot4g_rssi_proximity = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_proximity = 1;
   legacy_request->rssi_proximity_2dot4g_val =
         hidl_request.configParams.bandSpecificConfig[
-            (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiProximity;
-  legacy_request->config_scan_params = 0; // TODO: don't know default yet
+            (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiCloseProximity;
+  legacy_request->config_scan_params = 1;
   legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_24G_BAND] =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].dwellTimeMs;
@@ -816,18 +822,18 @@
         .bandSpecificConfig[(size_t) NanBandIndex::NAN_BAND_24GHZ].validDiscoveryWindowIntervalVal;
   legacy_request->config_dw.dw_2dot4g_interval_val = hidl_request.configParams
         .bandSpecificConfig[(size_t) NanBandIndex::NAN_BAND_24GHZ].discoveryWindowIntervalVal;
-  legacy_request->config_5g_rssi_close = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_close = 1;
   legacy_request->rssi_close_5g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiClose;
-  legacy_request->config_5g_rssi_middle = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_middle = 1;
   legacy_request->rssi_middle_5g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiMiddle;
-  legacy_request->config_5g_rssi_close_proximity = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_close_proximity = 1;
   legacy_request->rssi_close_proximity_5g_val =
         hidl_request.configParams.bandSpecificConfig[
-            (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiProximity;
+            (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiCloseProximity;
   legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].dwellTimeMs;
@@ -845,8 +851,8 @@
   legacy_request->config_dw.dw_5g_interval_val = hidl_request.configParams
         .bandSpecificConfig[(size_t) NanBandIndex::NAN_BAND_5GHZ].discoveryWindowIntervalVal;
   if (hidl_request.debugConfigs.validClusterIdVals) {
-    legacy_request->cluster_low = hidl_request.debugConfigs.clusterIdLowVal;
-    legacy_request->cluster_high = hidl_request.debugConfigs.clusterIdHighVal;
+    legacy_request->cluster_low = hidl_request.debugConfigs.clusterIdBottomRangeVal;
+    legacy_request->cluster_high = hidl_request.debugConfigs.clusterIdTopRangeVal;
   } else { // need 'else' since not configurable in legacy HAL
     legacy_request->cluster_low = 0x0000;
     legacy_request->cluster_high = 0xFFFF;
@@ -885,6 +891,7 @@
     const NanPublishRequest& hidl_request,
     legacy_hal::NanPublishRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: null legacy_request";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanPublishRequest));
@@ -895,21 +902,33 @@
   legacy_request->publish_count = hidl_request.baseConfigs.discoveryCount;
   legacy_request->service_name_len = hidl_request.baseConfigs.serviceName.size();
   if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: service_name_len too large";
     return false;
   }
-  memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.c_str(),
+  memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.data(),
         legacy_request->service_name_len);
   legacy_request->publish_match_indicator =
         (legacy_hal::NanMatchAlg) hidl_request.baseConfigs.discoveryMatchIndicator;
   legacy_request->service_specific_info_len = hidl_request.baseConfigs.serviceSpecificInfo.size();
   if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: service_specific_info_len too large";
     return false;
   }
   memcpy(legacy_request->service_specific_info,
         hidl_request.baseConfigs.serviceSpecificInfo.data(),
         legacy_request->service_specific_info_len);
+  legacy_request->sdea_service_specific_info_len =
+        hidl_request.baseConfigs.extendedServiceSpecificInfo.size();
+  if (legacy_request->sdea_service_specific_info_len > NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: sdea_service_specific_info_len too large";
+    return false;
+  }
+  memcpy(legacy_request->sdea_service_specific_info,
+        hidl_request.baseConfigs.extendedServiceSpecificInfo.data(),
+        legacy_request->sdea_service_specific_info_len);
   legacy_request->rx_match_filter_len = hidl_request.baseConfigs.rxMatchFilter.size();
   if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: rx_match_filter_len too large";
     return false;
   }
   memcpy(legacy_request->rx_match_filter,
@@ -917,6 +936,7 @@
         legacy_request->rx_match_filter_len);
   legacy_request->tx_match_filter_len = hidl_request.baseConfigs.txMatchFilter.size();
   if (legacy_request->tx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: tx_match_filter_len too large";
     return false;
   }
   memcpy(legacy_request->tx_match_filter,
@@ -933,6 +953,7 @@
   legacy_request->cipher_type = hidl_request.baseConfigs.supportedCipherTypes;
   legacy_request->pmk_len = hidl_request.baseConfigs.pmk.size();
   if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: pmk_len too large";
     return false;
   }
   memcpy(legacy_request->pmk,
@@ -947,6 +968,9 @@
         hidl_request.baseConfigs.configRangingIndications;
   legacy_request->ranging_cfg.distance_ingress_cm = hidl_request.baseConfigs.distanceIngressCm;
   legacy_request->ranging_cfg.distance_egress_cm = hidl_request.baseConfigs.distanceEgressCm;
+  legacy_request->ranging_auto_response = hidl_request.baseConfigs.rangingRequired ?
+        legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE;
+  legacy_request->range_report = legacy_hal::NAN_DISABLE_RANGE_REPORT;
   legacy_request->publish_type = (legacy_hal::NanPublishType) hidl_request.publishType;
   legacy_request->tx_type = (legacy_hal::NanTxType) hidl_request.txType;
 
@@ -957,6 +981,7 @@
     const NanSubscribeRequest& hidl_request,
     legacy_hal::NanSubscribeRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanSubscribeRequest));
@@ -967,21 +992,34 @@
   legacy_request->subscribe_count = hidl_request.baseConfigs.discoveryCount;
   legacy_request->service_name_len = hidl_request.baseConfigs.serviceName.size();
   if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: service_name_len too large";
     return false;
   }
-  memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.c_str(),
+  memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.data(),
         legacy_request->service_name_len);
   legacy_request->subscribe_match_indicator =
         (legacy_hal::NanMatchAlg) hidl_request.baseConfigs.discoveryMatchIndicator;
   legacy_request->service_specific_info_len = hidl_request.baseConfigs.serviceSpecificInfo.size();
   if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: service_specific_info_len too large";
     return false;
   }
   memcpy(legacy_request->service_specific_info,
         hidl_request.baseConfigs.serviceSpecificInfo.data(),
         legacy_request->service_specific_info_len);
+  legacy_request->sdea_service_specific_info_len =
+        hidl_request.baseConfigs.extendedServiceSpecificInfo.size();
+  if (legacy_request->sdea_service_specific_info_len > NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) {
+    LOG(ERROR) <<
+        "convertHidlNanSubscribeRequestToLegacy: sdea_service_specific_info_len too large";
+    return false;
+  }
+  memcpy(legacy_request->sdea_service_specific_info,
+        hidl_request.baseConfigs.extendedServiceSpecificInfo.data(),
+        legacy_request->sdea_service_specific_info_len);
   legacy_request->rx_match_filter_len = hidl_request.baseConfigs.rxMatchFilter.size();
   if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: rx_match_filter_len too large";
     return false;
   }
   memcpy(legacy_request->rx_match_filter,
@@ -989,6 +1027,7 @@
         legacy_request->rx_match_filter_len);
   legacy_request->tx_match_filter_len = hidl_request.baseConfigs.txMatchFilter.size();
   if (legacy_request->tx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: tx_match_filter_len too large";
     return false;
   }
   memcpy(legacy_request->tx_match_filter,
@@ -1005,6 +1044,7 @@
   legacy_request->cipher_type = hidl_request.baseConfigs.supportedCipherTypes;
   legacy_request->pmk_len = hidl_request.baseConfigs.pmk.size();
   if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: pmk_len too large";
     return false;
   }
   memcpy(legacy_request->pmk,
@@ -1019,6 +1059,9 @@
         hidl_request.baseConfigs.configRangingIndications;
   legacy_request->ranging_cfg.distance_ingress_cm = hidl_request.baseConfigs.distanceIngressCm;
   legacy_request->ranging_cfg.distance_egress_cm = hidl_request.baseConfigs.distanceEgressCm;
+  legacy_request->ranging_auto_response = hidl_request.baseConfigs.rangingRequired ?
+        legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE;
+  legacy_request->range_report = legacy_hal::NAN_DISABLE_RANGE_REPORT;
   legacy_request->subscribe_type = (legacy_hal::NanSubscribeType) hidl_request.subscribeType;
   legacy_request->serviceResponseFilter = (legacy_hal::NanSRFType) hidl_request.srfType;
   legacy_request->serviceResponseInclude = hidl_request.srfRespondIfInAddressSet ?
@@ -1029,6 +1072,7 @@
         legacy_hal::NAN_SSI_REQUIRED_IN_MATCH_IND : legacy_hal::NAN_SSI_NOT_REQUIRED_IN_MATCH_IND;
   legacy_request->num_intf_addr_present = hidl_request.intfAddr.size();
   if (legacy_request->num_intf_addr_present > NAN_MAX_SUBSCRIBE_MAX_ADDRESS) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: num_intf_addr_present - too many";
     return false;
   }
   for (int i = 0; i < legacy_request->num_intf_addr_present; i++) {
@@ -1042,6 +1086,7 @@
     const NanTransmitFollowupRequest& hidl_request,
     legacy_hal::NanTransmitFollowupRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanTransmitFollowupRequest));
@@ -1053,13 +1098,24 @@
         legacy_hal::NAN_TX_PRIORITY_HIGH : legacy_hal::NAN_TX_PRIORITY_NORMAL;
   legacy_request->dw_or_faw = hidl_request.shouldUseDiscoveryWindow ?
         legacy_hal::NAN_TRANSMIT_IN_DW : legacy_hal::NAN_TRANSMIT_IN_FAW;
-  legacy_request->service_specific_info_len = hidl_request.message.size();
+  legacy_request->service_specific_info_len = hidl_request.serviceSpecificInfo.size();
   if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) {
+    LOG(ERROR) <<
+        "convertHidlNanTransmitFollowupRequestToLegacy: service_specific_info_len too large";
     return false;
   }
   memcpy(legacy_request->service_specific_info,
-        hidl_request.message.data(),
+        hidl_request.serviceSpecificInfo.data(),
         legacy_request->service_specific_info_len);
+  legacy_request->sdea_service_specific_info_len = hidl_request.extendedServiceSpecificInfo.size();
+  if (legacy_request->sdea_service_specific_info_len > NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) {
+    LOG(ERROR) <<
+        "convertHidlNanTransmitFollowupRequestToLegacy: sdea_service_specific_info_len too large";
+    return false;
+  }
+  memcpy(legacy_request->sdea_service_specific_info,
+        hidl_request.extendedServiceSpecificInfo.data(),
+        legacy_request->sdea_service_specific_info_len);
   legacy_request->recv_indication_cfg = hidl_request.disableFollowupResultIndication ? 0x1 : 0x0;
 
   return true;
@@ -1069,6 +1125,7 @@
     const NanConfigRequest& hidl_request,
     legacy_hal::NanConfigRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanConfigRequestToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanConfigRequest));
@@ -1083,34 +1140,33 @@
   legacy_request->discovery_indication_cfg |=
         hidl_request.disableJoinedClusterIndication ? 0x4 : 0x0;
   legacy_request->config_sid_beacon = 1;
-  if (hidl_request.numberOfServiceIdsInBeacon > 127) {
+  if (hidl_request.numberOfPublishServiceIdsInBeacon > 127) {
+    LOG(ERROR) << "convertHidlNanConfigRequestToLegacy: numberOfPublishServiceIdsInBeacon > 127";
     return false;
   }
-  legacy_request->sid_beacon = (hidl_request.includeServiceIdsInBeacon ? 0x1 : 0x0)
-        | (hidl_request.numberOfServiceIdsInBeacon << 1);
-  legacy_request->config_rssi_window_size = 0; // TODO: don't know default yet
+  legacy_request->sid_beacon = (hidl_request.includePublishServiceIdsInBeacon ? 0x1 : 0x0)
+        | (hidl_request.numberOfPublishServiceIdsInBeacon << 1);
+  // TODO: b/35195516 connect SubscribeServiceIds to legacy HAL once implemented
+  legacy_request->config_rssi_window_size = 1;
   legacy_request->rssi_window_size_val = hidl_request.rssiWindowSize;
   legacy_request->config_disc_mac_addr_randomization = 1;
   legacy_request->disc_mac_addr_rand_interval_sec =
         hidl_request.macAddressRandomizationIntervalSec;
-  legacy_request->config_responder_auto_response = 1;
-  legacy_request->ranging_auto_response_cfg = hidl_request.acceptRangingRequests ?
-       legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE;
   /* TODO : missing
-  legacy_request->config_2dot4g_rssi_close = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_close = 1;
   legacy_request->rssi_close_2dot4g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiClose;
-  legacy_request->config_2dot4g_rssi_middle = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_middle = 1;
   legacy_request->rssi_middle_2dot4g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiMiddle;
-  legacy_request->config_2dot4g_rssi_proximity = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_proximity = 1;
   legacy_request->rssi_proximity_2dot4g_val =
         hidl_request.bandSpecificConfig[
-            (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiProximity;
+            (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiCloseProximity;
   */
-  legacy_request->config_scan_params = 0; // TODO: don't know default yet
+  legacy_request->config_scan_params = 1;
   legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_24G_BAND] =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].dwellTimeMs;
@@ -1122,19 +1178,19 @@
   legacy_request->config_dw.dw_2dot4g_interval_val = hidl_request
         .bandSpecificConfig[(size_t) NanBandIndex::NAN_BAND_24GHZ].discoveryWindowIntervalVal;
   /* TODO: missing
-  legacy_request->config_5g_rssi_close = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_close = 1;
   legacy_request->rssi_close_5g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiClose;
-  legacy_request->config_5g_rssi_middle = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_middle = 1;
   legacy_request->rssi_middle_5g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiMiddle;
   */
-  legacy_request->config_5g_rssi_close_proximity = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_close_proximity = 1;
   legacy_request->rssi_close_proximity_5g_val =
         hidl_request.bandSpecificConfig[
-            (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiProximity;
+            (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiCloseProximity;
   legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].dwellTimeMs;
@@ -1155,32 +1211,11 @@
   return true;
 }
 
-bool convertHidlNanBeaconSdfPayloadRequestToLegacy(
-    const NanBeaconSdfPayloadRequest& hidl_request,
-    legacy_hal::NanBeaconSdfPayloadRequest* legacy_request) {
-  if (!legacy_request) {
-    return false;
-  }
-  memset(legacy_request, 0, sizeof(legacy_hal::NanBeaconSdfPayloadRequest));
-
-  legacy_request->vsa.payload_transmit_flag = hidl_request.transmitInNext16dws ? 1 : 0;
-  legacy_request->vsa.tx_in_discovery_beacon = hidl_request.transmitInDiscoveryBeacon;
-  legacy_request->vsa.tx_in_sync_beacon = hidl_request.transmitInSyncBeacon;
-  legacy_request->vsa.tx_in_service_discovery = hidl_request.transmitInServiceDiscoveryFrame;
-  legacy_request->vsa.vendor_oui = hidl_request.vendorOui;
-  legacy_request->vsa.vsa_len = hidl_request.vsa.size();
-  if (legacy_request->vsa.vsa_len > NAN_MAX_VSA_DATA_LEN) {
-    return false;
-  }
-  memcpy(legacy_request->vsa.vsa, hidl_request.vsa.data(), legacy_request->vsa.vsa_len);
-
-  return true;
-}
-
 bool convertHidlNanDataPathInitiatorRequestToLegacy(
     const NanInitiateDataPathRequest& hidl_request,
     legacy_hal::NanDataPathInitiatorRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanDataPathInitiatorRequest));
@@ -1195,6 +1230,7 @@
         legacy_hal::NAN_DP_CONFIG_SECURITY : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
   legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size();
   if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: ndp_app_info_len to large";
     return false;
   }
   memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
@@ -1213,6 +1249,7 @@
     const NanRespondToDataPathIndicationRequest& hidl_request,
     legacy_hal::NanDataPathIndicationResponse* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanDataPathIndicationResponse));
@@ -1225,6 +1262,7 @@
         legacy_hal::NAN_DP_CONFIG_SECURITY : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
   legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size();
   if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: ndp_app_info_len too large";
     return false;
   }
   memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
@@ -1232,6 +1270,7 @@
   legacy_request->cipher_type = hidl_request.supportedCipherTypes;
   legacy_request->pmk_len = hidl_request.pmk.size();
   if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: pmk_len too large";
     return false;
   }
   memcpy(legacy_request->pmk, hidl_request.pmk.data(), legacy_request->pmk_len);
@@ -1243,6 +1282,7 @@
     const legacy_hal::NanResponseMsg& legacy_response,
     WifiNanStatus* wifiNanStatus) {
   if (!wifiNanStatus) {
+    LOG(ERROR) << "convertLegacyNanResponseHeaderToHidl: wifiNanStatus is null";
     return false;
   }
   wifiNanStatus->status = convertLegacyNanStatusTypeToHidl(legacy_response.status);
@@ -1255,6 +1295,7 @@
     const legacy_hal::NanCapabilities& legacy_response,
     NanCapabilities* hidl_response) {
   if (!hidl_response) {
+    LOG(ERROR) << "convertLegacyNanCapabilitiesResponseToHidl: hidl_response is null";
     return false;
   }
   hidl_response->maxConcurrentClusters = legacy_response.max_concurrent_nan_clusters;
@@ -1264,13 +1305,13 @@
   hidl_response->maxMatchFilterLen = legacy_response.max_match_filter_len;
   hidl_response->maxTotalMatchFilterLen = legacy_response.max_total_match_filter_len;
   hidl_response->maxServiceSpecificInfoLen = legacy_response.max_service_specific_info_len;
-  hidl_response->maxVsaDataLen = legacy_response.max_vsa_data_len;
+  hidl_response->maxExtendedServiceSpecificInfoLen =
+    legacy_response.max_sdea_service_specific_info_len;
   hidl_response->maxNdiInterfaces = legacy_response.max_ndi_interfaces;
   hidl_response->maxNdpSessions = legacy_response.max_ndp_sessions;
   hidl_response->maxAppInfoLen = legacy_response.max_app_info_len;
   hidl_response->maxQueuedTransmitFollowupMsgs = legacy_response.max_queued_transmit_followup_msgs;
-  // TODO: b/34059183 to add to underlying HAL
-  hidl_response->maxSubscribeInterfaceAddresses = NAN_MAX_SUBSCRIBE_MAX_ADDRESS;
+  hidl_response->maxSubscribeInterfaceAddresses = legacy_response.max_subscribe_address;
   hidl_response->supportedCipherSuites = legacy_response.cipher_suites_supported;
 
   return true;
@@ -1280,6 +1321,7 @@
     const legacy_hal::NanMatchInd& legacy_ind,
     NanMatchInd* hidl_ind) {
   if (!hidl_ind) {
+    LOG(ERROR) << "convertLegacyNanMatchIndToHidl: hidl_ind is null";
     return false;
   }
   hidl_ind->discoverySessionId = legacy_ind.publish_subscribe_id;
@@ -1287,6 +1329,9 @@
   hidl_ind->addr = hidl_array<uint8_t, 6>(legacy_ind.addr);
   hidl_ind->serviceSpecificInfo = std::vector<uint8_t>(legacy_ind.service_specific_info,
         legacy_ind.service_specific_info + legacy_ind.service_specific_info_len);
+  hidl_ind->extendedServiceSpecificInfo = std::vector<uint8_t>(
+        legacy_ind.sdea_service_specific_info,
+        legacy_ind.sdea_service_specific_info + legacy_ind.sdea_service_specific_info_len);
   hidl_ind->matchFilter = std::vector<uint8_t>(legacy_ind.sdf_match_filter,
         legacy_ind.sdf_match_filter + legacy_ind.sdf_match_filter_len);
   hidl_ind->matchOccuredInBeaconFlag = legacy_ind.match_occured_flag == 1;
@@ -1297,8 +1342,8 @@
         legacy_ind.peer_sdea_params.security_cfg == legacy_hal::NAN_DP_CONFIG_SECURITY;
   hidl_ind->peerRequiresRanging =
         legacy_ind.peer_sdea_params.ranging_state == legacy_hal::NAN_RANGING_ENABLE;
-  hidl_ind->rangingMeasurementInCm = legacy_ind.range_result.range_measurement_cm;
-  hidl_ind->rangingIndicationType = legacy_ind.range_result.ranging_event_type;
+  hidl_ind->rangingMeasurementInCm = legacy_ind.range_info.range_measurement_cm;
+  hidl_ind->rangingIndicationType = legacy_ind.range_info.ranging_event_type;
 
   return true;
 }
@@ -1307,33 +1352,18 @@
     const legacy_hal::NanFollowupInd& legacy_ind,
     NanFollowupReceivedInd* hidl_ind) {
   if (!hidl_ind) {
+    LOG(ERROR) << "convertLegacyNanFollowupIndToHidl: hidl_ind is null";
     return false;
   }
   hidl_ind->discoverySessionId = legacy_ind.publish_subscribe_id;
   hidl_ind->peerId = legacy_ind.requestor_instance_id;
   hidl_ind->addr = hidl_array<uint8_t, 6>(legacy_ind.addr);
   hidl_ind->receivedInFaw = legacy_ind.dw_or_faw == 1;
-  hidl_ind->message = std::vector<uint8_t>(legacy_ind.service_specific_info,
+  hidl_ind->serviceSpecificInfo = std::vector<uint8_t>(legacy_ind.service_specific_info,
         legacy_ind.service_specific_info + legacy_ind.service_specific_info_len);
-
-  return true;
-}
-
-bool convertLegacyNanBeaconSdfPayloadIndToHidl(
-    const legacy_hal::NanBeaconSdfPayloadInd& legacy_ind,
-    NanBeaconSdfPayloadInd* hidl_ind) {
-  if (!hidl_ind) {
-    return false;
-  }
-  hidl_ind->addr = hidl_array<uint8_t, 6>(legacy_ind.addr);
-  hidl_ind->isVsaReceived = legacy_ind.is_vsa_received == 1;
-  hidl_ind->vsaReceivedOnFrames = legacy_ind.vsa.vsa_received_on;
-  hidl_ind->vsaVendorOui = legacy_ind.vsa.vendor_oui;
-  hidl_ind->vsa = std::vector<uint8_t>(legacy_ind.vsa.vsa,
-        legacy_ind.vsa.vsa + legacy_ind.vsa.attr_len);
-  hidl_ind->isBeaconSdfPayloadReceived = legacy_ind.is_beacon_sdf_payload_received == 1;
-  hidl_ind->beaconSdfPayloadData = std::vector<uint8_t>(legacy_ind.data.frame_data,
-        legacy_ind.data.frame_data + legacy_ind.data.frame_len);
+  hidl_ind->extendedServiceSpecificInfo = std::vector<uint8_t>(
+        legacy_ind.sdea_service_specific_info,
+        legacy_ind.sdea_service_specific_info + legacy_ind.sdea_service_specific_info_len);
 
   return true;
 }
@@ -1342,6 +1372,7 @@
     const legacy_hal::NanDataPathRequestInd& legacy_ind,
     NanDataPathRequestInd* hidl_ind) {
   if (!hidl_ind) {
+    LOG(ERROR) << "convertLegacyNanDataPathRequestIndToHidl: hidl_ind is null";
     return false;
   }
   hidl_ind->discoverySessionId = legacy_ind.service_instance_id;
@@ -1359,6 +1390,7 @@
     const legacy_hal::NanDataPathConfirmInd& legacy_ind,
     NanDataPathConfirmInd* hidl_ind) {
   if (!hidl_ind) {
+    LOG(ERROR) << "convertLegacyNanDataPathConfirmIndToHidl: hidl_ind is null";
     return false;
   }
   hidl_ind->ndpInstanceId = legacy_ind.ndp_instance_id;
@@ -1749,6 +1781,7 @@
   hidl_capabilities->lcrSupported = legacy_capabilities.lcr_support;
   hidl_capabilities->responderSupported =
       legacy_capabilities.responder_supported;
+  hidl_capabilities->preambleSupport = 0;
   for (const auto flag : {legacy_hal::WIFI_RTT_PREAMBLE_LEGACY,
                           legacy_hal::WIFI_RTT_PREAMBLE_HT,
                           legacy_hal::WIFI_RTT_PREAMBLE_VHT}) {
@@ -1758,6 +1791,7 @@
               convertLegacyRttPreambleToHidl(flag));
     }
   }
+  hidl_capabilities->bwSupport = 0;
   for (const auto flag : {legacy_hal::WIFI_RTT_BW_5,
                           legacy_hal::WIFI_RTT_BW_10,
                           legacy_hal::WIFI_RTT_BW_20,
diff --git a/wifi/1.0/default/hidl_struct_util.h b/wifi/1.0/default/hidl_struct_util.h
index 14bc77d..490dcae 100644
--- a/wifi/1.0/default/hidl_struct_util.h
+++ b/wifi/1.0/default/hidl_struct_util.h
@@ -110,9 +110,6 @@
 bool convertHidlNanTransmitFollowupRequestToLegacy(
     const NanTransmitFollowupRequest& hidl_request,
     legacy_hal::NanTransmitFollowupRequest* legacy_request);
-bool convertHidlNanBeaconSdfPayloadRequestToLegacy(
-    const NanBeaconSdfPayloadRequest& hidl_request,
-    legacy_hal::NanBeaconSdfPayloadRequest* legacy_request);
 bool convertHidlNanDataPathInitiatorRequestToLegacy(
     const NanInitiateDataPathRequest& hidl_request,
     legacy_hal::NanDataPathInitiatorRequest* legacy_request);
@@ -135,9 +132,6 @@
 bool convertLegacyNanDataPathConfirmIndToHidl(
     const legacy_hal::NanDataPathConfirmInd& legacy_ind,
     NanDataPathConfirmInd* hidl_ind);
-bool convertLegacyNanBeaconSdfPayloadIndToHidl(
-    const legacy_hal::NanBeaconSdfPayloadInd& legacy_ind,
-    NanBeaconSdfPayloadInd* hidl_ind);
 
 // RTT controller conversion methods.
 bool convertHidlVectorOfRttConfigToLegacy(
diff --git a/wifi/1.0/default/hidl_sync_util.cpp b/wifi/1.0/default/hidl_sync_util.cpp
new file mode 100644
index 0000000..7d47f2f
--- /dev/null
+++ b/wifi/1.0/default/hidl_sync_util.cpp
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+#include "hidl_sync_util.h"
+
+namespace {
+std::recursive_mutex g_mutex;
+}  // namespace
+
+namespace android {
+namespace hardware {
+namespace wifi {
+namespace V1_0 {
+namespace implementation {
+namespace hidl_sync_util {
+
+std::unique_lock<std::recursive_mutex> acquireGlobalLock() {
+  return std::unique_lock<std::recursive_mutex>{g_mutex};
+}
+
+}  // namespace hidl_sync_util
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace wifi
+}  // namespace hardware
+}  // namespace android
diff --git a/wifi/1.0/default/hidl_sync_util.h b/wifi/1.0/default/hidl_sync_util.h
new file mode 100644
index 0000000..6631e55
--- /dev/null
+++ b/wifi/1.0/default/hidl_sync_util.h
@@ -0,0 +1,37 @@
+/*
+ * 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_SYNC_UTIL_H_
+#define HIDL_SYNC_UTIL_H_
+
+#include <mutex>
+
+// Utility that provides a global lock to synchronize access between
+// the HIDL thread and the legacy HAL's event loop.
+namespace android {
+namespace hardware {
+namespace wifi {
+namespace V1_0 {
+namespace implementation {
+namespace hidl_sync_util {
+std::unique_lock<std::recursive_mutex> acquireGlobalLock();
+}  // namespace hidl_sync_util
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace wifi
+}  // namespace hardware
+}  // namespace android
+#endif  // HIDL_SYNC_UTIL_H_
diff --git a/wifi/1.0/default/service.cpp b/wifi/1.0/default/service.cpp
index 96d5c6f..059304e 100644
--- a/wifi/1.0/default/service.cpp
+++ b/wifi/1.0/default/service.cpp
@@ -27,7 +27,7 @@
 int main(int /*argc*/, char** argv) {
   android::base::InitLogging(argv,
                              android::base::LogdLogger(android::base::SYSTEM));
-  LOG(INFO) << "wifi_hal_legacy is starting up...";
+  LOG(INFO) << "Wifi Hal is starting up...";
 
   configureRpcThreadpool(1, true /* callerWillJoin */);
 
@@ -39,6 +39,6 @@
 
   joinRpcThreadpool();
 
-  LOG(INFO) << "wifi_hal_legacy is terminating...";
+  LOG(INFO) << "Wifi Hal is terminating...";
   return 0;
 }
diff --git a/wifi/1.0/default/wifi.cpp b/wifi/1.0/default/wifi.cpp
index c06abe8..3d482b4 100644
--- a/wifi/1.0/default/wifi.cpp
+++ b/wifi/1.0/default/wifi.cpp
@@ -85,8 +85,9 @@
 
 WifiStatus Wifi::registerEventCallbackInternal(
     const sp<IWifiEventCallback>& event_callback) {
-  // TODO(b/31632518): remove the callback when the client is destroyed
-  event_callbacks_.emplace_back(event_callback);
+  if (!event_cb_handler_.addCallback(event_callback)) {
+    return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
+  }
   return createWifiStatus(WifiStatusCode::SUCCESS);
 }
 
@@ -102,18 +103,13 @@
     // Create the chip instance once the HAL is started.
     chip_ = new WifiChip(kChipId, legacy_hal_, mode_controller_);
     run_state_ = RunState::STARTED;
-    for (const auto& callback : event_callbacks_) {
+    for (const auto& callback : event_cb_handler_.getCallbacks()) {
       if (!callback->onStart().isOk()) {
         LOG(ERROR) << "Failed to invoke onStart callback";
       };
     }
-    for (const auto& callback : event_callbacks_) {
-      if (!callback->onFailure(wifi_status).isOk()) {
-        LOG(ERROR) << "Failed to invoke onFailure callback";
-      }
-    }
   } else {
-    for (const auto& callback : event_callbacks_) {
+    for (const auto& callback : event_cb_handler_.getCallbacks()) {
       if (!callback->onFailure(wifi_status).isOk()) {
         LOG(ERROR) << "Failed to invoke onFailure callback";
       }
@@ -131,13 +127,13 @@
   }
   WifiStatus wifi_status = stopLegacyHalAndDeinitializeModeController();
   if (wifi_status.code == WifiStatusCode::SUCCESS) {
-    for (const auto& callback : event_callbacks_) {
+    for (const auto& callback : event_cb_handler_.getCallbacks()) {
       if (!callback->onStop().isOk()) {
         LOG(ERROR) << "Failed to invoke onStop callback";
       };
     }
   } else {
-    for (const auto& callback : event_callbacks_) {
+    for (const auto& callback : event_cb_handler_.getCallbacks()) {
       if (!callback->onFailure(wifi_status).isOk()) {
         LOG(ERROR) << "Failed to invoke onFailure callback";
       }
diff --git a/wifi/1.0/default/wifi.h b/wifi/1.0/default/wifi.h
index 40d3552..c6fa84c 100644
--- a/wifi/1.0/default/wifi.h
+++ b/wifi/1.0/default/wifi.h
@@ -23,6 +23,7 @@
 #include <android/hardware/wifi/1.0/IWifi.h>
 #include <utils/Looper.h>
 
+#include "hidl_callback_util.h"
 #include "wifi_chip.h"
 #include "wifi_legacy_hal.h"
 #include "wifi_mode_controller.h"
@@ -71,8 +72,8 @@
   std::shared_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
   std::shared_ptr<mode_controller::WifiModeController> mode_controller_;
   RunState run_state_;
-  std::vector<sp<IWifiEventCallback>> event_callbacks_;
   sp<WifiChip> chip_;
+  hidl_callback_util::HidlCallbackHandler<IWifiEventCallback> event_cb_handler_;
 
   DISALLOW_COPY_AND_ASSIGN(Wifi);
 };
diff --git a/wifi/1.0/default/wifi_ap_iface.cpp b/wifi/1.0/default/wifi_ap_iface.cpp
index b8b7a3a..1a8b31d 100644
--- a/wifi/1.0/default/wifi_ap_iface.cpp
+++ b/wifi/1.0/default/wifi_ap_iface.cpp
@@ -55,6 +55,15 @@
                          hidl_status_cb);
 }
 
+Return<void> WifiApIface::setCountryCode(const hidl_array<int8_t, 2>& code,
+                                         setCountryCode_cb hidl_status_cb) {
+  return validateAndCall(this,
+                         WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
+                         &WifiApIface::setCountryCodeInternal,
+                         hidl_status_cb,
+                         code);
+}
+
 std::pair<WifiStatus, std::string> WifiApIface::getNameInternal() {
   return {createWifiStatus(WifiStatusCode::SUCCESS), ifname_};
 }
@@ -63,6 +72,13 @@
   return {createWifiStatus(WifiStatusCode::SUCCESS), IfaceType::AP};
 }
 
+WifiStatus WifiApIface::setCountryCodeInternal(
+    const std::array<int8_t, 2>& code) {
+  legacy_hal::wifi_error legacy_status =
+      legacy_hal_.lock()->setCountryCode(code);
+  return createWifiStatusFromLegacyError(legacy_status);
+}
+
 }  // namespace implementation
 }  // namespace V1_0
 }  // namespace wifi
diff --git a/wifi/1.0/default/wifi_ap_iface.h b/wifi/1.0/default/wifi_ap_iface.h
index ee5dc56..23d6435 100644
--- a/wifi/1.0/default/wifi_ap_iface.h
+++ b/wifi/1.0/default/wifi_ap_iface.h
@@ -42,11 +42,14 @@
   // HIDL methods exposed.
   Return<void> getName(getName_cb hidl_status_cb) override;
   Return<void> getType(getType_cb hidl_status_cb) override;
+  Return<void> setCountryCode(const hidl_array<int8_t, 2>& code,
+                              setCountryCode_cb hidl_status_cb) override;
 
  private:
   // Corresponding worker functions for the HIDL methods.
   std::pair<WifiStatus, std::string> getNameInternal();
   std::pair<WifiStatus, IfaceType> getTypeInternal();
+  WifiStatus setCountryCodeInternal(const std::array<int8_t, 2>& code);
 
   std::string ifname_;
   std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
diff --git a/wifi/1.0/default/wifi_chip.cpp b/wifi/1.0/default/wifi_chip.cpp
index e15178d..6aeedf8 100644
--- a/wifi/1.0/default/wifi_chip.cpp
+++ b/wifi/1.0/default/wifi_chip.cpp
@@ -63,7 +63,7 @@
 void WifiChip::invalidate() {
   invalidateAndRemoveAllIfaces();
   legacy_hal_.reset();
-  event_callbacks_.clear();
+  event_cb_handler_.invalidate();
   is_valid_ = false;
 }
 
@@ -71,8 +71,8 @@
   return is_valid_;
 }
 
-std::vector<sp<IWifiChipEventCallback>> WifiChip::getEventCallbacks() {
-  return event_callbacks_;
+std::set<sp<IWifiChipEventCallback>> WifiChip::getEventCallbacks() {
+  return event_cb_handler_.getCallbacks();
 }
 
 Return<void> WifiChip::getId(getId_cb hidl_status_cb) {
@@ -353,8 +353,9 @@
 
 WifiStatus WifiChip::registerEventCallbackInternal(
     const sp<IWifiChipEventCallback>& event_callback) {
-  // TODO(b/31632518): remove the callback when the client is destroyed
-  event_callbacks_.emplace_back(event_callback);
+  if (!event_cb_handler_.addCallback(event_callback)) {
+    return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
+  }
   return createWifiStatus(WifiStatusCode::SUCCESS);
 }
 
@@ -414,13 +415,17 @@
   }
   WifiStatus status = handleChipConfiguration(mode_id);
   if (status.code != WifiStatusCode::SUCCESS) {
-    for (const auto& callback : event_callbacks_) {
-      callback->onChipReconfigureFailure(status);
+    for (const auto& callback : event_cb_handler_.getCallbacks()) {
+      if (!callback->onChipReconfigureFailure(status).isOk()) {
+        LOG(ERROR) << "Failed to invoke onChipReconfigureFailure callback";
+      }
     }
     return status;
   }
-  for (const auto& callback : event_callbacks_) {
-    callback->onChipReconfigured(mode_id);
+  for (const auto& callback : event_cb_handler_.getCallbacks()) {
+    if (!callback->onChipReconfigured(mode_id).isOk()) {
+      LOG(ERROR) << "Failed to invoke onChipReconfigured callback";
+    }
   }
   current_mode_id_ = mode_id;
   return status;
@@ -499,8 +504,10 @@
   }
   std::string ifname = legacy_hal_.lock()->getApIfaceName();
   ap_iface_ = new WifiApIface(ifname, legacy_hal_);
-  for (const auto& callback : event_callbacks_) {
-    callback->onIfaceAdded(IfaceType::AP, ifname);
+  for (const auto& callback : event_cb_handler_.getCallbacks()) {
+    if (!callback->onIfaceAdded(IfaceType::AP, ifname).isOk()) {
+      LOG(ERROR) << "Failed to invoke onIfaceAdded callback";
+    }
   }
   return {createWifiStatus(WifiStatusCode::SUCCESS), ap_iface_};
 }
@@ -527,8 +534,10 @@
     return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
   }
   invalidateAndClear(ap_iface_);
-  for (const auto& callback : event_callbacks_) {
-    callback->onIfaceRemoved(IfaceType::AP, ifname);
+  for (const auto& callback : event_cb_handler_.getCallbacks()) {
+    if (!callback->onIfaceRemoved(IfaceType::AP, ifname).isOk()) {
+      LOG(ERROR) << "Failed to invoke onIfaceRemoved callback";
+    }
   }
   return createWifiStatus(WifiStatusCode::SUCCESS);
 }
@@ -541,8 +550,10 @@
   }
   std::string ifname = legacy_hal_.lock()->getNanIfaceName();
   nan_iface_ = new WifiNanIface(ifname, legacy_hal_);
-  for (const auto& callback : event_callbacks_) {
-    callback->onIfaceAdded(IfaceType::NAN, ifname);
+  for (const auto& callback : event_cb_handler_.getCallbacks()) {
+    if (!callback->onIfaceAdded(IfaceType::NAN, ifname).isOk()) {
+      LOG(ERROR) << "Failed to invoke onIfaceAdded callback";
+    }
   }
   return {createWifiStatus(WifiStatusCode::SUCCESS), nan_iface_};
 }
@@ -569,8 +580,10 @@
     return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
   }
   invalidateAndClear(nan_iface_);
-  for (const auto& callback : event_callbacks_) {
-    callback->onIfaceRemoved(IfaceType::NAN, ifname);
+  for (const auto& callback : event_cb_handler_.getCallbacks()) {
+    if (!callback->onIfaceRemoved(IfaceType::NAN, ifname).isOk()) {
+      LOG(ERROR) << "Failed to invoke onIfaceAdded callback";
+    }
   }
   return createWifiStatus(WifiStatusCode::SUCCESS);
 }
@@ -583,8 +596,10 @@
   }
   std::string ifname = legacy_hal_.lock()->getP2pIfaceName();
   p2p_iface_ = new WifiP2pIface(ifname, legacy_hal_);
-  for (const auto& callback : event_callbacks_) {
-    callback->onIfaceAdded(IfaceType::P2P, ifname);
+  for (const auto& callback : event_cb_handler_.getCallbacks()) {
+    if (!callback->onIfaceAdded(IfaceType::P2P, ifname).isOk()) {
+      LOG(ERROR) << "Failed to invoke onIfaceAdded callback";
+    }
   }
   return {createWifiStatus(WifiStatusCode::SUCCESS), p2p_iface_};
 }
@@ -611,8 +626,10 @@
     return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
   }
   invalidateAndClear(p2p_iface_);
-  for (const auto& callback : event_callbacks_) {
-    callback->onIfaceRemoved(IfaceType::P2P, ifname);
+  for (const auto& callback : event_cb_handler_.getCallbacks()) {
+    if (!callback->onIfaceRemoved(IfaceType::P2P, ifname).isOk()) {
+      LOG(ERROR) << "Failed to invoke onIfaceRemoved callback";
+    }
   }
   return createWifiStatus(WifiStatusCode::SUCCESS);
 }
@@ -623,8 +640,10 @@
   }
   std::string ifname = legacy_hal_.lock()->getStaIfaceName();
   sta_iface_ = new WifiStaIface(ifname, legacy_hal_);
-  for (const auto& callback : event_callbacks_) {
-    callback->onIfaceAdded(IfaceType::STA, ifname);
+  for (const auto& callback : event_cb_handler_.getCallbacks()) {
+    if (!callback->onIfaceAdded(IfaceType::STA, ifname).isOk()) {
+      LOG(ERROR) << "Failed to invoke onIfaceAdded callback";
+    }
   }
   return {createWifiStatus(WifiStatusCode::SUCCESS), sta_iface_};
 }
@@ -651,8 +670,10 @@
     return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
   }
   invalidateAndClear(sta_iface_);
-  for (const auto& callback : event_callbacks_) {
-    callback->onIfaceRemoved(IfaceType::STA, ifname);
+  for (const auto& callback : event_cb_handler_.getCallbacks()) {
+    if (!callback->onIfaceRemoved(IfaceType::STA, ifname).isOk()) {
+      LOG(ERROR) << "Failed to invoke onIfaceRemoved callback";
+    }
   }
   return createWifiStatus(WifiStatusCode::SUCCESS);
 }
@@ -743,7 +764,9 @@
         return;
       }
       for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
-        callback->onDebugErrorAlert(error_code, debug_data);
+        if (!callback->onDebugErrorAlert(error_code, debug_data).isOk()) {
+          LOG(ERROR) << "Failed to invoke onDebugErrorAlert callback";
+        }
       }
     };
     legacy_status = legacy_hal_.lock()->registerErrorAlertCallbackHandler(
@@ -806,7 +829,10 @@
       return;
     }
     for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
-      callback->onDebugRingBufferDataAvailable(hidl_status, data);
+      if (!callback->onDebugRingBufferDataAvailable(hidl_status, data).isOk()) {
+        LOG(ERROR) << "Failed to invoke onDebugRingBufferDataAvailable"
+                   << " callback";
+      }
     }
   };
   legacy_hal::wifi_error legacy_status =
diff --git a/wifi/1.0/default/wifi_chip.h b/wifi/1.0/default/wifi_chip.h
index 938b180..e1c2344 100644
--- a/wifi/1.0/default/wifi_chip.h
+++ b/wifi/1.0/default/wifi_chip.h
@@ -22,6 +22,7 @@
 #include <android-base/macros.h>
 #include <android/hardware/wifi/1.0/IWifiChip.h>
 
+#include "hidl_callback_util.h"
 #include "wifi_ap_iface.h"
 #include "wifi_legacy_hal.h"
 #include "wifi_mode_controller.h"
@@ -62,7 +63,7 @@
   // valid before processing them.
   void invalidate();
   bool isValid();
-  std::vector<sp<IWifiChipEventCallback>> getEventCallbacks();
+  std::set<sp<IWifiChipEventCallback>> getEventCallbacks();
 
   // HIDL methods exposed.
   Return<void> getId(getId_cb hidl_status_cb) override;
@@ -179,7 +180,6 @@
   ChipId chip_id_;
   std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
   std::weak_ptr<mode_controller::WifiModeController> mode_controller_;
-  std::vector<sp<IWifiChipEventCallback>> event_callbacks_;
   sp<WifiApIface> ap_iface_;
   sp<WifiNanIface> nan_iface_;
   sp<WifiP2pIface> p2p_iface_;
@@ -191,6 +191,8 @@
   // registration mechanism. Use this to check if we have already
   // registered a callback.
   bool debug_ring_buffer_cb_registered_;
+  hidl_callback_util::HidlCallbackHandler<IWifiChipEventCallback>
+      event_cb_handler_;
 
   DISALLOW_COPY_AND_ASSIGN(WifiChip);
 };
diff --git a/wifi/1.0/default/wifi_legacy_hal.cpp b/wifi/1.0/default/wifi_legacy_hal.cpp
index 3bfd2bb..7d58254 100644
--- a/wifi/1.0/default/wifi_legacy_hal.cpp
+++ b/wifi/1.0/default/wifi_legacy_hal.cpp
@@ -19,15 +19,11 @@
 #include <android-base/logging.h>
 #include <cutils/properties.h>
 
+#include "hidl_sync_util.h"
 #include "wifi_legacy_hal.h"
 #include "wifi_legacy_hal_stubs.h"
 
-namespace android {
-namespace hardware {
-namespace wifi {
-namespace V1_0 {
-namespace implementation {
-namespace legacy_hal {
+namespace {
 // Constants ported over from the legacy HAL calling code
 // (com_android_server_wifi_WifiNative.cpp). This will all be thrown
 // away when this shim layer is replaced by the real vendor
@@ -39,12 +35,28 @@
 static constexpr uint32_t kMaxWakeReasonStatsArraySize = 32;
 static constexpr uint32_t kMaxRingBuffers = 10;
 
+// Helper function to create a non-const char* for legacy Hal API's.
+std::vector<char> makeCharVec(const std::string& str) {
+  std::vector<char> vec(str.size() + 1);
+  vec.assign(str.begin(), str.end());
+  vec.push_back('\0');
+  return vec;
+}
+}  // namespace
+
+namespace android {
+namespace hardware {
+namespace wifi {
+namespace V1_0 {
+namespace implementation {
+namespace legacy_hal {
 // Legacy HAL functions accept "C" style function pointers, so use global
 // functions to pass to the legacy HAL function and store the corresponding
 // std::function methods to be invoked.
 // Callback to be invoked once |stop| is complete.
 std::function<void(wifi_handle handle)> on_stop_complete_internal_callback;
-void onStopComplete(wifi_handle handle) {
+void onAsyncStopComplete(wifi_handle handle) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_stop_complete_internal_callback) {
     on_stop_complete_internal_callback(handle);
   }
@@ -52,7 +64,7 @@
 
 // Callback to be invoked for driver dump.
 std::function<void(char*, int)> on_driver_memory_dump_internal_callback;
-void onDriverMemoryDump(char* buffer, int buffer_size) {
+void onSyncDriverMemoryDump(char* buffer, int buffer_size) {
   if (on_driver_memory_dump_internal_callback) {
     on_driver_memory_dump_internal_callback(buffer, buffer_size);
   }
@@ -60,7 +72,7 @@
 
 // Callback to be invoked for firmware dump.
 std::function<void(char*, int)> on_firmware_memory_dump_internal_callback;
-void onFirmwareMemoryDump(char* buffer, int buffer_size) {
+void onSyncFirmwareMemoryDump(char* buffer, int buffer_size) {
   if (on_firmware_memory_dump_internal_callback) {
     on_firmware_memory_dump_internal_callback(buffer, buffer_size);
   }
@@ -69,7 +81,8 @@
 // Callback to be invoked for Gscan events.
 std::function<void(wifi_request_id, wifi_scan_event)>
     on_gscan_event_internal_callback;
-void onGscanEvent(wifi_request_id id, wifi_scan_event event) {
+void onAsyncGscanEvent(wifi_request_id id, wifi_scan_event event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_gscan_event_internal_callback) {
     on_gscan_event_internal_callback(id, event);
   }
@@ -78,9 +91,10 @@
 // Callback to be invoked for Gscan full results.
 std::function<void(wifi_request_id, wifi_scan_result*, uint32_t)>
     on_gscan_full_result_internal_callback;
-void onGscanFullResult(wifi_request_id id,
-                       wifi_scan_result* result,
-                       uint32_t buckets_scanned) {
+void onAsyncGscanFullResult(wifi_request_id id,
+                            wifi_scan_result* result,
+                            uint32_t buckets_scanned) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_gscan_full_result_internal_callback) {
     on_gscan_full_result_internal_callback(id, result, buckets_scanned);
   }
@@ -89,10 +103,10 @@
 // Callback to be invoked for link layer stats results.
 std::function<void((wifi_request_id, wifi_iface_stat*, int, wifi_radio_stat*))>
     on_link_layer_stats_result_internal_callback;
-void onLinkLayerStatsResult(wifi_request_id id,
-                            wifi_iface_stat* iface_stat,
-                            int num_radios,
-                            wifi_radio_stat* radio_stat) {
+void onSyncLinkLayerStatsResult(wifi_request_id id,
+                                wifi_iface_stat* iface_stat,
+                                int num_radios,
+                                wifi_radio_stat* radio_stat) {
   if (on_link_layer_stats_result_internal_callback) {
     on_link_layer_stats_result_internal_callback(
         id, iface_stat, num_radios, radio_stat);
@@ -102,7 +116,10 @@
 // Callback to be invoked for rssi threshold breach.
 std::function<void((wifi_request_id, uint8_t*, int8_t))>
     on_rssi_threshold_breached_internal_callback;
-void onRssiThresholdBreached(wifi_request_id id, uint8_t* bssid, int8_t rssi) {
+void onAsyncRssiThresholdBreached(wifi_request_id id,
+                                  uint8_t* bssid,
+                                  int8_t rssi) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_rssi_threshold_breached_internal_callback) {
     on_rssi_threshold_breached_internal_callback(id, bssid, rssi);
   }
@@ -111,10 +128,11 @@
 // Callback to be invoked for ring buffer data indication.
 std::function<void(char*, char*, int, wifi_ring_buffer_status*)>
     on_ring_buffer_data_internal_callback;
-void onRingBufferData(char* ring_name,
-                      char* buffer,
-                      int buffer_size,
-                      wifi_ring_buffer_status* status) {
+void onAsyncRingBufferData(char* ring_name,
+                           char* buffer,
+                           int buffer_size,
+                           wifi_ring_buffer_status* status) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_ring_buffer_data_internal_callback) {
     on_ring_buffer_data_internal_callback(
         ring_name, buffer, buffer_size, status);
@@ -124,10 +142,11 @@
 // Callback to be invoked for error alert indication.
 std::function<void(wifi_request_id, char*, int, int)>
     on_error_alert_internal_callback;
-void onErrorAlert(wifi_request_id id,
-                  char* buffer,
-                  int buffer_size,
-                  int err_code) {
+void onAsyncErrorAlert(wifi_request_id id,
+                       char* buffer,
+                       int buffer_size,
+                       int err_code) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_error_alert_internal_callback) {
     on_error_alert_internal_callback(id, buffer, buffer_size, err_code);
   }
@@ -137,9 +156,10 @@
 std::function<void(
     wifi_request_id, unsigned num_results, wifi_rtt_result* rtt_results[])>
     on_rtt_results_internal_callback;
-void onRttResults(wifi_request_id id,
-                  unsigned num_results,
-                  wifi_rtt_result* rtt_results[]) {
+void onAsyncRttResults(wifi_request_id id,
+                       unsigned num_results,
+                       wifi_rtt_result* rtt_results[]) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_rtt_results_internal_callback) {
     on_rtt_results_internal_callback(id, num_results, rtt_results);
   }
@@ -151,7 +171,8 @@
 // So, handle all of them here directly to avoid adding an unnecessary layer.
 std::function<void(transaction_id, const NanResponseMsg&)>
     on_nan_notify_response_user_callback;
-void onNanNotifyResponse(transaction_id id, NanResponseMsg* msg) {
+void onAysncNanNotifyResponse(transaction_id id, NanResponseMsg* msg) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_notify_response_user_callback && msg) {
     on_nan_notify_response_user_callback(id, *msg);
   }
@@ -159,14 +180,16 @@
 
 std::function<void(const NanPublishTerminatedInd&)>
     on_nan_event_publish_terminated_user_callback;
-void onNanEventPublishTerminated(NanPublishTerminatedInd* event) {
+void onAysncNanEventPublishTerminated(NanPublishTerminatedInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_publish_terminated_user_callback && event) {
     on_nan_event_publish_terminated_user_callback(*event);
   }
 }
 
 std::function<void(const NanMatchInd&)> on_nan_event_match_user_callback;
-void onNanEventMatch(NanMatchInd* event) {
+void onAysncNanEventMatch(NanMatchInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_match_user_callback && event) {
     on_nan_event_match_user_callback(*event);
   }
@@ -174,7 +197,8 @@
 
 std::function<void(const NanMatchExpiredInd&)>
     on_nan_event_match_expired_user_callback;
-void onNanEventMatchExpired(NanMatchExpiredInd* event) {
+void onAysncNanEventMatchExpired(NanMatchExpiredInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_match_expired_user_callback && event) {
     on_nan_event_match_expired_user_callback(*event);
   }
@@ -182,14 +206,16 @@
 
 std::function<void(const NanSubscribeTerminatedInd&)>
     on_nan_event_subscribe_terminated_user_callback;
-void onNanEventSubscribeTerminated(NanSubscribeTerminatedInd* event) {
+void onAysncNanEventSubscribeTerminated(NanSubscribeTerminatedInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_subscribe_terminated_user_callback && event) {
     on_nan_event_subscribe_terminated_user_callback(*event);
   }
 }
 
 std::function<void(const NanFollowupInd&)> on_nan_event_followup_user_callback;
-void onNanEventFollowup(NanFollowupInd* event) {
+void onAysncNanEventFollowup(NanFollowupInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_followup_user_callback && event) {
     on_nan_event_followup_user_callback(*event);
   }
@@ -197,21 +223,24 @@
 
 std::function<void(const NanDiscEngEventInd&)>
     on_nan_event_disc_eng_event_user_callback;
-void onNanEventDiscEngEvent(NanDiscEngEventInd* event) {
+void onAysncNanEventDiscEngEvent(NanDiscEngEventInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_disc_eng_event_user_callback && event) {
     on_nan_event_disc_eng_event_user_callback(*event);
   }
 }
 
 std::function<void(const NanDisabledInd&)> on_nan_event_disabled_user_callback;
-void onNanEventDisabled(NanDisabledInd* event) {
+void onAysncNanEventDisabled(NanDisabledInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_disabled_user_callback && event) {
     on_nan_event_disabled_user_callback(*event);
   }
 }
 
 std::function<void(const NanTCAInd&)> on_nan_event_tca_user_callback;
-void onNanEventTca(NanTCAInd* event) {
+void onAysncNanEventTca(NanTCAInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_tca_user_callback && event) {
     on_nan_event_tca_user_callback(*event);
   }
@@ -219,7 +248,8 @@
 
 std::function<void(const NanBeaconSdfPayloadInd&)>
     on_nan_event_beacon_sdf_payload_user_callback;
-void onNanEventBeaconSdfPayload(NanBeaconSdfPayloadInd* event) {
+void onAysncNanEventBeaconSdfPayload(NanBeaconSdfPayloadInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_beacon_sdf_payload_user_callback && event) {
     on_nan_event_beacon_sdf_payload_user_callback(*event);
   }
@@ -227,14 +257,16 @@
 
 std::function<void(const NanDataPathRequestInd&)>
     on_nan_event_data_path_request_user_callback;
-void onNanEventDataPathRequest(NanDataPathRequestInd* event) {
+void onAysncNanEventDataPathRequest(NanDataPathRequestInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_data_path_request_user_callback && event) {
     on_nan_event_data_path_request_user_callback(*event);
   }
 }
 std::function<void(const NanDataPathConfirmInd&)>
     on_nan_event_data_path_confirm_user_callback;
-void onNanEventDataPathConfirm(NanDataPathConfirmInd* event) {
+void onAysncNanEventDataPathConfirm(NanDataPathConfirmInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_data_path_confirm_user_callback && event) {
     on_nan_event_data_path_confirm_user_callback(*event);
   }
@@ -242,7 +274,8 @@
 
 std::function<void(const NanDataPathEndInd&)>
     on_nan_event_data_path_end_user_callback;
-void onNanEventDataPathEnd(NanDataPathEndInd* event) {
+void onAysncNanEventDataPathEnd(NanDataPathEndInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_data_path_end_user_callback && event) {
     on_nan_event_data_path_end_user_callback(*event);
   }
@@ -250,11 +283,30 @@
 
 std::function<void(const NanTransmitFollowupInd&)>
     on_nan_event_transmit_follow_up_user_callback;
-void onNanEventTransmitFollowUp(NanTransmitFollowupInd* event) {
+void onAysncNanEventTransmitFollowUp(NanTransmitFollowupInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
   if (on_nan_event_transmit_follow_up_user_callback && event) {
     on_nan_event_transmit_follow_up_user_callback(*event);
   }
 }
+
+std::function<void(const NanRangeRequestInd&)>
+    on_nan_event_range_request_user_callback;
+void onAysncNanEventRangeRequest(NanRangeRequestInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
+  if (on_nan_event_range_request_user_callback && event) {
+    on_nan_event_range_request_user_callback(*event);
+  }
+}
+
+std::function<void(const NanRangeReportInd&)>
+    on_nan_event_range_report_user_callback;
+void onAysncNanEventRangeReport(NanRangeReportInd* event) {
+  const auto lock = hidl_sync_util::acquireGlobalLock();
+  if (on_nan_event_range_report_user_callback && event) {
+    on_nan_event_range_report_user_callback(*event);
+  }
+}
 // End of the free-standing "C" style callbacks.
 
 WifiLegacyHal::WifiLegacyHal()
@@ -316,7 +368,8 @@
     return WIFI_SUCCESS;
   }
   LOG(DEBUG) << "Stopping legacy HAL";
-  on_stop_complete_internal_callback = [&](wifi_handle handle) {
+  on_stop_complete_internal_callback = [on_stop_complete_user_callback,
+                                        this](wifi_handle handle) {
     CHECK_EQ(global_handle_, handle) << "Handle mismatch";
     // Invalidate all the internal pointers now that the HAL is
     // stopped.
@@ -325,7 +378,7 @@
     on_stop_complete_user_callback();
   };
   awaiting_event_loop_termination_ = true;
-  global_func_table_.wifi_cleanup(global_handle_, onStopComplete);
+  global_func_table_.wifi_cleanup(global_handle_, onAsyncStopComplete);
   LOG(DEBUG) << "Legacy HAL stop complete";
   is_started_ = false;
   return WIFI_SUCCESS;
@@ -381,7 +434,7 @@
                        reinterpret_cast<uint8_t*>(buffer) + buffer_size);
   };
   wifi_error status = global_func_table_.wifi_get_driver_memory_dump(
-      wlan_interface_handle_, {onDriverMemoryDump});
+      wlan_interface_handle_, {onSyncDriverMemoryDump});
   on_driver_memory_dump_internal_callback = nullptr;
   return {status, std::move(driver_dump)};
 }
@@ -396,7 +449,7 @@
                          reinterpret_cast<uint8_t*>(buffer) + buffer_size);
   };
   wifi_error status = global_func_table_.wifi_get_firmware_memory_dump(
-      wlan_interface_handle_, {onFirmwareMemoryDump});
+      wlan_interface_handle_, {onSyncFirmwareMemoryDump});
   on_firmware_memory_dump_internal_callback = nullptr;
   return {status, std::move(firmware_dump)};
 }
@@ -478,7 +531,8 @@
     }
   };
 
-  wifi_scan_result_handler handler = {onGscanFullResult, onGscanEvent};
+  wifi_scan_result_handler handler = {onAsyncGscanFullResult,
+                                      onAsyncGscanEvent};
   wifi_error status = global_func_table_.wifi_start_gscan(
       id, wlan_interface_handle_, params, handler);
   if (status != WIFI_SUCCESS) {
@@ -574,7 +628,7 @@
   };
 
   wifi_error status = global_func_table_.wifi_get_link_stats(
-      0, wlan_interface_handle_, {onLinkLayerStatsResult});
+      0, wlan_interface_handle_, {onSyncLinkLayerStatsResult});
   on_link_layer_stats_result_internal_callback = nullptr;
   return {status, link_stats};
 }
@@ -599,12 +653,12 @@
         std::copy(bssid_ptr, bssid_ptr + 6, std::begin(bssid_arr));
         on_threshold_breached_user_callback(id, bssid_arr, rssi);
       };
-  wifi_error status =
-      global_func_table_.wifi_start_rssi_monitoring(id,
-                                                    wlan_interface_handle_,
-                                                    max_rssi,
-                                                    min_rssi,
-                                                    {onRssiThresholdBreached});
+  wifi_error status = global_func_table_.wifi_start_rssi_monitoring(
+      id,
+      wlan_interface_handle_,
+      max_rssi,
+      min_rssi,
+      {onAsyncRssiThresholdBreached});
   if (status != WIFI_SUCCESS) {
     on_rssi_threshold_breached_internal_callback = nullptr;
   }
@@ -675,6 +729,12 @@
       cmd_id, wlan_interface_handle_);
 }
 
+wifi_error WifiLegacyHal::setScanningMacOui(const std::array<uint8_t, 3>& oui) {
+  std::vector<uint8_t> oui_internal(oui.data(), oui.data() + oui.size());
+  return global_func_table_.wifi_set_scanning_mac_oui(wlan_interface_handle_,
+                                                      oui_internal.data());
+}
+
 std::pair<wifi_error, uint32_t> WifiLegacyHal::getLoggerSupportedFeatureSet() {
   uint32_t supported_features;
   wifi_error status = global_func_table_.wifi_get_logger_supported_feature_set(
@@ -773,7 +833,7 @@
     }
   };
   wifi_error status = global_func_table_.wifi_set_log_handler(
-      0, wlan_interface_handle_, {onRingBufferData});
+      0, wlan_interface_handle_, {onAsyncRingBufferData});
   if (status != WIFI_SUCCESS) {
     on_ring_buffer_data_internal_callback = nullptr;
   }
@@ -804,19 +864,17 @@
                                                  uint32_t verbose_level,
                                                  uint32_t max_interval_sec,
                                                  uint32_t min_data_size) {
-  std::vector<char> ring_name_internal(ring_name.begin(), ring_name.end());
   return global_func_table_.wifi_start_logging(wlan_interface_handle_,
                                                verbose_level,
                                                0,
                                                max_interval_sec,
                                                min_data_size,
-                                               ring_name_internal.data());
+                                               makeCharVec(ring_name).data());
 }
 
 wifi_error WifiLegacyHal::getRingBufferData(const std::string& ring_name) {
-  std::vector<char> ring_name_internal(ring_name.begin(), ring_name.end());
   return global_func_table_.wifi_get_ring_data(wlan_interface_handle_,
-                                               ring_name_internal.data());
+                                               makeCharVec(ring_name).data());
 }
 
 wifi_error WifiLegacyHal::registerErrorAlertCallbackHandler(
@@ -836,7 +894,7 @@
     }
   };
   wifi_error status = global_func_table_.wifi_set_alert_handler(
-      0, wlan_interface_handle_, {onErrorAlert});
+      0, wlan_interface_handle_, {onAsyncErrorAlert});
   if (status != WIFI_SUCCESS) {
     on_error_alert_internal_callback = nullptr;
   }
@@ -882,7 +940,7 @@
                                                 wlan_interface_handle_,
                                                 rtt_configs.size(),
                                                 rtt_configs_internal.data(),
-                                                {onRttResults});
+                                                {onAsyncRttResults});
   if (status != WIFI_SUCCESS) {
     on_rtt_results_internal_callback = nullptr;
   }
@@ -983,23 +1041,29 @@
       user_callbacks.on_event_data_path_end;
   on_nan_event_transmit_follow_up_user_callback =
       user_callbacks.on_event_transmit_follow_up;
+  on_nan_event_range_request_user_callback =
+      user_callbacks.on_event_range_request;
+  on_nan_event_range_report_user_callback =
+      user_callbacks.on_event_range_report;
 
   return global_func_table_.wifi_nan_register_handler(
       wlan_interface_handle_,
-      {onNanNotifyResponse,
-       onNanEventPublishTerminated,
-       onNanEventMatch,
-       onNanEventMatchExpired,
-       onNanEventSubscribeTerminated,
-       onNanEventFollowup,
-       onNanEventDiscEngEvent,
-       onNanEventDisabled,
-       onNanEventTca,
-       onNanEventBeaconSdfPayload,
-       onNanEventDataPathRequest,
-       onNanEventDataPathConfirm,
-       onNanEventDataPathEnd,
-       onNanEventTransmitFollowUp});
+      {onAysncNanNotifyResponse,
+       onAysncNanEventPublishTerminated,
+       onAysncNanEventMatch,
+       onAysncNanEventMatchExpired,
+       onAysncNanEventSubscribeTerminated,
+       onAysncNanEventFollowup,
+       onAysncNanEventDiscEngEvent,
+       onAysncNanEventDisabled,
+       onAysncNanEventTca,
+       onAysncNanEventBeaconSdfPayload,
+       onAysncNanEventDataPathRequest,
+       onAysncNanEventDataPathConfirm,
+       onAysncNanEventDataPathEnd,
+       onAysncNanEventTransmitFollowUp,
+       onAysncNanEventRangeRequest,
+       onAysncNanEventRangeReport});
 }
 
 wifi_error WifiLegacyHal::nanEnableRequest(transaction_id id,
@@ -1091,16 +1155,14 @@
 
 wifi_error WifiLegacyHal::nanDataInterfaceCreate(
     transaction_id id, const std::string& iface_name) {
-  std::vector<char> iface_name_internal(iface_name.begin(), iface_name.end());
   return global_func_table_.wifi_nan_data_interface_create(
-      id, wlan_interface_handle_, iface_name_internal.data());
+      id, wlan_interface_handle_, makeCharVec(iface_name).data());
 }
 
 wifi_error WifiLegacyHal::nanDataInterfaceDelete(
     transaction_id id, const std::string& iface_name) {
-  std::vector<char> iface_name_internal(iface_name.begin(), iface_name.end());
   return global_func_table_.wifi_nan_data_interface_delete(
-      id, wlan_interface_handle_, iface_name_internal.data());
+      id, wlan_interface_handle_, makeCharVec(iface_name).data());
 }
 
 wifi_error WifiLegacyHal::nanDataRequestInitiator(
@@ -1124,6 +1186,12 @@
       id, wlan_interface_handle_, &msg_internal);
 }
 
+wifi_error WifiLegacyHal::setCountryCode(std::array<int8_t, 2> code) {
+  std::string code_str(code.data(), code.data() + code.size());
+  return global_func_table_.wifi_set_country_code(wlan_interface_handle_,
+                                                  code_str.c_str());
+}
+
 wifi_error WifiLegacyHal::retrieveWlanInterfaceHandle() {
   const std::string& ifname_to_find = getStaIfaceName();
   wifi_interface_handle* iface_handles = nullptr;
@@ -1217,6 +1285,8 @@
   on_nan_event_data_path_confirm_user_callback = nullptr;
   on_nan_event_data_path_end_user_callback = nullptr;
   on_nan_event_transmit_follow_up_user_callback = nullptr;
+  on_nan_event_range_request_user_callback = nullptr;
+  on_nan_event_range_report_user_callback = nullptr;
 }
 
 }  // namespace legacy_hal
diff --git a/wifi/1.0/default/wifi_legacy_hal.h b/wifi/1.0/default/wifi_legacy_hal.h
index a3ac075..ed020b0 100644
--- a/wifi/1.0/default/wifi_legacy_hal.h
+++ b/wifi/1.0/default/wifi_legacy_hal.h
@@ -89,6 +89,10 @@
   std::function<void(const NanDataPathEndInd&)> on_event_data_path_end;
   std::function<void(const NanTransmitFollowupInd&)>
       on_event_transmit_follow_up;
+  std::function<void(const NanRangeRequestInd&)>
+      on_event_range_request;
+  std::function<void(const NanRangeReportInd&)>
+      on_event_range_report;
 };
 
 // Full scan results contain IE info and are hence passed by reference, to
@@ -124,6 +128,9 @@
 /**
  * Class that encapsulates all legacy HAL interactions.
  * This class manages the lifetime of the event loop thread used by legacy HAL.
+ *
+ * Note: aThere will only be a single instance of this class created in the Wifi
+ * object and will be valid for the lifetime of the process.
  */
 class WifiLegacyHal {
  public:
@@ -192,6 +199,7 @@
       const std::array<uint8_t, 6>& dst_address,
       uint32_t period_in_ms);
   wifi_error stopSendingOffloadedPacket(uint32_t cmd_id);
+  wifi_error setScanningMacOui(const std::array<uint8_t, 3>& oui);
   // Logger/debug functions.
   std::pair<wifi_error, uint32_t> getLoggerSupportedFeatureSet();
   wifi_error startPktFateMonitoring();
@@ -256,6 +264,8 @@
   wifi_error nanDataIndicationResponse(
       transaction_id id, const NanDataPathIndicationResponse& msg);
   wifi_error nanDataEnd(transaction_id id, const NanDataPathEndRequest& msg);
+  // AP functions.
+  wifi_error setCountryCode(std::array<int8_t, 2> code);
 
  private:
   // Retrieve the interface handle to be used for the "wlan" interface.
diff --git a/wifi/1.0/default/wifi_nan_iface.cpp b/wifi/1.0/default/wifi_nan_iface.cpp
index 5ac6fa8..68be2a7 100644
--- a/wifi/1.0/default/wifi_nan_iface.cpp
+++ b/wifi/1.0/default/wifi_nan_iface.cpp
@@ -55,69 +55,70 @@
 
     switch (msg.response_type) {
     case legacy_hal::NAN_RESPONSE_ENABLED: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyEnableResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_DISABLED: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyDisableResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_PUBLISH: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyStartPublishResponse(id, wifiNanStatus,
                         msg.body.publish_response.publish_id).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_PUBLISH_CANCEL: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyStopPublishResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_TRANSMIT_FOLLOWUP: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyTransmitFollowupResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_SUBSCRIBE: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyStartSubscribeResponse(id, wifiNanStatus,
                         msg.body.subscribe_response.subscribe_id).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_SUBSCRIBE_CANCEL: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyStopSubscribeResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_CONFIG: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyConfigResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
-     }
-    case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
-          if (!callback->notifyBeaconSdfPayloadResponse(id, wifiNanStatus).isOk()) {
-            LOG(ERROR) << "Failed to invoke the callback";
-          }
-        }
+        break;
      }
     case legacy_hal::NAN_GET_CAPABILITIES: {
         NanCapabilities hidl_struct;
@@ -126,49 +127,56 @@
             LOG(ERROR) << "Failed to convert nan capabilities response";
             return;
         }
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyCapabilitiesResponse(id, wifiNanStatus,
                                                     hidl_struct).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_DP_INTERFACE_CREATE: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyCreateDataInterfaceResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_DP_INTERFACE_DELETE: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyDeleteDataInterfaceResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_DP_INITIATOR_RESPONSE: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
-          if (!callback->notifyInitiateDataPathResponse(id, wifiNanStatus).isOk()) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
+          if (!callback->notifyInitiateDataPathResponse(id, wifiNanStatus,
+                msg.body.data_request_response.ndp_instance_id).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_DP_RESPONDER_RESPONSE: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
-          if (!callback->notifyRespondToDataPathIndicationResponse(id, wifiNanStatus,
-                    msg.body.data_request_response.ndp_instance_id).isOk()) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
+          if (!callback->notifyRespondToDataPathIndicationResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
     }
     case legacy_hal::NAN_DP_END: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
           if (!callback->notifyTerminateDataPathResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
+    case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD:
+        /* fall through */
     case legacy_hal::NAN_RESPONSE_TCA:
         /* fall through */
     case legacy_hal::NAN_RESPONSE_STATS:
@@ -193,7 +201,7 @@
       hidl_struct.eventType = (NanClusterEventType) msg.event_type;
       hidl_struct.addr = msg.data.mac_addr.addr;
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventClusterEvent(hidl_struct).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
         }
@@ -211,7 +219,7 @@
       status.status = hidl_struct_util::convertLegacyNanStatusTypeToHidl(msg.reason);
       status.description = msg.nan_reason;
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventDisabled(status).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
         }
@@ -229,7 +237,7 @@
       status.status = hidl_struct_util::convertLegacyNanStatusTypeToHidl(msg.reason);
       status.description = msg.nan_reason;
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventPublishTerminated(msg.publish_id, status).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
         }
@@ -247,7 +255,7 @@
       status.status = hidl_struct_util::convertLegacyNanStatusTypeToHidl(msg.reason);
       status.description = msg.nan_reason;
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventSubscribeTerminated(msg.subscribe_id, status).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
         }
@@ -268,7 +276,7 @@
           return;
       }
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventMatch(hidl_struct).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
         }
@@ -282,7 +290,7 @@
         LOG(ERROR) << "Callback invoked on an invalid object";
         return;
       }
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventMatchExpired(msg.publish_subscribe_id,
                 msg.requestor_instance_id).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
@@ -304,7 +312,7 @@
           return;
       }
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventFollowupReceived(hidl_struct).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
         }
@@ -322,7 +330,7 @@
       status.status = hidl_struct_util::convertLegacyNanStatusTypeToHidl(msg.reason);
       status.description = msg.nan_reason;
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventTransmitFollowup(msg.id, status).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
         }
@@ -343,7 +351,7 @@
           return;
       }
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventDataPathRequest(hidl_struct).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
         }
@@ -364,7 +372,7 @@
           return;
       }
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         if (!callback->eventDataPathConfirm(hidl_struct).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
         }
@@ -378,7 +386,7 @@
         LOG(ERROR) << "Callback invoked on an invalid object";
         return;
       }
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
+      for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
         for (int i = 0; i < msg.num_ndp_instances; ++i) {
             if (!callback->eventDataPathTerminated(msg.ndp_instance_id[i]).isOk()) {
                 LOG(ERROR) << "Failed to invoke the callback";
@@ -388,24 +396,18 @@
   };
 
   callback_handlers.on_event_beacon_sdf_payload = [weak_ptr_this](
-        const legacy_hal::NanBeaconSdfPayloadInd& msg) {
-      const auto shared_ptr_this = weak_ptr_this.promote();
-      if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
-        LOG(ERROR) << "Callback invoked on an invalid object";
-        return;
-      }
-      NanBeaconSdfPayloadInd hidl_struct;
-      if (!hidl_struct_util::convertLegacyNanBeaconSdfPayloadIndToHidl(
-            msg, &hidl_struct)) {
-          LOG(ERROR) << "Failed to convert nan capabilities response";
-          return;
-      }
+        const legacy_hal::NanBeaconSdfPayloadInd& /* msg */) {
+      LOG(ERROR) << "on_event_beacon_sdf_payload - should not be called";
+  };
 
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
-        if (!callback->eventBeaconSdfPayload(hidl_struct).isOk()) {
-            LOG(ERROR) << "Failed to invoke the callback";
-        }
-      }
+  callback_handlers.on_event_range_request = [weak_ptr_this](
+        const legacy_hal::NanRangeRequestInd& /* msg */) {
+      LOG(ERROR) << "on_event_range_request - should not be called";
+  };
+
+  callback_handlers.on_event_range_report = [weak_ptr_this](
+        const legacy_hal::NanRangeReportInd& /* msg */) {
+      LOG(ERROR) << "on_event_range_report - should not be called";
   };
 
   legacy_hal::wifi_error legacy_status =
@@ -418,7 +420,7 @@
 
 void WifiNanIface::invalidate() {
   legacy_hal_.reset();
-  event_callbacks_.clear();
+  event_cb_handler_.invalidate();
   is_valid_ = false;
 }
 
@@ -426,6 +428,10 @@
   return is_valid_;
 }
 
+std::set<sp<IWifiNanIfaceEventCallback>> WifiNanIface::getEventCallbacks() {
+  return event_cb_handler_.getCallbacks();
+}
+
 Return<void> WifiNanIface::getName(getName_cb hidl_status_cb) {
   return validateAndCall(this,
                          WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
@@ -503,7 +509,7 @@
 
 Return<void> WifiNanIface::stopPublishRequest(
     uint16_t cmd_id,
-    uint16_t sessionId,
+    uint8_t sessionId,
     stopPublishRequest_cb hidl_status_cb) {
   return validateAndCall(this,
                          WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
@@ -527,7 +533,7 @@
 
 Return<void> WifiNanIface::stopSubscribeRequest(
     uint16_t cmd_id,
-    uint16_t sessionId,
+    uint8_t sessionId,
     stopSubscribeRequest_cb hidl_status_cb) {
   return validateAndCall(this,
                          WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
@@ -607,18 +613,6 @@
                          ndpInstanceId);
 }
 
-Return<void> WifiNanIface::beaconSdfPayloadRequest(
-    uint16_t cmd_id,
-    const NanBeaconSdfPayloadRequest& msg,
-    beaconSdfPayloadRequest_cb hidl_status_cb) {
-  return validateAndCall(this,
-                         WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
-                         &WifiNanIface::beaconSdfPayloadRequestInternal,
-                         hidl_status_cb,
-                         cmd_id,
-                         msg);
-}
-
 std::pair<WifiStatus, std::string> WifiNanIface::getNameInternal() {
   return {createWifiStatus(WifiStatusCode::SUCCESS), ifname_};
 }
@@ -629,11 +623,9 @@
 
 WifiStatus WifiNanIface::registerEventCallbackInternal(
     const sp<IWifiNanIfaceEventCallback>& callback) {
-  // TODO(b/31632518): remove the callback when the client is destroyed and/or
-  // make sure that the same callback is only registered once (i.e. detect duplicates)
-  // OR: consider having a single listener - not clear why multiple listeners (managers) are
-  // necessary, nor how they would coordinate (at least command IDs).
-  event_callbacks_.emplace_back(callback);
+  if (!event_cb_handler_.addCallback(callback)) {
+    return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
+  }
   return createWifiStatus(WifiStatusCode::SUCCESS);
 }
 
@@ -685,7 +677,7 @@
 }
 
 WifiStatus WifiNanIface::stopPublishRequestInternal(
-    uint16_t cmd_id, uint16_t sessionId) {
+    uint16_t cmd_id, uint8_t sessionId) {
   legacy_hal::NanPublishCancelRequest legacy_msg;
   legacy_msg.publish_id = sessionId;
   legacy_hal::wifi_error legacy_status =
@@ -706,7 +698,7 @@
 }
 
 WifiStatus WifiNanIface::stopSubscribeRequestInternal(
-    uint16_t cmd_id, uint16_t sessionId) {
+    uint16_t cmd_id, uint8_t sessionId) {
   legacy_hal::NanSubscribeCancelRequest legacy_msg;
   legacy_msg.subscribe_id = sessionId;
   legacy_hal::wifi_error legacy_status =
@@ -769,16 +761,6 @@
   free(legacy_msg);
   return createWifiStatusFromLegacyError(legacy_status);
 }
-WifiStatus WifiNanIface::beaconSdfPayloadRequestInternal(
-    uint16_t cmd_id, const NanBeaconSdfPayloadRequest& msg) {
-  legacy_hal::NanBeaconSdfPayloadRequest legacy_msg;
-  if (!hidl_struct_util::convertHidlNanBeaconSdfPayloadRequestToLegacy(msg, &legacy_msg)) {
-    return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
-  }
-  legacy_hal::wifi_error legacy_status =
-      legacy_hal_.lock()->nanBeaconSdfPayloadRequest(cmd_id, legacy_msg);
-  return createWifiStatusFromLegacyError(legacy_status);
-}
 
 }  // namespace implementation
 }  // namespace V1_0
diff --git a/wifi/1.0/default/wifi_nan_iface.h b/wifi/1.0/default/wifi_nan_iface.h
index 4fae3df..e1edd29 100644
--- a/wifi/1.0/default/wifi_nan_iface.h
+++ b/wifi/1.0/default/wifi_nan_iface.h
@@ -21,6 +21,7 @@
 #include <android/hardware/wifi/1.0/IWifiNanIface.h>
 #include <android/hardware/wifi/1.0/IWifiNanIfaceEventCallback.h>
 
+#include "hidl_callback_util.h"
 #include "wifi_legacy_hal.h"
 
 namespace android {
@@ -60,13 +61,13 @@
                                    const NanPublishRequest& msg,
                                    startPublishRequest_cb hidl_status_cb) override;
   Return<void> stopPublishRequest(uint16_t cmd_id,
-                                  uint16_t sessionId,
+                                  uint8_t sessionId,
                                   stopPublishRequest_cb hidl_status_cb) override;
   Return<void> startSubscribeRequest(uint16_t cmd_id,
                                      const NanSubscribeRequest& msg,
                                     startSubscribeRequest_cb hidl_status_cb) override;
   Return<void> stopSubscribeRequest(uint16_t cmd_id,
-                                    uint16_t sessionId,
+                                    uint8_t sessionId,
                                     stopSubscribeRequest_cb hidl_status_cb) override;
   Return<void> transmitFollowupRequest(uint16_t cmd_id,
                                        const NanTransmitFollowupRequest& msg,
@@ -87,9 +88,6 @@
   Return<void> terminateDataPathRequest(uint16_t cmd_id,
                                         uint32_t ndpInstanceId,
                                         terminateDataPathRequest_cb hidl_status_cb) override;
-  Return<void> beaconSdfPayloadRequest(uint16_t cmd_id,
-                                       const NanBeaconSdfPayloadRequest& msg,
-                                       beaconSdfPayloadRequest_cb hidl_status_cb) override;
 
  private:
   // Corresponding worker functions for the HIDL methods.
@@ -105,10 +103,10 @@
   WifiStatus disableRequestInternal(uint16_t cmd_id);
   WifiStatus startPublishRequestInternal(uint16_t cmd_id,
                                          const NanPublishRequest& msg);
-  WifiStatus stopPublishRequestInternal(uint16_t cmd_id, uint16_t sessionId);
+  WifiStatus stopPublishRequestInternal(uint16_t cmd_id, uint8_t sessionId);
   WifiStatus startSubscribeRequestInternal(uint16_t cmd_id,
                                            const NanSubscribeRequest& msg);
-  WifiStatus stopSubscribeRequestInternal(uint16_t cmd_id, uint16_t sessionId);
+  WifiStatus stopSubscribeRequestInternal(uint16_t cmd_id, uint8_t sessionId);
   WifiStatus transmitFollowupRequestInternal(
       uint16_t cmd_id, const NanTransmitFollowupRequest& msg);
   WifiStatus createDataInterfaceRequestInternal(uint16_t cmd_id,
@@ -121,13 +119,14 @@
       uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg);
   WifiStatus terminateDataPathRequestInternal(
       uint16_t cmd_id, uint32_t ndpInstanceId);
-  WifiStatus beaconSdfPayloadRequestInternal(
-      uint16_t cmd_id, const NanBeaconSdfPayloadRequest& msg);
+
+  std::set<sp<IWifiNanIfaceEventCallback>> getEventCallbacks();
 
   std::string ifname_;
   std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
-  std::vector<sp<IWifiNanIfaceEventCallback>> event_callbacks_;
   bool is_valid_;
+  hidl_callback_util::HidlCallbackHandler<IWifiNanIfaceEventCallback>
+      event_cb_handler_;
 
   DISALLOW_COPY_AND_ASSIGN(WifiNanIface);
 };
diff --git a/wifi/1.0/default/wifi_sta_iface.cpp b/wifi/1.0/default/wifi_sta_iface.cpp
index a00c5bc..55c9cf7 100644
--- a/wifi/1.0/default/wifi_sta_iface.cpp
+++ b/wifi/1.0/default/wifi_sta_iface.cpp
@@ -35,7 +35,7 @@
 
 void WifiStaIface::invalidate() {
   legacy_hal_.reset();
-  event_callbacks_.clear();
+  event_cb_handler_.invalidate();
   is_valid_ = false;
 }
 
@@ -43,8 +43,8 @@
   return is_valid_;
 }
 
-std::vector<sp<IWifiStaIfaceEventCallback>> WifiStaIface::getEventCallbacks() {
-  return event_callbacks_;
+std::set<sp<IWifiStaIfaceEventCallback>> WifiStaIface::getEventCallbacks() {
+  return event_cb_handler_.getCallbacks();
 }
 
 Return<void> WifiStaIface::getName(getName_cb hidl_status_cb) {
@@ -250,6 +250,15 @@
                          cmd_id);
 }
 
+Return<void> WifiStaIface::setScanningMacOui(
+    const hidl_array<uint8_t, 3>& oui, setScanningMacOui_cb hidl_status_cb) {
+  return validateAndCall(this,
+                         WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
+                         &WifiStaIface::setScanningMacOuiInternal,
+                         hidl_status_cb,
+                         oui);
+}
+
 Return<void> WifiStaIface::startDebugPacketFateMonitoring(
     startDebugPacketFateMonitoring_cb hidl_status_cb) {
   return validateAndCall(this,
@@ -258,14 +267,6 @@
                          hidl_status_cb);
 }
 
-Return<void> WifiStaIface::stopDebugPacketFateMonitoring(
-    stopDebugPacketFateMonitoring_cb hidl_status_cb) {
-  return validateAndCall(this,
-                         WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
-                         &WifiStaIface::stopDebugPacketFateMonitoringInternal,
-                         hidl_status_cb);
-}
-
 Return<void> WifiStaIface::getDebugTxPacketFates(
     getDebugTxPacketFates_cb hidl_status_cb) {
   return validateAndCall(this,
@@ -292,8 +293,9 @@
 
 WifiStatus WifiStaIface::registerEventCallbackInternal(
     const sp<IWifiStaIfaceEventCallback>& callback) {
-  // TODO(b/31632518): remove the callback when the client is destroyed
-  event_callbacks_.emplace_back(callback);
+  if (!event_cb_handler_.addCallback(callback)) {
+    return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
+  }
   return createWifiStatus(WifiStatusCode::SUCCESS);
 }
 
@@ -388,7 +390,9 @@
           return;
         }
         for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
-          callback->onBackgroundScanFailure(id);
+          if (!callback->onBackgroundScanFailure(id).isOk()) {
+            LOG(ERROR) << "Failed to invoke onBackgroundScanFailure callback";
+          }
         }
       };
   const auto& on_results_callback = [weak_ptr_this](
@@ -406,7 +410,9 @@
       return;
     }
     for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
-      callback->onBackgroundScanResults(id, hidl_scan_datas);
+      if (!callback->onBackgroundScanResults(id, hidl_scan_datas).isOk()) {
+        LOG(ERROR) << "Failed to invoke onBackgroundScanResults callback";
+      }
     }
   };
   const auto& on_full_result_callback = [weak_ptr_this](
@@ -425,7 +431,9 @@
       return;
     }
     for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
-      callback->onBackgroundFullScanResult(id, hidl_scan_result);
+      if (!callback->onBackgroundFullScanResult(id, hidl_scan_result).isOk()) {
+        LOG(ERROR) << "Failed to invoke onBackgroundFullScanResult callback";
+      }
     }
   };
   legacy_hal::wifi_error legacy_status =
@@ -485,7 +493,9 @@
       return;
     }
     for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
-      callback->onRssiThresholdBreached(id, bssid, rssi);
+      if (!callback->onRssiThresholdBreached(id, bssid, rssi).isOk()) {
+        LOG(ERROR) << "Failed to invoke onRssiThresholdBreached callback";
+      }
     }
   };
   legacy_hal::wifi_error legacy_status =
@@ -561,17 +571,19 @@
   return createWifiStatusFromLegacyError(legacy_status);
 }
 
+WifiStatus WifiStaIface::setScanningMacOuiInternal(
+    const std::array<uint8_t, 3>& oui) {
+  legacy_hal::wifi_error legacy_status =
+      legacy_hal_.lock()->setScanningMacOui(oui);
+  return createWifiStatusFromLegacyError(legacy_status);
+}
+
 WifiStatus WifiStaIface::startDebugPacketFateMonitoringInternal() {
   legacy_hal::wifi_error legacy_status =
       legacy_hal_.lock()->startPktFateMonitoring();
   return createWifiStatusFromLegacyError(legacy_status);
 }
 
-WifiStatus WifiStaIface::stopDebugPacketFateMonitoringInternal() {
-  // There is no stop in legacy HAL implementation.
-  return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED);
-}
-
 std::pair<WifiStatus, std::vector<WifiDebugTxPacketFateReport>>
 WifiStaIface::getDebugTxPacketFatesInternal() {
   legacy_hal::wifi_error legacy_status;
diff --git a/wifi/1.0/default/wifi_sta_iface.h b/wifi/1.0/default/wifi_sta_iface.h
index 311c991..5f0ffe9 100644
--- a/wifi/1.0/default/wifi_sta_iface.h
+++ b/wifi/1.0/default/wifi_sta_iface.h
@@ -21,6 +21,7 @@
 #include <android/hardware/wifi/1.0/IWifiStaIface.h>
 #include <android/hardware/wifi/1.0/IWifiStaIfaceEventCallback.h>
 
+#include "hidl_callback_util.h"
 #include "wifi_legacy_hal.h"
 
 namespace android {
@@ -39,7 +40,7 @@
   // Refer to |WifiChip::invalidate()|.
   void invalidate();
   bool isValid();
-  std::vector<sp<IWifiStaIfaceEventCallback>> getEventCallbacks();
+  std::set<sp<IWifiStaIfaceEventCallback>> getEventCallbacks();
 
   // HIDL methods exposed.
   Return<void> getName(getName_cb hidl_status_cb) override;
@@ -95,10 +96,10 @@
       startSendingKeepAlivePackets_cb hidl_status_cb) override;
   Return<void> stopSendingKeepAlivePackets(
       uint32_t cmd_id, stopSendingKeepAlivePackets_cb hidl_status_cb) override;
+  Return<void> setScanningMacOui(const hidl_array<uint8_t, 3>& oui,
+                                 setScanningMacOui_cb hidl_status_cb) override;
   Return<void> startDebugPacketFateMonitoring(
       startDebugPacketFateMonitoring_cb hidl_status_cb) override;
-  Return<void> stopDebugPacketFateMonitoring(
-      stopDebugPacketFateMonitoring_cb hidl_status_cb) override;
   Return<void> getDebugTxPacketFates(
       getDebugTxPacketFates_cb hidl_status_cb) override;
   Return<void> getDebugRxPacketFates(
@@ -142,8 +143,8 @@
       const std::array<uint8_t, 6>& dst_address,
       uint32_t period_in_ms);
   WifiStatus stopSendingKeepAlivePacketsInternal(uint32_t cmd_id);
+  WifiStatus setScanningMacOuiInternal(const std::array<uint8_t, 3>& oui);
   WifiStatus startDebugPacketFateMonitoringInternal();
-  WifiStatus stopDebugPacketFateMonitoringInternal();
   std::pair<WifiStatus, std::vector<WifiDebugTxPacketFateReport>>
   getDebugTxPacketFatesInternal();
   std::pair<WifiStatus, std::vector<WifiDebugRxPacketFateReport>>
@@ -151,8 +152,9 @@
 
   std::string ifname_;
   std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
-  std::vector<sp<IWifiStaIfaceEventCallback>> event_callbacks_;
   bool is_valid_;
+  hidl_callback_util::HidlCallbackHandler<IWifiStaIfaceEventCallback>
+      event_cb_handler_;
 
   DISALLOW_COPY_AND_ASSIGN(WifiStaIface);
 };
diff --git a/wifi/1.0/default/wifi_status_util.cpp b/wifi/1.0/default/wifi_status_util.cpp
index 518032f..c2d0758 100644
--- a/wifi/1.0/default/wifi_status_util.cpp
+++ b/wifi/1.0/default/wifi_status_util.cpp
@@ -42,8 +42,9 @@
       return "TOO_MANY_REQUESTS";
     case legacy_hal::WIFI_ERROR_OUT_OF_MEMORY:
       return "OUT_OF_MEMORY";
+    case legacy_hal::WIFI_ERROR_BUSY:
+      return "BUSY";
     case legacy_hal::WIFI_ERROR_UNKNOWN:
-    default:
       return "UNKNOWN";
   }
 }
@@ -90,7 +91,6 @@
       return createWifiStatus(WifiStatusCode::SUCCESS, desc);
 
     case legacy_hal::WIFI_ERROR_UNKNOWN:
-    default:
       return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN, "unknown");
   }
 }
diff --git a/wifi/1.0/types.hal b/wifi/1.0/types.hal
index edf306d..30e8943 100644
--- a/wifi/1.0/types.hal
+++ b/wifi/1.0/types.hal
@@ -211,7 +211,7 @@
 
 /**
  * STA specific types.
- * TODO(b/32159498): Move to a separate nan_types.hal.
+ * TODO(b/32159498): Move to a separate sta_types.hal.
  */
 /**
  * Parameters to specify the APF capabilities of this iface.
@@ -549,19 +549,22 @@
  */
 enum StaRoamingState : uint8_t {
   /**
+   * Driver/Firmware must not perform any roaming.
+   */
+  DISABLED = 0,
+  /**
    * Driver/Firmware is allowed to perform roaming respecting
    * the |StaRoamingConfig| parameters set using |configureRoaming|.
    */
-  ENABLED = 0,
-  /**
-   * Driver/Firmware must not perform any roaming.
-   */
-  DISABLED = 1
+  ENABLED = 1
 };
 
 /**
  * NAN specific types.
  * TODO(b/32159498): Move to a separate nan_types.hal.
+ *
+ * References to "NAN Spec" are to the Wi-Fi Alliance "Wi-Fi Neighbor Awareness
+ * Networking (NAN) Technical Specification".
  */
 
 /**
@@ -624,55 +627,59 @@
 };
 
 /**
- * NAN Match indication type.
+ * NAN Match indication type: control how often to trigger |IWifiNanIfaceEventCallback.eventMatch|
+ * for a single discovery session - i.e. continuously discovering the same publisher with no new
+ * data.
  */
 enum NanMatchAlg : uint32_t {
-  MATCH_ONCE = 0,
-  MATCH_CONTINUOUS,
-  MATCH_NEVER,
+  MATCH_ONCE = 0,   // Only trigger |IWifiNanIfaceEventCallback.eventMatch| once
+  MATCH_CONTINUOUS, // Trigger |IWifiNanIfaceEventCallback.eventMatch| every time
+  MATCH_NEVER,      // Never trigger |IWifiNanIfaceEventCallback.eventMatch|
 };
 
 /**
  * NAN publish discovery session types.
  */
 enum NanPublishType : uint32_t {
-  UNSOLICITED = 0,
-  SOLICITED,
-  UNSOLICITED_SOLICITED,
+  UNSOLICITED = 0,       // Publish session broadcasts discovery packets
+  SOLICITED,             // Publish session silent, responds to active subscribes queries
+  UNSOLICITED_SOLICITED, // Both
 };
 
 /**
  * NAN transmit type used in |NanPublishType.SOLICITED| or |NanPublishType.UNSOLICITED_SOLICITED|
- * publish discovery sessions.
+ * publish discovery sessions. Describes the addressing of the packet responding to an ACTIVE
+ * subscribe query.
  */
 enum NanTxType : uint32_t {
-  BROADCAST = 0,
-  UNICAST,
+  BROADCAST = 0, // Respond with a broadcast packet
+  UNICAST,       // Respond with a unicast packet
 };
 
 /**
- * NAN subscribe discovery session ypes.
+ * NAN subscribe discovery session types.
  */
 enum NanSubscribeType : uint32_t {
-  PASSIVE = 0,
-  ACTIVE,
+  PASSIVE = 0, // Subscribe session scans for |NanPublishType.UNSOLICITED| publish sessions.
+  ACTIVE,      // Subscribe session probes for |NanPublishType.SOLICITED| publish sessions.
 };
 
 /**
  * NAN Service Response Filter Attribute Bit.
  */
 enum NanSrfType : uint32_t {
-  BLOOM_FILTER = 0,
-  PARTIAL_MAC_ADDR,
+  BLOOM_FILTER = 0, // Use a Bloom filter.
+  PARTIAL_MAC_ADDR, // Use a list of MAC addresses.
 };
 
 /**
- * NAN DP channel config options.
+ * NAN DP (data-path) channel config options.
  */
 enum NanDataPathChannelCfg : uint32_t {
-  CHANNEL_NOT_REQUESTED = 0,
-  REQUEST_CHANNEL_SETUP,
-  FORCE_CHANNEL_SETUP,
+  CHANNEL_NOT_REQUESTED = 0, // No channel request is specified.
+  REQUEST_CHANNEL_SETUP,     // Channel request is specified - but may be overridden by firmware.
+  FORCE_CHANNEL_SETUP,       // Channel request is specified and must be respected. If the firmware
+                             // cannot honor the request then the data-path request is rejected.
 };
 
 /**
@@ -680,89 +687,103 @@
  */
 struct NanBandSpecificConfig {
   /**
-   * RSSI values controlling clustering behavior per spec.
+   * RSSI values controlling clustering behavior per spec. RSSI values are specified without a sign,
+   * e.g. a value of -65dBm would be specified as 65.
    */
-  uint8_t rssiClose;
-  uint8_t rssiMiddle;
+  uint8_t rssiClose;  // NAN Spec: RSSI_close
+  uint8_t rssiMiddle; // NAN Spec: RSSI_middle
   /**
-   * RSSI value determining whether discovery is near (used if enabled in discovery).
+   * RSSI value determining whether discovery is near (used if enabled in discovery by
+   * |NanDiscoveryCommonConfig.useRssiThreshold|).
+   * RSSI values are specified without a sign, e.g. a value of -65dBm would be specified as 65.
+   * NAN Spec: RSSI_close_proximity
    */
-  uint8_t rssiProximity;
+  uint8_t rssiCloseProximity;
   /**
-   * Dwell time of each discovery channel in milliseconds.
-   * If time set to 0 then the FW default time must be used.
+   * Dwell time of each discovery channel in milliseconds. If set to 0 then the firmware determines
+   * the dwell time to use.
    */
   uint8_t dwellTimeMs;
   /**
-   * Scan period of each discovery channel in seconds.
-   * If time set to 0 then the FW default time must be used.
+   * Scan period of each discovery channel in seconds. If set to 0 then the firmware determines
+   * the scan period to use.
    */
   uint16_t scanPeriodSec;
    /**
-    * Specifies the interval for Sync beacons and SDF's.
+    * Specifies the discovery window interval for Sync beacons and SDF's.
     * Valid values of DW Interval are: 1, 2, 3, 4 and 5 corresponding to 1, 2, 4, 8, and 16 DWs.
     * Value of 0:
     *  - reserved in 2.4GHz band
     *  - no wakeup at all in 5GHz band
-    * The publish/subscribe period values don't override the device level configurations if
-    * specified (if 'valid' is true).
+    * The publish/subscribe period values don't override this device level configurations if
+    * it is specified.
+    * Configuration is only used only if |validDiscoveryWindowIntervalVal| is set to true.
+    * NAN Spec: Device Capability Attribute / 2.4 GHz DW, Device Capability Attribute / 5 GHz DW
     */
   bool validDiscoveryWindowIntervalVal;
   uint8_t discoveryWindowIntervalVal;
 };
 
 /**
- * Configuration parameters
+ * Debug configuration parameters. Many of these allow non-standard-compliant operation and are
+ * not intended for normal operational mode.
  */
 struct NanDebugConfig {
   /**
-   * The low and high values of the cluster ID: standard values are 0x0000 - 0xFFFF.
-   * A clusterLow == clusterHigh indicates a request to join or create a cluster with that ID.
-   * Used if 'valid' is true.
+   * Specification of the lower 2 bytes of the cluster ID. The cluster ID is 50-60-9a-01-00-00 to
+   * 50-60-9a-01-FF-FF. Configuration of the bottom and top values of the range (which defaults to
+   * 0x0000 and 0xFFFF respectively).
+   * Configuration is only used if |validClusterIdVals| is set to true.
    */
   bool validClusterIdVals;
-  uint16_t clusterIdLowVal;
-  uint16_t clusterIdHighVal;
+  uint16_t clusterIdBottomRangeVal;
+  uint16_t clusterIdTopRangeVal;
   /**
-   * NAN management interface address, If specified ('valid' is true) then overrides any other
-   * configuration (specifically the default randomization).
+   * NAN management interface address, if specified (|validIntfAddrVal| is true) then overrides any
+   * other configuration (specifically the default randomization configured by
+   * |NanConfigRequest.macAddressRandomizationIntervalSec|).
    */
   bool validIntfAddrVal;
   MacAddress intfAddrVal;
   /**
-   * The 24 bit Organizationally Unique ID + the 8 bit Network Id. Used if 'valid' is true.
+   * Combination of the 24 bit Organizationally Unique ID (OUI) and the 8 bit OUI Type.
+   * Used if |validOuiVal| is set to true.
    */
   bool validOuiVal;
   uint32_t ouiVal;
   /**
-   * Force the Random Factor to the specified value for all transmitted Sync/Discovery beacons
-   * if the 'valid' flag is true.
+   * Force the Random Factor to the specified value for all transmitted Sync/Discovery beacons.
+   * Used if |validRandomFactorForceVal| is set to true.
+   * NAN Spec: Master Indication Attribute / Random Factor
    */
   bool validRandomFactorForceVal;
   uint8_t randomFactorForceVal;
   /**
    * Forces the hop-count for all transmitted Sync and Discovery Beacons NO matter the real
-   * hop-count being received over the air. Used if the 'valid' flag is true.
+   * hop-count being received over the air. Used if the |validHopCountForceVal}| flag is set to
+   * true.
+   * NAN Spec: Cluster Attribute / Anchor Master Information / Hop Count to Anchor Master
    */
   bool validHopCountForceVal;
   uint8_t hopCountForceVal;
   /**
    * Frequency in MHz to of the discovery channel in the specified band. Indexed by |NanBandIndex|.
+   * Used if the |validDiscoveryChannelVal| is set to true.
    */
   bool validDiscoveryChannelVal;
-  vec<WifiChannelInMhz> discoveryChannelMhzVal;
+  WifiChannelInMhz[2] discoveryChannelMhzVal;
   /**
    * Specifies whether sync/discovery beacons are transmitted in the specified band. Indexed by
-   * |NanBandIndex|.
+   * |NanBandIndex|. Used if the |validUseBeaconsInBandVal| is set to true.
    */
   bool validUseBeaconsInBandVal;
-  vec<bool> useBeaconsInBandVal;
+  bool[2] useBeaconsInBandVal;
   /**
-   * Specified whether SDF (service discovery frames) are transmitted in the specified band. Indexed
-   * by |NanBandIndex|.
+   * Specifies whether SDF (service discovery frames) are transmitted in the specified band. Indexed
+   * by |NanBandIndex|. Used if the |validUseSdfInBandVal| is set to true.
    */
   bool validUseSdfInBandVal;
-  vec<bool> useSdfInBandVal;
+  bool[2] useSdfInBandVal;
 };
 
 /**
@@ -771,34 +792,48 @@
 struct NanConfigRequest {
   /**
    * Master preference of this device.
+   * NAN Spec: Master Indication Attribute / Master Preference
    */
   uint8_t masterPref;
   /**
    * Controls whether or not the |IWifiNanIfaceEventCallback.eventClusterEvent| will be delivered
-   * for DISCOVERY_MAC_ADDRESS_CHANGED.
+   * for |NanClusterEventType.DISCOVERY_MAC_ADDRESS_CHANGED|.
    */
   bool disableDiscoveryAddressChangeIndication;
   /**
    * Controls whether or not the |IWifiNanIfaceEventCallback.eventClusterEvent| will be delivered
-   * for STARTED_CLUSTER.
+   * for |NanClusterEventType.STARTED_CLUSTER|.
    */
   bool disableStartedClusterIndication;
   /**
    * Controls whether or not the |IWifiNanIfaceEventCallback.eventClusterEvent| will be delivered
-   * for JOINED_CLUSTER.
+   * for |NanClusterEventType.JOINED_CLUSTER|.
    */
   bool disableJoinedClusterIndication;
   /**
-   * Control whether service IDs are included in Sync/Discovery beacons.
+   * Control whether publish service IDs are included in Sync/Discovery beacons.
+   * NAN Spec: Service ID List Attribute
    */
-  bool includeServiceIdsInBeacon;
+  bool includePublishServiceIdsInBeacon;
   /**
-   * If |includeServiceIdInBeacon| is true then specifies the number of service IDs to include
-   * in the Sync/Discovery beacons:
+   * If |includePublishServiceIdsInBeacon| is true then specifies the number of publish service IDs
+   * to include in the Sync/Discovery beacons:
    *  Value = 0: include as many service IDs as will fit into the maximum allowed beacon frame size.
    *  Value must fit within 7 bits - i.e. <= 127.
    */
-  uint8_t numberOfServiceIdsInBeacon;
+  uint8_t numberOfPublishServiceIdsInBeacon;
+  /**
+   * Control whether subscribe service IDs are included in Sync/Discovery beacons.
+   * Spec: Subscribe Service ID List Attribute
+   */
+  bool includeSubscribeServiceIdsInBeacon;
+  /**
+   * If |includeSubscribeServiceIdsInBeacon| is true then specifies the number of subscribe service
+   * IDs to include in the Sync/Discovery beacons:
+   *  Value = 0: include as many service IDs as will fit into the maximum allowed beacon frame size.
+   *  Value must fit within 7 bits - i.e. <= 127.
+   */
+  uint8_t numberOfSubscribeServiceIdsInBeacon;
   /**
    * Number of samples used to calculate RSSI.
    */
@@ -809,54 +844,50 @@
    */
   uint32_t macAddressRandomizationIntervalSec;
   /**
-   * Accept (if true) or not (if false) ranging requests from peers - whether in the context of
-   * discovery or otherwise.
-   */
-  bool acceptRangingRequests;
-  /**
    * Additional configuration provided per band: indexed by |NanBandIndex|.
    */
-  vec<NanBandSpecificConfig> bandSpecificConfig;
+  NanBandSpecificConfig[2] bandSpecificConfig;
 };
 
 /**
- * Enable requests for NAN: start-up configuration.
+ * Enable requests for NAN: start-up configuration |IWifiNanIface.enableRequest|.
  */
 struct NanEnableRequest {
   /**
    * Enable operation in a specific band: indexed by |NanBandIndex|.
    */
-  vec<bool> operateInBand;
+  bool[2] operateInBand;
   /**
    * Specify extent of cluster by specifying the max hop count.
    */
   uint8_t hopCountMax;
   /**
    * Configurations of NAN cluster operation. Can also be modified at run-time using
-   * |configRequest|.
+   * |IWifiNanIface.configRequest|.
    */
   NanConfigRequest configParams;
   /**
-   * Non-standard configurations of NAN cluster operation - useful for debugging opeations.
+   * Non-standard configurations of NAN cluster operation - useful for debugging operations.
    */
   NanDebugConfig debugConfigs;
 };
 
 /**
- * Cipher suite flags - to be used as a bitmask.
+ * Cipher suite flags.
  */
 enum NanCipherSuiteType : uint32_t {
-  SHARED_KEY_128_MASK = 1 << 0,
-  SHARED_KEY_256_MASK = 1 << 1
+  SHARED_KEY_128_MASK = 1 << 0, // NCS-SK-128
+  SHARED_KEY_256_MASK = 1 << 1  // NCS-SK-256
 };
 
 /**
- * Ranging in the context of discovery sessions indication controls - to be used as a bitmask.
+ * Ranging in the context of discovery sessions indication controls. Controls the frequency of
+ * ranging-driven |IWifiNanIfaceEventCallback.eventMatch|.
  */
 enum NanRangingIndication : uint32_t {
-  CONTINUOUS_INDICATION_MASK = 1 << 0,
-  INGRESS_MET_MASK = 1 << 1,
-  EGRESS_MET_MASK = 1 << 2
+  CONTINUOUS_INDICATION_MASK = 1 << 0, // trigger event on every RTT measurement
+  INGRESS_MET_MASK = 1 << 1,           // trigger event only when ingress conditions met
+  EGRESS_MET_MASK = 1 << 2             // trigger event only when egress conditions met
 };
 
 /**
@@ -865,58 +896,82 @@
 struct NanDiscoveryCommonConfig {
   /**
    * The ID of the discovery session being configured. A value of 0 specifies a request to create
-   * a new discovery session.
+   * a new discovery session. The new discovery session ID is returned with
+   * |IWifiNanIfaceEventCallback.notifyStartPublishResponse| or
+   * |IWifiNanIfaceEventCallback.notifyStartSubscribeResponse|.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Instance ID
    */
-  uint16_t sessionId;
+  uint8_t sessionId;
   /**
    * The lifetime of the discovery session in seconds. A value of 0 means run forever or until
-   * canceled.
+   * canceled using |IWifiIface.stopPublishRequest| or |IWifiIface.stopSubscribeRequest|.
    */
   uint16_t ttlSec;
   /**
    * Indicates the interval between two Discovery Windows in which the device supporting the
-   * service is awake to transmit or receive the Service Discovery frames.
-   * Valid values of Awake DW Interval are: 1, 2, 4, 8 and 16. A value of 0 will default to 1.
+   * service is awake to transmit or receive the Service Discovery frames. Valid values of Awake
+   * DW Interval are: 1, 2, 4, 8 and 16. A value of 0 will default to 1. Does not override
+   * |NanBandSpecificConfig.discoveryWindowIntervalVal| configurations if those are specified.
    */
   uint16_t discoveryWindowPeriod;
   /**
-   * Number of other-air-air operations (i.e. active transmissions), 0 means forever or until
-   * canceled.
+   * The lifetime of the discovery session in number of transmitted SDF discovery packets. A value
+   * of 0 means forever or until canceled using |IWifiIface.stopPublishRequest| or
+   * |IWifiIface.stopSubscribeRequest|.
    */
   uint8_t discoveryCount;
   /**
    * UTF-8 encoded string identifying the service.
    * Max length: |NanCapabilities.maxServiceNameLen|.
+   * NAN Spec: The only acceptable single-byte UTF-8 symbols for a Service Name are alphanumeric
+   * values (A-Z, a-z, 0-9), the hyphen ('-'), and the period ('.'). All valid multi-byte UTF-8
+   * characters are acceptable in a Service Name.
    */
-  string serviceName;
+  vec<uint8_t> serviceName;
   /**
-   * Specifies the matching indication to host: once, continuous, or never.
+   * Specifies how often to trigger |IWifiNanIfaceEventCallback.eventMatch| when continuously
+   * discovering the same discovery session (with no changes).
    */
   NanMatchAlg discoveryMatchIndicator;
   /**
-   * Arbitrary information communicated as part of discovery.
+   * Arbitrary information communicated in discovery packets - there is no semantic meaning to these
+   * bytes. They are passed-through from publisher to subscriber as-is with no parsing.
    * Max length: |NanCapabilities.maxServiceSpecificInfoLen|.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Service Info
    */
   vec<uint8_t> serviceSpecificInfo;
   /**
-   * Ordered sequence of <length, value> pairs (length uses 1 byte) which specify further match
-   * criteria (beyond the service name).
+   * Arbitrary information communicated in discovery packets - there is no semantic meaning to these
+   * bytes. They are passed-through from publisher to subscriber as-is with no parsing.
+   * Max length: |NanCapabilities.maxExtendedServiceSpecificInfoLen|.
+   * Spec: Service Descriptor Extension Attribute (SDEA) / Service Info
+   */
+  vec<uint8_t> extendedServiceSpecificInfo;
+  /**
+   * Ordered sequence of <length, value> pairs (|length| uses 1 byte and contains the number of
+   * bytes in the |value| field) which specify further match criteria (beyond the service name).
+   * The match behavior is specified in details in the NAN spec.
    * Publisher: used in SOLICITED or SOLICITED_UNSOLICITED sessions.
    * Subscriber: used in ACTIVE or PASSIVE sessions.
    * Max length: |NanCapabilities.maxMatchFilterLen|.
+   * NAN Spec: matching_filter_rx
    */
   vec<uint8_t> rxMatchFilter;
   /**
-   * Ordered sequence of <length, value> pairs (length uses 1 byte) which specify further match
-   * criteria (beyond the service name).
+   * Ordered sequence of <length, value> pairs (|length| uses 1 byte and contains the number of
+   * bytes in the |value| field) which specify further match criteria (beyond the service name).
+   * The match behavior is specified in details in the NAN spec.
    * Publisher: used if provided.
-   * Subscriber: used in ACTIVE sessions.
+   * Subscriber: used (if provided) only in ACTIVE sessions.
    * Max length: |NanCapabilities.maxMatchFilterLen|.
+   * NAN Spec: matching_filter_tx and Service Descriptor Attribute (SDA) / Matching Filter
    */
   vec<uint8_t> txMatchFilter;
   /**
-   * Specifies whether or not the discovery session uses the |rssiProximity| value (configured
-   * in enable/configure requests) to filter out matched discovered peers.
+   * Specifies whether or not the discovery session uses the
+   * |NanBandSpecificConfig.rssiCloseProximity| value (configured in enable/configure requests) to
+   * filter out matched discovered peers.
+   * NAN Spec: Service Descriptor Attribute / Service Control / Discovery Range Limited.
    */
   bool useRssiThreshold;
   /**
@@ -935,45 +990,64 @@
    */
   bool disableFollowupReceivedIndication;
   /**
-   * Cipher types supported in data-paths constructed in the context of this discovery session. The
-   * |NanCipherSuiteType| bit fields are used to set this value.
+   * Cipher types supported in data-paths constructed in the context of this discovery session.
    */
   bitfield<NanCipherSuiteType> supportedCipherTypes;
   /**
-   * Optional PMK for data-paths constructed in the context of this discovery session. A PMK could
-   * also be provided during the actual construction of the data-path (which allows unique PMKs for
-   * each data-path).
+   * Optional Pairwise Master Key (PMK) for data-paths constructed in the context of this discovery
+   * session. A PMK can also be provided during the actual construction of the data-path (which
+   * allows for unique PMKs for each data-path).
    * Max length: 32
+   * Ref: IEEE 802.11i
    */
   vec<uint8_t> pmk;
   /**
    * Specifies whether or not security is enabled in any data-path (NDP) constructed in the context
    * of this discovery session.
+   * NAN Spec: Service Discovery Extension Attribute (SDEA) / Control / Security Required
    */
   bool securityEnabledInNdp;
   /**
    * Specifies whether or not there is a ranging requirement in this discovery session.
-   * Note that ranging is only performed if all other match criteria with the peer are met.
+   * Ranging is only performed if all other match criteria with the peer are met.
+   * Note: specifying that ranging is required also implies that this device must automatically
+   * accept ranging requests from peers.
+   *   Solicited Publisher + Passive Subscriber:
+   *     Publisher/Subscriber:
+   *     true/true: ranging performed.
+   *     true/false: subscriber doesn't require ranging (match if all other criteria met). I.e.
+   *                 publisher requiring range doesn't gate subscriber matching.
+   *     false/true: subscriber tries ranging but publisher refuses (no match).
+   *     false/false: ranging isn't attempted and doesn't impact match.
+   *   Unsolicited Publisher + Active Subscriber:
+   *     Publisher/Subscriber:
+   *     true/true: ranging performed.
+   *     true/false: publisher attempts ranging but subscriber doesn't allow - no match.
+   *     false/true: publisher doesn't attempt ranging, should not impact match.
+   *     false/false: ranging isn't attempted and doesn't impact match.
+   * NAN Spec: Service Discovery Extension Attribute (SDEA) / Control / Ranging Require.
    */
   bool rangingRequired;
    /**
-    * Interval in msec between two ranging measurements.
-    * If the Awake DW interval in Enable/Config is larger than the ranging interval - priority is
-    * given to Awake DW interval.
+    * Interval in msec between two ranging measurements. Only relevant if |rangingRequired| is true.
+    * If the Awake DW interval specified either in |discoveryWindowPeriod| or in
+    * |NanBandSpecificConfig.discoveryWindowIntervalVal| is larger than the ranging interval then
+    * priority is given to Awake DW interval.
     */
   uint32_t rangingIntervalMsec;
   /**
-   * The type of ranging indication feedback to be provided by discovery session matches. Use
-   * bit-fields from |NanRangingIndication|.
+   * The type of ranging feedback to be provided by discovery session matches
+   * |IWifiNanIfaceEventCallback.eventMatch|. Only relevant if |rangingRequired| is true.
    */
    bitfield<NanRangingIndication> configRangingIndications;
    /**
-    * The ingress and egress distance in cm. If ranging is eanbled (|rangingEnabled| is true) then
-    * \configRangingIndications\ is used to determine whether ingress and/or egress (or neither)
+    * The ingress and egress distance in cm. If ranging is enabled (|rangingEnabled| is true) then
+    * |configRangingIndications| is used to determine whether ingress and/or egress (or neither)
     * are used to determine whether a match has occurred.
+    * NAN Spec: Service Discovery Extension Attribute (SDEA) / Ingress & Egress Range Limit
     */
-   uint32_t distanceIngressCm;
-   uint32_t distanceEgressCm;
+   uint16_t distanceIngressCm;
+   uint16_t distanceEgressCm;
 };
 
 /**
@@ -1009,27 +1083,35 @@
    */
   NanSubscribeType subscribeType;
   /**
-   * For Active subscribe discovery sessions specify how the Service Response Filter (SRF)
-   * attribute is populated.
+   * For |NanSubscribeType.ACTIVE| subscribe discovery sessions specify how the Service Response
+   * Filter (SRF) attribute is populated. Relevant only if |shouldUseSrf| is set to true.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Service Response Filter / SRF Control / SRF Type
    */
   NanSrfType srfType;
   /**
-   * Configure the requested response of the Service Response Filter (SRF).
+   * Configure whether inclusion of an address in |intfAddr| indicates that those devices should
+   * respond or the reverse. Relevant only if |shouldUseSrf| is set to true and |srfType| is set to
+   * |NanSrfType.PARTIAL_MAC_ADDR|.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Service Response Filter / SRF Control / Include
    */
   bool srfRespondIfInAddressSet;
   /**
-   * Control whether the Service Response Filter (SRF) is transmitted OTA.
+   * Control whether the Service Response Filter (SRF) is used.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Service Control /
+   *           Service Response Filter Present
    */
   bool shouldUseSrf;
   /**
-   * Control whether the Service Specific Info (SSI) is needed in the Publish message to trigger
-   * service discovery (a match).
+   * Control whether the presence of |NanDiscoveryCommonConfig.serviceSpecificInfo| data is needed
+   * in the publisher in order to trigger service discovery, i.e. a
+   * |IWifiNanIfaceEventCallback.eventMatch|. The test is for presence of data - not for the
+   * specific contents of the data.
    */
   bool isSsiRequiredForMatch;
   /**
-   * NAN Interface Address, conforming to the format as described in
-   * 8.2.4.3.2 of IEEE Std. 802.11-2012.
-   * Max length: |NanCapabilities.maxSubscribeInterfaceAddresses|.
+   * NAN Interface Addresses constituting the Service Response Filter (SRF).
+   * Max length (number of addresses): |NanCapabilities.maxSubscribeInterfaceAddresses|.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Service Response Filter / Address Set
    */
   vec<MacAddress> intfAddr;
 };
@@ -1041,15 +1123,17 @@
   /**
    * ID of an active publish or subscribe discovery session. Follow-up message is transmitted in the
    * context of the discovery session.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Instance ID
    */
-  uint16_t discoverySessionId;
+  uint8_t discoverySessionId;
   /**
-   * ID of the peer. Obtained as part of an earlier |eventMatch| or |eventFollowupReceived|.
+   * ID of the peer. Obtained as part of an earlier |IWifiNanIfaceEventCallback.eventMatch| or
+   * |IWifiNanIfaceEventCallback.eventFollowupReceived|.
    */
   uint32_t peerId;
   /**
-   * MAC address of the peer. Obtained as part of an earlier |eventMatch| or
-   * |eventFollowupReceived|.
+   * MAC address of the peer. Obtained as part of an earlier |IWifiNanIfaceEventCallback.eventMatch|
+   * or |IWifiNanIfaceEventCallback.eventFollowupReceived|.
    */
   MacAddress addr;
   /**
@@ -1062,13 +1146,22 @@
    */
   bool shouldUseDiscoveryWindow;
   /**
-   * Message as a byte sequence.
+   * Arbitrary information communicated to the peer - there is no semantic meaning to these
+   * bytes. They are passed-through from sender to receiver as-is with no parsing.
    * Max length: |NanCapabilities.maxServiceSpecificInfoLen|.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Service Info
    */
-  vec<uint8_t> message;
+  vec<uint8_t> serviceSpecificInfo;
   /**
-   * Disable |eventTransmitFollowup| - i.e. do not get indication on whether the follow-up
-   * was transmitted and received successfully.
+   * Arbitrary information communicated in discovery packets - there is no semantic meaning to these
+   * bytes. They are passed-through from publisher to subscriber as-is with no parsing.
+   * Max length: |NanCapabilities.maxExtendedServiceSpecificInfoLen|.
+   * Spec: Service Descriptor Extension Attribute (SDEA) / Service Info
+   */
+  vec<uint8_t> extendedServiceSpecificInfo;
+  /**
+   * Disable |IWifiNanIfaceEventCallback.eventTransmitFollowup| - i.e. do not get indication on
+   * whether the follow-up was transmitted and received successfully.
    */
   bool disableFollowupResultIndication;
 };
@@ -1078,11 +1171,13 @@
  */
 struct NanInitiateDataPathRequest {
   /**
-   * ID of the peer. Obtained as part of an earlier |eventMatch| or |eventFollowupReceived|.
+   * ID of the peer. Obtained as part of an earlier |IWifiNanIfaceEventCallback.eventMatch| or
+   * |IWifiNanIfaceEventCallback.eventFollowupReceived|.
    */
   uint32_t peerId;
   /**
-   * NAN management interface MAC address of the peer.
+   * NAN management interface MAC address of the peer. Obtained as part of an earlier
+   * |IWifiNanIfaceEventCallback.eventMatch| or |IWifiNanIfaceEventCallback.eventFollowupReceived|.
    */
   MacAddress peerDiscMacAddr;
   /**
@@ -1090,31 +1185,36 @@
    */
   NanDataPathChannelCfg channelRequestType;
   /**
-   * Channel frequency in MHz to start data-path.
+   * Channel frequency in MHz to start data-path. Not relevant if |channelRequestType| is
+   * |NanDataPathChannelCfg.CHANNEL_NOT_REQUESTED|.
    */
   WifiChannelInMhz channel;
   /**
-   * NAN data interface name on which this data-path session is to be started.
-   * This must be an interface created using |createDataInterfaceRequest|.
+   * NAN data interface name on which this data-path session is to be initiated.
+   * This must be an interface created using |IWifiNanIface.createDataInterfaceRequest|.
    */
   string ifaceName;
   /**
    * Specifies whether or not security is required for the data-path being created.
+   * NAN Spec: Data Path Attributes / NDP Attribute / NDP Control / Security Present
    */
   bool securityRequired;
   /**
-   * Arbitrary token transmitted as part of the data-path negotiation (not encrypted).
+   * Arbitrary information communicated to the peer as part of the data-path setup process - there
+   * is no semantic meaning to these bytes. They are passed-through from sender to receiver as-is
+   * with no parsing.
    * Max length: |NanCapabilities.maxAppInfoLen|.
+   * NAN Spec: Data Path Attributes / NDP Attribute / NDP Specific Info
    */
   vec<uint8_t> appInfo;
   /**
-   * Cipher types supported in data-paths constructed in the context of this discovery session. The
-   * |NanCipherSuiteType| bit fields are used to set this value.
+   * Cipher types supported in data-paths constructed in the context of this discovery session.
    */
   bitfield<NanCipherSuiteType> supportedCipherTypes;
   /**
-   * PMK of the data-path being requested (if |securityRequired| is true).
+   * Pairwise Master Key (PMK) for the data-path being requested (if |securityRequired| is true).
    * Max length: 32
+   * Ref: IEEE 802.11i
    */
   vec<uint8_t> pmk;
 };
@@ -1125,65 +1225,44 @@
 struct NanRespondToDataPathIndicationRequest {
   /**
    * Accept (true) or reject (false) the request.
+   * NAN Spec: Data Path Attributes / NDP Attribute / Type and Status
    */
   bool acceptRequest;
   /**
    * ID of the data-path (NDP) for which we're responding - obtained as part of the request in
-   * |NanDataPathRequestInd|.
+   * |IWifiNanIfaceEventCallback.eventDataPathRequest|.
    */
   uint32_t ndpInstanceId;
   /**
    * NAN data interface name on which this data-path session is to be started.
-   * This must be an interface created using |createDataInterfaceRequest|.
+   * This must be an interface created using |IWifiNanIface.createDataInterfaceRequest|.
    */
   string ifaceName;
   /**
    * Specifies whether or not security is required for the data-path being created.
+   * NAN Spec: Data Path Attributes / NDP Attribute / NDP Control / Security Present
    */
   bool securityRequired;
   /**
-   * Arbitrary token transmitted as part of the data-path negotiation (not encrypted).
+   * Arbitrary information communicated to the peer as part of the data-path setup process - there
+   * is no semantic meaning to these bytes. They are passed-through from sender to receiver as-is
+   * with no parsing.
    * Max length: |NanCapabilities.maxAppInfoLen|.
+   * NAN Spec: Data Path Attributes / NDP Attribute / NDP Specific Info
    */
   vec<uint8_t> appInfo;
   /**
-   * Cipher types supported in data-paths constructed in the context of this discovery session. The
-   * |NanCipherSuiteType| bit fields are used to set this value.
+   * Cipher types supported in data-paths constructed in the context of this discovery session.
    */
   bitfield<NanCipherSuiteType> supportedCipherTypes;
   /**
-   * PMK of the data-path being requested (if |securityRequired| is true).
+   * Pairwise Master Key (PMK) for the data-path being negotiated (if |securityRequired| is true).
    * Max length: 32
    */
   vec<uint8_t> pmk;
 };
 
 /**
- * Specifies vendor-specific information fields to be included in NAN management frames.
- */
-struct NanBeaconSdfPayloadRequest {
-  /**
-   * If true information is transmitted in next 16 DWs, else only in the next (1) DW.
-   */
-  bool transmitInNext16dws;
-  /**
-   * Specify the management frames in which the vendor-specific information is included.
-   */
-  bool transmitInDiscoveryBeacon;
-  bool transmitInSyncBeacon;
-  bool transmitInServiceDiscoveryFrame;
-  /**
-   * Organizationally Unique Identifier (OUI).
-   */
-  uint32_t vendorOui;
-  /**
-   * Vendor specific attribute to be transmitted.
-   * Max length: |NanCapabilities.maxVsaDataLen|.
-   */
-  vec<uint8_t> vsa;
-};
-
-/**
  * NDP Capabilities response.
  */
 struct NanCapabilities {
@@ -1208,24 +1287,24 @@
    */
   uint32_t maxMatchFilterLen;
   /**
-   * Maximum length (in bytes) of aggregate match filters.
+   * Maximum length (in bytes) of aggregate match filters across all active sessions.
    */
   uint32_t maxTotalMatchFilterLen;
   /**
-   * Maximum length (in bytes) of the service specific info length or message length in follow-ups.
+   * Maximum length (in bytes) of the service specific info field.
    */
   uint32_t maxServiceSpecificInfoLen;
   /**
-   * Maximum length (in bytes) of vendor-specific (VSA) data.
+   * Maximum length (in bytes) of the extended service specific info field.
    */
-  uint32_t maxVsaDataLen;
+  uint32_t maxExtendedServiceSpecificInfoLen;
   /**
-   * Maximum number of data interfaces which can be created concurrently on the device.
+   * Maximum number of data interfaces (NDI) which can be created concurrently on the device.
    */
   uint32_t maxNdiInterfaces;
   /**
-   * Maximum number of data paths which can be created concurrently on each individual
-   * data interface.
+   * Maximum number of data paths (NDP) which can be created concurrently on each individual
+   * data interface (NDI).
    */
   uint32_t maxNdpSessions;
   /**
@@ -1239,7 +1318,7 @@
   /**
    * Maximum number MAC interface addresses which can be specified to a subscribe discovery session.
    */
-  uint32_t maxSubscribeInterfaceAddresses; // TODO: (hard-code to 42) get from HAL
+  uint32_t maxSubscribeInterfaceAddresses;
   /**
    * The set of supported Cipher suites. The |NanCipherSuiteType| bit fields are used.
    */
@@ -1252,10 +1331,12 @@
 struct NanMatchInd {
   /**
    * Publish or subscribe discovery session ID of an existing discovery session.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Instance ID
    */
-  uint16_t discoverySessionId;
+  uint8_t discoverySessionId;
   /**
-   * A unique ID of the peer. Can be subsequently used in |transmitFollowupRequest|.
+   * A unique ID of the peer. Can be subsequently used in |IWifiNanIface.transmitFollowupRequest| or
+   * to set up a data-path.
    */
   uint32_t peerId;
   /**
@@ -1263,47 +1344,60 @@
    */
   MacAddress addr;
   /**
-   * The arbitrary information contained in the |serviceSpecificInfo| of the peer's discovery
-   * session.
+   * The arbitrary information contained in the |NanDiscoveryCommonConfig.serviceSpecificInfo| of
+   * the peer's discovery session configuration.
    * Max length: |NanCapabilities.maxServiceSpecificInfoLen|.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Service Info
    */
   vec<uint8_t> serviceSpecificInfo;
   /**
-   * Ordered sequence of <length, value> pairs (length uses 1 byte) of the peer's discovery session
-   * match filter.
+   * Arbitrary information communicated in discovery packets - there is no semantic meaning to these
+   * bytes. They are passed-through from publisher to subscriber as-is with no parsing.
+   * Max length: |NanCapabilities.maxExtendedServiceSpecificInfoLen|.
+   * Spec: Service Descriptor Extension Attribute (SDEA) / Service Info
+   */
+  vec<uint8_t> extendedServiceSpecificInfo;
+  /**
+   * The match filter from the discovery packet (publish or subscribe) which caused service
+   * discovery. Matches the peer's |NanDiscoveryCommonConfig.txMatchFilter|.
    * Max length: |NanCapabilities.maxMatchFilterLen|.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Matching Filter
    */
   vec<uint8_t> matchFilter;
   /**
-   * Indicates the type of discovery: Beacon if true, Service Discovery Frames (SDF) if false.
+   * Indicates the type of discovery: true if match occurred on a Beacon frame, false if the match
+   * occurred on a Service Discovery Frames (SDF).
    */
   bool matchOccuredInBeaconFlag;
   /**
-   * Flag to indicate FW is out of resource and that it can no longer
-   * track this Service Name.
+   * Flag to indicate firmware is out of resource and that it can no longer track this Service Name.
+   * Indicates that while |IWifiNanIfaceEventCallback.eventMatch| will be received, the
+   * |NanDiscoveryCommonConfig.discoveryMatchIndicator| configuration will not be honored.
    */
   bool outOfResourceFlag;
   /**
-   * If RSSI filtering was configured in discovery session setup then this
-   * field must contain the received RSSI value. It will contain 0 if RSSI filtering was not
-   * configured.
+   * If RSSI filtering was enabled using |NanDiscoveryCommonConfig.useRssiThreshold| in discovery
+   * session setup then this field contains the received RSSI value. It will contain 0 if RSSI
+   * filtering was not enabled.
    * RSSI values are returned without sign, e.g. -70dBm will be returned as 70.
    */
   uint8_t rssiValue;
   /**
    * Cipher types supported by the peer for data-paths constructed in the context of this discovery
-   * session. The |NanCipherSuiteType| bit fields are used to set this value.
+   * session.
    */
   bitfield<NanCipherSuiteType> peerSupportedCipherTypes;
   /**
    * Indicates whether or not the peer requires security enabled in any data-path (NDP) constructed
    * in the context of this discovery session.
+   * NAN Spec: Service Discovery Extension Attribute (SDEA) / Control / Security Required
    */
   bool peerRequiresSecurityEnabledInNdp;
   /**
-   * Indicates whether or not the peer requires (and hence allows) ranging in this discovery
-   * session.
+   * Indicates whether or not the peer requires (and hence allows) ranging in the context of this
+   * discovery session.
    * Note that ranging is only performed if all other match criteria with the peer are met.
+   * NAN Spec: Service Discovery Extension Attribute (SDEA) / Control / Ranging Require.
    */
   bool peerRequiresRanging;
   /**
@@ -1324,8 +1418,8 @@
    */
   uint32_t rangingMeasurementInCm;
   /**
-   * The ranging event(s) which triggered the ranging. Uses bit-fields from |NanRangingIndication|.
-   * E.g. can indicate that continuous ranging is required, or else that an ingress event occurred.
+   * The ranging event(s) which triggered the ranging. E.g. can indicate that continuous ranging was
+   * requested, or else that an ingress event occurred.
    */
    bitfield<NanRangingIndication> rangingIndicationType;
 };
@@ -1337,10 +1431,12 @@
   /**
    * Discovery session (publish or subscribe) ID of a previously created discovery session. The
    * message is received in the context of this discovery session.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Instance ID
    */
-  uint16_t discoverySessionId;
+  uint8_t discoverySessionId;
   /**
-   * A unique ID of the peer. Can be subsequently used in |transmitFollowupRequest|.
+   * A unique ID of the peer. Can be subsequently used in |IWifiNanIface.transmitFollowupRequest| or
+   * to set up a data-path.
    */
   uint32_t peerId;
   /**
@@ -1353,10 +1449,19 @@
    */
   bool receivedInFaw;
   /**
-   * Received message as a byte sequence.
+   * Received message from the peer - there is no semantic meaning to these bytes. They are
+   * passed-through from sender to receiver as-is with no parsing.
    * Max length: |NanCapabilities.maxServiceSpecificInfoLen|.
+   * NAN Spec: Service Descriptor Attribute (SDA) / Service Info
    */
-  vec<uint8_t> message;
+  vec<uint8_t> serviceSpecificInfo;
+  /**
+   * Arbitrary information communicated in discovery packets - there is no semantic meaning to these
+   * bytes. They are passed-through from publisher to subscriber as-is with no parsing.
+   * Max length: |NanCapabilities.maxExtendedServiceSpecificInfoLen|.
+   * Spec: Service Descriptor Extension Attribute (SDEA) / Service Info
+   */
+  vec<uint8_t> extendedServiceSpecificInfo;
 };
 
 /**
@@ -1394,54 +1499,6 @@
 };
 
 /**
- * Mask to determine on which frames the vendor-specific attribute (VSA) was received on.
- */
-enum NanVsaRxFrameMask: uint32_t {
-  DISCOVERY_BEACON_MASK = 1 << 0,
-  SYNC_BEACON_MASK = 1 << 1,
-  SERVICE_DISCOVERY_MASK = 1 << 2
-};
-
-/**
- * NAN Beacon or SDF Payload Indication Message structure.
- * The BeaconSdfPayloadInd message indicates to the upper layers that information
- * elements were received either in a Beacon or SDF which needs to be delivered
- * outside of a Publish/Subscribe Handle.
- */
-struct NanBeaconSdfPayloadInd {
-  /**
-   * The MAC address of the peer which sent the attributes.
-   */
-  MacAddress addr;
-  /**
-   * A flag indicating whether a vendor-specific attribute (VSA) has been received.
-   */
-  bool isVsaReceived;
-  /**
-   * Frames on which this vendor specific attribute was received.
-   * Mask |NanVsaRxFrameMask| defined above.
-   */
-  bitfield<NanVsaRxFrameMask> vsaReceivedOnFrames;
-  /**
-   * Organizationally Unique Identifier (OUI) of the vendor-specific attribute.
-   */
-  uint32_t vsaVendorOui;
-  /**
-   * Contents of the vendor specific attribute.
-   * Max length: |NanCapabilities.maxVsaDataLen|.
-   */
-  vec<uint8_t> vsa;
-  /**
-   * A flag indicating whether a NAN beacon or SDF payload has been received.
-   */
-  bool isBeaconSdfPayloadReceived;
-  /**
-   * The contents of the NAN beacon or SDF payload.
-   */
-  vec<uint8_t> beaconSdfPayloadData;
-};
-
-/**
  * NAN Data path request Indication Message structure.
  * Event indication received by an intended Responder when a Nan Data request initiated by an
  * Initiator.
@@ -1450,8 +1507,9 @@
   /**
    * ID of an active publish or subscribe discovery session - the data-path request is in the
    * context of this discovery session.
+   * NAN Spec: Data Path Attributes / NDP Attribute / Publish ID
    */
-  uint16_t discoverySessionId;
+  uint8_t discoverySessionId;
   /**
    * MAC address of the Initiator peer. This is the MAC address of the peer's management/discovery
    * NAN interface.
@@ -1463,11 +1521,15 @@
   uint32_t ndpInstanceId;
   /**
    * Specifies whether or not security is required by the peer for the data-path being created.
+   * NAN Spec: Data Path Attributes / NDP Attribute / NDP Control / Security Present
    */
   bool securityRequired;
   /**
-   * Arbitrary token transmitted by the peer as part of the data-path negotiation (not encrypted).
+   * Arbitrary information communicated from the peer as part of the data-path setup process - there
+   * is no semantic meaning to these bytes. They are passed-through from sender to receiver as-is
+   * with no parsing.
    * Max length: |NanCapabilities.maxAppInfoLen|.
+   * NAN Spec: Data Path Attributes / NDP Attribute / NDP Specific Info
    */
   vec<uint8_t> appInfo;
 };
@@ -1491,8 +1553,11 @@
    */
   MacAddress peerNdiMacAddr;
   /**
-   * Arbitrary token transmitted by the peer as part of the data-path negotiation (not encrypted).
+   * Arbitrary information communicated from the peer as part of the data-path setup process - there
+   * is no semantic meaning to these bytes. They are passed-through from sender to receiver as-is
+   * with no parsing.
    * Max length: |NanCapabilities.maxAppInfoLen|.
+   * NAN Spec: Data Path Attributes / NDP Attribute / NDP Specific Info
    */
   vec<uint8_t> appInfo;
   /**
@@ -2142,7 +2207,7 @@
 };
 
 /**
- * Struct describing packet fate report for each Rx frame.
+ * Struct describing packet fate report for each Tx frame.
  */
 struct WifiDebugTxPacketFateReport {
   WifiDebugTxPacketFate fate;
diff --git a/wifi/1.0/vts/Wifi.vts b/wifi/1.0/vts/Wifi.vts
deleted file mode 100644
index 608e012..0000000
--- a/wifi/1.0/vts/Wifi.vts
+++ /dev/null
@@ -1,110 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifi"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::IWifiChip"
-import: "android.hardware.wifi@1.0::IWifiEventCallback"
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    api: {
-        name: "registerEventCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "IWifiEventCallback"
-            is_callback: true
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "isStarted"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "start"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            next: "registerEventCallback"
-            next: "start"
-            next: "stop"
-            next: "getChip"
-        }
-    }
-
-    api: {
-        name: "stop"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        callflow: {
-            exit: true
-        }
-        callflow: {
-            next: "registerEventCallback"
-            next: "start"
-            next: "stop"
-        }
-    }
-
-    api: {
-        name: "getChipIds"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint32_t"
-            }
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-    api: {
-        name: "getChip"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiChip"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        callflow: {
-            next: "*"
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiApIface.vts b/wifi/1.0/vts/WifiApIface.vts
deleted file mode 100644
index c4f3640..0000000
--- a/wifi/1.0/vts/WifiApIface.vts
+++ /dev/null
@@ -1,33 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiApIface"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::IWifiIface"
-
-interface: {
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "getName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiChip.vts b/wifi/1.0/vts/WifiChip.vts
deleted file mode 100644
index 4b278c1..0000000
--- a/wifi/1.0/vts/WifiChip.vts
+++ /dev/null
@@ -1,545 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiChip"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::IWifiApIface"
-import: "android.hardware.wifi@1.0::IWifiChipEventCallback"
-import: "android.hardware.wifi@1.0::IWifiIface"
-import: "android.hardware.wifi@1.0::IWifiNanIface"
-import: "android.hardware.wifi@1.0::IWifiP2pIface"
-import: "android.hardware.wifi@1.0::IWifiRttController"
-import: "android.hardware.wifi@1.0::IWifiStaIface"
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::V1_0::IWifiChip::ChipIfaceCombinationLimit"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "types"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_ENUM
-                predefined_type: "::android::hardware::wifi::V1_0::IfaceType"
-            }
-        }
-        struct_value: {
-            name: "maxIfaces"
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::V1_0::IWifiChip::ChipIfaceCombination"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "limits"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::V1_0::IWifiChip::ChipIfaceCombinationLimit"
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::V1_0::IWifiChip::ChipMode"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "id"
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        struct_value: {
-            name: "availableCombinations"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::V1_0::IWifiChip::ChipIfaceCombination"
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::V1_0::IWifiChip::ChipDebugInfo"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "driverDescription"
-            type: TYPE_STRING
-        }
-        struct_value: {
-            name: "firmwareDescription"
-            type: TYPE_STRING
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::V1_0::IWifiChip::ChipCapabilityMask"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "DEBUG_MEMORY_FIRMWARE_DUMP"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "DEBUG_MEMORY_DRIVER_DUMP"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "DEBUG_RING_BUFFER_CONNECT_EVENT"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "DEBUG_RING_BUFFER_POWER_EVENT"
-            scalar_value: {
-                uint32_t: 8
-            }
-            enumerator: "DEBUG_RING_BUFFER_WAKELOCK_EVENT"
-            scalar_value: {
-                uint32_t: 16
-            }
-            enumerator: "DEBUG_RING_BUFFER_VENDOR_DATA"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "DEBUG_HOST_WAKE_REASON_STATS"
-            scalar_value: {
-                uint32_t: 64
-            }
-            enumerator: "DEBUG_ERROR_ALERTS"
-            scalar_value: {
-                uint32_t: 128
-            }
-        }
-    }
-
-    api: {
-        name: "getId"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "registerEventCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "IWifiChipEventCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "getCapabilities"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::V1_0::IWifiChip::ChipCapabilityMask"
-        }
-    }
-
-    api: {
-        name: "getAvailableModes"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::V1_0::IWifiChip::ChipMode"
-            }
-        }
-    }
-
-    api: {
-        name: "configureChip"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getMode"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "requestChipDebugInfo"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::IWifiChip::ChipDebugInfo"
-        }
-    }
-
-    api: {
-        name: "requestDriverDebugDump"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "requestFirmwareDebugDump"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "createApIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiApIface"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "getApIfaceNames"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRING
-            }
-        }
-    }
-
-    api: {
-        name: "getApIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiApIface"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "removeApIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "createNanIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiNanIface"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "getNanIfaceNames"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRING
-            }
-        }
-    }
-
-    api: {
-        name: "getNanIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiNanIface"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "removeNanIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "createP2pIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiP2pIface"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "getP2pIfaceNames"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRING
-            }
-        }
-    }
-
-    api: {
-        name: "getP2pIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiP2pIface"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "removeP2pIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "createStaIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiStaIface"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "getStaIfaceNames"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRING
-            }
-        }
-    }
-
-    api: {
-        name: "getStaIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiStaIface"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "removeStaIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "createRttController"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiRttController"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiIface"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "getDebugRingBuffersStatus"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::V1_0::WifiDebugRingBufferStatus"
-            }
-        }
-    }
-
-    api: {
-        name: "startLoggingToDebugRingBuffer"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::WifiDebugRingBufferVerboseLevel"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "forceDumpToDebugRingBuffer"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getDebugHostWakeReasonStats"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiDebugHostWakeReasonStats"
-        }
-    }
-
-    api: {
-        name: "enableDebugErrorAlerts"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiChipEventCallback.vts b/wifi/1.0/vts/WifiChipEventCallback.vts
deleted file mode 100644
index c755162..0000000
--- a/wifi/1.0/vts/WifiChipEventCallback.vts
+++ /dev/null
@@ -1,78 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiChipEventCallback"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    api: {
-        name: "onChipReconfigured"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "onChipReconfigureFailure"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-    }
-
-    api: {
-        name: "onIfaceAdded"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::IfaceType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "onIfaceRemoved"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::IfaceType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "onDebugRingBufferDataAvailable"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiDebugRingBufferStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onDebugErrorAlert"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiEventCallback.vts b/wifi/1.0/vts/WifiEventCallback.vts
deleted file mode 100644
index a0cf667..0000000
--- a/wifi/1.0/vts/WifiEventCallback.vts
+++ /dev/null
@@ -1,26 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiEventCallback"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    api: {
-        name: "onStart"
-    }
-
-    api: {
-        name: "onStop"
-    }
-
-    api: {
-        name: "onFailure"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiIface.vts b/wifi/1.0/vts/WifiIface.vts
deleted file mode 100644
index 1434a3e..0000000
--- a/wifi/1.0/vts/WifiIface.vts
+++ /dev/null
@@ -1,33 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiIface"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "getName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiNanIface.vts b/wifi/1.0/vts/WifiNanIface.vts
deleted file mode 100644
index 663b526..0000000
--- a/wifi/1.0/vts/WifiNanIface.vts
+++ /dev/null
@@ -1,278 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiNanIface"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::IWifiIface"
-import: "android.hardware.wifi@1.0::IWifiNanIfaceEventCallback"
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "getName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "registerEventCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "IWifiNanIfaceEventCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "getCapabilitiesRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-    }
-
-    api: {
-        name: "enableRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanEnableRequest"
-        }
-    }
-
-    api: {
-        name: "configRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanConfigRequest"
-        }
-    }
-
-    api: {
-        name: "disableRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-    }
-
-    api: {
-        name: "startPublishRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanPublishRequest"
-        }
-    }
-
-    api: {
-        name: "stopPublishRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-    }
-
-    api: {
-        name: "startSubscribeRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanSubscribeRequest"
-        }
-    }
-
-    api: {
-        name: "stopSubscribeRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-    }
-
-    api: {
-        name: "transmitFollowupRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanTransmitFollowupRequest"
-        }
-    }
-
-    api: {
-        name: "createDataInterfaceRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "deleteDataInterfaceRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "initiateDataPathRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanInitiateDataPathRequest"
-        }
-    }
-
-    api: {
-        name: "respondToDataPathIndicationRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanRespondToDataPathIndicationRequest"
-        }
-    }
-
-    api: {
-        name: "terminateDataPathRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "beaconSdfPayloadRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanBeaconSdfPayloadRequest"
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiNanIfaceEventCallback.vts b/wifi/1.0/vts/WifiNanIfaceEventCallback.vts
deleted file mode 100644
index 30ca88a..0000000
--- a/wifi/1.0/vts/WifiNanIfaceEventCallback.vts
+++ /dev/null
@@ -1,318 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiNanIfaceEventCallback"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    api: {
-        name: "notifyCapabilitiesResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanCapabilities"
-        }
-    }
-
-    api: {
-        name: "notifyEnableResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyConfigResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyDisableResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyStartPublishResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-    }
-
-    api: {
-        name: "notifyStopPublishResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyStartSubscribeResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-    }
-
-    api: {
-        name: "notifyStopSubscribeResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyTransmitFollowupResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyCreateDataInterfaceResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyDeleteDataInterfaceResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyInitiateDataPathResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyRespondToDataPathIndicationResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "notifyTerminateDataPathResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "notifyBeaconSdfPayloadResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "eventClusterEvent"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanClusterEventInd"
-        }
-    }
-
-    api: {
-        name: "eventDisabled"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "eventPublishTerminated"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "eventSubscribeTerminated"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "eventMatch"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanMatchInd"
-        }
-    }
-
-    api: {
-        name: "eventMatchExpired"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "eventFollowupReceived"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanFollowupReceivedInd"
-        }
-    }
-
-    api: {
-        name: "eventTransmitFollowup"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
-        name: "eventDataPathRequest"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanDataPathRequestInd"
-        }
-    }
-
-    api: {
-        name: "eventDataPathConfirm"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanDataPathConfirmInd"
-        }
-    }
-
-    api: {
-        name: "eventDataPathTerminated"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "eventBeaconSdfPayload"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanBeaconSdfPayloadInd"
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiP2pIface.vts b/wifi/1.0/vts/WifiP2pIface.vts
deleted file mode 100644
index b40c81e..0000000
--- a/wifi/1.0/vts/WifiP2pIface.vts
+++ /dev/null
@@ -1,33 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiP2pIface"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::IWifiIface"
-
-interface: {
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "getName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiRttController.vts b/wifi/1.0/vts/WifiRttController.vts
deleted file mode 100644
index 0fd3626..0000000
--- a/wifi/1.0/vts/WifiRttController.vts
+++ /dev/null
@@ -1,172 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiRttController"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::IWifiIface"
-import: "android.hardware.wifi@1.0::IWifiRttControllerEventCallback"
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    api: {
-        name: "getBoundIface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "IWifiIface"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "registerEventCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "IWifiRttControllerEventCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "rangeRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::V1_0::RttConfig"
-            }
-        }
-    }
-
-    api: {
-        name: "rangeCancel"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_ARRAY
-                vector_value: {
-                    vector_size: 6
-                    type: TYPE_SCALAR
-                    scalar_type: "uint8_t"
-                }
-            }
-        }
-    }
-
-    api: {
-        name: "getCapabilities"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::RttCapabilities"
-        }
-    }
-
-    api: {
-        name: "setLci"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::RttLciInformation"
-        }
-    }
-
-    api: {
-        name: "setLcr"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::RttLcrInformation"
-        }
-    }
-
-    api: {
-        name: "getResponderInfo"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::RttResponder"
-        }
-    }
-
-    api: {
-        name: "enableResponder"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiChannelInfo"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::RttResponder"
-        }
-    }
-
-    api: {
-        name: "disableResponder"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiRttControllerEventCallback.vts b/wifi/1.0/vts/WifiRttControllerEventCallback.vts
deleted file mode 100644
index 028fd03..0000000
--- a/wifi/1.0/vts/WifiRttControllerEventCallback.vts
+++ /dev/null
@@ -1,25 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiRttControllerEventCallback"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    api: {
-        name: "onResults"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::V1_0::RttResult"
-            }
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiStaIface.vts b/wifi/1.0/vts/WifiStaIface.vts
deleted file mode 100644
index 0cff792..0000000
--- a/wifi/1.0/vts/WifiStaIface.vts
+++ /dev/null
@@ -1,432 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiStaIface"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::IWifiIface"
-import: "android.hardware.wifi@1.0::IWifiStaIfaceEventCallback"
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::V1_0::IWifiStaIface::StaIfaceCapabilityMask"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "APF"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "BACKGROUND_SCAN"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "LINK_LAYER_STATS"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "RSSI_MONITOR"
-            scalar_value: {
-                uint32_t: 8
-            }
-            enumerator: "CONTROL_ROAMING"
-            scalar_value: {
-                uint32_t: 16
-            }
-            enumerator: "PROBE_IE_WHITELIST"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "SCAN_RAND"
-            scalar_value: {
-                uint32_t: 64
-            }
-            enumerator: "STA_5G"
-            scalar_value: {
-                uint32_t: 128
-            }
-            enumerator: "HOTSPOT"
-            scalar_value: {
-                uint32_t: 256
-            }
-            enumerator: "PNO"
-            scalar_value: {
-                uint32_t: 512
-            }
-            enumerator: "TDLS"
-            scalar_value: {
-                uint32_t: 1024
-            }
-            enumerator: "TDLS_OFFCHANNEL"
-            scalar_value: {
-                uint32_t: 2048
-            }
-            enumerator: "ND_OFFLOAD"
-            scalar_value: {
-                uint32_t: 4096
-            }
-            enumerator: "KEEP_ALIVE"
-            scalar_value: {
-                uint32_t: 8192
-            }
-            enumerator: "DEBUG_PACKET_FATE"
-            scalar_value: {
-                uint32_t: 16384
-            }
-        }
-    }
-
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "getName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "registerEventCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "IWifiStaIfaceEventCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "getCapabilities"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::V1_0::IWifiStaIface::StaIfaceCapabilityMask"
-        }
-    }
-
-    api: {
-        name: "getApfPacketFilterCapabilities"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::StaApfPacketFilterCapabilities"
-        }
-    }
-
-    api: {
-        name: "installApfPacketFilter"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getBackgroundScanCapabilities"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::StaBackgroundScanCapabilities"
-        }
-    }
-
-    api: {
-        name: "getValidFrequenciesForBackgroundScan"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint32_t"
-            }
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::StaBackgroundScanBand"
-        }
-    }
-
-    api: {
-        name: "startBackgroundScan"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::StaBackgroundScanParameters"
-        }
-    }
-
-    api: {
-        name: "stopBackgroundScan"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "enableLinkLayerStatsCollection"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "disableLinkLayerStatsCollection"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-    }
-
-    api: {
-        name: "getLinkLayerStats"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::StaLinkLayerStats"
-        }
-    }
-
-    api: {
-        name: "startRssiMonitoring"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-    api: {
-        name: "stopRssiMonitoring"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getRoamingCapabilities"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::StaRoamingCapabilities"
-        }
-    }
-
-    api: {
-        name: "configureRoaming"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::StaRoamingConfig"
-        }
-    }
-
-    api: {
-        name: "setRoamingState"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::V1_0::StaRoamingState"
-        }
-    }
-
-    api: {
-        name: "enableNdOffload"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "startSendingKeepAlivePackets"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "stopSendingKeepAlivePackets"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "startDebugPacketFateMonitoring"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-    }
-
-    api: {
-        name: "stopDebugPacketFateMonitoring"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-    }
-
-    api: {
-        name: "getDebugTxPacketFates"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::V1_0::WifiDebugTxPacketFateReport"
-            }
-        }
-    }
-
-    api: {
-        name: "getDebugRxPacketFates"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::V1_0::WifiDebugRxPacketFateReport"
-            }
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/WifiStaIfaceEventCallback.vts b/wifi/1.0/vts/WifiStaIfaceEventCallback.vts
deleted file mode 100644
index b04ad26..0000000
--- a/wifi/1.0/vts/WifiStaIfaceEventCallback.vts
+++ /dev/null
@@ -1,65 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "IWifiStaIfaceEventCallback"
-
-package: "android.hardware.wifi"
-
-import: "android.hardware.wifi@1.0::types"
-
-interface: {
-    api: {
-        name: "onBackgroundScanFailure"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "onBackgroundFullScanResult"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::StaScanResult"
-        }
-    }
-
-    api: {
-        name: "onBackgroundScanResults"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::V1_0::StaScanData"
-            }
-        }
-    }
-
-    api: {
-        name: "onRssiThresholdBreached"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "int32_t"
-        }
-    }
-
-}
diff --git a/wifi/1.0/vts/functional/Android.bp b/wifi/1.0/vts/functional/Android.bp
index 422eec5..01eeef5 100644
--- a/wifi/1.0/vts/functional/Android.bp
+++ b/wifi/1.0/vts/functional/Android.bp
@@ -15,12 +15,13 @@
 //
 
 cc_test {
-    name: "wifi_hidl_test",
+    name: "VtsHalWifiV1_0TargetTest",
     gtest: true,
     srcs: [
-        "main.cpp",
+        "VtsHalWifiV1_0TargetTest.cpp",
         "wifi_ap_iface_hidl_test.cpp",
         "wifi_chip_hidl_test.cpp",
+        "wifi_hidl_call_util_selftest.cpp",
         "wifi_hidl_test.cpp",
         "wifi_hidl_test_utils.cpp",
         "wifi_nan_iface_hidl_test.cpp",
@@ -40,11 +41,7 @@
     ],
     static_libs: ["libgtest"],
     cflags: [
-        "--coverage",
         "-O0",
         "-g",
     ],
-    ldflags: [
-        "--coverage"
-    ]
 }
diff --git a/wifi/1.0/vts/functional/Android.mk b/wifi/1.0/vts/functional/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/wifi/1.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-subdir-makefiles)
diff --git a/wifi/1.0/vts/functional/main.cpp b/wifi/1.0/vts/functional/VtsHalWifiV1_0TargetTest.cpp
similarity index 100%
rename from wifi/1.0/vts/functional/main.cpp
rename to wifi/1.0/vts/functional/VtsHalWifiV1_0TargetTest.cpp
diff --git a/wifi/1.0/vts/functional/wifi_hidl_call_util.h b/wifi/1.0/vts/functional/wifi_hidl_call_util.h
new file mode 100644
index 0000000..03200a0
--- /dev/null
+++ b/wifi/1.0/vts/functional/wifi_hidl_call_util.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <functional>
+#include <tuple>
+#include <type_traits>
+#include <utility>
+
+#include <gtest/gtest.h>
+
+namespace {
+namespace detail {
+template <typename>
+struct functionArgSaver;
+
+// Provides a std::function that takes one argument, and a buffer
+// wherein the function will store its argument. The buffer has
+// the same type as the argument, but with const and reference
+// modifiers removed.
+template <typename ArgT>
+struct functionArgSaver<std::function<void(ArgT)>> final {
+    using StorageT = typename std::remove_const<
+        typename std::remove_reference<ArgT>::type>::type;
+
+    std::function<void(ArgT)> saveArgs = [this](ArgT arg) {
+        this->saved_values = arg;
+    };
+
+    StorageT saved_values;
+};
+
+// Provides a std::function that takes two arguments, and a buffer
+// wherein the function will store its arguments. The buffer is a
+// std::pair, whose elements have the same types as the arguments
+// (but with const and reference modifiers removed).
+template <typename Arg1T, typename Arg2T>
+struct functionArgSaver<std::function<void(Arg1T, Arg2T)>> final {
+    using StorageT =
+        std::pair<typename std::remove_const<
+                      typename std::remove_reference<Arg1T>::type>::type,
+                  typename std::remove_const<
+                      typename std::remove_reference<Arg2T>::type>::type>;
+
+    std::function<void(Arg1T, Arg2T)> saveArgs = [this](Arg1T arg1,
+                                                        Arg2T arg2) {
+        this->saved_values = {arg1, arg2};
+    };
+
+    StorageT saved_values;
+};
+
+// Provides a std::function that takes three or more arguments, and a
+// buffer wherein the function will store its arguments. The buffer is a
+// std::tuple whose elements have the same types as the arguments (but
+// with const and reference modifiers removed).
+template <typename... ArgT>
+struct functionArgSaver<std::function<void(ArgT...)>> final {
+    using StorageT = std::tuple<typename std::remove_const<
+        typename std::remove_reference<ArgT>::type>::type...>;
+
+    std::function<void(ArgT...)> saveArgs = [this](ArgT... arg) {
+        this->saved_values = {arg...};
+    };
+
+    StorageT saved_values;
+};
+
+// Invokes |method| on |object|, providing |method| a CallbackT as the
+// final argument. Returns a copy of the parameters that |method| provided
+// to CallbackT. (The parameters are returned by value.)
+template <typename CallbackT, typename MethodT, typename ObjectT,
+          typename... ArgT>
+typename functionArgSaver<CallbackT>::StorageT invokeMethod(
+    MethodT method, ObjectT object, ArgT&&... methodArg) {
+    functionArgSaver<CallbackT> result_buffer;
+    const auto& res = ((*object).*method)(std::forward<ArgT>(methodArg)...,
+                                          result_buffer.saveArgs);
+    EXPECT_TRUE(res.isOk());
+    return result_buffer.saved_values;
+}
+}  // namespace detail
+}  // namespace
+
+// Invokes |method| on |strong_pointer|, passing provided arguments through to
+// |method|.
+//
+// Returns either:
+// - A copy of the result callback parameter (for callbacks with a single
+//   parameter), OR
+// - A pair containing a copy of the result callback parameters (for callbacks
+//   with two parameters), OR
+// - A tuple containing a copy of the result callback paramters (for callbacks
+//   with three or more parameters).
+//
+// Example usage:
+//   EXPECT_EQ(WifiStatusCode::SUCCESS,
+//       HIDL_INVOKE(strong_pointer, methodReturningWifiStatus).code);
+//   EXPECT_EQ(WifiStatusCode::SUCCESS,
+//       HIDL_INVOKE(strong_pointer, methodReturningWifiStatusAndOneMore)
+//         .first.code);
+//   EXPECT_EQ(WifiStatusCode::SUCCESS, std::get<0>(
+//       HIDL_INVOKE(strong_pointer, methodReturningWifiStatusAndTwoMore))
+//         .code);
+#define HIDL_INVOKE(strong_pointer, method, ...)                              \
+    (detail::invokeMethod<                                                    \
+        std::remove_reference<decltype(*strong_pointer)>::type::method##_cb>( \
+        &std::remove_reference<decltype(*strong_pointer)>::type::method,      \
+        strong_pointer, ##__VA_ARGS__))
diff --git a/wifi/1.0/vts/functional/wifi_hidl_call_util_selftest.cpp b/wifi/1.0/vts/functional/wifi_hidl_call_util_selftest.cpp
new file mode 100644
index 0000000..129bdb2
--- /dev/null
+++ b/wifi/1.0/vts/functional/wifi_hidl_call_util_selftest.cpp
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <functional>
+#include <type_traits>
+
+#include <hidl/Status.h>
+#include <utils/RefBase.h>
+#include <utils/StrongPointer.h>
+
+#include "wifi_hidl_call_util.h"
+
+namespace {
+/*
+ * Example of a user-defined data-type.
+ *
+ * Used to verify that, within the internals of HIDL_INVOKE,
+ * reference parameters are stored by copy.
+ */
+class Dummy {};
+
+/*
+ * Example of what a HIDL-generated proxy might look like.
+ */
+class IExample : public ::android::RefBase {
+   public:
+    // The callback type, for a method called startWithCallbackCopy, which
+    // has a callback that takes an |int|. Both the name, and the value,
+    // must match what would appear in HIDL-generated code.
+    using startWithCallbackCopy_cb = std::function<void(int)>;
+
+    // The callback type, for a method called startWithCallbackReference, which
+    // has a callback that takes an |int|. Both the name, and the value,
+    // must match what would appear in HIDL-generated code.
+    using startWithCallbackReference_cb = std::function<void(int)>;
+
+    // Constants which allow tests to verify that the proxy methods can
+    // correctly return a value. We use different values for by-copy and
+    // by-reference, to double-check that a call was dispatched properly.
+    static constexpr int kByCopyResult = 42;
+    static constexpr int kByReferenceResult = 420;
+
+    // Example of what a no-arg method would look like, if the callback
+    // is passed by-value.
+    ::android::hardware::Return<void> startWithCallbackCopy(
+        startWithCallbackCopy_cb _hidl_cb) {
+        _hidl_cb(kByCopyResult);
+        return ::android::hardware::Void();
+    }
+    // Example of what a no-arg method would look like, if the callback
+    // is passed by const-reference.
+    ::android::hardware::Return<void> startWithCallbackReference(
+        const startWithCallbackReference_cb& _hidl_cb) {
+        _hidl_cb(kByReferenceResult);
+        return ::android::hardware::Void();
+    }
+};
+
+constexpr int IExample::kByCopyResult;
+constexpr int IExample::kByReferenceResult;
+}  // namespace
+
+static_assert(std::is_same<int, detail::functionArgSaver<
+                                    std::function<void(int)>>::StorageT>::value,
+              "Single-arg result should be stored directly.");
+
+static_assert(
+    std::is_same<std::pair<int, long>, detail::functionArgSaver<std::function<
+                                           void(int, long)>>::StorageT>::value,
+    "Two-arg result should be stored as a pair.");
+
+static_assert(
+    std::is_same<std::tuple<char, int, long>,
+                 detail::functionArgSaver<
+                     std::function<void(char, int, long)>>::StorageT>::value,
+    "Three-arg result should be stored as a tuple.");
+
+static_assert(std::is_same<Dummy, detail::functionArgSaver<std::function<
+                                      void(const Dummy&)>>::StorageT>::value,
+              "Reference should be stored by copy.");
+
+/*
+ * Verifies that HIDL_INVOKE can be used with methods that take the result
+ * callback as a by-value parameter. (This reflects the current implementation
+ * of HIDL-generated code.)
+ */
+TEST(HidlInvokeTest, WorksWithMethodThatTakesResultCallbackByValue) {
+    ::android::sp<IExample> sp = new IExample();
+    EXPECT_EQ(IExample::kByCopyResult, HIDL_INVOKE(sp, startWithCallbackCopy));
+}
+
+/*
+ * Verifies that HIDL_INVOKE can be used with methods that take the result
+ * callback as a const-reference parameter. (This ensures that HIDL_INVOKE will
+ * continue to work, if the HIDL-generated code switches to const-ref.)
+ */
+TEST(HidlInvokeTest, WorksWithMethodThatTakesResultCallbackByConstReference) {
+    ::android::sp<IExample> sp = new IExample();
+    EXPECT_EQ(IExample::kByReferenceResult,
+              HIDL_INVOKE(sp, startWithCallbackReference));
+}
diff --git a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
index 050bba3..8f34a88 100644
--- a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
+++ b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
@@ -16,6 +16,7 @@
 
 #include <gtest/gtest.h>
 
+#include "wifi_hidl_call_util.h"
 #include "wifi_hidl_test_utils.h"
 
 using ::android::hardware::wifi::V1_0::IWifi;
@@ -52,41 +53,23 @@
         return nullptr;
     }
 
-    bool operation_failed = false;
-    wifi->start([&](WifiStatus status) {
-        if (status.code != WifiStatusCode::SUCCESS) {
-            operation_failed = true;
-        }
-    });
-    if (operation_failed) {
+    if (HIDL_INVOKE(wifi, start).code != WifiStatusCode::SUCCESS) {
         return nullptr;
     }
 
-    std::vector<ChipId> wifi_chip_ids;
-    wifi->getChipIds(
-        [&](const WifiStatus& status, const hidl_vec<ChipId>& chip_ids) {
-            if (status.code != WifiStatusCode::SUCCESS) {
-                operation_failed = true;
-            }
-            wifi_chip_ids = chip_ids;
-        });
-    // We don't expect more than 1 chip currently.
-    if (operation_failed || wifi_chip_ids.size() != 1) {
+    const auto& status_and_chip_ids = HIDL_INVOKE(wifi, getChipIds);
+    const auto& chip_ids = status_and_chip_ids.second;
+    if (status_and_chip_ids.first.code != WifiStatusCode::SUCCESS ||
+        chip_ids.size() != 1) {
         return nullptr;
     }
 
-    sp<IWifiChip> wifi_chip;
-    wifi->getChip(wifi_chip_ids[0],
-                  [&](const WifiStatus& status, const sp<IWifiChip>& chip) {
-                      if (status.code != WifiStatusCode::SUCCESS) {
-                          operation_failed = true;
-                      }
-                      wifi_chip = chip;
-                  });
-    if (operation_failed) {
+    const auto& status_and_chip = HIDL_INVOKE(wifi, getChip, chip_ids[0]);
+    if (status_and_chip.first.code != WifiStatusCode::SUCCESS) {
         return nullptr;
     }
-    return wifi_chip;
+
+    return status_and_chip.second;
 }
 
 // Since we currently only support one iface of each type. Just iterate thru the
@@ -116,30 +99,18 @@
 
 bool configureChipToSupportIfaceType(const sp<IWifiChip>& wifi_chip,
                                      IfaceType type) {
-    bool operation_failed = false;
-    std::vector<IWifiChip::ChipMode> chip_modes;
-    wifi_chip->getAvailableModes(
-        [&](WifiStatus status, const hidl_vec<IWifiChip::ChipMode>& modes) {
-            if (status.code != WifiStatusCode::SUCCESS) {
-                operation_failed = true;
-            }
-            chip_modes = modes;
-        });
-    if (operation_failed) {
+    const auto& status_and_modes = HIDL_INVOKE(wifi_chip, getAvailableModes);
+    if (status_and_modes.first.code != WifiStatusCode::SUCCESS) {
         return false;
     }
 
     ChipModeId mode_id;
-    if (!findModeToSupportIfaceType(type, chip_modes, &mode_id)) {
+    if (!findModeToSupportIfaceType(type, status_and_modes.second, &mode_id)) {
         return false;
     }
 
-    wifi_chip->configureChip(mode_id, [&](WifiStatus status) {
-        if (status.code != WifiStatusCode::SUCCESS) {
-            operation_failed = true;
-        }
-    });
-    if (operation_failed) {
+    if (HIDL_INVOKE(wifi_chip, configureChip, mode_id).code !=
+        WifiStatusCode::SUCCESS) {
         return false;
     }
     return true;
@@ -154,19 +125,11 @@
         return nullptr;
     }
 
-    bool operation_failed = false;
-    sp<IWifiApIface> wifi_ap_iface;
-    wifi_chip->createApIface(
-        [&](const WifiStatus& status, const sp<IWifiApIface>& iface) {
-            if (status.code != WifiStatusCode::SUCCESS) {
-                operation_failed = true;
-            }
-            wifi_ap_iface = iface;
-        });
-    if (operation_failed) {
+    const auto& status_and_iface = HIDL_INVOKE(wifi_chip, createApIface);
+    if (status_and_iface.first.code != WifiStatusCode::SUCCESS) {
         return nullptr;
     }
-    return wifi_ap_iface;
+    return status_and_iface.second;
 }
 
 sp<IWifiNanIface> getWifiNanIface() {
@@ -178,19 +141,11 @@
         return nullptr;
     }
 
-    bool operation_failed = false;
-    sp<IWifiNanIface> wifi_nan_iface;
-    wifi_chip->createNanIface(
-        [&](const WifiStatus& status, const sp<IWifiNanIface>& iface) {
-            if (status.code != WifiStatusCode::SUCCESS) {
-                operation_failed = true;
-            }
-            wifi_nan_iface = iface;
-        });
-    if (operation_failed) {
+    const auto& status_and_iface = HIDL_INVOKE(wifi_chip, createNanIface);
+    if (status_and_iface.first.code != WifiStatusCode::SUCCESS) {
         return nullptr;
     }
-    return wifi_nan_iface;
+    return status_and_iface.second;
 }
 
 sp<IWifiP2pIface> getWifiP2pIface() {
@@ -202,19 +157,11 @@
         return nullptr;
     }
 
-    bool operation_failed = false;
-    sp<IWifiP2pIface> wifi_p2p_iface;
-    wifi_chip->createP2pIface(
-        [&](const WifiStatus& status, const sp<IWifiP2pIface>& iface) {
-            if (status.code != WifiStatusCode::SUCCESS) {
-                operation_failed = true;
-            }
-            wifi_p2p_iface = iface;
-        });
-    if (operation_failed) {
+    const auto& status_and_iface = HIDL_INVOKE(wifi_chip, createP2pIface);
+    if (status_and_iface.first.code != WifiStatusCode::SUCCESS) {
         return nullptr;
     }
-    return wifi_p2p_iface;
+    return status_and_iface.second;
 }
 
 sp<IWifiStaIface> getWifiStaIface() {
@@ -226,19 +173,11 @@
         return nullptr;
     }
 
-    bool operation_failed = false;
-    sp<IWifiStaIface> wifi_sta_iface;
-    wifi_chip->createStaIface(
-        [&](const WifiStatus& status, const sp<IWifiStaIface>& iface) {
-            if (status.code != WifiStatusCode::SUCCESS) {
-                operation_failed = true;
-            }
-            wifi_sta_iface = iface;
-        });
-    if (operation_failed) {
+    const auto& status_and_iface = HIDL_INVOKE(wifi_chip, createStaIface);
+    if (status_and_iface.first.code != WifiStatusCode::SUCCESS) {
         return nullptr;
     }
-    return wifi_sta_iface;
+    return status_and_iface.second;
 }
 
 sp<IWifiRttController> getWifiRttController() {
@@ -251,26 +190,16 @@
         return nullptr;
     }
 
-    bool operation_failed = false;
-    sp<IWifiRttController> wifi_rtt_controller;
-    wifi_chip->createRttController(
-        wifi_sta_iface, [&](const WifiStatus& status,
-                            const sp<IWifiRttController>& controller) {
-            if (status.code != WifiStatusCode::SUCCESS) {
-                operation_failed = true;
-            }
-            wifi_rtt_controller = controller;
-        });
-    if (operation_failed) {
+    const auto& status_and_controller =
+        HIDL_INVOKE(wifi_chip, createRttController, wifi_sta_iface);
+    if (status_and_controller.first.code != WifiStatusCode::SUCCESS) {
         return nullptr;
     }
-    return wifi_rtt_controller;
+    return status_and_controller.second;
 }
 
 void stopWifi() {
     sp<IWifi> wifi = getWifi();
     ASSERT_NE(wifi, nullptr);
-    wifi->stop([](const WifiStatus& status) {
-        ASSERT_EQ(status.code, WifiStatusCode::SUCCESS);
-    });
+    ASSERT_EQ(HIDL_INVOKE(wifi, stop).code, WifiStatusCode::SUCCESS);
 }
diff --git a/wifi/1.0/vts/types.vts b/wifi/1.0/vts/types.vts
deleted file mode 100644
index fd60d4e..0000000
--- a/wifi/1.0/vts/types.vts
+++ /dev/null
@@ -1,2846 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.wifi"
-
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiStatusCode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "ERROR_WIFI_CHIP_INVALID"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "ERROR_WIFI_IFACE_INVALID"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "ERROR_WIFI_RTT_CONTROLLER_INVALID"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "ERROR_NOT_SUPPORTED"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "ERROR_NOT_AVAILABLE"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "ERROR_NOT_STARTED"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "ERROR_INVALID_ARGS"
-        scalar_value: {
-            uint32_t: 7
-        }
-        enumerator: "ERROR_BUSY"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "ERROR_UNKNOWN"
-        scalar_value: {
-            uint32_t: 9
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiStatus"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "code"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::WifiStatusCode"
-    }
-    struct_value: {
-        name: "description"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::IfaceType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "STA"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "AP"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "P2P"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "NAN"
-        scalar_value: {
-            uint32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiChannelWidthInMhz"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "WIDTH_20"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "WIDTH_40"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "WIDTH_80"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "WIDTH_160"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "WIDTH_80P80"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "WIDTH_5"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "WIDTH_10"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "WIDTH_INVALID"
-        scalar_value: {
-            uint32_t: 4294967295
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiChannelInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "width"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::WifiChannelWidthInMhz"
-    }
-    struct_value: {
-        name: "centerFreq"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "centerFreq0"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "centerFreq1"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiInformationElement"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "id"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "data"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiRatePreamble"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "OFDM"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "CCK"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "HT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "VHT"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "RESERVED"
-        scalar_value: {
-            uint32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiRateNss"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "NSS_1x1"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "NSS_2x2"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "NSS_3x3"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "NSS_4x4"
-        scalar_value: {
-            uint32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiRateInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "preamble"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::WifiRatePreamble"
-    }
-    struct_value: {
-        name: "nss"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::WifiRateNss"
-    }
-    struct_value: {
-        name: "bw"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::WifiChannelWidthInMhz"
-    }
-    struct_value: {
-        name: "rateMcsIdx"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "bitRateInKbps"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaApfPacketFilterCapabilities"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "version"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxLength"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaBackgroundScanCapabilities"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "maxCacheSize"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxBuckets"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxApCachePerScan"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxReportingThreshold"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaBackgroundScanBand"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "BAND_UNSPECIFIED"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "BAND_24GHZ"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "BAND_5GHZ"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "BAND_5GHZ_DFS"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "BAND_5GHZ_WITH_DFS"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "BAND_24GHZ_5GHZ"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "BAND_24GHZ_5GHZ_WITH_DFS"
-        scalar_value: {
-            uint32_t: 7
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaBackgroundScanBucketEventReportSchemeMask"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "EACH_SCAN"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "FULL_RESULTS"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "NO_BATCH"
-        scalar_value: {
-            uint32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaBackgroundScanBucketParameters"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "band"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::StaBackgroundScanBand"
-    }
-    struct_value: {
-        name: "frequencies"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-    struct_value: {
-        name: "periodInMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "eventReportScheme"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::StaBackgroundScanBucketEventReportSchemeMask"
-    }
-    struct_value: {
-        name: "exponentialMaxPeriodInMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "exponentialBase"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "exponentialStepCount"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaBackgroundScanParameters"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "basePeriodInMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxApPerScan"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "reportThresholdPercent"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "reportThresholdNumScans"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "buckets"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::StaBackgroundScanBucketParameters"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaLinkLayerIfacePacketStats"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "rxMpdu"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "txMpdu"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "lostMpdu"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "retries"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaLinkLayerIfaceStats"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "beaconRx"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "avgRssiMgmt"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "wmeBePktStats"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::StaLinkLayerIfacePacketStats"
-    }
-    struct_value: {
-        name: "wmeBkPktStats"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::StaLinkLayerIfacePacketStats"
-    }
-    struct_value: {
-        name: "wmeViPktStats"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::StaLinkLayerIfacePacketStats"
-    }
-    struct_value: {
-        name: "wmeVoPktStats"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::StaLinkLayerIfacePacketStats"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaLinkLayerRadioStats"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "onTimeInMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "txTimeInMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "txTimeInMsPerLevel"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-    struct_value: {
-        name: "rxTimeInMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "onTimeInMsForScan"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaLinkLayerStats"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "iface"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::StaLinkLayerIfaceStats"
-    }
-    struct_value: {
-        name: "radio"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::StaLinkLayerRadioStats"
-    }
-    struct_value: {
-        name: "timeStampInMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaScanResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "timeStampInUs"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "ssid"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "bssid"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "rssi"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "frequency"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "beaconPeriodInMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "capability"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "informationElements"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiInformationElement"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaScanDataFlagMask"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "int32_t"
-
-        enumerator: "INTERRUPTED"
-        scalar_value: {
-            int32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaScanData"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "flags"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::StaScanDataFlagMask"
-    }
-    struct_value: {
-        name: "bucketsScanned"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "results"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::StaScanResult"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaRoamingCapabilities"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "maxBlacklistSize"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxWhitelistSize"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaRoamingConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "bssidBlacklist"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-    struct_value: {
-        name: "ssidWhitelist"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 32
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::StaRoamingState"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint8_t"
-
-        enumerator: "ENABLED"
-        scalar_value: {
-            uint8_t: 0
-        }
-        enumerator: "DISABLED"
-        scalar_value: {
-            uint8_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanStatusType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "INTERNAL_FAILURE"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "PROTOCOL_FAILURE"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "INVALID_SESSION_ID"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "NO_RESOURCES_AVAILABLE"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "INVALID_ARGS"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "INVALID_PEER_ID"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "INVALID_NDP_ID"
-        scalar_value: {
-            uint32_t: 7
-        }
-        enumerator: "NAN_NOT_ALLOWED"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "NO_OTA_ACK"
-        scalar_value: {
-            uint32_t: 9
-        }
-        enumerator: "ALREADY_ENABLED"
-        scalar_value: {
-            uint32_t: 10
-        }
-        enumerator: "FOLLOWUP_TX_QUEUE_FULL"
-        scalar_value: {
-            uint32_t: 11
-        }
-        enumerator: "UNSUPPORTED_CONCURRENCY_NAN_DISABLED"
-        scalar_value: {
-            uint32_t: 12
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanBandIndex"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "NAN_BAND_24GHZ"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "NAN_BAND_5GHZ"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiNanStatus"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "status"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::NanStatusType"
-    }
-    struct_value: {
-        name: "description"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanMatchAlg"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "MATCH_ONCE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "MATCH_CONTINUOUS"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "MATCH_NEVER"
-        scalar_value: {
-            uint32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanPublishType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "UNSOLICITED"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "SOLICITED"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "UNSOLICITED_SOLICITED"
-        scalar_value: {
-            uint32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanTxType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "BROADCAST"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "UNICAST"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanSubscribeType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "PASSIVE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "ACTIVE"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanSrfType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "BLOOM_FILTER"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "PARTIAL_MAC_ADDR"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanDataPathChannelCfg"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "CHANNEL_NOT_REQUESTED"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "REQUEST_CHANNEL_SETUP"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "FORCE_CHANNEL_SETUP"
-        scalar_value: {
-            uint32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanBandSpecificConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "rssiClose"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "rssiMiddle"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "rssiProximity"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "dwellTimeMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "scanPeriodSec"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "validDiscoveryWindowIntervalVal"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "discoveryWindowIntervalVal"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanDebugConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "validClusterIdVals"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "clusterIdLowVal"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "clusterIdHighVal"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "validIntfAddrVal"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "intfAddrVal"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "validOuiVal"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "ouiVal"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "validRandomFactorForceVal"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "randomFactorForceVal"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "validHopCountForceVal"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "hopCountForceVal"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "validDiscoveryChannelVal"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "discoveryChannelMhzVal"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-    struct_value: {
-        name: "validUseBeaconsInBandVal"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "useBeaconsInBandVal"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-    struct_value: {
-        name: "validUseSdfInBandVal"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "useSdfInBandVal"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanConfigRequest"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "masterPref"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "disableDiscoveryAddressChangeIndication"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "disableStartedClusterIndication"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "disableJoinedClusterIndication"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "includeServiceIdsInBeacon"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "numberOfServiceIdsInBeacon"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "rssiWindowSize"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "macAddressRandomizationIntervalSec"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "acceptRangingRequests"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "bandSpecificConfig"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanBandSpecificConfig"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanEnableRequest"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "operateInBand"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-    struct_value: {
-        name: "hopCountMax"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "configParams"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::NanConfigRequest"
-    }
-    struct_value: {
-        name: "debugConfigs"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::NanDebugConfig"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanCipherSuiteType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SHARED_KEY_128_MASK"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "SHARED_KEY_256_MASK"
-        scalar_value: {
-            uint32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanRangingIndication"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "CONTINUOUS_INDICATION_MASK"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "INGRESS_MET_MASK"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "EGRESS_MET_MASK"
-        scalar_value: {
-            uint32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanDiscoveryCommonConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "sessionId"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "ttlSec"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "discoveryWindowPeriod"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "discoveryCount"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "serviceName"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "discoveryMatchIndicator"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::NanMatchAlg"
-    }
-    struct_value: {
-        name: "serviceSpecificInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "rxMatchFilter"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "txMatchFilter"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "useRssiThreshold"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "disableDiscoveryTerminationIndication"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "disableMatchExpirationIndication"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "disableFollowupReceivedIndication"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "supportedCipherTypes"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::NanCipherSuiteType"
-    }
-    struct_value: {
-        name: "pmk"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "securityEnabledInNdp"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "rangingRequired"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "rangingIntervalMsec"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "configRangingIndications"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::NanRangingIndication"
-    }
-    struct_value: {
-        name: "distanceIngressCm"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "distanceEgressCm"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanPublishRequest"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "baseConfigs"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::NanDiscoveryCommonConfig"
-    }
-    struct_value: {
-        name: "publishType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::NanPublishType"
-    }
-    struct_value: {
-        name: "txType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::NanTxType"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanSubscribeRequest"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "baseConfigs"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::NanDiscoveryCommonConfig"
-    }
-    struct_value: {
-        name: "subscribeType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::NanSubscribeType"
-    }
-    struct_value: {
-        name: "srfType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::NanSrfType"
-    }
-    struct_value: {
-        name: "srfRespondIfInAddressSet"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "shouldUseSrf"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "isSsiRequiredForMatch"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "intfAddr"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanTransmitFollowupRequest"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "discoverySessionId"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "peerId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "addr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "isHighPriority"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "shouldUseDiscoveryWindow"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "message"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "disableFollowupResultIndication"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanInitiateDataPathRequest"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "peerId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "peerDiscMacAddr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "channelRequestType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::NanDataPathChannelCfg"
-    }
-    struct_value: {
-        name: "channel"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "ifaceName"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "securityRequired"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "appInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "supportedCipherTypes"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::NanCipherSuiteType"
-    }
-    struct_value: {
-        name: "pmk"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanRespondToDataPathIndicationRequest"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "acceptRequest"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "ndpInstanceId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "ifaceName"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "securityRequired"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "appInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "supportedCipherTypes"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::NanCipherSuiteType"
-    }
-    struct_value: {
-        name: "pmk"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanBeaconSdfPayloadRequest"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "transmitInNext16dws"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "transmitInDiscoveryBeacon"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "transmitInSyncBeacon"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "transmitInServiceDiscoveryFrame"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "vendorOui"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "vsa"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanCapabilities"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "maxConcurrentClusters"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxPublishes"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxSubscribes"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxServiceNameLen"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxMatchFilterLen"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxTotalMatchFilterLen"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxServiceSpecificInfoLen"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxVsaDataLen"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxNdiInterfaces"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxNdpSessions"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxAppInfoLen"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxQueuedTransmitFollowupMsgs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "maxSubscribeInterfaceAddresses"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "supportedCipherSuites"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::NanCipherSuiteType"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanMatchInd"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "discoverySessionId"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "peerId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "addr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "serviceSpecificInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "matchFilter"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "matchOccuredInBeaconFlag"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "outOfResourceFlag"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "rssiValue"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "peerSupportedCipherTypes"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::NanCipherSuiteType"
-    }
-    struct_value: {
-        name: "peerRequiresSecurityEnabledInNdp"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "peerRequiresRanging"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "rangingMeasurementInCm"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "rangingIndicationType"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::NanRangingIndication"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanFollowupReceivedInd"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "discoverySessionId"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "peerId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "addr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "receivedInFaw"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "message"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanClusterEventType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "DISCOVERY_MAC_ADDRESS_CHANGED"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "STARTED_CLUSTER"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "JOINED_CLUSTER"
-        scalar_value: {
-            uint32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanClusterEventInd"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "eventType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::NanClusterEventType"
-    }
-    struct_value: {
-        name: "addr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanVsaRxFrameMask"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "DISCOVERY_BEACON_MASK"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "SYNC_BEACON_MASK"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "SERVICE_DISCOVERY_MASK"
-        scalar_value: {
-            uint32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanBeaconSdfPayloadInd"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "addr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "isVsaReceived"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "vsaReceivedOnFrames"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::NanVsaRxFrameMask"
-    }
-    struct_value: {
-        name: "vsaVendorOui"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "vsa"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "isBeaconSdfPayloadReceived"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "beaconSdfPayloadData"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanDataPathRequestInd"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "discoverySessionId"
-        type: TYPE_SCALAR
-        scalar_type: "uint16_t"
-    }
-    struct_value: {
-        name: "peerDiscMacAddr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "ndpInstanceId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "securityRequired"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "appInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::NanDataPathConfirmInd"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "ndpInstanceId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "dataPathSetupSuccess"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "peerNdiMacAddr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "appInfo"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "status"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttStatus"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "FAILURE"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "FAIL_NO_RSP"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "FAIL_REJECTED"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "FAIL_NOT_SCHEDULED_YET"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "FAIL_TM_TIMEOUT"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "FAIL_AP_ON_DIFF_CHANNEL"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "FAIL_NO_CAPABILITY"
-        scalar_value: {
-            uint32_t: 7
-        }
-        enumerator: "ABORTED"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "FAIL_INVALID_TS"
-        scalar_value: {
-            uint32_t: 9
-        }
-        enumerator: "FAIL_PROTOCOL"
-        scalar_value: {
-            uint32_t: 10
-        }
-        enumerator: "FAIL_SCHEDULE"
-        scalar_value: {
-            uint32_t: 11
-        }
-        enumerator: "FAIL_BUSY_TRY_LATER"
-        scalar_value: {
-            uint32_t: 12
-        }
-        enumerator: "INVALID_REQ"
-        scalar_value: {
-            uint32_t: 13
-        }
-        enumerator: "NO_WIFI"
-        scalar_value: {
-            uint32_t: 14
-        }
-        enumerator: "FAIL_FTM_PARAM_OVERRIDE"
-        scalar_value: {
-            uint32_t: 15
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttPeerType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "AP"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "STA"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "P2P_GO"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "P2P_CLIENT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "NAN"
-        scalar_value: {
-            uint32_t: 5
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttBw"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "BW_5MHZ"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "BW_10MHZ"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "BW_20MHZ"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "BW_40MHZ"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "BW_80MHZ"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "BW_160MHZ"
-        scalar_value: {
-            uint32_t: 32
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttPreamble"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "LEGACY"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "HT"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "VHT"
-        scalar_value: {
-            uint32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "ONE_SIDED"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "TWO_SIDED"
-        scalar_value: {
-            uint32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttConfig"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "addr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::RttType"
-    }
-    struct_value: {
-        name: "peer"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::RttPeerType"
-    }
-    struct_value: {
-        name: "channel"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiChannelInfo"
-    }
-    struct_value: {
-        name: "burstPeriod"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "numBurst"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "numFramesPerBurst"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "numRetriesPerRttFrame"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "numRetriesPerFtmr"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "mustRequestLci"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "mustRequestLcr"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "burstDuration"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "preamble"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::RttPreamble"
-    }
-    struct_value: {
-        name: "bw"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::RttBw"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttResult"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "addr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "burstNum"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "measurementNumber"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "successNumber"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "numberPerBurstPeer"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "status"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::RttStatus"
-    }
-    struct_value: {
-        name: "retryAfterDuration"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "type"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::RttType"
-    }
-    struct_value: {
-        name: "rssi"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "rssiSpread"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "txRate"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiRateInfo"
-    }
-    struct_value: {
-        name: "rxRate"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiRateInfo"
-    }
-    struct_value: {
-        name: "rtt"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "rttSd"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "rttSpread"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "distanceInMm"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "distanceSdInMm"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "distanceSpreadInMm"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "timeStampInUs"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "burstDurationInMs"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "negotiatedBurstNum"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "lci"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiInformationElement"
-    }
-    struct_value: {
-        name: "lcr"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiInformationElement"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttCapabilities"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "rttOneSidedSupported"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "rttFtmSupported"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "lciSupported"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "lcrSupported"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "responderSupported"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "preambleSupport"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::RttPreamble"
-    }
-    struct_value: {
-        name: "bwSupport"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::RttBw"
-    }
-    struct_value: {
-        name: "mcVersion"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttMotionPattern"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "NOT_EXPECTED"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "EXPECTED"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            uint32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttLciInformation"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "latitude"
-        type: TYPE_SCALAR
-        scalar_type: "int64_t"
-    }
-    struct_value: {
-        name: "longitude"
-        type: TYPE_SCALAR
-        scalar_type: "int64_t"
-    }
-    struct_value: {
-        name: "altitude"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "latitudeUnc"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "longitudeUnc"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "altitudeUnc"
-        type: TYPE_SCALAR
-        scalar_type: "uint8_t"
-    }
-    struct_value: {
-        name: "motionPattern"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::RttMotionPattern"
-    }
-    struct_value: {
-        name: "floor"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "heightAboveFloor"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-    struct_value: {
-        name: "heightUnc"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttLcrInformation"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "countryCode"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 2
-            type: TYPE_SCALAR
-            scalar_type: "int8_t"
-        }
-    }
-    struct_value: {
-        name: "civicInfo"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::RttResponder"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "channel"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiChannelInfo"
-    }
-    struct_value: {
-        name: "preamble"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::RttPreamble"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugRingBufferFlags"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "HAS_BINARY_ENTRIES"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "HAS_ASCII_ENTRIES"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "HAS_PER_PACKET_ENTRIES"
-        scalar_value: {
-            uint32_t: 4
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugRingBufferStatus"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "ringName"
-        type: TYPE_STRING
-    }
-    struct_value: {
-        name: "flags"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "ringId"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "sizeInBytes"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "freeSizeInBytes"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "verboseLevel"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugRingBufferVerboseLevel"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "NONE"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "DEFAULT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "VERBOSE"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "EXCESSIVE"
-        scalar_value: {
-            uint32_t: 3
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugTxPacketFate"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "ACKED"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "SENT"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "FW_QUEUED"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "FW_DROP_INVALID"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "FW_DROP_NOBUFS"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "FW_DROP_OTHER"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "DRV_QUEUED"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "DRV_DROP_INVALID"
-        scalar_value: {
-            uint32_t: 7
-        }
-        enumerator: "DRV_DROP_NOBUFS"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "DRV_DROP_OTHER"
-        scalar_value: {
-            uint32_t: 9
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugRxPacketFate"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "FW_QUEUED"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "FW_DROP_FILTER"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "FW_DROP_INVALID"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "FW_DROP_NOBUFS"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "FW_DROP_OTHER"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "DRV_QUEUED"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "DRV_DROP_FILTER"
-        scalar_value: {
-            uint32_t: 7
-        }
-        enumerator: "DRV_DROP_INVALID"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "DRV_DROP_NOBUFS"
-        scalar_value: {
-            uint32_t: 9
-        }
-        enumerator: "DRV_DROP_OTHER"
-        scalar_value: {
-            uint32_t: 10
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugPacketFateFrameType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "UNKNOWN"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "ETHERNET_II"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "MGMT_80211"
-        scalar_value: {
-            uint32_t: 2
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugPacketFateFrameInfo"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "frameType"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::WifiDebugPacketFateFrameType"
-    }
-    struct_value: {
-        name: "frameLen"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "driverTimestampUsec"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "firmwareTimestampUsec"
-        type: TYPE_SCALAR
-        scalar_type: "uint64_t"
-    }
-    struct_value: {
-        name: "frameContent"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugTxPacketFateReport"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "fate"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::WifiDebugTxPacketFate"
-    }
-    struct_value: {
-        name: "frameInfo"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiDebugPacketFateFrameInfo"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugRxPacketFateReport"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "fate"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::V1_0::WifiDebugRxPacketFate"
-    }
-    struct_value: {
-        name: "frameInfo"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiDebugPacketFateFrameInfo"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugHostWakeReasonRxPacketDetails"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "rxUnicastCnt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "rxMulticastCnt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "rxBroadcastCnt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugHostWakeReasonRxMulticastPacketDetails"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "ipv4RxMulticastAddrCnt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "ipv6RxMulticastAddrCnt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "otherRxMulticastAddrCnt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugHostWakeReasonRxIcmpPacketDetails"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "icmpPkt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "icmp6Pkt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "icmp6Ra"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "icmp6Na"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "icmp6Ns"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::V1_0::WifiDebugHostWakeReasonStats"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "totalCmdEventWakeCnt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "cmdEventWakeCntPerType"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-    struct_value: {
-        name: "totalDriverFwLocalWakeCnt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "driverFwLocalWakeCntPerType"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-    struct_value: {
-        name: "totalRxPacketWakeCnt"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "rxPktWakeDetails"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiDebugHostWakeReasonRxPacketDetails"
-    }
-    struct_value: {
-        name: "rxMulticastPkWakeDetails"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiDebugHostWakeReasonRxMulticastPacketDetails"
-    }
-    struct_value: {
-        name: "rxIcmpPkWakeDetails"
-        type: TYPE_STRUCT
-        predefined_type: "::android::hardware::wifi::V1_0::WifiDebugHostWakeReasonRxIcmpPacketDetails"
-    }
-}
-
diff --git a/wifi/supplicant/1.0/Android.bp b/wifi/supplicant/1.0/Android.bp
index 261d940..a6c2758 100644
--- a/wifi/supplicant/1.0/Android.bp
+++ b/wifi/supplicant/1.0/Android.bp
@@ -1,9 +1,7 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
 
-genrule {
-    name: "android.hardware.wifi.supplicant@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.supplicant@1.0",
+filegroup {
+    name: "android.hardware.wifi.supplicant@1.0_hal",
     srcs: [
         "types.hal",
         "ISupplicant.hal",
@@ -19,6 +17,15 @@
         "ISupplicantStaNetwork.hal",
         "ISupplicantStaNetworkCallback.hal",
     ],
+}
+
+genrule {
+    name: "android.hardware.wifi.supplicant@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.supplicant@1.0",
+    srcs: [
+        ":android.hardware.wifi.supplicant@1.0_hal",
+    ],
     out: [
         "android/hardware/wifi/supplicant/1.0/types.cpp",
         "android/hardware/wifi/supplicant/1.0/SupplicantAll.cpp",
@@ -41,19 +48,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.supplicant@1.0",
     srcs: [
-        "types.hal",
-        "ISupplicant.hal",
-        "ISupplicantCallback.hal",
-        "ISupplicantIface.hal",
-        "ISupplicantNetwork.hal",
-        "ISupplicantP2pIface.hal",
-        "ISupplicantP2pIfaceCallback.hal",
-        "ISupplicantP2pNetwork.hal",
-        "ISupplicantP2pNetworkCallback.hal",
-        "ISupplicantStaIface.hal",
-        "ISupplicantStaIfaceCallback.hal",
-        "ISupplicantStaNetwork.hal",
-        "ISupplicantStaNetworkCallback.hal",
+        ":android.hardware.wifi.supplicant@1.0_hal",
     ],
     out: [
         "android/hardware/wifi/supplicant/1.0/types.h",
diff --git a/wifi/supplicant/1.0/Android.mk b/wifi/supplicant/1.0/Android.mk
index ad49b0a..dd210d0 100644
--- a/wifi/supplicant/1.0/Android.mk
+++ b/wifi/supplicant/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.wifi.supplicant@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -387,7 +387,7 @@
 LOCAL_MODULE := android.hardware.wifi.supplicant@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/wifi/supplicant/1.0/ISupplicantIface.hal b/wifi/supplicant/1.0/ISupplicantIface.hal
index c0058a0..8bb8c97 100644
--- a/wifi/supplicant/1.0/ISupplicantIface.hal
+++ b/wifi/supplicant/1.0/ISupplicantIface.hal
@@ -138,6 +138,19 @@
   setWpsDeviceName(string name) generates (SupplicantStatus status);
 
   /**
+   * Set the device type for WPS operations.
+   *
+   * @parm type Type of device. Refer to section B.1 of Wifi P2P
+   *       Technical specification v1.2.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_IFACE_INVALID|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|
+   */
+  setWpsDeviceType(uint8_t[8] type) generates (SupplicantStatus status);
+
+  /**
    * Set the manufacturer for WPS operations.
    * The manufacturer of the device (up to |WPS_MANUFACTURER_MAX_LEN| ASCII
    * characters).
diff --git a/wifi/supplicant/1.0/ISupplicantP2pIface.hal b/wifi/supplicant/1.0/ISupplicantP2pIface.hal
index 45e90f3..dc1388a 100644
--- a/wifi/supplicant/1.0/ISupplicantP2pIface.hal
+++ b/wifi/supplicant/1.0/ISupplicantP2pIface.hal
@@ -612,4 +612,64 @@
    *         |SupplicantStatusCode.FAILURE_IFACE_INVALID|
    */
   setWfdDeviceInfo(uint8_t[8] info) generates (SupplicantStatus status);
+
+  /**
+   * Creates a NFC handover request message.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_IFACE_INVALID|
+   * @return request Bytes representing the handover request as specified in
+   *         section 3.1.1 of NFC Connection Handover 1.2 Technical
+   *         Specification.
+   */
+  createNfcHandoverRequestMessage()
+      generates (SupplicantStatus status, vec<uint8_t> request);
+
+  /**
+   * Creates a NFC handover select message.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_IFACE_INVALID|
+   * @return select Bytes representing the handover select as specified in
+   *         section 3.1.2 of NFC Connection Handover 1.2 Technical
+   *         Specification.
+   */
+  createNfcHandoverSelectMessage()
+      generates (SupplicantStatus status, vec<uint8_t> select);
+
+  /**
+   * Report the response of the NFC handover request.
+   *
+   * @param request Bytes representing the handover request as specified in
+   *        section 3.1.1 of NFC Connection Handover 1.2 Technical
+   *        Specification.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_IFACE_INVALID|
+   */
+  reportNfcHandoverResponse(vec<uint8_t> request)
+      generates (SupplicantStatus status);
+
+  /**
+   * Report the initiation of the NFC handover select.
+   *
+   * @param select Bytes representing the handover select as specified in
+   *        section 3.1.2 of NFC Connection Handover 1.2 Technical
+   *        Specification.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_IFACE_INVALID|
+   */
+  reportNfcHandoverInitiation(vec<uint8_t> select)
+      generates (SupplicantStatus status);
 };
diff --git a/wifi/supplicant/1.0/ISupplicantP2pIfaceCallback.hal b/wifi/supplicant/1.0/ISupplicantP2pIfaceCallback.hal
index ad4290b..b6ee57f 100644
--- a/wifi/supplicant/1.0/ISupplicantP2pIfaceCallback.hal
+++ b/wifi/supplicant/1.0/ISupplicantP2pIfaceCallback.hal
@@ -195,43 +195,6 @@
   oneway onInvitationResult(Bssid bssid, P2pStatusCode status);
 
   /**
-   * Used to indicate a push-button request generated during provision discovery.
-   *
-   * @param p2pDeviceAddress P2P device address.
-   */
-  oneway onProvisionDiscoveryPbcRequest(MacAddress p2pDeviceAddress);
-
-  /**
-   * Used to indicate a push-button response generated during provision discovery.
-   *
-   * @param p2pDeviceAddress P2P device address.
-   */
-  oneway onProvisionDiscoveryPbcResponse(MacAddress p2pDeviceAddress);
-
-  /**
-   * Used to indicate the pin generated during provision discovery.
-   *
-   * @param p2pDeviceAddress P2P device address.
-   * @param generatedPin 8 digit pin generated.
-   */
-  oneway onProvisionDiscoveryShowPin(
-      MacAddress p2pDeviceAddress, string generatedPin);
-
-  /**
-   * Used to indicate that a pin needs to be entered during provision discovery.
-   *
-   * @param p2pDeviceAddress P2P device address.
-   */
-  oneway onProvisionDiscoveryEnterPin(MacAddress p2pDeviceAddress);
-
-  /**
-   * Used to indicate a provision discovery failure.
-   *
-   * @param p2pDeviceAddress P2P device address.
-   */
-  oneway onProvisionDiscoveryFailure(MacAddress p2pDeviceAddress);
-
-  /**
    * Used to indicate the completion of a P2P provision discovery request.
    *
    * @param p2pDeviceAddress P2P device address.
diff --git a/wifi/supplicant/1.0/ISupplicantStaIface.hal b/wifi/supplicant/1.0/ISupplicantStaIface.hal
index c9d9ee6..68eb179 100644
--- a/wifi/supplicant/1.0/ISupplicantStaIface.hal
+++ b/wifi/supplicant/1.0/ISupplicantStaIface.hal
@@ -67,6 +67,10 @@
     SENSE = 2
   };
 
+  enum ExtRadioWorkDefaults : uint32_t {
+    TIMEOUT_IN_SECS = 10
+  };
+
   /**
    * Register for callbacks from this interface.
    *
@@ -405,4 +409,55 @@
    *         |SupplicantStatusCode.FAILURE_IFACE_INVALID|
    */
   setExternalSim(bool useExternalSim) generates (SupplicantStatus status);
+
+  /**
+   * External programs can request supplicant to not start offchannel
+   * operations during other tasks that may need exclusive control of the
+   * radio.
+   *
+   * This method can be used to reserve a slot for radio access. If freq is
+   * specified, other radio work items on the same channel can be completed in
+   * parallel. Otherwise, all other radio work items are blocked during
+   * execution. Timeout must be set to |ExtRadioWorkDefaults.TIMEOUT_IN_SECS|
+   * seconds by default to avoid blocking supplicant operations on the iface
+   * for excessive time. If a longer (or shorter) safety timeout is needed,
+   * that may be specified with the optional timeout parameter. This command
+   * returns an identifier for the radio work item.
+   *
+   * Once the radio work item has been started,
+   * |ISupplicant.onExtRadioWorkStart| callback is indicated that the external
+   * processing can start.
+   *
+   * @param name Name for the radio work being added.
+   * @param freqInMhz Frequency to specify. Set to 0 for all channels.
+   * @param timeoutInSec Timeout tospecify. Set to 0 for default timeout.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|
+   * @return id Identifier for this radio work.
+   */
+  addExtRadioWork(string name, uint32_t freqInMhz, uint32_t timeoutInSec)
+      generates (SupplicantStatus status, uint32_t id);
+
+  /**
+   * Indicates to supplicant that the external radio work has completed.
+   * This allows other radio works to be performed. If this method is not
+   * invoked (e.g., due to the external program terminating), supplicant
+   * must time out the radio work item on the iface and send
+   * |ISupplicantCallback.onExtRadioWorkTimeout| event to indicate
+   * that this has happened.
+   *
+   * This method may also be used to cancel items that have been scheduled
+   * via |addExtRadioWork|, but have not yet been started (notified via
+   * |ISupplicantCallback.onExtRadioWorkStart|).
+   *
+   * @return id Identifier generated for the radio work addition
+   *         (using |addExtRadioWork|).
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|
+   */
+  removeExtRadioWork(uint32_t id) generates (SupplicantStatus status);
 };
diff --git a/wifi/supplicant/1.0/ISupplicantStaIfaceCallback.hal b/wifi/supplicant/1.0/ISupplicantStaIfaceCallback.hal
index 4b201d4..dd1d1c4 100644
--- a/wifi/supplicant/1.0/ISupplicantStaIfaceCallback.hal
+++ b/wifi/supplicant/1.0/ISupplicantStaIfaceCallback.hal
@@ -214,56 +214,50 @@
    * Used to indicate the result of ANQP (either for IEEE 802.11u Interworking
    * or Hotspot 2.0) query.
    *
-   * @param macAddress MAC address of the access point.
+   * @param bssid BSSID of the access point.
    * @param data ANQP data fetched from the access point.
    *        All the fields in this struct must be empty if the query failed.
    * @param hs20Data ANQP data fetched from the Hotspot 2.0 access point.
    *        All the fields in this struct must be empty if the query failed.
    */
-  oneway onAnqpQueryDone(MacAddress macAddress,
-                         AnqpData data,
-                         Hs20AnqpData hs20Data);
+  oneway onAnqpQueryDone(Bssid bssid, AnqpData data, Hs20AnqpData hs20Data);
 
   /**
    * Used to indicate the result of Hotspot 2.0 Icon query.
    *
-   * @param macAddress MAC address of the access point.
+   * @param bssid BSSID of the access point.
    * @param fileName Name of the file that was requested.
    * @param data Icon data fetched from the access point.
    *        Must be empty if the query failed.
    */
-  oneway onHs20IconQueryDone(MacAddress macAddress,
-                             string fileName,
-                             vec<uint8_t> data);
+  oneway onHs20IconQueryDone(Bssid bssid, string fileName, vec<uint8_t> data);
 
   /**
    * Used to indicate a Hotspot 2.0 subscription remediation event.
    *
+   * @param bssid BSSID of the access point.
    * @param osuMethod OSU method.
    * @param url URL of the server.
    */
-  oneway onHs20SubscriptionRemediation(OsuMethod osuMethod, string url);
+  oneway onHs20SubscriptionRemediation(Bssid bssid,
+                                       OsuMethod osuMethod,
+                                       string url);
 
   /**
    * Used to indicate a Hotspot 2.0 imminent deauth notice.
    *
+   * @param bssid BSSID of the access point.
    * @param reasonCode Code to indicate the deauth reason.
    *        Refer to section 3.2.1.2 of the Hotspot 2.0 spec.
    * @param reAuthDelayInSec Delay before reauthenticating.
    * @param url URL of the server.
    */
-  oneway onHs20DeauthImminentNotice(uint32_t reasonCode,
+  oneway onHs20DeauthImminentNotice(Bssid bssid,
+                                    uint32_t reasonCode,
                                     uint32_t reAuthDelayInSec,
                                     string url);
 
   /**
-   * Used to indicate the connection to a new network on this iface.
-   *
-   * @param bssid BSSID of the AP to which we connected.
-   */
-  oneway onConnected(Bssid bssid);
-
-  /**
    * Used to indicate the disconnection from the currently connected
    * network on this iface.
    *
@@ -277,13 +271,6 @@
           Bssid bssid, bool locallyGenerated, uint32_t reasonCode);
 
   /**
-   * Used to indicate the completion of association to an AP.
-   *
-   * @param bssid BSSID of the corresponding AP.
-   */
-  oneway onAssociationCompleted(Bssid bssid);
-
-  /**
    * Used to indicate an association rejection recieved from the AP
    * to which the connection is being attempted.
    *
@@ -326,4 +313,18 @@
    * Used to indicate the overlap of a WPS PBC connection attempt.
    */
   oneway onWpsEventPbcOverlap();
+
+  /**
+   * Used to indicate that the external radio work can start now.
+   *
+   * @return id Identifier generated for the radio work request.
+   */
+  oneway onExtRadioWorkStart(uint32_t id);
+
+  /**
+   * Used to indicate that the external radio work request has timed out.
+   *
+   * @return id Identifier generated for the radio work request.
+   */
+  oneway onExtRadioWorkTimeout(uint32_t id);
 };
diff --git a/wifi/supplicant/1.0/ISupplicantStaNetwork.hal b/wifi/supplicant/1.0/ISupplicantStaNetwork.hal
index b347c1d..b16fb39 100644
--- a/wifi/supplicant/1.0/ISupplicantStaNetwork.hal
+++ b/wifi/supplicant/1.0/ISupplicantStaNetwork.hal
@@ -106,7 +106,10 @@
     PAP = 1,
     MSPAP = 2,
     MSPAPV2 = 3,
-    GTC = 4
+    GTC = 4,
+    SIM = 5,
+    AKA = 6,
+    AKA_PRIME = 7
   };
 
   /** Params of |sendNetworkEapSimGsmAuthResponse| request. (Refer RFC 4186) */
@@ -508,8 +511,30 @@
    */
   setEapDomainSuffixMatch(string match)
       generates (SupplicantStatus status);
+
   /**
-   * Get ID string set for this network.
+   * This field can be used to enable proactive key caching which is also
+   * known as opportunistic PMKSA caching for WPA2. This is disabled (0)
+   * by default unless default value is changed with the global okc=1
+   * parameter.
+   *
+   * Proactive key caching is used to make supplicant assume that the APs
+   * are using the same PMK and generate PMKSA cache entries without
+   * doing RSN pre-authentication. This requires support from the AP side
+   * and is normally used with wireless switches that co-locate the
+   * authenticator.
+   *
+   * @param enable true to set, false otherwise.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setProactiveKeyCaching(bool enable) generates (SupplicantStatus status);
+
+  /**
+   * Set ID string for this network.
    * Network identifier string for external scripts.
    *
    * @return idStr ID string value to set.
@@ -523,6 +548,20 @@
   setIdStr(string idStr) generates (SupplicantStatus status);
 
   /**
+   * Set PPS MO ID for this network.
+   * (Hotspot 2.0 PerProviderSubscription/UpdateIdentifier)
+   *
+   * @return id ID value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setUpdateIdentifier(uint32_t id) generates (SupplicantStatus status);
+
+  /**
    * Getters for the various network params.
    */
   /**
@@ -860,6 +899,22 @@
   getIdStr() generates (SupplicantStatus status, string idStr);
 
   /**
+   * Retrieves a WPS-NFC configuration token for this network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return token Bytes representing WPS-NFC configuration token.
+   *         This is a dump of all the WPS atrributes of the AP configuration
+   *         as specified in the Wi-Fi Protected Setup Specification.
+   */
+  getWpsNfcConfigurationToken()
+      generates (SupplicantStatus status, vec<uint8_t> token);
+
+  /**
    * Enable the network for connection purposes.
    *
    * This must trigger a connection to the network if:
@@ -912,11 +967,23 @@
    *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
    *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
    */
-  sendNetworkEapSimGsmAuthResponse(NetworkResponseEapSimGsmAuthParams params)
+  sendNetworkEapSimGsmAuthResponse(vec<NetworkResponseEapSimGsmAuthParams> params)
       generates (SupplicantStatus status);
 
   /**
    * Used to send a response to the
+   * |ISupplicantNetworkCallback.onNetworkEapSimGsmAuthRequest| request.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  sendNetworkEapSimGsmAuthFailure() generates (SupplicantStatus status);
+
+  /**
+   * Used to send a response to the
    * |ISupplicantNetworkCallback.onNetworkEapSimUmtsAuthRequest| request.
    *
    * @param params Params to be used for EAP UMTS authentication.
@@ -931,6 +998,32 @@
 
   /**
    * Used to send a response to the
+   * |ISupplicantNetworkCallback.onNetworkEapSimUmtsAuthRequest| request.
+   *
+   * @param auts Params to be used for EAP UMTS authentication.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  sendNetworkEapSimUmtsAutsResponse(uint8_t[14] auts)
+      generates (SupplicantStatus status);
+
+  /**
+   * Used to send a response to the
+   * |ISupplicantNetworkCallback.onNetworkEapSimUmtsAuthRequest| request.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  sendNetworkEapSimUmtsAuthFailure() generates (SupplicantStatus status);
+
+  /**
+   * Used to send a response to the
    * |ISupplicantNetworkCallback.onNetworkEapIdentityRequest| request.
    *
    * @param identity Identity to be used for the network.
diff --git a/wifi/supplicant/1.0/vts/Supplicant.vts b/wifi/supplicant/1.0/vts/Supplicant.vts
deleted file mode 100644
index 69fe209..0000000
--- a/wifi/supplicant/1.0/vts/Supplicant.vts
+++ /dev/null
@@ -1,160 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicant"
-
-package: "android.hardware.wifi.supplicant"
-
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantCallback"
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantIface"
-import: "android.hardware.wifi.supplicant@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicant::DebugLevel"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "EXCESSIVE"
-            scalar_value: {
-                uint32_t: 0
-            }
-            enumerator: "MSGDUMP"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "DEBUG"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "INFO"
-            scalar_value: {
-                uint32_t: 3
-            }
-            enumerator: "WARNING"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "ERROR"
-            scalar_value: {
-                uint32_t: 5
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicant::IfaceInfo"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "type"
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::IfaceType"
-        }
-        struct_value: {
-            name: "name"
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getInterface"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "ISupplicantIface"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicant::IfaceInfo"
-        }
-    }
-
-    api: {
-        name: "listInterfaces"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicant::IfaceInfo"
-            }
-        }
-    }
-
-    api: {
-        name: "registerCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "ISupplicantCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "setDebugParams"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicant::DebugLevel"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getDebugLevel"
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicant::DebugLevel"
-        }
-    }
-
-    api: {
-        name: "isDebugShowTimestampEnabled"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "isDebugShowKeysEnabled"
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setConcurrencyPriority"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::IfaceType"
-        }
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantCallback.vts b/wifi/supplicant/1.0/vts/SupplicantCallback.vts
deleted file mode 100644
index e439bd6..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantCallback.vts
+++ /dev/null
@@ -1,27 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantCallback"
-
-package: "android.hardware.wifi.supplicant"
-
-
-interface: {
-    api: {
-        name: "onInterfaceCreated"
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "onInterfaceRemoved"
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "onTerminating"
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantIface.vts b/wifi/supplicant/1.0/vts/SupplicantIface.vts
deleted file mode 100644
index 41c77f8..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantIface.vts
+++ /dev/null
@@ -1,187 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantIface"
-
-package: "android.hardware.wifi.supplicant"
-
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantNetwork"
-import: "android.hardware.wifi.supplicant@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantIface::ParamSizeLimits"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "WPS_DEVICE_NAME_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "WPS_MANUFACTURER_MAX_LEN"
-            scalar_value: {
-                uint32_t: 64
-            }
-            enumerator: "WPS_MODEL_NAME_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "WPS_MODEL_NUMBER_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "WPS_SERIAL_NUMBER_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-        }
-    }
-
-    api: {
-        name: "getName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "addNetwork"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "ISupplicantNetwork"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "removeNetwork"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getNetwork"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "ISupplicantNetwork"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "listNetworks"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint32_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setWpsDeviceName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsManufacturer"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsModelName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsModelNumber"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsSerialNumber"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsConfigMethods"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::WpsConfigMethods"
-        }
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantNetwork.vts b/wifi/supplicant/1.0/vts/SupplicantNetwork.vts
deleted file mode 100644
index edcabce..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantNetwork.vts
+++ /dev/null
@@ -1,45 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantNetwork"
-
-package: "android.hardware.wifi.supplicant"
-
-import: "android.hardware.wifi.supplicant@1.0::types"
-
-interface: {
-    api: {
-        name: "getId"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getInterfaceName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::IfaceType"
-        }
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantP2pIface.vts b/wifi/supplicant/1.0/vts/SupplicantP2pIface.vts
deleted file mode 100644
index afa9a8c..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantP2pIface.vts
+++ /dev/null
@@ -1,813 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantP2pIface"
-
-package: "android.hardware.wifi.supplicant"
-
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantIface"
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantP2pIfaceCallback"
-import: "android.hardware.wifi.supplicant@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantIface::ParamSizeLimits"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "WPS_DEVICE_NAME_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "WPS_MANUFACTURER_MAX_LEN"
-            scalar_value: {
-                uint32_t: 64
-            }
-            enumerator: "WPS_MODEL_NAME_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "WPS_MODEL_NUMBER_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "WPS_SERIAL_NUMBER_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIface::WpsProvisionMethod"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "PBC"
-            scalar_value: {
-                uint32_t: 0
-            }
-            enumerator: "DISPLAY"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "KEYPAD"
-            scalar_value: {
-                uint32_t: 2
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIface::FreqRange"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "min"
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        struct_value: {
-            name: "max"
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIface::MiracastMode"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint8_t"
-
-            enumerator: "DISABLED"
-            scalar_value: {
-                uint8_t: 0
-            }
-            enumerator: "SOURCE"
-            scalar_value: {
-                uint8_t: 1
-            }
-            enumerator: "SINK"
-            scalar_value: {
-                uint8_t: 2
-            }
-        }
-    }
-
-    api: {
-        name: "getName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "addNetwork"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "ISupplicantNetwork"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "removeNetwork"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getNetwork"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "ISupplicantNetwork"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "listNetworks"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint32_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setWpsDeviceName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsManufacturer"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsModelName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsModelNumber"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsSerialNumber"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsConfigMethods"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::WpsConfigMethods"
-        }
-    }
-
-    api: {
-        name: "registerCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "ISupplicantP2pIfaceCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "getDeviceAddress"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setSsidPostfix"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setGroupIdle"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "setPowerSave"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "find"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "stopFind"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "flush"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "connect"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIface::WpsProvisionMethod"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "cancelConnect"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "provisionDiscovery"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIface::WpsProvisionMethod"
-        }
-    }
-
-    api: {
-        name: "addGroup"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "removeGroup"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "reject"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "invite"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "reinvoke"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "configureExtListen"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "setListenChannel"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "setDisallowedFrequencies"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_STRUCT
-                predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIface::FreqRange"
-            }
-        }
-    }
-
-    api: {
-        name: "getSsid"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getGroupCapability"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::P2pGroupCapabilityMask"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "addBonjourService"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "removeBonjourService"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "addUpnpService"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "removeUpnpService"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "flushServices"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "requestServiceDiscovery"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "cancelServiceDiscovery"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint64_t"
-        }
-    }
-
-    api: {
-        name: "setMiracastMode"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIface::MiracastMode"
-        }
-    }
-
-    api: {
-        name: "startWpsPbc"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "startWpsPinKeypad"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "startWpsPinDisplay"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "cancelWps"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "enableWfd"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setWfdDeviceInfo"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 8
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantP2pIfaceCallback.vts b/wifi/supplicant/1.0/vts/SupplicantP2pIfaceCallback.vts
deleted file mode 100644
index 09fd779..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantP2pIfaceCallback.vts
+++ /dev/null
@@ -1,520 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantP2pIfaceCallback"
-
-package: "android.hardware.wifi.supplicant"
-
-import: "android.hardware.wifi.supplicant@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIfaceCallback::WpsDevPasswordId"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint16_t"
-
-            enumerator: "DEFAULT"
-            scalar_value: {
-                uint16_t: 0
-            }
-            enumerator: "USER_SPECIFIED"
-            scalar_value: {
-                uint16_t: 1
-            }
-            enumerator: "MACHINE_SPECIFIED"
-            scalar_value: {
-                uint16_t: 2
-            }
-            enumerator: "REKEY"
-            scalar_value: {
-                uint16_t: 3
-            }
-            enumerator: "PUSHBUTTON"
-            scalar_value: {
-                uint16_t: 4
-            }
-            enumerator: "REGISTRAR_SPECIFIED"
-            scalar_value: {
-                uint16_t: 5
-            }
-            enumerator: "NFC_CONNECTION_HANDOVER"
-            scalar_value: {
-                uint16_t: 7
-            }
-            enumerator: "P2PS_DEFAULT"
-            scalar_value: {
-                uint16_t: 8
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIfaceCallback::P2pStatusCode"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "SUCCESS"
-            scalar_value: {
-                uint32_t: 0
-            }
-            enumerator: "FAIL_INFO_CURRENTLY_UNAVAILABLE"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "FAIL_INCOMPATIBLE_PARAMS"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "FAIL_LIMIT_REACHED"
-            scalar_value: {
-                uint32_t: 3
-            }
-            enumerator: "FAIL_INVALID_PARAMS"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "FAIL_UNABLE_TO_ACCOMMODATE"
-            scalar_value: {
-                uint32_t: 5
-            }
-            enumerator: "FAIL_PREV_PROTOCOL_ERROR"
-            scalar_value: {
-                uint32_t: 6
-            }
-            enumerator: "FAIL_NO_COMMON_CHANNELS"
-            scalar_value: {
-                uint32_t: 7
-            }
-            enumerator: "FAIL_UNKNOWN_GROUP"
-            scalar_value: {
-                uint32_t: 8
-            }
-            enumerator: "FAIL_BOTH_GO_INTENT_15"
-            scalar_value: {
-                uint32_t: 9
-            }
-            enumerator: "FAIL_INCOMPATIBLE_PROV_METHOD"
-            scalar_value: {
-                uint32_t: 10
-            }
-            enumerator: "FAIL_REJECTED_BY_USER"
-            scalar_value: {
-                uint32_t: 11
-            }
-            enumerator: "SUCCESS_DEFERRED"
-            scalar_value: {
-                uint32_t: 12
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIfaceCallback::P2pProvDiscStatusCode"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint8_t"
-
-            enumerator: "SUCCESS"
-            scalar_value: {
-                uint8_t: 0
-            }
-            enumerator: "TIMEOUT"
-            scalar_value: {
-                uint8_t: 1
-            }
-            enumerator: "REJECTED"
-            scalar_value: {
-                uint8_t: 2
-            }
-            enumerator: "TIMEOUT_JOIN"
-            scalar_value: {
-                uint8_t: 3
-            }
-            enumerator: "INFO_UNAVAILABLE"
-            scalar_value: {
-                uint8_t: 4
-            }
-        }
-    }
-
-    api: {
-        name: "onNetworkAdded"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "onNetworkRemoved"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "onDeviceFound"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 8
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::WpsConfigMethods"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::P2pGroupCapabilityMask"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 8
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onDeviceLost"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onFindStopped"
-    }
-
-    api: {
-        name: "onGoNegotiationRequest"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIfaceCallback::WpsDevPasswordId"
-        }
-    }
-
-    api: {
-        name: "onGoNegotiationCompleted"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIfaceCallback::P2pStatusCode"
-        }
-    }
-
-    api: {
-        name: "onGroupFormationSuccess"
-    }
-
-    api: {
-        name: "onGroupFormationFailure"
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "onGroupStarted"
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 32
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "onGroupRemoved"
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "onInvitationReceived"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "onInvitationResult"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIfaceCallback::P2pStatusCode"
-        }
-    }
-
-    api: {
-        name: "onProvisionDiscoveryPbcRequest"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onProvisionDiscoveryPbcResponse"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onProvisionDiscoveryShowPin"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "onProvisionDiscoveryEnterPin"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onProvisionDiscoveryFailure"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onProvisionDiscoveryCompleted"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIfaceCallback::P2pProvDiscStatusCode"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::WpsConfigMethods"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "onServiceDiscoveryResponse"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onStaAuthorized"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onStaDeauthorized"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantP2pNetwork.vts b/wifi/supplicant/1.0/vts/SupplicantP2pNetwork.vts
deleted file mode 100644
index fddcca3..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantP2pNetwork.vts
+++ /dev/null
@@ -1,127 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantP2pNetwork"
-
-package: "android.hardware.wifi.supplicant"
-
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantNetwork"
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantP2pNetworkCallback"
-import: "android.hardware.wifi.supplicant@1.0::types"
-
-interface: {
-    api: {
-        name: "getId"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getInterfaceName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "registerCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "ISupplicantP2pNetworkCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "getSsid"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getBssid"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "isCurrent"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "isPersistent"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "isGo"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantP2pNetworkCallback.vts b/wifi/supplicant/1.0/vts/SupplicantP2pNetworkCallback.vts
deleted file mode 100644
index 0e9ccde..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantP2pNetworkCallback.vts
+++ /dev/null
@@ -1,9 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantP2pNetworkCallback"
-
-package: "android.hardware.wifi.supplicant"
-
-
-interface: {
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantStaIface.vts b/wifi/supplicant/1.0/vts/SupplicantStaIface.vts
deleted file mode 100644
index ceadb6c..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantStaIface.vts
+++ /dev/null
@@ -1,623 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantStaIface"
-
-package: "android.hardware.wifi.supplicant"
-
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantIface"
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantStaIfaceCallback"
-import: "android.hardware.wifi.supplicant@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantIface::ParamSizeLimits"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "WPS_DEVICE_NAME_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "WPS_MANUFACTURER_MAX_LEN"
-            scalar_value: {
-                uint32_t: 64
-            }
-            enumerator: "WPS_MODEL_NAME_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "WPS_MODEL_NUMBER_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "WPS_SERIAL_NUMBER_MAX_LEN"
-            scalar_value: {
-                uint32_t: 32
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface::AnqpInfoId"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint16_t"
-
-            enumerator: "VENUE_NAME"
-            scalar_value: {
-                uint16_t: 258
-            }
-            enumerator: "ROAMING_CONSORTIUM"
-            scalar_value: {
-                uint16_t: 261
-            }
-            enumerator: "IP_ADDR_TYPE_AVAILABILITY"
-            scalar_value: {
-                uint16_t: 262
-            }
-            enumerator: "NAI_REALM"
-            scalar_value: {
-                uint16_t: 263
-            }
-            enumerator: "ANQP_3GPP_CELLULAR_NETWORK"
-            scalar_value: {
-                uint16_t: 264
-            }
-            enumerator: "DOMAIN_NAME"
-            scalar_value: {
-                uint16_t: 268
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface::Hs20AnqpSubtypes"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "OPERATOR_FRIENDLY_NAME"
-            scalar_value: {
-                uint32_t: 3
-            }
-            enumerator: "WAN_METRICS"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "CONNECTION_CAPABILITY"
-            scalar_value: {
-                uint32_t: 5
-            }
-            enumerator: "OSU_PROVIDERS_LIST"
-            scalar_value: {
-                uint32_t: 8
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface::RxFilterType"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint8_t"
-
-            enumerator: "V4_MULTICAST"
-            scalar_value: {
-                uint8_t: 0
-            }
-            enumerator: "V6_MULTICAST"
-            scalar_value: {
-                uint8_t: 1
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface::BtCoexistenceMode"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint8_t"
-
-            enumerator: "ENABLED"
-            scalar_value: {
-                uint8_t: 0
-            }
-            enumerator: "DISABLED"
-            scalar_value: {
-                uint8_t: 1
-            }
-            enumerator: "SENSE"
-            scalar_value: {
-                uint8_t: 2
-            }
-        }
-    }
-
-    api: {
-        name: "getName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "addNetwork"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "ISupplicantNetwork"
-            is_callback: false
-        }
-    }
-
-    api: {
-        name: "removeNetwork"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getNetwork"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_HIDL_INTERFACE
-            predefined_type: "ISupplicantNetwork"
-            is_callback: false
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "listNetworks"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint32_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setWpsDeviceName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsManufacturer"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsModelName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsModelNumber"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsSerialNumber"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWpsConfigMethods"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::WpsConfigMethods"
-        }
-    }
-
-    api: {
-        name: "registerCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "ISupplicantStaIfaceCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "reassociate"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "reconnect"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "disconnect"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "setPowerSave"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "initiateTdlsDiscover"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "initiateTdlsSetup"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "initiateTdlsTeardown"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "initiateAnqpQuery"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_ENUM
-                predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface::AnqpInfoId"
-            }
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_ENUM
-                predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface::Hs20AnqpSubtypes"
-            }
-        }
-    }
-
-    api: {
-        name: "initiateHs20IconQuery"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getMacAddress"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "startRxFilter"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "stopRxFilter"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "addRxFilter"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface::RxFilterType"
-        }
-    }
-
-    api: {
-        name: "removeRxFilter"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface::RxFilterType"
-        }
-    }
-
-    api: {
-        name: "setBtCoexistenceMode"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface::BtCoexistenceMode"
-        }
-    }
-
-    api: {
-        name: "setBtCoexistenceScanModeEnabled"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setSuspendModeEnabled"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setCountryCode"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 2
-                type: TYPE_SCALAR
-                scalar_type: "int8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "startWpsRegistrar"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "startWpsPbc"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "startWpsPinKeypad"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "startWpsPinDisplay"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "cancelWps"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "setExternalSim"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantStaIfaceCallback.vts b/wifi/supplicant/1.0/vts/SupplicantStaIfaceCallback.vts
deleted file mode 100644
index 88b1c3b..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantStaIfaceCallback.vts
+++ /dev/null
@@ -1,499 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantStaIfaceCallback"
-
-package: "android.hardware.wifi.supplicant"
-
-import: "android.hardware.wifi.supplicant@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::State"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "DISCONNECTED"
-            scalar_value: {
-                uint32_t: 0
-            }
-            enumerator: "IFACE_DISABLED"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "INACTIVE"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "SCANNING"
-            scalar_value: {
-                uint32_t: 3
-            }
-            enumerator: "AUTHENTICATING"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "ASSOCIATING"
-            scalar_value: {
-                uint32_t: 5
-            }
-            enumerator: "ASSOCIATED"
-            scalar_value: {
-                uint32_t: 6
-            }
-            enumerator: "FOURWAY_HANDSHAKE"
-            scalar_value: {
-                uint32_t: 7
-            }
-            enumerator: "GROUP_HANDSHAKE"
-            scalar_value: {
-                uint32_t: 8
-            }
-            enumerator: "COMPLETED"
-            scalar_value: {
-                uint32_t: 9
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::OsuMethod"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint8_t"
-
-            enumerator: "OMA_DM"
-            scalar_value: {
-                uint8_t: 0
-            }
-            enumerator: "SOAP_XML_SPP"
-            scalar_value: {
-                uint8_t: 1
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::AnqpData"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "venueName"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "roamingConsortium"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "ipAddrTypeAvailability"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "naiRealm"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "anqp3gppCellularNetwork"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "domainName"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::Hs20AnqpData"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "operatorFriendlyName"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "wanMetrics"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "connectionCapability"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "osuProvidersList"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::WpsConfigError"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint16_t"
-
-            enumerator: "NO_ERROR"
-            scalar_value: {
-                uint16_t: 0
-            }
-            enumerator: "OOB_IFACE_READ_ERROR"
-            scalar_value: {
-                uint16_t: 1
-            }
-            enumerator: "DECRYPTION_CRC_FAILURE"
-            scalar_value: {
-                uint16_t: 2
-            }
-            enumerator: "CHAN_24_NOT_SUPPORTED"
-            scalar_value: {
-                uint16_t: 3
-            }
-            enumerator: "CHAN_50_NOT_SUPPORTED"
-            scalar_value: {
-                uint16_t: 4
-            }
-            enumerator: "SIGNAL_TOO_WEAK"
-            scalar_value: {
-                uint16_t: 5
-            }
-            enumerator: "NETWORK_AUTH_FAILURE"
-            scalar_value: {
-                uint16_t: 6
-            }
-            enumerator: "NETWORK_ASSOC_FAILURE"
-            scalar_value: {
-                uint16_t: 7
-            }
-            enumerator: "NO_DHCP_RESPONSE"
-            scalar_value: {
-                uint16_t: 8
-            }
-            enumerator: "FAILED_DHCP_CONFIG"
-            scalar_value: {
-                uint16_t: 9
-            }
-            enumerator: "IP_ADDR_CONFLICT"
-            scalar_value: {
-                uint16_t: 10
-            }
-            enumerator: "NO_CONN_TO_REGISTRAR"
-            scalar_value: {
-                uint16_t: 11
-            }
-            enumerator: "MULTIPLE_PBC_DETECTED"
-            scalar_value: {
-                uint16_t: 12
-            }
-            enumerator: "ROGUE_SUSPECTED"
-            scalar_value: {
-                uint16_t: 13
-            }
-            enumerator: "DEVICE_BUSY"
-            scalar_value: {
-                uint16_t: 14
-            }
-            enumerator: "SETUP_LOCKED"
-            scalar_value: {
-                uint16_t: 15
-            }
-            enumerator: "MSG_TIMEOUT"
-            scalar_value: {
-                uint16_t: 16
-            }
-            enumerator: "REG_SESS_TIMEOUT"
-            scalar_value: {
-                uint16_t: 17
-            }
-            enumerator: "DEV_PASSWORD_AUTH_FAILURE"
-            scalar_value: {
-                uint16_t: 18
-            }
-            enumerator: "CHAN_60G_NOT_SUPPORTED"
-            scalar_value: {
-                uint16_t: 19
-            }
-            enumerator: "PUBLIC_KEY_HASH_MISMATCH"
-            scalar_value: {
-                uint16_t: 20
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::WpsErrorIndication"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint16_t"
-
-            enumerator: "NO_ERROR"
-            scalar_value: {
-                uint16_t: 0
-            }
-            enumerator: "SECURITY_TKIP_ONLY_PROHIBITED"
-            scalar_value: {
-                uint16_t: 1
-            }
-            enumerator: "SECURITY_WEP_PROHIBITED"
-            scalar_value: {
-                uint16_t: 2
-            }
-            enumerator: "AUTH_FAILURE"
-            scalar_value: {
-                uint16_t: 3
-            }
-        }
-    }
-
-    api: {
-        name: "onNetworkAdded"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "onNetworkRemoved"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "onStateChanged"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::State"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onAnqpQueryDone"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::AnqpData"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::Hs20AnqpData"
-        }
-    }
-
-    api: {
-        name: "onHs20IconQueryDone"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onHs20SubscriptionRemediation"
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::OsuMethod"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "onHs20DeauthImminentNotice"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "onConnected"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onDisconnected"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "onAssociationCompleted"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onAssociationRejected"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "onAuthenticationTimeout"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onEapFailure"
-    }
-
-    api: {
-        name: "onWpsEventSuccess"
-    }
-
-    api: {
-        name: "onWpsEventFail"
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::WpsConfigError"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback::WpsErrorIndication"
-        }
-    }
-
-    api: {
-        name: "onWpsEventPbcOverlap"
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantStaNetwork.vts b/wifi/supplicant/1.0/vts/SupplicantStaNetwork.vts
deleted file mode 100644
index f493b3e..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantStaNetwork.vts
+++ /dev/null
@@ -1,1087 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantStaNetwork"
-
-package: "android.hardware.wifi.supplicant"
-
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantNetwork"
-import: "android.hardware.wifi.supplicant@1.0::ISupplicantStaNetworkCallback"
-import: "android.hardware.wifi.supplicant@1.0::types"
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::ParamSizeLimits"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "SSID_MAX_LEN_IN_BYTES"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "PSK_PASSPHRASE_MIN_LEN_IN_BYTES"
-            scalar_value: {
-                uint32_t: 8
-            }
-            enumerator: "PSK_PASSPHRASE_MAX_LEN_IN_BYTES"
-            scalar_value: {
-                uint32_t: 63
-            }
-            enumerator: "WEP_KEYS_MAX_NUM"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "WEP40_KEY_LEN_IN_BYTES"
-            scalar_value: {
-                uint32_t: 5
-            }
-            enumerator: "WEP104_KEY_LEN_IN_BYTES"
-            scalar_value: {
-                uint32_t: 13
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::KeyMgmtMask"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "WPA_EAP"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "WPA_PSK"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "NONE"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "IEEE8021X"
-            scalar_value: {
-                uint32_t: 8
-            }
-            enumerator: "FT_EAP"
-            scalar_value: {
-                uint32_t: 32
-            }
-            enumerator: "FT_PSK"
-            scalar_value: {
-                uint32_t: 64
-            }
-            enumerator: "OSEN"
-            scalar_value: {
-                uint32_t: 32768
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::ProtoMask"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "WPA"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "RSN"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "OSEN"
-            scalar_value: {
-                uint32_t: 8
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::AuthAlgMask"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "OPEN"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "SHARED"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "LEAP"
-            scalar_value: {
-                uint32_t: 4
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::GroupCipherMask"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "WEP40"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "WEP104"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "TKIP"
-            scalar_value: {
-                uint32_t: 8
-            }
-            enumerator: "CCMP"
-            scalar_value: {
-                uint32_t: 16
-            }
-            enumerator: "GTK_NOT_USED"
-            scalar_value: {
-                uint32_t: 16384
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::PairwiseCipherMask"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "NONE"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "TKIP"
-            scalar_value: {
-                uint32_t: 8
-            }
-            enumerator: "CCMP"
-            scalar_value: {
-                uint32_t: 16
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::EapMethod"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "PEAP"
-            scalar_value: {
-                uint32_t: 0
-            }
-            enumerator: "TLS"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "TTLS"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "PWD"
-            scalar_value: {
-                uint32_t: 3
-            }
-            enumerator: "SIM"
-            scalar_value: {
-                uint32_t: 4
-            }
-            enumerator: "AKA"
-            scalar_value: {
-                uint32_t: 5
-            }
-            enumerator: "AKA_PRIME"
-            scalar_value: {
-                uint32_t: 6
-            }
-            enumerator: "WFA_UNAUTH_TLS"
-            scalar_value: {
-                uint32_t: 7
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::EapPhase2Method"
-        type: TYPE_ENUM
-        enum_value: {
-            scalar_type: "uint32_t"
-
-            enumerator: "NONE"
-            scalar_value: {
-                uint32_t: 0
-            }
-            enumerator: "PAP"
-            scalar_value: {
-                uint32_t: 1
-            }
-            enumerator: "MSPAP"
-            scalar_value: {
-                uint32_t: 2
-            }
-            enumerator: "MSPAPV2"
-            scalar_value: {
-                uint32_t: 3
-            }
-            enumerator: "GTC"
-            scalar_value: {
-                uint32_t: 4
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::NetworkResponseEapSimGsmAuthParams"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "kc"
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 8
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "sres"
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 4
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::NetworkResponseEapSimUmtsAuthParams"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "res"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "ik"
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 16
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "ck"
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 16
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getId"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getInterfaceName"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getType"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::IfaceType"
-        }
-    }
-
-    api: {
-        name: "registerCallback"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_HIDL_CALLBACK
-            predefined_type: "ISupplicantStaNetworkCallback"
-            is_callback: true
-        }
-    }
-
-    api: {
-        name: "setSsid"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setBssid"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setScanSsid"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setKeyMgmt"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::KeyMgmtMask"
-        }
-    }
-
-    api: {
-        name: "setProto"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::ProtoMask"
-        }
-    }
-
-    api: {
-        name: "setAuthAlg"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::AuthAlgMask"
-        }
-    }
-
-    api: {
-        name: "setGroupCipher"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::GroupCipherMask"
-        }
-    }
-
-    api: {
-        name: "setPairwiseCipher"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::PairwiseCipherMask"
-        }
-    }
-
-    api: {
-        name: "setPskPassphrase"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setWepKey"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setWepTxKeyIdx"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "setRequirePmf"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setEapMethod"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::EapMethod"
-        }
-    }
-
-    api: {
-        name: "setEapPhase2Method"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::EapPhase2Method"
-        }
-    }
-
-    api: {
-        name: "setEapIdentity"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setEapAnonymousIdentity"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setEapPassword"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "setEapCACert"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setEapCAPath"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setEapClientCert"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setEapPrivateKey"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setEapSubjectMatch"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setEapAltSubjectMatch"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setEapEngine"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "setEapEngineID"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setEapDomainSuffixMatch"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "setIdStr"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getSsid"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getBssid"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 6
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getScanSsid"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getKeyMgmt"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::KeyMgmtMask"
-        }
-    }
-
-    api: {
-        name: "getProto"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::ProtoMask"
-        }
-    }
-
-    api: {
-        name: "getAuthAlg"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::AuthAlgMask"
-        }
-    }
-
-    api: {
-        name: "getGroupCipher"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::GroupCipherMask"
-        }
-    }
-
-    api: {
-        name: "getPairwiseCipher"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_MASK
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::PairwiseCipherMask"
-        }
-    }
-
-    api: {
-        name: "getPskPassphrase"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getWepKey"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getWepTxKeyIdx"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "uint32_t"
-        }
-    }
-
-    api: {
-        name: "getRequirePmf"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getEapMethod"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::EapMethod"
-        }
-    }
-
-    api: {
-        name: "getEapPhase2Method"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::EapPhase2Method"
-        }
-    }
-
-    api: {
-        name: "getEapIdentity"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getEapAnonymousIdentity"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getEapPassword"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "getEapCACert"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getEapCAPath"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getEapClientCert"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getEapPrivateKey"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getEapSubjectMatch"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getEapAltSubjectMatch"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getEapEngine"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "getEapEngineID"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getEapDomainSuffixMatch"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "getIdStr"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_STRING
-        }
-    }
-
-    api: {
-        name: "enable"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "bool_t"
-        }
-    }
-
-    api: {
-        name: "disable"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "select"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-    }
-
-    api: {
-        name: "sendNetworkEapSimGsmAuthResponse"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::NetworkResponseEapSimGsmAuthParams"
-        }
-    }
-
-    api: {
-        name: "sendNetworkEapSimUmtsAuthResponse"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork::NetworkResponseEapSimUmtsAuthParams"
-        }
-    }
-
-    api: {
-        name: "sendNetworkEapIdentityResponse"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-        }
-        arg: {
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/SupplicantStaNetworkCallback.vts b/wifi/supplicant/1.0/vts/SupplicantStaNetworkCallback.vts
deleted file mode 100644
index 3fe2da7..0000000
--- a/wifi/supplicant/1.0/vts/SupplicantStaNetworkCallback.vts
+++ /dev/null
@@ -1,69 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "ISupplicantStaNetworkCallback"
-
-package: "android.hardware.wifi.supplicant"
-
-
-interface: {
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetworkCallback::NetworkRequestEapSimGsmAuthParams"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "rands"
-            type: TYPE_VECTOR
-            vector_value: {
-                type: TYPE_ARRAY
-                vector_value: {
-                    vector_size: 16
-                    type: TYPE_SCALAR
-                    scalar_type: "uint8_t"
-                }
-            }
-        }
-    }
-
-    attribute: {
-        name: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetworkCallback::NetworkRequestEapSimUmtsAuthParams"
-        type: TYPE_STRUCT
-        struct_value: {
-            name: "rand"
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 16
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-        struct_value: {
-            name: "autn"
-            type: TYPE_ARRAY
-            vector_value: {
-                vector_size: 16
-                type: TYPE_SCALAR
-                scalar_type: "uint8_t"
-            }
-        }
-    }
-
-    api: {
-        name: "onNetworkEapSimGsmAuthRequest"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetworkCallback::NetworkRequestEapSimGsmAuthParams"
-        }
-    }
-
-    api: {
-        name: "onNetworkEapSimUmtsAuthRequest"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetworkCallback::NetworkRequestEapSimUmtsAuthParams"
-        }
-    }
-
-    api: {
-        name: "onNetworkEapIdentityRequest"
-    }
-
-}
diff --git a/wifi/supplicant/1.0/vts/functional/Android.mk b/wifi/supplicant/1.0/vts/functional/Android.mk
index 8fa649f..52fecc2 100644
--- a/wifi/supplicant/1.0/vts/functional/Android.mk
+++ b/wifi/supplicant/1.0/vts/functional/Android.mk
@@ -16,10 +16,10 @@
 LOCAL_PATH := $(call my-dir)
 
 include $(CLEAR_VARS)
-LOCAL_MODULE := supplicant_hidl_test
+LOCAL_MODULE := VtsHalWifiSupplicantV1_0TargetTest
 LOCAL_CPPFLAGS := -Wall -Werror -Wextra
 LOCAL_SRC_FILES := \
-    main.cpp \
+    VtsHalWifiSupplicantV1_0TargetTest.cpp \
     supplicant_hidl_test.cpp \
     supplicant_hidl_test_utils.cpp \
     supplicant_p2p_iface_hidl_test.cpp \
diff --git a/wifi/supplicant/1.0/vts/functional/main.cpp b/wifi/supplicant/1.0/vts/functional/VtsHalWifiSupplicantV1_0TargetTest.cpp
similarity index 100%
rename from wifi/supplicant/1.0/vts/functional/main.cpp
rename to wifi/supplicant/1.0/vts/functional/VtsHalWifiSupplicantV1_0TargetTest.cpp
diff --git a/wifi/supplicant/1.0/vts/types.vts b/wifi/supplicant/1.0/vts/types.vts
deleted file mode 100644
index b8b29b3..0000000
--- a/wifi/supplicant/1.0/vts/types.vts
+++ /dev/null
@@ -1,189 +0,0 @@
-component_class: HAL_HIDL
-component_type_version: 1.0
-component_name: "types"
-
-package: "android.hardware.wifi.supplicant"
-
-
-attribute: {
-    name: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatusCode"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "SUCCESS"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "FAILURE_UNKNOWN"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "FAILURE_ARGS_INVALID"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "FAILURE_IFACE_INVALID"
-        scalar_value: {
-            uint32_t: 3
-        }
-        enumerator: "FAILURE_IFACE_UNKNOWN"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "FAILURE_IFACE_EXISTS"
-        scalar_value: {
-            uint32_t: 5
-        }
-        enumerator: "FAILURE_IFACE_DISABLED"
-        scalar_value: {
-            uint32_t: 6
-        }
-        enumerator: "FAILURE_IFACE_NOT_DISCONNECTED"
-        scalar_value: {
-            uint32_t: 7
-        }
-        enumerator: "FAILURE_NETWORK_INVALID"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "FAILURE_NETWORK_UNKNOWN"
-        scalar_value: {
-            uint32_t: 9
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatus"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "code"
-        type: TYPE_ENUM
-        predefined_type: "::android::hardware::wifi::supplicant::V1_0::SupplicantStatusCode"
-    }
-    struct_value: {
-        name: "debugMessage"
-        type: TYPE_STRING
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::supplicant::V1_0::IfaceType"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "STA"
-        scalar_value: {
-            uint32_t: 0
-        }
-        enumerator: "P2P"
-        scalar_value: {
-            uint32_t: 1
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::supplicant::V1_0::P2pGroupCapabilityMask"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint32_t"
-
-        enumerator: "GROUP_OWNER"
-        scalar_value: {
-            uint32_t: 1
-        }
-        enumerator: "PERSISTENT_GROUP"
-        scalar_value: {
-            uint32_t: 2
-        }
-        enumerator: "GROUP_LIMIT"
-        scalar_value: {
-            uint32_t: 4
-        }
-        enumerator: "INTRA_BSS_DIST"
-        scalar_value: {
-            uint32_t: 8
-        }
-        enumerator: "CROSS_CONN"
-        scalar_value: {
-            uint32_t: 16
-        }
-        enumerator: "PERSISTENT_RECONN"
-        scalar_value: {
-            uint32_t: 32
-        }
-        enumerator: "GROUP_FORMATION"
-        scalar_value: {
-            uint32_t: 64
-        }
-    }
-}
-
-attribute: {
-    name: "::android::hardware::wifi::supplicant::V1_0::WpsConfigMethods"
-    type: TYPE_ENUM
-    enum_value: {
-        scalar_type: "uint16_t"
-
-        enumerator: "USBA"
-        scalar_value: {
-            uint16_t: 1
-        }
-        enumerator: "ETHERNET"
-        scalar_value: {
-            uint16_t: 2
-        }
-        enumerator: "LABEL"
-        scalar_value: {
-            uint16_t: 4
-        }
-        enumerator: "DISPLAY"
-        scalar_value: {
-            uint16_t: 8
-        }
-        enumerator: "EXT_NFC_TOKEN"
-        scalar_value: {
-            uint16_t: 16
-        }
-        enumerator: "INT_NFC_TOKEN"
-        scalar_value: {
-            uint16_t: 32
-        }
-        enumerator: "NFC_INTERFACE"
-        scalar_value: {
-            uint16_t: 64
-        }
-        enumerator: "PUSHBUTTON"
-        scalar_value: {
-            uint16_t: 128
-        }
-        enumerator: "KEYPAD"
-        scalar_value: {
-            uint16_t: 256
-        }
-        enumerator: "VIRT_PUSHBUTTON"
-        scalar_value: {
-            uint16_t: 640
-        }
-        enumerator: "PHY_PUSHBUTTON"
-        scalar_value: {
-            uint16_t: 1152
-        }
-        enumerator: "P2PS"
-        scalar_value: {
-            uint16_t: 4096
-        }
-        enumerator: "VIRT_DISPLAY"
-        scalar_value: {
-            uint16_t: 8200
-        }
-        enumerator: "PHY_DISPLAY"
-        scalar_value: {
-            uint16_t: 16392
-        }
-    }
-}
-