Merge "Camera: remove BINDERIZED flag"
diff --git a/audio/2.0/Android.bp b/audio/2.0/Android.bp
index 2f0c936..1d4515d 100644
--- a/audio/2.0/Android.bp
+++ b/audio/2.0/Android.bp
@@ -104,3 +104,157 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.audio.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.audio@2.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/audio/2.0/ $(genDir)/android/hardware/audio/2.0/",
+    srcs: [
+        "types.hal",
+        "IDevice.hal",
+        "IDevicesFactory.hal",
+        "IPrimaryDevice.hal",
+        "IStream.hal",
+        "IStreamIn.hal",
+        "IStreamOut.hal",
+        "IStreamOutCallback.hal",
+    ],
+    out: [
+        "android/hardware/audio/2.0/types.vts.cpp",
+        "android/hardware/audio/2.0/Device.vts.cpp",
+        "android/hardware/audio/2.0/DevicesFactory.vts.cpp",
+        "android/hardware/audio/2.0/PrimaryDevice.vts.cpp",
+        "android/hardware/audio/2.0/Stream.vts.cpp",
+        "android/hardware/audio/2.0/StreamIn.vts.cpp",
+        "android/hardware/audio/2.0/StreamOut.vts.cpp",
+        "android/hardware/audio/2.0/StreamOutCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.audio.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.audio@2.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/audio/2.0/ $(genDir)/android/hardware/audio/2.0/",
+    srcs: [
+        "types.hal",
+        "IDevice.hal",
+        "IDevicesFactory.hal",
+        "IPrimaryDevice.hal",
+        "IStream.hal",
+        "IStreamIn.hal",
+        "IStreamOut.hal",
+        "IStreamOutCallback.hal",
+    ],
+    out: [
+        "android/hardware/audio/2.0/types.vts.h",
+        "android/hardware/audio/2.0/Device.vts.h",
+        "android/hardware/audio/2.0/DevicesFactory.vts.h",
+        "android/hardware/audio/2.0/PrimaryDevice.vts.h",
+        "android/hardware/audio/2.0/Stream.vts.h",
+        "android/hardware/audio/2.0/StreamIn.vts.h",
+        "android/hardware/audio/2.0/StreamOut.vts.h",
+        "android/hardware/audio/2.0/StreamOutCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.audio.vts.driver@2.0",
+    generated_sources: ["android.hardware.audio.vts.driver@2.0_genc++"],
+    generated_headers: ["android.hardware.audio.vts.driver@2.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.audio.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.audio@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.audio@2.0-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.audio@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/audio/2.0/ $(genDir)/android/hardware/audio/2.0/",
+    srcs: [
+        "types.hal",
+        "IDevice.hal",
+        "IDevicesFactory.hal",
+        "IPrimaryDevice.hal",
+        "IStream.hal",
+        "IStreamIn.hal",
+        "IStreamOut.hal",
+        "IStreamOutCallback.hal",
+    ],
+    out: [
+        "android/hardware/audio/2.0/types.vts.cpp",
+        "android/hardware/audio/2.0/Device.vts.cpp",
+        "android/hardware/audio/2.0/DevicesFactory.vts.cpp",
+        "android/hardware/audio/2.0/PrimaryDevice.vts.cpp",
+        "android/hardware/audio/2.0/Stream.vts.cpp",
+        "android/hardware/audio/2.0/StreamIn.vts.cpp",
+        "android/hardware/audio/2.0/StreamOut.vts.cpp",
+        "android/hardware/audio/2.0/StreamOutCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.audio@2.0-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.audio@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/audio/2.0/ $(genDir)/android/hardware/audio/2.0/",
+    srcs: [
+        "types.hal",
+        "IDevice.hal",
+        "IDevicesFactory.hal",
+        "IPrimaryDevice.hal",
+        "IStream.hal",
+        "IStreamIn.hal",
+        "IStreamOut.hal",
+        "IStreamOutCallback.hal",
+    ],
+    out: [
+        "android/hardware/audio/2.0/types.vts.h",
+        "android/hardware/audio/2.0/Device.vts.h",
+        "android/hardware/audio/2.0/DevicesFactory.vts.h",
+        "android/hardware/audio/2.0/PrimaryDevice.vts.h",
+        "android/hardware/audio/2.0/Stream.vts.h",
+        "android/hardware/audio/2.0/StreamIn.vts.h",
+        "android/hardware/audio/2.0/StreamOut.vts.h",
+        "android/hardware/audio/2.0/StreamOutCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.audio@2.0-vts.profiler",
+    generated_sources: ["android.hardware.audio@2.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.audio@2.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.audio@2.0-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.audio@2.0",
+    ],
+}
diff --git a/audio/2.0/IStreamIn.hal b/audio/2.0/IStreamIn.hal
index 9a96f71..e34c95f 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,24 +71,36 @@
      */
     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.
      *
      * @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
@@ -79,7 +111,9 @@
             ThreadPriority threadPriority)
     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);
 
     /*
      * 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..2ec080d 100644
--- a/audio/2.0/IStreamOut.hal
+++ b/audio/2.0/IStreamOut.hal
@@ -44,44 +44,57 @@
     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.
      *
      * @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.
+     * @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
@@ -92,7 +105,9 @@
             ThreadPriority threadPriority)
     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);
 
     /*
      * Return the number of audio frames written by the audio DSP to DAC since
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 73afe05..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;
diff --git a/audio/2.0/default/StreamIn.cpp b/audio/2.0/default/StreamIn.cpp
index ad18986..9c49170 100644
--- a/audio/2.0/default/StreamIn.cpp
+++ b/audio/2.0/default/StreamIn.cpp
@@ -16,10 +16,12 @@
 
 #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"
 
@@ -38,6 +40,7 @@
     // 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,
@@ -45,6 +48,7 @@
             : Thread(false /*canCallJava*/),
               mStop(stop),
               mStream(stream),
+              mCommandMQ(commandMQ),
               mDataMQ(dataMQ),
               mStatusMQ(statusMQ),
               mEfGroup(efGroup),
@@ -58,13 +62,19 @@
   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() {
@@ -77,6 +87,32 @@
     return OK;
 }
 
+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;
+    }
+    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() {
     // This implementation doesn't return control back to the Thread until it decides to stop,
     // as the Thread uses mutexes, and this can lead to priority inversion.
@@ -87,21 +123,23 @@
         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 +158,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 +289,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;
 }
 
@@ -275,17 +320,19 @@
     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());
         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());
         return Void();
     }
     // TODO: Remove event flag management once blocking MQ is implemented. b/33815422
@@ -293,7 +340,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());
         return Void();
     }
 
@@ -301,6 +348,7 @@
     mReadThread = new ReadThread(
             &mStopReadThread,
             mStream,
+            tempCommandMQ.get(),
             tempDataMQ.get(),
             tempStatusMQ.get(),
             mEfGroup,
@@ -309,13 +357,14 @@
     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());
         return Void();
     }
 
+    mCommandMQ = std::move(tempCommandMQ);
     mDataMQ = std::move(tempDataMQ);
     mStatusMQ = std::move(tempStatusMQ);
-    _hidl_cb(Result::OK, *mDataMQ->getDesc(), *mStatusMQ->getDesc());
+    _hidl_cb(Result::OK, *mCommandMQ->getDesc(), *mDataMQ->getDesc(), *mStatusMQ->getDesc());
     return Void();
 }
 
@@ -323,22 +372,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..3566430 100644
--- a/audio/2.0/default/StreamIn.h
+++ b/audio/2.0/default/StreamIn.h
@@ -52,6 +52,7 @@
 using ::android::sp;
 
 struct StreamIn : public IStreamIn {
+    typedef MessageQueue<ReadParameters, kSynchronizedReadWrite> CommandMQ;
     typedef MessageQueue<uint8_t, kSynchronizedReadWrite> DataMQ;
     typedef MessageQueue<ReadStatus, kSynchronizedReadWrite> StatusMQ;
 
@@ -97,12 +98,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..6e46db2 100644
--- a/audio/2.0/default/StreamOut.cpp
+++ b/audio/2.0/default/StreamOut.cpp
@@ -16,10 +16,12 @@
 
 #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"
 
@@ -36,6 +38,7 @@
     // 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,
@@ -43,6 +46,7 @@
             : Thread(false /*canCallJava*/),
               mStop(stop),
               mStream(stream),
+              mCommandMQ(commandMQ),
               mDataMQ(dataMQ),
               mStatusMQ(statusMQ),
               mEfGroup(efGroup),
@@ -56,13 +60,19 @@
   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() {
@@ -75,6 +85,32 @@
     return OK;
 }
 
+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);
+        }
+    }
+}
+
+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() {
     // This implementation doesn't return control back to the Thread until it decides to stop,
     // as the Thread uses mutexes, and this can lead to priority inversion.
@@ -86,24 +122,26 @@
         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 +159,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 +275,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;
 }
 
@@ -259,17 +304,19 @@
     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());
         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());
         return Void();
     }
     // TODO: Remove event flag management once blocking MQ is implemented. b/33815422
@@ -277,7 +324,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());
         return Void();
     }
 
@@ -285,6 +332,7 @@
     mWriteThread = new WriteThread(
             &mStopWriteThread,
             mStream,
+            tempCommandMQ.get(),
             tempDataMQ.get(),
             tempStatusMQ.get(),
             mEfGroup,
@@ -293,13 +341,14 @@
     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());
         return Void();
     }
 
+    mCommandMQ = std::move(tempCommandMQ);
     mDataMQ = std::move(tempDataMQ);
     mStatusMQ = std::move(tempStatusMQ);
-    _hidl_cb(Result::OK, *mDataMQ->getDesc(), *mStatusMQ->getDesc());
+    _hidl_cb(Result::OK, *mCommandMQ->getDesc(), *mDataMQ->getDesc(), *mStatusMQ->getDesc());
     return Void();
 }
 
@@ -405,8 +454,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..6616557 100644
--- a/audio/2.0/default/StreamOut.h
+++ b/audio/2.0/default/StreamOut.h
@@ -54,6 +54,7 @@
 using ::android::sp;
 
 struct StreamOut : public IStreamOut {
+    typedef MessageQueue<WriteCommand, kSynchronizedReadWrite> CommandMQ;
     typedef MessageQueue<uint8_t, kSynchronizedReadWrite> DataMQ;
     typedef MessageQueue<WriteStatus, kSynchronizedReadWrite> StatusMQ;
 
@@ -118,6 +119,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/common/2.0/Android.bp b/audio/common/2.0/Android.bp
index 5d33733..284766c 100644
--- a/audio/common/2.0/Android.bp
+++ b/audio/common/2.0/Android.bp
@@ -44,3 +44,95 @@
         "libutils",
     ],
 }
+
+genrule {
+    name: "android.hardware.audio.common.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.audio.common@2.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/audio/common/2.0/ $(genDir)/android/hardware/audio/common/2.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/audio/common/2.0/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.audio.common.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.audio.common@2.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/audio/common/2.0/ $(genDir)/android/hardware/audio/common/2.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/audio/common/2.0/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.audio.common.vts.driver@2.0",
+    generated_sources: ["android.hardware.audio.common.vts.driver@2.0_genc++"],
+    generated_headers: ["android.hardware.audio.common.vts.driver@2.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.audio.common.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",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+    ],
+}
+
+genrule {
+    name: "android.hardware.audio.common@2.0-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.audio.common@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/audio/common/2.0/ $(genDir)/android/hardware/audio/common/2.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/audio/common/2.0/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.audio.common@2.0-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.audio.common@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/audio/common/2.0/ $(genDir)/android/hardware/audio/common/2.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/audio/common/2.0/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.audio.common@2.0-vts.profiler",
+    generated_sources: ["android.hardware.audio.common@2.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.audio.common@2.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.audio.common@2.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.audio.common@2.0",
+    ],
+}
diff --git a/audio/effect/2.0/Android.bp b/audio/effect/2.0/Android.bp
index ee76a0e..98d6cfe 100644
--- a/audio/effect/2.0/Android.bp
+++ b/audio/effect/2.0/Android.bp
@@ -160,3 +160,213 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.audio.effect.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.audio.effect@2.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/audio/effect/2.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/audio/effect/2.0/types.vts.cpp",
+        "android/hardware/audio/effect/2.0/AcousticEchoCancelerEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/AutomaticGainControlEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/BassBoostEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/DownmixEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/Effect.vts.cpp",
+        "android/hardware/audio/effect/2.0/EffectBufferProviderCallback.vts.cpp",
+        "android/hardware/audio/effect/2.0/EffectsFactory.vts.cpp",
+        "android/hardware/audio/effect/2.0/EnvironmentalReverbEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/EqualizerEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/LoudnessEnhancerEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/NoiseSuppressionEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/PresetReverbEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/VirtualizerEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/VisualizerEffect.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.audio.effect.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.audio.effect@2.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/audio/effect/2.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/audio/effect/2.0/types.vts.h",
+        "android/hardware/audio/effect/2.0/AcousticEchoCancelerEffect.vts.h",
+        "android/hardware/audio/effect/2.0/AutomaticGainControlEffect.vts.h",
+        "android/hardware/audio/effect/2.0/BassBoostEffect.vts.h",
+        "android/hardware/audio/effect/2.0/DownmixEffect.vts.h",
+        "android/hardware/audio/effect/2.0/Effect.vts.h",
+        "android/hardware/audio/effect/2.0/EffectBufferProviderCallback.vts.h",
+        "android/hardware/audio/effect/2.0/EffectsFactory.vts.h",
+        "android/hardware/audio/effect/2.0/EnvironmentalReverbEffect.vts.h",
+        "android/hardware/audio/effect/2.0/EqualizerEffect.vts.h",
+        "android/hardware/audio/effect/2.0/LoudnessEnhancerEffect.vts.h",
+        "android/hardware/audio/effect/2.0/NoiseSuppressionEffect.vts.h",
+        "android/hardware/audio/effect/2.0/PresetReverbEffect.vts.h",
+        "android/hardware/audio/effect/2.0/VirtualizerEffect.vts.h",
+        "android/hardware/audio/effect/2.0/VisualizerEffect.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.audio.effect.vts.driver@2.0",
+    generated_sources: ["android.hardware.audio.effect.vts.driver@2.0_genc++"],
+    generated_headers: ["android.hardware.audio.effect.vts.driver@2.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.audio.effect.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.audio.effect@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.audio.effect@2.0-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.audio.effect@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/audio/effect/2.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/audio/effect/2.0/types.vts.cpp",
+        "android/hardware/audio/effect/2.0/AcousticEchoCancelerEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/AutomaticGainControlEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/BassBoostEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/DownmixEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/Effect.vts.cpp",
+        "android/hardware/audio/effect/2.0/EffectBufferProviderCallback.vts.cpp",
+        "android/hardware/audio/effect/2.0/EffectsFactory.vts.cpp",
+        "android/hardware/audio/effect/2.0/EnvironmentalReverbEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/EqualizerEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/LoudnessEnhancerEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/NoiseSuppressionEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/PresetReverbEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/VirtualizerEffect.vts.cpp",
+        "android/hardware/audio/effect/2.0/VisualizerEffect.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.audio.effect@2.0-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.audio.effect@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/audio/effect/2.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/audio/effect/2.0/types.vts.h",
+        "android/hardware/audio/effect/2.0/AcousticEchoCancelerEffect.vts.h",
+        "android/hardware/audio/effect/2.0/AutomaticGainControlEffect.vts.h",
+        "android/hardware/audio/effect/2.0/BassBoostEffect.vts.h",
+        "android/hardware/audio/effect/2.0/DownmixEffect.vts.h",
+        "android/hardware/audio/effect/2.0/Effect.vts.h",
+        "android/hardware/audio/effect/2.0/EffectBufferProviderCallback.vts.h",
+        "android/hardware/audio/effect/2.0/EffectsFactory.vts.h",
+        "android/hardware/audio/effect/2.0/EnvironmentalReverbEffect.vts.h",
+        "android/hardware/audio/effect/2.0/EqualizerEffect.vts.h",
+        "android/hardware/audio/effect/2.0/LoudnessEnhancerEffect.vts.h",
+        "android/hardware/audio/effect/2.0/NoiseSuppressionEffect.vts.h",
+        "android/hardware/audio/effect/2.0/PresetReverbEffect.vts.h",
+        "android/hardware/audio/effect/2.0/VirtualizerEffect.vts.h",
+        "android/hardware/audio/effect/2.0/VisualizerEffect.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.audio.effect@2.0-vts.profiler",
+    generated_sources: ["android.hardware.audio.effect@2.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.audio.effect@2.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.audio.effect@2.0-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.audio.effect@2.0",
+    ],
+}
diff --git a/audio/effect/2.0/default/Effect.cpp b/audio/effect/2.0/default/Effect.cpp
index 3c97fc4..0a4aeb7 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"
@@ -78,8 +81,9 @@
                 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.
+        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 +138,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 +751,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.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/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/benchmarks/msgq/1.0/Android.bp b/benchmarks/msgq/1.0/Android.bp
index b6f4bfd..8c853d8 100644
--- a/benchmarks/msgq/1.0/Android.bp
+++ b/benchmarks/msgq/1.0/Android.bp
@@ -50,3 +50,98 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.benchmarks.msgq.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.benchmarks.msgq@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/benchmarks/msgq/1.0/ $(genDir)/android/hardware/benchmarks/msgq/1.0/",
+    srcs: [
+        "IBenchmarkMsgQ.hal",
+    ],
+    out: [
+        "android/hardware/benchmarks/msgq/1.0/BenchmarkMsgQ.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.benchmarks.msgq.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.benchmarks.msgq@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/benchmarks/msgq/1.0/ $(genDir)/android/hardware/benchmarks/msgq/1.0/",
+    srcs: [
+        "IBenchmarkMsgQ.hal",
+    ],
+    out: [
+        "android/hardware/benchmarks/msgq/1.0/BenchmarkMsgQ.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.benchmarks.msgq.vts.driver@1.0",
+    generated_sources: ["android.hardware.benchmarks.msgq.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.benchmarks.msgq.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.benchmarks.msgq.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.benchmarks.msgq@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.benchmarks.msgq@1.0-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.benchmarks.msgq@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/benchmarks/msgq/1.0/ $(genDir)/android/hardware/benchmarks/msgq/1.0/",
+    srcs: [
+        "IBenchmarkMsgQ.hal",
+    ],
+    out: [
+        "android/hardware/benchmarks/msgq/1.0/BenchmarkMsgQ.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.benchmarks.msgq@1.0-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.benchmarks.msgq@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/benchmarks/msgq/1.0/ $(genDir)/android/hardware/benchmarks/msgq/1.0/",
+    srcs: [
+        "IBenchmarkMsgQ.hal",
+    ],
+    out: [
+        "android/hardware/benchmarks/msgq/1.0/BenchmarkMsgQ.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.benchmarks.msgq@1.0-vts.profiler",
+    generated_sources: ["android.hardware.benchmarks.msgq@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.benchmarks.msgq@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.benchmarks.msgq@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.benchmarks.msgq@1.0",
+    ],
+}
diff --git a/biometrics/fingerprint/2.1/Android.bp b/biometrics/fingerprint/2.1/Android.bp
index 2a252dc..ea148aa 100644
--- a/biometrics/fingerprint/2.1/Android.bp
+++ b/biometrics/fingerprint/2.1/Android.bp
@@ -126,83 +126,42 @@
 }
 
 genrule {
-    name: "android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprint-vts.profiler_genc++",
+    name: "android.hardware.biometrics.fingerprint@2.1-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.biometrics.fingerprint@2.1 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/biometrics/fingerprint/2.1/ $(genDir)/android/hardware/biometrics/fingerprint/2.1/",
     srcs: [
-        "IBiometricsFingerprint.hal",
         "types.hal",
+        "IBiometricsFingerprint.hal",
+        "IBiometricsFingerprintClientCallback.hal",
     ],
     out: [
+        "android/hardware/biometrics/fingerprint/2.1/types.vts.cpp",
         "android/hardware/biometrics/fingerprint/2.1/BiometricsFingerprint.vts.cpp",
-        "android/hardware/biometrics/fingerprint/2.1/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprint-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.biometrics.fingerprint@2.1 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/biometrics/fingerprint/2.1/ $(genDir)/android/hardware/biometrics/fingerprint/2.1/",
-    srcs: [
-        "IBiometricsFingerprint.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/biometrics/fingerprint/2.1/BiometricsFingerprint.vts.h",
-        "android/hardware/biometrics/fingerprint/2.1/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprint-vts.profiler",
-    generated_sources: ["android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprint-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprint-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprint-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.biometrics.fingerprint@2.1",
-    ],
-}
-
-genrule {
-    name: "android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprintClientCallback-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.biometrics.fingerprint@2.1 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/biometrics/fingerprint/2.1/ $(genDir)/android/hardware/biometrics/fingerprint/2.1/",
-    srcs: [
-        "IBiometricsFingerprintClientCallback.hal",
-        "types.hal",
-    ],
-    out: [
         "android/hardware/biometrics/fingerprint/2.1/BiometricsFingerprintClientCallback.vts.cpp",
-        "android/hardware/biometrics/fingerprint/2.1/types.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprintClientCallback-vts.profiler_genc++_headers",
+    name: "android.hardware.biometrics.fingerprint@2.1-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.biometrics.fingerprint@2.1 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/biometrics/fingerprint/2.1/ $(genDir)/android/hardware/biometrics/fingerprint/2.1/",
     srcs: [
-        "IBiometricsFingerprintClientCallback.hal",
         "types.hal",
+        "IBiometricsFingerprint.hal",
+        "IBiometricsFingerprintClientCallback.hal",
     ],
     out: [
-        "android/hardware/biometrics/fingerprint/2.1/BiometricsFingerprintClientCallback.vts.h",
         "android/hardware/biometrics/fingerprint/2.1/types.vts.h",
+        "android/hardware/biometrics/fingerprint/2.1/BiometricsFingerprint.vts.h",
+        "android/hardware/biometrics/fingerprint/2.1/BiometricsFingerprintClientCallback.vts.h",
     ],
 }
 
 cc_library_shared {
-    name: "android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprintClientCallback-vts.profiler",
-    generated_sources: ["android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprintClientCallback-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprintClientCallback-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.biometrics.fingerprint@2.1-IBiometricsFingerprintClientCallback-vts.profiler_genc++_headers"],
+    name: "android.hardware.biometrics.fingerprint@2.1-vts.profiler",
+    generated_sources: ["android.hardware.biometrics.fingerprint@2.1-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.biometrics.fingerprint@2.1-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.biometrics.fingerprint@2.1-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
diff --git a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
index 154b7a6..7f0d005 100644
--- a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
+++ b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
@@ -50,7 +50,7 @@
 }
 
 BiometricsFingerprint::~BiometricsFingerprint() {
-    ALOGV(LOG_VERBOSE, LOG_TAG, "~BiometricsFingerprint()\n");
+    ALOGV("~BiometricsFingerprint()");
     if (mDevice == nullptr) {
         ALOGE("No valid device");
         return;
diff --git a/bluetooth/1.0/Android.bp b/bluetooth/1.0/Android.bp
index 7928fb6..f3e5a62 100644
--- a/bluetooth/1.0/Android.bp
+++ b/bluetooth/1.0/Android.bp
@@ -62,3 +62,114 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.bluetooth.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.bluetooth@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/bluetooth/1.0/ $(genDir)/android/hardware/bluetooth/1.0/",
+    srcs: [
+        "types.hal",
+        "IBluetoothHci.hal",
+        "IBluetoothHciCallbacks.hal",
+    ],
+    out: [
+        "android/hardware/bluetooth/1.0/types.vts.cpp",
+        "android/hardware/bluetooth/1.0/BluetoothHci.vts.cpp",
+        "android/hardware/bluetooth/1.0/BluetoothHciCallbacks.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.bluetooth.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.bluetooth@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/bluetooth/1.0/ $(genDir)/android/hardware/bluetooth/1.0/",
+    srcs: [
+        "types.hal",
+        "IBluetoothHci.hal",
+        "IBluetoothHciCallbacks.hal",
+    ],
+    out: [
+        "android/hardware/bluetooth/1.0/types.vts.h",
+        "android/hardware/bluetooth/1.0/BluetoothHci.vts.h",
+        "android/hardware/bluetooth/1.0/BluetoothHciCallbacks.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.bluetooth.vts.driver@1.0",
+    generated_sources: ["android.hardware.bluetooth.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.bluetooth.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.bluetooth.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.bluetooth@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.bluetooth@1.0-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.bluetooth@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/bluetooth/1.0/ $(genDir)/android/hardware/bluetooth/1.0/",
+    srcs: [
+        "types.hal",
+        "IBluetoothHci.hal",
+        "IBluetoothHciCallbacks.hal",
+    ],
+    out: [
+        "android/hardware/bluetooth/1.0/types.vts.cpp",
+        "android/hardware/bluetooth/1.0/BluetoothHci.vts.cpp",
+        "android/hardware/bluetooth/1.0/BluetoothHciCallbacks.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.bluetooth@1.0-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.bluetooth@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/bluetooth/1.0/ $(genDir)/android/hardware/bluetooth/1.0/",
+    srcs: [
+        "types.hal",
+        "IBluetoothHci.hal",
+        "IBluetoothHciCallbacks.hal",
+    ],
+    out: [
+        "android/hardware/bluetooth/1.0/types.vts.h",
+        "android/hardware/bluetooth/1.0/BluetoothHci.vts.h",
+        "android/hardware/bluetooth/1.0/BluetoothHciCallbacks.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.bluetooth@1.0-vts.profiler",
+    generated_sources: ["android.hardware.bluetooth@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.bluetooth@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.bluetooth@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.bluetooth@1.0",
+    ],
+}
diff --git a/bluetooth/1.0/default/async_fd_watcher.cc b/bluetooth/1.0/default/async_fd_watcher.cc
index 9cd86f1..161a74a 100644
--- a/bluetooth/1.0/default/async_fd_watcher.cc
+++ b/bluetooth/1.0/default/async_fd_watcher.cc
@@ -140,9 +140,15 @@
 
     // Timeout.
     if (retval == 0) {
-      std::unique_lock<std::mutex> guard(timeout_mutex_);
-      if (timeout_ms_ > std::chrono::milliseconds(0) && timeout_cb_)
-        timeout_cb_();
+      // 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;
     }
 
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/test/async_fd_watcher_unittest.cc b/bluetooth/1.0/default/test/async_fd_watcher_unittest.cc
index c21acb8..49ea44a 100644
--- a/bluetooth/1.0/default/test/async_fd_watcher_unittest.cc
+++ b/bluetooth/1.0/default/test/async_fd_watcher_unittest.cc
@@ -56,8 +56,7 @@
     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);
+    EXPECT_FALSE(bind(fd, (sockaddr*)&serv_addr, sizeof(serv_addr)) < 0);
 
     ALOGD("%s before listen", __func__);
     listen(fd, 1);
@@ -81,11 +80,12 @@
     int n = TEMP_FAILURE_RETRY(read(fd, server_buffer_, kBufferSize - 1));
     EXPECT_FALSE(n < 0);
 
-    if (n == 0)  // got EOF
+    if (n == 0) {  // got EOF
       ALOGD("%s: EOF", __func__);
-    else
+    } else {
       ALOGD("%s: Got something", __func__);
       n = write(fd, "1", 1);
+    }
   }
 
   void SetUp() override {
@@ -101,7 +101,10 @@
       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); });
+      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(
@@ -110,7 +113,10 @@
       // 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); });
+    conn_watcher_.ConfigureTimeout(std::chrono::seconds(1), [this]() {
+      bool connection_timeout = true;
+      ASSERT_FALSE(connection_timeout);
+    });
   }
 
   void CleanUpServer() {
@@ -135,7 +141,7 @@
   }
 
   bool TimedOut() {
-    ALOGD("%s %d", __func__, timed_out_? 1 : 0);
+    ALOGD("%s %d", __func__, timed_out_ ? 1 : 0);
     return timed_out_;
   }
 
@@ -198,8 +204,8 @@
 
   // 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);
+    bool connection_timeout = true;
+    ASSERT_FALSE(connection_timeout);
   });
 
   ConnectClient();
@@ -220,7 +226,8 @@
   });
 
   // Set the timeout flag after 100ms.
-  conn_watcher.ConfigureTimeout(std::chrono::milliseconds(100), [this, timeout_ptr]() { *timeout_ptr = true; });
+  conn_watcher.ConfigureTimeout(std::chrono::milliseconds(100),
+                                [this, timeout_ptr]() { *timeout_ptr = true; });
   EXPECT_FALSE(timed_out);
   sleep(1);
   EXPECT_TRUE(timed_out);
@@ -228,6 +235,38 @@
   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();
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 51a0add..f228982 100644
--- a/bluetooth/1.0/default/vendor_interface.cc
+++ b/bluetooth/1.0/default/vendor_interface.cc
@@ -39,8 +39,15 @@
 using android::hardware::bluetooth::V1_0::implementation::VendorInterface;
 using android::hardware::hidl_vec;
 
-tINT_CMD_CBACK internal_command_cb;
-uint16_t internal_command_opcode;
+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;
 
@@ -105,19 +112,20 @@
 
   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;
+  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, cb: %p", __func__, opcode, buffer,
         callback);
-  internal_command_cb = callback;
-  internal_command_opcode = opcode;
+  internal_command.cb = callback;
+  internal_command.opcode = opcode;
   uint8_t type = HCI_PACKET_TYPE_COMMAND;
   HC_BT_HDR* bt_hdr = reinterpret_cast<HC_BT_HDR*>(buffer);
   VendorInterface::get()->Send(type, bt_hdr->data, bt_hdr->len);
+  delete[] reinterpret_cast<uint8_t*>(buffer);
   return true;
 }
 
@@ -268,6 +276,9 @@
   fd_watcher_.WatchFdForNonBlockingReads(uart_fd_,
                                          [this](int fd) { OnDataReady(fd); });
 
+  // Initially, the power management is off.
+  lpm_wake_deasserted = false;
+
   // Start configuring the firmware
   firmware_startup_timer_ = new FirmwareStartupTimer();
   lib_interface_->op(BT_VND_OP_FW_CFG, nullptr);
@@ -299,6 +310,19 @@
 size_t VendorInterface::Send(uint8_t type, const uint8_t* data, size_t length) {
   if (uart_fd_ == INVALID_FD) return 0;
 
+  recent_activity_flag = true;
+
+  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));
+  }
+
   int rv = write_safely(uart_fd_, &type, sizeof(type));
   if (rv == sizeof(type))
     rv = write_safely(uart_fd_, data, length);
@@ -318,6 +342,32 @@
     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(); });
+
+  bt_vendor_lpm_wake_state_t wakeState = BT_VND_LPM_WAKE_ASSERT;
+  lib_interface_->op(BT_VND_OP_LPM_WAKE_SET_STATE, &wakeState);
+}
+
+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) {
@@ -367,15 +417,15 @@
       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_);
 
           // The callbacks can send new commands, so don't zero after calling.
-          tINT_CMD_CBACK saved_cb = internal_command_cb;
-          internal_command_cb = nullptr;
+          tINT_CMD_CBACK saved_cb = internal_command.cb;
+          internal_command.cb = nullptr;
           saved_cb(bt_hdr);
         } else {
           packet_read_cb_(hci_packet_type_, hci_packet_);
diff --git a/bluetooth/1.0/default/vendor_interface.h b/bluetooth/1.0/default/vendor_interface.h
index 79611cd..ce5769c 100644
--- a/bluetooth/1.0/default/vendor_interface.h
+++ b/bluetooth/1.0/default/vendor_interface.h
@@ -53,6 +53,8 @@
             PacketReadCallback packet_read_cb);
   void Close();
 
+  void OnTimeout();
+
   void OnDataReady(int fd);
 
   void *lib_handle_;
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/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/boot/1.0/Android.bp b/boot/1.0/Android.bp
index 8e62c89..2ac5498 100644
--- a/boot/1.0/Android.bp
+++ b/boot/1.0/Android.bp
@@ -114,38 +114,38 @@
 }
 
 genrule {
-    name: "android.hardware.boot@1.0-IBootControl-vts.profiler_genc++",
+    name: "android.hardware.boot@1.0-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",
+        "IBootControl.hal",
     ],
     out: [
-        "android/hardware/boot/1.0/BootControl.vts.cpp",
         "android/hardware/boot/1.0/types.vts.cpp",
+        "android/hardware/boot/1.0/BootControl.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.boot@1.0-IBootControl-vts.profiler_genc++_headers",
+    name: "android.hardware.boot@1.0-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",
+        "IBootControl.hal",
     ],
     out: [
-        "android/hardware/boot/1.0/BootControl.vts.h",
         "android/hardware/boot/1.0/types.vts.h",
+        "android/hardware/boot/1.0/BootControl.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"],
+    name: "android.hardware.boot@1.0-vts.profiler",
+    generated_sources: ["android.hardware.boot@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.boot@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.boot@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/broadcastradio/1.0/Android.bp b/broadcastradio/1.0/Android.bp
index cf44add..51cfbe9 100644
--- a/broadcastradio/1.0/Android.bp
+++ b/broadcastradio/1.0/Android.bp
@@ -78,3 +78,130 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.broadcastradio.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.broadcastradio@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/broadcastradio/1.0/ $(genDir)/android/hardware/broadcastradio/1.0/",
+    srcs: [
+        "types.hal",
+        "IBroadcastRadio.hal",
+        "IBroadcastRadioFactory.hal",
+        "ITuner.hal",
+        "ITunerCallback.hal",
+    ],
+    out: [
+        "android/hardware/broadcastradio/1.0/types.vts.cpp",
+        "android/hardware/broadcastradio/1.0/BroadcastRadio.vts.cpp",
+        "android/hardware/broadcastradio/1.0/BroadcastRadioFactory.vts.cpp",
+        "android/hardware/broadcastradio/1.0/Tuner.vts.cpp",
+        "android/hardware/broadcastradio/1.0/TunerCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.broadcastradio.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.broadcastradio@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/broadcastradio/1.0/ $(genDir)/android/hardware/broadcastradio/1.0/",
+    srcs: [
+        "types.hal",
+        "IBroadcastRadio.hal",
+        "IBroadcastRadioFactory.hal",
+        "ITuner.hal",
+        "ITunerCallback.hal",
+    ],
+    out: [
+        "android/hardware/broadcastradio/1.0/types.vts.h",
+        "android/hardware/broadcastradio/1.0/BroadcastRadio.vts.h",
+        "android/hardware/broadcastradio/1.0/BroadcastRadioFactory.vts.h",
+        "android/hardware/broadcastradio/1.0/Tuner.vts.h",
+        "android/hardware/broadcastradio/1.0/TunerCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.broadcastradio.vts.driver@1.0",
+    generated_sources: ["android.hardware.broadcastradio.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.broadcastradio.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.broadcastradio.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.broadcastradio@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.broadcastradio@1.0-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.broadcastradio@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/broadcastradio/1.0/ $(genDir)/android/hardware/broadcastradio/1.0/",
+    srcs: [
+        "types.hal",
+        "IBroadcastRadio.hal",
+        "IBroadcastRadioFactory.hal",
+        "ITuner.hal",
+        "ITunerCallback.hal",
+    ],
+    out: [
+        "android/hardware/broadcastradio/1.0/types.vts.cpp",
+        "android/hardware/broadcastradio/1.0/BroadcastRadio.vts.cpp",
+        "android/hardware/broadcastradio/1.0/BroadcastRadioFactory.vts.cpp",
+        "android/hardware/broadcastradio/1.0/Tuner.vts.cpp",
+        "android/hardware/broadcastradio/1.0/TunerCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.broadcastradio@1.0-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.broadcastradio@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/broadcastradio/1.0/ $(genDir)/android/hardware/broadcastradio/1.0/",
+    srcs: [
+        "types.hal",
+        "IBroadcastRadio.hal",
+        "IBroadcastRadioFactory.hal",
+        "ITuner.hal",
+        "ITunerCallback.hal",
+    ],
+    out: [
+        "android/hardware/broadcastradio/1.0/types.vts.h",
+        "android/hardware/broadcastradio/1.0/BroadcastRadio.vts.h",
+        "android/hardware/broadcastradio/1.0/BroadcastRadioFactory.vts.h",
+        "android/hardware/broadcastradio/1.0/Tuner.vts.h",
+        "android/hardware/broadcastradio/1.0/TunerCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.broadcastradio@1.0-vts.profiler",
+    generated_sources: ["android.hardware.broadcastradio@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.broadcastradio@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.broadcastradio@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.broadcastradio@1.0",
+    ],
+}
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/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..7ab4ea9 100644
--- a/camera/common/1.0/Android.bp
+++ b/camera/common/1.0/Android.bp
@@ -44,3 +44,95 @@
         "libutils",
     ],
 }
+
+genrule {
+    name: "android.hardware.camera.common.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.camera.common@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/camera/common/1.0/ $(genDir)/android/hardware/camera/common/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/camera/common/1.0/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.common.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.camera.common@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/camera/common/1.0/ $(genDir)/android/hardware/camera/common/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/camera/common/1.0/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.common.vts.driver@1.0",
+    generated_sources: ["android.hardware.camera.common.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.camera.common.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.common.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.camera.common@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.common@1.0-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.camera.common@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/camera/common/1.0/ $(genDir)/android/hardware/camera/common/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/camera/common/1.0/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.common@1.0-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.camera.common@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/camera/common/1.0/ $(genDir)/android/hardware/camera/common/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/camera/common/1.0/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.common@1.0-vts.profiler",
+    generated_sources: ["android.hardware.camera.common@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.camera.common@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.common@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.camera.common@1.0",
+    ],
+}
diff --git a/camera/device/1.0/Android.bp b/camera/device/1.0/Android.bp
index 9a6941a..16b3de4 100644
--- a/camera/device/1.0/Android.bp
+++ b/camera/device/1.0/Android.bp
@@ -76,3 +76,131 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.camera.device.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.camera.device@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/camera/device/1.0/ $(genDir)/android/hardware/camera/device/1.0/",
+    srcs: [
+        "types.hal",
+        "ICameraDevice.hal",
+        "ICameraDeviceCallback.hal",
+        "ICameraDevicePreviewCallback.hal",
+    ],
+    out: [
+        "android/hardware/camera/device/1.0/types.vts.cpp",
+        "android/hardware/camera/device/1.0/CameraDevice.vts.cpp",
+        "android/hardware/camera/device/1.0/CameraDeviceCallback.vts.cpp",
+        "android/hardware/camera/device/1.0/CameraDevicePreviewCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.device.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.camera.device@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/camera/device/1.0/ $(genDir)/android/hardware/camera/device/1.0/",
+    srcs: [
+        "types.hal",
+        "ICameraDevice.hal",
+        "ICameraDeviceCallback.hal",
+        "ICameraDevicePreviewCallback.hal",
+    ],
+    out: [
+        "android/hardware/camera/device/1.0/types.vts.h",
+        "android/hardware/camera/device/1.0/CameraDevice.vts.h",
+        "android/hardware/camera/device/1.0/CameraDeviceCallback.vts.h",
+        "android/hardware/camera/device/1.0/CameraDevicePreviewCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.device.vts.driver@1.0",
+    generated_sources: ["android.hardware.camera.device.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.camera.device.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.device.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.camera.common@1.0",
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+        "android.hardware.camera.device@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.camera.common@1.0",
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.device@1.0-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.camera.device@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/camera/device/1.0/ $(genDir)/android/hardware/camera/device/1.0/",
+    srcs: [
+        "types.hal",
+        "ICameraDevice.hal",
+        "ICameraDeviceCallback.hal",
+        "ICameraDevicePreviewCallback.hal",
+    ],
+    out: [
+        "android/hardware/camera/device/1.0/types.vts.cpp",
+        "android/hardware/camera/device/1.0/CameraDevice.vts.cpp",
+        "android/hardware/camera/device/1.0/CameraDeviceCallback.vts.cpp",
+        "android/hardware/camera/device/1.0/CameraDevicePreviewCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.device@1.0-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.camera.device@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/camera/device/1.0/ $(genDir)/android/hardware/camera/device/1.0/",
+    srcs: [
+        "types.hal",
+        "ICameraDevice.hal",
+        "ICameraDeviceCallback.hal",
+        "ICameraDevicePreviewCallback.hal",
+    ],
+    out: [
+        "android/hardware/camera/device/1.0/types.vts.h",
+        "android/hardware/camera/device/1.0/CameraDevice.vts.h",
+        "android/hardware/camera/device/1.0/CameraDeviceCallback.vts.h",
+        "android/hardware/camera/device/1.0/CameraDevicePreviewCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.device@1.0-vts.profiler",
+    generated_sources: ["android.hardware.camera.device@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.camera.device@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.device@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.camera.common@1.0",
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+        "android.hardware.camera.device@1.0",
+    ],
+}
diff --git a/camera/device/3.2/Android.bp b/camera/device/3.2/Android.bp
index 8b72d5b..7c740ae 100644
--- a/camera/device/3.2/Android.bp
+++ b/camera/device/3.2/Android.bp
@@ -76,3 +76,131 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.camera.device.vts.driver@3.2_genc++",
+    tools: ["hidl-gen", "vtsc"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.2 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/camera/device/3.2/ $(genDir)/android/hardware/camera/device/3.2/",
+    srcs: [
+        "types.hal",
+        "ICameraDevice.hal",
+        "ICameraDeviceCallback.hal",
+        "ICameraDeviceSession.hal",
+    ],
+    out: [
+        "android/hardware/camera/device/3.2/types.vts.cpp",
+        "android/hardware/camera/device/3.2/CameraDevice.vts.cpp",
+        "android/hardware/camera/device/3.2/CameraDeviceCallback.vts.cpp",
+        "android/hardware/camera/device/3.2/CameraDeviceSession.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.device.vts.driver@3.2_genc++_headers",
+    tools: ["hidl-gen", "vtsc"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.2 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/camera/device/3.2/ $(genDir)/android/hardware/camera/device/3.2/",
+    srcs: [
+        "types.hal",
+        "ICameraDevice.hal",
+        "ICameraDeviceCallback.hal",
+        "ICameraDeviceSession.hal",
+    ],
+    out: [
+        "android/hardware/camera/device/3.2/types.vts.h",
+        "android/hardware/camera/device/3.2/CameraDevice.vts.h",
+        "android/hardware/camera/device/3.2/CameraDeviceCallback.vts.h",
+        "android/hardware/camera/device/3.2/CameraDeviceSession.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.device.vts.driver@3.2",
+    generated_sources: ["android.hardware.camera.device.vts.driver@3.2_genc++"],
+    generated_headers: ["android.hardware.camera.device.vts.driver@3.2_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.device.vts.driver@3.2_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.camera.common@1.0",
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+        "android.hardware.camera.device@3.2",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.camera.common@1.0",
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.device@3.2-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.camera.device@3.2 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/camera/device/3.2/ $(genDir)/android/hardware/camera/device/3.2/",
+    srcs: [
+        "types.hal",
+        "ICameraDevice.hal",
+        "ICameraDeviceCallback.hal",
+        "ICameraDeviceSession.hal",
+    ],
+    out: [
+        "android/hardware/camera/device/3.2/types.vts.cpp",
+        "android/hardware/camera/device/3.2/CameraDevice.vts.cpp",
+        "android/hardware/camera/device/3.2/CameraDeviceCallback.vts.cpp",
+        "android/hardware/camera/device/3.2/CameraDeviceSession.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.device@3.2-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.camera.device@3.2 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/camera/device/3.2/ $(genDir)/android/hardware/camera/device/3.2/",
+    srcs: [
+        "types.hal",
+        "ICameraDevice.hal",
+        "ICameraDeviceCallback.hal",
+        "ICameraDeviceSession.hal",
+    ],
+    out: [
+        "android/hardware/camera/device/3.2/types.vts.h",
+        "android/hardware/camera/device/3.2/CameraDevice.vts.h",
+        "android/hardware/camera/device/3.2/CameraDeviceCallback.vts.h",
+        "android/hardware/camera/device/3.2/CameraDeviceSession.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.device@3.2-vts.profiler",
+    generated_sources: ["android.hardware.camera.device@3.2-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.camera.device@3.2-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.device@3.2-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.camera.common@1.0",
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+        "android.hardware.camera.device@3.2",
+    ],
+}
diff --git a/camera/metadata/3.2/Android.bp b/camera/metadata/3.2/Android.bp
index 2625026..448c655 100644
--- a/camera/metadata/3.2/Android.bp
+++ b/camera/metadata/3.2/Android.bp
@@ -44,3 +44,95 @@
         "libutils",
     ],
 }
+
+genrule {
+    name: "android.hardware.camera.metadata.vts.driver@3.2_genc++",
+    tools: ["hidl-gen", "vtsc"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.metadata@3.2 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/camera/metadata/3.2/ $(genDir)/android/hardware/camera/metadata/3.2/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/camera/metadata/3.2/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.metadata.vts.driver@3.2_genc++_headers",
+    tools: ["hidl-gen", "vtsc"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.metadata@3.2 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/camera/metadata/3.2/ $(genDir)/android/hardware/camera/metadata/3.2/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/camera/metadata/3.2/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.metadata.vts.driver@3.2",
+    generated_sources: ["android.hardware.camera.metadata.vts.driver@3.2_genc++"],
+    generated_headers: ["android.hardware.camera.metadata.vts.driver@3.2_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.metadata.vts.driver@3.2_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.camera.metadata@3.2",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.metadata@3.2-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.camera.metadata@3.2 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/camera/metadata/3.2/ $(genDir)/android/hardware/camera/metadata/3.2/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/camera/metadata/3.2/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.metadata@3.2-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.camera.metadata@3.2 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/camera/metadata/3.2/ $(genDir)/android/hardware/camera/metadata/3.2/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/camera/metadata/3.2/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.metadata@3.2-vts.profiler",
+    generated_sources: ["android.hardware.camera.metadata@3.2-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.camera.metadata@3.2-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.metadata@3.2-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.camera.metadata@3.2",
+    ],
+}
diff --git a/camera/metadata/3.2/Android.mk b/camera/metadata/3.2/Android.mk
index 083fb6b..6604ccd 100644
--- a/camera/metadata/3.2/Android.mk
+++ b/camera/metadata/3.2/Android.mk
@@ -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
@@ -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/provider/2.4/Android.bp b/camera/provider/2.4/Android.bp
index f5f10de..3705086 100644
--- a/camera/provider/2.4/Android.bp
+++ b/camera/provider/2.4/Android.bp
@@ -64,3 +64,115 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.camera.provider.vts.driver@2.4_genc++",
+    tools: ["hidl-gen", "vtsc"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.provider@2.4 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/camera/provider/2.4/ $(genDir)/android/hardware/camera/provider/2.4/",
+    srcs: [
+        "ICameraProvider.hal",
+        "ICameraProviderCallback.hal",
+    ],
+    out: [
+        "android/hardware/camera/provider/2.4/CameraProvider.vts.cpp",
+        "android/hardware/camera/provider/2.4/CameraProviderCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.provider.vts.driver@2.4_genc++_headers",
+    tools: ["hidl-gen", "vtsc"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.provider@2.4 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/camera/provider/2.4/ $(genDir)/android/hardware/camera/provider/2.4/",
+    srcs: [
+        "ICameraProvider.hal",
+        "ICameraProviderCallback.hal",
+    ],
+    out: [
+        "android/hardware/camera/provider/2.4/CameraProvider.vts.h",
+        "android/hardware/camera/provider/2.4/CameraProviderCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.provider.vts.driver@2.4",
+    generated_sources: ["android.hardware.camera.provider.vts.driver@2.4_genc++"],
+    generated_headers: ["android.hardware.camera.provider.vts.driver@2.4_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.provider.vts.driver@2.4_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.camera.common@1.0",
+        "android.hardware.camera.device@1.0",
+        "android.hardware.camera.device@3.2",
+        "android.hidl.base@1.0",
+        "android.hardware.camera.provider@2.4",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.camera.common@1.0",
+        "android.hardware.camera.device@1.0",
+        "android.hardware.camera.device@3.2",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.provider@2.4-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.camera.provider@2.4 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/camera/provider/2.4/ $(genDir)/android/hardware/camera/provider/2.4/",
+    srcs: [
+        "ICameraProvider.hal",
+        "ICameraProviderCallback.hal",
+    ],
+    out: [
+        "android/hardware/camera/provider/2.4/CameraProvider.vts.cpp",
+        "android/hardware/camera/provider/2.4/CameraProviderCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.camera.provider@2.4-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.camera.provider@2.4 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/camera/provider/2.4/ $(genDir)/android/hardware/camera/provider/2.4/",
+    srcs: [
+        "ICameraProvider.hal",
+        "ICameraProviderCallback.hal",
+    ],
+    out: [
+        "android/hardware/camera/provider/2.4/CameraProvider.vts.h",
+        "android/hardware/camera/provider/2.4/CameraProviderCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.camera.provider@2.4-vts.profiler",
+    generated_sources: ["android.hardware.camera.provider@2.4-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.camera.provider@2.4-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.camera.provider@2.4-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.camera.common@1.0",
+        "android.hardware.camera.device@1.0",
+        "android.hardware.camera.device@3.2",
+        "android.hidl.base@1.0",
+        "android.hardware.camera.provider@2.4",
+    ],
+}
diff --git a/configstore/1.0/Android.bp b/configstore/1.0/Android.bp
index 06fcbd9..d0e3122 100644
--- a/configstore/1.0/Android.bp
+++ b/configstore/1.0/Android.bp
@@ -54,3 +54,106 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.configstore.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.configstore@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/configstore/1.0/ $(genDir)/android/hardware/configstore/1.0/",
+    srcs: [
+        "types.hal",
+        "ISurfaceFlingerConfigs.hal",
+    ],
+    out: [
+        "android/hardware/configstore/1.0/types.vts.cpp",
+        "android/hardware/configstore/1.0/SurfaceFlingerConfigs.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.configstore.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.configstore@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/configstore/1.0/ $(genDir)/android/hardware/configstore/1.0/",
+    srcs: [
+        "types.hal",
+        "ISurfaceFlingerConfigs.hal",
+    ],
+    out: [
+        "android/hardware/configstore/1.0/types.vts.h",
+        "android/hardware/configstore/1.0/SurfaceFlingerConfigs.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.configstore.vts.driver@1.0",
+    generated_sources: ["android.hardware.configstore.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.configstore.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.configstore.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.configstore@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.configstore@1.0-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.configstore@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/configstore/1.0/ $(genDir)/android/hardware/configstore/1.0/",
+    srcs: [
+        "types.hal",
+        "ISurfaceFlingerConfigs.hal",
+    ],
+    out: [
+        "android/hardware/configstore/1.0/types.vts.cpp",
+        "android/hardware/configstore/1.0/SurfaceFlingerConfigs.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.configstore@1.0-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.configstore@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/configstore/1.0/ $(genDir)/android/hardware/configstore/1.0/",
+    srcs: [
+        "types.hal",
+        "ISurfaceFlingerConfigs.hal",
+    ],
+    out: [
+        "android/hardware/configstore/1.0/types.vts.h",
+        "android/hardware/configstore/1.0/SurfaceFlingerConfigs.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.configstore@1.0-vts.profiler",
+    generated_sources: ["android.hardware.configstore@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.configstore@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.configstore@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.configstore@1.0",
+    ],
+}
diff --git a/contexthub/1.0/Android.bp b/contexthub/1.0/Android.bp
index 5798306..e25c70d 100644
--- a/contexthub/1.0/Android.bp
+++ b/contexthub/1.0/Android.bp
@@ -62,3 +62,114 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.contexthub.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.contexthub@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/contexthub/1.0/ $(genDir)/android/hardware/contexthub/1.0/",
+    srcs: [
+        "types.hal",
+        "IContexthub.hal",
+        "IContexthubCallback.hal",
+    ],
+    out: [
+        "android/hardware/contexthub/1.0/types.vts.cpp",
+        "android/hardware/contexthub/1.0/Contexthub.vts.cpp",
+        "android/hardware/contexthub/1.0/ContexthubCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.contexthub.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.contexthub@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/contexthub/1.0/ $(genDir)/android/hardware/contexthub/1.0/",
+    srcs: [
+        "types.hal",
+        "IContexthub.hal",
+        "IContexthubCallback.hal",
+    ],
+    out: [
+        "android/hardware/contexthub/1.0/types.vts.h",
+        "android/hardware/contexthub/1.0/Contexthub.vts.h",
+        "android/hardware/contexthub/1.0/ContexthubCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.contexthub.vts.driver@1.0",
+    generated_sources: ["android.hardware.contexthub.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.contexthub.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.contexthub.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.contexthub@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.contexthub@1.0-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.contexthub@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/contexthub/1.0/ $(genDir)/android/hardware/contexthub/1.0/",
+    srcs: [
+        "types.hal",
+        "IContexthub.hal",
+        "IContexthubCallback.hal",
+    ],
+    out: [
+        "android/hardware/contexthub/1.0/types.vts.cpp",
+        "android/hardware/contexthub/1.0/Contexthub.vts.cpp",
+        "android/hardware/contexthub/1.0/ContexthubCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.contexthub@1.0-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.contexthub@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/contexthub/1.0/ $(genDir)/android/hardware/contexthub/1.0/",
+    srcs: [
+        "types.hal",
+        "IContexthub.hal",
+        "IContexthubCallback.hal",
+    ],
+    out: [
+        "android/hardware/contexthub/1.0/types.vts.h",
+        "android/hardware/contexthub/1.0/Contexthub.vts.h",
+        "android/hardware/contexthub/1.0/ContexthubCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.contexthub@1.0-vts.profiler",
+    generated_sources: ["android.hardware.contexthub@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.contexthub@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.contexthub@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.contexthub@1.0",
+    ],
+}
diff --git a/contexthub/1.0/vts/Android.mk b/contexthub/1.0/vts/Android.mk
deleted file mode 100644
index 266884b..0000000
--- a/contexthub/1.0/vts/Android.mk
+++ /dev/null
@@ -1,21 +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)
-
-contexthub-vts-path := $(LOCAL_PATH)
-
-include $(contexthub-vts-path)/functional/vts/testcases/hal/contexthub/hidl/target/Android.mk
diff --git a/contexthub/1.0/vts/Contexthub.vts b/contexthub/1.0/vts/Contexthub.vts
index b4e42f5..b06efe6 100644
--- a/contexthub/1.0/vts/Contexthub.vts
+++ b/contexthub/1.0/vts/Contexthub.vts
@@ -6,8 +6,494 @@
 
 import: "android.hardware.contexthub@1.0::IContexthubCallback"
 import: "android.hardware.contexthub@1.0::types"
+import: "android.hidl.base@1.0::types"
 
 interface: {
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::Result"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "OK"
+            scalar_value: {
+                uint32_t: 0
+            }
+            enumerator: "UNKNOWN_FAILURE"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "BAD_PARAMS"
+            scalar_value: {
+                uint32_t: 2
+            }
+            enumerator: "NOT_INIT"
+            scalar_value: {
+                uint32_t: 3
+            }
+            enumerator: "TRANSACTION_FAILED"
+            scalar_value: {
+                uint32_t: 4
+            }
+            enumerator: "TRANSACTION_PENDING"
+            scalar_value: {
+                uint32_t: 5
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::NanoAppFlags"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "SIGNED"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "ENCRYPTED"
+            scalar_value: {
+                uint32_t: 2
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::NanoAppBinary"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "appId"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "appVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "flags"
+            type: TYPE_MASK
+            scalar_type: "uint32_t"
+            predefined_type: "::android::hardware::contexthub::V1_0::NanoAppFlags"
+        }
+        struct_value: {
+            name: "targetChreApiMajorVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "targetChreApiMinorVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "customBinary"
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_SCALAR
+                scalar_type: "uint8_t"
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::SensorType"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "RESERVED"
+            scalar_value: {
+                uint32_t: 0
+            }
+            enumerator: "ACCELEROMETER"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "GYROSCOPE"
+            scalar_value: {
+                uint32_t: 2
+            }
+            enumerator: "MAGNETOMETER"
+            scalar_value: {
+                uint32_t: 3
+            }
+            enumerator: "BAROMETER"
+            scalar_value: {
+                uint32_t: 4
+            }
+            enumerator: "PROXIMITY_SENSOR"
+            scalar_value: {
+                uint32_t: 5
+            }
+            enumerator: "AMBIENT_LIGHT_SENSOR"
+            scalar_value: {
+                uint32_t: 6
+            }
+            enumerator: "STATIONARY_DETECT"
+            scalar_value: {
+                uint32_t: 7
+            }
+            enumerator: "INSTANT_MOTION_DETECT"
+            scalar_value: {
+                uint32_t: 8
+            }
+            enumerator: "GPS"
+            scalar_value: {
+                uint32_t: 256
+            }
+            enumerator: "WIFI"
+            scalar_value: {
+                uint32_t: 512
+            }
+            enumerator: "AUDIO"
+            scalar_value: {
+                uint32_t: 768
+            }
+            enumerator: "CAMERA"
+            scalar_value: {
+                uint32_t: 1024
+            }
+            enumerator: "BLE"
+            scalar_value: {
+                uint32_t: 1280
+            }
+            enumerator: "WWAN"
+            scalar_value: {
+                uint32_t: 1536
+            }
+            enumerator: "PRIVATE_SENSOR_BASE"
+            scalar_value: {
+                uint32_t: 65536
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::PhysicalSensor"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "sensorType"
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::contexthub::V1_0::SensorType"
+        }
+        struct_value: {
+            name: "type"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "name"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "vendor"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "version"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "fifoReservedCount"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "fifoMaxCount"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "minDelayMs"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "maxDelayMs"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "peakPowerMw"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::ContextHub"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "name"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "vendor"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "toolchain"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "platformVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "toolchainVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "hubId"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "peakMips"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "stoppedPowerDrawMw"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "sleepPowerDrawMw"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "peakPowerDrawMw"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "connectedSensors"
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_STRUCT
+                predefined_type: "::android::hardware::contexthub::V1_0::PhysicalSensor"
+            }
+        }
+        struct_value: {
+            name: "maxSupportedMsgLen"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "chrePlatformId"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "chreApiMajorVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "chreApiMinorVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "chrePatchVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint16_t"
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::HostEndPoint"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint16_t"
+
+            enumerator: "BROADCAST"
+            scalar_value: {
+                uint16_t: 65535
+            }
+            enumerator: "UNSPECIFIED"
+            scalar_value: {
+                uint16_t: 65534
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::ContextHubMsg"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "appName"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "hostEndPoint"
+            type: TYPE_SCALAR
+            scalar_type: "uint16_t"
+        }
+        struct_value: {
+            name: "msgType"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "msg"
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_SCALAR
+                scalar_type: "uint8_t"
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::HubMemoryType"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "MAIN"
+            scalar_value: {
+                uint32_t: 0
+            }
+            enumerator: "SECONDARY"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "TCM"
+            scalar_value: {
+                uint32_t: 2
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::HubMemoryFlag"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "READ"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "WRITE"
+            scalar_value: {
+                uint32_t: 2
+            }
+            enumerator: "EXEC"
+            scalar_value: {
+                uint32_t: 4
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::MemRange"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "totalBytes"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "freeBytes"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "type"
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::contexthub::V1_0::HubMemoryType"
+        }
+        struct_value: {
+            name: "flags"
+            type: TYPE_MASK
+            scalar_type: "uint32_t"
+            predefined_type: "::android::hardware::contexthub::V1_0::HubMemoryFlag"
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::AsyncEventType"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "RESTARTED"
+            scalar_value: {
+                uint32_t: 1
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::TransactionResult"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "SUCCESS"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "FAILURE"
+            scalar_value: {
+                int32_t: 1
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::HubAppInfo"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "appId"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "version"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "memUsage"
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_STRUCT
+                predefined_type: "::android::hardware::contexthub::V1_0::MemRange"
+            }
+        }
+        struct_value: {
+            name: "enabled"
+            type: TYPE_SCALAR
+            scalar_type: "bool_t"
+        }
+    }
+
+    attribute: {
+        name: "::android::hidl::base::V1_0::DebugInfo"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "pid"
+            type: TYPE_SCALAR
+            scalar_type: "int32_t"
+        }
+        struct_value: {
+            name: "ptr"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+    }
+
     api: {
         name: "getHubs"
         return_type_hidl: {
@@ -31,8 +517,7 @@
         }
         arg: {
             type: TYPE_HIDL_CALLBACK
-            predefined_type: "IContexthubCallback"
-            is_callback: true
+            predefined_type: "::android::hardware::contexthub::V1_0::IContexthubCallback"
         }
     }
 
diff --git a/contexthub/1.0/vts/ContexthubCallback.vts b/contexthub/1.0/vts/ContexthubCallback.vts
index c3784e8..7897a83 100644
--- a/contexthub/1.0/vts/ContexthubCallback.vts
+++ b/contexthub/1.0/vts/ContexthubCallback.vts
@@ -5,8 +5,494 @@
 package: "android.hardware.contexthub"
 
 import: "android.hardware.contexthub@1.0::types"
+import: "android.hidl.base@1.0::types"
 
 interface: {
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::Result"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "OK"
+            scalar_value: {
+                uint32_t: 0
+            }
+            enumerator: "UNKNOWN_FAILURE"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "BAD_PARAMS"
+            scalar_value: {
+                uint32_t: 2
+            }
+            enumerator: "NOT_INIT"
+            scalar_value: {
+                uint32_t: 3
+            }
+            enumerator: "TRANSACTION_FAILED"
+            scalar_value: {
+                uint32_t: 4
+            }
+            enumerator: "TRANSACTION_PENDING"
+            scalar_value: {
+                uint32_t: 5
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::NanoAppFlags"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "SIGNED"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "ENCRYPTED"
+            scalar_value: {
+                uint32_t: 2
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::NanoAppBinary"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "appId"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "appVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "flags"
+            type: TYPE_MASK
+            scalar_type: "uint32_t"
+            predefined_type: "::android::hardware::contexthub::V1_0::NanoAppFlags"
+        }
+        struct_value: {
+            name: "targetChreApiMajorVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "targetChreApiMinorVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "customBinary"
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_SCALAR
+                scalar_type: "uint8_t"
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::SensorType"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "RESERVED"
+            scalar_value: {
+                uint32_t: 0
+            }
+            enumerator: "ACCELEROMETER"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "GYROSCOPE"
+            scalar_value: {
+                uint32_t: 2
+            }
+            enumerator: "MAGNETOMETER"
+            scalar_value: {
+                uint32_t: 3
+            }
+            enumerator: "BAROMETER"
+            scalar_value: {
+                uint32_t: 4
+            }
+            enumerator: "PROXIMITY_SENSOR"
+            scalar_value: {
+                uint32_t: 5
+            }
+            enumerator: "AMBIENT_LIGHT_SENSOR"
+            scalar_value: {
+                uint32_t: 6
+            }
+            enumerator: "STATIONARY_DETECT"
+            scalar_value: {
+                uint32_t: 7
+            }
+            enumerator: "INSTANT_MOTION_DETECT"
+            scalar_value: {
+                uint32_t: 8
+            }
+            enumerator: "GPS"
+            scalar_value: {
+                uint32_t: 256
+            }
+            enumerator: "WIFI"
+            scalar_value: {
+                uint32_t: 512
+            }
+            enumerator: "AUDIO"
+            scalar_value: {
+                uint32_t: 768
+            }
+            enumerator: "CAMERA"
+            scalar_value: {
+                uint32_t: 1024
+            }
+            enumerator: "BLE"
+            scalar_value: {
+                uint32_t: 1280
+            }
+            enumerator: "WWAN"
+            scalar_value: {
+                uint32_t: 1536
+            }
+            enumerator: "PRIVATE_SENSOR_BASE"
+            scalar_value: {
+                uint32_t: 65536
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::PhysicalSensor"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "sensorType"
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::contexthub::V1_0::SensorType"
+        }
+        struct_value: {
+            name: "type"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "name"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "vendor"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "version"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "fifoReservedCount"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "fifoMaxCount"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "minDelayMs"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "maxDelayMs"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "peakPowerMw"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::ContextHub"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "name"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "vendor"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "toolchain"
+            type: TYPE_STRING
+        }
+        struct_value: {
+            name: "platformVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "toolchainVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "hubId"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "peakMips"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "stoppedPowerDrawMw"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "sleepPowerDrawMw"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "peakPowerDrawMw"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "connectedSensors"
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_STRUCT
+                predefined_type: "::android::hardware::contexthub::V1_0::PhysicalSensor"
+            }
+        }
+        struct_value: {
+            name: "maxSupportedMsgLen"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "chrePlatformId"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "chreApiMajorVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "chreApiMinorVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "chrePatchVersion"
+            type: TYPE_SCALAR
+            scalar_type: "uint16_t"
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::HostEndPoint"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint16_t"
+
+            enumerator: "BROADCAST"
+            scalar_value: {
+                uint16_t: 65535
+            }
+            enumerator: "UNSPECIFIED"
+            scalar_value: {
+                uint16_t: 65534
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::ContextHubMsg"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "appName"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "hostEndPoint"
+            type: TYPE_SCALAR
+            scalar_type: "uint16_t"
+        }
+        struct_value: {
+            name: "msgType"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "msg"
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_SCALAR
+                scalar_type: "uint8_t"
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::HubMemoryType"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "MAIN"
+            scalar_value: {
+                uint32_t: 0
+            }
+            enumerator: "SECONDARY"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "TCM"
+            scalar_value: {
+                uint32_t: 2
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::HubMemoryFlag"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "READ"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "WRITE"
+            scalar_value: {
+                uint32_t: 2
+            }
+            enumerator: "EXEC"
+            scalar_value: {
+                uint32_t: 4
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::MemRange"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "totalBytes"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "freeBytes"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "type"
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::contexthub::V1_0::HubMemoryType"
+        }
+        struct_value: {
+            name: "flags"
+            type: TYPE_MASK
+            scalar_type: "uint32_t"
+            predefined_type: "::android::hardware::contexthub::V1_0::HubMemoryFlag"
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::AsyncEventType"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "RESTARTED"
+            scalar_value: {
+                uint32_t: 1
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::TransactionResult"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "SUCCESS"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "FAILURE"
+            scalar_value: {
+                int32_t: 1
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::contexthub::V1_0::HubAppInfo"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "appId"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        struct_value: {
+            name: "version"
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        struct_value: {
+            name: "memUsage"
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_STRUCT
+                predefined_type: "::android::hardware::contexthub::V1_0::MemRange"
+            }
+        }
+        struct_value: {
+            name: "enabled"
+            type: TYPE_SCALAR
+            scalar_type: "bool_t"
+        }
+    }
+
+    attribute: {
+        name: "::android::hidl::base::V1_0::DebugInfo"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "pid"
+            type: TYPE_SCALAR
+            scalar_type: "int32_t"
+        }
+        struct_value: {
+            name: "ptr"
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+    }
+
     api: {
         name: "handleClientMsg"
         arg: {
diff --git a/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/Android.mk b/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/Android.mk
deleted file mode 100644
index a46a0e6..0000000
--- a/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/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 := ContexthubHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/contexthub/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/AndroidTest.xml b/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/AndroidTest.xml
deleted file mode 100644
index a314d1b..0000000
--- a/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/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 Context Hub 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="ContexthubHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/contexthub_hidl_hal_test/contexthub_hidl_hal_test,
-            _64bit::DATA/nativetest64/contexthub_hidl_hal_test/contexthub_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/contexthub/1.0/vts/types.vts b/contexthub/1.0/vts/types.vts
index 12576b1..4f5dfcf 100644
--- a/contexthub/1.0/vts/types.vts
+++ b/contexthub/1.0/vts/types.vts
@@ -71,6 +71,7 @@
     struct_value: {
         name: "flags"
         type: TYPE_MASK
+        scalar_type: "uint32_t"
         predefined_type: "::android::hardware::contexthub::V1_0::NanoAppFlags"
     }
     struct_value: {
@@ -411,6 +412,7 @@
     struct_value: {
         name: "flags"
         type: TYPE_MASK
+        scalar_type: "uint32_t"
         predefined_type: "::android::hardware::contexthub::V1_0::HubMemoryFlag"
     }
 }
diff --git a/drm/1.0/Android.bp b/drm/1.0/Android.bp
index 3c9f22b..19060d8 100644
--- a/drm/1.0/Android.bp
+++ b/drm/1.0/Android.bp
@@ -162,218 +162,54 @@
 }
 
 genrule {
-    name: "android.hardware.drm@1.0-ICryptoFactory-vts.profiler_genc++",
+    name: "android.hardware.drm@1.0-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.drm@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
     srcs: [
-        "ICryptoFactory.hal",
         "types.hal",
+        "ICryptoFactory.hal",
+        "ICryptoPlugin.hal",
+        "IDrmFactory.hal",
+        "IDrmPlugin.hal",
+        "IDrmPluginListener.hal",
     ],
     out: [
+        "android/hardware/drm/1.0/types.vts.cpp",
         "android/hardware/drm/1.0/CryptoFactory.vts.cpp",
-        "android/hardware/drm/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.drm@1.0-ICryptoFactory-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.drm@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
-    srcs: [
-        "ICryptoFactory.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/drm/1.0/CryptoFactory.vts.h",
-        "android/hardware/drm/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.drm@1.0-ICryptoFactory-vts.profiler",
-    generated_sources: ["android.hardware.drm@1.0-ICryptoFactory-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.drm@1.0-ICryptoFactory-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.drm@1.0-ICryptoFactory-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.drm@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.drm@1.0-ICryptoPlugin-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.drm@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
-    srcs: [
-        "ICryptoPlugin.hal",
-        "types.hal",
-    ],
-    out: [
         "android/hardware/drm/1.0/CryptoPlugin.vts.cpp",
-        "android/hardware/drm/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.drm@1.0-ICryptoPlugin-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.drm@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
-    srcs: [
-        "ICryptoPlugin.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/drm/1.0/CryptoPlugin.vts.h",
-        "android/hardware/drm/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.drm@1.0-ICryptoPlugin-vts.profiler",
-    generated_sources: ["android.hardware.drm@1.0-ICryptoPlugin-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.drm@1.0-ICryptoPlugin-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.drm@1.0-ICryptoPlugin-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.drm@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.drm@1.0-IDrmFactory-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.drm@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
-    srcs: [
-        "IDrmFactory.hal",
-        "types.hal",
-    ],
-    out: [
         "android/hardware/drm/1.0/DrmFactory.vts.cpp",
-        "android/hardware/drm/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.drm@1.0-IDrmFactory-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.drm@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
-    srcs: [
-        "IDrmFactory.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/drm/1.0/DrmFactory.vts.h",
-        "android/hardware/drm/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.drm@1.0-IDrmFactory-vts.profiler",
-    generated_sources: ["android.hardware.drm@1.0-IDrmFactory-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.drm@1.0-IDrmFactory-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.drm@1.0-IDrmFactory-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.drm@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.drm@1.0-IDrmPlugin-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.drm@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
-    srcs: [
-        "IDrmPlugin.hal",
-        "types.hal",
-    ],
-    out: [
         "android/hardware/drm/1.0/DrmPlugin.vts.cpp",
-        "android/hardware/drm/1.0/types.vts.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.drm@1.0-IDrmPlugin-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.drm@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
-    srcs: [
-        "IDrmPlugin.hal",
-        "types.hal",
-    ],
-    out: [
-        "android/hardware/drm/1.0/DrmPlugin.vts.h",
-        "android/hardware/drm/1.0/types.vts.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.drm@1.0-IDrmPlugin-vts.profiler",
-    generated_sources: ["android.hardware.drm@1.0-IDrmPlugin-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.drm@1.0-IDrmPlugin-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.drm@1.0-IDrmPlugin-vts.profiler_genc++_headers"],
-    shared_libs: [
-        "libbase",
-        "libhidlbase",
-        "libhidltransport",
-        "libvts_profiling",
-        "libvts_multidevice_proto",
-        "libprotobuf-cpp-full",
-        "android.hidl.base@1.0",
-        "android.hardware.drm@1.0",
-    ],
-}
-
-genrule {
-    name: "android.hardware.drm@1.0-IDrmPluginListener-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.drm@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
-    srcs: [
-        "IDrmPluginListener.hal",
-        "types.hal",
-    ],
-    out: [
         "android/hardware/drm/1.0/DrmPluginListener.vts.cpp",
-        "android/hardware/drm/1.0/types.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.drm@1.0-IDrmPluginListener-vts.profiler_genc++_headers",
+    name: "android.hardware.drm@1.0-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.drm@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/drm/1.0/ $(genDir)/android/hardware/drm/1.0/",
     srcs: [
-        "IDrmPluginListener.hal",
         "types.hal",
+        "ICryptoFactory.hal",
+        "ICryptoPlugin.hal",
+        "IDrmFactory.hal",
+        "IDrmPlugin.hal",
+        "IDrmPluginListener.hal",
     ],
     out: [
-        "android/hardware/drm/1.0/DrmPluginListener.vts.h",
         "android/hardware/drm/1.0/types.vts.h",
+        "android/hardware/drm/1.0/CryptoFactory.vts.h",
+        "android/hardware/drm/1.0/CryptoPlugin.vts.h",
+        "android/hardware/drm/1.0/DrmFactory.vts.h",
+        "android/hardware/drm/1.0/DrmPlugin.vts.h",
+        "android/hardware/drm/1.0/DrmPluginListener.vts.h",
     ],
 }
 
 cc_library_shared {
-    name: "android.hardware.drm@1.0-IDrmPluginListener-vts.profiler",
-    generated_sources: ["android.hardware.drm@1.0-IDrmPluginListener-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.drm@1.0-IDrmPluginListener-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.drm@1.0-IDrmPluginListener-vts.profiler_genc++_headers"],
+    name: "android.hardware.drm@1.0-vts.profiler",
+    generated_sources: ["android.hardware.drm@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.drm@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.drm@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
diff --git a/dumpstate/1.0/Android.bp b/dumpstate/1.0/Android.bp
index 7255937..24fa1f8 100644
--- a/dumpstate/1.0/Android.bp
+++ b/dumpstate/1.0/Android.bp
@@ -50,3 +50,98 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.dumpstate.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.dumpstate@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/dumpstate/1.0/ $(genDir)/android/hardware/dumpstate/1.0/",
+    srcs: [
+        "IDumpstateDevice.hal",
+    ],
+    out: [
+        "android/hardware/dumpstate/1.0/DumpstateDevice.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.dumpstate.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.dumpstate@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/dumpstate/1.0/ $(genDir)/android/hardware/dumpstate/1.0/",
+    srcs: [
+        "IDumpstateDevice.hal",
+    ],
+    out: [
+        "android/hardware/dumpstate/1.0/DumpstateDevice.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.dumpstate.vts.driver@1.0",
+    generated_sources: ["android.hardware.dumpstate.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.dumpstate.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.dumpstate.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.dumpstate@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.dumpstate@1.0-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.dumpstate@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/dumpstate/1.0/ $(genDir)/android/hardware/dumpstate/1.0/",
+    srcs: [
+        "IDumpstateDevice.hal",
+    ],
+    out: [
+        "android/hardware/dumpstate/1.0/DumpstateDevice.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.dumpstate@1.0-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.dumpstate@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/dumpstate/1.0/ $(genDir)/android/hardware/dumpstate/1.0/",
+    srcs: [
+        "IDumpstateDevice.hal",
+    ],
+    out: [
+        "android/hardware/dumpstate/1.0/DumpstateDevice.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.dumpstate@1.0-vts.profiler",
+    generated_sources: ["android.hardware.dumpstate@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.dumpstate@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.dumpstate@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.dumpstate@1.0",
+    ],
+}
diff --git a/evs/1.0/Android.bp b/evs/1.0/Android.bp
index ed29968..a92caf8 100644
--- a/evs/1.0/Android.bp
+++ b/evs/1.0/Android.bp
@@ -78,3 +78,130 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.evs.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.evs@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/evs/1.0/ $(genDir)/android/hardware/evs/1.0/",
+    srcs: [
+        "types.hal",
+        "IEvsCamera.hal",
+        "IEvsCameraStream.hal",
+        "IEvsDisplay.hal",
+        "IEvsEnumerator.hal",
+    ],
+    out: [
+        "android/hardware/evs/1.0/types.vts.cpp",
+        "android/hardware/evs/1.0/EvsCamera.vts.cpp",
+        "android/hardware/evs/1.0/EvsCameraStream.vts.cpp",
+        "android/hardware/evs/1.0/EvsDisplay.vts.cpp",
+        "android/hardware/evs/1.0/EvsEnumerator.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.evs.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.evs@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/evs/1.0/ $(genDir)/android/hardware/evs/1.0/",
+    srcs: [
+        "types.hal",
+        "IEvsCamera.hal",
+        "IEvsCameraStream.hal",
+        "IEvsDisplay.hal",
+        "IEvsEnumerator.hal",
+    ],
+    out: [
+        "android/hardware/evs/1.0/types.vts.h",
+        "android/hardware/evs/1.0/EvsCamera.vts.h",
+        "android/hardware/evs/1.0/EvsCameraStream.vts.h",
+        "android/hardware/evs/1.0/EvsDisplay.vts.h",
+        "android/hardware/evs/1.0/EvsEnumerator.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.evs.vts.driver@1.0",
+    generated_sources: ["android.hardware.evs.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.evs.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.evs.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.evs@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.evs@1.0-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.evs@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/evs/1.0/ $(genDir)/android/hardware/evs/1.0/",
+    srcs: [
+        "types.hal",
+        "IEvsCamera.hal",
+        "IEvsCameraStream.hal",
+        "IEvsDisplay.hal",
+        "IEvsEnumerator.hal",
+    ],
+    out: [
+        "android/hardware/evs/1.0/types.vts.cpp",
+        "android/hardware/evs/1.0/EvsCamera.vts.cpp",
+        "android/hardware/evs/1.0/EvsCameraStream.vts.cpp",
+        "android/hardware/evs/1.0/EvsDisplay.vts.cpp",
+        "android/hardware/evs/1.0/EvsEnumerator.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.evs@1.0-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.evs@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/evs/1.0/ $(genDir)/android/hardware/evs/1.0/",
+    srcs: [
+        "types.hal",
+        "IEvsCamera.hal",
+        "IEvsCameraStream.hal",
+        "IEvsDisplay.hal",
+        "IEvsEnumerator.hal",
+    ],
+    out: [
+        "android/hardware/evs/1.0/types.vts.h",
+        "android/hardware/evs/1.0/EvsCamera.vts.h",
+        "android/hardware/evs/1.0/EvsCameraStream.vts.h",
+        "android/hardware/evs/1.0/EvsDisplay.vts.h",
+        "android/hardware/evs/1.0/EvsEnumerator.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.evs@1.0-vts.profiler",
+    generated_sources: ["android.hardware.evs@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.evs@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.evs@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.evs@1.0",
+    ],
+}
diff --git a/example/extension/light/2.0/Android.bp b/example/extension/light/2.0/Android.bp
index cc50b83..2289040 100644
--- a/example/extension/light/2.0/Android.bp
+++ b/example/extension/light/2.0/Android.bp
@@ -54,3 +54,106 @@
         "android.hardware.light@2.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.example.extension.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.example.extension.light@2.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/example/extension/light/2.0/ $(genDir)/android/hardware/example/extension/light/2.0/",
+    srcs: [
+        "types.hal",
+        "IExtLight.hal",
+    ],
+    out: [
+        "android/hardware/example/extension/light/2.0/types.vts.cpp",
+        "android/hardware/example/extension/light/2.0/ExtLight.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.example.extension.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.example.extension.light@2.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/example/extension/light/2.0/ $(genDir)/android/hardware/example/extension/light/2.0/",
+    srcs: [
+        "types.hal",
+        "IExtLight.hal",
+    ],
+    out: [
+        "android/hardware/example/extension/light/2.0/types.vts.h",
+        "android/hardware/example/extension/light/2.0/ExtLight.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.example.extension.light.vts.driver@2.0",
+    generated_sources: ["android.hardware.example.extension.light.vts.driver@2.0_genc++"],
+    generated_headers: ["android.hardware.example.extension.light.vts.driver@2.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.example.extension.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.hardware.light@2.0",
+        "android.hardware.example.extension.light@2.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.light@2.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.example.extension.light@2.0-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.example.extension.light@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/example/extension/light/2.0/ $(genDir)/android/hardware/example/extension/light/2.0/",
+    srcs: [
+        "types.hal",
+        "IExtLight.hal",
+    ],
+    out: [
+        "android/hardware/example/extension/light/2.0/types.vts.cpp",
+        "android/hardware/example/extension/light/2.0/ExtLight.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.example.extension.light@2.0-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.example.extension.light@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/example/extension/light/2.0/ $(genDir)/android/hardware/example/extension/light/2.0/",
+    srcs: [
+        "types.hal",
+        "IExtLight.hal",
+    ],
+    out: [
+        "android/hardware/example/extension/light/2.0/types.vts.h",
+        "android/hardware/example/extension/light/2.0/ExtLight.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.example.extension.light@2.0-vts.profiler",
+    generated_sources: ["android.hardware.example.extension.light@2.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.example.extension.light@2.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.example.extension.light@2.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.light@2.0",
+        "android.hardware.example.extension.light@2.0",
+    ],
+}
diff --git a/gatekeeper/1.0/Android.bp b/gatekeeper/1.0/Android.bp
index d4852ff..9e2203b 100644
--- a/gatekeeper/1.0/Android.bp
+++ b/gatekeeper/1.0/Android.bp
@@ -114,38 +114,38 @@
 }
 
 genrule {
-    name: "android.hardware.gatekeeper@1.0-IGatekeeper-vts.profiler_genc++",
+    name: "android.hardware.gatekeeper@1.0-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.gatekeeper@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/gatekeeper/1.0/ $(genDir)/android/hardware/gatekeeper/1.0/",
     srcs: [
-        "IGatekeeper.hal",
         "types.hal",
+        "IGatekeeper.hal",
     ],
     out: [
-        "android/hardware/gatekeeper/1.0/Gatekeeper.vts.cpp",
         "android/hardware/gatekeeper/1.0/types.vts.cpp",
+        "android/hardware/gatekeeper/1.0/Gatekeeper.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.gatekeeper@1.0-IGatekeeper-vts.profiler_genc++_headers",
+    name: "android.hardware.gatekeeper@1.0-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.gatekeeper@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/gatekeeper/1.0/ $(genDir)/android/hardware/gatekeeper/1.0/",
     srcs: [
-        "IGatekeeper.hal",
         "types.hal",
+        "IGatekeeper.hal",
     ],
     out: [
-        "android/hardware/gatekeeper/1.0/Gatekeeper.vts.h",
         "android/hardware/gatekeeper/1.0/types.vts.h",
+        "android/hardware/gatekeeper/1.0/Gatekeeper.vts.h",
     ],
 }
 
 cc_library_shared {
-    name: "android.hardware.gatekeeper@1.0-IGatekeeper-vts.profiler",
-    generated_sources: ["android.hardware.gatekeeper@1.0-IGatekeeper-vts.profiler_genc++"],
-    generated_headers: ["android.hardware.gatekeeper@1.0-IGatekeeper-vts.profiler_genc++_headers"],
-    export_generated_headers: ["android.hardware.gatekeeper@1.0-IGatekeeper-vts.profiler_genc++_headers"],
+    name: "android.hardware.gatekeeper@1.0-vts.profiler",
+    generated_sources: ["android.hardware.gatekeeper@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.gatekeeper@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.gatekeeper@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
diff --git a/gatekeeper/1.0/vts/Android.mk b/gatekeeper/1.0/vts/Android.mk
deleted file mode 100644
index 58c2dca..0000000
--- a/gatekeeper/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/gatekeeper/hidl/Android.mk
diff --git a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/Android.mk b/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/gatekeeper/1.0/vts/functional/vts/testcases/hal/gatekeeper/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/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 2e258ca..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="5m" />
-    </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/gnss/1.0/Android.bp b/gnss/1.0/Android.bp
index 4d7e26e..4fc3038 100644
--- a/gnss/1.0/Android.bp
+++ b/gnss/1.0/Android.bp
@@ -206,3 +206,258 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.gnss.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.gnss@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/gnss/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/gnss/1.0/types.vts.cpp",
+        "android/hardware/gnss/1.0/AGnss.vts.cpp",
+        "android/hardware/gnss/1.0/AGnssCallback.vts.cpp",
+        "android/hardware/gnss/1.0/AGnssRil.vts.cpp",
+        "android/hardware/gnss/1.0/AGnssRilCallback.vts.cpp",
+        "android/hardware/gnss/1.0/Gnss.vts.cpp",
+        "android/hardware/gnss/1.0/GnssBatching.vts.cpp",
+        "android/hardware/gnss/1.0/GnssBatchingCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssConfiguration.vts.cpp",
+        "android/hardware/gnss/1.0/GnssDebug.vts.cpp",
+        "android/hardware/gnss/1.0/GnssGeofenceCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssGeofencing.vts.cpp",
+        "android/hardware/gnss/1.0/GnssMeasurement.vts.cpp",
+        "android/hardware/gnss/1.0/GnssMeasurementCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssNavigationMessage.vts.cpp",
+        "android/hardware/gnss/1.0/GnssNavigationMessageCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssNi.vts.cpp",
+        "android/hardware/gnss/1.0/GnssNiCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssXtra.vts.cpp",
+        "android/hardware/gnss/1.0/GnssXtraCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.gnss.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.gnss@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/gnss/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/gnss/1.0/types.vts.h",
+        "android/hardware/gnss/1.0/AGnss.vts.h",
+        "android/hardware/gnss/1.0/AGnssCallback.vts.h",
+        "android/hardware/gnss/1.0/AGnssRil.vts.h",
+        "android/hardware/gnss/1.0/AGnssRilCallback.vts.h",
+        "android/hardware/gnss/1.0/Gnss.vts.h",
+        "android/hardware/gnss/1.0/GnssBatching.vts.h",
+        "android/hardware/gnss/1.0/GnssBatchingCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssConfiguration.vts.h",
+        "android/hardware/gnss/1.0/GnssDebug.vts.h",
+        "android/hardware/gnss/1.0/GnssGeofenceCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssGeofencing.vts.h",
+        "android/hardware/gnss/1.0/GnssMeasurement.vts.h",
+        "android/hardware/gnss/1.0/GnssMeasurementCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssNavigationMessage.vts.h",
+        "android/hardware/gnss/1.0/GnssNavigationMessageCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssNi.vts.h",
+        "android/hardware/gnss/1.0/GnssNiCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssXtra.vts.h",
+        "android/hardware/gnss/1.0/GnssXtraCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.gnss.vts.driver@1.0",
+    generated_sources: ["android.hardware.gnss.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.gnss.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.gnss.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.gnss@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.gnss@1.0-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.gnss@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/gnss/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/gnss/1.0/types.vts.cpp",
+        "android/hardware/gnss/1.0/AGnss.vts.cpp",
+        "android/hardware/gnss/1.0/AGnssCallback.vts.cpp",
+        "android/hardware/gnss/1.0/AGnssRil.vts.cpp",
+        "android/hardware/gnss/1.0/AGnssRilCallback.vts.cpp",
+        "android/hardware/gnss/1.0/Gnss.vts.cpp",
+        "android/hardware/gnss/1.0/GnssBatching.vts.cpp",
+        "android/hardware/gnss/1.0/GnssBatchingCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssConfiguration.vts.cpp",
+        "android/hardware/gnss/1.0/GnssDebug.vts.cpp",
+        "android/hardware/gnss/1.0/GnssGeofenceCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssGeofencing.vts.cpp",
+        "android/hardware/gnss/1.0/GnssMeasurement.vts.cpp",
+        "android/hardware/gnss/1.0/GnssMeasurementCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssNavigationMessage.vts.cpp",
+        "android/hardware/gnss/1.0/GnssNavigationMessageCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssNi.vts.cpp",
+        "android/hardware/gnss/1.0/GnssNiCallback.vts.cpp",
+        "android/hardware/gnss/1.0/GnssXtra.vts.cpp",
+        "android/hardware/gnss/1.0/GnssXtraCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.gnss@1.0-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.gnss@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/gnss/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/gnss/1.0/types.vts.h",
+        "android/hardware/gnss/1.0/AGnss.vts.h",
+        "android/hardware/gnss/1.0/AGnssCallback.vts.h",
+        "android/hardware/gnss/1.0/AGnssRil.vts.h",
+        "android/hardware/gnss/1.0/AGnssRilCallback.vts.h",
+        "android/hardware/gnss/1.0/Gnss.vts.h",
+        "android/hardware/gnss/1.0/GnssBatching.vts.h",
+        "android/hardware/gnss/1.0/GnssBatchingCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssConfiguration.vts.h",
+        "android/hardware/gnss/1.0/GnssDebug.vts.h",
+        "android/hardware/gnss/1.0/GnssGeofenceCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssGeofencing.vts.h",
+        "android/hardware/gnss/1.0/GnssMeasurement.vts.h",
+        "android/hardware/gnss/1.0/GnssMeasurementCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssNavigationMessage.vts.h",
+        "android/hardware/gnss/1.0/GnssNavigationMessageCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssNi.vts.h",
+        "android/hardware/gnss/1.0/GnssNiCallback.vts.h",
+        "android/hardware/gnss/1.0/GnssXtra.vts.h",
+        "android/hardware/gnss/1.0/GnssXtraCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.gnss@1.0-vts.profiler",
+    generated_sources: ["android.hardware.gnss@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.gnss@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.gnss@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.gnss@1.0",
+    ],
+}
diff --git a/gnss/1.0/Android.mk b/gnss/1.0/Android.mk
index 130c14e..98c547c 100644
--- a/gnss/1.0/Android.mk
+++ b/gnss/1.0/Android.mk
@@ -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 := $(local-generated-sources-dir)
+
+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/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..16d8f91 100644
--- a/graphics/allocator/2.0/Android.bp
+++ b/graphics/allocator/2.0/Android.bp
@@ -130,84 +130,42 @@
 }
 
 genrule {
-    name: "android.hardware.graphics.allocator@2.0-IAllocator-vts.profiler_genc++",
+    name: "android.hardware.graphics.allocator@2.0-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",
+        "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/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",
+    name: "android.hardware.graphics.allocator@2.0-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",
+        "IAllocator.hal",
+        "IAllocatorClient.hal",
     ],
     out: [
-        "android/hardware/graphics/allocator/2.0/AllocatorClient.vts.h",
         "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@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"],
+    name: "android.hardware.graphics.allocator@2.0-vts.profiler",
+    generated_sources: ["android.hardware.graphics.allocator@2.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.graphics.allocator@2.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.graphics.allocator@2.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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/common/1.0/Android.bp b/graphics/common/1.0/Android.bp
index b67afd1..1d00506 100644
--- a/graphics/common/1.0/Android.bp
+++ b/graphics/common/1.0/Android.bp
@@ -44,3 +44,95 @@
         "libutils",
     ],
 }
+
+genrule {
+    name: "android.hardware.graphics.common.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.graphics.common@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/graphics/common/1.0/ $(genDir)/android/hardware/graphics/common/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/graphics/common/1.0/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.graphics.common.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.graphics.common@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/graphics/common/1.0/ $(genDir)/android/hardware/graphics/common/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/graphics/common/1.0/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.graphics.common.vts.driver@1.0",
+    generated_sources: ["android.hardware.graphics.common.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.graphics.common.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.graphics.common.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.graphics.common@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+    ],
+}
+
+genrule {
+    name: "android.hardware.graphics.common@1.0-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.common@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/graphics/common/1.0/ $(genDir)/android/hardware/graphics/common/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/graphics/common/1.0/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.graphics.common@1.0-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.common@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/graphics/common/1.0/ $(genDir)/android/hardware/graphics/common/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/graphics/common/1.0/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.graphics.common@1.0-vts.profiler",
+    generated_sources: ["android.hardware.graphics.common@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.graphics.common@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.graphics.common@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.graphics.common@1.0",
+    ],
+}
diff --git a/graphics/composer/2.1/Android.bp b/graphics/composer/2.1/Android.bp
index 7216c0f..bda8aae 100644
--- a/graphics/composer/2.1/Android.bp
+++ b/graphics/composer/2.1/Android.bp
@@ -72,3 +72,125 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.graphics.composer.vts.driver@2.1_genc++",
+    tools: ["hidl-gen", "vtsc"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.composer@2.1 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/graphics/composer/2.1/ $(genDir)/android/hardware/graphics/composer/2.1/",
+    srcs: [
+        "types.hal",
+        "IComposer.hal",
+        "IComposerCallback.hal",
+        "IComposerClient.hal",
+    ],
+    out: [
+        "android/hardware/graphics/composer/2.1/types.vts.cpp",
+        "android/hardware/graphics/composer/2.1/Composer.vts.cpp",
+        "android/hardware/graphics/composer/2.1/ComposerCallback.vts.cpp",
+        "android/hardware/graphics/composer/2.1/ComposerClient.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.graphics.composer.vts.driver@2.1_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.composer@2.1 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/graphics/composer/2.1/ $(genDir)/android/hardware/graphics/composer/2.1/",
+    srcs: [
+        "types.hal",
+        "IComposer.hal",
+        "IComposerCallback.hal",
+        "IComposerClient.hal",
+    ],
+    out: [
+        "android/hardware/graphics/composer/2.1/types.vts.h",
+        "android/hardware/graphics/composer/2.1/Composer.vts.h",
+        "android/hardware/graphics/composer/2.1/ComposerCallback.vts.h",
+        "android/hardware/graphics/composer/2.1/ComposerClient.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.graphics.composer.vts.driver@2.1",
+    generated_sources: ["android.hardware.graphics.composer.vts.driver@2.1_genc++"],
+    generated_headers: ["android.hardware.graphics.composer.vts.driver@2.1_genc++_headers"],
+    export_generated_headers: ["android.hardware.graphics.composer.vts.driver@2.1_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.composer@2.1",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.graphics.composer@2.1-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.composer@2.1 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/graphics/composer/2.1/ $(genDir)/android/hardware/graphics/composer/2.1/",
+    srcs: [
+        "types.hal",
+        "IComposer.hal",
+        "IComposerCallback.hal",
+        "IComposerClient.hal",
+    ],
+    out: [
+        "android/hardware/graphics/composer/2.1/types.vts.cpp",
+        "android/hardware/graphics/composer/2.1/Composer.vts.cpp",
+        "android/hardware/graphics/composer/2.1/ComposerCallback.vts.cpp",
+        "android/hardware/graphics/composer/2.1/ComposerClient.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.graphics.composer@2.1-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.composer@2.1 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/graphics/composer/2.1/ $(genDir)/android/hardware/graphics/composer/2.1/",
+    srcs: [
+        "types.hal",
+        "IComposer.hal",
+        "IComposerCallback.hal",
+        "IComposerClient.hal",
+    ],
+    out: [
+        "android/hardware/graphics/composer/2.1/types.vts.h",
+        "android/hardware/graphics/composer/2.1/Composer.vts.h",
+        "android/hardware/graphics/composer/2.1/ComposerCallback.vts.h",
+        "android/hardware/graphics/composer/2.1/ComposerClient.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.graphics.composer@2.1-vts.profiler",
+    generated_sources: ["android.hardware.graphics.composer@2.1-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.graphics.composer@2.1-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.graphics.composer@2.1-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.composer@2.1",
+    ],
+}
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 a366fa2..46cd0c4 100644
--- a/graphics/composer/2.1/default/Android.bp
+++ b/graphics/composer/2.1/default/Android.bp
@@ -2,7 +2,6 @@
     name: "libhwcomposer-client",
     export_include_dirs: ["."],
     srcs: ["ComposerClient.cpp"],
-    cppflags: ["-DBINDERIZED"],
     shared_libs: [
         "android.hardware.graphics.allocator@2.0",
         "android.hardware.graphics.composer@2.1",
@@ -22,7 +21,8 @@
 cc_library_shared {
     name: "android.hardware.graphics.composer@2.1-impl",
     relative_install_path: "hw",
-    srcs: ["Hwc.cpp", "ComposerClient.cpp"],
+    srcs: ["Hwc.cpp"],
+    static_libs: ["libhwcomposer-client"],
     shared_libs: [
         "android.hardware.graphics.allocator@2.0",
         "android.hardware.graphics.composer@2.1",
@@ -42,13 +42,9 @@
 cc_binary {
     name: "android.hardware.graphics.composer@2.1-service",
     relative_install_path: "hw",
-    srcs: ["service.cpp", "Hwc.cpp"],
-    cppflags: ["-DBINDERIZED"],
+    srcs: ["service.cpp"],
     init_rc: ["android.hardware.graphics.composer@2.1-service.rc"],
-
-    static_libs: [
-        "libhwcomposer-client",
-    ],
+    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/ComposerClient.cpp b/graphics/composer/2.1/default/ComposerClient.cpp
index 49415ee..7a2cb25 100644
--- a/graphics/composer/2.1/default/ComposerClient.cpp
+++ b/graphics/composer/2.1/default/ComposerClient.cpp
@@ -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;
diff --git a/graphics/composer/2.1/default/service.cpp b/graphics/composer/2.1/default/service.cpp
index c2a2b19..a31decd 100644
--- a/graphics/composer/2.1/default/service.cpp
+++ b/graphics/composer/2.1/default/service.cpp
@@ -14,41 +14,20 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "HWComposerService"
+#define LOG_TAG "android.hardware.graphics.composer@2.1-service"
+
+#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();
-
-    return 0;
+    return defaultPassthroughServiceImplementation<IComposer>("hwcomposer");
 }
diff --git a/graphics/composer/2.1/vts/Composer.vts b/graphics/composer/2.1/vts/Composer.vts
new file mode 100644
index 0000000..ee5c650
--- /dev/null
+++ b/graphics/composer/2.1/vts/Composer.vts
@@ -0,0 +1,87 @@
+component_class: HAL_HIDL
+component_type_version: 2.1
+component_name: "IComposer"
+
+package: "android.hardware.graphics.composer"
+
+import: "android.hardware.graphics.composer@2.1::IComposerClient"
+import: "android.hardware.graphics.composer@2.1::types"
+
+interface: {
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposer::Capability"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "INVALID"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "SIDEBAND_STREAM"
+            scalar_value: {
+                int32_t: 1
+            }
+            enumerator: "SKIP_CLIENT_COLOR_TRANSFORM"
+            scalar_value: {
+                int32_t: 2
+            }
+        }
+    }
+
+    api: {
+        name: "getCapabilities"
+        return_type_hidl: {
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_ENUM
+                predefined_type: "::android::hardware::graphics::composer::V2_1::IComposer::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::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_HIDL_INTERFACE
+            predefined_type: "IComposerClient"
+            is_callback: false
+        }
+        callflow: {
+            entry: true
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+}
diff --git a/graphics/composer/2.1/vts/ComposerCallback.vts b/graphics/composer/2.1/vts/ComposerCallback.vts
new file mode 100644
index 0000000..a5a2aa9
--- /dev/null
+++ b/graphics/composer/2.1/vts/ComposerCallback.vts
@@ -0,0 +1,72 @@
+component_class: HAL_HIDL
+component_type_version: 2.1
+component_name: "IComposerCallback"
+
+package: "android.hardware.graphics.composer"
+
+import: "android.hardware.graphics.composer@2.1::types"
+
+interface: {
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerCallback::Connection"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "INVALID"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "CONNECTED"
+            scalar_value: {
+                int32_t: 1
+            }
+            enumerator: "DISCONNECTED"
+            scalar_value: {
+                int32_t: 2
+            }
+        }
+    }
+
+    api: {
+        name: "onHotplug"
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::IComposerCallback::Connection"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "onRefresh"
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "onVsync"
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "int64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+}
diff --git a/graphics/composer/2.1/vts/ComposerClient.vts b/graphics/composer/2.1/vts/ComposerClient.vts
new file mode 100644
index 0000000..db6b1ff
--- /dev/null
+++ b/graphics/composer/2.1/vts/ComposerClient.vts
@@ -0,0 +1,906 @@
+component_class: HAL_HIDL
+component_type_version: 2.1
+component_name: "IComposerClient"
+
+package: "android.hardware.graphics.composer"
+
+import: "android.hardware.graphics.common@1.0::types"
+import: "android.hardware.graphics.composer@2.1::IComposerCallback"
+import: "android.hardware.graphics.composer@2.1::types"
+
+interface: {
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::Attribute"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "INVALID"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "WIDTH"
+            scalar_value: {
+                int32_t: 1
+            }
+            enumerator: "HEIGHT"
+            scalar_value: {
+                int32_t: 2
+            }
+            enumerator: "VSYNC_PERIOD"
+            scalar_value: {
+                int32_t: 3
+            }
+            enumerator: "DPI_X"
+            scalar_value: {
+                int32_t: 4
+            }
+            enumerator: "DPI_Y"
+            scalar_value: {
+                int32_t: 5
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::DisplayRequest"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "FLIP_CLIENT_TARGET"
+            scalar_value: {
+                uint32_t: 1
+            }
+            enumerator: "WRITE_CLIENT_TARGET_TO_OUTPUT"
+            scalar_value: {
+                uint32_t: 2
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::LayerRequest"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "uint32_t"
+
+            enumerator: "CLEAR_CLIENT_TARGET"
+            scalar_value: {
+                uint32_t: 1
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::PowerMode"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "OFF"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "DOZE"
+            scalar_value: {
+                int32_t: 1
+            }
+            enumerator: "DOZE_SUSPEND"
+            scalar_value: {
+                int32_t: 3
+            }
+            enumerator: "ON"
+            scalar_value: {
+                int32_t: 2
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::Vsync"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "INVALID"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "ENABLE"
+            scalar_value: {
+                int32_t: 1
+            }
+            enumerator: "DISABLE"
+            scalar_value: {
+                int32_t: 2
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::BlendMode"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "INVALID"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "NONE"
+            scalar_value: {
+                int32_t: 1
+            }
+            enumerator: "PREMULTIPLIED"
+            scalar_value: {
+                int32_t: 2
+            }
+            enumerator: "COVERAGE"
+            scalar_value: {
+                int32_t: 3
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::Composition"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "INVALID"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "CLIENT"
+            scalar_value: {
+                int32_t: 1
+            }
+            enumerator: "DEVICE"
+            scalar_value: {
+                int32_t: 2
+            }
+            enumerator: "SOLID_COLOR"
+            scalar_value: {
+                int32_t: 3
+            }
+            enumerator: "CURSOR"
+            scalar_value: {
+                int32_t: 4
+            }
+            enumerator: "SIDEBAND"
+            scalar_value: {
+                int32_t: 5
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::DisplayType"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "INVALID"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "PHYSICAL"
+            scalar_value: {
+                int32_t: 1
+            }
+            enumerator: "VIRTUAL"
+            scalar_value: {
+                int32_t: 2
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::HandleIndex"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "EMPTY"
+            scalar_value: {
+                int32_t: -1
+            }
+            enumerator: "CACHED"
+            scalar_value: {
+                int32_t: -2
+            }
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::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: "right"
+            type: TYPE_SCALAR
+            scalar_type: "int32_t"
+        }
+        struct_value: {
+            name: "bottom"
+            type: TYPE_SCALAR
+            scalar_type: "int32_t"
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::FRect"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "left"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "top"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "right"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        struct_value: {
+            name: "bottom"
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::Color"
+        type: TYPE_STRUCT
+        struct_value: {
+            name: "r"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "g"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "b"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+        struct_value: {
+            name: "a"
+            type: TYPE_SCALAR
+            scalar_type: "uint8_t"
+        }
+    }
+
+    attribute: {
+        name: "::android::hardware::graphics::composer::V2_1::IComposerClient::Command"
+        type: TYPE_ENUM
+        enum_value: {
+            scalar_type: "int32_t"
+
+            enumerator: "LENGTH_MASK"
+            scalar_value: {
+                int32_t: 65535
+            }
+            enumerator: "OPCODE_SHIFT"
+            scalar_value: {
+                int32_t: 16
+            }
+            enumerator: "OPCODE_MASK"
+            scalar_value: {
+                int32_t: -65536
+            }
+            enumerator: "SELECT_DISPLAY"
+            scalar_value: {
+                int32_t: 0
+            }
+            enumerator: "SELECT_LAYER"
+            scalar_value: {
+                int32_t: 65536
+            }
+            enumerator: "SET_ERROR"
+            scalar_value: {
+                int32_t: 16777216
+            }
+            enumerator: "SET_CHANGED_COMPOSITION_TYPES"
+            scalar_value: {
+                int32_t: 16842752
+            }
+            enumerator: "SET_DISPLAY_REQUESTS"
+            scalar_value: {
+                int32_t: 16908288
+            }
+            enumerator: "SET_PRESENT_FENCE"
+            scalar_value: {
+                int32_t: 16973824
+            }
+            enumerator: "SET_RELEASE_FENCES"
+            scalar_value: {
+                int32_t: 17039360
+            }
+            enumerator: "SET_COLOR_TRANSFORM"
+            scalar_value: {
+                int32_t: 33554432
+            }
+            enumerator: "SET_CLIENT_TARGET"
+            scalar_value: {
+                int32_t: 33619968
+            }
+            enumerator: "SET_OUTPUT_BUFFER"
+            scalar_value: {
+                int32_t: 33685504
+            }
+            enumerator: "VALIDATE_DISPLAY"
+            scalar_value: {
+                int32_t: 33751040
+            }
+            enumerator: "ACCEPT_DISPLAY_CHANGES"
+            scalar_value: {
+                int32_t: 33816576
+            }
+            enumerator: "PRESENT_DISPLAY"
+            scalar_value: {
+                int32_t: 33882112
+            }
+            enumerator: "SET_LAYER_CURSOR_POSITION"
+            scalar_value: {
+                int32_t: 50331648
+            }
+            enumerator: "SET_LAYER_BUFFER"
+            scalar_value: {
+                int32_t: 50397184
+            }
+            enumerator: "SET_LAYER_SURFACE_DAMAGE"
+            scalar_value: {
+                int32_t: 50462720
+            }
+            enumerator: "SET_LAYER_BLEND_MODE"
+            scalar_value: {
+                int32_t: 67108864
+            }
+            enumerator: "SET_LAYER_COLOR"
+            scalar_value: {
+                int32_t: 67174400
+            }
+            enumerator: "SET_LAYER_COMPOSITION_TYPE"
+            scalar_value: {
+                int32_t: 67239936
+            }
+            enumerator: "SET_LAYER_DATASPACE"
+            scalar_value: {
+                int32_t: 67305472
+            }
+            enumerator: "SET_LAYER_DISPLAY_FRAME"
+            scalar_value: {
+                int32_t: 67371008
+            }
+            enumerator: "SET_LAYER_PLANE_ALPHA"
+            scalar_value: {
+                int32_t: 67436544
+            }
+            enumerator: "SET_LAYER_SIDEBAND_STREAM"
+            scalar_value: {
+                int32_t: 67502080
+            }
+            enumerator: "SET_LAYER_SOURCE_CROP"
+            scalar_value: {
+                int32_t: 67567616
+            }
+            enumerator: "SET_LAYER_TRANSFORM"
+            scalar_value: {
+                int32_t: 67633152
+            }
+            enumerator: "SET_LAYER_VISIBLE_REGION"
+            scalar_value: {
+                int32_t: 67698688
+            }
+            enumerator: "SET_LAYER_Z_ORDER"
+            scalar_value: {
+                int32_t: 67764224
+            }
+        }
+    }
+
+    api: {
+        name: "registerCallback"
+        arg: {
+            type: TYPE_HIDL_CALLBACK
+            predefined_type: "IComposerCallback"
+            is_callback: true
+        }
+        callflow: {
+            entry: true
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getMaxVirtualDisplayCount"
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "createVirtualDisplay"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::common::V1_0::PixelFormat"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        arg: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::common::V1_0::PixelFormat"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "destroyVirtualDisplay"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "createLayer"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "destroyLayer"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getActiveConfig"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getClientTargetSupport"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        arg: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::common::V1_0::PixelFormat"
+        }
+        arg: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::common::V1_0::Dataspace"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getColorModes"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_ENUM
+                predefined_type: "::android::hardware::graphics::common::V1_0::ColorMode"
+            }
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getDisplayAttribute"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "int32_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        arg: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::IComposerClient::Attribute"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getDisplayConfigs"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_SCALAR
+                scalar_type: "uint32_t"
+            }
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getDisplayName"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_STRING
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getDisplayType"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::IComposerClient::DisplayType"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getDozeSupport"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "bool_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getHdrCapabilities"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_ENUM
+                predefined_type: "::android::hardware::graphics::common::V1_0::Hdr"
+            }
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "float_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "setClientTargetSlotCount"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "setActiveConfig"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "setColorMode"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::common::V1_0::ColorMode"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "setPowerMode"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::IComposerClient::PowerMode"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "setVsyncEnabled"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint64_t"
+        }
+        arg: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::IComposerClient::Vsync"
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "setInputCommandQueue"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        arg: {
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "getOutputCommandQueue"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+    api: {
+        name: "executeCommands"
+        return_type_hidl: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::graphics::composer::V2_1::Error"
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "bool_t"
+        }
+        return_type_hidl: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        return_type_hidl: {
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_HANDLE
+            }
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "uint32_t"
+        }
+        arg: {
+            type: TYPE_VECTOR
+            vector_value: {
+                type: TYPE_HANDLE
+            }
+        }
+        callflow: {
+            next: "*"
+        }
+    }
+
+}
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..c3f7636
--- /dev/null
+++ b/graphics/composer/2.1/vts/functional/Android.bp
@@ -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.
+//
+
+cc_test {
+    name: "graphics_composer_hidl_hal_test",
+    gtest: true,
+    srcs: ["graphics_composer_hidl_hal_test.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: [
+        "--coverage",
+        "-O0",
+        "-g",
+    ],
+    ldflags: [
+        "--coverage",
+    ],
+}
diff --git a/graphics/composer/2.1/vts/functional/graphics_composer_hidl_hal_test.cpp b/graphics/composer/2.1/vts/functional/graphics_composer_hidl_hal_test.cpp
new file mode 100644
index 0000000..e3e35bb
--- /dev/null
+++ b/graphics/composer/2.1/vts/functional/graphics_composer_hidl_hal_test.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/graphics/composer/2.1/vts/types.vts b/graphics/composer/2.1/vts/types.vts
new file mode 100644
index 0000000..ccbd9d8
--- /dev/null
+++ b/graphics/composer/2.1/vts/types.vts
@@ -0,0 +1,48 @@
+component_class: HAL_HIDL
+component_type_version: 2.1
+component_name: "types"
+
+package: "android.hardware.graphics.composer"
+
+
+attribute: {
+    name: "::android::hardware::graphics::composer::V2_1::Error"
+    type: TYPE_ENUM
+    enum_value: {
+        scalar_type: "int32_t"
+
+        enumerator: "NONE"
+        scalar_value: {
+            int32_t: 0
+        }
+        enumerator: "BAD_CONFIG"
+        scalar_value: {
+            int32_t: 1
+        }
+        enumerator: "BAD_DISPLAY"
+        scalar_value: {
+            int32_t: 2
+        }
+        enumerator: "BAD_LAYER"
+        scalar_value: {
+            int32_t: 3
+        }
+        enumerator: "BAD_PARAMETER"
+        scalar_value: {
+            int32_t: 4
+        }
+        enumerator: "NO_RESOURCES"
+        scalar_value: {
+            int32_t: 6
+        }
+        enumerator: "NOT_VALIDATED"
+        scalar_value: {
+            int32_t: 7
+        }
+        enumerator: "UNSUPPORTED"
+        scalar_value: {
+            int32_t: 8
+        }
+    }
+}
+
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..938ff8b 100644
--- a/graphics/mapper/2.0/Android.bp
+++ b/graphics/mapper/2.0/Android.bp
@@ -58,3 +58,112 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.graphics.mapper.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.mapper@2.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/graphics/mapper/2.0/ $(genDir)/android/hardware/graphics/mapper/2.0/",
+    srcs: [
+        "types.hal",
+        "IMapper.hal",
+    ],
+    out: [
+        "android/hardware/graphics/mapper/2.0/types.vts.cpp",
+        "android/hardware/graphics/mapper/2.0/Mapper.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.graphics.mapper.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.mapper@2.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/graphics/mapper/2.0/ $(genDir)/android/hardware/graphics/mapper/2.0/",
+    srcs: [
+        "types.hal",
+        "IMapper.hal",
+    ],
+    out: [
+        "android/hardware/graphics/mapper/2.0/types.vts.h",
+        "android/hardware/graphics/mapper/2.0/Mapper.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.graphics.mapper.vts.driver@2.0",
+    generated_sources: ["android.hardware.graphics.mapper.vts.driver@2.0_genc++"],
+    generated_headers: ["android.hardware.graphics.mapper.vts.driver@2.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.graphics.mapper.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.allocator@2.0",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+        "android.hardware.graphics.mapper@2.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.graphics.mapper@2.0-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.mapper@2.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/graphics/mapper/2.0/ $(genDir)/android/hardware/graphics/mapper/2.0/",
+    srcs: [
+        "types.hal",
+        "IMapper.hal",
+    ],
+    out: [
+        "android/hardware/graphics/mapper/2.0/types.vts.cpp",
+        "android/hardware/graphics/mapper/2.0/Mapper.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.graphics.mapper@2.0-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.mapper@2.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/graphics/mapper/2.0/ $(genDir)/android/hardware/graphics/mapper/2.0/",
+    srcs: [
+        "types.hal",
+        "IMapper.hal",
+    ],
+    out: [
+        "android/hardware/graphics/mapper/2.0/types.vts.h",
+        "android/hardware/graphics/mapper/2.0/Mapper.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.graphics.mapper@2.0-vts.profiler",
+    generated_sources: ["android.hardware.graphics.mapper@2.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.graphics.mapper@2.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.graphics.mapper@2.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.common@1.0",
+        "android.hidl.base@1.0",
+        "android.hardware.graphics.mapper@2.0",
+    ],
+}
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/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/health/1.0/Android.bp b/health/1.0/Android.bp
index b0b9549..4e16231 100644
--- a/health/1.0/Android.bp
+++ b/health/1.0/Android.bp
@@ -54,3 +54,106 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.health.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.health@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/health/1.0/ $(genDir)/android/hardware/health/1.0/",
+    srcs: [
+        "types.hal",
+        "IHealth.hal",
+    ],
+    out: [
+        "android/hardware/health/1.0/types.vts.cpp",
+        "android/hardware/health/1.0/Health.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.health.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.health@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/health/1.0/ $(genDir)/android/hardware/health/1.0/",
+    srcs: [
+        "types.hal",
+        "IHealth.hal",
+    ],
+    out: [
+        "android/hardware/health/1.0/types.vts.h",
+        "android/hardware/health/1.0/Health.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.health.vts.driver@1.0",
+    generated_sources: ["android.hardware.health.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.health.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.health.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.health@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.health@1.0-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.health@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/health/1.0/ $(genDir)/android/hardware/health/1.0/",
+    srcs: [
+        "types.hal",
+        "IHealth.hal",
+    ],
+    out: [
+        "android/hardware/health/1.0/types.vts.cpp",
+        "android/hardware/health/1.0/Health.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.health@1.0-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.health@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/health/1.0/ $(genDir)/android/hardware/health/1.0/",
+    srcs: [
+        "types.hal",
+        "IHealth.hal",
+    ],
+    out: [
+        "android/hardware/health/1.0/types.vts.h",
+        "android/hardware/health/1.0/Health.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.health@1.0-vts.profiler",
+    generated_sources: ["android.hardware.health@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.health@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.health@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.health@1.0",
+    ],
+}
diff --git a/ir/1.0/Android.bp b/ir/1.0/Android.bp
index fb9f070..45e308a 100644
--- a/ir/1.0/Android.bp
+++ b/ir/1.0/Android.bp
@@ -114,38 +114,38 @@
 }
 
 genrule {
-    name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++",
+    name: "android.hardware.ir@1.0-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",
+        "IConsumerIr.hal",
     ],
     out: [
-        "android/hardware/ir/1.0/ConsumerIr.vts.cpp",
         "android/hardware/ir/1.0/types.vts.cpp",
+        "android/hardware/ir/1.0/ConsumerIr.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers",
+    name: "android.hardware.ir@1.0-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",
+        "IConsumerIr.hal",
     ],
     out: [
-        "android/hardware/ir/1.0/ConsumerIr.vts.h",
         "android/hardware/ir/1.0/types.vts.h",
+        "android/hardware/ir/1.0/ConsumerIr.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"],
+    name: "android.hardware.ir@1.0-vts.profiler",
+    generated_sources: ["android.hardware.ir@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.ir@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.ir@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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 bf3d236..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="precondition-hwbinder-service" value="android.hardware.ir" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
diff --git a/keymaster/3.0/Android.bp b/keymaster/3.0/Android.bp
index a8247e1..e9a4985 100644
--- a/keymaster/3.0/Android.bp
+++ b/keymaster/3.0/Android.bp
@@ -54,3 +54,106 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.keymaster.vts.driver@3.0_genc++",
+    tools: ["hidl-gen", "vtsc"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.keymaster@3.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/keymaster/3.0/ $(genDir)/android/hardware/keymaster/3.0/",
+    srcs: [
+        "types.hal",
+        "IKeymasterDevice.hal",
+    ],
+    out: [
+        "android/hardware/keymaster/3.0/types.vts.cpp",
+        "android/hardware/keymaster/3.0/KeymasterDevice.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.keymaster.vts.driver@3.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.keymaster@3.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/keymaster/3.0/ $(genDir)/android/hardware/keymaster/3.0/",
+    srcs: [
+        "types.hal",
+        "IKeymasterDevice.hal",
+    ],
+    out: [
+        "android/hardware/keymaster/3.0/types.vts.h",
+        "android/hardware/keymaster/3.0/KeymasterDevice.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.keymaster.vts.driver@3.0",
+    generated_sources: ["android.hardware.keymaster.vts.driver@3.0_genc++"],
+    generated_headers: ["android.hardware.keymaster.vts.driver@3.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.keymaster.vts.driver@3.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.keymaster@3.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.keymaster@3.0-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.keymaster@3.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/keymaster/3.0/ $(genDir)/android/hardware/keymaster/3.0/",
+    srcs: [
+        "types.hal",
+        "IKeymasterDevice.hal",
+    ],
+    out: [
+        "android/hardware/keymaster/3.0/types.vts.cpp",
+        "android/hardware/keymaster/3.0/KeymasterDevice.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.keymaster@3.0-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.keymaster@3.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/keymaster/3.0/ $(genDir)/android/hardware/keymaster/3.0/",
+    srcs: [
+        "types.hal",
+        "IKeymasterDevice.hal",
+    ],
+    out: [
+        "android/hardware/keymaster/3.0/types.vts.h",
+        "android/hardware/keymaster/3.0/KeymasterDevice.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.keymaster@3.0-vts.profiler",
+    generated_sources: ["android.hardware.keymaster@3.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.keymaster@3.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.keymaster@3.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.keymaster@3.0",
+    ],
+}
diff --git a/light/2.0/Android.bp b/light/2.0/Android.bp
index 118be88..928f1c3 100644
--- a/light/2.0/Android.bp
+++ b/light/2.0/Android.bp
@@ -114,38 +114,38 @@
 }
 
 genrule {
-    name: "android.hardware.light@2.0-ILight-vts.profiler_genc++",
+    name: "android.hardware.light@2.0-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",
+        "ILight.hal",
     ],
     out: [
-        "android/hardware/light/2.0/Light.vts.cpp",
         "android/hardware/light/2.0/types.vts.cpp",
+        "android/hardware/light/2.0/Light.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.light@2.0-ILight-vts.profiler_genc++_headers",
+    name: "android.hardware.light@2.0-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",
+        "ILight.hal",
     ],
     out: [
-        "android/hardware/light/2.0/Light.vts.h",
         "android/hardware/light/2.0/types.vts.h",
+        "android/hardware/light/2.0/Light.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"],
+    name: "android.hardware.light@2.0-vts.profiler",
+    generated_sources: ["android.hardware.light@2.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.light@2.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.light@2.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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/media/1.0/Android.bp b/media/1.0/Android.bp
index d533e5a..5f81ca0 100644
--- a/media/1.0/Android.bp
+++ b/media/1.0/Android.bp
@@ -46,3 +46,98 @@
         "android.hardware.graphics.common@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.media.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.media@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/media/1.0/ $(genDir)/android/hardware/media/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/media/1.0/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.media.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.media@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/media/1.0/ $(genDir)/android/hardware/media/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/media/1.0/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.media.vts.driver@1.0",
+    generated_sources: ["android.hardware.media.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.media.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.media.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.graphics.common@1.0",
+        "android.hardware.media@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.graphics.common@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.media@1.0-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.media@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/media/1.0/ $(genDir)/android/hardware/media/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/media/1.0/types.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.media@1.0-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.media@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/media/1.0/ $(genDir)/android/hardware/media/1.0/",
+    srcs: [
+        "types.hal",
+    ],
+    out: [
+        "android/hardware/media/1.0/types.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.media@1.0-vts.profiler",
+    generated_sources: ["android.hardware.media@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.media@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.media@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.graphics.common@1.0",
+        "android.hardware.media@1.0",
+    ],
+}
diff --git a/media/omx/1.0/Android.bp b/media/omx/1.0/Android.bp
index f79aabb..6a27a34 100644
--- a/media/omx/1.0/Android.bp
+++ b/media/omx/1.0/Android.bp
@@ -54,8 +54,8 @@
         "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/BnOmxBufferProducer.h",
-        "android/hardware/media/omx/1.0/BpOmxBufferProducer.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",
@@ -74,8 +74,8 @@
         "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/BnOmxProducerListener.h",
-        "android/hardware/media/omx/1.0/BpOmxProducerListener.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",
     ],
 }
@@ -106,3 +106,160 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.media.omx.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.media.omx@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/media/omx/1.0/ $(genDir)/android/hardware/media/omx/1.0/",
+    srcs: [
+        "types.hal",
+        "IGraphicBufferSource.hal",
+        "IOmx.hal",
+        "IOmxBufferProducer.hal",
+        "IOmxBufferSource.hal",
+        "IOmxNode.hal",
+        "IOmxObserver.hal",
+        "IOmxProducerListener.hal",
+    ],
+    out: [
+        "android/hardware/media/omx/1.0/types.vts.cpp",
+        "android/hardware/media/omx/1.0/GraphicBufferSource.vts.cpp",
+        "android/hardware/media/omx/1.0/Omx.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxBufferProducer.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxBufferSource.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxNode.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxObserver.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxProducerListener.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.media.omx.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.media.omx@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/media/omx/1.0/ $(genDir)/android/hardware/media/omx/1.0/",
+    srcs: [
+        "types.hal",
+        "IGraphicBufferSource.hal",
+        "IOmx.hal",
+        "IOmxBufferProducer.hal",
+        "IOmxBufferSource.hal",
+        "IOmxNode.hal",
+        "IOmxObserver.hal",
+        "IOmxProducerListener.hal",
+    ],
+    out: [
+        "android/hardware/media/omx/1.0/types.vts.h",
+        "android/hardware/media/omx/1.0/GraphicBufferSource.vts.h",
+        "android/hardware/media/omx/1.0/Omx.vts.h",
+        "android/hardware/media/omx/1.0/OmxBufferProducer.vts.h",
+        "android/hardware/media/omx/1.0/OmxBufferSource.vts.h",
+        "android/hardware/media/omx/1.0/OmxNode.vts.h",
+        "android/hardware/media/omx/1.0/OmxObserver.vts.h",
+        "android/hardware/media/omx/1.0/OmxProducerListener.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.media.omx.vts.driver@1.0",
+    generated_sources: ["android.hardware.media.omx.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.media.omx.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.media.omx.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.graphics.common@1.0",
+        "android.hardware.media@1.0",
+        "android.hidl.base@1.0",
+        "android.hardware.media.omx@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.graphics.common@1.0",
+        "android.hardware.media@1.0",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.media.omx@1.0-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.media.omx@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/media/omx/1.0/ $(genDir)/android/hardware/media/omx/1.0/",
+    srcs: [
+        "types.hal",
+        "IGraphicBufferSource.hal",
+        "IOmx.hal",
+        "IOmxBufferProducer.hal",
+        "IOmxBufferSource.hal",
+        "IOmxNode.hal",
+        "IOmxObserver.hal",
+        "IOmxProducerListener.hal",
+    ],
+    out: [
+        "android/hardware/media/omx/1.0/types.vts.cpp",
+        "android/hardware/media/omx/1.0/GraphicBufferSource.vts.cpp",
+        "android/hardware/media/omx/1.0/Omx.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxBufferProducer.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxBufferSource.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxNode.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxObserver.vts.cpp",
+        "android/hardware/media/omx/1.0/OmxProducerListener.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.media.omx@1.0-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.media.omx@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/media/omx/1.0/ $(genDir)/android/hardware/media/omx/1.0/",
+    srcs: [
+        "types.hal",
+        "IGraphicBufferSource.hal",
+        "IOmx.hal",
+        "IOmxBufferProducer.hal",
+        "IOmxBufferSource.hal",
+        "IOmxNode.hal",
+        "IOmxObserver.hal",
+        "IOmxProducerListener.hal",
+    ],
+    out: [
+        "android/hardware/media/omx/1.0/types.vts.h",
+        "android/hardware/media/omx/1.0/GraphicBufferSource.vts.h",
+        "android/hardware/media/omx/1.0/Omx.vts.h",
+        "android/hardware/media/omx/1.0/OmxBufferProducer.vts.h",
+        "android/hardware/media/omx/1.0/OmxBufferSource.vts.h",
+        "android/hardware/media/omx/1.0/OmxNode.vts.h",
+        "android/hardware/media/omx/1.0/OmxObserver.vts.h",
+        "android/hardware/media/omx/1.0/OmxProducerListener.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.media.omx@1.0-vts.profiler",
+    generated_sources: ["android.hardware.media.omx@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.media.omx@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.media.omx@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hardware.graphics.common@1.0",
+        "android.hardware.media@1.0",
+        "android.hidl.base@1.0",
+        "android.hardware.media.omx@1.0",
+    ],
+}
diff --git a/memtrack/1.0/Android.bp b/memtrack/1.0/Android.bp
index 36e7594..3a2db14 100644
--- a/memtrack/1.0/Android.bp
+++ b/memtrack/1.0/Android.bp
@@ -114,38 +114,38 @@
 }
 
 genrule {
-    name: "android.hardware.memtrack@1.0-IMemtrack-vts.profiler_genc++",
+    name: "android.hardware.memtrack@1.0-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",
+        "IMemtrack.hal",
     ],
     out: [
-        "android/hardware/memtrack/1.0/Memtrack.vts.cpp",
         "android/hardware/memtrack/1.0/types.vts.cpp",
+        "android/hardware/memtrack/1.0/Memtrack.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.memtrack@1.0-IMemtrack-vts.profiler_genc++_headers",
+    name: "android.hardware.memtrack@1.0-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",
+        "IMemtrack.hal",
     ],
     out: [
-        "android/hardware/memtrack/1.0/Memtrack.vts.h",
         "android/hardware/memtrack/1.0/types.vts.h",
+        "android/hardware/memtrack/1.0/Memtrack.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"],
+    name: "android.hardware.memtrack@1.0-vts.profiler",
+    generated_sources: ["android.hardware.memtrack@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.memtrack@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.memtrack@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
diff --git a/memtrack/1.0/vts/Android.mk b/memtrack/1.0/vts/Android.mk
deleted file mode 100644
index fbb5951..0000000
--- a/memtrack/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/memtrack/hidl/Android.mk
diff --git a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/Android.mk b/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/memtrack/1.0/vts/functional/vts/testcases/hal/memtrack/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/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/nfc/1.0/Android.bp b/nfc/1.0/Android.bp
index 0fda103..e1c06c6 100644
--- a/nfc/1.0/Android.bp
+++ b/nfc/1.0/Android.bp
@@ -126,83 +126,42 @@
 }
 
 genrule {
-    name: "android.hardware.nfc@1.0-INfc-vts.profiler_genc++",
+    name: "android.hardware.nfc@1.0-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",
+        "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/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",
+    name: "android.hardware.nfc@1.0-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",
+        "INfc.hal",
+        "INfcClientCallback.hal",
     ],
     out: [
-        "android/hardware/nfc/1.0/NfcClientCallback.vts.h",
         "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@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"],
+    name: "android.hardware.nfc@1.0-vts.profiler",
+    generated_sources: ["android.hardware.nfc@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.nfc@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.nfc@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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 3b570f9..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="25m" />
-    <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/power/1.0/Android.bp b/power/1.0/Android.bp
index db8c721..33caa8d 100644
--- a/power/1.0/Android.bp
+++ b/power/1.0/Android.bp
@@ -114,38 +114,38 @@
 }
 
 genrule {
-    name: "android.hardware.power@1.0-IPower-vts.profiler_genc++",
+    name: "android.hardware.power@1.0-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",
+        "IPower.hal",
     ],
     out: [
-        "android/hardware/power/1.0/Power.vts.cpp",
         "android/hardware/power/1.0/types.vts.cpp",
+        "android/hardware/power/1.0/Power.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.power@1.0-IPower-vts.profiler_genc++_headers",
+    name: "android.hardware.power@1.0-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",
+        "IPower.hal",
     ],
     out: [
-        "android/hardware/power/1.0/Power.vts.h",
         "android/hardware/power/1.0/types.vts.h",
+        "android/hardware/power/1.0/Power.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"],
+    name: "android.hardware.power@1.0-vts.profiler",
+    generated_sources: ["android.hardware.power@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.power@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.power@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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/radio/1.0/Android.bp b/radio/1.0/Android.bp
index e17d949..7bff574 100644
--- a/radio/1.0/Android.bp
+++ b/radio/1.0/Android.bp
@@ -162,218 +162,54 @@
 }
 
 genrule {
-    name: "android.hardware.radio@1.0-IRadio-vts.profiler_genc++",
+    name: "android.hardware.radio@1.0-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",
+        "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/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",
+    name: "android.hardware.radio@1.0-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",
+        "IRadio.hal",
+        "IRadioIndication.hal",
+        "IRadioResponse.hal",
+        "ISap.hal",
+        "ISapCallback.hal",
     ],
     out: [
-        "android/hardware/radio/1.0/SapCallback.vts.h",
         "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@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"],
+    name: "android.hardware.radio@1.0-vts.profiler",
+    generated_sources: ["android.hardware.radio@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.radio@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.radio@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
diff --git a/radio/1.0/Android.mk b/radio/1.0/Android.mk
index 059ebcb..82bde55 100644
--- a/radio/1.0/Android.mk
+++ b/radio/1.0/Android.mk
@@ -1214,9 +1214,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 +1226,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)
@@ -2828,6 +2828,83 @@
 	$(transform-generated-source)
 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 (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 (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 (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 IRadio.hal
 #
@@ -4153,9 +4230,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 +4242,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)
@@ -5768,6 +5845,82 @@
 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 (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 (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 (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 IRadio.hal
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/IRadio.java
diff --git a/radio/1.0/IRadio.hal b/radio/1.0/IRadio.hal
index 1cb7040..04d93db 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,40 @@
      *
      * @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);
+
+    /*
      * 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 fb8666f..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.
diff --git a/radio/1.0/IRadioResponse.hal b/radio/1.0/IRadioResponse.hal
index 8ff2e24..538c06d 100644
--- a/radio/1.0/IRadioResponse.hal
+++ b/radio/1.0/IRadioResponse.hal
@@ -1939,7 +1939,26 @@
             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);
+
+    /*
+     * 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 c0a6475..91030ef 100644
--- a/radio/1.0/types.hal
+++ b/radio/1.0/types.hal
@@ -540,7 +540,7 @@
     LTE_CA = 19,
 };
 
-enum DataProfile : int32_t {
+enum DataProfileId : int32_t {
     DEFAULT = 0,
     TETHERED = 1,
     IMS = 2,
@@ -1059,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
@@ -1289,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
@@ -1375,7 +1439,7 @@
     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,
@@ -1698,14 +1762,17 @@
 };
 
 struct DataProfileInfo {
-    int32_t profileId;                    // id of the data profile
+    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".
-    ApnAuthType authType;
+    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;
+    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
@@ -1713,6 +1780,17 @@
                                           // 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 {
@@ -1927,4 +2005,4 @@
                                           // 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
index c3d998a..05fa462 100644
--- a/radio/1.0/vts/Radio.vts
+++ b/radio/1.0/vts/Radio.vts
@@ -315,28 +315,20 @@
             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"
+            predefined_type: "::android::hardware::radio::V1_0::RadioTechnology"
         }
         arg: {
-            type: TYPE_STRING
+            type: TYPE_STRUCT
+            predefined_type: "::android::hardware::radio::V1_0::DataProfileInfo"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "bool_t"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "bool_t"
         }
     }
 
@@ -1198,20 +1190,12 @@
             scalar_type: "int32_t"
         }
         arg: {
-            type: TYPE_STRING
+            type: TYPE_STRUCT
+            predefined_type: "::android::hardware::radio::V1_0::DataProfileInfo"
         }
         arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_ENUM
-            predefined_type: "::android::hardware::radio::V1_0::ApnAuthType"
-        }
-        arg: {
-            type: TYPE_STRING
-        }
-        arg: {
-            type: TYPE_STRING
+            type: TYPE_SCALAR
+            scalar_type: "bool_t"
         }
     }
 
@@ -1491,6 +1475,35 @@
     }
 
     api: {
+        name: "sendDeviceState"
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "int32_t"
+        }
+        arg: {
+            type: TYPE_ENUM
+            predefined_type: "::android::hardware::radio::V1_0::DeviceStateType"
+        }
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "bool_t"
+        }
+    }
+
+    api: {
+        name: "setIndicationFilter"
+        arg: {
+            type: TYPE_SCALAR
+            scalar_type: "int32_t"
+        }
+        arg: {
+            type: TYPE_MASK
+            scalar_type: "int32_t"
+            predefined_type: "::android::hardware::radio::V1_0::IndicationFilter"
+        }
+    }
+
+    api: {
         name: "responseAcknowledgement"
     }
 
diff --git a/radio/1.0/vts/RadioIndication.vts b/radio/1.0/vts/RadioIndication.vts
index fac73a9..74a52c6 100644
--- a/radio/1.0/vts/RadioIndication.vts
+++ b/radio/1.0/vts/RadioIndication.vts
@@ -28,7 +28,7 @@
     }
 
     api: {
-        name: "voiceNetworkStateChanged"
+        name: "networkStateChanged"
         arg: {
             type: TYPE_ENUM
             predefined_type: "::android::hardware::radio::V1_0::RadioIndicationType"
diff --git a/radio/1.0/vts/RadioResponse.vts b/radio/1.0/vts/RadioResponse.vts
index 2884d30..9aed63e 100644
--- a/radio/1.0/vts/RadioResponse.vts
+++ b/radio/1.0/vts/RadioResponse.vts
@@ -1372,6 +1372,22 @@
     }
 
     api: {
+        name: "sendDeviceStateResponse"
+        arg: {
+            type: TYPE_STRUCT
+            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
+        }
+    }
+
+    api: {
+        name: "setIndicationFilterResponse"
+        arg: {
+            type: TYPE_STRUCT
+            predefined_type: "::android::hardware::radio::V1_0::RadioResponseInfo"
+        }
+    }
+
+    api: {
         name: "acknowledgeRequest"
         arg: {
             type: TYPE_SCALAR
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
index c11db63..6d42016 100644
--- a/radio/1.0/vts/types.vts
+++ b/radio/1.0/vts/types.vts
@@ -1817,7 +1817,7 @@
 }
 
 attribute: {
-    name: "::android::hardware::radio::V1_0::DataProfile"
+    name: "::android::hardware::radio::V1_0::DataProfileId"
     type: TYPE_ENUM
     enum_value: {
         scalar_type: "int32_t"
@@ -1859,7 +1859,7 @@
     enum_value: {
         scalar_type: "int32_t"
 
-        enumerator: "MEMORY_CAPAPCITY_EXCEEDED"
+        enumerator: "MEMORY_CAPACITY_EXCEEDED"
         scalar_value: {
             int32_t: 211
         }
@@ -1913,7 +1913,7 @@
         scalar_value: {
             int32_t: 1
         }
-        enumerator: "UNKOWN"
+        enumerator: "UNKNOWN"
         scalar_value: {
             int32_t: 2
         }
@@ -2406,7 +2406,7 @@
         scalar_value: {
             int32_t: 1
         }
-        enumerator: "FACORY_RESET"
+        enumerator: "FACTORY_RESET"
         scalar_value: {
             int32_t: 2
         }
@@ -3551,6 +3551,138 @@
 }
 
 attribute: {
+    name: "::android::hardware::radio::V1_0::ApnTypes"
+    type: TYPE_ENUM
+    enum_value: {
+        scalar_type: "int32_t"
+
+        enumerator: "NONE"
+        scalar_value: {
+            int32_t: 0
+        }
+        enumerator: "DEFAULT"
+        scalar_value: {
+            int32_t: 1
+        }
+        enumerator: "MMS"
+        scalar_value: {
+            int32_t: 2
+        }
+        enumerator: "SUPL"
+        scalar_value: {
+            int32_t: 4
+        }
+        enumerator: "DUN"
+        scalar_value: {
+            int32_t: 8
+        }
+        enumerator: "HIPRI"
+        scalar_value: {
+            int32_t: 16
+        }
+        enumerator: "FOTA"
+        scalar_value: {
+            int32_t: 32
+        }
+        enumerator: "IMS"
+        scalar_value: {
+            int32_t: 64
+        }
+        enumerator: "CBS"
+        scalar_value: {
+            int32_t: 128
+        }
+        enumerator: "IA"
+        scalar_value: {
+            int32_t: 256
+        }
+        enumerator: "EMERGENCY"
+        scalar_value: {
+            int32_t: 512
+        }
+        enumerator: "ALL"
+        scalar_value: {
+            int32_t: 1023
+        }
+    }
+}
+
+attribute: {
+    name: "::android::hardware::radio::V1_0::IndicationFilter"
+    type: TYPE_ENUM
+    enum_value: {
+        scalar_type: "int32_t"
+
+        enumerator: "NONE"
+        scalar_value: {
+            int32_t: 0
+        }
+        enumerator: "SIGNAL_STRENGTH"
+        scalar_value: {
+            int32_t: 1
+        }
+        enumerator: "FULL_NETWORK_STATE"
+        scalar_value: {
+            int32_t: 2
+        }
+        enumerator: "DATA_CALL_DORMANCY_CHANGED"
+        scalar_value: {
+            int32_t: 4
+        }
+        enumerator: "ALL"
+        scalar_value: {
+            int32_t: 7
+        }
+    }
+}
+
+attribute: {
+    name: "::android::hardware::radio::V1_0::MvnoType"
+    type: TYPE_ENUM
+    enum_value: {
+        scalar_type: "int32_t"
+
+        enumerator: "NONE"
+        scalar_value: {
+            int32_t: 0
+        }
+        enumerator: "IMSI"
+        scalar_value: {
+            int32_t: 1
+        }
+        enumerator: "GID"
+        scalar_value: {
+            int32_t: 2
+        }
+        enumerator: "SPN"
+        scalar_value: {
+            int32_t: 3
+        }
+    }
+}
+
+attribute: {
+    name: "::android::hardware::radio::V1_0::DeviceStateType"
+    type: TYPE_ENUM
+    enum_value: {
+        scalar_type: "int32_t"
+
+        enumerator: "POWER_SAVE_MODE"
+        scalar_value: {
+            int32_t: 0
+        }
+        enumerator: "CHARGING_STATE"
+        scalar_value: {
+            int32_t: 1
+        }
+        enumerator: "LOW_DATA_EXPECTED"
+        scalar_value: {
+            int32_t: 2
+        }
+    }
+}
+
+attribute: {
     name: "::android::hardware::radio::V1_0::RadioResponseInfo"
     type: TYPE_STRUCT
     struct_value: {
@@ -4528,7 +4660,7 @@
         scalar_type: "int32_t"
     }
     struct_value: {
-        name: "basestationId"
+        name: "baseStationId"
         type: TYPE_SCALAR
         scalar_type: "int32_t"
     }
@@ -4956,8 +5088,8 @@
     type: TYPE_STRUCT
     struct_value: {
         name: "profileId"
-        type: TYPE_SCALAR
-        scalar_type: "int32_t"
+        type: TYPE_ENUM
+        predefined_type: "::android::hardware::radio::V1_0::DataProfileId"
     }
     struct_value: {
         name: "apn"
@@ -4968,6 +5100,10 @@
         type: TYPE_STRING
     }
     struct_value: {
+        name: "roamingProtocol"
+        type: TYPE_STRING
+    }
+    struct_value: {
         name: "authType"
         type: TYPE_ENUM
         predefined_type: "::android::hardware::radio::V1_0::ApnAuthType"
@@ -5005,6 +5141,32 @@
         type: TYPE_SCALAR
         scalar_type: "bool_t"
     }
+    struct_value: {
+        name: "supportedApnTypesBitmap"
+        type: TYPE_MASK
+        scalar_type: "int32_t"
+        predefined_type: "::android::hardware::radio::V1_0::ApnTypes"
+    }
+    struct_value: {
+        name: "bearerBitmap"
+        type: TYPE_MASK
+        scalar_type: "int32_t"
+        predefined_type: "::android::hardware::radio::V1_0::RadioAccessFamily"
+    }
+    struct_value: {
+        name: "mtu"
+        type: TYPE_SCALAR
+        scalar_type: "int32_t"
+    }
+    struct_value: {
+        name: "mvnoType"
+        type: TYPE_ENUM
+        predefined_type: "::android::hardware::radio::V1_0::MvnoType"
+    }
+    struct_value: {
+        name: "mvnoMatchData"
+        type: TYPE_STRING
+    }
 }
 
 attribute: {
@@ -5022,7 +5184,8 @@
     }
     struct_value: {
         name: "raf"
-        type: TYPE_ENUM
+        type: TYPE_MASK
+        scalar_type: "int32_t"
         predefined_type: "::android::hardware::radio::V1_0::RadioAccessFamily"
     }
     struct_value: {
@@ -5087,8 +5250,8 @@
     struct_value: {
         name: "txmModetimeMs"
         type: TYPE_ARRAY
+        vector_size: 5
         vector_value: {
-            vector_size: 5
             type: TYPE_SCALAR
             scalar_type: "uint32_t"
         }
@@ -5238,7 +5401,7 @@
         predefined_type: "::android::hardware::radio::V1_0::CdmaSignalInfoRecord"
     }
     struct_value: {
-        name: "numbertype"
+        name: "numberType"
         type: TYPE_ENUM
         predefined_type: "::android::hardware::radio::V1_0::CdmaCallWaitingNumberType"
     }
@@ -5477,7 +5640,8 @@
     }
     struct_value: {
         name: "serviceClass"
-        type: TYPE_ENUM
+        type: TYPE_MASK
+        scalar_type: "int32_t"
         predefined_type: "::android::hardware::radio::V1_0::SuppServiceClass"
     }
     struct_value: {
diff --git a/sensors/1.0/Android.bp b/sensors/1.0/Android.bp
index 2995504..d4ebe98 100644
--- a/sensors/1.0/Android.bp
+++ b/sensors/1.0/Android.bp
@@ -114,38 +114,38 @@
 }
 
 genrule {
-    name: "android.hardware.sensors@1.0-ISensors-vts.profiler_genc++",
+    name: "android.hardware.sensors@1.0-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",
+        "ISensors.hal",
     ],
     out: [
-        "android/hardware/sensors/1.0/Sensors.vts.cpp",
         "android/hardware/sensors/1.0/types.vts.cpp",
+        "android/hardware/sensors/1.0/Sensors.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.sensors@1.0-ISensors-vts.profiler_genc++_headers",
+    name: "android.hardware.sensors@1.0-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",
+        "ISensors.hal",
     ],
     out: [
-        "android/hardware/sensors/1.0/Sensors.vts.h",
         "android/hardware/sensors/1.0/types.vts.h",
+        "android/hardware/sensors/1.0/Sensors.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"],
+    name: "android.hardware.sensors@1.0-vts.profiler",
+    generated_sources: ["android.hardware.sensors@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.sensors@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.sensors@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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 3c7fbbb..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, -22);
-
-        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/soundtrigger/2.0/Android.bp b/soundtrigger/2.0/Android.bp
index 5b50f39..a11cbe6 100644
--- a/soundtrigger/2.0/Android.bp
+++ b/soundtrigger/2.0/Android.bp
@@ -130,84 +130,42 @@
 }
 
 genrule {
-    name: "android.hardware.soundtrigger@2.0-ISoundTriggerHw-vts.profiler_genc++",
+    name: "android.hardware.soundtrigger@2.0-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",
+        "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/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",
+    name: "android.hardware.soundtrigger@2.0-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",
+        "ISoundTriggerHw.hal",
+        "ISoundTriggerHwCallback.hal",
     ],
     out: [
-        "android/hardware/soundtrigger/2.0/SoundTriggerHwCallback.vts.h",
         "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@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"],
+    name: "android.hardware.soundtrigger@2.0-vts.profiler",
+    generated_sources: ["android.hardware.soundtrigger@2.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.soundtrigger@2.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.soundtrigger@2.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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 d450315..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/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 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="hal_hidl_gtest" />
-        <option name="precondition-file-path-prefix" value="/*/lib/hw/sound_trigger.primary." />
-        <option name="skip-on-64bit-abi" value="true" />
-        <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 cd95b5f..0000000
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/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 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="HalSoundTriggerHidlTargetBasicProfilingTest" />
-        <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="hal_hidl_gtest" />
-        <option name="precondition-file-path-prefix" value="*/lib/hw/sound_trigger.primary." />
-        <option name="test-timeout" value="1m" />
-        <option name="enable-profiling" value="true" />
-    </test>
-</configuration>
diff --git a/thermal/1.0/Android.bp b/thermal/1.0/Android.bp
index e80bedc..fc44ff1 100644
--- a/thermal/1.0/Android.bp
+++ b/thermal/1.0/Android.bp
@@ -114,38 +114,38 @@
 }
 
 genrule {
-    name: "android.hardware.thermal@1.0-IThermal-vts.profiler_genc++",
+    name: "android.hardware.thermal@1.0-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",
+        "IThermal.hal",
     ],
     out: [
-        "android/hardware/thermal/1.0/Thermal.vts.cpp",
         "android/hardware/thermal/1.0/types.vts.cpp",
+        "android/hardware/thermal/1.0/Thermal.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.thermal@1.0-IThermal-vts.profiler_genc++_headers",
+    name: "android.hardware.thermal@1.0-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",
+        "IThermal.hal",
     ],
     out: [
-        "android/hardware/thermal/1.0/Thermal.vts.h",
         "android/hardware/thermal/1.0/types.vts.h",
+        "android/hardware/thermal/1.0/Thermal.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"],
+    name: "android.hardware.thermal@1.0-vts.profiler",
+    generated_sources: ["android.hardware.thermal@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.thermal@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.thermal@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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/thermal_hidl_hal_test.cpp
index 3c887c8..5bdd2c2 100644
--- a/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp
+++ b/thermal/1.0/vts/functional/thermal_hidl_hal_test.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);
+    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/tv/cec/1.0/Android.bp b/tv/cec/1.0/Android.bp
index 21233ab..0096589 100644
--- a/tv/cec/1.0/Android.bp
+++ b/tv/cec/1.0/Android.bp
@@ -126,83 +126,42 @@
 }
 
 genrule {
-    name: "android.hardware.tv.cec@1.0-IHdmiCec-vts.profiler_genc++",
+    name: "android.hardware.tv.cec@1.0-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",
+        "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/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",
+    name: "android.hardware.tv.cec@1.0-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",
+        "IHdmiCec.hal",
+        "IHdmiCecCallback.hal",
     ],
     out: [
-        "android/hardware/tv/cec/1.0/HdmiCecCallback.vts.h",
         "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@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"],
+    name: "android.hardware.tv.cec@1.0-vts.profiler",
+    generated_sources: ["android.hardware.tv.cec@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.tv.cec@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.tv.cec@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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 14a57a6..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/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 := 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 7cb1b06..0000000
--- a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host/TvCecHidlTest.py
+++ /dev/null
@@ -1,82 +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 keys
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.coverage import coverage_utils
-
-
-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")
-
-        if getattr(self, keys.ConfigKeys.IKEY_ENABLE_COVERAGE, False):
-            coverage_utils.InitializeDeviceCoverage(self.dut)
-
-        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 tearDownClass(self):
-        """To be executed when all test cases are finished."""
-        if getattr(self, keys.ConfigKeys.IKEY_ENABLE_COVERAGE, False):
-            self.SetCoverageData(coverage_utils.GetGcdaDict(self.dut))
-
-    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/input/1.0/Android.bp b/tv/input/1.0/Android.bp
index 6bcb985..a71cdc5 100644
--- a/tv/input/1.0/Android.bp
+++ b/tv/input/1.0/Android.bp
@@ -130,84 +130,42 @@
 }
 
 genrule {
-    name: "android.hardware.tv.input@1.0-ITvInput-vts.profiler_genc++",
+    name: "android.hardware.tv.input@1.0-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",
+        "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/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",
+    name: "android.hardware.tv.input@1.0-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",
+        "ITvInput.hal",
+        "ITvInputCallback.hal",
     ],
     out: [
-        "android/hardware/tv/input/1.0/TvInputCallback.vts.h",
         "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@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"],
+    name: "android.hardware.tv.input@1.0-vts.profiler",
+    generated_sources: ["android.hardware.tv.input@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.tv.input@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.tv.input@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/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 1757bfe..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/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 := 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 828b9dd..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest.py
+++ /dev/null
@@ -1,62 +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 keys
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.coverage import coverage_utils
-
-
-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
-
-        if getattr(self, keys.ConfigKeys.IKEY_ENABLE_COVERAGE, False):
-            coverage_utils.InitializeDeviceCoverage(self.dut)
-
-        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 tearDownClass(self):
-        """To be executed when all test cases are finished."""
-        if getattr(self, keys.ConfigKeys.IKEY_ENABLE_COVERAGE, False):
-            self.SetCoverageData(coverage_utils.GetGcdaDict(self.dut))
-
-    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/functional/vts/testcases/hal/tv_input/hidl/target/Android.mk b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/target/Android.mk
deleted file mode 100644
index 153da0b..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/target/Android.mk
+++ /dev/null
@@ -1,26 +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 $(call all-subdir-makefiles)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := HalTvInputHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/tv_input/hidl/target
-include test/vts/tools/build/Android.host_config.mk
-
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/target/AndroidTest.xml b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/target/AndroidTest.xml
deleted file mode 100644
index 4f98940..0000000
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,30 +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 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="HalTvInputHidlTargetTest"/>
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/tv_input_hidl_hal_test/tv_input_hidl_hal_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="1m" />
-    </test>
-</configuration>
-
diff --git a/usb/1.0/Android.bp b/usb/1.0/Android.bp
index 8b84a4a..a23f46e 100644
--- a/usb/1.0/Android.bp
+++ b/usb/1.0/Android.bp
@@ -62,3 +62,114 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.usb.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.usb@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/usb/1.0/ $(genDir)/android/hardware/usb/1.0/",
+    srcs: [
+        "types.hal",
+        "IUsb.hal",
+        "IUsbCallback.hal",
+    ],
+    out: [
+        "android/hardware/usb/1.0/types.vts.cpp",
+        "android/hardware/usb/1.0/Usb.vts.cpp",
+        "android/hardware/usb/1.0/UsbCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.usb.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.usb@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/usb/1.0/ $(genDir)/android/hardware/usb/1.0/",
+    srcs: [
+        "types.hal",
+        "IUsb.hal",
+        "IUsbCallback.hal",
+    ],
+    out: [
+        "android/hardware/usb/1.0/types.vts.h",
+        "android/hardware/usb/1.0/Usb.vts.h",
+        "android/hardware/usb/1.0/UsbCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.usb.vts.driver@1.0",
+    generated_sources: ["android.hardware.usb.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.usb.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.usb.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.usb@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.usb@1.0-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.usb@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/usb/1.0/ $(genDir)/android/hardware/usb/1.0/",
+    srcs: [
+        "types.hal",
+        "IUsb.hal",
+        "IUsbCallback.hal",
+    ],
+    out: [
+        "android/hardware/usb/1.0/types.vts.cpp",
+        "android/hardware/usb/1.0/Usb.vts.cpp",
+        "android/hardware/usb/1.0/UsbCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.usb@1.0-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.usb@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/usb/1.0/ $(genDir)/android/hardware/usb/1.0/",
+    srcs: [
+        "types.hal",
+        "IUsb.hal",
+        "IUsbCallback.hal",
+    ],
+    out: [
+        "android/hardware/usb/1.0/types.vts.h",
+        "android/hardware/usb/1.0/Usb.vts.h",
+        "android/hardware/usb/1.0/UsbCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.usb@1.0-vts.profiler",
+    generated_sources: ["android.hardware.usb@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.usb@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.usb@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.usb@1.0",
+    ],
+}
diff --git a/vehicle/2.0/Android.bp b/vehicle/2.0/Android.bp
index 986fb74..dfc9d4d 100644
--- a/vehicle/2.0/Android.bp
+++ b/vehicle/2.0/Android.bp
@@ -126,83 +126,42 @@
 }
 
 genrule {
-    name: "android.hardware.vehicle@2.0-IVehicle-vts.profiler_genc++",
+    name: "android.hardware.vehicle@2.0-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",
+        "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/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",
+    name: "android.hardware.vehicle@2.0-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",
+        "IVehicle.hal",
+        "IVehicleCallback.hal",
     ],
     out: [
-        "android/hardware/vehicle/2.0/VehicleCallback.vts.h",
         "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@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"],
+    name: "android.hardware.vehicle@2.0-vts.profiler",
+    generated_sources: ["android.hardware.vehicle@2.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.vehicle@2.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.vehicle@2.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
diff --git a/vehicle/2.0/Android.mk b/vehicle/2.0/Android.mk
index 1dd0f45..1f7fd71 100644
--- a/vehicle/2.0/Android.mk
+++ b/vehicle/2.0/Android.mk
@@ -1081,6 +1081,44 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (VmsMessageIntegerValuesIndex)
+#
+GEN := $(intermediates)/android/hardware/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.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/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.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/vehicle/V2_0/Wheel.java
@@ -2224,6 +2262,44 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (VmsMessageIntegerValuesIndex)
+#
+GEN := $(intermediates)/android/hardware/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.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/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.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/vehicle/V2_0/Wheel.java
diff --git a/vehicle/2.0/IVehicle.hal b/vehicle/2.0/IVehicle.hal
index cab6ce0..dc13089 100644
--- a/vehicle/2.0/IVehicle.hal
+++ b/vehicle/2.0/IVehicle.hal
@@ -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/vehicle/2.0/IVehicleCallback.hal
index e7e05bf..eb626ff 100644
--- a/vehicle/2.0/IVehicleCallback.hal
+++ b/vehicle/2.0/IVehicleCallback.hal
@@ -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/vehicle/2.0/default/Android.mk b/vehicle/2.0/default/Android.mk
index 4a27eeb..9c75006 100644
--- a/vehicle/2.0/default/Android.mk
+++ b/vehicle/2.0/default/Android.mk
@@ -23,6 +23,7 @@
 LOCAL_MODULE := $(module_prefix)-manager-lib
 LOCAL_SRC_FILES := \
     vehicle_hal_manager/AccessControlConfigParser.cpp \
+    vehicle_hal_manager/Obd2SensorStore.cpp \
     vehicle_hal_manager/SubscriptionManager.cpp \
     vehicle_hal_manager/VehicleHalManager.cpp \
     vehicle_hal_manager/VehicleObjectPool.cpp \
@@ -71,6 +72,7 @@
 
 LOCAL_SRC_FILES:= \
     tests/AccessControlConfigParser_test.cpp \
+    tests/Obd2SensorStore_test.cpp \
     tests/SubscriptionManager_test.cpp \
     tests/VehicleHalManager_test.cpp \
     tests/VehicleObjectPool_test.cpp \
diff --git a/vehicle/2.0/default/VehicleHal.h b/vehicle/2.0/default/VehicleHal.h
index 2807f28..c882def 100644
--- a/vehicle/2.0/default/VehicleHal.h
+++ b/vehicle/2.0/default/VehicleHal.h
@@ -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);
     }
 
diff --git a/vehicle/2.0/default/impl/DefaultConfig.h b/vehicle/2.0/default/impl/DefaultConfig.h
index 12c1c1b..c74ddc0 100644
--- a/vehicle/2.0/default/impl/DefaultConfig.h
+++ b/vehicle/2.0/default/impl/DefaultConfig.h
@@ -29,20 +29,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 +51,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 +86,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 +114,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 +144,7 @@
     },
 
     {
-        .prop = VehicleProperty::DISPLAY_BRIGHTNESS,
+        .prop = toInt(VehicleProperty::DISPLAY_BRIGHTNESS),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .areaConfigs = {
@@ -156,21 +156,23 @@
     },
 
     {
-        .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}
     }
 };
 
diff --git a/vehicle/2.0/default/impl/DefaultVehicleHal.cpp b/vehicle/2.0/default/impl/DefaultVehicleHal.cpp
index 4541168..c90dbce 100644
--- a/vehicle/2.0/default/impl/DefaultVehicleHal.cpp
+++ b/vehicle/2.0/default/impl/DefaultVehicleHal.cpp
@@ -16,6 +16,8 @@
 
 #include "DefaultVehicleHal.h"
 
+#include <algorithm>
+
 #define LOG_TAG "default_vehicle"
 #include <android/log.h>
 
@@ -31,7 +33,7 @@
     *outStatus = StatusCode::OK;
 
     VehiclePropValuePtr v;
-    VehicleProperty property = requestedPropValue.prop;
+    auto property = static_cast<VehicleProperty>(requestedPropValue.prop);
     int32_t areaId = requestedPropValue.areaId;
     auto& pool = *getValuePool();
 
@@ -103,7 +105,7 @@
     }
 
     if (StatusCode::OK == *outStatus && v.get() != nullptr) {
-        v->prop = property;
+        v->prop = toInt(property);
         v->areaId = areaId;
         v->timestamp = elapsedRealtimeNano();
     }
@@ -112,7 +114,7 @@
 }
 
 StatusCode DefaultVehicleHal::set(const VehiclePropValue& propValue) {
-    auto property = propValue.prop;
+    auto property = static_cast<VehicleProperty>(propValue.prop);
     const auto& v = propValue.value;
 
     StatusCode status = StatusCode::OK;
@@ -153,6 +155,96 @@
     return status;
 }
 
+void DefaultVehicleHal::onCreate() {
+    const auto& propConfigs(listProperties());
+    auto obd2LiveFramePropConfig = std::find_if(
+        propConfigs.begin(),
+        propConfigs.end(),
+        [] (VehiclePropConfig config) -> bool {
+            return (config.prop == toInt(VehicleProperty::OBD2_LIVE_FRAME));
+        });
+    mObd2SensorStore.reset(new Obd2SensorStore(
+        obd2LiveFramePropConfig->configArray[0],
+        obd2LiveFramePropConfig->configArray[1]));
+    // precalculate OBD2 sensor values
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::FUEL_SYSTEM_STATUS,
+        toInt(FuelSystemStatus::CLOSED_LOOP));
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::MALFUNCTION_INDICATOR_LIGHT_ON, 0);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::IGNITION_MONITORS_SUPPORTED,
+        toInt(IgnitionMonitorKind::SPARK));
+    mObd2SensorStore->setIntegerSensor(Obd2IntegerSensorIndex::IGNITION_SPECIFIC_MONITORS,
+        CommonIgnitionMonitors::COMPONENTS_AVAILABLE |
+        CommonIgnitionMonitors::MISFIRE_AVAILABLE |
+        SparkIgnitionMonitors::AC_REFRIGERANT_AVAILABLE |
+        SparkIgnitionMonitors::EVAPORATIVE_SYSTEM_AVAILABLE);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::INTAKE_AIR_TEMPERATURE, 35);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::COMMANDED_SECONDARY_AIR_STATUS,
+        toInt(SecondaryAirStatus::FROM_OUTSIDE_OR_OFF));
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::NUM_OXYGEN_SENSORS_PRESENT, 1);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::RUNTIME_SINCE_ENGINE_START, 500);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON, 0);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::WARMUPS_SINCE_CODES_CLEARED, 51);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::DISTANCE_TRAVELED_SINCE_CODES_CLEARED, 365);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::ABSOLUTE_BAROMETRIC_PRESSURE, 30);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::CONTROL_MODULE_VOLTAGE, 12);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::AMBIENT_AIR_TEMPERATURE, 18);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::MAX_FUEL_AIR_EQUIVALENCE_RATIO, 1);
+    mObd2SensorStore->setIntegerSensor(
+        Obd2IntegerSensorIndex::FUEL_TYPE, toInt(FuelType::GASOLINE));
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::CALCULATED_ENGINE_LOAD, 0.153);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::SHORT_TERM_FUEL_TRIM_BANK1, -0.16);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::LONG_TERM_FUEL_TRIM_BANK1, -0.16);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::SHORT_TERM_FUEL_TRIM_BANK2, -0.16);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::LONG_TERM_FUEL_TRIM_BANK2, -0.16);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::INTAKE_MANIFOLD_ABSOLUTE_PRESSURE, 7.5);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::ENGINE_RPM, 1250.);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::VEHICLE_SPEED, 40.);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::TIMING_ADVANCE, 2.5);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::THROTTLE_POSITION, 19.75);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::OXYGEN_SENSOR1_VOLTAGE, 0.265);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::FUEL_TANK_LEVEL_INPUT, 0.824);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::EVAPORATION_SYSTEM_VAPOR_PRESSURE, -0.373);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::CATALYST_TEMPERATURE_BANK1_SENSOR1, 190.);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::RELATIVE_THROTTLE_POSITION, 3.);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::ABSOLUTE_THROTTLE_POSITION_B, 0.306);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::ACCELERATOR_PEDAL_POSITION_D, 0.188);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::ACCELERATOR_PEDAL_POSITION_E, 0.094);
+    mObd2SensorStore->setFloatSensor(
+        Obd2FloatSensorIndex::COMMANDED_THROTTLE_ACTUATOR, 0.024);
+}
+
 StatusCode DefaultVehicleHal::getHvacTemperature(int32_t areaId,
                                                  float* outValue)  {
     if (areaId == toInt(VehicleAreaZone::ROW_1_LEFT)) {
@@ -205,73 +297,17 @@
     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;
+    (*v)->value.int32Values = mObd2SensorStore->getIntegerSensors();
+    (*v)->value.floatValues = mObd2SensorStore->getFloatSensors();
+    (*v)->value.bytes = mObd2SensorStore->getSensorsBitmask();
     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.int32Values = mObd2SensorStore->getIntegerSensors();
+    (*v)->value.floatValues = mObd2SensorStore->getFloatSensors();
+    (*v)->value.bytes = mObd2SensorStore->getSensorsBitmask();
     (*v)->value.stringValue = "P0010";
     return StatusCode::OK;
 }
diff --git a/vehicle/2.0/default/impl/DefaultVehicleHal.h b/vehicle/2.0/default/impl/DefaultVehicleHal.h
index 15a4789..567ddf1 100644
--- a/vehicle/2.0/default/impl/DefaultVehicleHal.h
+++ b/vehicle/2.0/default/impl/DefaultVehicleHal.h
@@ -17,8 +17,11 @@
 #ifndef android_hardware_vehicle_V2_0_impl_DefaultVehicleHal_H_
 #define android_hardware_vehicle_V2_0_impl_DefaultVehicleHal_H_
 
+#include <memory>
+
 #include <VehicleHal.h>
 #include <impl/DefaultConfig.h>
+#include <vehicle_hal_manager/Obd2SensorStore.h>
 #include <utils/SystemClock.h>
 
 namespace android {
@@ -38,16 +41,18 @@
     VehiclePropValuePtr get(const VehiclePropValue& requestedPropValue,
                             StatusCode* outStatus) override;
 
+    void onCreate() override;
+
     StatusCode set(const VehiclePropValue& propValue) override;
 
-    StatusCode subscribe(VehicleProperty property,
-                       int32_t areas,
-                       float sampleRate) {
+    StatusCode subscribe(int32_t /*property*/,
+                         int32_t /*areas*/,
+                         float /*sampleRate*/) override {
         // TODO(pavelm): implement
         return StatusCode::OK;
     }
 
-    StatusCode unsubscribe(VehicleProperty property) {
+    StatusCode unsubscribe(int32_t /*property*/) override {
         // TODO(pavelm): implement
         return StatusCode::OK;
     }
@@ -57,8 +62,8 @@
     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);
+    StatusCode fillObd2LiveFrame(VehiclePropValuePtr* v);
+    StatusCode fillObd2FreezeFrame(VehiclePropValuePtr* v);
 private:
     int32_t mFanSpeed = 3;
     int32_t mBrightness = 7;
@@ -71,6 +76,7 @@
     bool mHvacAcOn = true;
     bool mHvacAutoOn = true;
     VehicleHvacFanDirection mFanDirection = VehicleHvacFanDirection::FACE;
+    std::unique_ptr<Obd2SensorStore> mObd2SensorStore{nullptr};
 };
 
 }  // impl
diff --git a/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp b/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
index 92d7e39..5b09135 100644
--- a/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
+++ b/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
@@ -20,6 +20,7 @@
 #include <unordered_set>
 
 #include "vehicle_hal_manager/AccessControlConfigParser.h"
+#include <vehicle_hal_manager/VehicleUtils.h>
 
 namespace android {
 namespace hardware {
@@ -31,9 +32,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));
     }
@@ -49,10 +50,10 @@
     ASSERT_TRUE(parser->parseFromStream(&file, &aclMap));
 
     ASSERT_EQ(1, 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);
 }
 
@@ -68,7 +69,7 @@
 
     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;
 
@@ -92,10 +93,10 @@
     ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
 
     ASSERT_EQ(1, 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, it->second.access);
-    ASSERT_EQ(VehicleProperty::HVAC_FAN_SPEED, it->second.propId);
+    ASSERT_EQ(toInt(VehicleProperty::HVAC_FAN_SPEED), it->second.propId);
     ASSERT_EQ(0xbeef, it->second.uid);
 }
 
@@ -127,16 +128,16 @@
     ASSERT_TRUE(parser->parseFromStream(&configFile2, &aclMap));
     ASSERT_EQ(2, 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);
 }
 
diff --git a/vehicle/2.0/default/tests/Obd2SensorStore_test.cpp b/vehicle/2.0/default/tests/Obd2SensorStore_test.cpp
new file mode 100644
index 0000000..6866454
--- /dev/null
+++ b/vehicle/2.0/default/tests/Obd2SensorStore_test.cpp
@@ -0,0 +1,283 @@
+/*
+ * 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 "vehicle_hal_manager/Obd2SensorStore.h"
+#include "vehicle_hal_manager/VehicleUtils.h"
+
+namespace android {
+namespace hardware {
+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 hardware
+}  // namespace android
diff --git a/vehicle/2.0/default/tests/SubscriptionManager_test.cpp b/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
index 863142e..1b12bfd 100644
--- a/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
+++ b/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
@@ -36,8 +36,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 +116,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());
diff --git a/vehicle/2.0/default/tests/VehicleHalManager_test.cpp b/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
index dc32252..c20ab7f 100644
--- a/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
+++ b/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
@@ -52,7 +52,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) {
@@ -76,7 +76,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 +84,7 @@
         }
 
         if (*outStatus == StatusCode::OK && pValue.get() != nullptr) {
-            pValue->prop = property;
+            pValue->prop = toInt(property);
             pValue->areaId = areaId;
             pValue->timestamp = elapsedRealtimeNano();
         }
@@ -93,7 +93,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 +102,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 +116,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 +129,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 +152,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 +173,7 @@
             called = true;
         });
         ASSERT_TRUE(called) << "callback wasn't called for prop: "
-                            << enumToHexString(requestedPropValue.prop);
+                            << hexString(requestedPropValue.prop);
 
         actualValue = refValue;
         actualStatusCode = refStatus;
@@ -190,8 +189,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 +205,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 +234,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 +252,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 +267,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 +293,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,10 +317,10 @@
 }
 
 TEST_F(VehicleHalManagerTest, get_Complex) {
-    invokeGet(VehicleProperty::VEHICLE_MAP_SERVICE, 0);
+    invokeGet(toInt(VehicleProperty::VEHICLE_MAP_SERVICE), 0);
 
     ASSERT_EQ(StatusCode::OK, actualStatusCode);
-    ASSERT_EQ(VehicleProperty::VEHICLE_MAP_SERVICE, actualValue.prop);
+    ASSERT_EQ(toInt(VehicleProperty::VEHICLE_MAP_SERVICE), actualValue.prop);
 
     ASSERT_EQ(3, actualValue.value.bytes.size());
     ASSERT_EQ(1, actualValue.value.bytes[0]);
@@ -343,20 +343,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 +364,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 +373,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 +390,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 +426,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;
diff --git a/vehicle/2.0/default/tests/VehicleHalTestUtils.h b/vehicle/2.0/default/tests/VehicleHalTestUtils.h
index 538c022..fab420a 100644
--- a/vehicle/2.0/default/tests/VehicleHalTestUtils.h
+++ b/vehicle/2.0/default/tests/VehicleHalTestUtils.h
@@ -29,14 +29,14 @@
 
 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 +56,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 +75,7 @@
     },
 
     {
-        .prop = VehicleProperty::INFO_FUEL_CAPACITY,
+        .prop = toInt(VehicleProperty::INFO_FUEL_CAPACITY),
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .areaConfigs = {
@@ -87,7 +87,7 @@
     },
 
     {
-        .prop = VehicleProperty::DISPLAY_BRIGHTNESS,
+        .prop = toInt(VehicleProperty::DISPLAY_BRIGHTNESS),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .areaConfigs = {
@@ -99,7 +99,7 @@
     },
 
     {
-        .prop = VehicleProperty::MIRROR_FOLD,
+        .prop = toInt(VehicleProperty::MIRROR_FOLD),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
 
@@ -107,7 +107,7 @@
 
     // Complex data type.
     {
-        .prop = VehicleProperty::VEHICLE_MAP_SERVICE,
+        .prop = toInt(VehicleProperty::VEHICLE_MAP_SERVICE),
         .access = VehiclePropertyAccess::READ_WRITE,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE
     }
@@ -134,7 +134,7 @@
         return Return<void>();
     }
     Return<void> onPropertySetError(StatusCode errorCode,
-                                    VehicleProperty propId,
+                                    int32_t propId,
                                     int32_t areaId) override {
         return Return<void>();
     }
@@ -218,7 +218,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 +236,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"
diff --git a/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp b/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
index 28cdcbb..4e1daf8 100644
--- a/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
+++ b/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
@@ -43,11 +43,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 +63,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));
 }
 
diff --git a/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.cpp b/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.cpp
index 063a16d..9cc994d 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.cpp
+++ b/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.cpp
@@ -17,6 +17,7 @@
 #define LOG_TAG "android.hardware.vehicle@2.0-impl"
 
 #include "AccessControlConfigParser.h"
+#include "VehicleUtils.h"
 
 #include <fstream>
 #include <iostream>
@@ -30,17 +31,17 @@
 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 +131,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());
diff --git a/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.h b/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.h
index 5cd0c3e..0c3753f 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.h
+++ b/vehicle/2.0/default/vehicle_hal_manager/AccessControlConfigParser.h
@@ -30,12 +30,12 @@
 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 +64,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 +81,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,7 +100,7 @@
     // 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
diff --git a/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.cpp b/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.cpp
new file mode 100644
index 0000000..7be2662
--- /dev/null
+++ b/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.cpp
@@ -0,0 +1,104 @@
+/*
+ * 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 <vehicle_hal_manager/VehicleUtils.h>
+
+namespace android {
+namespace hardware {
+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();
+}
+
+
+}  // namespace V2_0
+}  // namespace vehicle
+}  // namespace hardware
+}  // namespace android
diff --git a/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.h b/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.h
new file mode 100644
index 0000000..b18f5d4
--- /dev/null
+++ b/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.h
@@ -0,0 +1,80 @@
+/*
+ * 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_vehicle_V2_0_Obd2SensorStore_H_
+#define android_hardware_vehicle_V2_0_Obd2SensorStore_H_
+
+#include <vector>
+
+#include <VehicleHal.h>
+
+namespace android {
+namespace hardware {
+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;
+
+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 hardware
+}  // namespace android
+
+#endif  // android_hardware_vehicle_V2_0_Obd2SensorStore_H_
diff --git a/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.cpp b/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.cpp
index c190c71..72b0a83 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.cpp
+++ b/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.cpp
@@ -70,7 +70,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 +138,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 +182,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 +195,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 +216,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);
diff --git a/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.h b/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.h
index 9f2ed8d..7a74295 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.h
+++ b/vehicle/2.0/default/vehicle_hal_manager/SubscriptionManager.h
@@ -50,7 +50,7 @@
 
     void addOrUpdateSubscription(const SubscribeOptions &opts);
 
-    bool isSubscribed(VehicleProperty propId,
+    bool isSubscribed(int32_t propId,
                       int32_t areaId,
                       SubscribeFlags flags);
 
@@ -59,7 +59,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 +103,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,8 +133,8 @@
     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;
 };
 
 
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp b/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp
index 5d2e6fe..8b243a3 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp
+++ b/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp
@@ -58,11 +58,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 +125,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 +168,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 +200,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 +228,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 +309,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 +353,7 @@
 }
 
 const VehiclePropConfig* VehicleHalManager::getPropConfigOrNull(
-        VehicleProperty prop) const {
+        int32_t prop) const {
     return mConfigIndex->hasConfig(prop)
            ? &mConfigIndex->getConfig(prop) : nullptr;
 }
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h b/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h
index 6768741..49723da 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h
+++ b/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h
@@ -66,7 +66,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 +74,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 +85,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 +94,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,
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp b/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp
index e9dd68d..5fa77b1 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp
+++ b/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp
@@ -36,7 +36,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();
     }
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehiclePropConfigIndex.h b/vehicle/2.0/default/vehicle_hal_manager/VehiclePropConfigIndex.h
index 540fc33..a08ac42 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehiclePropConfigIndex.h
+++ b/vehicle/2.0/default/vehicle_hal_manager/VehiclePropConfigIndex.h
@@ -37,11 +37,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 +50,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) {
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.h b/vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.h
index 1177ddd..c24d860 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.h
+++ b/vehicle/2.0/default/vehicle_hal_manager/VehicleUtils.h
@@ -33,32 +33,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);
 }
 
diff --git a/vehicle/2.0/types.hal b/vehicle/2.0/types.hal
index 9fda4fd..6609e5b 100644
--- a/vehicle/2.0/types.hal
+++ b/vehicle/2.0/types.hal
@@ -1042,7 +1042,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.
@@ -1782,14 +1782,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
@@ -1807,17 +1823,33 @@
      * 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.
+     *
+     * 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
@@ -2488,7 +2520,8 @@
 };
 
 struct VehiclePropConfig {
-    VehicleProperty prop;
+    /* Property identifier */
+    int32_t prop;
 
     /*
      * Defines if the property is read or write or both.
@@ -2549,7 +2582,7 @@
  */
 struct VehiclePropValue {
     /* Property identifier */
-    VehicleProperty prop;
+    int32_t prop;
 
     /* Time is elapsed nanoseconds since boot */
     int64_t timestamp;
@@ -2669,7 +2702,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
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/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 2c32836..0000000
--- a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/VehicleHidlTest.py
+++ /dev/null
@@ -1,246 +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 keys
-from vts.runners.host import test_runner
-from vts.utils.python.controllers import android_device
-from vts.utils.python.profiling import profiling_utils
-from vts.utils.python.coverage import coverage_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)
-
-        if getattr(self, keys.ConfigKeys.IKEY_ENABLE_COVERAGE, False):
-            coverage_utils.InitializeDeviceCoverage(self.dut)
-
-        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()
-
-        if getattr(self, keys.ConfigKeys.IKEY_ENABLE_COVERAGE, False):
-            self.SetCoverageData(coverage_utils.GetGcdaDict(self.dut))
-
-    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 readVhalProperty(self, propertyId, areaId=0):
-        """Reads a specified property from Vehicle HAL.
-
-        Args:
-            propertyId: the numeric identifier of the property to be read.
-            areaId: the numeric identifier of the vehicle area to retrieve the
-                    property for. 0, or omitted, for global.
-
-        Returns:
-            the value of the property as read from Vehicle HAL, or None
-            if it could not read successfully.
-        """
-        vp_dict = {
-            'prop' : propertyId,
-            'timestamp' : 0,
-            'areaId' : areaId,
-            'value' : {
-                'int32Values' : [],
-                'floatValues' : [],
-                'int64Values' : [],
-                'bytes' : [],
-                'stringValue' : ""
-            }
-        }
-        vp = self.vtypes.Py2Pb("VehiclePropValue", vp_dict)
-        status, value = self.vehicle.get(vp)
-        if self.vtypes.OK == status:
-            return value
-        else:
-            logging.warning("attempt to read property %s returned error %d",
-                            propertyId, status)
-
-    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.
-        """
-        class CheckRead(object):
-            """This class wraps the logic of an actual property read.
-
-            Attributes:
-                testobject: the test case this object is used on behalf of.
-                propertyId: the identifier of the Vehiche HAL property to read.
-                name: the engineer-readable name of this test operation.
-            """
-
-            def __init__(self, testobject, propertyId, name):
-                self.testobject = testobject
-                self.propertyId = propertyId
-                self.name = name
-
-            def onReadSuccess(self, propValue):
-                """Override this to perform any post-read validation.
-
-                Args:
-                    propValue: the property value obtained from Vehicle HAL.
-                """
-                pass
-
-            def __call__(self):
-                """Reads the specified property and validates the result."""
-                propValue = self.testobject.readVhalProperty(self.propertyId)
-                asserts.assertNotEqual(propValue, None,
-                                       msg="reading %s should not return None" %
-                                       self.name)
-                logging.info("%s = %s", self.name, propValue)
-                self.onReadSuccess(propValue)
-                logging.info("%s pass" % self.name)
-
-        def checkLiveFrameRead():
-            """Validates reading the OBD2_LIVE_FRAME (if available)."""
-            checker = CheckRead(self,
-                                self.vtypes.OBD2_LIVE_FRAME,
-                                "OBD2_LIVE_FRAME")
-            checker()
-
-        def checkFreezeFrameRead():
-            """Validates reading the OBD2_FREEZE_FRAME (if available)."""
-            checker = CheckRead(self,
-                                self.vtypes.OBD2_FREEZE_FRAME,
-                                "OBD2_FREEZE_FRAME")
-            checker()
-
-        isLiveSupported, isFreezeSupported = self.getSupportInfo()
-        logging.info("isLiveSupported = %s, isFreezeSupported = %s",
-                     isLiveSupported, isFreezeSupported)
-        if isLiveSupported:
-            checkLiveFrameRead()
-        if isFreezeSupported:
-            checkFreezeFrameRead()
-
-    def createVehiclePropValue(self, propId):
-        value = {
-            "int32Values" : [],
-            "floatValues" : [],
-            "int64Values" : [],
-            "bytes": [],
-            "stringValue": ""
-        }
-        propValue = {
-            "prop": propId,
-            "timestamp": 0,
-            "areaId": 0,
-            "value": value
-        }
-        return self.vtypes.Py2Pb("VehiclePropValue", propValue)
-
-    def testDrivingStatus(self):
-        """Checks that DRIVING_STATUS property returns correct result."""
-        request = self.createVehiclePropValue(self.vtypes.DRIVING_STATUS)
-        logging.info("Driving status request: %s", request)
-        response = self.vehicle.get(request)
-        logging.info("Driving status response: %s", response)
-        status = response[0]
-        asserts.assertEqual(self.vtypes.OK, status)
-        propValue = response[1]
-        assertEqual(1, len(propValue.value.int32Values))
-        drivingStatus = propValue.value.int32Values[0]
-
-        allStatuses = (self.vtypes.UNRESTRICTED | self.vtypes.NO_VIDEO
-               | self.vtypes.NO_KEYBOARD_INPUT | self.vtypes.NO_VOICE_INPUT
-               | self.vtypes.NO_CONFIG | self.vtypes.LIMIT_MESSAGE_LEN)
-
-        assertEqual(allStatuses, allStatuses | drivingStatus)
-
-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/vibrator/1.0/Android.bp b/vibrator/1.0/Android.bp
index 497274b..e752d38 100644
--- a/vibrator/1.0/Android.bp
+++ b/vibrator/1.0/Android.bp
@@ -114,38 +114,38 @@
 }
 
 genrule {
-    name: "android.hardware.vibrator@1.0-IVibrator-vts.profiler_genc++",
+    name: "android.hardware.vibrator@1.0-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",
+        "IVibrator.hal",
     ],
     out: [
-        "android/hardware/vibrator/1.0/Vibrator.vts.cpp",
         "android/hardware/vibrator/1.0/types.vts.cpp",
+        "android/hardware/vibrator/1.0/Vibrator.vts.cpp",
     ],
 }
 
 genrule {
-    name: "android.hardware.vibrator@1.0-IVibrator-vts.profiler_genc++_headers",
+    name: "android.hardware.vibrator@1.0-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",
+        "IVibrator.hal",
     ],
     out: [
-        "android/hardware/vibrator/1.0/Vibrator.vts.h",
         "android/hardware/vibrator/1.0/types.vts.h",
+        "android/hardware/vibrator/1.0/Vibrator.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"],
+    name: "android.hardware.vibrator@1.0-vts.profiler",
+    generated_sources: ["android.hardware.vibrator@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.vibrator@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.vibrator@1.0-vts.profiler_genc++_headers"],
     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/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/vr/1.0/Android.bp b/vr/1.0/Android.bp
index f175610..f0644a1 100644
--- a/vr/1.0/Android.bp
+++ b/vr/1.0/Android.bp
@@ -106,7 +106,7 @@
 }
 
 genrule {
-    name: "android.hardware.vr@1.0-IVr-vts.profiler_genc++",
+    name: "android.hardware.vr@1.0-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: [
@@ -118,7 +118,7 @@
 }
 
 genrule {
-    name: "android.hardware.vr@1.0-IVr-vts.profiler_genc++_headers",
+    name: "android.hardware.vr@1.0-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: [
@@ -130,10 +130,10 @@
 }
 
 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"],
+    name: "android.hardware.vr@1.0-vts.profiler",
+    generated_sources: ["android.hardware.vr@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.vr@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.vr@1.0-vts.profiler_genc++_headers"],
     shared_libs: [
         "libbase",
         "libhidlbase",
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/functional/vr_hidl_hal_test.cpp b/vr/1.0/vts/functional/vr_hidl_hal_test.cpp
index 7e85337..29888fd 100644
--- a/vr/1.0/vts/functional/vr_hidl_hal_test.cpp
+++ b/vr/1.0/vts/functional/vr_hidl_hal_test.cpp
@@ -34,7 +34,6 @@
   void SetUp() override {
     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 8c7a9b7..0000000
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/AndroidTest.xml
+++ /dev/null
@@ -1,35 +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" />
-        <!-- Uncomment this and comment 'precondition-feature' to run this test
-             only on devices using binderized VR HALs.
-        <option name="precondition-hwbinder-service" value="android.hardware.vr" /> -->
-        <option name="precondition-feature" value="android.hardware.vr.high_performance" />
-        <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/1.0/Android.bp b/wifi/1.0/Android.bp
index 049d5d7..135cd2f 100644
--- a/wifi/1.0/Android.bp
+++ b/wifi/1.0/Android.bp
@@ -150,3 +150,202 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.wifi.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.wifi@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/wifi/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/wifi/1.0/types.vts.cpp",
+        "android/hardware/wifi/1.0/Wifi.vts.cpp",
+        "android/hardware/wifi/1.0/WifiApIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiChip.vts.cpp",
+        "android/hardware/wifi/1.0/WifiChipEventCallback.vts.cpp",
+        "android/hardware/wifi/1.0/WifiEventCallback.vts.cpp",
+        "android/hardware/wifi/1.0/WifiIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiNanIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiNanIfaceEventCallback.vts.cpp",
+        "android/hardware/wifi/1.0/WifiP2pIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiRttController.vts.cpp",
+        "android/hardware/wifi/1.0/WifiRttControllerEventCallback.vts.cpp",
+        "android/hardware/wifi/1.0/WifiStaIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiStaIfaceEventCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.wifi.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.wifi@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/wifi/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/wifi/1.0/types.vts.h",
+        "android/hardware/wifi/1.0/Wifi.vts.h",
+        "android/hardware/wifi/1.0/WifiApIface.vts.h",
+        "android/hardware/wifi/1.0/WifiChip.vts.h",
+        "android/hardware/wifi/1.0/WifiChipEventCallback.vts.h",
+        "android/hardware/wifi/1.0/WifiEventCallback.vts.h",
+        "android/hardware/wifi/1.0/WifiIface.vts.h",
+        "android/hardware/wifi/1.0/WifiNanIface.vts.h",
+        "android/hardware/wifi/1.0/WifiNanIfaceEventCallback.vts.h",
+        "android/hardware/wifi/1.0/WifiP2pIface.vts.h",
+        "android/hardware/wifi/1.0/WifiRttController.vts.h",
+        "android/hardware/wifi/1.0/WifiRttControllerEventCallback.vts.h",
+        "android/hardware/wifi/1.0/WifiStaIface.vts.h",
+        "android/hardware/wifi/1.0/WifiStaIfaceEventCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.wifi.vts.driver@1.0",
+    generated_sources: ["android.hardware.wifi.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.wifi.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.wifi.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.wifi@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.wifi@1.0-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.wifi@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/wifi/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/wifi/1.0/types.vts.cpp",
+        "android/hardware/wifi/1.0/Wifi.vts.cpp",
+        "android/hardware/wifi/1.0/WifiApIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiChip.vts.cpp",
+        "android/hardware/wifi/1.0/WifiChipEventCallback.vts.cpp",
+        "android/hardware/wifi/1.0/WifiEventCallback.vts.cpp",
+        "android/hardware/wifi/1.0/WifiIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiNanIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiNanIfaceEventCallback.vts.cpp",
+        "android/hardware/wifi/1.0/WifiP2pIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiRttController.vts.cpp",
+        "android/hardware/wifi/1.0/WifiRttControllerEventCallback.vts.cpp",
+        "android/hardware/wifi/1.0/WifiStaIface.vts.cpp",
+        "android/hardware/wifi/1.0/WifiStaIfaceEventCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.wifi@1.0-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.wifi@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/wifi/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/wifi/1.0/types.vts.h",
+        "android/hardware/wifi/1.0/Wifi.vts.h",
+        "android/hardware/wifi/1.0/WifiApIface.vts.h",
+        "android/hardware/wifi/1.0/WifiChip.vts.h",
+        "android/hardware/wifi/1.0/WifiChipEventCallback.vts.h",
+        "android/hardware/wifi/1.0/WifiEventCallback.vts.h",
+        "android/hardware/wifi/1.0/WifiIface.vts.h",
+        "android/hardware/wifi/1.0/WifiNanIface.vts.h",
+        "android/hardware/wifi/1.0/WifiNanIfaceEventCallback.vts.h",
+        "android/hardware/wifi/1.0/WifiP2pIface.vts.h",
+        "android/hardware/wifi/1.0/WifiRttController.vts.h",
+        "android/hardware/wifi/1.0/WifiRttControllerEventCallback.vts.h",
+        "android/hardware/wifi/1.0/WifiStaIface.vts.h",
+        "android/hardware/wifi/1.0/WifiStaIfaceEventCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.wifi@1.0-vts.profiler",
+    generated_sources: ["android.hardware.wifi@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.wifi@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.wifi@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.wifi@1.0",
+    ],
+}
diff --git a/wifi/1.0/IWifiStaIface.hal b/wifi/1.0/IWifiStaIface.hal
index 2c72ead..96dc54a 100644
--- a/wifi/1.0/IWifiStaIface.hal
+++ b/wifi/1.0/IWifiStaIface.hal
@@ -438,6 +438,19 @@
   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 started, monitoring must remain active until HAL is stopped or the
    *   chip is reconfigured.
diff --git a/wifi/1.0/default/wifi_legacy_hal.cpp b/wifi/1.0/default/wifi_legacy_hal.cpp
index e4eddcd..b0b0f96 100644
--- a/wifi/1.0/default/wifi_legacy_hal.cpp
+++ b/wifi/1.0/default/wifi_legacy_hal.cpp
@@ -685,6 +685,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(
diff --git a/wifi/1.0/default/wifi_legacy_hal.h b/wifi/1.0/default/wifi_legacy_hal.h
index 1ab74b7..dce4ed4 100644
--- a/wifi/1.0/default/wifi_legacy_hal.h
+++ b/wifi/1.0/default/wifi_legacy_hal.h
@@ -192,6 +192,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();
diff --git a/wifi/1.0/default/wifi_sta_iface.cpp b/wifi/1.0/default/wifi_sta_iface.cpp
index be2fe37..6cc41db 100644
--- a/wifi/1.0/default/wifi_sta_iface.cpp
+++ b/wifi/1.0/default/wifi_sta_iface.cpp
@@ -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,
@@ -553,6 +562,12 @@
   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();
diff --git a/wifi/1.0/default/wifi_sta_iface.h b/wifi/1.0/default/wifi_sta_iface.h
index ca79c5b..bc2d75f 100644
--- a/wifi/1.0/default/wifi_sta_iface.h
+++ b/wifi/1.0/default/wifi_sta_iface.h
@@ -95,6 +95,8 @@
       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> getDebugTxPacketFates(
@@ -140,6 +142,7 @@
       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();
   std::pair<WifiStatus, std::vector<WifiDebugTxPacketFateReport>>
   getDebugTxPacketFatesInternal();
diff --git a/wifi/1.0/vts/Android.mk b/wifi/1.0/vts/Android.mk
deleted file mode 100644
index d347136..0000000
--- a/wifi/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/wifi/hidl/Android.mk
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/vts/testcases/hal/wifi/__init__.py b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/__init__.py
+++ /dev/null
diff --git a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/Android.mk b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/Android.mk
deleted file mode 100644
index f9e3276..0000000
--- a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/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/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/__init__.py b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/__init__.py
+++ /dev/null
diff --git a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/Android.mk b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/Android.mk
deleted file mode 100644
index 40f154e..0000000
--- a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/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 := HalWifiHidlTargetTest
-VTS_CONFIG_SRC_DIR := testcases/hal/wifi/hidl/target
-include test/vts/tools/build/Android.host_config.mk
diff --git a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/AndroidTest.xml b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/AndroidTest.xml
deleted file mode 100644
index 1099a5a..0000000
--- a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/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 WiFi 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="HalWifiHidlTargetTest" />
-        <option name="binary-test-sources" value="
-            _32bit::DATA/nativetest/wifi_hidl_test/wifi_hidl_test,
-            _64bit::DATA/nativetest64/wifi_hidl_test/wifi_hidl_test,
-            "/>
-        <option name="binary-test-type" value="gtest" />
-        <option name="test-timeout" value="10m" />
-    </test>
-</configuration>
diff --git a/wifi/supplicant/1.0/Android.bp b/wifi/supplicant/1.0/Android.bp
index 261d940..565c3d2 100644
--- a/wifi/supplicant/1.0/Android.bp
+++ b/wifi/supplicant/1.0/Android.bp
@@ -142,3 +142,194 @@
         "android.hidl.base@1.0",
     ],
 }
+
+genrule {
+    name: "android.hardware.wifi.supplicant.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.wifi.supplicant@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/wifi/supplicant/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/wifi/supplicant/1.0/types.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/Supplicant.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantCallback.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantIface.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantNetwork.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pIface.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pIfaceCallback.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pNetwork.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pNetworkCallback.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaIface.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaIfaceCallback.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaNetwork.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaNetworkCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.wifi.supplicant.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.wifi.supplicant@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/wifi/supplicant/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/wifi/supplicant/1.0/types.vts.h",
+        "android/hardware/wifi/supplicant/1.0/Supplicant.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantCallback.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantIface.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantNetwork.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pIface.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pIfaceCallback.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pNetwork.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pNetworkCallback.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaIface.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaIfaceCallback.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaNetwork.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaNetworkCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.wifi.supplicant.vts.driver@1.0",
+    generated_sources: ["android.hardware.wifi.supplicant.vts.driver@1.0_genc++"],
+    generated_headers: ["android.hardware.wifi.supplicant.vts.driver@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.wifi.supplicant.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.wifi.supplicant@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
+
+genrule {
+    name: "android.hardware.wifi.supplicant@1.0-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.wifi.supplicant@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/wifi/supplicant/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/wifi/supplicant/1.0/types.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/Supplicant.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantCallback.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantIface.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantNetwork.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pIface.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pIfaceCallback.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pNetwork.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pNetworkCallback.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaIface.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaIfaceCallback.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaNetwork.vts.cpp",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaNetworkCallback.vts.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.wifi.supplicant@1.0-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.wifi.supplicant@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/wifi/supplicant/1.0/ $(genDir)/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",
+    ],
+    out: [
+        "android/hardware/wifi/supplicant/1.0/types.vts.h",
+        "android/hardware/wifi/supplicant/1.0/Supplicant.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantCallback.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantIface.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantNetwork.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pIface.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pIfaceCallback.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pNetwork.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantP2pNetworkCallback.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaIface.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaIfaceCallback.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaNetwork.vts.h",
+        "android/hardware/wifi/supplicant/1.0/SupplicantStaNetworkCallback.vts.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.wifi.supplicant@1.0-vts.profiler",
+    generated_sources: ["android.hardware.wifi.supplicant@1.0-vts.profiler_genc++"],
+    generated_headers: ["android.hardware.wifi.supplicant@1.0-vts.profiler_genc++_headers"],
+    export_generated_headers: ["android.hardware.wifi.supplicant@1.0-vts.profiler_genc++_headers"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libvts_profiling",
+        "libvts_multidevice_proto",
+        "libprotobuf-cpp-full",
+        "android.hidl.base@1.0",
+        "android.hardware.wifi.supplicant@1.0",
+    ],
+}