Merge "Enable the clang-format pre-submit hook" into oc-dev
diff --git a/audio/2.0/default/Device.cpp b/audio/2.0/default/Device.cpp
index 8a51cd7..5ced0bc 100644
--- a/audio/2.0/default/Device.cpp
+++ b/audio/2.0/default/Device.cpp
@@ -59,6 +59,14 @@
     }
 }
 
+void Device::closeInputStream(audio_stream_in_t* stream) {
+    mDevice->close_input_stream(mDevice, stream);
+}
+
+void Device::closeOutputStream(audio_stream_out_t* stream) {
+    mDevice->close_output_stream(mDevice, stream);
+}
+
 char* Device::halGetParameters(const char* keys) {
     return mDevice->get_parameters(mDevice, keys);
 }
@@ -160,7 +168,7 @@
     ALOGV("open_output_stream status %d stream %p", status, halStream);
     sp<IStreamOut> streamOut;
     if (status == OK) {
-        streamOut = new StreamOut(mDevice, halStream);
+        streamOut = new StreamOut(this, halStream);
     }
     AudioConfig suggestedConfig;
     HidlUtils::audioConfigFromHal(halConfig, &suggestedConfig);
@@ -196,7 +204,7 @@
     ALOGV("open_input_stream status %d stream %p", status, halStream);
     sp<IStreamIn> streamIn;
     if (status == OK) {
-        streamIn = new StreamIn(mDevice, halStream);
+        streamIn = new StreamIn(this, halStream);
     }
     AudioConfig suggestedConfig;
     HidlUtils::audioConfigFromHal(halConfig, &suggestedConfig);
diff --git a/audio/2.0/default/Device.h b/audio/2.0/default/Device.h
index 46177fc..7738361 100644
--- a/audio/2.0/default/Device.h
+++ b/audio/2.0/default/Device.h
@@ -98,6 +98,8 @@
 
     // Utility methods for extending interfaces.
     Result analyzeStatus(const char* funcName, int status);
+    void closeInputStream(audio_stream_in_t* stream);
+    void closeOutputStream(audio_stream_out_t* stream);
     audio_hw_device_t* device() const { return mDevice; }
 
   private:
diff --git a/audio/2.0/default/StreamIn.cpp b/audio/2.0/default/StreamIn.cpp
index b641e82..2745607 100644
--- a/audio/2.0/default/StreamIn.cpp
+++ b/audio/2.0/default/StreamIn.cpp
@@ -135,7 +135,7 @@
 
 }  // namespace
 
-StreamIn::StreamIn(audio_hw_device_t* device, audio_stream_in_t* stream)
+StreamIn::StreamIn(const sp<Device>& device, audio_stream_in_t* stream)
         : mIsClosed(false), mDevice(device), mStream(stream),
           mStreamCommon(new Stream(&stream->common)),
           mStreamMmap(new StreamMmap<audio_stream_in_t>(stream)),
@@ -154,9 +154,8 @@
         status_t status = EventFlag::deleteEventFlag(&mEfGroup);
         ALOGE_IF(status, "read MQ event flag deletion error: %s", strerror(-status));
     }
-    mDevice->close_input_stream(mDevice, mStream);
+    mDevice->closeInputStream(mStream);
     mStream = nullptr;
-    mDevice = nullptr;
 }
 
 // Methods from ::android::hardware::audio::V2_0::IStream follow.
diff --git a/audio/2.0/default/StreamIn.h b/audio/2.0/default/StreamIn.h
index b867387..950d68f 100644
--- a/audio/2.0/default/StreamIn.h
+++ b/audio/2.0/default/StreamIn.h
@@ -27,6 +27,7 @@
 #include <hidl/Status.h>
 #include <utils/Thread.h>
 
+#include "Device.h"
 #include "Stream.h"
 
 namespace android {
@@ -55,7 +56,7 @@
     typedef MessageQueue<uint8_t, kSynchronizedReadWrite> DataMQ;
     typedef MessageQueue<ReadStatus, kSynchronizedReadWrite> StatusMQ;
 
-    StreamIn(audio_hw_device_t* device, audio_stream_in_t* stream);
+    StreamIn(const sp<Device>& device, audio_stream_in_t* stream);
 
     // Methods from ::android::hardware::audio::V2_0::IStream follow.
     Return<uint64_t> getFrameSize()  override;
@@ -101,10 +102,10 @@
 
   private:
     bool mIsClosed;
-    audio_hw_device_t *mDevice;
+    const sp<Device> mDevice;
     audio_stream_in_t *mStream;
-    sp<Stream> mStreamCommon;
-    sp<StreamMmap<audio_stream_in_t>> mStreamMmap;
+    const sp<Stream> mStreamCommon;
+    const sp<StreamMmap<audio_stream_in_t>> mStreamMmap;
     std::unique_ptr<CommandMQ> mCommandMQ;
     std::unique_ptr<DataMQ> mDataMQ;
     std::unique_ptr<StatusMQ> mStatusMQ;
diff --git a/audio/2.0/default/StreamOut.cpp b/audio/2.0/default/StreamOut.cpp
index d820f3c..88045a0 100644
--- a/audio/2.0/default/StreamOut.cpp
+++ b/audio/2.0/default/StreamOut.cpp
@@ -135,7 +135,7 @@
 
 }  // namespace
 
-StreamOut::StreamOut(audio_hw_device_t* device, audio_stream_out_t* stream)
+StreamOut::StreamOut(const sp<Device>& device, audio_stream_out_t* stream)
         : mIsClosed(false), mDevice(device), mStream(stream),
           mStreamCommon(new Stream(&stream->common)),
           mStreamMmap(new StreamMmap<audio_stream_out_t>(stream)),
@@ -155,9 +155,8 @@
         ALOGE_IF(status, "write MQ event flag deletion error: %s", strerror(-status));
     }
     mCallback.clear();
-    mDevice->close_output_stream(mDevice, mStream);
+    mDevice->closeOutputStream(mStream);
     mStream = nullptr;
-    mDevice = nullptr;
 }
 
 // Methods from ::android::hardware::audio::V2_0::IStream follow.
diff --git a/audio/2.0/default/StreamOut.h b/audio/2.0/default/StreamOut.h
index bbe64a1..99352bc 100644
--- a/audio/2.0/default/StreamOut.h
+++ b/audio/2.0/default/StreamOut.h
@@ -27,6 +27,7 @@
 #include <fmq/MessageQueue.h>
 #include <utils/Thread.h>
 
+#include "Device.h"
 #include "Stream.h"
 
 namespace android {
@@ -57,7 +58,7 @@
     typedef MessageQueue<uint8_t, kSynchronizedReadWrite> DataMQ;
     typedef MessageQueue<WriteStatus, kSynchronizedReadWrite> StatusMQ;
 
-    StreamOut(audio_hw_device_t* device, audio_stream_out_t* stream);
+    StreamOut(const sp<Device>& device, audio_stream_out_t* stream);
 
     // Methods from ::android::hardware::audio::V2_0::IStream follow.
     Return<uint64_t> getFrameSize()  override;
@@ -112,10 +113,10 @@
 
   private:
     bool mIsClosed;
-    audio_hw_device_t *mDevice;
+    const sp<Device> mDevice;
     audio_stream_out_t *mStream;
-    sp<Stream> mStreamCommon;
-    sp<StreamMmap<audio_stream_out_t>> mStreamMmap;
+    const sp<Stream> mStreamCommon;
+    const sp<StreamMmap<audio_stream_out_t>> mStreamMmap;
     sp<IStreamOutCallback> mCallback;
     std::unique_ptr<CommandMQ> mCommandMQ;
     std::unique_ptr<DataMQ> mDataMQ;
diff --git a/automotive/Android.bp b/automotive/Android.bp
index 9b24ded..aec8865 100644
--- a/automotive/Android.bp
+++ b/automotive/Android.bp
@@ -2,6 +2,7 @@
 subdirs = [
     "evs/1.0",
     "evs/1.0/default",
+    "evs/1.0/vts/functional",
     "vehicle/2.0",
     "vehicle/2.1",
 ]
diff --git a/automotive/evs/1.0/IEvsCamera.hal b/automotive/evs/1.0/IEvsCamera.hal
index 1b55d1f..dbcaf92 100644
--- a/automotive/evs/1.0/IEvsCamera.hal
+++ b/automotive/evs/1.0/IEvsCamera.hal
@@ -28,10 +28,10 @@
     /**
      * Returns the ID of this camera.
      *
-     * Returns the string id of this camera. This must be the same value as reported in
-     * the camera_id field of the CameraDesc structure by EvsEnumerator::getCamerList().
+     * Returns the description of this camera. This must be the same value as reported
+     * by EvsEnumerator::getCamerList().
      */
-    getId() generates (string cameraId);
+    getCameraInfo() generates (CameraDesc info);
 
     /**
      * Specifies the depth of the buffer chain the camera is asked to support.
diff --git a/automotive/evs/1.0/IEvsDisplay.hal b/automotive/evs/1.0/IEvsDisplay.hal
index bbad428..12541f3 100644
--- a/automotive/evs/1.0/IEvsDisplay.hal
+++ b/automotive/evs/1.0/IEvsDisplay.hal
@@ -27,7 +27,7 @@
     /**
      * Returns basic information about the EVS display provided by the system.
      *
-     * See the description of the DisplayDesc structure below for details.
+     * See the description of the DisplayDesc structure for details.
      */
      getDisplayInfo() generates (DisplayDesc info);
 
diff --git a/automotive/evs/1.0/IEvsEnumerator.hal b/automotive/evs/1.0/IEvsEnumerator.hal
index 334430b..98d117a 100644
--- a/automotive/evs/1.0/IEvsEnumerator.hal
+++ b/automotive/evs/1.0/IEvsEnumerator.hal
@@ -31,14 +31,14 @@
      */
     getCameraList() generates (vec<CameraDesc> cameras);
 
-
     /**
      * Get the IEvsCamera associated with a cameraId from a CameraDesc
      *
      * Given a camera's unique cameraId from ca CameraDesc, returns
-     * the ICamera interface assocaited with the specified camera.
-     * When done using the camera, it must be returned by calling
-     * closeCamera on the ICamera interface.
+     * the ICamera interface associated with the specified camera.
+     * When done using the camera, the caller may release it by calling closeCamera().
+     * TODO(b/36122635) Reliance on the sp<> going out of scope is not recommended because the
+     * resources may not be released right away due to asynchronos behavior in the hardware binder.
      */
     openCamera(string cameraId) generates (IEvsCamera carCamera);
 
@@ -57,6 +57,9 @@
      * There can be at most one EVS display object for the system and this function
      * requests access to it. If the EVS display is not available or is already in use,
      * a null pointer is returned.
+     * When done using the display, the caller may release it by calling closeDisplay().
+     * TODO(b/36122635) Reliance on the sp<> going out of scope is not recommended because the
+     * resources may not be released right away due to asynchronos behavior in the hardware binder.
      */
     openDisplay() generates (IEvsDisplay display);
 
@@ -64,7 +67,7 @@
      * Return the specified IEvsDisplay interface as no longer in use
      *
      * When the IEvsDisplay object is no longer required, it must be released.
-     * NOTE: All buffer must have been returned to the display before making this call.
+     * NOTE: All buffers must have been returned to the display before making this call.
      */
     closeDisplay(IEvsDisplay display);
 
diff --git a/automotive/evs/1.0/default/Android.bp b/automotive/evs/1.0/default/Android.bp
index 8b214e3..2574e86 100644
--- a/automotive/evs/1.0/default/Android.bp
+++ b/automotive/evs/1.0/default/Android.bp
@@ -23,4 +23,9 @@
         "liblog",
         "libutils",
     ],
+
+    cflags: [
+        "-O0",
+        "-g",
+    ],
 }
diff --git a/automotive/evs/1.0/default/EvsCamera.cpp b/automotive/evs/1.0/default/EvsCamera.cpp
index c4436ee..148b796 100644
--- a/automotive/evs/1.0/default/EvsCamera.cpp
+++ b/automotive/evs/1.0/default/EvsCamera.cpp
@@ -17,6 +17,7 @@
 #define LOG_TAG "android.hardware.automotive.evs@1.0-service"
 
 #include "EvsCamera.h"
+#include "EvsEnumerator.h"
 
 #include <ui/GraphicBufferAllocator.h>
 #include <ui/GraphicBufferMapper.h>
@@ -30,18 +31,15 @@
 namespace implementation {
 
 
-// These are the special camera names for which we'll initialize custom test data
+// Special camera names for which we'll initialize alternate test data
 const char EvsCamera::kCameraName_Backup[]    = "backup";
-const char EvsCamera::kCameraName_RightTurn[] = "Right Turn";
+
 
 // Arbitrary limit on number of graphics buffers allowed to be allocated
 // Safeguards against unreasonable resource consumption and provides a testable limit
 const unsigned MAX_BUFFERS_IN_FLIGHT = 100;
 
 
-// TODO(b/31632518):  Need to get notification when our client dies so we can close the camera.
-// As it stands, if the client dies suddenly, the buffer may be stranded.
-
 EvsCamera::EvsCamera(const char *id) :
         mFramesAllowed(0),
         mFramesInUse(0),
@@ -53,22 +51,14 @@
 
     // Set up dummy data for testing
     if (mDescription.cameraId == kCameraName_Backup) {
-        mDescription.hints                  = static_cast<uint32_t>(UsageHint::USAGE_HINT_REVERSE);
-        mDescription.vendorFlags            = 0xFFFFFFFF;   // Arbitrary value
-        mDescription.defaultHorResolution   = 320;          // 1/2 NTSC/VGA
-        mDescription.defaultVerResolution   = 240;          // 1/2 NTSC/VGA
-    } else if (mDescription.cameraId == kCameraName_RightTurn) {
-        // Nothing but the name and the usage hint
-        mDescription.hints                  = static_cast<uint32_t>(UsageHint::USAGE_HINT_RIGHT_TURN);
+        mWidth  = 640;          // full NTSC/VGA
+        mHeight = 480;          // full NTSC/VGA
+        mDescription.vendorFlags = 0xFFFFFFFF;   // Arbitrary value
     } else {
-        // Leave empty for a minimalist camera description without even a hint
+        mWidth  = 320;          // 1/2 NTSC/VGA
+        mHeight = 240;          // 1/2 NTSC/VGA
     }
 
-
-    // Set our buffer properties
-    mWidth  = (mDescription.defaultHorResolution) ? mDescription.defaultHorResolution : 640;
-    mHeight = (mDescription.defaultVerResolution) ? mDescription.defaultVerResolution : 480;
-
     mFormat = HAL_PIXEL_FORMAT_RGBA_8888;
     mUsage  = GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_CAMERA_WRITE |
               GRALLOC_USAGE_SW_READ_RARELY | GRALLOC_USAGE_SW_WRITE_RARELY;
@@ -77,32 +67,49 @@
 
 EvsCamera::~EvsCamera() {
     ALOGD("EvsCamera being destroyed");
-    std::lock_guard<std::mutex> lock(mAccessLock);
+    forceShutdown();
+}
+
+
+//
+// This gets called if another caller "steals" ownership of the camera
+//
+void EvsCamera::forceShutdown()
+{
+    ALOGD("EvsCamera forceShutdown");
 
     // Make sure our output stream is cleaned up
     // (It really should be already)
     stopVideoStream();
 
+    // Claim the lock while we work on internal state
+    std::lock_guard <std::mutex> lock(mAccessLock);
+
     // Drop all the graphics buffers we've been using
-    GraphicBufferAllocator& alloc(GraphicBufferAllocator::get());
-    for (auto&& rec : mBuffers) {
-        if (rec.inUse) {
-            ALOGE("Error - releasing buffer despite remote ownership");
+    if (mBuffers.size() > 0) {
+        GraphicBufferAllocator& alloc(GraphicBufferAllocator::get());
+        for (auto&& rec : mBuffers) {
+            if (rec.inUse) {
+                ALOGE("Error - releasing buffer despite remote ownership");
+            }
+            alloc.free(rec.handle);
+            rec.handle = nullptr;
         }
-        alloc.free(rec.handle);
-        rec.handle = nullptr;
+        mBuffers.clear();
     }
 
-    ALOGD("EvsCamera destroyed");
+    // Put this object into an unrecoverable error state since somebody else
+    // is going to own the underlying camera now
+    mStreamState = DEAD;
 }
 
 
 // Methods from ::android::hardware::automotive::evs::V1_0::IEvsCamera follow.
-Return<void> EvsCamera::getId(getId_cb id_cb) {
-    ALOGD("getId");
+Return<void> EvsCamera::getCameraInfo(getCameraInfo_cb _hidl_cb) {
+    ALOGD("getCameraInfo");
 
-    id_cb(mDescription.cameraId);
-
+    // Send back our self description
+    _hidl_cb(mDescription);
     return Void();
 }
 
@@ -111,6 +118,12 @@
     ALOGD("setMaxFramesInFlight");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
+    // If we've been displaced by another owner of the camera, then we can't do anything else
+    if (mStreamState == DEAD) {
+        ALOGE("ignoring setMaxFramesInFlight call when camera has been lost.");
+        return EvsResult::OWNERSHIP_LOST;
+    }
+
     // We cannot function without at least one video buffer to send data
     if (bufferCount < 1) {
         ALOGE("Ignoring setMaxFramesInFlight with less than one buffer requested");
@@ -130,6 +143,11 @@
     ALOGD("startVideoStream");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
+    // If we've been displaced by another owner of the camera, then we can't do anything else
+    if (mStreamState == DEAD) {
+        ALOGE("ignoring startVideoStream call when camera has been lost.");
+        return EvsResult::OWNERSHIP_LOST;
+    }
     if (mStreamState != STOPPED) {
         ALOGE("ignoring startVideoStream call when a stream is already running.");
         return EvsResult::STREAM_ALREADY_RUNNING;
@@ -207,6 +225,7 @@
         lock.lock();
 
         mStreamState = STOPPED;
+        mStream = nullptr;
         ALOGD("Stream marked STOPPED.");
     }
 
@@ -232,6 +251,12 @@
     ALOGD("setExtendedInfo");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
+    // If we've been displaced by another owner of the camera, then we can't do anything else
+    if (mStreamState == DEAD) {
+        ALOGE("ignoring setExtendedInfo call when camera has been lost.");
+        return EvsResult::OWNERSHIP_LOST;
+    }
+
     // We don't store any device specific information in this implementation
     return EvsResult::INVALID_ARG;
 }
@@ -358,7 +383,9 @@
 
     while (true) {
         bool timeForFrame = false;
-        // Lock scope
+        nsecs_t startTime = systemTime(SYSTEM_TIME_MONOTONIC);
+
+        // Lock scope for updating shared state
         {
             std::lock_guard<std::mutex> lock(mAccessLock);
 
@@ -427,8 +454,15 @@
             }
         }
 
-        // We arbitrarily choose to generate frames at 10 fps (1/10 * uSecPerSec)
-        usleep(100000);
+        // We arbitrarily choose to generate frames at 12 fps to ensure we pass the 10fps test requirement
+        static const int kTargetFrameRate = 12;
+        static const nsecs_t kTargetFrameTimeUs = 1000*1000 / kTargetFrameRate;
+        const nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
+        const nsecs_t workTimeUs = (now - startTime) / 1000;
+        const nsecs_t sleepDurationUs = kTargetFrameTimeUs - workTimeUs;
+        if (sleepDurationUs > 0) {
+            usleep(sleepDurationUs);
+        }
     }
 
     // If we've been asked to stop, send one last NULL frame to signal the actual end of stream
diff --git a/automotive/evs/1.0/default/EvsCamera.h b/automotive/evs/1.0/default/EvsCamera.h
index ee91ca4..ff6eb39 100644
--- a/automotive/evs/1.0/default/EvsCamera.h
+++ b/automotive/evs/1.0/default/EvsCamera.h
@@ -32,54 +32,50 @@
 namespace implementation {
 
 
+// From EvsEnumerator.h
+class EvsEnumerator;
+
+
 class EvsCamera : public IEvsCamera {
 public:
     // Methods from ::android::hardware::automotive::evs::V1_0::IEvsCamera follow.
-    Return<void> getId(getId_cb id_cb) override;
-
+    Return<void> getCameraInfo(getCameraInfo_cb _hidl_cb)  override;
     Return <EvsResult> setMaxFramesInFlight(uint32_t bufferCount) override;
-
     Return <EvsResult> startVideoStream(const ::android::sp<IEvsCameraStream>& stream) override;
-
     Return<void> doneWithFrame(const BufferDesc& buffer) override;
-
     Return<void> stopVideoStream() override;
-
     Return <int32_t> getExtendedInfo(uint32_t opaqueIdentifier) override;
-
     Return <EvsResult> setExtendedInfo(uint32_t opaqueIdentifier, int32_t opaqueValue) override;
 
     // Implementation details
-    EvsCamera(const char* id);
-
+    EvsCamera(const char *id);
     virtual ~EvsCamera() override;
+    void forceShutdown();   // This gets called if another caller "steals" ownership of the camera
 
     const CameraDesc& getDesc() { return mDescription; };
 
     static const char kCameraName_Backup[];
-    static const char kCameraName_RightTurn[];
 
 private:
     // These three functions are expected to be called while mAccessLock is held
     bool setAvailableFrames_Locked(unsigned bufferCount);
-
     unsigned increaseAvailableFrames_Locked(unsigned numToAdd);
-
     unsigned decreaseAvailableFrames_Locked(unsigned numToRemove);
 
     void generateFrames();
-
     void fillTestFrame(const BufferDesc& buff);
 
-    CameraDesc mDescription = {};  // The properties of this camera
+    sp<EvsEnumerator> mEnumerator;  // The enumerator object that created this camera
+
+    CameraDesc mDescription = {};   // The properties of this camera
 
     std::thread mCaptureThread;     // The thread we'll use to synthesize frames
 
-    uint32_t mWidth = 0;        // Horizontal pixel count in the buffers
-    uint32_t mHeight = 0;        // Vertical pixel count in the buffers
-    uint32_t mFormat = 0;        // Values from android_pixel_format_t [TODO: YUV?  Leave opaque?]
-    uint32_t mUsage = 0;        // Values from from Gralloc.h
-    uint32_t mStride = 0;        // Bytes per line in the buffers
+    uint32_t mWidth  = 0;       // Horizontal pixel count in the buffers
+    uint32_t mHeight = 0;       // Vertical pixel count in the buffers
+    uint32_t mFormat = 0;       // Values from android_pixel_format_t [TODO: YUV?  Leave opaque?]
+    uint32_t mUsage  = 0;       // Values from from Gralloc.h
+    uint32_t mStride = 0;       // Bytes per line in the buffers
 
     sp <IEvsCameraStream> mStream = nullptr;  // The callback used to deliver each frame
 
@@ -98,10 +94,11 @@
         STOPPED,
         RUNNING,
         STOPPING,
+        DEAD,
     };
     StreamStateValues mStreamState;
 
-    // Syncrhonization necessary to deconflict mCaptureThread from the main service thread
+    // Synchronization necessary to deconflict mCaptureThread from the main service thread
     std::mutex mAccessLock;
 };
 
diff --git a/automotive/evs/1.0/default/EvsDisplay.cpp b/automotive/evs/1.0/default/EvsDisplay.cpp
index a1a76d0..9ad332a 100644
--- a/automotive/evs/1.0/default/EvsDisplay.cpp
+++ b/automotive/evs/1.0/default/EvsDisplay.cpp
@@ -30,12 +30,6 @@
 namespace implementation {
 
 
-// TODO(b/31632518):  Need to get notification when our client dies so we can close the camera.
-// As it stands, if the client dies suddently, the buffer may be stranded.
-// As possible work around would be to give the client a HIDL object to exclusively hold
-// and use it's destructor to perform some work in the server side.
-
-
 EvsDisplay::EvsDisplay() {
     ALOGD("EvsDisplay instantiated");
 
@@ -43,34 +37,55 @@
     // NOTE:  These are arbitrary values chosen for testing
     mInfo.displayId             = "Mock Display";
     mInfo.vendorFlags           = 3870;
-    mInfo.defaultHorResolution  = 320;
-    mInfo.defaultVerResolution  = 240;
+
+    // Assemble the buffer description we'll use for our render target
+    mBuffer.width       = 320;
+    mBuffer.height      = 240;
+    mBuffer.format      = HAL_PIXEL_FORMAT_RGBA_8888;
+    mBuffer.usage       = GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER;
+    mBuffer.bufferId    = 0x3870;  // Arbitrary magic number for self recognition
+    mBuffer.pixelSize   = 4;
 }
 
 
 EvsDisplay::~EvsDisplay() {
     ALOGD("EvsDisplay being destroyed");
+    forceShutdown();
+}
+
+
+/**
+ * This gets called if another caller "steals" ownership of the display
+ */
+void EvsDisplay::forceShutdown()
+{
+    ALOGD("EvsDisplay forceShutdown");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
-    // Report if we're going away while a buffer is outstanding
-    if (mFrameBusy) {
-        ALOGE("EvsDisplay going down while client is holding a buffer");
-    }
-
-    // Make sure we release our frame buffer
+    // If the buffer isn't being held by a remote client, release it now as an
+    // optimization to release the resources more quickly than the destructor might
+    // get called.
     if (mBuffer.memHandle) {
+        // Report if we're going away while a buffer is outstanding
+        if (mFrameBusy) {
+            ALOGE("EvsDisplay going down while client is holding a buffer");
+        }
+
         // Drop the graphics buffer we've been using
         GraphicBufferAllocator& alloc(GraphicBufferAllocator::get());
         alloc.free(mBuffer.memHandle);
         mBuffer.memHandle = nullptr;
     }
-    ALOGD("EvsDisplay destroyed");
+
+    // Put this object into an unrecoverable error state since somebody else
+    // is going to own the display now.
+    mRequestedState = DisplayState::DEAD;
 }
 
 
 /**
  * Returns basic information about the EVS display provided by the system.
- * See the description of the DisplayDesc structure below for details.
+ * See the description of the DisplayDesc structure for details.
  */
 Return<void> EvsDisplay::getDisplayInfo(getDisplayInfo_cb _hidl_cb)  {
     ALOGD("getDisplayInfo");
@@ -94,6 +109,11 @@
     ALOGD("setDisplayState");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
+    if (mRequestedState == DisplayState::DEAD) {
+        // This object no longer owns the display -- it's been superceeded!
+        return EvsResult::OWNERSHIP_LOST;
+    }
+
     // Ensure we recognize the requested state so we don't go off the rails
     if (state < DisplayState::NUM_STATES) {
         // Record the requested state
@@ -119,10 +139,7 @@
     ALOGD("getDisplayState");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
-    // At the moment, we treat the requested state as immediately active
-    DisplayState currentState = mRequestedState;
-
-    return currentState;
+    return mRequestedState;
 }
 
 
@@ -137,15 +154,16 @@
     ALOGD("getTargetBuffer");
     std::lock_guard<std::mutex> lock(mAccessLock);
 
+    if (mRequestedState == DisplayState::DEAD) {
+        ALOGE("Rejecting buffer request from object that lost ownership of the display.");
+        BufferDesc nullBuff = {};
+        _hidl_cb(nullBuff);
+        return Void();
+    }
+
     // If we don't already have a buffer, allocate one now
     if (!mBuffer.memHandle) {
-        // Assemble the buffer description we'll use for our render target
-        mBuffer.width       = mInfo.defaultHorResolution;
-        mBuffer.height      = mInfo.defaultVerResolution;
-        mBuffer.format      = HAL_PIXEL_FORMAT_RGBA_8888;
-        mBuffer.usage       = GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER;
-        mBuffer.bufferId    = 0x3870;  // Arbitrary magic number for self recognition
-
+        // Allocate the buffer that will hold our displayable image
         buffer_handle_t handle = nullptr;
         GraphicBufferAllocator& alloc(GraphicBufferAllocator::get());
         status_t result = alloc.allocate(mBuffer.width, mBuffer.height,
@@ -220,6 +238,11 @@
 
     mFrameBusy = false;
 
+    // If we've been displaced by another owner of the display, then we can't do anything else
+    if (mRequestedState == DisplayState::DEAD) {
+        return EvsResult::OWNERSHIP_LOST;
+    }
+
     // If we were waiting for a new frame, this is it!
     if (mRequestedState == DisplayState::VISIBLE_ON_NEXT_FRAME) {
         mRequestedState = DisplayState::VISIBLE;
@@ -248,8 +271,8 @@
 
         // Check the test pixels
         bool frameLooksGood = true;
-        for (unsigned row = 0; row < mInfo.defaultVerResolution; row++) {
-            for (unsigned col = 0; col < mInfo.defaultHorResolution; col++) {
+        for (unsigned row = 0; row < mBuffer.height; row++) {
+            for (unsigned col = 0; col < mBuffer.width; col++) {
                 // Index into the row to check the pixel at this column.
                 // We expect 0xFF in the LSB channel, a vertical gradient in the
                 // second channel, a horitzontal gradient in the third channel, and
diff --git a/automotive/evs/1.0/default/EvsDisplay.h b/automotive/evs/1.0/default/EvsDisplay.h
index fcf4a06..ebd6446 100644
--- a/automotive/evs/1.0/default/EvsDisplay.h
+++ b/automotive/evs/1.0/default/EvsDisplay.h
@@ -27,6 +27,7 @@
 namespace V1_0 {
 namespace implementation {
 
+
 class EvsDisplay : public IEvsDisplay {
 public:
     // Methods from ::android::hardware::automotive::evs::V1_0::IEvsDisplay follow.
@@ -40,6 +41,8 @@
     EvsDisplay();
     virtual ~EvsDisplay() override;
 
+    void forceShutdown();   // This gets called if another caller "steals" ownership of the display
+
 private:
     DisplayDesc     mInfo           = {};
     BufferDesc      mBuffer         = {};       // A graphics buffer into which we'll store images
diff --git a/automotive/evs/1.0/default/EvsEnumerator.cpp b/automotive/evs/1.0/default/EvsEnumerator.cpp
index e54f699..731e21b 100644
--- a/automotive/evs/1.0/default/EvsEnumerator.cpp
+++ b/automotive/evs/1.0/default/EvsEnumerator.cpp
@@ -28,33 +28,36 @@
 namespace implementation {
 
 
-// TODO(b/31632518):  Need to get notification when our client dies so we can close the camera.
-// As it stands, if the client dies suddenly, the camera will be stuck "open".
-// NOTE:  Display should already be safe by virtue of holding only a weak pointer.
+// NOTE:  All members values are static so that all clients operate on the same state
+//        That is to say, this is effectively a singleton despite the fact that HIDL
+//        constructs a new instance for each client.
+std::list<EvsEnumerator::CameraRecord>   EvsEnumerator::sCameraList;
+wp<EvsDisplay>                           EvsEnumerator::sActiveDisplay;
 
 
 EvsEnumerator::EvsEnumerator() {
     ALOGD("EvsEnumerator created");
 
     // Add sample camera data to our list of cameras
-    // NOTE:  The id strings trigger special initialization inside the EvsCamera constructor
-    mCameraList.emplace_back( new EvsCamera(EvsCamera::kCameraName_Backup),    false );
-    mCameraList.emplace_back( new EvsCamera("LaneView"),                       false );
-    mCameraList.emplace_back( new EvsCamera(EvsCamera::kCameraName_RightTurn), false );
+    // In a real driver, this would be expected to can the available hardware
+    sCameraList.emplace_back(EvsCamera::kCameraName_Backup);
+    sCameraList.emplace_back("LaneView");
+    sCameraList.emplace_back("right turn");
 }
 
+
 // Methods from ::android::hardware::automotive::evs::V1_0::IEvsEnumerator follow.
 Return<void> EvsEnumerator::getCameraList(getCameraList_cb _hidl_cb)  {
     ALOGD("getCameraList");
 
-    const unsigned numCameras = mCameraList.size();
+    const unsigned numCameras = sCameraList.size();
 
     // Build up a packed array of CameraDesc for return
     // NOTE:  Only has to live until the callback returns
     std::vector<CameraDesc> descriptions;
     descriptions.reserve(numCameras);
-    for (const auto& cam : mCameraList) {
-        descriptions.push_back( cam.pCamera->getDesc() );
+    for (const auto& cam : sCameraList) {
+        descriptions.push_back( cam.desc );
     }
 
     // Encapsulate our camera descriptions in the HIDL vec type
@@ -68,97 +71,137 @@
     return Void();
 }
 
+
 Return<sp<IEvsCamera>> EvsEnumerator::openCamera(const hidl_string& cameraId) {
     ALOGD("openCamera");
 
     // Find the named camera
     CameraRecord *pRecord = nullptr;
-    for (auto &&cam : mCameraList) {
-        if (cam.pCamera->getDesc().cameraId == cameraId) {
+    for (auto &&cam : sCameraList) {
+        if (cam.desc.cameraId == cameraId) {
             // Found a match!
             pRecord = &cam;
             break;
         }
     }
 
+    // Is this a recognized camera id?
     if (!pRecord) {
         ALOGE("Requested camera %s not found", cameraId.c_str());
         return nullptr;
-    } else if (pRecord->inUse) {
-        ALOGE("Cannot open camera %s which is already in use", cameraId.c_str());
-        return nullptr;
-    } else {
-        pRecord->inUse = true;
-        return(pRecord->pCamera);
     }
+
+    // Has this camera already been instantiated by another caller?
+    sp<EvsCamera> pActiveCamera = pRecord->activeInstance.promote();
+    if (pActiveCamera != nullptr) {
+        ALOGW("Killing previous camera because of new caller");
+        closeCamera(pActiveCamera);
+    }
+
+    // Construct a camera instance for the caller
+    pActiveCamera = new EvsCamera(cameraId);
+    pRecord->activeInstance = pActiveCamera;
+    if (pActiveCamera == nullptr) {
+        ALOGE("Failed to allocate new EvsCamera object for %s\n", cameraId.c_str());
+    }
+
+    return pActiveCamera;
 }
 
-Return<void> EvsEnumerator::closeCamera(const ::android::sp<IEvsCamera>& camera) {
+
+Return<void> EvsEnumerator::closeCamera(const ::android::sp<IEvsCamera>& pCamera) {
     ALOGD("closeCamera");
 
-    if (camera == nullptr) {
-        ALOGE("Ignoring call to closeCamera with null camera pointer");
-    } else {
-        // Find this camera in our list
-        auto it = std::find_if(mCameraList.begin(),
-                               mCameraList.end(),
-                               [camera](const CameraRecord& rec) {
-                                   return (rec.pCamera == camera);
-                               });
-        if (it == mCameraList.end()) {
-            ALOGE("Ignoring close on unrecognized camera");
-        } else {
-            // Make sure the camera has stopped streaming
-            camera->stopVideoStream();
+    if (pCamera == nullptr) {
+        ALOGE("Ignoring call to closeCamera with null camera ptr");
+        return Void();
+    }
 
-            it->inUse = false;
+    // Get the camera id so we can find it in our list
+    std::string cameraId;
+    pCamera->getCameraInfo([&cameraId](CameraDesc desc) {
+// TODO(b/36532780) Should we able to just use a simple assignment?
+//                             cameraId = desc.cameraId;
+                               cameraId.assign(desc.cameraId.c_str());
+                           }
+    );
+
+    // Find the named camera
+    CameraRecord *pRecord = nullptr;
+    for (auto &&cam : sCameraList) {
+        if (cam.desc.cameraId == cameraId) {
+            // Found a match!
+            pRecord = &cam;
+            break;
+        }
+    }
+
+    // Is the display being destroyed actually the one we think is active?
+    if (!pRecord) {
+        ALOGE("Asked to close a camera who's name isn't recognized");
+    } else {
+        sp<EvsCamera> pActiveCamera = pRecord->activeInstance.promote();
+
+        if (pActiveCamera == nullptr) {
+            ALOGE("Somehow a camera is being destroyed when the enumerator didn't know one existed");
+        } else if (pActiveCamera != pCamera) {
+            // This can happen if the camera was aggressively reopened, orphaning this previous instance
+            ALOGW("Ignoring close of previously orphaned camera - why did a client steal?");
+        } else {
+            // Drop the active camera
+            pActiveCamera->forceShutdown();
+            pRecord->activeInstance = nullptr;
         }
     }
 
     return Void();
 }
 
+
 Return<sp<IEvsDisplay>> EvsEnumerator::openDisplay() {
     ALOGD("openDisplay");
 
-    // If we already have a display active, then this request must be denied
-    sp<IEvsDisplay> pActiveDisplay = mActiveDisplay.promote();
+    // If we already have a display active, then we need to shut it down so we can
+    // give exclusive access to the new caller.
+    sp<EvsDisplay> pActiveDisplay = sActiveDisplay.promote();
     if (pActiveDisplay != nullptr) {
-        ALOGW("Rejecting openDisplay request the display is already in use.");
-        return nullptr;
-    } else {
-        // Create a new display interface and return it
-        pActiveDisplay = new EvsDisplay();
-        mActiveDisplay = pActiveDisplay;
-        ALOGD("Returning new EvsDisplay object %p", pActiveDisplay.get());
-        return pActiveDisplay;
+        ALOGW("Killing previous display because of new caller");
+        closeDisplay(pActiveDisplay);
     }
+
+    // Create a new display interface and return it
+    pActiveDisplay = new EvsDisplay();
+    sActiveDisplay = pActiveDisplay;
+
+    ALOGD("Returning new EvsDisplay object %p", pActiveDisplay.get());
+    return pActiveDisplay;
 }
 
-Return<void> EvsEnumerator::closeDisplay(const ::android::sp<IEvsDisplay>& display) {
+
+Return<void> EvsEnumerator::closeDisplay(const ::android::sp<IEvsDisplay>& pDisplay) {
     ALOGD("closeDisplay");
 
     // Do we still have a display object we think should be active?
-    sp<IEvsDisplay> pActiveDisplay = mActiveDisplay.promote();
-
+    sp<EvsDisplay> pActiveDisplay = sActiveDisplay.promote();
     if (pActiveDisplay == nullptr) {
-        ALOGE("Ignoring closeDisplay when there is no active display.");
-    } else if (display != pActiveDisplay) {
-        ALOGE("Ignoring closeDisplay on a display we didn't issue");
-        ALOGI("Got %p while active display is %p.", display.get(), pActiveDisplay.get());
+        ALOGE("Somehow a display is being destroyed when the enumerator didn't know one existed");
+    } else if (sActiveDisplay != pDisplay) {
+        ALOGW("Ignoring close of previously orphaned display - why did a client steal?");
     } else {
         // Drop the active display
-        mActiveDisplay = nullptr;
+        pActiveDisplay->forceShutdown();
+        sActiveDisplay = nullptr;
     }
 
     return Void();
 }
 
+
 Return<DisplayState> EvsEnumerator::getDisplayState()  {
     ALOGD("getDisplayState");
 
     // Do we still have a display object we think should be active?
-    sp<IEvsDisplay> pActiveDisplay = mActiveDisplay.promote();
+    sp<IEvsDisplay> pActiveDisplay = sActiveDisplay.promote();
     if (pActiveDisplay != nullptr) {
         return pActiveDisplay->getDisplayState();
     } else {
diff --git a/automotive/evs/1.0/default/EvsEnumerator.h b/automotive/evs/1.0/default/EvsEnumerator.h
index 3d6e264..6b70f9b 100644
--- a/automotive/evs/1.0/default/EvsEnumerator.h
+++ b/automotive/evs/1.0/default/EvsEnumerator.h
@@ -22,7 +22,6 @@
 
 #include <list>
 
-#include "EvsCamera.h"
 
 namespace android {
 namespace hardware {
@@ -31,6 +30,11 @@
 namespace V1_0 {
 namespace implementation {
 
+
+class EvsCamera;    // from EvsCamera.h
+class EvsDisplay;   // from EvsDisplay.h
+
+
 class EvsEnumerator : public IEvsEnumerator {
 public:
     // Methods from ::android::hardware::automotive::evs::V1_0::IEvsEnumerator follow.
@@ -45,14 +49,18 @@
     EvsEnumerator();
 
 private:
+    // NOTE:  All members values are static so that all clients operate on the same state
+    //        That is to say, this is effectively a singleton despite the fact that HIDL
+    //        constructs a new instance for each client.
     struct CameraRecord {
-        sp<EvsCamera>   pCamera;
-        bool            inUse;
-        CameraRecord(EvsCamera* p, bool b) : pCamera(p), inUse(b) {}
-    };
-    std::list<CameraRecord> mCameraList;
+        CameraDesc          desc;
+        wp<EvsCamera>       activeInstance;
 
-    wp<IEvsDisplay>         mActiveDisplay; // Weak pointer -> object destructs if client dies
+        CameraRecord(const char *cameraId) : desc() { desc.cameraId = cameraId; }
+    };
+    static std::list<CameraRecord> sCameraList;
+
+    static wp<EvsDisplay>          sActiveDisplay; // Weak pointer. Object destructs if client dies.
 };
 
 } // namespace implementation
diff --git a/automotive/evs/1.0/types.hal b/automotive/evs/1.0/types.hal
index 0ce39d1..7cebf6d 100644
--- a/automotive/evs/1.0/types.hal
+++ b/automotive/evs/1.0/types.hal
@@ -18,40 +18,14 @@
 
 
 /**
- * Bit flags indicating suggested uses for a given EVS camera
- *
- * The values in the UsageHint bit field provide a generic expression of how a
- * given camera is intended to be used. The values for these flags support
- * existing use cases, and are used by the default EVS application to select
- * appropriate cameras for display based on observed vehicle state (such as
- * turn signal activation or selection of reverse gear). When implementing
- * their own specialized EVS Applications, OEMs are free to use these flags
- * and/or the opaque vendor_flags to drive their own vehicle specific logic.
- */
-enum UsageHint : uint32_t {
-    USAGE_HINT_REVERSE      = 0x00000001,
-    USAGE_HINT_LEFT_TURN    = 0x00000002,
-    USAGE_HINT_RIGHT_TURN   = 0x00000004,
-};
-
-
-/**
  * Structure describing the basic properties of an EVS camera
  *
  * The HAL is responsible for filling out this structure for each
- * EVS camera in the system. Attention should be given to the field
- * of view, direction of view, and location parameters as these may
- * be used to (if available) to project overlay graphics into the
- * scene by an EVS application.
- * Any of these values for which the HAL does not have reasonable values
- * should be set to ZERO.
+ * EVS camera in the system.
  */
 struct CameraDesc {
-    string              cameraId;
-    bitfield<UsageHint> hints;                  // Mask of usage hints
-    uint32_t            vendorFlags;            // Opaque value from driver
-    uint32_t            defaultHorResolution;   // Units of pixels
-    uint32_t            defaultVerResolution;   // Units of pixels
+    string      cameraId;
+    uint32_t    vendorFlags;    // Opaque value from driver
 };
 
 
@@ -65,9 +39,7 @@
  */
 struct DisplayDesc {
     string      displayId;
-    uint32_t    vendorFlags;                // Opaque value from driver
-    uint32_t    defaultHorResolution;       // Units of pixels
-    uint32_t    defaultVerResolution;       // Units of pixels
+    uint32_t    vendorFlags;    // Opaque value from driver
 };
 
 
@@ -86,7 +58,8 @@
 struct BufferDesc {
     uint32_t    width;      // Units of pixels
     uint32_t    height;     // Units of pixels
-    uint32_t    stride;     // Units of bytes
+    uint32_t    stride;     // Units of pixels to match gralloc
+    uint32_t    pixelSize;  // Units of bytes
     uint32_t    format;     // May contain values from android_pixel_format_t
     uint32_t    usage;      // May contain values from from Gralloc.h
     uint32_t    bufferId;   // Opaque value from driver
@@ -108,6 +81,7 @@
     NOT_VISIBLE,            // Display is inhibited
     VISIBLE_ON_NEXT_FRAME,  // Will become visible with next frame
     VISIBLE,                // Display is currently active
+    DEAD,                   // Driver is in an undefined state.  Interface should be closed.
     NUM_STATES              // Must be last
 };
 
@@ -118,5 +92,6 @@
     INVALID_ARG,
     STREAM_ALREADY_RUNNING,
     BUFFER_NOT_AVAILABLE,
+    OWNERSHIP_LOST,
     UNDERLYING_SERVICE_ERROR,
 };
diff --git a/automotive/evs/1.0/vts/functional/Android.bp b/automotive/evs/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..22ceff3
--- /dev/null
+++ b/automotive/evs/1.0/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: "VtsEvsV1_0Target",
+
+    srcs: [
+        "VtsEvsV1_0TargetTest.cpp",
+        "FrameHandler.cpp"
+    ],
+
+    defaults: [
+        "hidl_defaults",
+    ],
+
+    shared_libs: [
+        "android.hardware.automotive.evs@1.0",
+        "liblog",
+        "libutils",
+        "libui",
+        "libhidlbase",
+        "libhidltransport",
+    ],
+
+    static_libs: ["VtsHalHidlTargetTestBase"],
+
+    cflags: [
+        "-O0",
+        "-g",
+    ],
+}
+
diff --git a/automotive/evs/1.0/vts/functional/FrameHandler.cpp b/automotive/evs/1.0/vts/functional/FrameHandler.cpp
new file mode 100644
index 0000000..01d9a0e
--- /dev/null
+++ b/automotive/evs/1.0/vts/functional/FrameHandler.cpp
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "VtsHalEvsTest"
+
+#include "FrameHandler.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include <android/log.h>
+#include <cutils/native_handle.h>
+#include <ui/GraphicBufferMapper.h>
+#include <ui/GraphicBuffer.h>
+
+#include <algorithm>    // std::min
+
+
+// For the moment, we're assuming that the underlying EVS driver we're working with
+// is providing 4 byte RGBx data.  This is fine for loopback testing, although
+// real hardware is expected to provide YUV data -- most likly formatted as YV12
+static const unsigned kBytesPerPixel = 4;   // assuming 4 byte RGBx pixels
+
+
+FrameHandler::FrameHandler(android::sp <IEvsCamera> pCamera, CameraDesc cameraInfo,
+                           android::sp <IEvsDisplay> pDisplay,
+                           BufferControlFlag mode) :
+    mCamera(pCamera),
+    mCameraInfo(cameraInfo),
+    mDisplay(pDisplay),
+    mReturnMode(mode) {
+    // Nothing but member initialization here...
+}
+
+
+void FrameHandler::shutdown()
+{
+    // Make sure we're not still streaming
+    blockingStopStream();
+
+    // At this point, the receiver thread is no longer running, so we can safely drop
+    // our remote object references so they can be freed
+    mCamera = nullptr;
+    mDisplay = nullptr;
+}
+
+
+bool FrameHandler::startStream() {
+    // Mark ourselves as running
+    mLock.lock();
+    mRunning = true;
+    mLock.unlock();
+
+    // Tell the camera to start streaming
+    Return<EvsResult> result = mCamera->startVideoStream(this);
+    return (result == EvsResult::OK);
+}
+
+
+void FrameHandler::asyncStopStream() {
+    // Tell the camera to stop streaming.
+    // This will result in a null frame being delivered when the stream actually stops.
+    mCamera->stopVideoStream();
+}
+
+
+void FrameHandler::blockingStopStream() {
+    // Tell the stream to stop
+    asyncStopStream();
+
+    // Wait until the stream has actually stopped
+    std::unique_lock<std::mutex> lock(mLock);
+    mSignal.wait(lock, [this](){ return !mRunning; });
+}
+
+
+bool FrameHandler::returnHeldBuffer() {
+    std::unique_lock<std::mutex> lock(mLock);
+
+    // Return the oldest buffer we're holding
+    if (mHeldBuffers.empty()) {
+        // No buffers are currently held
+        return false;
+    }
+
+    BufferDesc buffer = mHeldBuffers.front();
+    mHeldBuffers.pop();
+    mCamera->doneWithFrame(buffer);
+
+    return true;
+}
+
+
+bool FrameHandler::isRunning() {
+    std::unique_lock<std::mutex> lock(mLock);
+    return mRunning;
+}
+
+
+void FrameHandler::waitForFrameCount(unsigned frameCount) {
+    // Wait until we've seen at least the requested number of frames (could be more)
+    std::unique_lock<std::mutex> lock(mLock);
+    mSignal.wait(lock, [this, frameCount](){ return mFramesReceived >= frameCount; });
+}
+
+
+void FrameHandler::getFramesCounters(unsigned* received, unsigned* displayed) {
+    std::unique_lock<std::mutex> lock(mLock);
+
+    if (received) {
+        *received = mFramesReceived;
+    }
+    if (displayed) {
+        *displayed = mFramesDisplayed;
+    }
+}
+
+
+Return<void> FrameHandler::deliverFrame(const BufferDesc& bufferArg) {
+    ALOGD("Received a frame from the camera (%p)", bufferArg.memHandle.getNativeHandle());
+
+    // Local flag we use to keep track of when the stream is stopping
+    bool timeToStop = false;
+
+    // TODO:  Why do we get a gralloc crash if we don't clone the buffer here?
+    BufferDesc buffer(bufferArg);
+    ALOGD("Clone the received frame as %p", buffer.memHandle.getNativeHandle());
+
+    if (buffer.memHandle.getNativeHandle() == nullptr) {
+        // Signal that the last frame has been received and the stream is stopped
+        timeToStop = true;
+    } else {
+        // If we were given an opened display at construction time, then send the received
+        // image back down the camera.
+        if (mDisplay.get()) {
+            // Get the output buffer we'll use to display the imagery
+            BufferDesc tgtBuffer = {};
+            mDisplay->getTargetBuffer([&tgtBuffer](const BufferDesc& buff) {
+                                          tgtBuffer = buff;
+                                      }
+            );
+
+            if (tgtBuffer.memHandle == nullptr) {
+                printf("Didn't get target buffer - frame lost\n");
+                ALOGE("Didn't get requested output buffer -- skipping this frame.");
+            } else {
+                // In order for the handles passed through HIDL and stored in the BufferDesc to
+                // be lockable, we must register them with GraphicBufferMapper
+                registerBufferHelper(tgtBuffer);
+                registerBufferHelper(buffer);
+
+                // Copy the contents of the of buffer.memHandle into tgtBuffer
+                copyBufferContents(tgtBuffer, buffer);
+
+                // Send the target buffer back for display
+                Return <EvsResult> result = mDisplay->returnTargetBufferForDisplay(tgtBuffer);
+                if (!result.isOk()) {
+                    printf("HIDL error on display buffer (%s)- frame lost\n",
+                           result.description().c_str());
+                    ALOGE("Error making the remote function call.  HIDL said %s",
+                          result.description().c_str());
+                } else if (result != EvsResult::OK) {
+                    printf("Display reported error - frame lost\n");
+                    ALOGE("We encountered error %d when returning a buffer to the display!",
+                          (EvsResult) result);
+                } else {
+                    // Everything looks good!
+                    // Keep track so tests or watch dogs can monitor progress
+                    mLock.lock();
+                    mFramesDisplayed++;
+                    mLock.unlock();
+                }
+
+                // Now tell GraphicBufferMapper we won't be using these handles anymore
+                unregisterBufferHelper(tgtBuffer);
+                unregisterBufferHelper(buffer);
+            }
+        }
+
+
+        switch (mReturnMode) {
+        case eAutoReturn:
+            // Send the camera buffer back now that we're done with it
+            ALOGD("Calling doneWithFrame");
+            // TODO:  Why is it that we get a HIDL crash if we pass back the cloned buffer?
+            mCamera->doneWithFrame(bufferArg);
+            break;
+        case eNoAutoReturn:
+            // Hang onto the buffer handle for now -- we'll return it explicitly later
+            mHeldBuffers.push(bufferArg);
+        }
+
+
+        ALOGD("Frame handling complete");
+    }
+
+
+    // Update our received frame count and notify anybody who cares that things have changed
+    mLock.lock();
+    if (timeToStop) {
+        mRunning = false;
+    } else {
+        mFramesReceived++;
+    }
+    mLock.unlock();
+    mSignal.notify_all();
+
+
+    return Void();
+}
+
+
+bool FrameHandler::copyBufferContents(const BufferDesc& tgtBuffer,
+                                      const BufferDesc& srcBuffer) {
+    bool success = true;
+
+    // Make sure we don't run off the end of either buffer
+    const unsigned width     = std::min(tgtBuffer.width,
+                                        srcBuffer.width);
+    const unsigned height    = std::min(tgtBuffer.height,
+                                        srcBuffer.height);
+
+    android::GraphicBufferMapper &mapper = android::GraphicBufferMapper::get();
+
+
+    // Lock our source buffer for reading
+    unsigned char* srcPixels = nullptr;
+    mapper.registerBuffer(srcBuffer.memHandle);
+    mapper.lock(srcBuffer.memHandle,
+                GRALLOC_USAGE_SW_READ_OFTEN,
+                android::Rect(width, height),
+                (void **) &srcPixels);
+
+    // Lock our target buffer for writing
+    unsigned char* tgtPixels = nullptr;
+    mapper.registerBuffer(tgtBuffer.memHandle);
+    mapper.lock(tgtBuffer.memHandle,
+                GRALLOC_USAGE_SW_WRITE_OFTEN,
+                android::Rect(width, height),
+                (void **) &tgtPixels);
+
+    if (srcPixels && tgtPixels) {
+        for (unsigned row = 0; row < height; row++) {
+            // Copy the entire row of pixel data
+            memcpy(tgtPixels, srcPixels, width * kBytesPerPixel);
+
+            // Advance to the next row (keeping in mind that stride here is in units of pixels)
+            tgtPixels += tgtBuffer.stride * kBytesPerPixel;
+            srcPixels += srcBuffer.stride * kBytesPerPixel;
+        }
+    } else {
+        ALOGE("Failed to copy buffer contents");
+        success = false;
+    }
+
+    if (srcPixels) {
+        mapper.unlock(srcBuffer.memHandle);
+    }
+    if (tgtPixels) {
+        mapper.unlock(tgtBuffer.memHandle);
+    }
+    mapper.unregisterBuffer(srcBuffer.memHandle);
+    mapper.unregisterBuffer(tgtBuffer.memHandle);
+
+    return success;
+}
+
+
+void FrameHandler::registerBufferHelper(const BufferDesc& buffer)
+{
+    // In order for the handles passed through HIDL and stored in the BufferDesc to
+    // be lockable, we must register them with GraphicBufferMapper.
+    // If the device upon which we're running supports gralloc1, we could just call
+    // registerBuffer directly with the handle.  But that call  is broken for gralloc0 devices
+    // (which we care about, at least for now).  As a result, we have to synthesize a GraphicBuffer
+    // object around the buffer handle in order to make a call to the overloaded alternate
+    // version of the registerBuffer call that does happen to work on gralloc0 devices.
+#if REGISTER_BUFFER_ALWAYS_WORKS
+    android::GraphicBufferMapper::get().registerBuffer(buffer.memHandle);
+#else
+    android::sp<android::GraphicBuffer> pGfxBuff = new android::GraphicBuffer(
+            buffer.width, buffer.height, buffer.format,
+            1, /* we always use exactly one layer */
+            buffer.usage, buffer.stride,
+            const_cast<native_handle_t*>(buffer.memHandle.getNativeHandle()),
+            false /* GraphicBuffer should not try to free the handle */
+    );
+
+    android::GraphicBufferMapper::get().registerBuffer(pGfxBuff.get());
+#endif
+}
+
+
+void FrameHandler::unregisterBufferHelper(const BufferDesc& buffer)
+{
+    // Now tell GraphicBufferMapper we won't be using these handles anymore
+    android::GraphicBufferMapper::get().unregisterBuffer(buffer.memHandle);
+}
diff --git a/automotive/evs/1.0/vts/functional/FrameHandler.h b/automotive/evs/1.0/vts/functional/FrameHandler.h
new file mode 100644
index 0000000..d5c3f6b
--- /dev/null
+++ b/automotive/evs/1.0/vts/functional/FrameHandler.h
@@ -0,0 +1,93 @@
+/*
+ * 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 EVS_VTS_FRAMEHANDLER_H
+#define EVS_VTS_FRAMEHANDLER_H
+
+#include <queue>
+
+#include <android/hardware/automotive/evs/1.0/IEvsCameraStream.h>
+#include <android/hardware/automotive/evs/1.0/IEvsCamera.h>
+#include <android/hardware/automotive/evs/1.0/IEvsDisplay.h>
+
+using namespace ::android::hardware::automotive::evs::V1_0;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_handle;
+using ::android::sp;
+
+
+/*
+ * FrameHandler:
+ * This class can be used to receive camera imagery from an IEvsCamera implementation.  Given an
+ * IEvsDisplay instance at startup, it will forward the received imagery to the display,
+ * providing a trivial implementation of a rear vew camera type application.
+ * Note that the video frames are delivered on a background thread, while the control interface
+ * is actuated from the applications foreground thread.
+ */
+class FrameHandler : public IEvsCameraStream {
+public:
+    enum BufferControlFlag {
+        eAutoReturn,
+        eNoAutoReturn,
+    };
+
+    FrameHandler(android::sp <IEvsCamera> pCamera, CameraDesc cameraInfo,
+                 android::sp <IEvsDisplay> pDisplay = nullptr,
+                 BufferControlFlag mode = eAutoReturn);
+    void shutdown();
+
+    bool startStream();
+    void asyncStopStream();
+    void blockingStopStream();
+
+    bool returnHeldBuffer();
+
+    bool isRunning();
+
+    void waitForFrameCount(unsigned frameCount);
+    void getFramesCounters(unsigned* received, unsigned* displayed);
+
+private:
+    // Implementation for ::android::hardware::automotive::evs::V1_0::ICarCameraStream
+    Return<void> deliverFrame(const BufferDesc& buffer)  override;
+
+    // Local implementation details
+    bool copyBufferContents(const BufferDesc& tgtBuffer, const BufferDesc& srcBuffer);
+    void registerBufferHelper(const BufferDesc& buffer);
+    void unregisterBufferHelper(const BufferDesc& buffer);
+
+    // Values initialized as startup
+    android::sp <IEvsCamera>    mCamera;
+    CameraDesc                  mCameraInfo;
+    android::sp <IEvsDisplay>   mDisplay;
+    BufferControlFlag           mReturnMode;
+
+    // Since we get frames delivered to us asnchronously via the ICarCameraStream interface,
+    // we need to protect all member variables that may be modified while we're streaming
+    // (ie: those below)
+    std::mutex                  mLock;
+    std::condition_variable     mSignal;
+
+    std::queue<BufferDesc>      mHeldBuffers;
+    bool                        mRunning = false;
+    unsigned                    mFramesReceived = 0;    // Simple counter -- rolls over eventually!
+    unsigned                    mFramesDisplayed = 0;   // Simple counter -- rolls over eventually!
+};
+
+
+#endif //EVS_VTS_FRAMEHANDLER_H
diff --git a/automotive/evs/1.0/vts/functional/VtsEvsV1_0TargetTest.cpp b/automotive/evs/1.0/vts/functional/VtsEvsV1_0TargetTest.cpp
new file mode 100644
index 0000000..6a0ae48
--- /dev/null
+++ b/automotive/evs/1.0/vts/functional/VtsEvsV1_0TargetTest.cpp
@@ -0,0 +1,464 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "VtsHalEvsTest"
+
+
+// TODO:  How should we configure these values to target appropriate hardware?
+const static char kEnumeratorName[]  = "EvsEnumeratorHw-Mock";
+
+
+// These values are called out in the EVS design doc (as of Mar 8, 2017)
+static const int kMaxStreamStartMilliseconds = 500;
+static const int kMinimumFramesPerSecond = 10;
+
+static const int kSecondsToMilliseconds = 1000;
+static const int kMillisecondsToMicroseconds = 1000;
+static const float kNanoToMilliseconds = 0.000001f;
+static const float kNanoToSeconds = 0.000000001f;
+
+
+#include "FrameHandler.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include <hidl/HidlTransportSupport.h>
+#include <utils/Errors.h>
+#include <utils/StrongPointer.h>
+#include <utils/Log.h>
+#include <hwbinder/ProcessState.h>
+
+#include <android/log.h>
+#include <android/hardware/automotive/evs/1.0/IEvsCamera.h>
+#include <android/hardware/automotive/evs/1.0/IEvsEnumerator.h>
+#include <android/hardware/automotive/evs/1.0/IEvsCameraStream.h>
+#include <android/hardware/automotive/evs/1.0/IEvsDisplay.h>
+
+#include <VtsHalHidlTargetTestBase.h>
+
+
+using namespace ::android::hardware::automotive::evs::V1_0;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_handle;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+
+// The main test class for EVS
+class EvsHidlTest : public ::testing::VtsHalHidlTargetTestBase {
+public:
+    virtual void SetUp() override {
+        // Make sure we can connect to the enumerator
+        pEnumerator = IEvsEnumerator::getService(kEnumeratorName);
+        ASSERT_NE(pEnumerator.get(), nullptr);
+    }
+
+    virtual void TearDown() override {}
+
+protected:
+    void loadCameraList() {
+        // SetUp() must run first!
+        assert(pEnumerator != nullptr);
+
+        // Get the camera list
+        pEnumerator->getCameraList([this](hidl_vec <CameraDesc> cameraList) {
+                                       ALOGI("Camera list callback received %zu cameras",
+                                             cameraList.size());
+                                       cameraInfo.reserve(cameraList.size());
+                                       for (auto&& cam: cameraList) {
+                                           ALOGI("Found camera %s", cam.cameraId.c_str());
+                                           cameraInfo.push_back(cam);
+                                       }
+                                   }
+        );
+
+        // We insist on at least one camera for EVS to pass any camera tests
+        ASSERT_GE(cameraInfo.size(), 1u);
+    }
+
+    sp<IEvsEnumerator>          pEnumerator;    // Every test needs access to the service
+    std::vector <CameraDesc>    cameraInfo;     // Empty unless/until loadCameraList() is called
+};
+
+
+//
+// Tests start here...
+//
+
+/*
+ * CameraOpenClean:
+ * Opens each camera reported by the enumerator and then explicitly closes it via a
+ * call to closeCamera.  Then repeats the test to ensure all cameras can be reopened.
+ */
+TEST_F(EvsHidlTest, CameraOpenClean) {
+    // Get the camera list
+    loadCameraList();
+
+    // Open and close each camera twice
+    for (auto&& cam: cameraInfo) {
+        for (int pass = 0; pass < 2; pass++) {
+            sp<IEvsCamera> pCam = pEnumerator->openCamera(cam.cameraId);
+            ASSERT_NE(pCam, nullptr);
+
+            // Verify that this camera self-identifies correctly
+            pCam->getCameraInfo([&cam](CameraDesc desc) {
+                                    ALOGD("Found camera %s", desc.cameraId.c_str());
+                                    EXPECT_EQ(cam.cameraId, desc.cameraId);
+                                }
+            );
+
+            // Explicitly close the camera so resources are released right away
+            pEnumerator->closeCamera(pCam);
+        }
+    }
+}
+
+
+/*
+ * CameraOpenAggressive:
+ * Opens each camera reported by the enumerator twice in a row without an intervening closeCamera
+ * call.  This ensures that the intended "aggressive open" behavior works.  This is necessary for
+ * the system to be tolerant of shutdown/restart race conditions.
+ */
+TEST_F(EvsHidlTest, CameraOpenAggressive) {
+    // Get the camera list
+    loadCameraList();
+
+    // Open and close each camera twice
+    for (auto&& cam: cameraInfo) {
+        sp<IEvsCamera> pCam = pEnumerator->openCamera(cam.cameraId);
+        ASSERT_NE(pCam, nullptr);
+
+        // Verify that this camera self-identifies correctly
+        pCam->getCameraInfo([&cam](CameraDesc desc) {
+                                ALOGD("Found camera %s", desc.cameraId.c_str());
+                                EXPECT_EQ(cam.cameraId, desc.cameraId);
+                            }
+        );
+
+        sp<IEvsCamera> pCam2 = pEnumerator->openCamera(cam.cameraId);
+        ASSERT_NE(pCam, pCam2);
+        ASSERT_NE(pCam2, nullptr);
+
+        // Verify that the old camera rejects calls
+        Return<EvsResult> badResult = pCam->setMaxFramesInFlight(2);
+        EXPECT_EQ(EvsResult::OWNERSHIP_LOST, EvsResult(badResult));
+
+        // Close the superceded camera
+        pEnumerator->closeCamera(pCam);
+
+        // Verify that the second camera instance self-identifies correctly
+        pCam2->getCameraInfo([&cam](CameraDesc desc) {
+                                 ALOGD("Found camera %s", desc.cameraId.c_str());
+                                 EXPECT_EQ(cam.cameraId, desc.cameraId);
+                             }
+        );
+
+        // Leave the second camera dangling so it gets cleaned up by the destructor path
+    }
+
+    // Sleep here to ensure the destructor cleanup has time to run so we don't break follow on tests
+    sleep(1);   // I hate that this is an arbitrary time to wait.  :(  b/36122635
+}
+
+
+/*
+ * DisplayOpen:
+ * Test both clean shut down and "aggressive open" device stealing behavior.
+ */
+TEST_F(EvsHidlTest, DisplayOpen) {
+    // Request exclusive access to the EVS display, then let it go
+    {
+        sp<IEvsDisplay> pDisplay = pEnumerator->openDisplay();
+        ASSERT_NE(pDisplay, nullptr);
+
+        // Ask the display what it's name is
+        pDisplay->getDisplayInfo([](DisplayDesc desc) {
+                                     ALOGD("Found display %s", desc.displayId.c_str());
+                                 }
+        );
+
+        pEnumerator->closeDisplay(pDisplay);
+    }
+
+    // Ensure we can reopen the display after it has been closed
+    {
+        // Reopen the display
+        sp<IEvsDisplay> pDisplay = pEnumerator->openDisplay();
+        ASSERT_NE(pDisplay, nullptr);
+
+        // Open the display while its already open -- ownership should be transferred
+        sp<IEvsDisplay> pDisplay2 = pEnumerator->openDisplay();
+        ASSERT_NE(pDisplay2, nullptr);
+
+        // Ensure the old display properly reports its assassination
+        Return<DisplayState> badResult = pDisplay->getDisplayState();
+        EXPECT_EQ(badResult, DisplayState::DEAD);
+
+        // Close only the newest display instance -- the other should already be a zombie
+        pEnumerator->closeDisplay(pDisplay2);
+    }
+
+    // Finally, validate that we can open the display after the provoked failure above
+    sp<IEvsDisplay> pDisplay = pEnumerator->openDisplay();
+    ASSERT_NE(pDisplay, nullptr);
+
+    pEnumerator->closeDisplay(pDisplay);
+}
+
+
+/*
+ * DisplayStates:
+ * Validate that display states transition as expected and can be queried from either the display
+ * object itself or the owning enumerator.
+ */
+TEST_F(EvsHidlTest, DisplayStates) {
+    // Ensure the display starts in the expected state
+    EXPECT_EQ((DisplayState)pEnumerator->getDisplayState(), DisplayState::NOT_OPEN);
+
+    // Scope to limit the lifetime of the pDisplay pointer, and thus the IEvsDisplay object
+    {
+        // Request exclusive access to the EVS display
+        sp<IEvsDisplay> pDisplay = pEnumerator->openDisplay();
+        ASSERT_NE(pDisplay, nullptr);
+        EXPECT_EQ((DisplayState)pEnumerator->getDisplayState(), DisplayState::NOT_VISIBLE);
+
+        // Activate the display
+        pDisplay->setDisplayState(DisplayState::VISIBLE_ON_NEXT_FRAME);
+        EXPECT_EQ((DisplayState)pEnumerator->getDisplayState(), DisplayState::VISIBLE_ON_NEXT_FRAME);
+        EXPECT_EQ((DisplayState)pDisplay->getDisplayState(), DisplayState::VISIBLE_ON_NEXT_FRAME);
+
+        // Get the output buffer we'd use to display the imagery
+        BufferDesc tgtBuffer = {};
+        pDisplay->getTargetBuffer([&tgtBuffer](const BufferDesc& buff) {
+                                      tgtBuffer = buff;
+                                  }
+        );
+        EXPECT_NE(tgtBuffer.memHandle, nullptr);
+
+        // Send the target buffer back for display (we didn't actually fill anything)
+        pDisplay->returnTargetBufferForDisplay(tgtBuffer);
+
+        // Sleep for a tenth of a second to ensure the driver has time to get the image displayed
+        usleep(100 * kMillisecondsToMicroseconds);
+        EXPECT_EQ((DisplayState)pEnumerator->getDisplayState(), DisplayState::VISIBLE);
+        EXPECT_EQ((DisplayState)pDisplay->getDisplayState(), DisplayState::VISIBLE);
+
+        // Turn off the display
+        pDisplay->setDisplayState(DisplayState::NOT_VISIBLE);
+        usleep(100 * kMillisecondsToMicroseconds);
+        EXPECT_EQ((DisplayState)pEnumerator->getDisplayState(), DisplayState::NOT_VISIBLE);
+
+        // Close the display
+        pEnumerator->closeDisplay(pDisplay);
+    }
+
+    // TODO:  This hack shouldn't be necessary.  b/36122635
+// NOTE:  Calling flushCommand here did not avoid the race.  Going back to sleep...  :(
+//    android::hardware::IPCThreadState::self()->flushCommands();
+    sleep(1);
+
+    // Now that the display pointer has gone out of scope, causing the IEvsDisplay interface
+    // object to be destroyed, we should be back to the "not open" state.
+    // NOTE:  If we want this to pass without the sleep above, we'd have to add the
+    //        (now recommended) closeDisplay() call instead of relying on the smarter pointer
+    //        going out of scope.
+    EXPECT_EQ((DisplayState)pEnumerator->getDisplayState(), DisplayState::NOT_OPEN);
+}
+
+
+/*
+ * CameraStreamPerformance:
+ * Measure and qualify the stream start up time and streaming frame rate of each reported camera
+ */
+TEST_F(EvsHidlTest, CameraStreamPerformance) {
+    // Get the camera list
+    loadCameraList();
+
+    // Test each reported camera
+    for (auto&& cam: cameraInfo) {
+        sp <IEvsCamera> pCam = pEnumerator->openCamera(cam.cameraId);
+        ASSERT_NE(pCam, nullptr);
+
+        // Set up a frame receiver object which will fire up its own thread
+        sp<FrameHandler> frameHandler = new FrameHandler(pCam, cam,
+                                                         nullptr,
+                                                         FrameHandler::eAutoReturn);
+
+        // Start the camera's video stream
+        nsecs_t start = systemTime(SYSTEM_TIME_MONOTONIC);
+        bool startResult = frameHandler->startStream();
+        EXPECT_EQ(startResult, true);
+
+        // Ensure the first frame arrived within the expected time
+        frameHandler->waitForFrameCount(1);
+        nsecs_t firstFrame = systemTime(SYSTEM_TIME_MONOTONIC);
+        nsecs_t timeToFirstFrame = systemTime(SYSTEM_TIME_MONOTONIC) - start;
+        EXPECT_LE(nanoseconds_to_milliseconds(timeToFirstFrame), kMaxStreamStartMilliseconds);
+        printf("Measured time to first frame %0.2f ms\n", timeToFirstFrame * kNanoToMilliseconds);
+        ALOGI("Measured time to first frame %0.2f ms", timeToFirstFrame * kNanoToMilliseconds);
+
+        // Wait a bit, then ensure we get at least the required minimum number of frames
+        sleep(5);
+        nsecs_t end = systemTime(SYSTEM_TIME_MONOTONIC);
+        unsigned framesReceived = 0;
+        frameHandler->getFramesCounters(&framesReceived, nullptr);
+        framesReceived = framesReceived - 1;    // Back out the first frame we already waited for
+        nsecs_t runTime = end - firstFrame;
+        float framesPerSecond = framesReceived / (runTime * kNanoToSeconds);
+        printf("Measured camera rate %3.2f fps\n", framesPerSecond);
+        ALOGI("Measured camera rate %3.2f fps", framesPerSecond);
+        EXPECT_GE(framesPerSecond, kMinimumFramesPerSecond);
+
+        // Even when the camera pointer goes out of scope, the FrameHandler object will
+        // keep the stream alive unless we tell it to shutdown.
+        // Also note that the FrameHandle and the Camera have a mutual circular reference, so
+        // we have to break that cycle in order for either of them to get cleaned up.
+        frameHandler->shutdown();
+
+        // Explicitly release the camera
+        pEnumerator->closeCamera(pCam);
+    }
+}
+
+
+/*
+ * CameraStreamBuffering:
+ * Ensure the camera implementation behaves properly when the client holds onto buffers for more
+ * than one frame time.  The camera must cleanly skip frames until the client is ready again.
+ */
+TEST_F(EvsHidlTest, CameraStreamBuffering) {
+    // Arbitrary constant (should be > 1 and less than crazy)
+    static const unsigned int kBuffersToHold = 6;
+
+    // Get the camera list
+    loadCameraList();
+
+    // Test each reported camera
+    for (auto&& cam: cameraInfo) {
+
+        sp<IEvsCamera> pCam = pEnumerator->openCamera(cam.cameraId);
+        ASSERT_NE(pCam, nullptr);
+
+        // Ask for a crazy number of buffers in flight to ensure it errors correctly
+        Return<EvsResult> badResult = pCam->setMaxFramesInFlight(0xFFFFFFFF);
+        EXPECT_EQ(EvsResult::BUFFER_NOT_AVAILABLE, badResult);
+
+        // Now ask for exactly two buffers in flight as we'll test behavior in that case
+        Return<EvsResult> goodResult = pCam->setMaxFramesInFlight(kBuffersToHold);
+        EXPECT_EQ(EvsResult::OK, goodResult);
+
+
+        // Set up a frame receiver object which will fire up its own thread.
+        sp<FrameHandler> frameHandler = new FrameHandler(pCam, cam,
+                                                         nullptr,
+                                                         FrameHandler::eNoAutoReturn);
+
+        // Start the camera's video stream
+        bool startResult = frameHandler->startStream();
+        EXPECT_TRUE(startResult);
+
+        // Check that the video stream stalls once we've gotten exactly the number of buffers
+        // we requested since we told the frameHandler not to return them.
+        sleep(1);   // 1 second would be enough for at least 5 frames to be delivered worst case
+        unsigned framesReceived = 0;
+        frameHandler->getFramesCounters(&framesReceived, nullptr);
+        EXPECT_EQ(kBuffersToHold, framesReceived);
+
+
+        // Give back one buffer
+        bool didReturnBuffer = frameHandler->returnHeldBuffer();
+        EXPECT_TRUE(didReturnBuffer);
+
+        // Once we return a buffer, it shouldn't take more than 1/10 second to get a new one
+        // filled since we require 10fps minimum -- but give a 10% allowance just in case.
+        usleep(110 * kMillisecondsToMicroseconds);
+        frameHandler->getFramesCounters(&framesReceived, nullptr);
+        EXPECT_EQ(kBuffersToHold+1, framesReceived);
+
+        // Even when the camera pointer goes out of scope, the FrameHandler object will
+        // keep the stream alive unless we tell it to shutdown.
+        // Also note that the FrameHandle and the Camera have a mutual circular reference, so
+        // we have to break that cycle in order for either of them to get cleaned up.
+        frameHandler->shutdown();
+
+        // Explicitly release the camera
+        pEnumerator->closeCamera(pCam);
+    }
+}
+
+
+/*
+ * CameraToDisplayRoundTrip:
+ * End to end test of data flowing from the camera to the display.  Each delivered frame of camera
+ * imagery is simply copied to the display buffer and presented on screen.  This is the one test
+ * which a human could observe to see the operation of the system on the physical display.
+ */
+TEST_F(EvsHidlTest, CameraToDisplayRoundTrip) {
+    // Get the camera list
+    loadCameraList();
+
+    // Request exclusive access to the EVS display
+    sp<IEvsDisplay> pDisplay = pEnumerator->openDisplay();
+    ASSERT_NE(pDisplay, nullptr);
+
+    // Test each reported camera
+    for (auto&& cam: cameraInfo) {
+        sp <IEvsCamera> pCam = pEnumerator->openCamera(cam.cameraId);
+        ASSERT_NE(pCam, nullptr);
+
+        // Set up a frame receiver object which will fire up its own thread.
+        sp<FrameHandler> frameHandler = new FrameHandler(pCam, cam,
+                                                         pDisplay,
+                                                         FrameHandler::eAutoReturn);
+
+
+        // Activate the display
+        pDisplay->setDisplayState(DisplayState::VISIBLE_ON_NEXT_FRAME);
+
+        // Start the camera's video stream
+        bool startResult = frameHandler->startStream();
+        EXPECT_EQ(startResult, true);
+
+        // Wait a while to let the data flow
+        static const int kSecondsToWait = 5;
+        const int streamTimeMs = kSecondsToWait * kSecondsToMilliseconds -
+                                 kMaxStreamStartMilliseconds;
+        const unsigned minimumFramesExpected = streamTimeMs * kMinimumFramesPerSecond /
+                                               kSecondsToMilliseconds;
+        sleep(kSecondsToWait);
+        unsigned framesReceived = 0;
+        unsigned framesDisplayed = 0;
+        frameHandler->getFramesCounters(&framesReceived, &framesDisplayed);
+        EXPECT_EQ(framesReceived, framesDisplayed);
+        EXPECT_GE(framesDisplayed, minimumFramesExpected);
+
+        // Turn off the display (yes, before the stream stops -- it should be handled)
+        pDisplay->setDisplayState(DisplayState::NOT_VISIBLE);
+
+        // Shut down the streamer
+        frameHandler->shutdown();
+
+        // Explicitly release the camera
+        pEnumerator->closeCamera(pCam);
+    }
+
+    // Explicitly release the display
+    pEnumerator->closeDisplay(pDisplay);
+}
\ No newline at end of file
diff --git a/automotive/vehicle/2.0/default/Android.mk b/automotive/vehicle/2.0/default/Android.mk
index 4a010e9..b8535bd 100644
--- a/automotive/vehicle/2.0/default/Android.mk
+++ b/automotive/vehicle/2.0/default/Android.mk
@@ -22,7 +22,6 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := $(vhal_v2_0)-manager-lib
 LOCAL_SRC_FILES := \
-    common/src/AccessControlConfigParser.cpp \
     common/src/SubscriptionManager.cpp \
     common/src/VehicleHalManager.cpp \
     common/src/VehicleObjectPool.cpp \
@@ -35,7 +34,6 @@
     $(LOCAL_PATH)/common/include
 
 LOCAL_SHARED_LIBRARIES := \
-    libbinder \
     libhidlbase \
     libhidltransport \
     libhwbinder \
@@ -89,7 +87,6 @@
 
 LOCAL_SHARED_LIBRARIES := \
     libbase \
-    libbinder \
     libhidlbase \
     libhidltransport \
     libhwbinder \
@@ -117,7 +114,6 @@
     $(vhal_v2_0)-manager-lib \
 
 LOCAL_SRC_FILES:= \
-    tests/AccessControlConfigParser_test.cpp \
     tests/RecurrentTimer_test.cpp \
     tests/SubscriptionManager_test.cpp \
     tests/VehicleHalManager_test.cpp \
@@ -125,7 +121,6 @@
     tests/VehiclePropConfigIndex_test.cpp \
 
 LOCAL_SHARED_LIBRARIES := \
-    libbinder \
     libhidlbase \
     libhidltransport \
     libhwbinder \
@@ -153,7 +148,6 @@
 
 LOCAL_SHARED_LIBRARIES := \
     libbase \
-    libbinder \
     libhidlbase \
     libhidltransport \
     libhwbinder \
diff --git a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/AccessControlConfigParser.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/AccessControlConfigParser.h
deleted file mode 100644
index 8ef6f5a..0000000
--- a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/AccessControlConfigParser.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef android_hardware_automotive_vehicle_V2_0_AccessControlConfigParser_H_
-#define android_hardware_automotive_vehicle_V2_0_AccessControlConfigParser_H_
-
-#include <string>
-#include <vector>
-#include <unordered_map>
-#include <list>
-
-#include <android/hardware/automotive/vehicle/2.0/types.h>
-
-namespace android {
-namespace hardware {
-namespace automotive {
-namespace vehicle {
-namespace V2_0 {
-
-struct PropertyAcl {
-    int32_t propId;
-    unsigned uid;
-    VehiclePropertyAccess access;
-};
-
-using PropertyAclMap = std::unordered_multimap<int32_t, PropertyAcl>;
-
-/**
- * Parser for per-property access control in vehicle HAL.
- *
- * It supports the following format:
- *   Set ALIAS_NAME UID
- *   {S,V}:0x0305   {ALIAS_NAME,UID}   {R,W,RW}
- *
- * ALIAS_NAME is just an alias for UID
- * S - for system properties (VehiclePropertyGroup::SYSTEM)
- * V - for vendor properties (VehiclePropertyGroup::VENDOR)
- *
- * Example:
- *
- *   Set AID_AUDIO  1004
- *   Set AID_MY_APP     10022
- *
- *   S:0x0305   AID_AUDIO   RW
- *   S:0x0305   10021       R
- *   V:0x0101   AID_MY_APP  R
- */
-class AccessControlConfigParser {
-public:
-    /**
-     * Creates an instance of AccessControlConfigParser
-     *
-     * @param properties - properties supported by HAL implementation
-     */
-    AccessControlConfigParser(const std::vector<int32_t>& properties);
-
-    /**
-     * Parses config content from given stream and writes results to
-     * propertyAclMap.
-     */
-    bool parseFromStream(std::istream* stream, PropertyAclMap* propertyAclMap);
-
-private:
-    bool processTokens(std::list<std::string>* tokens,
-                       PropertyAclMap* propertyAclMap);
-
-    bool parsePropertyGroup(char group,
-                            VehiclePropertyGroup* outPropertyGroup) const;
-
-    bool parsePropertyId(const std::string& strPropId,
-                                VehiclePropertyGroup propertyGroup,
-                                int32_t* outVehicleProperty) const;
-
-    bool parseUid(const std::string& strUid, unsigned* outUid) const;
-
-    bool parseAccess(const std::string& strAccess,
-                     VehiclePropertyAccess* outAccess) const;
-
-
-    std::string readNextToken(std::list<std::string>* tokens) const;
-
-    static bool parseInt(const char* strValue, int* outIntValue);
-    static void split(const std::string& line,
-                      std::list<std::string>* outTokens);
-
-private:
-    std::unordered_map<std::string, unsigned> mUidMap {};  // Contains UID
-    // aliases.
-
-    // Map property ids w/o TYPE and AREA to VehicleProperty.
-    std::unordered_map<int32_t, int32_t> mStrippedToVehiclePropertyMap;
-};
-
-}  // namespace V2_0
-}  // namespace vehicle
-}  // namespace automotive
-}  // namespace hardware
-}  // namespace android
-
-#endif // android_hardware_automotive_vehicle_V2_0_AccessControlConfigParser_H_
diff --git a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/SubscriptionManager.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/SubscriptionManager.h
index a808c66..fd59802 100644
--- a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/SubscriptionManager.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/SubscriptionManager.h
@@ -24,7 +24,7 @@
 
 #include <android/log.h>
 #include <hidl/HidlSupport.h>
-#include <hwbinder/IPCThreadState.h>
+#include <utils/SortedVector.h>
 
 #include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
 
@@ -39,10 +39,8 @@
 
 class HalClient : public android::RefBase {
 public:
-    HalClient(const sp<IVehicleCallback> &callback,
-              int32_t pid,
-              int32_t uid)
-        : mCallback(callback), mPid(pid), mUid(uid) {}
+    HalClient(const sp<IVehicleCallback> &callback)
+        : mCallback(callback) {}
 
     virtual ~HalClient() {}
 public:
@@ -56,8 +54,6 @@
 
 private:
     const sp<IVehicleCallback> mCallback;
-    const int32_t mPid;
-    const int32_t mUid;
 
     std::map<int32_t, SubscribeOptions> mSubscriptions;
 };
diff --git a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHalManager.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHalManager.h
index b8ab309..1d45f4b 100644
--- a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHalManager.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VehicleHalManager.h
@@ -27,9 +27,7 @@
 #include <set>
 
 #include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
-#include <hwbinder/IPCThreadState.h>
 
-#include "AccessControlConfigParser.h"
 #include "ConcurrentQueue.h"
 #include "SubscriptionManager.h"
 #include "VehicleHal.h"
@@ -42,11 +40,6 @@
 namespace vehicle {
 namespace V2_0 {
 
-struct Caller {
-    pid_t pid;
-    uid_t uid;
-};
-
 /**
  * This class is a thick proxy between IVehicle HIDL interface and vendor's implementation.
  *
@@ -99,14 +92,8 @@
 
     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,
-                  int32_t propertyId,
-                  VehiclePropertyAccess requiredAccess) const;
-
+    bool checkWritePermission(const VehiclePropConfig &config) const;
+    bool checkReadPermission(const VehiclePropConfig &config) const;
     void onAllClientsUnsubscribed(int32_t propertyId);
 
     static bool isSubscribable(const VehiclePropConfig& config,
@@ -114,12 +101,6 @@
     static bool isSampleRateFixed(VehiclePropertyChangeMode mode);
     static float checkSampleRate(const VehiclePropConfig& config,
                                  float sampleRate);
-    static void readAndParseAclConfig(const char* filename,
-                                      AccessControlConfigParser* parser,
-                                      PropertyAclMap* outAclMap);
-
-    static Caller getCaller();
-
 private:
     VehicleHal* mHal;
     std::unique_ptr<VehiclePropConfigIndex> mConfigIndex;
@@ -130,7 +111,6 @@
     ConcurrentQueue<VehiclePropValuePtr> mEventQueue;
     BatchingConsumer<VehiclePropValuePtr> mBatchingConsumer;
     VehiclePropValuePool mValueObjectPool;
-    PropertyAclMap mPropertyAclMap;
 };
 
 }  // namespace V2_0
diff --git a/automotive/vehicle/2.0/default/common/src/AccessControlConfigParser.cpp b/automotive/vehicle/2.0/default/common/src/AccessControlConfigParser.cpp
deleted file mode 100644
index 6a3f8e5..0000000
--- a/automotive/vehicle/2.0/default/common/src/AccessControlConfigParser.cpp
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "automotive.vehicle@2.0-impl"
-
-#include "AccessControlConfigParser.h"
-#include "VehicleUtils.h"
-
-#include <fstream>
-#include <iostream>
-#include <sstream>
-
-#include <log/log.h>
-
-namespace android {
-namespace hardware {
-namespace automotive {
-namespace vehicle {
-namespace V2_0 {
-
-AccessControlConfigParser::AccessControlConfigParser(
-        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 (auto prop : properties) {
-        auto strippedProp = prop
-                            & ~toInt(VehiclePropertyType::MASK)
-                            & ~toInt(VehicleArea::MASK);
-        mStrippedToVehiclePropertyMap.emplace(strippedProp, prop);
-    }
-}
-
-bool AccessControlConfigParser::parseFromStream(
-        std::istream* stream, PropertyAclMap* propertyAclMap) {
-    std::list<std::string> tokens;
-    std::string line;
-    int lineNo = 0;
-    bool warnings = false;
-    for (;std::getline(*stream, line); lineNo++) {
-        split(line, &tokens);
-        if (!processTokens(&tokens, propertyAclMap)) {
-            warnings = true;
-            ALOGW("Failed to parse line %d : %s", lineNo, line.c_str());
-        }
-    }
-    return !warnings;
-}
-
-
-bool AccessControlConfigParser::processTokens(std::list<std::string>* tokens,
-                                              PropertyAclMap* propertyAclMap) {
-    std::string token = readNextToken(tokens);
-    if (token.empty() || token[0] == '#') {   // Ignore comment.
-        return true;
-    }
-
-    if (token == "Set") {
-        std::string alias = readNextToken(tokens);
-        std::string strUid = readNextToken(tokens);
-        if (alias.empty() || strUid.empty()) {
-            ALOGW("Expected alias and UID must be specified");
-            return false;
-        }
-        int uid;
-        if (!parseInt(strUid.c_str(), &uid)) {
-            ALOGW("Invalid UID: %d", uid);
-        }
-        mUidMap.emplace(std::move(alias), uid);
-    } else if (token.size() > 2 && token[1] == ':') {
-        VehiclePropertyGroup propGroup;
-        if (!parsePropertyGroup(token[0], &propGroup)) {
-            return false;
-        }
-        std::string strUid = readNextToken(tokens);
-        std::string strAccess = readNextToken(tokens);
-        if (strUid.empty() || strAccess.empty()) {
-            ALOGW("Expected UID and access for property: %s",
-                  token.c_str());
-        }
-
-
-        PropertyAcl acl;
-        if (parsePropertyId(token.substr(2), propGroup, &acl.propId)
-            && parseUid(strUid, &acl.uid)
-            && parseAccess(strAccess, &acl.access)) {
-            propertyAclMap->emplace(acl.propId, std::move(acl));
-        } else {
-            return false;
-        }
-    } else {
-        ALOGW("Unexpected token: %s", token.c_str());
-        return false;
-    }
-
-    return true;
-}
-
-bool AccessControlConfigParser::parsePropertyGroup(
-        char group, VehiclePropertyGroup* outPropertyGroup) const {
-    switch (group) {
-        case 'S':  // Fall through.
-        case 's':
-            *outPropertyGroup = VehiclePropertyGroup::SYSTEM;
-            break;
-        case 'V':  // Fall through.
-        case 'v':
-            *outPropertyGroup = VehiclePropertyGroup::VENDOR;
-            break;
-        default:
-            ALOGW("Unexpected group: %c", group);
-            return false;
-    }
-    return true;
-}
-
-bool AccessControlConfigParser::parsePropertyId(
-        const std::string& strPropId,
-        VehiclePropertyGroup propertyGroup,
-        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());
-        return false;
-    }
-    propId |= static_cast<int>(propertyGroup);
-    auto it = mStrippedToVehiclePropertyMap.find(propId);
-    if (it == mStrippedToVehiclePropertyMap.end()) {
-        ALOGW("Property Id not found or not supported: 0x%x", propId);
-        return false;
-    }
-    *outVehicleProperty = it->second;
-    return true;
-}
-
-bool AccessControlConfigParser::parseInt(const char* strValue,
-                                         int* outIntValue) {
-    char* end;
-    long num = std::strtol(strValue, &end, 0 /* auto detect base */);
-    bool success = *end == 0 && errno != ERANGE;
-    if (success) {
-        *outIntValue = static_cast<int>(num);
-    }
-
-    return success;
-}
-
-bool AccessControlConfigParser::parseUid(const std::string& strUid,
-                                         unsigned* outUid) const {
-    auto element = mUidMap.find(strUid);
-    if (element != mUidMap.end()) {
-        *outUid = element->second;
-    } else {
-        int val;
-        if (!parseInt(strUid.c_str(), &val)) {
-            ALOGW("Failed to convert UID '%s' to integer", strUid.c_str());
-            return false;
-        }
-        *outUid = static_cast<unsigned>(val);
-    }
-    return true;
-}
-
-bool AccessControlConfigParser::parseAccess(
-        const std::string& strAccess, VehiclePropertyAccess* outAccess) const {
-    if (strAccess.size() == 0 || strAccess.size() > 2) {
-        ALOGW("Unknown access mode '%s'", strAccess.c_str());
-        return false;
-    }
-    int32_t access = static_cast<int32_t>(VehiclePropertyAccess::NONE);
-    for (char c : strAccess) {
-        if (c == 'R' || c == 'r') {
-            access |= VehiclePropertyAccess::READ;
-        } else if (c == 'W' || c == 'w') {
-            access |= VehiclePropertyAccess::WRITE;
-        } else {
-            ALOGW("Unknown access mode: %c", c);
-            return false;
-        }
-    }
-    *outAccess = static_cast<VehiclePropertyAccess>(access);
-    return true;
-}
-
-void AccessControlConfigParser::split(const std::string& line,
-                                      std::list<std::string>* outTokens) {
-    outTokens->clear();
-    std::istringstream iss(line);
-
-    while (!iss.eof()) {
-        std::string token;
-        iss >> token;
-        outTokens->push_back(std::move(token));
-    }
-}
-
-std::string AccessControlConfigParser::readNextToken(
-        std::list<std::string>* tokens) const {
-    if (tokens->empty()) {
-        return "";
-    }
-
-    std::string token = tokens->front();
-    tokens->pop_front();
-    return token;
-}
-
-}  // namespace V2_0
-}  // namespace vehicle
-}  // namespace automotive
-}  // namespace hardware
-}  // namespace android
diff --git a/automotive/vehicle/2.0/default/common/src/SubscriptionManager.cpp b/automotive/vehicle/2.0/default/common/src/SubscriptionManager.cpp
index 4493a41..e0f3f31 100644
--- a/automotive/vehicle/2.0/default/common/src/SubscriptionManager.cpp
+++ b/automotive/vehicle/2.0/default/common/src/SubscriptionManager.cpp
@@ -232,10 +232,8 @@
                   __func__, callback.get(), res.description().c_str());
             return nullptr;
         }
-        IPCThreadState* self = IPCThreadState::self();
-        pid_t pid = self->getCallingPid();
-        uid_t uid = self->getCallingUid();
-        sp<HalClient> client = new HalClient(callback, pid, uid);
+
+        sp<HalClient> client = new HalClient(callback);
         mClients.emplace(callback, client);
         return client;
     } else {
diff --git a/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp b/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp
index 8906f6e..f452be8 100644
--- a/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp
+++ b/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp
@@ -18,10 +18,10 @@
 
 #include "VehicleHalManager.h"
 
+#include <cmath>
 #include <fstream>
 
 #include <android/log.h>
-#include <private/android_filesystem_config.h>
 
 #include "VehicleUtils.h"
 
@@ -84,7 +84,7 @@
         return Void();
     }
 
-    if (!checkReadPermission(*config, getCaller())) {
+    if (!checkReadPermission(*config)) {
         _hidl_cb(StatusCode::ACCESS_DENIED, kEmptyValue);
         return Void();
     }
@@ -105,7 +105,7 @@
         return StatusCode::INVALID_ARG;
     }
 
-    if (!checkWritePermission(*config, getCaller())) {
+    if (!checkWritePermission(*config)) {
         return StatusCode::ACCESS_DENIED;
     }
 
@@ -119,7 +119,6 @@
 Return<StatusCode> VehicleHalManager::subscribe(const sp<IVehicleCallback> &callback,
                                                 const hidl_vec<SubscribeOptions> &options) {
     hidl_vec<SubscribeOptions> verifiedOptions(options);
-    auto caller = getCaller();
     for (size_t i = 0; i < verifiedOptions.size(); i++) {
         SubscribeOptions& ops = verifiedOptions[i];
         auto prop = ops.propId;
@@ -136,10 +135,6 @@
             return StatusCode::INVALID_ARG;
         }
 
-        if (!checkAcl(caller.uid, config->prop, VehiclePropertyAccess::READ)) {
-            return StatusCode::ACCESS_DENIED;
-        }
-
         if (!isSubscribable(*config, ops.flags)) {
             ALOGE("Failed to subscribe: property 0x%x is not subscribable",
                   prop);
@@ -209,13 +204,6 @@
     for (const auto& config : supportedPropConfigs) {
         supportedProperties.push_back(config.prop);
     }
-
-    AccessControlConfigParser aclParser(supportedProperties);
-    const char* configs[] = { "/system/etc/vehicle_access.conf",
-                              "/vendor/etc/vehicle_access.conf" };
-    for (const char* filename : configs) {
-        readAndParseAclConfig(filename, &aclParser, &mPropertyAclMap);
-    }
 }
 
 VehicleHalManager::~VehicleHalManager() {
@@ -317,39 +305,22 @@
     return true;
 }
 
-bool VehicleHalManager::checkAcl(uid_t callerUid, int32_t propertyId,
-                                 VehiclePropertyAccess requiredAccess) const {
-    if (callerUid == AID_SYSTEM && isSystemProperty(propertyId)) {
-        return true;
-    }
-
-    auto range = mPropertyAclMap.equal_range(propertyId);
-    for (auto it = range.first; it != range.second; ++it) {
-        auto& acl = it->second;
-        if (acl.uid == callerUid && (acl.access & requiredAccess)) {
-            return true;
-        }
-    }
-    return false;
-}
-
-bool VehicleHalManager::checkWritePermission(const VehiclePropConfig &config,
-                                             const Caller& caller) const {
+bool VehicleHalManager::checkWritePermission(const VehiclePropConfig &config) const {
     if (!(config.access & VehiclePropertyAccess::WRITE)) {
         ALOGW("Property 0%x has no write access", config.prop);
         return false;
+    } else {
+        return true;
     }
-    return checkAcl(caller.uid, config.prop, VehiclePropertyAccess::WRITE);
 }
 
-bool VehicleHalManager::checkReadPermission(const VehiclePropConfig &config,
-                                            const Caller& caller) const {
+bool VehicleHalManager::checkReadPermission(const VehiclePropConfig &config) const {
     if (!(config.access & VehiclePropertyAccess::READ)) {
         ALOGW("Property 0%x has no read access", config.prop);
         return false;
+    } else {
+        return true;
     }
-
-    return checkAcl(caller.uid, config.prop, VehiclePropertyAccess::READ);
 }
 
 void VehicleHalManager::handlePropertySetEvent(const VehiclePropValue& value) {
@@ -366,26 +337,6 @@
            ? &mConfigIndex->getConfig(prop) : nullptr;
 }
 
-Caller VehicleHalManager::getCaller() {
-    Caller caller;
-    IPCThreadState* self = IPCThreadState::self();
-    caller.pid = self->getCallingPid();
-    caller.uid = self->getCallingUid();
-
-    return caller;
-}
-
-void VehicleHalManager::readAndParseAclConfig(const char* filename,
-                                              AccessControlConfigParser* parser,
-                                              PropertyAclMap* outAclMap) {
-    std::ifstream file(filename);
-    if (file.is_open()) {
-        ALOGI("Parsing file: %s", filename);
-        parser->parseFromStream(&file, outAclMap);
-        file.close();
-    }
-}
-
 void VehicleHalManager::onAllClientsUnsubscribed(int32_t propertyId) {
     mHal->unsubscribe(propertyId);
 }
diff --git a/automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp b/automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
deleted file mode 100644
index d9611c0..0000000
--- a/automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <gtest/gtest.h>
-#include <memory>
-#include <fstream>
-#include <unordered_set>
-
-#include "vhal_v2_0/AccessControlConfigParser.h"
-#include "vhal_v2_0/VehicleUtils.h"
-
-namespace android {
-namespace hardware {
-namespace automotive {
-namespace vehicle {
-namespace V2_0 {
-
-namespace {
-
-class AccessControlConfigParserTest : public ::testing::Test {
-protected:
-    void SetUp() override {
-        std::vector<int32_t> supportedProperties {
-            toInt(VehicleProperty::HVAC_FAN_SPEED),
-            toInt(VehicleProperty::HVAC_FAN_DIRECTION),
-        };
-        parser.reset(new AccessControlConfigParser(supportedProperties));
-    }
-public:
-    PropertyAclMap aclMap;
-    std::unique_ptr<AccessControlConfigParser> parser;
-};
-
-TEST_F(AccessControlConfigParserTest, basicParsing) {
-    std::stringstream file;
-    file << "S:0x0500 1000 RW" << std::endl;
-
-    ASSERT_TRUE(parser->parseFromStream(&file, &aclMap));
-
-    ASSERT_EQ(1u, aclMap.size());
-    auto it = aclMap.find(toInt(VehicleProperty::HVAC_FAN_SPEED));
-    ASSERT_NE(aclMap.end(), it);
-    ASSERT_EQ(VehiclePropertyAccess::READ_WRITE, it->second.access);
-    ASSERT_EQ(toInt(VehicleProperty::HVAC_FAN_SPEED), it->second.propId);
-    ASSERT_EQ(1000u, it->second.uid);
-}
-
-TEST_F(AccessControlConfigParserTest, multipleUids) {
-    std::stringstream file;
-    file << "Set AID_AUDIO 1004" << std::endl
-            << "Set AID_SYSTEM 1000" << std::endl
-            << "S:0x0500 AID_SYSTEM RW" << std::endl
-            << "S:0x0500 AID_AUDIO RW" << std::endl
-            << "S:0x0500 0xbeef R" << std::endl;  // Read-only.
-
-    std::unordered_set<unsigned> expectedUids {1000, 1004, 0xbeef};
-
-    ASSERT_TRUE(parser->parseFromStream(&file, &aclMap));
-
-    auto range = aclMap.equal_range(toInt(VehicleProperty::HVAC_FAN_SPEED));
-    for (auto it = range.first; it != range.second; ++it) {
-        auto& acl = it->second;
-
-        ASSERT_EQ(1u, expectedUids.count(acl.uid))
-                << " uid: " << std::hex << acl.uid;
-
-        if (acl.uid == 0xbeef) {
-            ASSERT_EQ(VehiclePropertyAccess::READ, acl.access);
-        } else {
-            ASSERT_EQ(VehiclePropertyAccess::READ_WRITE, acl.access);
-        }
-    }
-}
-
-TEST_F(AccessControlConfigParserTest, fileContainsJunk) {
-    std::stringstream file;
-    file << "This string will be ignored with warning in the log" << std::endl
-         << "# However comments are quit legitimate" << std::endl
-         << "S:0x0500 0xbeef R # YAY" << std::endl;
-
-    ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
-
-    ASSERT_EQ(1u, aclMap.size());
-    auto it = aclMap.find(toInt(VehicleProperty::HVAC_FAN_SPEED));
-    ASSERT_NE(aclMap.end(), it);
-    ASSERT_EQ(VehiclePropertyAccess::READ, it->second.access);
-    ASSERT_EQ(toInt(VehicleProperty::HVAC_FAN_SPEED), it->second.propId);
-    ASSERT_EQ(0xBEEFu, it->second.uid);
-}
-
-TEST_F(AccessControlConfigParserTest, badIntegerFormat) {
-    std::stringstream file;
-    file << "S:0x0500 A12 RW " << std::endl;
-
-    ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
-    ASSERT_EQ(0u, aclMap.size());
-}
-
-TEST_F(AccessControlConfigParserTest, ignoreNotSupportedProperties) {
-    std::stringstream file;
-    file << "S:0x0666 1000 RW " << std::endl;
-
-    ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
-    ASSERT_EQ(0u, aclMap.size());
-}
-
-TEST_F(AccessControlConfigParserTest, multipleCalls) {
-    std::stringstream configFile;
-    configFile << "S:0x0500 1000 RW" << std::endl;
-
-    ASSERT_TRUE(parser->parseFromStream(&configFile, &aclMap));
-    ASSERT_EQ(1u, aclMap.size());
-
-    std::stringstream configFile2;
-    configFile2 << "S:0x0501 1004 RW" << std::endl;
-    ASSERT_TRUE(parser->parseFromStream(&configFile2, &aclMap));
-    ASSERT_EQ(2u, aclMap.size());
-
-    auto it = aclMap.find(toInt(VehicleProperty::HVAC_FAN_SPEED));
-    ASSERT_NE(aclMap.end(), it);
-    ASSERT_EQ(VehiclePropertyAccess::READ_WRITE, it->second.access);
-    ASSERT_EQ(toInt(VehicleProperty::HVAC_FAN_SPEED), it->second.propId);
-    ASSERT_EQ(1000u, it->second.uid);
-
-    it = aclMap.find(toInt(VehicleProperty::HVAC_FAN_DIRECTION));
-    ASSERT_NE(aclMap.end(), it);
-    ASSERT_EQ(VehiclePropertyAccess::READ_WRITE, it->second.access);
-    ASSERT_EQ(toInt(VehicleProperty::HVAC_FAN_DIRECTION), it->second.propId);
-    ASSERT_EQ(1004u, it->second.uid);
-}
-
-
-}  // namespace anonymous
-
-}  // namespace V2_0
-}  // namespace vehicle
-}  // namespace automotive
-}  // namespace hardware
-}  // namespace android
diff --git a/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp b/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
index b5cdf5c..04335b5 100644
--- a/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
@@ -452,8 +452,8 @@
     HalClientVector clients;
     sp<IVehicleCallback> callback1 = new MockedVehicleCallback();
 
-    sp<HalClient> c1 = new HalClient(callback1, 10, 20);
-    sp<HalClient> c2 = new HalClient(callback1, 10, 20);
+    sp<HalClient> c1 = new HalClient(callback1);
+    sp<HalClient> c2 = new HalClient(callback1);
 
     clients.addOrUpdate(c1);
     clients.addOrUpdate(c1);
diff --git a/automotive/vehicle/2.1/default/Android.mk b/automotive/vehicle/2.1/default/Android.mk
index 3075956..51cb146 100644
--- a/automotive/vehicle/2.1/default/Android.mk
+++ b/automotive/vehicle/2.1/default/Android.mk
@@ -33,7 +33,6 @@
     $(LOCAL_PATH)/common/include
 
 LOCAL_SHARED_LIBRARIES := \
-    libbinder \
     libhidlbase \
     libhidltransport \
     libhwbinder \
@@ -71,7 +70,6 @@
 
 LOCAL_SHARED_LIBRARIES := \
     libbase \
-    libbinder \
     libhidlbase \
     libhidltransport \
     libhwbinder \
@@ -107,7 +105,6 @@
 
 LOCAL_SHARED_LIBRARIES := \
     libbase \
-    libbinder \
     libhidlbase \
     libhidltransport \
     libhwbinder \
diff --git a/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp b/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp
index 9a4efae..d699f21 100644
--- a/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp
+++ b/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp
@@ -23,9 +23,8 @@
 #include <hardware/bluetooth.h>
 #include <utils/Log.h>
 
+#include <VtsHalHidlTargetCallbackBase.h>
 #include <VtsHalHidlTargetTestBase.h>
-#include <condition_variable>
-#include <mutex>
 #include <queue>
 
 using ::android::hardware::bluetooth::V1_0::IBluetoothHci;
@@ -92,6 +91,11 @@
 #define ACL_BROADCAST_ACTIVE_SLAVE (0x1 << 4)
 #define ACL_PACKET_BOUNDARY_COMPLETE (0x3 << 6)
 
+constexpr char kCallbackNameAclEventReceived[] = "aclDataReceived";
+constexpr char kCallbackNameHciEventReceived[] = "hciEventReceived";
+constexpr char kCallbackNameInitializationComplete[] = "initializationComplete";
+constexpr char kCallbackNameScoEventReceived[] = "scoDataReceived";
+
 class ThroughputLogger {
  public:
   ThroughputLogger(std::string task)
@@ -121,7 +125,8 @@
  public:
   virtual void SetUp() override {
     // currently test passthrough mode only
-    bluetooth = ::testing::VtsHalHidlTargetTestBase::getService<IBluetoothHci>();
+    bluetooth =
+        ::testing::VtsHalHidlTargetTestBase::getService<IBluetoothHci>();
     ASSERT_NE(bluetooth, nullptr);
     ALOGI("%s: getService() for bluetooth is %s", __func__,
           bluetooth->isRemote() ? "remote" : "local");
@@ -135,10 +140,6 @@
     max_sco_data_packets = 0;
 
     initialized = false;
-    initialized_count = 0;
-    event_count = 0;
-    acl_count = 0;
-    sco_count = 0;
     event_cb_count = 0;
     acl_cb_count = 0;
     sco_cb_count = 0;
@@ -146,7 +147,18 @@
     ASSERT_EQ(initialized, false);
     bluetooth->initialize(bluetooth_cb);
 
-    wait_for_init_callback();
+    bluetooth_cb->SetWaitTimeout(kCallbackNameInitializationComplete,
+                                 WAIT_FOR_INIT_TIMEOUT);
+    bluetooth_cb->SetWaitTimeout(kCallbackNameHciEventReceived,
+                                 WAIT_FOR_HCI_EVENT_TIMEOUT);
+    bluetooth_cb->SetWaitTimeout(kCallbackNameAclEventReceived,
+                                 WAIT_FOR_ACL_DATA_TIMEOUT);
+    bluetooth_cb->SetWaitTimeout(kCallbackNameScoEventReceived,
+                                 WAIT_FOR_SCO_DATA_TIMEOUT);
+
+    EXPECT_TRUE(
+        bluetooth_cb->WaitForCallback(kCallbackNameInitializationComplete)
+            .no_timeout);
 
     ASSERT_EQ(initialized, true);
   }
@@ -171,82 +183,10 @@
   void wait_for_command_complete_event(hidl_vec<uint8_t> cmd);
   int wait_for_completed_packets_event(uint16_t handle);
 
-  // Inform the test about the initialization callback
-  inline void notify_initialized() {
-    std::unique_lock<std::mutex> lock(initialized_mutex);
-    initialized_count++;
-    initialized_condition.notify_one();
-  }
-
-  // Test code calls this function to wait for the init callback
-  inline void wait_for_init_callback() {
-    std::unique_lock<std::mutex> lock(initialized_mutex);
-
-    auto start_time = std::chrono::steady_clock::now();
-    while (initialized_count == 0)
-      if (initialized_condition.wait_until(lock,
-                                     start_time + WAIT_FOR_INIT_TIMEOUT) ==
-          std::cv_status::timeout)
-        return;
-    initialized_count--;
-  }
-
-  // Inform the test about an event callback
-  inline void notify_event_received() {
-    std::unique_lock<std::mutex> lock(event_mutex);
-    event_count++;
-    event_condition.notify_one();
-  }
-
-  // Test code calls this function to wait for an event callback
-  inline void wait_for_event() {
-    std::unique_lock<std::mutex> lock(event_mutex);
-
-    auto start_time = std::chrono::steady_clock::now();
-    while (event_count == 0)
-      if (event_condition.wait_until(lock,
-                                     start_time + WAIT_FOR_HCI_EVENT_TIMEOUT) ==
-          std::cv_status::timeout)
-        return;
-    event_count--;
-  }
-
-  // Inform the test about an acl data callback
-  inline void notify_acl_data_received() {
-    std::unique_lock<std::mutex> lock(acl_mutex);
-    acl_count++;
-    acl_condition.notify_one();
-  }
-
-  // Test code calls this function to wait for an acl data callback
-  inline void wait_for_acl() {
-    std::unique_lock<std::mutex> lock(acl_mutex);
-
-    while (acl_count == 0)
-      acl_condition.wait_until(
-          lock, std::chrono::steady_clock::now() + WAIT_FOR_ACL_DATA_TIMEOUT);
-    acl_count--;
-  }
-
-  // Inform the test about a sco data callback
-  inline void notify_sco_data_received() {
-    std::unique_lock<std::mutex> lock(sco_mutex);
-    sco_count++;
-    sco_condition.notify_one();
-  }
-
-  // Test code calls this function to wait for a sco data callback
-  inline void wait_for_sco() {
-    std::unique_lock<std::mutex> lock(sco_mutex);
-
-    while (sco_count == 0)
-      sco_condition.wait_until(
-          lock, std::chrono::steady_clock::now() + WAIT_FOR_SCO_DATA_TIMEOUT);
-    sco_count--;
-  }
-
   // A simple test implementation of BluetoothHciCallbacks.
-  class BluetoothHciCallbacks : public IBluetoothHciCallbacks {
+  class BluetoothHciCallbacks
+      : public ::testing::VtsHalHidlTargetCallbackBase<BluetoothHidlTest>,
+        public IBluetoothHciCallbacks {
     BluetoothHidlTest& parent_;
 
    public:
@@ -256,7 +196,7 @@
 
     Return<void> initializationComplete(Status status) override {
       parent_.initialized = (status == Status::SUCCESS);
-      parent_.notify_initialized();
+      NotifyFromCallback(kCallbackNameInitializationComplete);
       ALOGV("%s (status = %d)", __func__, static_cast<int>(status));
       return Void();
     };
@@ -265,7 +205,7 @@
         const ::android::hardware::hidl_vec<uint8_t>& event) override {
       parent_.event_cb_count++;
       parent_.event_queue.push(event);
-      parent_.notify_event_received();
+      NotifyFromCallback(kCallbackNameHciEventReceived);
       ALOGV("Event received (length = %d)", static_cast<int>(event.size()));
       return Void();
     };
@@ -274,7 +214,7 @@
         const ::android::hardware::hidl_vec<uint8_t>& data) override {
       parent_.acl_cb_count++;
       parent_.acl_queue.push(data);
-      parent_.notify_acl_data_received();
+      NotifyFromCallback(kCallbackNameAclEventReceived);
       return Void();
     };
 
@@ -282,13 +222,13 @@
         const ::android::hardware::hidl_vec<uint8_t>& data) override {
       parent_.sco_cb_count++;
       parent_.sco_queue.push(data);
-      parent_.notify_sco_data_received();
+      NotifyFromCallback(kCallbackNameScoEventReceived);
       return Void();
     };
   };
 
   sp<IBluetoothHci> bluetooth;
-  sp<IBluetoothHciCallbacks> bluetooth_cb;
+  sp<BluetoothHciCallbacks> bluetooth_cb;
   std::queue<hidl_vec<uint8_t>> event_queue;
   std::queue<hidl_vec<uint8_t>> acl_queue;
   std::queue<hidl_vec<uint8_t>> sco_queue;
@@ -303,20 +243,6 @@
   int max_sco_data_packet_length;
   int max_acl_data_packets;
   int max_sco_data_packets;
-
- private:
-  std::mutex initialized_mutex;
-  std::mutex event_mutex;
-  std::mutex sco_mutex;
-  std::mutex acl_mutex;
-  std::condition_variable initialized_condition;
-  std::condition_variable event_condition;
-  std::condition_variable sco_condition;
-  std::condition_variable acl_condition;
-  int initialized_count;
-  int event_count;
-  int sco_count;
-  int acl_count;
 };
 
 // A class for test environment setup (kept since this file is a template).
@@ -334,11 +260,12 @@
   int status_event_count = 0;
   hidl_vec<uint8_t> event;
   do {
-    wait_for_event();
-    EXPECT_LT(static_cast<size_t>(0), event_queue.size());
-    if (event_queue.size() == 0) {
-      event.resize(0);
-      break;
+      EXPECT_TRUE(bluetooth_cb->WaitForCallback(kCallbackNameHciEventReceived)
+                      .no_timeout);
+      EXPECT_LT(static_cast<size_t>(0), event_queue.size());
+      if (event_queue.size() == 0) {
+          event.resize(0);
+          break;
     }
     event = event_queue.front();
     event_queue.pop();
@@ -366,7 +293,8 @@
   hidl_vec<uint8_t> cmd = COMMAND_HCI_READ_BUFFER_SIZE;
   bluetooth->sendHciCommand(cmd);
 
-  wait_for_event();
+  EXPECT_TRUE(
+      bluetooth_cb->WaitForCallback(kCallbackNameHciEventReceived).no_timeout);
 
   EXPECT_LT(static_cast<size_t>(0), event_queue.size());
   if (event_queue.size() == 0) return;
@@ -420,7 +348,8 @@
     bluetooth->sendHciCommand(cmd);
 
     // Check the loopback of the HCI packet
-    wait_for_event();
+    EXPECT_TRUE(bluetooth_cb->WaitForCallback(kCallbackNameHciEventReceived)
+                    .no_timeout);
     hidl_vec<uint8_t> event = event_queue.front();
     event_queue.pop();
     size_t compare_length =
@@ -456,7 +385,8 @@
     bluetooth->sendScoData(sco_vector);
 
     // Check the loopback of the SCO packet
-    wait_for_sco();
+    EXPECT_TRUE(bluetooth_cb->WaitForCallback(kCallbackNameScoEventReceived)
+                    .no_timeout);
     hidl_vec<uint8_t> sco_loopback = sco_queue.front();
     sco_queue.pop();
 
@@ -501,7 +431,8 @@
     bluetooth->sendAclData(acl_vector);
 
     // Check the loopback of the ACL packet
-    wait_for_acl();
+    EXPECT_TRUE(bluetooth_cb->WaitForCallback(kCallbackNameAclEventReceived)
+                    .no_timeout);
     hidl_vec<uint8_t> acl_loopback = acl_queue.front();
     acl_queue.pop();
 
@@ -527,19 +458,20 @@
 
 // Return the number of completed packets reported by the controller.
 int BluetoothHidlTest::wait_for_completed_packets_event(uint16_t handle) {
-  wait_for_event();
-  int packets_processed = 0;
-  while (event_queue.size() > 0) {
-    hidl_vec<uint8_t> event = event_queue.front();
-    event_queue.pop();
+    EXPECT_TRUE(bluetooth_cb->WaitForCallback(kCallbackNameHciEventReceived)
+                    .no_timeout);
+    int packets_processed = 0;
+    while (event_queue.size() > 0) {
+        hidl_vec<uint8_t> event = event_queue.front();
+        event_queue.pop();
 
-    EXPECT_EQ(EVENT_NUMBER_OF_COMPLETED_PACKETS, event[EVENT_CODE_BYTE]);
-    EXPECT_EQ(1, event[EVENT_NUMBER_OF_COMPLETED_PACKETS_NUM_HANDLES]);
+        EXPECT_EQ(EVENT_NUMBER_OF_COMPLETED_PACKETS, event[EVENT_CODE_BYTE]);
+        EXPECT_EQ(1, event[EVENT_NUMBER_OF_COMPLETED_PACKETS_NUM_HANDLES]);
 
-    uint16_t event_handle = event[3] + (event[4] << 8);
-    EXPECT_EQ(handle, event_handle);
+        uint16_t event_handle = event[3] + (event[4] << 8);
+        EXPECT_EQ(handle, event_handle);
 
-    packets_processed += event[5] + (event[6] << 8);
+        packets_processed += event[5] + (event[6] << 8);
   }
   return packets_processed;
 }
@@ -554,32 +486,34 @@
   int connection_event_count = 0;
   hidl_vec<uint8_t> event;
   do {
-    wait_for_event();
-    event = event_queue.front();
-    event_queue.pop();
-    EXPECT_GT(event.size(),
-              static_cast<size_t>(EVENT_COMMAND_COMPLETE_STATUS_BYTE));
-    if (event[EVENT_CODE_BYTE] == EVENT_CONNECTION_COMPLETE) {
+      EXPECT_TRUE(bluetooth_cb->WaitForCallback(kCallbackNameHciEventReceived)
+                      .no_timeout);
+      event = event_queue.front();
+      event_queue.pop();
       EXPECT_GT(event.size(),
-                static_cast<size_t>(EVENT_CONNECTION_COMPLETE_TYPE));
-      EXPECT_EQ(event[EVENT_LENGTH_BYTE],
-                EVENT_CONNECTION_COMPLETE_PARAM_LENGTH);
-      uint8_t connection_type = event[EVENT_CONNECTION_COMPLETE_TYPE];
+                static_cast<size_t>(EVENT_COMMAND_COMPLETE_STATUS_BYTE));
+      if (event[EVENT_CODE_BYTE] == EVENT_CONNECTION_COMPLETE) {
+          EXPECT_GT(event.size(),
+                    static_cast<size_t>(EVENT_CONNECTION_COMPLETE_TYPE));
+          EXPECT_EQ(event[EVENT_LENGTH_BYTE],
+                    EVENT_CONNECTION_COMPLETE_PARAM_LENGTH);
+          uint8_t connection_type = event[EVENT_CONNECTION_COMPLETE_TYPE];
 
-      EXPECT_TRUE(connection_type == EVENT_CONNECTION_COMPLETE_TYPE_SCO ||
-                  connection_type == EVENT_CONNECTION_COMPLETE_TYPE_ACL);
+          EXPECT_TRUE(connection_type == EVENT_CONNECTION_COMPLETE_TYPE_SCO ||
+                      connection_type == EVENT_CONNECTION_COMPLETE_TYPE_ACL);
 
-      // Save handles
-      uint16_t handle = event[EVENT_CONNECTION_COMPLETE_HANDLE_LSBYTE] |
-                        event[EVENT_CONNECTION_COMPLETE_HANDLE_LSBYTE + 1] << 8;
-      if (connection_type == EVENT_CONNECTION_COMPLETE_TYPE_SCO)
-        sco_handles.push_back(handle);
-      else
-        acl_handles.push_back(handle);
+          // Save handles
+          uint16_t handle = event[EVENT_CONNECTION_COMPLETE_HANDLE_LSBYTE] |
+                            event[EVENT_CONNECTION_COMPLETE_HANDLE_LSBYTE + 1]
+                                << 8;
+          if (connection_type == EVENT_CONNECTION_COMPLETE_TYPE_SCO)
+              sco_handles.push_back(handle);
+          else
+              acl_handles.push_back(handle);
 
-      ALOGD("Connect complete type = %d handle = %d",
-            event[EVENT_CONNECTION_COMPLETE_TYPE], handle);
-      connection_event_count++;
+          ALOGD("Connect complete type = %d handle = %d",
+                event[EVENT_CONNECTION_COMPLETE_TYPE], handle);
+          connection_event_count++;
     }
   } while (event[EVENT_CODE_BYTE] == EVENT_CONNECTION_COMPLETE);
 
@@ -592,7 +526,7 @@
 }
 
 // Empty test: Initialize()/Close() are called in SetUp()/TearDown().
-TEST_F(BluetoothHidlTest, InitializeAndClose) { }
+TEST_F(BluetoothHidlTest, InitializeAndClose) {}
 
 // Send an HCI Reset with sendHciCommand and wait for a command complete event.
 TEST_F(BluetoothHidlTest, HciReset) {
@@ -607,7 +541,8 @@
   hidl_vec<uint8_t> cmd = COMMAND_HCI_READ_LOCAL_VERSION_INFORMATION;
   bluetooth->sendHciCommand(cmd);
 
-  wait_for_event();
+  EXPECT_TRUE(
+      bluetooth_cb->WaitForCallback(kCallbackNameHciEventReceived).no_timeout);
 
   hidl_vec<uint8_t> event = event_queue.front();
   event_queue.pop();
@@ -627,7 +562,8 @@
   hidl_vec<uint8_t> cmd = COMMAND_HCI_SHOULD_BE_UNKNOWN;
   bluetooth->sendHciCommand(cmd);
 
-  wait_for_event();
+  EXPECT_TRUE(
+      bluetooth_cb->WaitForCallback(kCallbackNameHciEventReceived).no_timeout);
 
   hidl_vec<uint8_t> event = event_queue.front();
   event_queue.pop();
diff --git a/camera/device/1.0/ICameraDevice.hal b/camera/device/1.0/ICameraDevice.hal
index 52d6cf0..d4aa8cc 100644
--- a/camera/device/1.0/ICameraDevice.hal
+++ b/camera/device/1.0/ICameraDevice.hal
@@ -328,6 +328,20 @@
     releaseRecordingFrameHandle(MemoryId memId, uint32_t bufferIndex, handle frame);
 
     /**
+     * Release a batch of record frames previously returned by CAMERA_MSG_VIDEO_FRAME
+     * in handleCallbackTimestampBatch.
+     *
+     * It is camera HAL client's responsibility to release video recording
+     * frames sent out by the camera HAL before the camera HAL receives a call
+     * to disableMsgType(CAMERA_MSG_VIDEO_FRAME). After it receives the call to
+     * disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's
+     * responsibility to manage the life-cycle of the video recording frames.
+     *
+     * @param batch A batch of recording frames to be released by camera HAL.
+     */
+    releaseRecordingFrameHandleBatch(vec<VideoFrameMessage> batch);
+
+    /**
      * Start auto focus.
      *
      * The notification callback routine is called with
diff --git a/camera/device/1.0/ICameraDeviceCallback.hal b/camera/device/1.0/ICameraDeviceCallback.hal
index 1b0db24..1dfcd80 100644
--- a/camera/device/1.0/ICameraDeviceCallback.hal
+++ b/camera/device/1.0/ICameraDeviceCallback.hal
@@ -92,10 +92,24 @@
      * @param timestamp The time this buffer was captured by the camera, in
      *     nanoseconds.
      *
-     * @return frameId a frame ID to be used with releaseRecordingFrameId later
-     *
      */
     handleCallbackTimestamp(DataCallbackMsg msgType, handle frameData, MemoryId data,
             uint32_t bufferIndex, int64_t timestamp);
 
+    /**
+     * Send a batch of image data buffer to the camera service, with timestamps
+     *
+     * This callback can be used to send multiple frames to camera framework in one callback, which
+     * reduce number of callbacks in performance intensive use cases, such as high speed video
+     * recording. The HAL must not mix use of this method with handleCallbackTimestamp in one
+     * recording session (between startRecording and stopRecording)
+     *
+     * @param msgType The kind of image buffer data this call represents.
+     * @param batch a vector messages. Each message contains a image buffer and a timestamp. The
+     *     messages must be ordered in time from lower index to higher index, so that timestamp of
+     *     i-th message is always smaller than i+1-th message.
+     *
+     */
+    handleCallbackTimestampBatch(DataCallbackMsg msgType, vec<HandleTimestampMessage> batch);
+
 };
diff --git a/camera/device/1.0/ICameraDevicePreviewCallback.hal b/camera/device/1.0/ICameraDevicePreviewCallback.hal
index 4c9b517..e772301 100644
--- a/camera/device/1.0/ICameraDevicePreviewCallback.hal
+++ b/camera/device/1.0/ICameraDevicePreviewCallback.hal
@@ -17,7 +17,6 @@
 package android.hardware.camera.device@1.0;
 
 import android.hardware.camera.common@1.0::types;
-import android.hardware.graphics.allocator@2.0::types;
 import android.hardware.graphics.common@1.0::types;
 
 /**
@@ -89,7 +88,7 @@
      *
      * @return Status The status code for this operation.
      */
-    setUsage(ProducerUsage usage) generates (Status status);
+    setUsage(ProducerUsageFlags usage) generates (Status status);
 
     /**
      * Set the expected buffering mode for the preview output.
diff --git a/camera/device/1.0/default/Android.bp b/camera/device/1.0/default/Android.bp
index 5688fc1..a2fd0b0 100644
--- a/camera/device/1.0/default/Android.bp
+++ b/camera/device/1.0/default/Android.bp
@@ -22,8 +22,8 @@
         "libbinder",
     ],
     static_libs: [
-        "android.hardware.camera.common@1.0-helper"
+        "android.hardware.camera.common@1.0-helper",
+        "libgrallocusage"
     ],
     export_include_dirs: ["."]
 }
-
diff --git a/camera/device/1.0/default/CameraDevice.cpp b/camera/device/1.0/default/CameraDevice.cpp
index 819525b..5e3fcf2 100644
--- a/camera/device/1.0/default/CameraDevice.cpp
+++ b/camera/device/1.0/default/CameraDevice.cpp
@@ -20,6 +20,8 @@
 #include <hardware/gralloc1.h>
 #include <utils/Trace.h>
 
+#include <grallocusage/GrallocUsageConversion.h>
+
 #include "CameraDevice_1_0.h"
 
 namespace android {
@@ -29,7 +31,6 @@
 namespace V1_0 {
 namespace implementation {
 
-using ::android::hardware::graphics::allocator::V2_0::ProducerUsage;
 using ::android::hardware::graphics::common::V1_0::PixelFormat;
 
 HandleImporter& CameraDevice::sHandleImporter = HandleImporter::getInstance();
@@ -252,7 +253,10 @@
     }
 
     object->cleanUpCirculatingBuffers();
-    return getStatusT(object->mPreviewCallback->setUsage((ProducerUsage) usage));
+    ProducerUsageFlags producerUsage;
+    uint64_t consumerUsage;
+    ::android_convertGralloc0To1Usage(usage, &producerUsage, &consumerUsage);
+    return getStatusT(object->mPreviewCallback->setUsage(producerUsage));
 }
 
 int CameraDevice::sSetSwapInterval(struct preview_stream_ops *w, int interval) {
@@ -420,6 +424,39 @@
     }
 }
 
+void CameraDevice::handleCallbackTimestamp(
+        nsecs_t timestamp, int32_t msg_type,
+        MemoryId memId , unsigned index, native_handle_t* handle) {
+    uint32_t batchSize = 0;
+    {
+        Mutex::Autolock _l(mBatchLock);
+        batchSize = mBatchSize;
+    }
+
+    if (batchSize == 0) { // non-batch mode
+        mDeviceCallback->handleCallbackTimestamp(
+                (DataCallbackMsg) msg_type, handle, memId, index, timestamp);
+    } else { // batch mode
+        Mutex::Autolock _l(mBatchLock);
+        size_t inflightSize = mInflightBatch.size();
+        if (inflightSize == 0) {
+            mBatchMsgType = msg_type;
+        } else if (mBatchMsgType != msg_type) {
+            ALOGE("%s: msg_type change (from %d to %d) is not supported!",
+                    __FUNCTION__, mBatchMsgType, msg_type);
+            return;
+        }
+        mInflightBatch.push_back({handle, memId, index, timestamp});
+
+        // Send batched frames to camera framework
+        if (mInflightBatch.size() >= batchSize) {
+            mDeviceCallback->handleCallbackTimestampBatch(
+                    (DataCallbackMsg) mBatchMsgType, mInflightBatch);
+            mInflightBatch.clear();
+        }
+    }
+}
+
 void CameraDevice::sDataCbTimestamp(nsecs_t timestamp, int32_t msg_type,
         const camera_memory_t *data, unsigned index, void *user) {
     ALOGV("%s", __FUNCTION__);
@@ -450,8 +487,7 @@
             object->mDeviceCallback->dataCallbackTimestamp(
                     (DataCallbackMsg) msg_type, mem->handle.mId, index, timestamp);
         } else {
-            object->mDeviceCallback->handleCallbackTimestamp(
-                    (DataCallbackMsg) msg_type, handle, mem->handle.mId, index, timestamp);
+            object->handleCallbackTimestamp(timestamp, msg_type, mem->handle.mId, index, handle);
         }
     }
 }
@@ -827,6 +863,17 @@
     return Void();
 }
 
+Return<void> CameraDevice::releaseRecordingFrameHandleBatch(
+        const hidl_vec<VideoFrameMessage>& msgs) {
+    ALOGV("%s(%s)", __FUNCTION__, mCameraId.c_str());
+    Mutex::Autolock _l(mLock);
+    for (auto& msg : msgs) {
+        releaseRecordingFrameLocked(
+                msg.data, msg.bufferIndex, msg.frameData.getNativeHandle());
+    }
+    return Void();
+}
+
 Return<Status> CameraDevice::autoFocus() {
     ALOGV("%s(%s)", __FUNCTION__, mCameraId.c_str());
     Mutex::Autolock _l(mLock);
diff --git a/camera/device/1.0/default/CameraDevice_1_0.h b/camera/device/1.0/default/CameraDevice_1_0.h
index 2568f86..ad5f582 100644
--- a/camera/device/1.0/default/CameraDevice_1_0.h
+++ b/camera/device/1.0/default/CameraDevice_1_0.h
@@ -93,6 +93,8 @@
     Return<void> releaseRecordingFrame(uint32_t memId, uint32_t bufferIndex) override;
     Return<void> releaseRecordingFrameHandle(
             uint32_t memId, uint32_t bufferIndex, const hidl_handle& frame) override;
+    Return<void> releaseRecordingFrameHandleBatch(
+            const hidl_vec<VideoFrameMessage>&) override;
     Return<Status> autoFocus() override;
     Return<Status> cancelAutoFocus() override;
     Return<Status> takePicture() override;
@@ -169,6 +171,16 @@
 
     bool mMetadataMode = false;
 
+    mutable Mutex mBatchLock;
+    // Start of protection scope for mBatchLock
+    uint32_t mBatchSize = 0; // 0 for non-batch mode, set to other value to start batching
+    int32_t mBatchMsgType;   // Maybe only allow DataCallbackMsg::VIDEO_FRAME?
+    std::vector<HandleTimestampMessage> mInflightBatch;
+    // End of protection scope for mBatchLock
+
+    void handleCallbackTimestamp(
+            nsecs_t timestamp, int32_t msg_type,
+            MemoryId memId , unsigned index, native_handle_t* handle);
     void releaseRecordingFrameLocked(uint32_t memId, uint32_t bufferIndex, const native_handle_t*);
 
     // shared memory methods
@@ -178,13 +190,13 @@
     // Device callback forwarding methods
     static void sNotifyCb(int32_t msg_type, int32_t ext1, int32_t ext2, void *user);
     static void sDataCb(int32_t msg_type, const camera_memory_t *data, unsigned int index,
-                          camera_frame_metadata_t *metadata, void *user);
+                        camera_frame_metadata_t *metadata, void *user);
     static void sDataCbTimestamp(nsecs_t timestamp, int32_t msg_type,
                                     const camera_memory_t *data, unsigned index, void *user);
 
     // Preview window callback forwarding methods
     static int sDequeueBuffer(struct preview_stream_ops* w,
-                                buffer_handle_t** buffer, int *stride);
+                              buffer_handle_t** buffer, int *stride);
 
     static int sLockBuffer(struct preview_stream_ops* w, buffer_handle_t* buffer);
 
@@ -195,7 +207,7 @@
     static int sSetBufferCount(struct preview_stream_ops* w, int count);
 
     static int sSetBuffersGeometry(struct preview_stream_ops* w,
-                                     int width, int height, int format);
+                                   int width, int height, int format);
 
     static int sSetCrop(struct preview_stream_ops *w, int left, int top, int right, int bottom);
 
diff --git a/camera/device/1.0/types.hal b/camera/device/1.0/types.hal
index bf632d1..0b3445f 100644
--- a/camera/device/1.0/types.hal
+++ b/camera/device/1.0/types.hal
@@ -16,6 +16,10 @@
 
 package android.hardware.camera.device@1.0;
 
+import android.hardware.graphics.allocator@2.0::types;
+
+typedef bitfield<ProducerUsage> ProducerUsageFlags;
+
 enum CameraFacing : uint32_t {
     /** The facing of the camera is opposite to that of the screen. */
     BACK = 0,
@@ -254,3 +258,36 @@
  * between the HAL and the framework.
  */
 typedef uint32_t MemoryId;
+
+/*
+ * Struct containing arguments of ICameraDeviceCallback::handleCallbackTimestamp.
+ * Used to send a batch of messages in ICameraDeviceCallback::handleCallbackTimestampBatch.
+ */
+struct HandleTimestampMessage {
+    // The handle of image buffer data.
+    handle frameData;
+
+    // A memory handle to the buffer containing the data
+    MemoryId data;
+
+    // The offset into the memory handle where the buffer starts.
+    uint32_t bufferIndex;
+
+    // The time this buffer was captured by the camera, in nanoseconds
+    int64_t timestamp;
+};
+
+/*
+ * Struct containing arguments of ICameraDevice::releaseRecordingFrameHandle.
+ * Used by camera framework to send a batch of recording frames back to camera HAL.
+ */
+struct VideoFrameMessage {
+    // The handle of image buffer data.
+    handle frameData;
+
+    // A memory handle to the buffer containing the data
+    MemoryId data;
+
+    // The offset into the memory handle where the buffer starts.
+    uint32_t bufferIndex;
+};
diff --git a/camera/device/3.2/ICameraDeviceSession.hal b/camera/device/3.2/ICameraDeviceSession.hal
index e186c8d..731fc76 100644
--- a/camera/device/3.2/ICameraDeviceSession.hal
+++ b/camera/device/3.2/ICameraDeviceSession.hal
@@ -183,6 +183,11 @@
      * client, the HAL must process the requests in order of lowest index to
      * highest index.
      *
+     * The cachesToRemove argument contains a list of buffer caches (see
+     * StreamBuffer document for more information on buffer cache) to be removed
+     * by camera HAL. Camera HAL must remove these cache entries whether or not
+     * this method returns OK.
+     *
      * The actual request processing is asynchronous, with the results of
      * capture being returned by the HAL through the processCaptureResult()
      * call. This call requires the result metadata to be available, but output
@@ -238,7 +243,8 @@
      *     that HAL processed successfully before HAL runs into an error.
      *
      */
-    processCaptureRequest(vec<CaptureRequest> requests)
+    processCaptureRequest(vec<CaptureRequest> requests,
+            vec<BufferCache> cachesToRemove)
             generates (Status status, uint32_t numRequestProcessed);
 
     /**
diff --git a/camera/device/3.2/default/Android.bp b/camera/device/3.2/default/Android.bp
index e0dc5ff..5a81d41 100644
--- a/camera/device/3.2/default/Android.bp
+++ b/camera/device/3.2/default/Android.bp
@@ -17,7 +17,8 @@
         "libcamera_metadata"
     ],
     static_libs: [
-        "android.hardware.camera.common@1.0-helper"
+        "android.hardware.camera.common@1.0-helper",
+        "libgrallocusage"
     ],
     export_include_dirs: ["."]
 }
diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp
index fb1d1ff..f2f9e5e 100644
--- a/camera/device/3.2/default/CameraDeviceSession.cpp
+++ b/camera/device/3.2/default/CameraDeviceSession.cpp
@@ -611,7 +611,7 @@
                 return Void();
             }
             mStreamMap[id].rotation = (int) requestedConfiguration.streams[i].rotation;
-            mStreamMap[id].usage = (uint32_t) requestedConfiguration.streams[i].usage;
+            mStreamMap[id].usage = convertFromHidlUsage(requestedConfiguration.streams[i].usage);
         }
         streams[i] = &mStreamMap[id];
     }
@@ -678,8 +678,32 @@
     mCirculatingBuffers.erase(id);
 }
 
+void CameraDeviceSession::updateBufferCaches(const hidl_vec<BufferCache>& cachesToRemove) {
+    Mutex::Autolock _l(mInflightLock);
+    for (auto& cache : cachesToRemove) {
+        auto cbsIt = mCirculatingBuffers.find(cache.streamId);
+        if (cbsIt == mCirculatingBuffers.end()) {
+            // The stream could have been removed
+            continue;
+        }
+        CirculatingBuffers& cbs = cbsIt->second;
+        auto it = cbs.find(cache.bufferId);
+        if (it != cbs.end()) {
+            sHandleImporter.freeBuffer(it->second);
+            cbs.erase(it);
+        } else {
+            ALOGE("%s: stream %d buffer %" PRIu64 " is not cached",
+                    __FUNCTION__, cache.streamId, cache.bufferId);
+        }
+    }
+}
+
 Return<void> CameraDeviceSession::processCaptureRequest(
-        const hidl_vec<CaptureRequest>& requests, processCaptureRequest_cb _hidl_cb)  {
+        const hidl_vec<CaptureRequest>& requests,
+        const hidl_vec<BufferCache>& cachesToRemove,
+        processCaptureRequest_cb _hidl_cb)  {
+    updateBufferCaches(cachesToRemove);
+
     uint32_t numRequestProcessed = 0;
     Status s = Status::OK;
     for (size_t i = 0; i < requests.size(); i++, numRequestProcessed++) {
diff --git a/camera/device/3.2/default/CameraDeviceSession.h b/camera/device/3.2/default/CameraDeviceSession.h
index 8923c05..781056e 100644
--- a/camera/device/3.2/default/CameraDeviceSession.h
+++ b/camera/device/3.2/default/CameraDeviceSession.h
@@ -85,7 +85,9 @@
     Return<void> configureStreams(
             const StreamConfiguration& requestedConfiguration, configureStreams_cb _hidl_cb) override;
     Return<void> processCaptureRequest(
-            const hidl_vec<CaptureRequest>& requests, processCaptureRequest_cb _hidl_cb) override;
+            const hidl_vec<CaptureRequest>& requests,
+            const hidl_vec<BufferCache>& cachesToRemove,
+            processCaptureRequest_cb _hidl_cb) override;
     Return<Status> flush() override;
     Return<void> close() override;
 
@@ -234,6 +236,8 @@
 
     void cleanupBuffersLocked(int id);
 
+    void updateBufferCaches(const hidl_vec<BufferCache>& cachesToRemove);
+
     Status processOneCaptureRequest(const CaptureRequest& request);
     /**
      * Static callback forwarding methods from HAL to instance
diff --git a/camera/device/3.2/default/convert.cpp b/camera/device/3.2/default/convert.cpp
index 35676df..c99d903 100644
--- a/camera/device/3.2/default/convert.cpp
+++ b/camera/device/3.2/default/convert.cpp
@@ -15,8 +15,12 @@
  */
 
 #define LOG_TAG "android.hardware.camera.device@3.2-convert-impl"
+#include <inttypes.h>
+
 #include <android/log.h>
 
+#include <grallocusage/GrallocUsageConversion.h>
+
 #include "include/convert.h"
 
 namespace android {
@@ -28,6 +32,7 @@
 
 using ::android::hardware::graphics::common::V1_0::Dataspace;
 using ::android::hardware::graphics::common::V1_0::PixelFormat;
+using ::android::hardware::graphics::allocator::V2_0::ConsumerUsage;
 using ::android::hardware::camera::device::V3_2::ConsumerUsageFlags;
 using ::android::hardware::camera::device::V3_2::ProducerUsageFlags;
 
@@ -66,23 +71,37 @@
     dst->format = (int) src.format;
     dst->data_space = (android_dataspace_t) src.dataSpace;
     dst->rotation = (int) src.rotation;
-    dst->usage = (uint32_t) src.usage;
+    dst->usage = convertFromHidlUsage(src.usage);
     // Fields to be filled by HAL (max_buffers, priv) are initialized to 0
     dst->max_buffers = 0;
     dst->priv = 0;
     return;
 }
 
+uint32_t convertFromHidlUsage(ConsumerUsageFlags usage) {
+    uint32_t dstUsage = 0;
+    dstUsage = ::android_convertGralloc1To0Usage(/*producerUsage*/ 0, usage);
+    // Compatibility workaround - add HW_CAMERA_ZSL when ConsumerUsage.CAMERA is set, to
+    // match pre-HIDL expected usage flags
+    if ( (usage & ConsumerUsage::CAMERA) == static_cast<uint64_t>(ConsumerUsage::CAMERA)) {
+        dstUsage |= GRALLOC_USAGE_HW_CAMERA_ZSL;
+    }
+    return dstUsage;
+}
+
 void convertToHidl(const Camera3Stream* src, HalStream* dst) {
     dst->id = src->mId;
     dst->overrideFormat = (PixelFormat) src->format;
     dst->maxBuffers = src->max_buffers;
+    ConsumerUsageFlags consumerUsage;
+    ProducerUsageFlags producerUsage;
+    ::android_convertGralloc0To1Usage(src->usage, &producerUsage, &consumerUsage);
     if (src->stream_type == CAMERA3_STREAM_OUTPUT) {
         dst->consumerUsage = (ConsumerUsageFlags) 0;
-        dst->producerUsage = (ProducerUsageFlags) src->usage;
+        dst->producerUsage = producerUsage;
     } else if (src->stream_type == CAMERA3_STREAM_INPUT) {
         dst->producerUsage = (ProducerUsageFlags) 0;
-        dst->consumerUsage = (ConsumerUsageFlags) src->usage;
+        dst->consumerUsage = consumerUsage;
     } else {
         //Should not reach here per current HIDL spec, but we might end up adding
         // bi-directional stream to HIDL.
diff --git a/camera/device/3.2/default/include/convert.h b/camera/device/3.2/default/include/convert.h
index 96891f0..7c8e02f 100644
--- a/camera/device/3.2/default/include/convert.h
+++ b/camera/device/3.2/default/include/convert.h
@@ -45,6 +45,8 @@
 void convertFromHidl(const Stream &src, Camera3Stream* dst);
 void convertToHidl(const Camera3Stream* src, HalStream* dst);
 
+uint32_t convertFromHidlUsage(ConsumerUsageFlags usage);
+
 void convertFromHidl(
         buffer_handle_t*, BufferStatus, camera3_stream_t*, int acquireFence, // inputs
         camera3_stream_buffer_t* dst);
diff --git a/camera/device/3.2/types.hal b/camera/device/3.2/types.hal
index fd75528..5ae7a18 100644
--- a/camera/device/3.2/types.hal
+++ b/camera/device/3.2/types.hal
@@ -958,3 +958,25 @@
     uint32_t partialResult;
 
 };
+
+/**
+ * BufferCache:
+ *
+ * A list of cached bufferIds associated with a certain stream.
+ * Buffers are passed between camera service and camera HAL via bufferId except
+ * the first time a new buffer is being passed to HAL in CaptureRequest. Camera
+ * service and camera HAL therefore need to maintain a cached map of bufferId
+ * and corresponing native handle.
+ *
+ */
+struct BufferCache {
+    /**
+     * The ID of the stream this list is associated with.
+     */
+    int32_t streamId;
+
+    /**
+     * A cached buffer ID associated with streamId.
+     */
+    uint64_t bufferId;
+};
diff --git a/camera/provider/2.4/vts/functional/Android.bp b/camera/provider/2.4/vts/functional/Android.bp
index a0be5cb..02c42c9 100644
--- a/camera/provider/2.4/vts/functional/Android.bp
+++ b/camera/provider/2.4/vts/functional/Android.bp
@@ -33,7 +33,10 @@
         "libgui",
         "libui"
     ],
-    static_libs: ["VtsHalHidlTargetTestBase"],
+    static_libs: [
+        "VtsHalHidlTargetTestBase",
+        "libgrallocusage"
+    ],
     cflags: [
         "-O0",
         "-g",
diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
index a79c9fa..4d3c6eb 100644
--- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
+++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
@@ -21,6 +21,7 @@
 #include "CameraParameters.h"
 #include <system/camera.h>
 #include <android/log.h>
+#include <grallocusage/GrallocUsageConversion.h>
 #include <ui/GraphicBuffer.h>
 #include <VtsHalHidlTargetTestBase.h>
 #include <gui/BufferQueue.h>
@@ -53,6 +54,7 @@
 using ::android::Surface;
 using ::android::CameraParameters;
 using ::android::hardware::graphics::common::V1_0::PixelFormat;
+using ::android::hardware::graphics::allocator::V2_0::ConsumerUsage;
 using ::android::hardware::graphics::allocator::V2_0::ProducerUsage;
 using ::android::hardware::camera::common::V1_0::Status;
 using ::android::hardware::camera::common::V1_0::CameraDeviceStatus;
@@ -60,7 +62,10 @@
 using ::android::hardware::camera::common::V1_0::TorchModeStatus;
 using ::android::hardware::camera::provider::V2_4::ICameraProvider;
 using ::android::hardware::camera::provider::V2_4::ICameraProviderCallback;
+using ::android::hardware::camera::device::V3_2::ProducerUsageFlags;
+using ::android::hardware::camera::device::V3_2::ConsumerUsageFlags;
 using ::android::hardware::camera::device::V3_2::ICameraDevice;
+using ::android::hardware::camera::device::V3_2::BufferCache;
 using ::android::hardware::camera::device::V3_2::CaptureRequest;
 using ::android::hardware::camera::device::V3_2::CaptureResult;
 using ::android::hardware::camera::device::V3_2::ICameraDeviceCallback;
@@ -79,6 +84,7 @@
 using ::android::hardware::camera::device::V3_2::MsgType;
 using ::android::hardware::camera::device::V3_2::ErrorMsg;
 using ::android::hardware::camera::device::V3_2::ErrorCode;
+using ::android::hardware::camera::device::V1_0::ProducerUsageFlags;
 using ::android::hardware::camera::device::V1_0::CameraFacing;
 using ::android::hardware::camera::device::V1_0::NotifyCallbackMsg;
 using ::android::hardware::camera::device::V1_0::CommandType;
@@ -86,6 +92,7 @@
 using ::android::hardware::camera::device::V1_0::CameraFrameMetadata;
 using ::android::hardware::camera::device::V1_0::ICameraDevicePreviewCallback;
 using ::android::hardware::camera::device::V1_0::FrameCallbackFlag;
+using ::android::hardware::camera::device::V1_0::HandleTimestampMessage;
 
 const char kCameraPassthroughServiceName[] = "legacy/0";
 const uint32_t kMaxPreviewWidth = 1920;
@@ -231,7 +238,7 @@
     Return<Status> setCrop(int32_t left, int32_t top,
             int32_t right, int32_t bottom) override;
 
-    Return<Status> setUsage(ProducerUsage usage) override;
+    Return<Status> setUsage(ProducerUsageFlags usage) override;
 
     Return<Status> setSwapInterval(int32_t interval) override;
 
@@ -406,10 +413,11 @@
     return mapToStatus(rc);
 }
 
-Return<Status> PreviewWindowCb::setUsage(ProducerUsage usage) {
-    auto rc = native_window_set_usage(mAnw.get(), static_cast<int>(usage));
+Return<Status> PreviewWindowCb::setUsage(ProducerUsageFlags usage) {
+    int dstUsage = ::android_convertGralloc1To0Usage(usage, /*consumerUsage*/ 0);
+    auto rc = native_window_set_usage(mAnw.get(), dstUsage);
     if (rc == ::android::OK) {
-        mPreviewUsage =  static_cast<int>(usage);
+        mPreviewUsage = dstUsage;
     }
     return mapToStatus(rc);
 }
@@ -510,6 +518,10 @@
                 const hidl_handle& frameData,uint32_t data,
                 uint32_t bufferIndex, int64_t timestamp) override;
 
+        Return<void> handleCallbackTimestampBatch(DataCallbackMsg msgType,
+                const ::android::hardware::hidl_vec<HandleTimestampMessage>& batch) override;
+
+
      private:
         CameraHidlTest *mParent;               // Parent object
     };
@@ -666,6 +678,23 @@
     return Void();
 }
 
+Return<void> CameraHidlTest::Camera1DeviceCb::handleCallbackTimestampBatch(
+        DataCallbackMsg msgType,
+        const hidl_vec<HandleTimestampMessage>& batch) {
+    std::unique_lock<std::mutex> l(mParent->mLock);
+    for (auto& msg : batch) {
+        mParent->mDataMessageTypeReceived = msgType;
+        mParent->mVideoBufferIndex = msg.bufferIndex;
+        if (mParent->mMemoryPool.count(msg.data) == 0) {
+            ADD_FAILURE() << "memory pool ID " << msg.data << " not found";
+        }
+        mParent->mVideoData = msg.data;
+        mParent->mVideoNativeHandle = msg.frameData;
+        mParent->mResultCondition.notify_one();
+    }
+    return Void();
+}
+
 Return<void> CameraHidlTest::DeviceCb::processCaptureResult(
         const hidl_vec<CaptureResult>& results) {
     if (nullptr == mParent) {
@@ -2176,7 +2205,7 @@
                             static_cast<uint32_t> (input.width),
                             static_cast<uint32_t> (input.height),
                             static_cast<PixelFormat> (input.format),
-                            GRALLOC_USAGE_HW_CAMERA_ZSL, 0,
+                            static_cast<ConsumerUsageFlags>(ConsumerUsage::CAMERA), 0,
                             StreamRotation::ROTATION_0};
                     Stream inputStream = {streamId++, StreamType::INPUT,
                             static_cast<uint32_t> (input.width),
@@ -2408,7 +2437,7 @@
                             static_cast<uint32_t> (blobIter.width),
                             static_cast<uint32_t> (blobIter.height),
                             static_cast<PixelFormat> (blobIter.format),
-                            GRALLOC_USAGE_HW_VIDEO_ENCODER, 0,
+                            static_cast<ConsumerUsageFlags>(ConsumerUsage::VIDEO_ENCODER), 0,
                             StreamRotation::ROTATION_0};
                     ::android::hardware::hidl_vec<Stream> streams = {
                             videoStream, blobStream};
@@ -2481,8 +2510,10 @@
 
             Status status = Status::INTERNAL_ERROR;
             uint32_t numRequestProcessed = 0;
+            hidl_vec<BufferCache> cachesToRemove;
             Return<void> returnStatus = session->processCaptureRequest(
                     {request},
+                    cachesToRemove,
                     [&status, &numRequestProcessed] (auto s, uint32_t n) {
                         status = s;
                         numRequestProcessed = n;
@@ -2513,6 +2544,7 @@
 
             returnStatus = session->processCaptureRequest(
                     {request},
+                    cachesToRemove,
                     [&status, &numRequestProcessed] (auto s, uint32_t n) {
                         status = s;
                         numRequestProcessed = n;
@@ -2579,8 +2611,10 @@
             //Settings were not correctly initialized, we should fail here
             Status status = Status::OK;
             uint32_t numRequestProcessed = 0;
+            hidl_vec<BufferCache> cachesToRemove;
             Return<void> ret = session->processCaptureRequest(
                     {request},
+                    cachesToRemove,
                     [&status, &numRequestProcessed] (auto s, uint32_t n) {
                         status = s;
                         numRequestProcessed = n;
@@ -2632,8 +2666,10 @@
             //Output buffers are missing, we should fail here
             Status status = Status::OK;
             uint32_t numRequestProcessed = 0;
+            hidl_vec<BufferCache> cachesToRemove;
             ret = session->processCaptureRequest(
                     {request},
+                    cachesToRemove,
                     [&status, &numRequestProcessed] (auto s, uint32_t n) {
                         status = s;
                         numRequestProcessed = n;
@@ -2701,8 +2737,10 @@
 
             Status status = Status::INTERNAL_ERROR;
             uint32_t numRequestProcessed = 0;
+            hidl_vec<BufferCache> cachesToRemove;
             ret = session->processCaptureRequest(
                     {request},
+                    cachesToRemove,
                     [&status, &numRequestProcessed] (auto s, uint32_t n) {
                         status = s;
                         numRequestProcessed = n;
diff --git a/configstore/1.0/default/android.hardware.configstore@1.0-service.rc b/configstore/1.0/default/android.hardware.configstore@1.0-service.rc
index 8741bdd..563d854 100644
--- a/configstore/1.0/default/android.hardware.configstore@1.0-service.rc
+++ b/configstore/1.0/default/android.hardware.configstore@1.0-service.rc
@@ -1,4 +1,4 @@
 service configstore-hal-1-0 /vendor/bin/hw/android.hardware.configstore@1.0-service
-    class hal
+    class hal animation
     user system
     group system
diff --git a/drm/1.0/default/DrmPlugin.cpp b/drm/1.0/default/DrmPlugin.cpp
index 6f51e0e..c7428a5 100644
--- a/drm/1.0/default/DrmPlugin.cpp
+++ b/drm/1.0/default/DrmPlugin.cpp
@@ -77,7 +77,7 @@
             android::DrmPlugin::KeyRequestType legacyRequestType =
                     android::DrmPlugin::kKeyRequestType_Unknown;
 
-            status_t status = mLegacyPlugin->getKeyRequest(toVector(scope),
+            status = mLegacyPlugin->getKeyRequest(toVector(scope),
                     toVector(initData), String8(mimeType), legacyKeyType,
                     legacyOptionalParameters, legacyRequest, defaultUrl,
                     &legacyRequestType);
@@ -93,7 +93,7 @@
                 requestType = KeyRequestType::RELEASE;
                 break;
             case android::DrmPlugin::kKeyRequestType_Unknown:
-                status = android::BAD_VALUE;
+                requestType = KeyRequestType::UNKNOWN;
                 break;
             }
         }
diff --git a/drm/1.0/vts/doc/Drm_Vendor_Modules_v1.pdf b/drm/1.0/vts/doc/Drm_Vendor_Modules_v1.pdf
new file mode 100644
index 0000000..1b44e4f
--- /dev/null
+++ b/drm/1.0/vts/doc/Drm_Vendor_Modules_v1.pdf
Binary files differ
diff --git a/drm/1.0/vts/functional/Android.bp b/drm/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..36d7d1c
--- /dev/null
+++ b/drm/1.0/vts/functional/Android.bp
@@ -0,0 +1,46 @@
+//
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+cc_test {
+    name: "VtsHalDrmV1_0TargetTest",
+    srcs: [
+        "drm_hal_clearkey_test.cpp",
+        "drm_hal_vendor_test.cpp",
+        "shared_library.cpp",
+        "vendor_modules.cpp"
+        ],
+    shared_libs: [
+        "android.hardware.drm@1.0",
+        "android.hidl.allocator@1.0",
+        "android.hidl.memory@1.0",
+        "libbase",
+        "libcutils",
+        "libhidlbase",
+        "libhidlmemory",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libnativehelper",
+        "libutils",
+    ],
+    static_libs: [
+        "VtsHalHidlTargetTestBase"
+    ],
+    cflags: [
+        "-O0",
+        "-g",
+    ],
+}
diff --git a/drm/1.0/vts/functional/drm_hal_clearkey_test.cpp b/drm/1.0/vts/functional/drm_hal_clearkey_test.cpp
new file mode 100644
index 0000000..2296d2d
--- /dev/null
+++ b/drm/1.0/vts/functional/drm_hal_clearkey_test.cpp
@@ -0,0 +1,904 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "drm_hal_clearkey_test@1.0"
+
+#include <android-base/logging.h>
+#include <android/hardware/drm/1.0/ICryptoFactory.h>
+#include <android/hardware/drm/1.0/ICryptoPlugin.h>
+#include <android/hardware/drm/1.0/IDrmFactory.h>
+#include <android/hardware/drm/1.0/IDrmPlugin.h>
+#include <android/hardware/drm/1.0/types.h>
+#include <android/hidl/allocator/1.0/IAllocator.h>
+#include <gtest/gtest.h>
+#include <hidl/HidlSupport.h>
+#include <hidlmemory/mapping.h>
+#include <memory>
+#include <random>
+
+#include "VtsHalHidlTargetTestBase.h"
+
+using ::android::hardware::drm::V1_0::BufferType;
+using ::android::hardware::drm::V1_0::DestinationBuffer;
+using ::android::hardware::drm::V1_0::ICryptoFactory;
+using ::android::hardware::drm::V1_0::ICryptoPlugin;
+using ::android::hardware::drm::V1_0::IDrmFactory;
+using ::android::hardware::drm::V1_0::IDrmPlugin;
+using ::android::hardware::drm::V1_0::KeyedVector;
+using ::android::hardware::drm::V1_0::KeyValue;
+using ::android::hardware::drm::V1_0::KeyRequestType;
+using ::android::hardware::drm::V1_0::KeyType;
+using ::android::hardware::drm::V1_0::Mode;
+using ::android::hardware::drm::V1_0::Pattern;
+using ::android::hardware::drm::V1_0::SecureStop;
+using ::android::hardware::drm::V1_0::SecureStopId;
+using ::android::hardware::drm::V1_0::SessionId;
+using ::android::hardware::drm::V1_0::SharedBuffer;
+using ::android::hardware::drm::V1_0::Status;
+using ::android::hardware::drm::V1_0::SubSample;
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hidl::allocator::V1_0::IAllocator;
+using ::android::hidl::memory::V1_0::IMemory;
+using ::android::sp;
+
+using std::string;
+using std::unique_ptr;
+using std::random_device;
+using std::map;
+using std::mt19937;
+using std::vector;
+
+/**
+ * These clearkey tests use white box knowledge of the legacy clearkey
+ * plugin to verify that the HIDL HAL services and interfaces are working.
+ * It is not intended to verify any vendor's HAL implementation. If you
+ * are looking for vendor HAL tests, see drm_hal_vendor_test.cpp
+ */
+#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
+#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
+
+static const uint8_t kClearKeyUUID[16] = {
+    0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02,
+    0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B};
+
+static const uint8_t kInvalidUUID[16] = {
+    0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80,
+    0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80};
+
+class DrmHalClearkeyFactoryTest : public ::testing::VtsHalHidlTargetTestBase {
+   public:
+    virtual void SetUp() override {
+        const ::testing::TestInfo* const test_info =
+                ::testing::UnitTest::GetInstance()->current_test_info();
+        ALOGD("Running test %s.%s", test_info->test_case_name(),
+              test_info->name());
+
+        drmFactory =
+                ::testing::VtsHalHidlTargetTestBase::getService<IDrmFactory>(
+                        "drm");
+        ASSERT_NE(drmFactory, nullptr);
+        cryptoFactory =
+                ::testing::VtsHalHidlTargetTestBase::getService<ICryptoFactory>(
+                        "crypto");
+        ASSERT_NE(cryptoFactory, nullptr);
+    }
+
+    virtual void TearDown() override {}
+
+   protected:
+    sp<IDrmFactory> drmFactory;
+    sp<ICryptoFactory> cryptoFactory;
+};
+
+/**
+ * Ensure the factory supports the clearkey scheme UUID
+ */
+TEST_F(DrmHalClearkeyFactoryTest, ClearKeyPluginSupported) {
+    EXPECT_TRUE(drmFactory->isCryptoSchemeSupported(kClearKeyUUID));
+    EXPECT_TRUE(cryptoFactory->isCryptoSchemeSupported(kClearKeyUUID));
+}
+
+/**
+ * Ensure the factory doesn't support an invalid scheme UUID
+ */
+TEST_F(DrmHalClearkeyFactoryTest, InvalidPluginNotSupported) {
+    EXPECT_FALSE(drmFactory->isCryptoSchemeSupported(kInvalidUUID));
+    EXPECT_FALSE(cryptoFactory->isCryptoSchemeSupported(kInvalidUUID));
+}
+
+/**
+ * Ensure clearkey drm plugin can be created
+ */
+TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyDrmPlugin) {
+    hidl_string packageName("android.hardware.drm.test");
+    auto res = drmFactory->createPlugin(
+            kClearKeyUUID, packageName,
+            [&](Status status, const sp<IDrmPlugin>& plugin) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_NE(plugin, nullptr);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Ensure clearkey crypto plugin can be created
+ */
+TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyCryptoPlugin) {
+    hidl_vec<uint8_t> initVec;
+    auto res = cryptoFactory->createPlugin(
+            kClearKeyUUID, initVec,
+            [&](Status status, const sp<ICryptoPlugin>& plugin) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_NE(plugin, nullptr);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Ensure invalid drm plugin can't be created
+ */
+TEST_F(DrmHalClearkeyFactoryTest, CreateInvalidDrmPlugin) {
+    hidl_string packageName("android.hardware.drm.test");
+    auto res = drmFactory->createPlugin(
+            kInvalidUUID, packageName,
+            [&](Status status, const sp<IDrmPlugin>& plugin) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+                EXPECT_EQ(plugin, nullptr);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Ensure invalid crypto plugin can't be created
+ */
+TEST_F(DrmHalClearkeyFactoryTest, CreateInvalidCryptoPlugin) {
+    hidl_vec<uint8_t> initVec;
+    auto res = cryptoFactory->createPlugin(
+            kInvalidUUID, initVec,
+            [&](Status status, const sp<ICryptoPlugin>& plugin) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+                EXPECT_EQ(plugin, nullptr);
+            });
+    EXPECT_OK(res);
+}
+
+class DrmHalClearkeyPluginTest : public DrmHalClearkeyFactoryTest {
+   public:
+    virtual void SetUp() override {
+        // Create factories
+        DrmHalClearkeyFactoryTest::SetUp();
+
+        ASSERT_NE(drmFactory, nullptr);
+        hidl_string packageName("android.hardware.drm.test");
+        auto res = drmFactory->createPlugin(
+                kClearKeyUUID, packageName,
+                [this](Status status, const sp<IDrmPlugin>& plugin) {
+                    EXPECT_EQ(Status::OK, status);
+                    ASSERT_NE(plugin, nullptr);
+                    drmPlugin = plugin;
+                });
+        ASSERT_OK(res);
+
+        hidl_vec<uint8_t> initVec;
+        res = cryptoFactory->createPlugin(
+                kClearKeyUUID, initVec,
+                [this](Status status, const sp<ICryptoPlugin>& plugin) {
+                    EXPECT_EQ(Status::OK, status);
+                    ASSERT_NE(plugin, nullptr);
+                    cryptoPlugin = plugin;
+                });
+        ASSERT_OK(res);
+    }
+
+    virtual void TearDown() override {}
+
+    SessionId openSession();
+    void closeSession(const SessionId& sessionId);
+    sp<IMemory> getDecryptMemory(size_t size, size_t index);
+
+   protected:
+    sp<IDrmPlugin> drmPlugin;
+    sp<ICryptoPlugin> cryptoPlugin;
+};
+
+/**
+ *  DrmPlugin tests
+ */
+
+/**
+ * Test that the plugin can return a provision request.  Since
+ * the clearkey plugin doesn't support provisioning, it is
+ * expected to return Status::ERROR_DRM_CANNOT_HANDLE.
+ */
+TEST_F(DrmHalClearkeyPluginTest, GetProvisionRequest) {
+    hidl_string certificateType;
+    hidl_string certificateAuthority;
+    auto res = drmPlugin->getProvisionRequest(
+            certificateType, certificateAuthority,
+            [&](Status status, const hidl_vec<uint8_t>&, const hidl_string&) {
+                // clearkey doesn't require provisioning
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * The DRM HAL should return BAD_VALUE if an empty provisioning
+ * response is provided.
+ */
+TEST_F(DrmHalClearkeyPluginTest, ProvideEmptyProvisionResponse) {
+    hidl_vec<uint8_t> response;
+    auto res = drmPlugin->provideProvisionResponse(
+            response, [&](Status status, const hidl_vec<uint8_t>&,
+                          const hidl_vec<uint8_t>&) {
+                EXPECT_EQ(Status::BAD_VALUE, status);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Helper method to open a session and verify that a non-empty
+ * session ID is returned
+ */
+SessionId DrmHalClearkeyPluginTest::openSession() {
+    SessionId sessionId;
+
+    auto res = drmPlugin->openSession(
+            [&sessionId](Status status, const SessionId& id) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_NE(0u, id.size());
+                sessionId = id;
+            });
+    EXPECT_OK(res);
+    return sessionId;
+}
+
+/**
+ * Helper method to close a session
+ */
+void DrmHalClearkeyPluginTest::closeSession(const SessionId& sessionId) {
+    auto result = drmPlugin->closeSession(sessionId);
+    EXPECT_EQ(Status::OK, result);
+}
+
+/**
+ * Test that a session can be opened and closed
+ */
+TEST_F(DrmHalClearkeyPluginTest, OpenCloseSession) {
+    auto sessionId = openSession();
+    closeSession(sessionId);
+}
+
+/**
+ * Test that attempting to close an invalid (empty) sessionId
+ * is prohibited with the documented error code.
+ */
+TEST_F(DrmHalClearkeyPluginTest, CloseInvalidSession) {
+    SessionId invalidSessionId;
+    Status result = drmPlugin->closeSession(invalidSessionId);
+    EXPECT_EQ(Status::BAD_VALUE, result);
+}
+
+/**
+ * Test that attempting to close a session that is already closed
+ * is prohibited with the documented error code.
+ */
+TEST_F(DrmHalClearkeyPluginTest, CloseClosedSession) {
+    SessionId sessionId = openSession();
+    closeSession(sessionId);
+    Status result = drmPlugin->closeSession(sessionId);
+    EXPECT_EQ(Status::ERROR_DRM_SESSION_NOT_OPENED, result);
+}
+
+/**
+ * A get key request should fail if no sessionId is provided
+ */
+TEST_F(DrmHalClearkeyPluginTest, GetKeyRequestNoSession) {
+    SessionId invalidSessionId;
+    hidl_vec<uint8_t> initData;
+    hidl_string mimeType = "video/mp4";
+    KeyedVector optionalParameters;
+    auto res = drmPlugin->getKeyRequest(
+            invalidSessionId, initData, mimeType, KeyType::STREAMING,
+            optionalParameters,
+            [&](Status status, const hidl_vec<uint8_t>&, KeyRequestType,
+                const hidl_string&) { EXPECT_EQ(Status::BAD_VALUE, status); });
+    EXPECT_OK(res);
+}
+
+/**
+ * The clearkey plugin doesn't support offline key requests.
+ * Test that the plugin returns the expected error code in
+ * this case.
+ */
+TEST_F(DrmHalClearkeyPluginTest, GetKeyRequestOfflineKeyTypeNotSupported) {
+    auto sessionId = openSession();
+    hidl_vec<uint8_t> initData;
+    hidl_string mimeType = "video/mp4";
+    KeyedVector optionalParameters;
+
+    auto res = drmPlugin->getKeyRequest(
+            sessionId, initData, mimeType, KeyType::OFFLINE, optionalParameters,
+            [&](Status status, const hidl_vec<uint8_t>&, KeyRequestType,
+                const hidl_string&) {
+                // Clearkey plugin doesn't support offline key type
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+            });
+    EXPECT_OK(res);
+    closeSession(sessionId);
+}
+
+/**
+ * Test that the plugin returns the documented error for the
+ * case of attempting to generate a key request using an
+ * invalid mime type
+ */
+TEST_F(DrmHalClearkeyPluginTest, GetKeyRequestBadMime) {
+    auto sessionId = openSession();
+    hidl_vec<uint8_t> initData;
+    hidl_string mimeType = "video/unknown";
+    KeyedVector optionalParameters;
+    auto res = drmPlugin->getKeyRequest(
+            sessionId, initData, mimeType, KeyType::STREAMING,
+            optionalParameters, [&](Status status, const hidl_vec<uint8_t>&,
+                                    KeyRequestType, const hidl_string&) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+            });
+    EXPECT_OK(res);
+    closeSession(sessionId);
+}
+
+/**
+ * Test that a closed sessionID returns SESSION_NOT_OPENED
+ */
+TEST_F(DrmHalClearkeyPluginTest, ProvideKeyResponseClosedSession) {
+    SessionId session = openSession();
+    closeSession(session);
+
+    hidl_vec<uint8_t> keyResponse = {0x7b, 0x22, 0x6b, 0x65,
+                                     0x79, 0x73, 0x22, 0x3a};
+    auto res = drmPlugin->provideKeyResponse(
+            session, keyResponse,
+            [&](Status status, const hidl_vec<uint8_t>& keySetId) {
+                EXPECT_EQ(Status::ERROR_DRM_SESSION_NOT_OPENED, status);
+                EXPECT_EQ(0u, keySetId.size());
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that an empty sessionID returns BAD_VALUE
+ */
+TEST_F(DrmHalClearkeyPluginTest, ProvideKeyResponseInvalidSessionId) {
+    SessionId session;
+
+    hidl_vec<uint8_t> keyResponse = {0x7b, 0x22, 0x6b, 0x65,
+                                     0x79, 0x73, 0x22, 0x3a};
+    auto res = drmPlugin->provideKeyResponse(
+            session, keyResponse,
+            [&](Status status, const hidl_vec<uint8_t>& keySetId) {
+                EXPECT_EQ(Status::BAD_VALUE, status);
+                EXPECT_EQ(0u, keySetId.size());
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that an empty key response returns BAD_VALUE
+ */
+TEST_F(DrmHalClearkeyPluginTest, ProvideKeyResponseEmptyResponse) {
+    SessionId session = openSession();
+    hidl_vec<uint8_t> emptyResponse;
+    auto res = drmPlugin->provideKeyResponse(
+            session, emptyResponse,
+            [&](Status status, const hidl_vec<uint8_t>& keySetId) {
+                EXPECT_EQ(Status::BAD_VALUE, status);
+                EXPECT_EQ(0u, keySetId.size());
+            });
+    EXPECT_OK(res);
+    closeSession(session);
+}
+
+/**
+ * Test that the clearkey plugin doesn't support getting
+ * secure stops.
+ */
+TEST_F(DrmHalClearkeyPluginTest, GetSecureStops) {
+    auto res = drmPlugin->getSecureStops(
+            [&](Status status, const hidl_vec<SecureStop>&) {
+                // Clearkey plugin doesn't support secure stops
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that the clearkey plugin returns BAD_VALUE if
+ * an empty ssid is provided.
+ */
+TEST_F(DrmHalClearkeyPluginTest, GetSecureStopEmptySSID) {
+    SecureStopId ssid;
+    auto res = drmPlugin->getSecureStop(
+            ssid, [&](Status status, const SecureStop&) {
+                EXPECT_EQ(Status::BAD_VALUE, status);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that releasing all secure stops isn't handled by
+ * clearkey.
+ */
+TEST_F(DrmHalClearkeyPluginTest, ReleaseAllSecureStops) {
+    EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE,
+              drmPlugin->releaseAllSecureStops());
+}
+
+/**
+ * Test that releasing a specific secure stop with an empty
+ * SSID returns BAD_VALUE.
+ */
+TEST_F(DrmHalClearkeyPluginTest, ReleaseSecureStopEmptySSID) {
+    SecureStopId ssid;
+    Status status = drmPlugin->releaseSecureStop(ssid);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+}
+
+/**
+ * The following four tests verify that the properties
+ * defined in the MediaDrm API are supported by
+ * the plugin.
+ */
+TEST_F(DrmHalClearkeyPluginTest, GetVendorProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "vendor", [&](Status status, const hidl_string& value) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_EQ("Google", value);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_F(DrmHalClearkeyPluginTest, GetVersionProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "version", [&](Status status, const hidl_string& value) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_EQ("1.0", value);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_F(DrmHalClearkeyPluginTest, GetDescriptionProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "description", [&](Status status, const hidl_string& value) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_EQ("ClearKey CDM", value);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_F(DrmHalClearkeyPluginTest, GetAlgorithmsProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "algorithms", [&](Status status, const hidl_string& value) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_EQ("", value);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that attempting to read invalid string and byte array
+ * properties returns the documented error code.
+ */
+TEST_F(DrmHalClearkeyPluginTest, GetInvalidStringProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "invalid", [&](Status status, const hidl_string&) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_F(DrmHalClearkeyPluginTest, GetByteArrayPropertyNotSupported) {
+    auto res = drmPlugin->getPropertyByteArray(
+            "deviceUniqueId", [&](Status status, const hidl_vec<uint8_t>&) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Clearkey doesn't support setting string or byte array properties,
+ * particularly an undefined one.
+ */
+TEST_F(DrmHalClearkeyPluginTest, SetStringPropertyNotSupported) {
+    Status status = drmPlugin->setPropertyString("property", "value");
+    EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+}
+
+TEST_F(DrmHalClearkeyPluginTest, SetByteArrayPropertyNotSupported) {
+    hidl_vec<uint8_t> value;
+    Status status = drmPlugin->setPropertyByteArray("property", value);
+    EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+}
+
+/**
+ * Clearkey doesn't support setting cipher algorithms, verify it
+ */
+TEST_F(DrmHalClearkeyPluginTest, SetCipherAlgorithmNotSupported) {
+    SessionId session = openSession();
+    hidl_string algorithm = "AES/CBC/NoPadding";
+    Status status = drmPlugin->setCipherAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+    closeSession(session);
+}
+
+/**
+ * Setting an empty algorithm should return BAD_VALUE
+ */
+TEST_F(DrmHalClearkeyPluginTest, SetCipherEmptyAlgorithm) {
+    SessionId session = openSession();
+    hidl_string algorithm;
+    Status status = drmPlugin->setCipherAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+    closeSession(session);
+}
+
+/**
+ * Setting a cipher algorithm with no session returns BAD_VALUE
+ */
+TEST_F(DrmHalClearkeyPluginTest, SetCipherAlgorithmNoSession) {
+    SessionId session;
+    hidl_string algorithm = "AES/CBC/NoPadding";
+    Status status = drmPlugin->setCipherAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+}
+
+/**
+ * Clearkey doesn't support setting mac algorithms, verify it
+ */
+TEST_F(DrmHalClearkeyPluginTest, SetMacAlgorithmNotSupported) {
+    SessionId session = openSession();
+    hidl_string algorithm = "HmacSHA256";
+    Status status = drmPlugin->setMacAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+    closeSession(session);
+}
+
+/**
+ * Setting an empty algorithm should return BAD_VALUE
+ */
+TEST_F(DrmHalClearkeyPluginTest, SetMacEmptyAlgorithm) {
+    SessionId session = openSession();
+    hidl_string algorithm;
+    Status status = drmPlugin->setMacAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+    closeSession(session);
+}
+
+/**
+ * Setting a mac algorithm with no session should return BAD_VALUE
+ */
+TEST_F(DrmHalClearkeyPluginTest, SetMacAlgorithmNoSession) {
+    SessionId session;
+    hidl_string algorithm = "HmacSHA256";
+    Status status = drmPlugin->setMacAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+}
+
+/**
+ * The Generic* methods provide general purpose crypto operations
+ * that may be used for applications other than DRM. They leverage
+ * the hardware root of trust and secure key distribution mechanisms
+ * of a DRM system to enable app-specific crypto functionality where
+ * the crypto keys are not exposed outside of the trusted execution
+ * environment.
+ *
+ * Clearkey doesn't support generic encrypt/decrypt/sign/verify.
+ */
+TEST_F(DrmHalClearkeyPluginTest, GenericEncryptNotSupported) {
+    SessionId session = openSession();
+    ;
+    hidl_vec<uint8_t> keyId = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
+    hidl_vec<uint8_t> input = {1, 2, 3, 4, 5};
+    hidl_vec<uint8_t> iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+    auto res = drmPlugin->encrypt(session, keyId, input, iv,
+                                  [&](Status status, const hidl_vec<uint8_t>&) {
+                                      EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE,
+                                                status);
+                                  });
+    EXPECT_OK(res);
+    closeSession(session);
+}
+
+TEST_F(DrmHalClearkeyPluginTest, GenericDecryptNotSupported) {
+    SessionId session = openSession();
+    ;
+    hidl_vec<uint8_t> keyId = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
+    hidl_vec<uint8_t> input = {1, 2, 3, 4, 5};
+    hidl_vec<uint8_t> iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+    auto res = drmPlugin->decrypt(session, keyId, input, iv,
+                                  [&](Status status, const hidl_vec<uint8_t>&) {
+                                      EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE,
+                                                status);
+                                  });
+    EXPECT_OK(res);
+    closeSession(session);
+}
+
+TEST_F(DrmHalClearkeyPluginTest, GenericSignNotSupported) {
+    SessionId session = openSession();
+    ;
+    hidl_vec<uint8_t> keyId = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
+    hidl_vec<uint8_t> message = {1, 2, 3, 4, 5};
+    auto res = drmPlugin->sign(session, keyId, message,
+                               [&](Status status, const hidl_vec<uint8_t>&) {
+                                   EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE,
+                                             status);
+                               });
+    EXPECT_OK(res);
+    closeSession(session);
+}
+
+TEST_F(DrmHalClearkeyPluginTest, GenericVerifyNotSupported) {
+    SessionId session = openSession();
+    ;
+    hidl_vec<uint8_t> keyId = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
+    hidl_vec<uint8_t> message = {1, 2, 3, 4, 5};
+    hidl_vec<uint8_t> signature = {0, 0, 0, 0, 0, 0, 0, 0,
+                                   0, 0, 0, 0, 0, 0, 0, 0};
+    auto res = drmPlugin->verify(
+            session, keyId, message, signature, [&](Status status, bool) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+            });
+    EXPECT_OK(res);
+    closeSession(session);
+}
+
+TEST_F(DrmHalClearkeyPluginTest, GenericSignRSANotSupported) {
+    SessionId session = openSession();
+    hidl_string algorithm = "RSASSA-PSS-SHA1";
+    hidl_vec<uint8_t> message = {1, 2, 3, 4, 5};
+    hidl_vec<uint8_t> wrappedKey = {0, 0, 0, 0, 0, 0, 0, 0,
+                                    0, 0, 0, 0, 0, 0, 0, 0};
+    auto res = drmPlugin->signRSA(session, algorithm, message, wrappedKey,
+                                  [&](Status status, const hidl_vec<uint8_t>&) {
+                                      EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE,
+                                                status);
+                                  });
+    EXPECT_OK(res);
+    closeSession(session);
+}
+
+/**
+ *  CryptoPlugin tests
+ */
+
+/**
+ * Clearkey doesn't support secure decoder and is expected to
+ * return false.
+ */
+TEST_F(DrmHalClearkeyPluginTest, RequiresSecureDecoder) {
+    EXPECT_FALSE(cryptoPlugin->requiresSecureDecoderComponent("cenc"));
+}
+
+/**
+ * Verify that requiresSecureDecoderComponent handles empty mimetype
+ */
+TEST_F(DrmHalClearkeyPluginTest, RequiresSecureDecoderEmptyMimeType) {
+    EXPECT_FALSE(cryptoPlugin->requiresSecureDecoderComponent(""));
+}
+
+/**
+ * Exercise the NotifyResolution API. There is no observable result,
+ * just call the method for coverage.
+ */
+TEST_F(DrmHalClearkeyPluginTest, NotifyResolution) {
+    cryptoPlugin->notifyResolution(1920, 1080);
+}
+
+/**
+ * getDecryptMemory allocates memory for decryption, then sets it
+ * as a shared buffer base in the crypto hal.  The allocated and
+ * mapped IMemory is returned.
+ *
+ * @param size the size of the memory segment to allocate
+ * @param the index of the memory segment which will be used
+ * to refer to it for decryption.
+ */
+sp<IMemory> DrmHalClearkeyPluginTest::getDecryptMemory(size_t size,
+                                                       size_t index) {
+    sp<IAllocator> ashmemAllocator = IAllocator::getService("ashmem");
+    EXPECT_NE(ashmemAllocator, nullptr);
+
+    hidl_memory hidlMemory;
+    auto res = ashmemAllocator->allocate(
+            size, [&](bool success, const hidl_memory& memory) {
+                EXPECT_EQ(true, success);
+                EXPECT_OK(cryptoPlugin->setSharedBufferBase(memory, index));
+                hidlMemory = memory;
+            });
+    EXPECT_OK(res);
+
+    sp<IMemory> mappedMemory = mapMemory(hidlMemory);
+    EXPECT_OK(cryptoPlugin->setSharedBufferBase(hidlMemory, index));
+    return mappedMemory;
+}
+
+/**
+ * Exercise the setMediaDrmSession method. setMediaDrmSession
+ * is used to associate a drm session with a crypto session.
+ */
+TEST_F(DrmHalClearkeyPluginTest, SetMediaDrmSession) {
+    auto sessionId = openSession();
+    Status status = cryptoPlugin->setMediaDrmSession(sessionId);
+    EXPECT_EQ(Status::OK, status);
+    closeSession(sessionId);
+}
+
+/**
+ * setMediaDrmSession with a closed session id
+ */
+TEST_F(DrmHalClearkeyPluginTest, SetMediaDrmSessionClosedSession) {
+    auto sessionId = openSession();
+    closeSession(sessionId);
+    Status status = cryptoPlugin->setMediaDrmSession(sessionId);
+    EXPECT_EQ(Status::ERROR_DRM_SESSION_NOT_OPENED, status);
+}
+
+/**
+ * Decrypt tests
+ */
+
+class DrmHalClearkeyDecryptTest : public DrmHalClearkeyPluginTest {
+   public:
+    void loadKeys(const SessionId& sessionId);
+    void fillRandom(const sp<IMemory>& memory);
+    hidl_array<uint8_t, 16> toHidlArray(const vector<uint8_t>& vec) {
+        EXPECT_EQ(vec.size(), 16u);
+        return hidl_array<uint8_t, 16>(&vec[0]);
+    }
+};
+
+/**
+ * Helper method to load keys for subsequent decrypt tests.
+ * These tests use predetermined key request/response to
+ * avoid requiring a round trip to a license server.
+ */
+void DrmHalClearkeyDecryptTest::loadKeys(const SessionId& sessionId) {
+    hidl_vec<uint8_t> initData = {
+            // BMFF box header (4 bytes size + 'pssh')
+            0x00, 0x00, 0x00, 0x34, 0x70, 0x73, 0x73, 0x68,
+            // full box header (version = 1 flags = 0)
+            0x01, 0x00, 0x00, 0x00,
+            // system id
+            0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, 0xac, 0xe3, 0x3c,
+            0x1e, 0x52, 0xe2, 0xfb, 0x4b,
+            // number of key ids
+            0x00, 0x00, 0x00, 0x01,
+            // key id
+            0x60, 0x06, 0x1e, 0x01, 0x7e, 0x47, 0x7e, 0x87, 0x7e, 0x57, 0xd0,
+            0x0d, 0x1e, 0xd0, 0x0d, 0x1e,
+            // size of data, must be zero
+            0x00, 0x00, 0x00, 0x00};
+
+    hidl_vec<uint8_t> expectedKeyRequest = {
+            0x7b, 0x22, 0x6b, 0x69, 0x64, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x59,
+            0x41, 0x59, 0x65, 0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2b,
+            0x56, 0x39, 0x41, 0x4e, 0x48, 0x74, 0x41, 0x4e, 0x48, 0x67, 0x22,
+            0x5d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x74,
+            0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x22, 0x7d};
+
+    hidl_vec<uint8_t> knownKeyResponse = {
+            0x7b, 0x22, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22,
+            0x6b, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x6f, 0x63, 0x74, 0x22, 0x2c,
+            0x22, 0x6b, 0x69, 0x64, 0x22, 0x3a, 0x22, 0x59, 0x41, 0x59, 0x65,
+            0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2b, 0x56, 0x39, 0x41,
+            0x4e, 0x48, 0x74, 0x41, 0x4e, 0x48, 0x67, 0x22, 0x2c, 0x22, 0x6b,
+            0x22, 0x3a, 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x54, 0x65,
+            0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34,
+            0x67, 0x67, 0x67, 0x22, 0x7d, 0x5d, 0x7d, 0x0a};
+
+    hidl_string mimeType = "video/mp4";
+    KeyedVector optionalParameters;
+    auto res = drmPlugin->getKeyRequest(
+            sessionId, initData, mimeType, KeyType::STREAMING,
+            optionalParameters,
+            [&](Status status, const hidl_vec<uint8_t>& request,
+                KeyRequestType requestType, const hidl_string&) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_EQ(KeyRequestType::INITIAL, requestType);
+                EXPECT_EQ(request, expectedKeyRequest);
+            });
+    EXPECT_OK(res);
+
+    res = drmPlugin->provideKeyResponse(
+            sessionId, knownKeyResponse,
+            [&](Status status, const hidl_vec<uint8_t>& keySetId) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_EQ(0u, keySetId.size());
+            });
+    EXPECT_OK(res);
+}
+
+void DrmHalClearkeyDecryptTest::fillRandom(const sp<IMemory>& memory) {
+    random_device rd;
+    mt19937 rand(rd());
+    for (size_t i = 0; i < memory->getSize() / sizeof(uint32_t); i++) {
+        auto p = static_cast<uint32_t*>(
+                static_cast<void*>(memory->getPointer()));
+        p[i] = rand();
+    }
+}
+
+/**
+ * Positive decrypt test.  "Decrypt" a single clear
+ * segment.  Verify data matches.
+ */
+TEST_F(DrmHalClearkeyDecryptTest, ClearSegmentTest) {
+    const size_t kSegmentSize = 1024;
+    const size_t kSegmentIndex = 0;
+    const vector<uint8_t> keyId = {0x60, 0x06, 0x1e, 0x01, 0x7e, 0x47,
+                                   0x7e, 0x87, 0x7e, 0x57, 0xd0, 0x0d,
+                                   0x1e, 0xd0, 0x0d, 0x1e};
+    uint8_t iv[16] = {0};
+
+    sp<IMemory> sharedMemory =
+            getDecryptMemory(kSegmentSize * 2, kSegmentIndex);
+
+    SharedBuffer sourceBuffer = {
+            .bufferId = kSegmentIndex, .offset = 0, .size = kSegmentSize};
+    fillRandom(sharedMemory);
+
+    DestinationBuffer destBuffer = {.type = BufferType::SHARED_MEMORY,
+                                    {.bufferId = kSegmentIndex,
+                                     .offset = kSegmentSize,
+                                     .size = kSegmentSize},
+                                    .secureMemory = nullptr};
+
+    Pattern noPattern = {0, 0};
+    vector<SubSample> subSamples = {{.numBytesOfClearData = kSegmentSize,
+                                     .numBytesOfEncryptedData = 0}};
+    uint64_t offset = 0;
+
+    auto sessionId = openSession();
+    loadKeys(sessionId);
+
+    Status status = cryptoPlugin->setMediaDrmSession(sessionId);
+    EXPECT_EQ(Status::OK, status);
+
+    const bool kNotSecure = false;
+    auto res = cryptoPlugin->decrypt(
+            kNotSecure, toHidlArray(keyId), iv, Mode::UNENCRYPTED, noPattern,
+            subSamples, sourceBuffer, offset, destBuffer,
+            [&](Status status, uint32_t bytesWritten, string detailedError) {
+                EXPECT_EQ(Status::OK, status) << "Failure in decryption:"
+                                              << detailedError;
+                EXPECT_EQ(bytesWritten, kSegmentSize);
+            });
+    EXPECT_OK(res);
+
+    uint8_t* base = static_cast<uint8_t*>(
+            static_cast<void*>(sharedMemory->getPointer()));
+
+    EXPECT_EQ(0, memcmp(static_cast<void*>(base),
+                        static_cast<void*>(base + kSegmentSize), kSegmentSize))
+            << "decrypt data mismatch";
+    closeSession(sessionId);
+}
diff --git a/drm/1.0/vts/functional/drm_hal_vendor_module_api.h b/drm/1.0/vts/functional/drm_hal_vendor_module_api.h
new file mode 100644
index 0000000..db19719
--- /dev/null
+++ b/drm/1.0/vts/functional/drm_hal_vendor_module_api.h
@@ -0,0 +1,213 @@
+/*
+ * 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 DRM_HAL_VENDOR_MODULE_API_H
+#define DRM_HAL_VENDOR_MODULE_API_H
+
+#include <stdint.h>
+#include <map>
+#include <string>
+#include <vector>
+
+/**
+ * The DRM and Crypto HALs interact with vendor-provided HAL implementations
+ * that have DRM-specific capabilities. Since the VTS tests cannot contain
+ * DRM-specific functionality, supporting modules are required to enable VTS
+ * to validate HAL implementations in a generic way.  If the vendor-specific
+ * VTS module is not provided for a given drm HAL implementation, only very
+ * small subset of functionality can be verified.
+ *
+ * As an example, a DRM HAL implementation interacts with a DRM-specific
+ * license server to obtain licenses for decrypting content.  The DRM HAL
+ * implementation generates a key request message, delivers it to the server
+ * and receives a key response message which is then loaded into the HAL. Once
+ * the keys are loaded, the Crypto HAL decryption functionality and performance
+ * and other associated APIs can be tested by the common VTS test suite.
+ *
+ * Vendor-specific VTS modules are shared libraries used by the DRM VTS test.
+ * They provide a set of functions to support VTS testing of the DRM HAL module.
+ *
+ * The modules are placed in a common location on the file system. The VTS test
+ * scans through all vendor-provided support libraries and runs the VTS test
+ * suite on each library that is found.
+ *
+ * The vendor-specific module exposes an extern “C” vendorModuleFactory()
+ * function that returns a DrmHalVTSVendorModule instance. DrmHalVTSVendorModule
+ * instances are versioned, where each version is represented by subclass of
+ * DrmHalVTSVendorModule that corresponds to the API version. For example, a
+ * vendor-specific module that implements version 1 of the API would return a
+ * DrmHalVTSVendorModule_V1 from the vendorModuleFactory() function.
+ */
+
+class DrmHalVTSVendorModule;
+
+extern "C" {
+/**
+ * The factory method for creating DrmHalVTSVendorModule instances. The returned
+ * instance will be a subclass of DrmHalVTSVendorModule that corresponds to the
+ * supported API version.
+ */
+DrmHalVTSVendorModule* vendorModuleFactory();
+};
+
+class DrmHalVTSVendorModule {
+   public:
+    DrmHalVTSVendorModule() {}
+    virtual ~DrmHalVTSVendorModule() {}
+
+    /**
+     * Return the vendor-specific module API version. The version is an integer
+     * value with initial version 1. The API version indicates which subclass
+     * version DrmHalVTSVendorModule this instance is.
+     */
+    virtual uint32_t getAPIVersion() = 0;
+
+    /**
+     * Return the UUID for the DRM HAL implementation. Protection System
+     * Specific
+     * UUID (see http://dashif.org/identifiers/protection/)
+     */
+    virtual std::vector<uint8_t> getUUID() = 0;
+
+    /**
+     * Return the service name for the DRM HAL implementation. If the hal is a
+     * legacy
+     * drm plugin, i.e. not running as a HIDL service, return the empty string.
+     */
+    virtual std::string getServiceName() = 0;
+
+   private:
+    DrmHalVTSVendorModule(const DrmHalVTSVendorModule&) = delete;
+    void operator=(const DrmHalVTSVendorModule&) = delete;
+};
+
+/**
+ * API Version 1.  This is the baseline version that supports a minimal set
+ * of VTS tests.
+ */
+class DrmHalVTSVendorModule_V1 : public DrmHalVTSVendorModule {
+   public:
+    DrmHalVTSVendorModule_V1() {}
+    virtual ~DrmHalVTSVendorModule_V1() {}
+
+    virtual uint32_t getAPIVersion() { return 1; }
+
+    /**
+     * Handle a provisioning request. This function will be called if the HAL
+     * module's getProvisionRequest returns a provision request.  The vendor
+     * module should process the provisioning request, either by sending it
+     * to a provisioning server, or generating a mock response.  The resulting
+     * provisioning response is returned to the VTS test.
+     *
+     * @param provisioningRequest the provisioning request recieved from
+     * the DRM HAL
+     * @param url the default url the HAL implementation provided with the
+     * provisioning request
+     * @return the generated provisioning response
+     */
+    virtual std::vector<uint8_t> handleProvisioningRequest(
+            const std::vector<uint8_t>& provisioningRequest,
+            const std::string& url) = 0;
+
+    /**
+     * Content configuration specifies content-specific parameters associated
+     * with a key request/response transaction. It allows the VTS test to
+     * request keys and use them to perform decryption.
+     */
+    struct ContentConfiguration {
+        /**
+         * Assign a name for this configuration that will be referred to
+         * in log messages.
+         */
+        const std::string name;
+
+        /**
+         * Server to use when requesting a key response.  This url will be
+         * passed as a parameter to the vendor vts module along with the
+         * key request to perform the key request transaction.
+         */
+        const std::string serverUrl;
+
+        /**
+         * Initialization data provided to getKeyRequest, e.g. PSSH for CENC
+         * content
+         */
+        const std::vector<uint8_t> initData;
+
+        /**
+         *  Mime type provided to getKeyRequest, e.g. "video/mp4", or "cenc"
+         */
+        const std::string mimeType;
+
+        /**
+         * Optional parameters to be associated with the key request
+         */
+        const std::map<std::string, std::string> optionalParameters;
+
+        /**
+         * The keys that will be available once the keys are loaded
+         */
+        struct Key {
+            /**
+             * Indicate if the key content is configured to require secure
+             * buffers,
+             * where the output buffers are protected and cannot be accessed.
+             * A vendor module should provide some content configurations where
+             * isSecure is false, to allow decrypt result verification tests to
+             * be
+             * run.
+             */
+            bool isSecure;
+
+            /**
+             * A key ID identifies a key to use for decryption
+             */
+            const std::vector<uint8_t> keyId;
+
+            /**
+             * The key value is provided to generate expected values for
+             * validating
+             * decryption.  If isSecure is false, no key value is required.
+             */
+            const std::vector<uint8_t> keyValue;
+        };
+        std::vector<Key> keys;
+    };
+
+    /**
+     * Return a list of content configurations that can be exercised by the
+     * VTS test.
+     */
+    virtual std::vector<ContentConfiguration> getContentConfigurations() = 0;
+
+    /**
+     * Handle a key request. This function will be called if the HAL
+     * module's getKeyRequest returns a key request.  The vendor
+     * module should process the key request, either by sending it
+     * to a license server, or by generating a mock response.  The resulting
+     * key response is returned to the VTS test.
+     *
+     * @param keyRequest the key request recieved from the DRM HAL
+     * @param serverUrl the url of the key server that was supplied
+     * by the ContentConfiguration
+     * @return the generated key response
+     */
+    virtual std::vector<uint8_t> handleKeyRequest(
+            const std::vector<uint8_t>& keyRequest,
+            const std::string& serverUrl) = 0;
+};
+
+#endif  // DRM_HAL_VENDOR_MODULE_API_H
diff --git a/drm/1.0/vts/functional/drm_hal_vendor_test.cpp b/drm/1.0/vts/functional/drm_hal_vendor_test.cpp
new file mode 100644
index 0000000..dcfee4e
--- /dev/null
+++ b/drm/1.0/vts/functional/drm_hal_vendor_test.cpp
@@ -0,0 +1,980 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "drm_hal_vendor_test@1.0"
+
+#include <android-base/logging.h>
+#include <android/hardware/drm/1.0/ICryptoFactory.h>
+#include <android/hardware/drm/1.0/ICryptoPlugin.h>
+#include <android/hardware/drm/1.0/IDrmFactory.h>
+#include <android/hardware/drm/1.0/IDrmPlugin.h>
+#include <android/hardware/drm/1.0/types.h>
+#include <android/hidl/allocator/1.0/IAllocator.h>
+#include <gtest/gtest.h>
+#include <hidlmemory/mapping.h>
+#include <memory>
+#include <random>
+
+#include "VtsHalHidlTargetTestBase.h"
+#include "drm_hal_vendor_module_api.h"
+#include "vendor_modules.h"
+
+using ::android::hardware::drm::V1_0::BufferType;
+using ::android::hardware::drm::V1_0::DestinationBuffer;
+using ::android::hardware::drm::V1_0::ICryptoFactory;
+using ::android::hardware::drm::V1_0::ICryptoPlugin;
+using ::android::hardware::drm::V1_0::IDrmFactory;
+using ::android::hardware::drm::V1_0::IDrmPlugin;
+using ::android::hardware::drm::V1_0::KeyedVector;
+using ::android::hardware::drm::V1_0::KeyValue;
+using ::android::hardware::drm::V1_0::KeyRequestType;
+using ::android::hardware::drm::V1_0::KeyType;
+using ::android::hardware::drm::V1_0::Mode;
+using ::android::hardware::drm::V1_0::Pattern;
+using ::android::hardware::drm::V1_0::SecureStop;
+using ::android::hardware::drm::V1_0::SecureStopId;
+using ::android::hardware::drm::V1_0::SessionId;
+using ::android::hardware::drm::V1_0::SharedBuffer;
+using ::android::hardware::drm::V1_0::Status;
+using ::android::hardware::drm::V1_0::SubSample;
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hidl::allocator::V1_0::IAllocator;
+using ::android::hidl::memory::V1_0::IMemory;
+using ::android::sp;
+
+using std::string;
+using std::unique_ptr;
+using std::random_device;
+using std::map;
+using std::mt19937;
+using std::vector;
+
+#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
+#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
+
+static const uint8_t kInvalidUUID[16] = {
+        0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80,
+        0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80,
+};
+
+static drm_vts::VendorModules* gVendorModules = nullptr;
+
+class DrmHalVendorFactoryTest : public testing::TestWithParam<std::string> {
+   public:
+    DrmHalVendorFactoryTest()
+        : vendorModule(gVendorModules ? static_cast<DrmHalVTSVendorModule_V1*>(
+                                                gVendorModules->getVendorModule(
+                                                        GetParam()))
+                                      : nullptr) {}
+
+    virtual ~DrmHalVendorFactoryTest() {}
+
+    virtual void SetUp() {
+        const ::testing::TestInfo* const test_info =
+                ::testing::UnitTest::GetInstance()->current_test_info();
+        ALOGD("Running test %s.%s from vendor module %s",
+              test_info->test_case_name(), test_info->name(),
+              GetParam().c_str());
+
+        ASSERT_NE(vendorModule, nullptr);
+        string name = vendorModule->getServiceName();
+        drmFactory =
+                ::testing::VtsHalHidlTargetTestBase::getService<IDrmFactory>(
+                        name != "default" ? name : "drm");
+        ASSERT_NE(drmFactory, nullptr);
+        cryptoFactory =
+                ::testing::VtsHalHidlTargetTestBase::getService<ICryptoFactory>(
+                        name != "default" ? name : "crypto");
+        ASSERT_NE(cryptoFactory, nullptr);
+    }
+
+    virtual void TearDown() override {}
+
+   protected:
+    hidl_array<uint8_t, 16> getVendorUUID() {
+        vector<uint8_t> uuid = vendorModule->getUUID();
+        return hidl_array<uint8_t, 16>(&uuid[0]);
+    }
+
+    sp<IDrmFactory> drmFactory;
+    sp<ICryptoFactory> cryptoFactory;
+    unique_ptr<DrmHalVTSVendorModule_V1> vendorModule;
+};
+
+/**
+ * Ensure the factory supports its scheme UUID
+ */
+TEST_P(DrmHalVendorFactoryTest, VendorPluginSupported) {
+    EXPECT_TRUE(drmFactory->isCryptoSchemeSupported(getVendorUUID()));
+    EXPECT_TRUE(cryptoFactory->isCryptoSchemeSupported(getVendorUUID()));
+}
+
+/**
+ * Ensure the factory doesn't support an invalid scheme UUID
+ */
+TEST_P(DrmHalVendorFactoryTest, InvalidPluginNotSupported) {
+    EXPECT_FALSE(drmFactory->isCryptoSchemeSupported(kInvalidUUID));
+    EXPECT_FALSE(cryptoFactory->isCryptoSchemeSupported(kInvalidUUID));
+}
+
+/**
+ * Ensure vendor drm plugin can be created
+ */
+TEST_P(DrmHalVendorFactoryTest, CreateVendorDrmPlugin) {
+    hidl_string packageName("android.hardware.drm.test");
+    auto res = drmFactory->createPlugin(
+            getVendorUUID(), packageName,
+            [&](Status status, const sp<IDrmPlugin>& plugin) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_NE(plugin, nullptr);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Ensure vendor crypto plugin can be created
+ */
+TEST_P(DrmHalVendorFactoryTest, CreateVendorCryptoPlugin) {
+    hidl_vec<uint8_t> initVec;
+    auto res = cryptoFactory->createPlugin(
+            getVendorUUID(), initVec,
+            [&](Status status, const sp<ICryptoPlugin>& plugin) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_NE(plugin, nullptr);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Ensure invalid drm plugin can't be created
+ */
+TEST_P(DrmHalVendorFactoryTest, CreateInvalidDrmPlugin) {
+    hidl_string packageName("android.hardware.drm.test");
+    auto res = drmFactory->createPlugin(
+            kInvalidUUID, packageName,
+            [&](Status status, const sp<IDrmPlugin>& plugin) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+                EXPECT_EQ(plugin, nullptr);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Ensure invalid crypto plugin can't be created
+ */
+TEST_P(DrmHalVendorFactoryTest, CreateInvalidCryptoPlugin) {
+    hidl_vec<uint8_t> initVec;
+    auto res = cryptoFactory->createPlugin(
+            kInvalidUUID, initVec,
+            [&](Status status, const sp<ICryptoPlugin>& plugin) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+                EXPECT_EQ(plugin, nullptr);
+            });
+    EXPECT_OK(res);
+}
+
+class DrmHalVendorPluginTest : public DrmHalVendorFactoryTest {
+   public:
+    virtual ~DrmHalVendorPluginTest() {}
+    virtual void SetUp() override {
+        // Create factories
+        DrmHalVendorFactoryTest::SetUp();
+
+        hidl_string packageName("android.hardware.drm.test");
+        auto res = drmFactory->createPlugin(
+                getVendorUUID(), packageName,
+                [this](Status status, const sp<IDrmPlugin>& plugin) {
+                    EXPECT_EQ(Status::OK, status);
+                    ASSERT_NE(plugin, nullptr);
+                    drmPlugin = plugin;
+                });
+        ASSERT_OK(res);
+
+        hidl_vec<uint8_t> initVec;
+        res = cryptoFactory->createPlugin(
+                getVendorUUID(), initVec,
+                [this](Status status, const sp<ICryptoPlugin>& plugin) {
+                    EXPECT_EQ(Status::OK, status);
+                    ASSERT_NE(plugin, nullptr);
+                    cryptoPlugin = plugin;
+                });
+        ASSERT_OK(res);
+    }
+
+    virtual void TearDown() override {}
+
+    SessionId openSession();
+    void closeSession(const SessionId& sessionId);
+    sp<IMemory> getDecryptMemory(size_t size, size_t index);
+
+   protected:
+    sp<IDrmPlugin> drmPlugin;
+    sp<ICryptoPlugin> cryptoPlugin;
+};
+
+/**
+ *  DrmPlugin tests
+ */
+
+/**
+ * Test that a DRM plugin can handle provisioning.  While
+ * it is not required that a DRM scheme require provisioning,
+ * it should at least return appropriate status values. If
+ * a provisioning request is returned, it is passed to the
+ * vendor module which should provide a provisioning response
+ * that is delivered back to the HAL.
+ */
+
+TEST_P(DrmHalVendorPluginTest, DoProvisioning) {
+    hidl_string certificateType;
+    hidl_string certificateAuthority;
+    hidl_vec<uint8_t> provisionRequest;
+    hidl_string defaultUrl;
+    auto res = drmPlugin->getProvisionRequest(
+            certificateType, certificateAuthority,
+            [&](Status status, const hidl_vec<uint8_t>& request,
+                const hidl_string& url) {
+                if (status == Status::OK) {
+                    EXPECT_NE(request.size(), 0u);
+                    provisionRequest = request;
+                    defaultUrl = url;
+                } else if (status == Status::ERROR_DRM_CANNOT_HANDLE) {
+                    EXPECT_EQ(0u, request.size());
+                }
+            });
+    EXPECT_OK(res);
+
+    if (provisionRequest.size() > 0) {
+        vector<uint8_t> response = vendorModule->handleProvisioningRequest(
+                provisionRequest, defaultUrl);
+        ASSERT_NE(0u, response.size());
+
+        auto res = drmPlugin->provideProvisionResponse(
+                response, [&](Status status, const hidl_vec<uint8_t>&,
+                              const hidl_vec<uint8_t>&) {
+                    EXPECT_EQ(Status::OK, status);
+                });
+        EXPECT_OK(res);
+    }
+}
+
+/**
+ * The DRM HAL should return BAD_VALUE if an empty provisioning
+ * response is provided.
+ */
+TEST_P(DrmHalVendorPluginTest, ProvideEmptyProvisionResponse) {
+    hidl_vec<uint8_t> response;
+    auto res = drmPlugin->provideProvisionResponse(
+            response, [&](Status status, const hidl_vec<uint8_t>&,
+                          const hidl_vec<uint8_t>&) {
+                EXPECT_EQ(Status::BAD_VALUE, status);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Helper method to open a session and verify that a non-empty
+ * session ID is returned
+ */
+SessionId DrmHalVendorPluginTest::openSession() {
+    SessionId sessionId;
+
+    auto res = drmPlugin->openSession([&](Status status, const SessionId& id) {
+        EXPECT_EQ(Status::OK, status);
+        EXPECT_NE(id.size(), 0u);
+        sessionId = id;
+    });
+    EXPECT_OK(res);
+    return sessionId;
+}
+
+/**
+ * Helper method to close a session
+ */
+void DrmHalVendorPluginTest::closeSession(const SessionId& sessionId) {
+    Status status = drmPlugin->closeSession(sessionId);
+    EXPECT_EQ(Status::OK, status);
+}
+
+/**
+ * Test that a session can be opened and closed
+ */
+TEST_P(DrmHalVendorPluginTest, OpenCloseSession) {
+    auto sessionId = openSession();
+    closeSession(sessionId);
+}
+
+/**
+ * Test that attempting to close an invalid (empty) sessionId
+ * is prohibited with the documented error code.
+ */
+TEST_P(DrmHalVendorPluginTest, CloseInvalidSession) {
+    SessionId invalidSessionId;
+    Status status = drmPlugin->closeSession(invalidSessionId);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+}
+
+/**
+ * Test that attempting to close a valid session twice
+ * is prohibited with the documented error code.
+ */
+TEST_P(DrmHalVendorPluginTest, CloseClosedSession) {
+    auto sessionId = openSession();
+    closeSession(sessionId);
+    Status status = drmPlugin->closeSession(sessionId);
+    EXPECT_EQ(Status::ERROR_DRM_SESSION_NOT_OPENED, status);
+}
+
+/**
+ * A get key request should fail if no sessionId is provided
+ */
+TEST_P(DrmHalVendorPluginTest, GetKeyRequestNoSession) {
+    SessionId invalidSessionId;
+    hidl_vec<uint8_t> initData;
+    hidl_string mimeType = "video/mp4";
+    KeyedVector optionalParameters;
+    auto res = drmPlugin->getKeyRequest(
+            invalidSessionId, initData, mimeType, KeyType::STREAMING,
+            optionalParameters,
+            [&](Status status, const hidl_vec<uint8_t>&, KeyRequestType,
+                const hidl_string&) { EXPECT_EQ(Status::BAD_VALUE, status); });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that an empty sessionID returns BAD_VALUE
+ */
+TEST_P(DrmHalVendorPluginTest, ProvideKeyResponseEmptySessionId) {
+    SessionId session;
+
+    hidl_vec<uint8_t> keyResponse = {0x7b, 0x22, 0x6b, 0x65,
+                                     0x79, 0x73, 0x22, 0x3a};
+    auto res = drmPlugin->provideKeyResponse(
+            session, keyResponse,
+            [&](Status status, const hidl_vec<uint8_t>& keySetId) {
+                EXPECT_EQ(Status::BAD_VALUE, status);
+                EXPECT_EQ(keySetId.size(), 0u);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that an empty key response returns BAD_VALUE
+ */
+TEST_P(DrmHalVendorPluginTest, ProvideKeyResponseEmptyResponse) {
+    SessionId session = openSession();
+    hidl_vec<uint8_t> emptyResponse;
+    auto res = drmPlugin->provideKeyResponse(
+            session, emptyResponse,
+            [&](Status status, const hidl_vec<uint8_t>& keySetId) {
+                EXPECT_EQ(Status::BAD_VALUE, status);
+                EXPECT_EQ(keySetId.size(), 0u);
+            });
+    EXPECT_OK(res);
+    closeSession(session);
+}
+
+/**
+ * Test that the plugin either doesn't support getting
+ * secure stops, or has no secure stops available after
+ * clearing them.
+ */
+TEST_P(DrmHalVendorPluginTest, GetSecureStops) {
+    // There may be secure stops, depending on if there were keys
+    // loaded and unloaded previously. Clear them to get to a known
+    // state, then make sure there are none.
+    auto res = drmPlugin->getSecureStops(
+            [&](Status status, const hidl_vec<SecureStop>&) {
+                if (status != Status::OK) {
+                    EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+                }
+            });
+    EXPECT_OK(res);
+
+    res = drmPlugin->getSecureStops(
+            [&](Status status, const hidl_vec<SecureStop>& secureStops) {
+                if (status == Status::OK) {
+                    EXPECT_EQ(secureStops.size(), 0u);
+                } else {
+                    EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+                }
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that the clearkey plugin returns BAD_VALUE if
+ * an empty ssid is provided.
+ */
+TEST_P(DrmHalVendorPluginTest, GetSecureStopEmptySSID) {
+    SecureStopId ssid;
+    auto res = drmPlugin->getSecureStop(
+            ssid, [&](Status status, const SecureStop&) {
+                EXPECT_EQ(Status::BAD_VALUE, status);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that releasing all secure stops either isn't supported
+ * or is completed successfully
+ */
+TEST_P(DrmHalVendorPluginTest, ReleaseAllSecureStops) {
+    Status status = drmPlugin->releaseAllSecureStops();
+    EXPECT_TRUE(status == Status::OK ||
+                status == Status::ERROR_DRM_CANNOT_HANDLE);
+}
+
+/**
+ * Releasing a secure stop without first getting one and sending it to the
+ * server to get a valid SSID should return ERROR_DRM_INVALID_STATE.
+ * This is an optional API so it can also return CANNOT_HANDLE.
+ */
+TEST_P(DrmHalVendorPluginTest, ReleaseSecureStopSequenceError) {
+    SecureStopId ssid = {1, 2, 3, 4};
+    Status status = drmPlugin->releaseSecureStop(ssid);
+    EXPECT_TRUE(status == Status::ERROR_DRM_INVALID_STATE ||
+                status == Status::ERROR_DRM_CANNOT_HANDLE);
+}
+
+/**
+ * Test that releasing a specific secure stop with an empty ssid
+ * return BAD_VALUE. This is an optional API so it can also return
+ * CANNOT_HANDLE.
+ */
+TEST_P(DrmHalVendorPluginTest, ReleaseSecureStopEmptySSID) {
+    SecureStopId ssid;
+    Status status = drmPlugin->releaseSecureStop(ssid);
+    EXPECT_TRUE(status == Status::BAD_VALUE ||
+                status == Status::ERROR_DRM_CANNOT_HANDLE);
+}
+
+/**
+ * The following five tests verify that the properties
+ * defined in the MediaDrm API are supported by
+ * the plugin.
+ */
+TEST_P(DrmHalVendorPluginTest, GetVendorProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "vendor", [&](Status status, const hidl_string& value) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_NE(value.size(), 0u);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_P(DrmHalVendorPluginTest, GetVersionProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "version", [&](Status status, const hidl_string& value) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_NE(value.size(), 0u);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_P(DrmHalVendorPluginTest, GetDescriptionProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "description", [&](Status status, const hidl_string& value) {
+                EXPECT_EQ(Status::OK, status);
+                EXPECT_NE(value.size(), 0u);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_P(DrmHalVendorPluginTest, GetAlgorithmsProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "algorithms", [&](Status status, const hidl_string& value) {
+                if (status == Status::OK) {
+                    EXPECT_NE(value.size(), 0u);
+                } else {
+                    EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+                }
+            });
+    EXPECT_OK(res);
+}
+
+TEST_P(DrmHalVendorPluginTest, GetPropertyUniqueDeviceID) {
+    auto res = drmPlugin->getPropertyByteArray(
+            "deviceUniqueId",
+            [&](Status status, const hidl_vec<uint8_t>& value) {
+                if (status == Status::OK) {
+                    EXPECT_NE(value.size(), 0u);
+                } else {
+                    EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+                }
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that attempting to read invalid string and byte array
+ * properties returns the documented error code.
+ */
+TEST_P(DrmHalVendorPluginTest, GetInvalidStringProperty) {
+    auto res = drmPlugin->getPropertyString(
+            "invalid", [&](Status status, const hidl_string&) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_P(DrmHalVendorPluginTest, GetInvalidByteArrayProperty) {
+    auto res = drmPlugin->getPropertyByteArray(
+            "invalid", [&](Status status, const hidl_vec<uint8_t>&) {
+                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
+            });
+    EXPECT_OK(res);
+}
+
+/**
+ * Test that setting invalid string and byte array properties returns
+ * the expected status value.
+ */
+TEST_P(DrmHalVendorPluginTest, SetStringPropertyNotSupported) {
+    EXPECT_EQ(drmPlugin->setPropertyString("awefijaeflijwef", "value"),
+              Status::ERROR_DRM_CANNOT_HANDLE);
+}
+
+TEST_P(DrmHalVendorPluginTest, SetByteArrayPropertyNotSupported) {
+    hidl_vec<uint8_t> value;
+    EXPECT_EQ(drmPlugin->setPropertyByteArray("awefijaeflijwef", value),
+              Status::ERROR_DRM_CANNOT_HANDLE);
+}
+
+/**
+ * Test that setting an invalid cipher algorithm returns
+ * the expected status value.
+ */
+TEST_P(DrmHalVendorPluginTest, SetCipherInvalidAlgorithm) {
+    SessionId session = openSession();
+    hidl_string algorithm;
+    Status status = drmPlugin->setCipherAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+    closeSession(session);
+}
+
+/**
+ * Test that setting a cipher algorithm with no session returns
+ * the expected status value.
+ */
+TEST_P(DrmHalVendorPluginTest, SetCipherAlgorithmNoSession) {
+    SessionId session;
+    hidl_string algorithm = "AES/CBC/NoPadding";
+    Status status = drmPlugin->setCipherAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+}
+
+/**
+ * Test that setting a valid cipher algorithm returns
+ * the expected status value. It is not required that all
+ * vendor modules support this algorithm, but they must
+ * either accept it or return ERROR_DRM_CANNOT_HANDLE
+ */
+TEST_P(DrmHalVendorPluginTest, SetCipherAlgorithm) {
+    SessionId session = openSession();
+    ;
+    hidl_string algorithm = "AES/CBC/NoPadding";
+    Status status = drmPlugin->setCipherAlgorithm(session, algorithm);
+    EXPECT_TRUE(status == Status::OK ||
+                status == Status::ERROR_DRM_CANNOT_HANDLE);
+    closeSession(session);
+}
+
+/**
+ * Test that setting an invalid mac algorithm returns
+ * the expected status value.
+ */
+TEST_P(DrmHalVendorPluginTest, SetMacInvalidAlgorithm) {
+    SessionId session = openSession();
+    hidl_string algorithm;
+    Status status = drmPlugin->setMacAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+    closeSession(session);
+}
+
+/**
+ * Test that setting a mac algorithm with no session returns
+ * the expected status value.
+ */
+TEST_P(DrmHalVendorPluginTest, SetMacNullAlgorithmNoSession) {
+    SessionId session;
+    hidl_string algorithm = "HmacSHA256";
+    Status status = drmPlugin->setMacAlgorithm(session, algorithm);
+    EXPECT_EQ(Status::BAD_VALUE, status);
+}
+
+/**
+ * Test that setting a valid mac algorithm returns
+ * the expected status value. It is not required that all
+ * vendor modules support this algorithm, but they must
+ * either accept it or return ERROR_DRM_CANNOT_HANDLE
+ */
+TEST_P(DrmHalVendorPluginTest, SetMacAlgorithm) {
+    SessionId session = openSession();
+    hidl_string algorithm = "HmacSHA256";
+    Status status = drmPlugin->setMacAlgorithm(session, algorithm);
+    EXPECT_TRUE(status == Status::OK ||
+                status == Status::ERROR_DRM_CANNOT_HANDLE);
+    closeSession(session);
+}
+
+/**
+ * The Generic* methods provide general purpose crypto operations
+ * that may be used for applications other than DRM. They leverage
+ * the hardware root of trust and secure key distribution mechanisms
+ * of a DRM system to enable app-specific crypto functionality where
+ * the crypto keys are not exposed outside of the trusted execution
+ * environment.
+ *
+ * Generic encrypt/decrypt/sign/verify should fail on invalid
+ * inputs, e.g. empty sessionId
+ */
+TEST_P(DrmHalVendorPluginTest, GenericEncryptNoSession) {
+    SessionId session;
+    hidl_vec<uint8_t> keyId, input, iv;
+    auto res = drmPlugin->encrypt(
+            session, keyId, input, iv,
+            [&](Status status, const hidl_vec<uint8_t>&) {
+                EXPECT_EQ(Status::ERROR_DRM_SESSION_NOT_OPENED, status);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_P(DrmHalVendorPluginTest, GenericDecryptNoSession) {
+    SessionId session;
+    hidl_vec<uint8_t> keyId, input, iv;
+    auto res = drmPlugin->decrypt(
+            session, keyId, input, iv,
+            [&](Status status, const hidl_vec<uint8_t>&) {
+                EXPECT_EQ(Status::ERROR_DRM_SESSION_NOT_OPENED, status);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_P(DrmHalVendorPluginTest, GenericSignNoSession) {
+    SessionId session;
+    hidl_vec<uint8_t> keyId, message;
+    auto res = drmPlugin->sign(
+            session, keyId, message,
+            [&](Status status, const hidl_vec<uint8_t>&) {
+                EXPECT_EQ(Status::ERROR_DRM_SESSION_NOT_OPENED, status);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_P(DrmHalVendorPluginTest, GenericVerifyNoSession) {
+    SessionId session;
+    hidl_vec<uint8_t> keyId, message, signature;
+    auto res = drmPlugin->verify(
+            session, keyId, message, signature, [&](Status status, bool) {
+                EXPECT_EQ(Status::ERROR_DRM_SESSION_NOT_OPENED, status);
+            });
+    EXPECT_OK(res);
+}
+
+TEST_P(DrmHalVendorPluginTest, GenericSignRSANoSession) {
+    SessionId session;
+    hidl_string algorithm;
+    hidl_vec<uint8_t> message, wrappedKey;
+    auto res = drmPlugin->signRSA(session, algorithm, message, wrappedKey,
+                                  [&](Status status, const hidl_vec<uint8_t>&) {
+                                      EXPECT_EQ(Status::BAD_VALUE, status);
+                                  });
+    EXPECT_OK(res);
+}
+
+/**
+ * Exercise the requiresSecureDecoderComponent method. Additional tests
+ * will verify positive cases with specific vendor content configurations.
+ * Below we just test the negative cases.
+ */
+
+/**
+ * Verify that requiresSecureDecoderComponent handles empty mimetype.
+ */
+TEST_P(DrmHalVendorPluginTest, RequiresSecureDecoderEmptyMimeType) {
+    EXPECT_FALSE(cryptoPlugin->requiresSecureDecoderComponent(""));
+}
+
+/**
+ * Verify that requiresSecureDecoderComponent handles invalid mimetype.
+ */
+TEST_P(DrmHalVendorPluginTest, RequiresSecureDecoderInvalidMimeType) {
+    EXPECT_FALSE(cryptoPlugin->requiresSecureDecoderComponent("bad"));
+}
+
+/**
+ *  CryptoPlugin tests
+ */
+
+/**
+ * Exercise the NotifyResolution API. There is no observable result,
+ * just call the method for coverage.
+ */
+TEST_P(DrmHalVendorPluginTest, NotifyResolution) {
+    cryptoPlugin->notifyResolution(1920, 1080);
+}
+
+/**
+ * getDecryptMemory allocates memory for decryption, then sets it
+ * as a shared buffer base in the crypto hal.  The allocated and
+ * mapped IMemory is returned.
+ *
+ * @param size the size of the memory segment to allocate
+ * @param the index of the memory segment which will be used
+ * to refer to it for decryption.
+ */
+sp<IMemory> DrmHalVendorPluginTest::getDecryptMemory(size_t size,
+                                                     size_t index) {
+    sp<IAllocator> ashmemAllocator = IAllocator::getService("ashmem");
+    EXPECT_NE(ashmemAllocator, nullptr);
+
+    hidl_memory hidlMemory;
+    auto res = ashmemAllocator->allocate(
+            size, [&](bool success, const hidl_memory& memory) {
+                EXPECT_EQ(success, true);
+                EXPECT_EQ(memory.size(), size);
+                hidlMemory = memory;
+            });
+
+    EXPECT_OK(res);
+
+    sp<IMemory> mappedMemory = mapMemory(hidlMemory);
+    EXPECT_NE(mappedMemory, nullptr);
+    res = cryptoPlugin->setSharedBufferBase(hidlMemory, index);
+    EXPECT_OK(res);
+    return mappedMemory;
+}
+
+/**
+ * Exercise the setMediaDrmSession method. setMediaDrmSession
+ * is used to associate a drm session with a crypto session.
+ */
+TEST_P(DrmHalVendorPluginTest, SetMediaDrmSession) {
+    auto sessionId = openSession();
+    Status status = cryptoPlugin->setMediaDrmSession(sessionId);
+    EXPECT_EQ(Status::OK, status);
+    closeSession(sessionId);
+}
+
+/**
+ * setMediaDrmSession with a closed session id
+ */
+TEST_P(DrmHalVendorPluginTest, SetMediaDrmSessionClosedSession) {
+    auto sessionId = openSession();
+    closeSession(sessionId);
+    Status status = cryptoPlugin->setMediaDrmSession(sessionId);
+    EXPECT_EQ(Status::ERROR_DRM_SESSION_NOT_OPENED, status);
+}
+
+/**
+ * Decrypt tests
+ */
+
+class DrmHalVendorDecryptTest : public DrmHalVendorPluginTest {
+   public:
+    DrmHalVendorDecryptTest() = default;
+    virtual ~DrmHalVendorDecryptTest() {}
+
+   protected:
+    void loadKeys(const SessionId& sessionId,
+                  const DrmHalVTSVendorModule_V1::ContentConfiguration&
+                          configuration);
+    void fillRandom(const sp<IMemory>& memory);
+    KeyedVector toHidlKeyedVector(const map<string, string>& params);
+    hidl_array<uint8_t, 16> toHidlArray(const vector<uint8_t>& vec) {
+        EXPECT_EQ(vec.size(), 16u);
+        return hidl_array<uint8_t, 16>(&vec[0]);
+    }
+};
+
+KeyedVector DrmHalVendorDecryptTest::toHidlKeyedVector(
+        const map<string, string>& params) {
+    std::vector<KeyValue> stdKeyedVector;
+    for (auto it = params.begin(); it != params.end(); ++it) {
+        KeyValue keyValue;
+        keyValue.key = it->first;
+        keyValue.value = it->second;
+        stdKeyedVector.push_back(keyValue);
+    }
+    return KeyedVector(stdKeyedVector);
+}
+
+/**
+ * Helper method to load keys for subsequent decrypt tests.
+ * These tests use predetermined key request/response to
+ * avoid requiring a round trip to a license server.
+ */
+void DrmHalVendorDecryptTest::loadKeys(
+        const SessionId& sessionId,
+        const DrmHalVTSVendorModule_V1::ContentConfiguration& configuration) {
+    hidl_vec<uint8_t> keyRequest;
+    auto res = drmPlugin->getKeyRequest(
+            sessionId, configuration.initData, configuration.mimeType,
+            KeyType::STREAMING,
+            toHidlKeyedVector(configuration.optionalParameters),
+            [&](Status status, const hidl_vec<uint8_t>& request,
+                KeyRequestType type, const hidl_string&) {
+                EXPECT_EQ(Status::OK, status)
+                        << "Failed to get "
+                           "key request for configuration "
+                        << configuration.name;
+                EXPECT_EQ(type, KeyRequestType::INITIAL);
+                EXPECT_NE(request.size(), 0u) << "Expected key request size"
+                                                 " to have length > 0 bytes";
+                keyRequest = request;
+            });
+    EXPECT_OK(res);
+
+    /**
+     * Get key response from vendor module
+     */
+    hidl_vec<uint8_t> keyResponse =
+            vendorModule->handleKeyRequest(keyRequest, configuration.serverUrl);
+
+    EXPECT_NE(keyResponse.size(), 0u) << "Expected key response size "
+                                         "to have length > 0 bytes";
+
+    res = drmPlugin->provideKeyResponse(
+            sessionId, keyResponse,
+            [&](Status status, const hidl_vec<uint8_t>&) {
+                EXPECT_EQ(Status::OK, status)
+                        << "Failure providing "
+                           "key response for configuration "
+                        << configuration.name;
+            });
+    EXPECT_OK(res);
+}
+
+void DrmHalVendorDecryptTest::fillRandom(const sp<IMemory>& memory) {
+    random_device rd;
+    mt19937 rand(rd());
+    for (size_t i = 0; i < memory->getSize() / sizeof(uint32_t); i++) {
+        auto p = static_cast<uint32_t*>(
+                static_cast<void*>(memory->getPointer()));
+        p[i] = rand();
+    }
+}
+
+TEST_P(DrmHalVendorDecryptTest, ValidateConfigurations) {
+    vector<DrmHalVTSVendorModule_V1::ContentConfiguration> configurations =
+            vendorModule->getContentConfigurations();
+    const char* kVendorStr = "Vendor module ";
+    for (auto config : configurations) {
+        ASSERT_TRUE(config.name.size() > 0) << kVendorStr << "has no name";
+        ASSERT_TRUE(config.serverUrl.size() > 0) << kVendorStr
+                                                 << "has no serverUrl";
+        ASSERT_TRUE(config.initData.size() > 0) << kVendorStr
+                                                << "has no init data";
+        ASSERT_TRUE(config.mimeType.size() > 0) << kVendorStr
+                                                << "has no mime type";
+        ASSERT_TRUE(config.keys.size() >= 1) << kVendorStr << "has no keys";
+        for (auto key : config.keys) {
+            ASSERT_TRUE(key.keyId.size() > 0) << kVendorStr
+                                              << " has zero length keyId";
+            ASSERT_TRUE(key.keyId.size() > 0) << kVendorStr
+                                              << " has zero length key value";
+        }
+    }
+}
+
+/**
+ * Positive decrypt test.  "Decrypt" a single clear
+ * segment.  Verify data matches.
+ */
+TEST_P(DrmHalVendorDecryptTest, ClearSegmentTest) {
+    vector<DrmHalVTSVendorModule_V1::ContentConfiguration> configurations =
+            vendorModule->getContentConfigurations();
+    for (auto config : configurations) {
+        const size_t kSegmentSize = 1024;
+        const size_t kSegmentIndex = 0;
+        uint8_t iv[16] = {0};
+
+        sp<IMemory> sharedMemory =
+                getDecryptMemory(kSegmentSize * 2, kSegmentIndex);
+
+        SharedBuffer sourceBuffer = {
+                .bufferId = kSegmentIndex, .offset = 0, .size = kSegmentSize};
+        fillRandom(sharedMemory);
+
+        DestinationBuffer destBuffer = {.type = BufferType::SHARED_MEMORY,
+                                        {.bufferId = kSegmentIndex,
+                                         .offset = kSegmentSize,
+                                         .size = kSegmentSize},
+                                        .secureMemory = nullptr};
+
+        Pattern noPattern = {0, 0};
+        vector<SubSample> subSamples = {{.numBytesOfClearData = kSegmentSize,
+                                         .numBytesOfEncryptedData = 0}};
+        uint64_t offset = 0;
+
+        auto sessionId = openSession();
+        loadKeys(sessionId, config);
+
+        Status status = cryptoPlugin->setMediaDrmSession(sessionId);
+        EXPECT_EQ(Status::OK, status);
+
+        const bool kNotSecure = false;
+        auto res = cryptoPlugin->decrypt(
+                kNotSecure, toHidlArray(config.keys[0].keyId), iv,
+                Mode::UNENCRYPTED, noPattern, subSamples, sourceBuffer, offset,
+                destBuffer, [&](Status status, uint32_t bytesWritten,
+                                string detailedError) {
+                    EXPECT_EQ(Status::OK, status) << "Failure in decryption "
+                                                     "for configuration "
+                                                  << config.name << ": "
+                                                  << detailedError;
+                    EXPECT_EQ(bytesWritten, kSegmentSize);
+                });
+        EXPECT_OK(res);
+        uint8_t* base = static_cast<uint8_t*>(
+                static_cast<void*>(sharedMemory->getPointer()));
+
+        EXPECT_EQ(0,
+                  memcmp(static_cast<void*>(base),
+                         static_cast<void*>(base + kSegmentSize), kSegmentSize))
+                << "decrypt data mismatch";
+        closeSession(sessionId);
+    }
+}
+
+/**
+ * Instantiate the set of test cases for each vendor module
+ */
+
+INSTANTIATE_TEST_CASE_P(
+        DrmHalVendorFactoryTestCases, DrmHalVendorFactoryTest,
+        testing::ValuesIn(gVendorModules->getVendorModulePaths()));
+
+INSTANTIATE_TEST_CASE_P(
+        DrmHalVendorPluginTestCases, DrmHalVendorPluginTest,
+        testing::ValuesIn(gVendorModules->getVendorModulePaths()));
+
+INSTANTIATE_TEST_CASE_P(
+        DrmHalVendorDecryptTestCases, DrmHalVendorDecryptTest,
+        testing::ValuesIn(gVendorModules->getVendorModulePaths()));
+
+int main(int argc, char** argv) {
+    gVendorModules =
+            new drm_vts::VendorModules("/data/nativetest/drm_hidl_test/vendor");
+    ::testing::InitGoogleTest(&argc, argv);
+    return RUN_ALL_TESTS();
+}
diff --git a/drm/1.0/vts/functional/shared_library.cpp b/drm/1.0/vts/functional/shared_library.cpp
new file mode 100644
index 0000000..6658150
--- /dev/null
+++ b/drm/1.0/vts/functional/shared_library.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "drm-vts-shared-library"
+
+#include <dlfcn.h>
+#include <shared_library.h>
+
+using std::string;
+
+namespace drm_vts {
+
+SharedLibrary::SharedLibrary(const string& path) {
+    mLibHandle = dlopen(path.c_str(), RTLD_NOW);
+}
+
+SharedLibrary::~SharedLibrary() {
+    if (mLibHandle != NULL) {
+        dlclose(mLibHandle);
+        mLibHandle = NULL;
+    }
+}
+
+bool SharedLibrary::operator!() const {
+    return mLibHandle == NULL;
+}
+
+void* SharedLibrary::lookup(const char* symbol) const {
+    if (!mLibHandle) {
+        return NULL;
+    }
+
+    // Clear last error before we load the symbol again,
+    // in case the caller didn't retrieve it.
+    (void)dlerror();
+    return dlsym(mLibHandle, symbol);
+}
+
+const char* SharedLibrary::lastError() const {
+    const char* error = dlerror();
+    return error ? error : "No errors or unknown error";
+}
+};
diff --git a/drm/1.0/vts/functional/shared_library.h b/drm/1.0/vts/functional/shared_library.h
new file mode 100644
index 0000000..1f32243
--- /dev/null
+++ b/drm/1.0/vts/functional/shared_library.h
@@ -0,0 +1,41 @@
+/*
+ * 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 SHARED_LIBRARY_H_
+#define SHARED_LIBRARY_H_
+
+#include <string>
+#include <vector>
+
+namespace drm_vts {
+class SharedLibrary {
+   public:
+    explicit SharedLibrary(const std::string& path);
+    ~SharedLibrary();
+
+    bool operator!() const;
+    void* lookup(const char* symbol) const;
+    const char* lastError() const;
+
+   private:
+    void* mLibHandle;
+
+    SharedLibrary(const SharedLibrary&) = delete;
+    void operator=(const SharedLibrary&) = delete;
+};
+};
+
+#endif  // SHARED_LIBRARY_H_
diff --git a/drm/1.0/vts/functional/vendor/lib/libvtswidevine.so b/drm/1.0/vts/functional/vendor/lib/libvtswidevine.so
new file mode 100755
index 0000000..d365b34
--- /dev/null
+++ b/drm/1.0/vts/functional/vendor/lib/libvtswidevine.so
Binary files differ
diff --git a/drm/1.0/vts/functional/vendor_modules.cpp b/drm/1.0/vts/functional/vendor_modules.cpp
new file mode 100644
index 0000000..34af6f8
--- /dev/null
+++ b/drm/1.0/vts/functional/vendor_modules.cpp
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "drm-vts-vendor-modules"
+
+#include <dirent.h>
+#include <dlfcn.h>
+#include <utils/Log.h>
+#include <memory>
+
+#include "shared_library.h"
+#include "vendor_modules.h"
+
+using std::string;
+using std::vector;
+using std::unique_ptr;
+
+namespace drm_vts {
+vector<string> VendorModules::getVendorModulePaths() {
+    if (mModuleList.size() > 0) {
+        return mModuleList;
+    }
+
+    DIR* dir = opendir(mModulesPath.c_str());
+    if (dir == NULL) {
+        ALOGE("Unable to open drm VTS vendor directory %s",
+              mModulesPath.c_str());
+        return mModuleList;
+    }
+
+    struct dirent* entry;
+    while ((entry = readdir(dir))) {
+        string fullpath = mModulesPath + "/" + entry->d_name;
+        if (endsWith(fullpath, ".so")) {
+            mModuleList.push_back(fullpath);
+        }
+    }
+
+    closedir(dir);
+    return mModuleList;
+}
+
+DrmHalVTSVendorModule* VendorModules::getVendorModule(const string& path) {
+    unique_ptr<SharedLibrary>& library = mOpenLibraries[path];
+    if (!library) {
+        library = unique_ptr<SharedLibrary>(new SharedLibrary(path));
+        if (!library) {
+            ALOGE("failed to map shared library %s", path.c_str());
+            return NULL;
+        }
+    }
+    void* symbol = library->lookup("vendorModuleFactory");
+    if (symbol == NULL) {
+        ALOGE("getVendorModule failed to lookup 'vendorModuleFactory' in %s: "
+              "%s",
+              path.c_str(), library->lastError());
+        return NULL;
+    }
+    typedef DrmHalVTSVendorModule* (*ModuleFactory)();
+    ModuleFactory moduleFactory = reinterpret_cast<ModuleFactory>(symbol);
+    return (*moduleFactory)();
+}
+};
diff --git a/drm/1.0/vts/functional/vendor_modules.h b/drm/1.0/vts/functional/vendor_modules.h
new file mode 100644
index 0000000..5371a0d
--- /dev/null
+++ b/drm/1.0/vts/functional/vendor_modules.h
@@ -0,0 +1,63 @@
+/*
+ * 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 VENDOR_MODULES_H
+#define VENDOR_MODULES_H
+
+#include <map>
+
+#include "shared_library.h"
+
+class DrmHalVTSVendorModule;
+
+namespace drm_vts {
+class VendorModules {
+   public:
+    /**
+     * Initialize with a file system path where the shared libraries
+     * are to be found.
+     */
+    explicit VendorModules(const std::string& path) : mModulesPath(path) {}
+    ~VendorModules() {}
+
+    /**
+     * Return a list of paths to available vendor modules.
+     */
+    std::vector<std::string> getVendorModulePaths();
+
+    /**
+     * Retrieve a DrmHalVTSVendorModule given its full path.  The
+     * getAPIVersion method can be used to determine the versioned
+     * subclass type.
+     */
+    DrmHalVTSVendorModule* getVendorModule(const std::string& path);
+
+   private:
+    std::string mModulesPath;
+    std::vector<std::string> mModuleList;
+    std::map<std::string, std::unique_ptr<SharedLibrary>> mOpenLibraries;
+
+    inline bool endsWith(const std::string& str, const std::string& suffix) {
+        if (suffix.size() > str.size()) return false;
+        return std::equal(suffix.rbegin(), suffix.rend(), str.rbegin());
+    }
+
+    VendorModules(const VendorModules&) = delete;
+    void operator=(const VendorModules&) = delete;
+};
+};
+
+#endif  // VENDOR_MODULES_H
diff --git a/drm/Android.bp b/drm/Android.bp
index bbb3e4b..33f70eb 100644
--- a/drm/Android.bp
+++ b/drm/Android.bp
@@ -1,4 +1,5 @@
 // This is an autogenerated file, do not edit.
 subdirs = [
     "1.0",
+    "1.0/vts/functional",
 ]
diff --git a/dumpstate/1.0/default/service.cpp b/dumpstate/1.0/default/service.cpp
index 85bea12..4f276b7 100644
--- a/dumpstate/1.0/default/service.cpp
+++ b/dumpstate/1.0/default/service.cpp
@@ -24,11 +24,18 @@
 using ::android::hardware::dumpstate::V1_0::IDumpstateDevice;
 using ::android::hardware::dumpstate::V1_0::implementation::DumpstateDevice;
 using ::android::hardware::joinRpcThreadpool;
+using ::android::OK;
 using ::android::sp;
 
-int main (int /* argc */, char * /* argv */ []) {
+int main(int /* argc */, char* /* argv */ []) {
     sp<IDumpstateDevice> dumpstate = new DumpstateDevice;
-    configureRpcThreadpool(1, true);
-    dumpstate->registerAsService();
+    configureRpcThreadpool(1, true /* will join */);
+    if (dumpstate->registerAsService() != OK) {
+        ALOGE("Could not register service.");
+        return 1;
+    }
     joinRpcThreadpool();
+
+    ALOGE("Service exited!");
+    return 1;
 }
diff --git a/gnss/1.0/IGnssDebug.hal b/gnss/1.0/IGnssDebug.hal
index 9c1038f..4c4cfb8 100644
--- a/gnss/1.0/IGnssDebug.hal
+++ b/gnss/1.0/IGnssDebug.hal
@@ -3,30 +3,51 @@
 /** Extended interface for DEBUG support. */
 interface IGnssDebug {
     enum SatelliteEphemerisType : uint8_t {
-        /** no information is known to the gnss hardware, about this satellite */
-        UNKNOWN,
-        /**  this satellite is known to exist */
-        KNOWN,
-        /**  this satellite is not known to exist */
-        NONEXISTENT,
-        /** Only Almanac (approximate) location known for this satellite */
+        /** Ephemeris is known for this satellite. */
+        EPHEMERIS,
+        /**
+         * Ephemeris is not known, but Almanac (approximate location) is known.
+         */
         ALMANAC_ONLY,
-        /** Ephemeris is known from demodulating the signal on device */
+        /**
+         * Both ephemeris & almanac are not known (e.g. during a cold start
+         * blind search.)
+         */
+        NOT_AVAILABLE
+    };
+
+    enum SatelliteEphemerisSource : uint8_t {
+        /**
+         * The ephemeris (or almanac only) information was demodulated from the
+         * signal received on the device
+         */
         DEMODULATED,
-        /** Ephemeris has been provided by SUPL */
+        /**
+         * The ephemeris (or almanac only) information was received from a SUPL
+         * server.
+         */
         SUPL_PROVIDED,
-        /** Ephemeris has been provided by another server */
+        /**
+         * The ephemeris (or almanac only) information was provided by another
+         * server.
+         */
         OTHER_SERVER_PROVIDED,
         /**
-         * Predicted ephemeris has been provided by a server
-         * (e.g. Xtra, Extended Ephemeris, etc...)
+         * The ephemeris (or almanac only) information was provided by another
+         * method, e.g. injected via a local debug tool, from build defaults
+         * (e.g. almanac), or is from a satellite
+         * with SatelliteEphemerisType::NOT_AVAILABLE.
          */
-        SERVER_PREDICTED,
-        /**
-         * Predicted ephemeris in use, generated locally on the device (e.g. from prior
-         * ephemeris)
-         */
-        LOCALLY_PREDICTED
+        OTHER
+    };
+
+    enum SatelliteEphemerisHealth : uint8_t {
+        /** The ephemeris is known good. */
+        GOOD,
+        /** The ephemeris is known bad. */
+        BAD,
+        /** The ephemeris is unknown to be good or bad. */
+        UNKNOWN
     };
 
     /**
@@ -45,22 +66,22 @@
         double longitudeDegrees;
         /** Altitude above ellipsoid expressed in meters */
         float altitudeMeters;
-        /** Represents speed in meters per second. */
+        /** Represents horizontal speed in meters per second. */
         float speedMetersPerSec;
         /** Represents heading in degrees. */
         float bearingDegrees;
         /**
-         * estimated horizontal accuracy of position expressed in meters, radial,
-         * 68% confidence.
+         * Estimated horizontal accuracy of position expressed in meters,
+         * radial, 68% confidence.
          */
         double horizontalAccuracyMeters;
         /**
-         * estimated vertical accuracy of position expressed in meters, with
+         * Estimated vertical accuracy of position expressed in meters, with
          * 68% confidence.
          */
         double verticalAccuracyMeters;
         /**
-         * estimated speed accuracy in meters per second with 68% confidence.
+         * Estimated speed accuracy in meters per second with 68% confidence.
          */
         double speedAccuracyMetersPerSecond;
         /**
@@ -69,26 +90,31 @@
         double bearingAccuracyDegrees;
         /**
          * Time duration before this report that this position information was
-         * valid.
+         * valid.  This can, for example, be a previous injected location with
+         * an age potentially thousands of seconds old, or
+         * extrapolated to the current time (with appropriately increased
+         * accuracy estimates), with a (near) zero age.
          */
         float ageSeconds;
     };
 
     /**
      * Provides the current best known UTC time estimate.
+     * If no fresh information is available, e.g. after a delete all,
+     * then whatever the effective defaults are on the device must be
+     * provided (e.g. Jan. 1, 2017, with an uncertainty of 5 years) expressed
+     * in the specified units.
      */
     struct TimeDebug {
-        /**
-         * Validity of the data in the struct.
-         * False if current time is unknown.
-         */
-        bool valid;
-        /**
-         * UTC time estimate.
-         */
+        /** UTC time estimate. */
         GnssUtcTime timeEstimate;
         /** 68% error estimate in time. */
         float timeUncertaintyNs;
+        /**
+         * 68% error estimate in local clock drift,
+         * in nanoseconds per second (also known as parts per billion - ppb.)
+         */
+        float frequencyUncertaintyNsPerSec;
     };
 
     /**
@@ -99,14 +125,38 @@
         int16_t svid;
         /** Defines the constellation type of the given SV. */
         GnssConstellationType constellation;
-        /** Defines the ephemeris type of the satellite. */
-        SatelliteEphemerisType ephemerisType;
+
         /**
-         * Time duration before this report, that the ephemeris source was last
-         * updated, e.g. latest demodulation, or latest server download.
-         * Set to 0 when ephemerisType is UNKNOWN.
+         * Defines the standard broadcast ephemeris or almanac availability for
+         * the satellite.  To report status of predicted orbit and clock
+         * information, see the serverPrediction fields below.
+         */
+        SatelliteEphemerisType ephemerisType;
+        /** Defines the ephemeris source of the satellite. */
+        SatelliteEphemerisSource ephemerisSource;
+        /**
+         * Defines whether the satellite is known healthy
+         * (safe for use in location calculation.)
+         */
+        SatelliteEphemerisHealth ephemerisHealth;
+        /**
+         * Time duration from this report (current time), minus the
+         * effective time of the ephemeris source (e.g. TOE, TOA.)
+         * Set to 0 when ephemerisType is NOT_AVAILABLE.
          */
         float ephemerisAgeSeconds;
+
+        /**
+         * True if a server has provided a predicted orbit and clock model for
+         * this satellite.
+         */
+        bool serverPredictionIsAvailable;
+        /**
+         * Time duration from this report (current time) minus the time of the
+         * start of the server predicted information.  For example, a 1 day
+         * old prediction would be reported as 86400 seconds here.
+         */
+        float serverPredictionAgeSeconds;
     };
 
     /**
@@ -119,12 +169,11 @@
         /** Current best know time estimate */
         TimeDebug time;
         /**
-         * Provides a list of the decoded satellite ephemeris.
-         * Must provide a complete list for all constellations device can track,
+         * Provides a list of the available satellite data, for all
+         * satellites and constellations the device can track,
          * including GnssConstellationType UNKNOWN.
          */
         vec<SatelliteData> satelliteDataArray;
-
     };
 
     /**
diff --git a/graphics/allocator/2.0/default/android.hardware.graphics.allocator@2.0-service.rc b/graphics/allocator/2.0/default/android.hardware.graphics.allocator@2.0-service.rc
index 3e2edda..9a08f66 100644
--- a/graphics/allocator/2.0/default/android.hardware.graphics.allocator@2.0-service.rc
+++ b/graphics/allocator/2.0/default/android.hardware.graphics.allocator@2.0-service.rc
@@ -1,5 +1,5 @@
 service gralloc-2-0 /vendor/bin/hw/android.hardware.graphics.allocator@2.0-service
-    class hal
+    class hal animation
     user system
     group graphics drmrpc
     onrestart restart surfaceflinger
diff --git a/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc b/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc
index b6060db..51b0e3b 100644
--- a/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc
+++ b/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc
@@ -1,5 +1,5 @@
 service hwcomposer-2-1 /vendor/bin/hw/android.hardware.graphics.composer@2.1-service
-    class hal
+    class hal animation
     user system
     group graphics drmrpc
     capabilities SYS_NICE
diff --git a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
index aa3bc9c..cf9f66e 100644
--- a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
+++ b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
@@ -22,10 +22,8 @@
 #include <android/hardware/nfc/1.0/types.h>
 #include <hardware/nfc.h>
 
+#include <VtsHalHidlTargetCallbackBase.h>
 #include <VtsHalHidlTargetTestBase.h>
-#include <chrono>
-#include <condition_variable>
-#include <mutex>
 
 using ::android::hardware::nfc::V1_0::INfc;
 using ::android::hardware::nfc::V1_0::INfcClientCallback;
@@ -55,6 +53,43 @@
 #define VERSION 0x11
 #define TIMEOUT_PERIOD 5
 
+constexpr char kCallbackNameSendEvent[] = "sendEvent";
+constexpr char kCallbackNameSendData[] = "sendData";
+
+class NfcClientCallbackArgs {
+   public:
+    NfcEvent last_event_;
+    NfcStatus last_status_;
+    NfcData last_data_;
+};
+
+/* Callback class for data & Event. */
+class NfcClientCallback
+    : public ::testing::VtsHalHidlTargetCallbackBase<NfcClientCallbackArgs>,
+      public INfcClientCallback {
+   public:
+    virtual ~NfcClientCallback() = default;
+
+    /* sendEvent callback function - Records the Event & Status
+     * and notifies the TEST
+     **/
+    Return<void> sendEvent(NfcEvent event, NfcStatus event_status) override {
+        NfcClientCallbackArgs args;
+        args.last_event_ = event;
+        args.last_status_ = event_status;
+        NotifyFromCallback(kCallbackNameSendEvent, args);
+        return Void();
+    };
+
+    /* sendData callback function. Records the data and notifies the TEST*/
+    Return<void> sendData(const NfcData& data) override {
+        NfcClientCallbackArgs args;
+        args.last_data_ = data;
+        NotifyFromCallback(kCallbackNameSendData, args);
+        return Void();
+    };
+};
+
 // The main test class for NFC HIDL HAL.
 class NfcHidlTest : public ::testing::VtsHalHidlTargetTestBase {
  public:
@@ -62,88 +97,28 @@
     nfc_ = ::testing::VtsHalHidlTargetTestBase::getService<INfc>();
     ASSERT_NE(nfc_, nullptr);
 
-    nfc_cb_ = new NfcClientCallback(*this);
+    nfc_cb_ = new NfcClientCallback();
     ASSERT_NE(nfc_cb_, nullptr);
 
-    count = 0;
-    last_event_ = NfcEvent::ERROR;
-    last_status_ = NfcStatus::FAILED;
-
     EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
     // Wait for OPEN_CPLT event
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(NfcEvent::OPEN_CPLT, last_event_);
-    EXPECT_EQ(NfcStatus::OK, last_status_);
+    auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
+    EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
   }
 
   virtual void TearDown() override {
     EXPECT_EQ(NfcStatus::OK, nfc_->close());
     // Wait for CLOSE_CPLT event
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(NfcEvent::CLOSE_CPLT, last_event_);
-    EXPECT_EQ(NfcStatus::OK, last_status_);
+    auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
+    EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
   }
 
-  /* Used as a mechanism to inform the test about data/event callback */
-  inline void notify() {
-    std::unique_lock<std::mutex> lock(mtx);
-    count++;
-    cv.notify_one();
-  }
-
-  /* Test code calls this function to wait for data/event callback */
-  inline std::cv_status wait() {
-    std::unique_lock<std::mutex> lock(mtx);
-
-    std::cv_status status = std::cv_status::no_timeout;
-    auto now = std::chrono::system_clock::now();
-    while (count == 0) {
-      status = cv.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
-      if (status == std::cv_status::timeout) return status;
-    }
-    count--;
-    return status;
-  }
-
-  /* Callback class for data & Event. */
-  class NfcClientCallback : public INfcClientCallback {
-    NfcHidlTest& parent_;
-
-   public:
-    NfcClientCallback(NfcHidlTest& parent) : parent_(parent){};
-
-    virtual ~NfcClientCallback() = default;
-
-    /* sendEvent callback function - Records the Event & Status
-     * and notifies the TEST
-     **/
-    Return<void> sendEvent(NfcEvent event, NfcStatus event_status) override {
-      parent_.last_event_ = event;
-      parent_.last_status_ = event_status;
-      parent_.notify();
-      return Void();
-    };
-
-    /* sendData callback function. Records the data and notifies the TEST*/
-    Return<void> sendData(const NfcData& data) override {
-      size_t size = parent_.last_data_.size();
-      parent_.last_data_.resize(size + 1);
-      parent_.last_data_[size] = data;
-      parent_.notify();
-      return Void();
-    };
-  };
-
   sp<INfc> nfc_;
-  sp<INfcClientCallback> nfc_cb_;
-  NfcEvent last_event_;
-  NfcStatus last_status_;
-  hidl_vec<NfcData> last_data_;
-
- private:
-  std::mutex mtx;
-  std::condition_variable cv;
-  int count;
+  sp<NfcClientCallback> nfc_cb_;
 };
 
 // A class for test environment setup (kept since this file is a template).
@@ -175,12 +150,12 @@
   NfcData data = cmd;
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for CORE_RESET_RSP
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(1ul, last_data_.size());
-  EXPECT_EQ(6ul, last_data_[0].size());
-  EXPECT_EQ((int)NfcStatus::OK, last_data_[0][3]);
-  EXPECT_GE(VERSION, last_data_[0][4]);
-  EXPECT_EQ(0ul, last_data_[0][5]);
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(6ul, res.args->last_data_.size());
+  EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+  EXPECT_GE(VERSION, res.args->last_data_[4]);
+  EXPECT_EQ(0ul, res.args->last_data_[5]);
 }
 
 /*
@@ -194,12 +169,12 @@
   NfcData data = cmd;
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for CORE_RESET_RSP
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(1ul, last_data_.size());
-  EXPECT_EQ(6ul, last_data_[0].size());
-  EXPECT_EQ((int)NfcStatus::OK, last_data_[0][3]);
-  EXPECT_GE(VERSION, last_data_[0][4]);
-  EXPECT_EQ(1ul, last_data_[0][5]);
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(6ul, res.args->last_data_.size());
+  EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+  EXPECT_GE(VERSION, res.args->last_data_[4]);
+  EXPECT_EQ(1ul, res.args->last_data_[5]);
 }
 
 /*
@@ -214,10 +189,10 @@
   NfcData data = cmd;
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for RSP
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(1ul, last_data_.size());
-  EXPECT_EQ(4ul, last_data_[0].size());
-  EXPECT_EQ(SYNTAX_ERROR, last_data_[0][3]);
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(4ul, res.args->last_data_.size());
+  EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
 }
 
 /*
@@ -236,29 +211,27 @@
   size_t size = data.size();
 
   for (int i = 0; i < 100; i++) {
-    last_data_.resize(0);
     data.resize(++size);
     data[size - 1] = 0xFF;
     EXPECT_EQ(data.size(), nfc_->write(data));
     // Wait for CORE_INTERFACE_ERROR_NTF
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(1ul, last_data_.size());
-    EXPECT_EQ(5ul, last_data_[0].size());
-    EXPECT_EQ(0x60, last_data_[0][0]);
-    EXPECT_EQ(0x08, last_data_[0][1]);
-    EXPECT_EQ(0x02, last_data_[0][2]);
-    EXPECT_EQ(SYNTAX_ERROR, last_data_[0][3]);
+    auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ(5ul, res.args->last_data_.size());
+    EXPECT_EQ(0x60, res.args->last_data_[0]);
+    EXPECT_EQ(0x08, res.args->last_data_[1]);
+    EXPECT_EQ(0x02, res.args->last_data_[2]);
+    EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
   }
 
   cmd = CORE_CONN_CREATE_CMD;
   data = cmd;
-  last_data_.resize(0);
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for CORE_CONN_CREATE_RSP
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(1ul, last_data_.size());
-  EXPECT_EQ(7ul, last_data_[0].size());
-  EXPECT_EQ((int)NfcStatus::OK, last_data_[0][3]);
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(7ul, res.args->last_data_.size());
+  EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
 }
 /*
  * Bandwidth:
@@ -273,40 +246,48 @@
   NfcData data = cmd;
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for CORE_CONN_CREATE_RSP
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(1ul, last_data_.size());
-  EXPECT_EQ(7ul, last_data_[0].size());
-  EXPECT_EQ((int)NfcStatus::OK, last_data_[0][3]);
-  uint8_t conn_id = last_data_[0][6];
-  uint32_t max_payload_size = last_data_[0][4];
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(7ul, res.args->last_data_.size());
+  EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+  uint8_t conn_id = res.args->last_data_[6];
+  uint32_t max_payload_size = res.args->last_data_[4];
 
   for (int loops = 0; loops < NUMBER_LOOPS; loops++) {
-    last_data_.resize(0);
-    data.resize(max_payload_size + LOOP_BACK_HEADER_SIZE);
-    data[0] = conn_id;
-    data[1] = 0x00;
-    data[2] = max_payload_size;
-    for (uint32_t i = 0; i < max_payload_size; i++) {
-      data[i + LOOP_BACK_HEADER_SIZE] = i;
+      res.args->last_data_.resize(0);
+      data.resize(max_payload_size + LOOP_BACK_HEADER_SIZE);
+      data[0] = conn_id;
+      data[1] = 0x00;
+      data[2] = max_payload_size;
+      for (uint32_t i = 0; i < max_payload_size; i++) {
+          data[i + LOOP_BACK_HEADER_SIZE] = i;
     }
     EXPECT_EQ(max_payload_size + LOOP_BACK_HEADER_SIZE, nfc_->write(data));
     // Wait for data and CORE_CONN_CREDITS_NTF
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    // Check if the same data was recieved back
-    EXPECT_EQ(2ul, last_data_.size());
+    auto res1 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res1.no_timeout);
+    auto res2 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res2.no_timeout);
+    // Check if the same data was received back
+    EXPECT_TRUE(res1.args);
+    EXPECT_TRUE(res2.args);
 
+    NfcData credits_ntf = res1.args->last_data_;
+    NfcData received_data = res2.args->last_data_;
     /* It is possible that CORE_CONN_CREDITS_NTF is received before data,
      * Find the order and do further checks depending on that */
-    uint8_t data_index = last_data_[0].size() == data.size() ? 0 : 1;
-    EXPECT_EQ(data.size(), last_data_[data_index].size());
+    if (received_data.size() != data.size()) {
+        credits_ntf = res2.args->last_data_;
+        received_data = res1.args->last_data_;
+    }
+    EXPECT_EQ(data.size(), received_data.size());
     for (size_t i = 0; i < data.size(); i++) {
-      EXPECT_EQ(data[i], last_data_[data_index][i]);
+        EXPECT_EQ(data[i], received_data[i]);
     }
 
-    EXPECT_EQ(6ul, last_data_[!data_index].size());
+    EXPECT_EQ(6ul, credits_ntf.size());
     // Check if the credit is refilled to 1
-    EXPECT_EQ(1, last_data_[!data_index][5]);
+    EXPECT_EQ(1, credits_ntf[5]);
   }
 }
 
@@ -319,9 +300,10 @@
 TEST_F(NfcHidlTest, PowerCycle) {
   EXPECT_EQ(NfcStatus::OK, nfc_->powerCycle());
   // Wait for NfcEvent.OPEN_CPLT
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(NfcEvent::OPEN_CPLT, last_event_);
-  EXPECT_EQ(NfcStatus::OK, last_status_);
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
+  EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
 
 /*
@@ -332,17 +314,19 @@
 TEST_F(NfcHidlTest, PowerCycleAfterClose) {
   EXPECT_EQ(NfcStatus::OK, nfc_->close());
   // Wait for CLOSE_CPLT event
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(NfcEvent::CLOSE_CPLT, last_event_);
-  EXPECT_EQ(NfcStatus::OK, last_status_);
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
+  EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
   EXPECT_EQ(NfcStatus::FAILED, nfc_->powerCycle());
 
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(NfcEvent::OPEN_CPLT, last_event_);
-  EXPECT_EQ(NfcStatus::OK, last_status_);
+  res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
+  EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
 
 /*
@@ -353,13 +337,16 @@
 TEST_F(NfcHidlTest, CoreInitialized) {
   NfcData data;
   data.resize(1);
-  for (int i = 0; i <= 6; i++)
-  {
-    data[0] = i;
-    EXPECT_EQ(NfcStatus::OK, nfc_->coreInitialized(data));
-    // Wait for NfcEvent.POST_INIT_CPLT
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(NfcEvent::POST_INIT_CPLT, last_event_);
+  // These parameters might lead to device specific proprietary behavior
+  // Using > 10 values should result in predictable and common results for
+  // most devices.
+  for (int i = 10; i <= 16; i++) {
+      data[0] = i;
+      EXPECT_EQ(NfcStatus::OK, nfc_->coreInitialized(data));
+      // Wait for NfcEvent.POST_INIT_CPLT
+      auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+      EXPECT_TRUE(res.no_timeout);
+      EXPECT_EQ(NfcEvent::POST_INIT_CPLT, res.args->last_event_);
   }
 }
 
@@ -380,17 +367,19 @@
 TEST_F(NfcHidlTest, ControlGrantedAfterClose) {
   EXPECT_EQ(NfcStatus::OK, nfc_->close());
   // Wait for CLOSE_CPLT event
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(NfcEvent::CLOSE_CPLT, last_event_);
-  EXPECT_EQ(NfcStatus::OK, last_status_);
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
+  EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
   EXPECT_EQ(NfcStatus::OK, nfc_->controlGranted());
 
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(NfcEvent::OPEN_CPLT, last_event_);
-  EXPECT_EQ(NfcStatus::OK, last_status_);
+  res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
+  EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
 
 /* PreDiscover:
@@ -409,17 +398,19 @@
 TEST_F(NfcHidlTest, PreDiscoverAfterClose) {
   EXPECT_EQ(NfcStatus::OK, nfc_->close());
   // Wait for CLOSE_CPLT event
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(NfcEvent::CLOSE_CPLT, last_event_);
-  EXPECT_EQ(NfcStatus::OK, last_status_);
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
+  EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
   EXPECT_EQ(NfcStatus::OK, nfc_->prediscover());
 
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(NfcEvent::OPEN_CPLT, last_event_);
-  EXPECT_EQ(NfcStatus::OK, last_status_);
+  res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
+  EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
 
 /*
@@ -430,20 +421,21 @@
 TEST_F(NfcHidlTest, CloseAfterClose) {
   EXPECT_EQ(NfcStatus::OK, nfc_->close());
   // Wait for CLOSE_CPLT event
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(NfcEvent::CLOSE_CPLT, last_event_);
-  EXPECT_EQ(NfcStatus::OK, last_status_);
+  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
+  EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
   EXPECT_EQ(NfcStatus::FAILED, nfc_->close());
 
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(NfcEvent::OPEN_CPLT, last_event_);
-  EXPECT_EQ(NfcStatus::OK, last_status_);
+  res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
+  EXPECT_TRUE(res.no_timeout);
+  EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
+  EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
 
-
 /*
  * OpenAfterOpen:
  * Calls open() multiple times
diff --git a/radio/1.0/vts/functional/Android.bp b/radio/1.0/vts/functional/Android.bp
index 24e3926..7808de1 100644
--- a/radio/1.0/vts/functional/Android.bp
+++ b/radio/1.0/vts/functional/Android.bp
@@ -44,3 +44,27 @@
         "-g",
     ],
 }
+
+cc_test {
+    name: "VtsHalSapV1_0TargetTest",
+    defaults: ["hidl_defaults"],
+    srcs: ["sap_callback.cpp",
+           "sap_hidl_hal_api.cpp",
+           "sap_hidl_hal_test.cpp",
+           "VtsHalSapV1_0TargetTest.cpp"],
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libcutils",
+        "libhidlbase",
+        "libhidltransport",
+        "libnativehelper",
+        "libutils",
+        "android.hardware.radio@1.0",
+    ],
+    static_libs: ["VtsHalHidlTargetTestBase"],
+    cflags: [
+        "-O0",
+        "-g",
+    ],
+}
diff --git a/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp b/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp
index d01adf2..e7c89d5 100644
--- a/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp
+++ b/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 int main(int argc, char** argv) {
-    ::testing::AddGlobalTestEnvironment(new RadioHidlEnvironment);
-    ::testing::InitGoogleTest(&argc, argv);
+  ::testing::AddGlobalTestEnvironment(new RadioHidlEnvironment);
+  ::testing::InitGoogleTest(&argc, argv);
 
-    int status = RUN_ALL_TESTS();
-    LOG(INFO) << "Test result = " << status;
+  int status = RUN_ALL_TESTS();
+  LOG(INFO) << "Test result = " << status;
 
-    return status;
+  return status;
 }
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/VtsHalSapV1_0TargetTest.cpp b/radio/1.0/vts/functional/VtsHalSapV1_0TargetTest.cpp
new file mode 100644
index 0000000..5306076
--- /dev/null
+++ b/radio/1.0/vts/functional/VtsHalSapV1_0TargetTest.cpp
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sap_hidl_hal_utils.h>
+
+int main(int argc, char** argv) {
+  // Add Sim-access Profile Hidl Environment
+  ::testing::AddGlobalTestEnvironment(new SapHidlEnvironment);
+  ::testing::InitGoogleTest(&argc, argv);
+
+  int status = RUN_ALL_TESTS();
+  LOG(INFO) << "Test result = " << status;
+
+  return status;
+}
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_cell_broadcast.cpp b/radio/1.0/vts/functional/radio_hidl_hal_cell_broadcast.cpp
index d87ce5f..53d1b90 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_cell_broadcast.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_cell_broadcast.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 using namespace ::android::hardware::radio::V1_0;
 
@@ -22,153 +22,154 @@
  * Test IRadio.setGsmBroadcastConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, setGsmBroadcastConfig) {
-    int serial = 0;
+  int serial = 0;
 
-    // Create GsmBroadcastSmsConfigInfo #1
-    GsmBroadcastSmsConfigInfo gbSmsConfig1;
-    gbSmsConfig1.fromServiceId = 4352;
-    gbSmsConfig1.toServiceId = 4354;
-    gbSmsConfig1.fromCodeScheme = 0;
-    gbSmsConfig1.toCodeScheme = 255;
-    gbSmsConfig1.selected = true;
+  // Create GsmBroadcastSmsConfigInfo #1
+  GsmBroadcastSmsConfigInfo gbSmsConfig1;
+  gbSmsConfig1.fromServiceId = 4352;
+  gbSmsConfig1.toServiceId = 4354;
+  gbSmsConfig1.fromCodeScheme = 0;
+  gbSmsConfig1.toCodeScheme = 255;
+  gbSmsConfig1.selected = true;
 
-    // Create GsmBroadcastSmsConfigInfo #2
-    GsmBroadcastSmsConfigInfo gbSmsConfig2;
-    gbSmsConfig2.fromServiceId = 4356;
-    gbSmsConfig2.toServiceId = 4356;
-    gbSmsConfig2.fromCodeScheme = 0;
-    gbSmsConfig2.toCodeScheme = 255;
-    gbSmsConfig2.selected = true;
+  // Create GsmBroadcastSmsConfigInfo #2
+  GsmBroadcastSmsConfigInfo gbSmsConfig2;
+  gbSmsConfig2.fromServiceId = 4356;
+  gbSmsConfig2.toServiceId = 4356;
+  gbSmsConfig2.fromCodeScheme = 0;
+  gbSmsConfig2.toCodeScheme = 255;
+  gbSmsConfig2.selected = true;
 
-    // Create GsmBroadcastSmsConfigInfo #3
-    GsmBroadcastSmsConfigInfo gbSmsConfig3;
-    gbSmsConfig3.fromServiceId = 4370;
-    gbSmsConfig3.toServiceId = 4379;
-    gbSmsConfig3.fromCodeScheme = 0;
-    gbSmsConfig3.toCodeScheme = 255;
-    gbSmsConfig3.selected = true;
+  // Create GsmBroadcastSmsConfigInfo #3
+  GsmBroadcastSmsConfigInfo gbSmsConfig3;
+  gbSmsConfig3.fromServiceId = 4370;
+  gbSmsConfig3.toServiceId = 4379;
+  gbSmsConfig3.fromCodeScheme = 0;
+  gbSmsConfig3.toCodeScheme = 255;
+  gbSmsConfig3.selected = true;
 
-    // Create GsmBroadcastSmsConfigInfo #4
-    GsmBroadcastSmsConfigInfo gbSmsConfig4;
-    gbSmsConfig4.fromServiceId = 4383;
-    gbSmsConfig4.toServiceId = 4391;
-    gbSmsConfig4.fromCodeScheme = 0;
-    gbSmsConfig4.toCodeScheme = 255;
-    gbSmsConfig4.selected = true;
+  // Create GsmBroadcastSmsConfigInfo #4
+  GsmBroadcastSmsConfigInfo gbSmsConfig4;
+  gbSmsConfig4.fromServiceId = 4383;
+  gbSmsConfig4.toServiceId = 4391;
+  gbSmsConfig4.fromCodeScheme = 0;
+  gbSmsConfig4.toCodeScheme = 255;
+  gbSmsConfig4.selected = true;
 
-    // Create GsmBroadcastSmsConfigInfo #5
-    GsmBroadcastSmsConfigInfo gbSmsConfig5;
-    gbSmsConfig5.fromServiceId = 4392;
-    gbSmsConfig5.toServiceId = 4392;
-    gbSmsConfig5.fromCodeScheme = 0;
-    gbSmsConfig5.toCodeScheme = 255;
-    gbSmsConfig5.selected = true;
+  // Create GsmBroadcastSmsConfigInfo #5
+  GsmBroadcastSmsConfigInfo gbSmsConfig5;
+  gbSmsConfig5.fromServiceId = 4392;
+  gbSmsConfig5.toServiceId = 4392;
+  gbSmsConfig5.fromCodeScheme = 0;
+  gbSmsConfig5.toCodeScheme = 255;
+  gbSmsConfig5.selected = true;
 
-    android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo> gsmBroadcastSmsConfigsInfoList
-        = {gbSmsConfig1, gbSmsConfig2, gbSmsConfig3, gbSmsConfig4, gbSmsConfig5};
+  android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>
+      gsmBroadcastSmsConfigsInfoList = {
+          gbSmsConfig1, gbSmsConfig2, gbSmsConfig3, gbSmsConfig4, gbSmsConfig5};
 
-    radio->setGsmBroadcastConfig(++serial, gsmBroadcastSmsConfigsInfoList);
+  radio->setGsmBroadcastConfig(++serial, gsmBroadcastSmsConfigsInfoList);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.getGsmBroadcastConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, getGsmBroadcastConfig) {
-    int serial = 0;
+  int serial = 0;
 
-    radio->getGsmBroadcastConfig(++serial);
+  radio->getGsmBroadcastConfig(++serial);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.setCdmaBroadcastConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, setCdmaBroadcastConfig) {
-    int serial = 0;
+  int serial = 0;
 
-    CdmaBroadcastSmsConfigInfo cbSmsConfig;
-    cbSmsConfig.serviceCategory = 4096;
-    cbSmsConfig.language = 1;
-    cbSmsConfig.selected = true;
+  CdmaBroadcastSmsConfigInfo cbSmsConfig;
+  cbSmsConfig.serviceCategory = 4096;
+  cbSmsConfig.language = 1;
+  cbSmsConfig.selected = true;
 
-    android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo> cdmaBroadcastSmsConfigInfoList
-        = {cbSmsConfig};
+  android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>
+      cdmaBroadcastSmsConfigInfoList = {cbSmsConfig};
 
-    radio->setCdmaBroadcastConfig(++serial, cdmaBroadcastSmsConfigInfoList);
+  radio->setCdmaBroadcastConfig(++serial, cdmaBroadcastSmsConfigInfoList);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.getCdmaBroadcastConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, getCdmaBroadcastConfig) {
-    int serial = 0;
+  int serial = 0;
 
-    radio->getCdmaBroadcastConfig(++serial);
+  radio->getCdmaBroadcastConfig(++serial);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.setCdmaBroadcastActivation() for the response returned.
  */
 TEST_F(RadioHidlTest, setCdmaBroadcastActivation) {
-    int serial = 0;
-    bool activate = false;
+  int serial = 0;
+  bool activate = false;
 
-    radio->setCdmaBroadcastActivation(++serial, activate);
+  radio->setCdmaBroadcastActivation(++serial, activate);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.setGsmBroadcastActivation() for the response returned.
  */
 TEST_F(RadioHidlTest, setGsmBroadcastActivation) {
-    int serial = 0;
-    bool activate = false;
+  int serial = 0;
+  bool activate = false;
 
-    radio->setGsmBroadcastActivation(++serial, activate);
+  radio->setGsmBroadcastActivation(++serial, activate);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_data.cpp b/radio/1.0/vts/functional/radio_hidl_hal_data.cpp
index 06cab6a..526cb04 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_data.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_data.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 using namespace ::android::hardware::radio::V1_0;
 
@@ -22,198 +22,198 @@
  * Test IRadio.getDataRegistrationState() for the response returned.
  */
 TEST_F(RadioHidlTest, getDataRegistrationState) {
-    int serial = 0;
+  int serial = 0;
 
-    radio->getDataRegistrationState(++serial);
+  radio->getDataRegistrationState(++serial);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.setupDataCall() for the response returned.
  */
 TEST_F(RadioHidlTest, setupDataCall) {
-    int serial = 0;
+  int serial = 0;
 
-    RadioTechnology radioTechnology = RadioTechnology::LTE;
+  RadioTechnology radioTechnology = RadioTechnology::LTE;
 
-    DataProfileInfo dataProfileInfo;
-    memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
-    dataProfileInfo.profileId = DataProfileId::IMS;
-    dataProfileInfo.apn = hidl_string("VZWIMS");
-    dataProfileInfo.protocol = hidl_string("IPV4V6");
-    dataProfileInfo.roamingProtocol = hidl_string("IPV6");
-    dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
-    dataProfileInfo.user = "";
-    dataProfileInfo.password = "";
-    dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
-    dataProfileInfo.maxConnsTime = 300;
-    dataProfileInfo.maxConns = 20;
-    dataProfileInfo.waitTime = 0;
-    dataProfileInfo.enabled = true;
-    dataProfileInfo.supportedApnTypesBitmap = 320;
-    dataProfileInfo.bearerBitmap = 161543;
-    dataProfileInfo.mtu = 0;
-    dataProfileInfo.mvnoType = MvnoType::NONE;
-    dataProfileInfo.mvnoMatchData = hidl_string();
+  DataProfileInfo dataProfileInfo;
+  memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
+  dataProfileInfo.profileId = DataProfileId::IMS;
+  dataProfileInfo.apn = hidl_string("VZWIMS");
+  dataProfileInfo.protocol = hidl_string("IPV4V6");
+  dataProfileInfo.roamingProtocol = hidl_string("IPV6");
+  dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
+  dataProfileInfo.user = "";
+  dataProfileInfo.password = "";
+  dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
+  dataProfileInfo.maxConnsTime = 300;
+  dataProfileInfo.maxConns = 20;
+  dataProfileInfo.waitTime = 0;
+  dataProfileInfo.enabled = true;
+  dataProfileInfo.supportedApnTypesBitmap = 320;
+  dataProfileInfo.bearerBitmap = 161543;
+  dataProfileInfo.mtu = 0;
+  dataProfileInfo.mvnoType = MvnoType::NONE;
+  dataProfileInfo.mvnoMatchData = hidl_string();
 
-    bool modemCognitive = false;
-    bool roamingAllowed = false;
-    bool isRoaming = false;
+  bool modemCognitive = false;
+  bool roamingAllowed = false;
+  bool isRoaming = false;
 
-    radio->setupDataCall(++serial, radioTechnology, dataProfileInfo, modemCognitive,
-           roamingAllowed, isRoaming);
+  radio->setupDataCall(++serial, radioTechnology, dataProfileInfo,
+                       modemCognitive, roamingAllowed, isRoaming);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_FALSE(RadioError::NONE == radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_FALSE(RadioError::NONE == radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.deactivateDataCall() for the response returned.
  */
 TEST_F(RadioHidlTest, deactivateDataCall) {
-    int serial = 0;
-    int cid = 1;
-    bool reasonRadioShutDown = false;
+  int serial = 0;
+  int cid = 1;
+  bool reasonRadioShutDown = false;
 
-    radio->deactivateDataCall(++serial, cid, reasonRadioShutDown);
+  radio->deactivateDataCall(++serial, cid, reasonRadioShutDown);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.getDataCallList() for the response returned.
  */
 TEST_F(RadioHidlTest, getDataCallList) {
-    int serial = 0;
+  int serial = 0;
 
-    radio->getDataCallList(++serial);
+  radio->getDataCallList(++serial);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.setInitialAttachApn() for the response returned.
  */
 TEST_F(RadioHidlTest, setInitialAttachApn) {
-    int serial = 0;
+  int serial = 0;
 
-    DataProfileInfo dataProfileInfo;
-    memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
-    dataProfileInfo.profileId = DataProfileId::IMS;
-    dataProfileInfo.apn = hidl_string("VZWIMS");
-    dataProfileInfo.protocol = hidl_string("IPV4V6");
-    dataProfileInfo.roamingProtocol = hidl_string("IPV6");
-    dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
-    dataProfileInfo.user = "";
-    dataProfileInfo.password = "";
-    dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
-    dataProfileInfo.maxConnsTime = 300;
-    dataProfileInfo.maxConns = 20;
-    dataProfileInfo.waitTime = 0;
-    dataProfileInfo.enabled = true;
-    dataProfileInfo.supportedApnTypesBitmap = 320;
-    dataProfileInfo.bearerBitmap = 161543;
-    dataProfileInfo.mtu = 0;
-    dataProfileInfo.mvnoType = MvnoType::NONE;
-    dataProfileInfo.mvnoMatchData = hidl_string();
+  DataProfileInfo dataProfileInfo;
+  memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
+  dataProfileInfo.profileId = DataProfileId::IMS;
+  dataProfileInfo.apn = hidl_string("VZWIMS");
+  dataProfileInfo.protocol = hidl_string("IPV4V6");
+  dataProfileInfo.roamingProtocol = hidl_string("IPV6");
+  dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
+  dataProfileInfo.user = "";
+  dataProfileInfo.password = "";
+  dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
+  dataProfileInfo.maxConnsTime = 300;
+  dataProfileInfo.maxConns = 20;
+  dataProfileInfo.waitTime = 0;
+  dataProfileInfo.enabled = true;
+  dataProfileInfo.supportedApnTypesBitmap = 320;
+  dataProfileInfo.bearerBitmap = 161543;
+  dataProfileInfo.mtu = 0;
+  dataProfileInfo.mvnoType = MvnoType::NONE;
+  dataProfileInfo.mvnoMatchData = hidl_string();
 
-    bool modemCognitive = true;
-    bool isRoaming = false;
+  bool modemCognitive = true;
+  bool isRoaming = false;
 
-    radio->setInitialAttachApn(++serial, dataProfileInfo,
-           modemCognitive, isRoaming);
+  radio->setInitialAttachApn(++serial, dataProfileInfo, modemCognitive,
+                             isRoaming);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_FALSE(RadioError::NONE == radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_FALSE(RadioError::NONE == radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.setDataAllowed() for the response returned.
  */
 TEST_F(RadioHidlTest, setDataAllowed) {
-    int serial = 0;
-    bool allow = true;
+  int serial = 0;
+  bool allow = true;
 
-    radio->setDataAllowed(++serial, allow);
+  radio->setDataAllowed(++serial, allow);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.setDataProfile() for the response returned.
  */
 TEST_F(RadioHidlTest, setDataProfile) {
-    int serial = 0;
+  int serial = 0;
 
-    // Create a dataProfileInfo
-    DataProfileInfo dataProfileInfo;
-    memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
-    dataProfileInfo.profileId = DataProfileId::IMS;
-    dataProfileInfo.apn = hidl_string("VZWIMS");
-    dataProfileInfo.protocol = hidl_string("IPV4V6");
-    dataProfileInfo.roamingProtocol = hidl_string("IPV6");
-    dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
-    dataProfileInfo.user = "";
-    dataProfileInfo.password = "";
-    dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
-    dataProfileInfo.maxConnsTime = 300;
-    dataProfileInfo.maxConns = 20;
-    dataProfileInfo.waitTime = 0;
-    dataProfileInfo.enabled = true;
-    dataProfileInfo.supportedApnTypesBitmap = 320;
-    dataProfileInfo.bearerBitmap = 161543;
-    dataProfileInfo.mtu = 0;
-    dataProfileInfo.mvnoType = MvnoType::NONE;
-    dataProfileInfo.mvnoMatchData = hidl_string();
+  // Create a dataProfileInfo
+  DataProfileInfo dataProfileInfo;
+  memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
+  dataProfileInfo.profileId = DataProfileId::IMS;
+  dataProfileInfo.apn = hidl_string("VZWIMS");
+  dataProfileInfo.protocol = hidl_string("IPV4V6");
+  dataProfileInfo.roamingProtocol = hidl_string("IPV6");
+  dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
+  dataProfileInfo.user = "";
+  dataProfileInfo.password = "";
+  dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
+  dataProfileInfo.maxConnsTime = 300;
+  dataProfileInfo.maxConns = 20;
+  dataProfileInfo.waitTime = 0;
+  dataProfileInfo.enabled = true;
+  dataProfileInfo.supportedApnTypesBitmap = 320;
+  dataProfileInfo.bearerBitmap = 161543;
+  dataProfileInfo.mtu = 0;
+  dataProfileInfo.mvnoType = MvnoType::NONE;
+  dataProfileInfo.mvnoMatchData = hidl_string();
 
-    // Create a dataProfileInfoList
-    android::hardware::hidl_vec<DataProfileInfo> dataProfileInfoList = {dataProfileInfo};
+  // Create a dataProfileInfoList
+  android::hardware::hidl_vec<DataProfileInfo> dataProfileInfoList = {
+      dataProfileInfo};
 
-    bool isRoadming = false;
+  bool isRoadming = false;
 
-    radio->setDataProfile(++serial, dataProfileInfoList, isRoadming);
+  radio->setDataProfile(++serial, dataProfileInfoList, isRoadming);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        // TODO(shuoq): Will add error check when we know the expected error from QC
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    // TODO(shuoq): Will add error check when we know the expected error from QC
+  }
 }
-
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp b/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp
index 9cae9c2..19738d5 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp
@@ -14,293 +14,307 @@
  * limitations under the License.
  */
 
- #include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 /*
  * Test IRadio.getIccCardStatus() for the response returned.
  */
 TEST_F(RadioHidlTest, getIccCardStatus) {
-    EXPECT_LE(cardStatus.applications.size(), (unsigned int) RadioConst::CARD_MAX_APPS);
-    EXPECT_LT(cardStatus.gsmUmtsSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
-    EXPECT_LT(cardStatus.cdmaSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
-    EXPECT_LT(cardStatus.imsSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
+  EXPECT_LE(cardStatus.applications.size(),
+            (unsigned int)RadioConst::CARD_MAX_APPS);
+  EXPECT_LT(cardStatus.gsmUmtsSubscriptionAppIndex,
+            (int)RadioConst::CARD_MAX_APPS);
+  EXPECT_LT(cardStatus.cdmaSubscriptionAppIndex,
+            (int)RadioConst::CARD_MAX_APPS);
+  EXPECT_LT(cardStatus.imsSubscriptionAppIndex, (int)RadioConst::CARD_MAX_APPS);
 }
 
 /*
  * Test IRadio.supplyIccPinForApp() for the response returned
  */
 TEST_F(RadioHidlTest, supplyIccPinForApp) {
-    int serial = 1;
+  int serial = 1;
 
-    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        if (cardStatus.applications[i].appType == AppType::SIM
-                || cardStatus.applications[i].appType == AppType::USIM
-                || cardStatus.applications[i].appType == AppType::RUIM
-                || cardStatus.applications[i].appType == AppType::CSIM) {
-            radio->supplyIccPinForApp(++serial, hidl_string("test1"),
-                    cardStatus.applications[i].aidPtr);
-            EXPECT_EQ(std::cv_status::no_timeout, wait());
-            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
-        }
+  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+  // 3GPP2 apps only
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    if (cardStatus.applications[i].appType == AppType::SIM ||
+        cardStatus.applications[i].appType == AppType::USIM ||
+        cardStatus.applications[i].appType == AppType::RUIM ||
+        cardStatus.applications[i].appType == AppType::CSIM) {
+      radio->supplyIccPinForApp(++serial, hidl_string("test1"),
+                                cardStatus.applications[i].aidPtr);
+      EXPECT_EQ(std::cv_status::no_timeout, wait());
+      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
     }
+  }
 }
 
 /*
  * Test IRadio.supplyIccPukForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, supplyIccPukForApp) {
-    int serial = 1;
+  int serial = 1;
 
-    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        if (cardStatus.applications[i].appType == AppType::SIM
-                || cardStatus.applications[i].appType == AppType::USIM
-                || cardStatus.applications[i].appType == AppType::RUIM
-                || cardStatus.applications[i].appType == AppType::CSIM) {
-            radio->supplyIccPukForApp(++serial, hidl_string("test1"), hidl_string("test2"),
-                    cardStatus.applications[i].aidPtr);
-            EXPECT_EQ(std::cv_status::no_timeout, wait());
-            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
-        }
+  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+  // 3GPP2 apps only
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    if (cardStatus.applications[i].appType == AppType::SIM ||
+        cardStatus.applications[i].appType == AppType::USIM ||
+        cardStatus.applications[i].appType == AppType::RUIM ||
+        cardStatus.applications[i].appType == AppType::CSIM) {
+      radio->supplyIccPukForApp(++serial, hidl_string("test1"),
+                                hidl_string("test2"),
+                                cardStatus.applications[i].aidPtr);
+      EXPECT_EQ(std::cv_status::no_timeout, wait());
+      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
     }
+  }
 }
 
 /*
  * Test IRadio.supplyIccPin2ForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, supplyIccPin2ForApp) {
-    int serial = 1;
+  int serial = 1;
 
-    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        if (cardStatus.applications[i].appType == AppType::SIM
-                || cardStatus.applications[i].appType == AppType::USIM
-                || cardStatus.applications[i].appType == AppType::RUIM
-                || cardStatus.applications[i].appType == AppType::CSIM) {
-            radio->supplyIccPin2ForApp(++serial, hidl_string("test1"),
-                    cardStatus.applications[i].aidPtr);
-            EXPECT_EQ(std::cv_status::no_timeout, wait());
-            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
-        }
+  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+  // 3GPP2 apps only
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    if (cardStatus.applications[i].appType == AppType::SIM ||
+        cardStatus.applications[i].appType == AppType::USIM ||
+        cardStatus.applications[i].appType == AppType::RUIM ||
+        cardStatus.applications[i].appType == AppType::CSIM) {
+      radio->supplyIccPin2ForApp(++serial, hidl_string("test1"),
+                                 cardStatus.applications[i].aidPtr);
+      EXPECT_EQ(std::cv_status::no_timeout, wait());
+      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
     }
+  }
 }
 
 /*
  * Test IRadio.supplyIccPuk2ForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, supplyIccPuk2ForApp) {
-    int serial = 1;
+  int serial = 1;
 
-    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        if (cardStatus.applications[i].appType == AppType::SIM
-                || cardStatus.applications[i].appType == AppType::USIM
-                || cardStatus.applications[i].appType == AppType::RUIM
-                || cardStatus.applications[i].appType == AppType::CSIM) {
-            radio->supplyIccPuk2ForApp(++serial, hidl_string("test1"), hidl_string("test2"),
-                    cardStatus.applications[i].aidPtr);
-            EXPECT_EQ(std::cv_status::no_timeout, wait());
-            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
-        }
+  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+  // 3GPP2 apps only
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    if (cardStatus.applications[i].appType == AppType::SIM ||
+        cardStatus.applications[i].appType == AppType::USIM ||
+        cardStatus.applications[i].appType == AppType::RUIM ||
+        cardStatus.applications[i].appType == AppType::CSIM) {
+      radio->supplyIccPuk2ForApp(++serial, hidl_string("test1"),
+                                 hidl_string("test2"),
+                                 cardStatus.applications[i].aidPtr);
+      EXPECT_EQ(std::cv_status::no_timeout, wait());
+      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
     }
+  }
 }
 
 /*
  * Test IRadio.changeIccPinForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, changeIccPinForApp) {
-    int serial = 1;
+  int serial = 1;
 
-    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        if (cardStatus.applications[i].appType == AppType::SIM
-                || cardStatus.applications[i].appType == AppType::USIM
-                || cardStatus.applications[i].appType == AppType::RUIM
-                || cardStatus.applications[i].appType == AppType::CSIM) {
-            radio->changeIccPinForApp(++serial, hidl_string("test1"), hidl_string("test2"),
-                    cardStatus.applications[i].aidPtr);
-            EXPECT_EQ(std::cv_status::no_timeout, wait());
-            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
-        }
+  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+  // 3GPP2 apps only
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    if (cardStatus.applications[i].appType == AppType::SIM ||
+        cardStatus.applications[i].appType == AppType::USIM ||
+        cardStatus.applications[i].appType == AppType::RUIM ||
+        cardStatus.applications[i].appType == AppType::CSIM) {
+      radio->changeIccPinForApp(++serial, hidl_string("test1"),
+                                hidl_string("test2"),
+                                cardStatus.applications[i].aidPtr);
+      EXPECT_EQ(std::cv_status::no_timeout, wait());
+      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
     }
+  }
 }
 
 /*
  * Test IRadio.changeIccPin2ForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, changeIccPin2ForApp) {
-    int serial = 1;
+  int serial = 1;
 
-    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        if (cardStatus.applications[i].appType == AppType::SIM
-                || cardStatus.applications[i].appType == AppType::USIM
-                || cardStatus.applications[i].appType == AppType::RUIM
-                || cardStatus.applications[i].appType == AppType::CSIM) {
-            radio->changeIccPin2ForApp(++serial, hidl_string("test1"), hidl_string("test2"),
-                    cardStatus.applications[i].aidPtr);
-            EXPECT_EQ(std::cv_status::no_timeout, wait());
-            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
-        }
+  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+  // 3GPP2 apps only
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    if (cardStatus.applications[i].appType == AppType::SIM ||
+        cardStatus.applications[i].appType == AppType::USIM ||
+        cardStatus.applications[i].appType == AppType::RUIM ||
+        cardStatus.applications[i].appType == AppType::CSIM) {
+      radio->changeIccPin2ForApp(++serial, hidl_string("test1"),
+                                 hidl_string("test2"),
+                                 cardStatus.applications[i].aidPtr);
+      EXPECT_EQ(std::cv_status::no_timeout, wait());
+      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
     }
+  }
 }
 
 /*
  * Test IRadio.getImsiForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, getImsiForApp) {
-    int serial = 1;
+  int serial = 1;
 
-    // Check success returned while getting imsi for 3GPP and 3GPP2 apps only
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        if (cardStatus.applications[i].appType == AppType::SIM
-                || cardStatus.applications[i].appType == AppType::USIM
-                || cardStatus.applications[i].appType == AppType::RUIM
-                || cardStatus.applications[i].appType == AppType::CSIM) {
-            radio->getImsiForApp(++serial, cardStatus.applications[i].aidPtr);
-            EXPECT_EQ(std::cv_status::no_timeout, wait());
-            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-            EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  // Check success returned while getting imsi for 3GPP and 3GPP2 apps only
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    if (cardStatus.applications[i].appType == AppType::SIM ||
+        cardStatus.applications[i].appType == AppType::USIM ||
+        cardStatus.applications[i].appType == AppType::RUIM ||
+        cardStatus.applications[i].appType == AppType::CSIM) {
+      radio->getImsiForApp(++serial, cardStatus.applications[i].aidPtr);
+      EXPECT_EQ(std::cv_status::no_timeout, wait());
+      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+      EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
 
-            // IMSI (MCC+MNC+MSIN) is at least 6 digits, but not more than 15
-            if (radioRsp->rspInfo.error == RadioError::NONE) {
-                EXPECT_NE(radioRsp->imsi, hidl_string());
-                EXPECT_GE((int) (radioRsp->imsi).size(), 6);
-                EXPECT_LE((int) (radioRsp->imsi).size(), 15);
-            }
-        }
+      // IMSI (MCC+MNC+MSIN) is at least 6 digits, but not more than 15
+      if (radioRsp->rspInfo.error == RadioError::NONE) {
+        EXPECT_NE(radioRsp->imsi, hidl_string());
+        EXPECT_GE((int)(radioRsp->imsi).size(), 6);
+        EXPECT_LE((int)(radioRsp->imsi).size(), 15);
+      }
     }
+  }
 }
 
 /*
  * Test IRadio.iccIOForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, iccIOForApp) {
-    int serial = 1;
+  int serial = 1;
 
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        IccIo iccIo;
-        iccIo.command = 0xc0;
-        iccIo.fileId = 0x6f11;
-        iccIo.path = hidl_string("3F007FFF");
-        iccIo.p1 = 0;
-        iccIo.p2 = 0;
-        iccIo.p3 = 0;
-        iccIo.data = hidl_string();
-        iccIo.pin2 = hidl_string();
-        iccIo.aid = cardStatus.applications[i].aidPtr;
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    IccIo iccIo;
+    iccIo.command = 0xc0;
+    iccIo.fileId = 0x6f11;
+    iccIo.path = hidl_string("3F007FFF");
+    iccIo.p1 = 0;
+    iccIo.p2 = 0;
+    iccIo.p3 = 0;
+    iccIo.data = hidl_string();
+    iccIo.pin2 = hidl_string();
+    iccIo.aid = cardStatus.applications[i].aidPtr;
 
-        radio->iccIOForApp(++serial, iccIo);
-        EXPECT_EQ(std::cv_status::no_timeout, wait());
-        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-    }
+    radio->iccIOForApp(++serial, iccIo);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  }
 }
 
 /*
  * Test IRadio.iccTransmitApduBasicChannel() for the response returned.
  */
 TEST_F(RadioHidlTest, iccTransmitApduBasicChannel) {
-    int serial = 1;
-    SimApdu msg;
-    memset(&msg, 0, sizeof(msg));
-    msg.data = hidl_string();
+  int serial = 1;
+  SimApdu msg;
+  memset(&msg, 0, sizeof(msg));
+  msg.data = hidl_string();
 
-    radio->iccTransmitApduBasicChannel(serial, msg);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->iccTransmitApduBasicChannel(serial, msg);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    // TODO(sanketpadawe): Add test for error code
+  // TODO(sanketpadawe): Add test for error code
 }
 
 /*
  * Test IRadio.iccOpenLogicalChannel() for the response returned.
  */
 TEST_F(RadioHidlTest, iccOpenLogicalChannel) {
-    int serial = 1;
+  int serial = 1;
 
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        radio->iccOpenLogicalChannel(++serial, cardStatus.applications[i].aidPtr);
-        EXPECT_EQ(std::cv_status::no_timeout, wait());
-        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    }
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    radio->iccOpenLogicalChannel(++serial, cardStatus.applications[i].aidPtr);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  }
 }
 
 /*
  * Test IRadio.iccCloseLogicalChannel() for the response returned.
  */
 TEST_F(RadioHidlTest, iccCloseLogicalChannel) {
-    int serial = 1;
-    // Try closing invalid channel and check INVALID_ARGUMENTS returned as error
-    radio->iccCloseLogicalChannel(serial, 0);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  int serial = 1;
+  // Try closing invalid channel and check INVALID_ARGUMENTS returned as error
+  radio->iccCloseLogicalChannel(serial, 0);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
+  EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
 }
 
 /*
  * Test IRadio.iccTransmitApduLogicalChannel() for the response returned.
  */
 TEST_F(RadioHidlTest, iccTransmitApduLogicalChannel) {
-    SimApdu msg;
-    memset(&msg, 0, sizeof(msg));
-    msg.data = hidl_string();
+  SimApdu msg;
+  memset(&msg, 0, sizeof(msg));
+  msg.data = hidl_string();
 
-    radio->iccTransmitApduLogicalChannel(1, msg);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(1, radioRsp->rspInfo.serial);
+  radio->iccTransmitApduLogicalChannel(1, msg);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(1, radioRsp->rspInfo.serial);
 
-    // TODO(sanketpadawe): Add test for error code
+  // TODO(sanketpadawe): Add test for error code
 }
 
 /*
  * Test IRadio.requestIccSimAuthentication() for the response returned.
  */
 TEST_F(RadioHidlTest, requestIccSimAuthentication) {
-    int serial = 1;
+  int serial = 1;
 
-    // Pass wrong challenge string and check RadioError::INVALID_ARGUMENTS returned as error.
-    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
-        radio->requestIccSimAuthentication(++serial, 0, hidl_string("test"),
-                cardStatus.applications[i].aidPtr);
-        EXPECT_EQ(std::cv_status::no_timeout, wait());
-        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-        EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
-    }
+  // Pass wrong challenge string and check RadioError::INVALID_ARGUMENTS
+  // returned as error.
+  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+    radio->requestIccSimAuthentication(++serial, 0, hidl_string("test"),
+                                       cardStatus.applications[i].aidPtr);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.supplyNetworkDepersonalization() for the response returned.
  */
 TEST_F(RadioHidlTest, supplyNetworkDepersonalization) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->supplyNetworkDepersonalization(serial, hidl_string("test"));
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->supplyNetworkDepersonalization(serial, hidl_string("test"));
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::PASSWORD_INCORRECT);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::PASSWORD_INCORRECT);
+  }
 }
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_ims.cpp b/radio/1.0/vts/functional/radio_hidl_hal_ims.cpp
index fdc39d8..0ec2e5c 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_ims.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_ims.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 using namespace ::android::hardware::radio::V1_0;
 
@@ -22,179 +22,181 @@
  * Test IRadio.getClir() for the response returned.
  */
 TEST_F(RadioHidlTest, getClir) {
-    int serial = 0;
+  int serial = 0;
 
-    radio->getClir(++serial);
+  radio->getClir(++serial);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.setClir() for the response returned.
  */
 TEST_F(RadioHidlTest, setClir) {
-    int serial = 0;
-    int32_t status = 1;
+  int serial = 0;
+  int32_t status = 1;
 
-    radio->setClir(++serial, status);
+  radio->setClir(++serial, status);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.getFacilityLockForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, getFacilityLockForApp) {
-    int serial = 0;
-    std::string facility = "";
-    std::string password = "";
-    int32_t serviceClass = 1;
-    std::string appId = "";
+  int serial = 0;
+  std::string facility = "";
+  std::string password = "";
+  int32_t serviceClass = 1;
+  std::string appId = "";
 
-    radio->getFacilityLockForApp(++serial, facility, password, serviceClass, appId);
+  radio->getFacilityLockForApp(++serial, facility, password, serviceClass,
+                               appId);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.setFacilityLockForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, setFacilityLockForApp) {
-    int serial = 0;
-    std::string facility = "";
-    bool lockState = false;
-    std::string password = "";
-    int32_t serviceClass = 1;
-    std::string appId = "";
+  int serial = 0;
+  std::string facility = "";
+  bool lockState = false;
+  std::string password = "";
+  int32_t serviceClass = 1;
+  std::string appId = "";
 
-    radio->setFacilityLockForApp(++serial, facility, lockState, password, serviceClass, appId);
+  radio->setFacilityLockForApp(++serial, facility, lockState, password,
+                               serviceClass, appId);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.setBarringPassword() for the response returned.
  */
 TEST_F(RadioHidlTest, setBarringPassword) {
-    int serial = 0;
-    std::string facility = "";
-    std::string oldPassword = "";
-    std::string newPassword = "";
+  int serial = 0;
+  std::string facility = "";
+  std::string oldPassword = "";
+  std::string newPassword = "";
 
-    radio->setBarringPassword(++serial, facility, oldPassword, newPassword);
+  radio->setBarringPassword(++serial, facility, oldPassword, newPassword);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.getClip() for the response returned.
  */
 TEST_F(RadioHidlTest, getClip) {
-    int serial = 0;
+  int serial = 0;
 
-    radio->getClip(++serial);
+  radio->getClip(++serial);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.setSuppServiceNotifications() for the response returned.
  */
 TEST_F(RadioHidlTest, setSuppServiceNotifications) {
-    int serial = 0;
-    bool enable = false;
+  int serial = 0;
+  bool enable = false;
 
-    radio->setSuppServiceNotifications(++serial, enable);
+  radio->setSuppServiceNotifications(++serial, enable);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.requestIsimAuthentication() for the response returned.
  */
 TEST_F(RadioHidlTest, requestIsimAuthentication) {
-    int serial = 0;
-    std::string challenge = "";
+  int serial = 0;
+  std::string challenge = "";
 
-    radio->requestIsimAuthentication(++serial, challenge);
+  radio->requestIsimAuthentication(++serial, challenge);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.getImsRegistrationState() for the response returned.
  */
 TEST_F(RadioHidlTest, getImsRegistrationState) {
-    int serial = 0;
+  int serial = 0;
 
-    radio->getImsRegistrationState(++serial);
+  radio->getImsRegistrationState(++serial);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp b/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp
index f704520..2e0a10f 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp
@@ -14,778 +14,779 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 /*
  * Test IRadio.getSignalStrength() for the response returned.
  */
 TEST_F(RadioHidlTest, getSignalStrength) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getSignalStrength(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getSignalStrength(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getVoiceRegistrationState() for the response returned.
  */
 TEST_F(RadioHidlTest, getVoiceRegistrationState) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getVoiceRegistrationState(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getVoiceRegistrationState(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getOperator() for the response returned.
  */
 TEST_F(RadioHidlTest, getOperator) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getOperator(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getOperator(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setRadioPower() for the response returned.
  */
 TEST_F(RadioHidlTest, setRadioPower) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setRadioPower(++serial, 0);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setRadioPower(++serial, 0);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getNetworkSelectionMode() for the response returned.
  */
 TEST_F(RadioHidlTest, getNetworkSelectionMode) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getNetworkSelectionMode(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getNetworkSelectionMode(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setNetworkSelectionModeAutomatic() for the response returned.
  */
 TEST_F(RadioHidlTest, setNetworkSelectionModeAutomatic) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setNetworkSelectionModeAutomatic(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setNetworkSelectionModeAutomatic(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::ILLEGAL_SIM_OR_ME);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::ILLEGAL_SIM_OR_ME);
+  }
 }
 
 /*
  * Test IRadio.setNetworkSelectionModeManual() for the response returned.
  */
 TEST_F(RadioHidlTest, setNetworkSelectionModeManual) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setNetworkSelectionModeManual(++serial, "123456");
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setNetworkSelectionModeManual(++serial, "123456");
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::ILLEGAL_SIM_OR_ME);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::ILLEGAL_SIM_OR_ME);
+  }
 }
 
 /*
  * Test IRadio.getAvailableNetworks() for the response returned.
  */
 TEST_F(RadioHidlTest, getAvailableNetworks) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getAvailableNetworks(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getAvailableNetworks(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getBasebandVersion() for the response returned.
  */
 TEST_F(RadioHidlTest, getBasebandVersion) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getBasebandVersion(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getBasebandVersion(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setBandMode() for the response returned.
  */
 TEST_F(RadioHidlTest, setBandMode) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setBandMode(++serial, RadioBandMode::BAND_MODE_USA);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setBandMode(++serial, RadioBandMode::BAND_MODE_USA);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getAvailableBandModes() for the response returned.
  */
 TEST_F(RadioHidlTest, getAvailableBandModes) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getAvailableBandModes(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getAvailableBandModes(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setPreferredNetworkType() for the response returned.
  */
 TEST_F(RadioHidlTest, setPreferredNetworkType) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setPreferredNetworkType(++serial, PreferredNetworkType::GSM_ONLY);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setPreferredNetworkType(++serial, PreferredNetworkType::GSM_ONLY);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getPreferredNetworkType() for the response returned.
  */
 TEST_F(RadioHidlTest, getPreferredNetworkType) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getPreferredNetworkType(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getPreferredNetworkType(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getNeighboringCids() for the response returned.
  */
 TEST_F(RadioHidlTest, getNeighboringCids) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getNeighboringCids(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getNeighboringCids(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setLocationUpdates() for the response returned.
  */
 TEST_F(RadioHidlTest, setLocationUpdates) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setLocationUpdates(++serial, true);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setLocationUpdates(++serial, true);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setCdmaRoamingPreference() for the response returned.
  */
 TEST_F(RadioHidlTest, setCdmaRoamingPreference) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setCdmaRoamingPreference(++serial, CdmaRoamingType::HOME_NETWORK);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setCdmaRoamingPreference(++serial, CdmaRoamingType::HOME_NETWORK);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getCdmaRoamingPreference() for the response returned.
  */
 TEST_F(RadioHidlTest, getCdmaRoamingPreference) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getCdmaRoamingPreference(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getCdmaRoamingPreference(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getTTYMode() for the response returned.
  */
 TEST_F(RadioHidlTest, getTTYMode) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getTTYMode(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getTTYMode(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setTTYMode() for the response returned.
  */
 TEST_F(RadioHidlTest, setTTYMode) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setTTYMode(++serial, TtyMode::OFF);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setTTYMode(++serial, TtyMode::OFF);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setPreferredVoicePrivacy() for the response returned.
  */
 TEST_F(RadioHidlTest, setPreferredVoicePrivacy) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setPreferredVoicePrivacy(++serial, true);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setPreferredVoicePrivacy(++serial, true);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getPreferredVoicePrivacy() for the response returned.
  */
 TEST_F(RadioHidlTest, getPreferredVoicePrivacy) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getPreferredVoicePrivacy(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getPreferredVoicePrivacy(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getCDMASubscription() for the response returned.
  */
 TEST_F(RadioHidlTest, getCDMASubscription) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getCDMASubscription(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getCDMASubscription(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getDeviceIdentity() for the response returned.
  */
 TEST_F(RadioHidlTest, getDeviceIdentity) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getDeviceIdentity(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getDeviceIdentity(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.exitEmergencyCallbackMode() for the response returned.
  */
 TEST_F(RadioHidlTest, exitEmergencyCallbackMode) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->exitEmergencyCallbackMode(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->exitEmergencyCallbackMode(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getCdmaSubscriptionSource() for the response returned.
  */
 TEST_F(RadioHidlTest, getCdmaSubscriptionSource) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getCdmaSubscriptionSource(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getCdmaSubscriptionSource(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setCdmaSubscriptionSource() for the response returned.
  */
 TEST_F(RadioHidlTest, setCdmaSubscriptionSource) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setCdmaSubscriptionSource(++serial, CdmaSubscriptionSource::RUIM_SIM);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setCdmaSubscriptionSource(++serial, CdmaSubscriptionSource::RUIM_SIM);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::SIM_ABSENT
-                || radioRsp->rspInfo.error == RadioError::SUBSCRIPTION_NOT_AVAILABLE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::SIM_ABSENT ||
+                radioRsp->rspInfo.error ==
+                    RadioError::SUBSCRIPTION_NOT_AVAILABLE);
+  }
 }
 
 /*
  * Test IRadio.getVoiceRadioTechnology() for the response returned.
  */
 TEST_F(RadioHidlTest, getVoiceRadioTechnology) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getVoiceRadioTechnology(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getVoiceRadioTechnology(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getCellInfoList() for the response returned.
  */
 TEST_F(RadioHidlTest, getCellInfoList) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getCellInfoList(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getCellInfoList(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setCellInfoListRate() for the response returned.
  */
 TEST_F(RadioHidlTest, setCellInfoListRate) {
-    int serial = 1;
+  int serial = 1;
 
-    // TODO(sanketpadawe): RIL crashes with value of rate = 10
-    radio->setCellInfoListRate(++serial, 10);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  // TODO(sanketpadawe): RIL crashes with value of rate = 10
+  radio->setCellInfoListRate(++serial, 10);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.nvReadItem() for the response returned.
  */
 TEST_F(RadioHidlTest, nvReadItem) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->nvReadItem(++serial, NvItem::LTE_BAND_ENABLE_25);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->nvReadItem(++serial, NvItem::LTE_BAND_ENABLE_25);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.nvWriteItem() for the response returned.
  */
 TEST_F(RadioHidlTest, nvWriteItem) {
-    int serial = 1;
-    NvWriteItem item;
-    memset(&item, 0, sizeof(item));
-    item.value = hidl_string();
+  int serial = 1;
+  NvWriteItem item;
+  memset(&item, 0, sizeof(item));
+  item.value = hidl_string();
 
-    radio->nvWriteItem(++serial, item);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->nvWriteItem(++serial, item);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.nvWriteCdmaPrl() for the response returned.
  */
 TEST_F(RadioHidlTest, nvWriteCdmaPrl) {
-    int serial = 1;
-    std::vector<uint8_t> prl = {1, 2, 3, 4, 5};
+  int serial = 1;
+  std::vector<uint8_t> prl = {1, 2, 3, 4, 5};
 
-    radio->nvWriteCdmaPrl(++serial, hidl_vec<uint8_t>(prl));
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->nvWriteCdmaPrl(++serial, hidl_vec<uint8_t>(prl));
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.nvResetConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, nvResetConfig) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->nvResetConfig(++serial, ResetNvType::RELOAD);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->nvResetConfig(++serial, ResetNvType::RELOAD);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setUiccSubscription() for the response returned.
  */
 TEST_F(RadioHidlTest, setUiccSubscription) {
-    int serial = 1;
-    SelectUiccSub item;
-    memset(&item, 0, sizeof(item));
+  int serial = 1;
+  SelectUiccSub item;
+  memset(&item, 0, sizeof(item));
 
-    radio->setUiccSubscription(++serial, item);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setUiccSubscription(++serial, item);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getHardwareConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, getHardwareConfig) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getHardwareConfig(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getHardwareConfig(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.requestShutdown() for the response returned.
  */
 TEST_F(RadioHidlTest, requestShutdown) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->requestShutdown(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->requestShutdown(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getRadioCapability() for the response returned.
  */
 TEST_F(RadioHidlTest, getRadioCapability) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getRadioCapability(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getRadioCapability(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setRadioCapability() for the response returned.
  */
 TEST_F(RadioHidlTest, setRadioCapability) {
-    int serial = 1;
-    RadioCapability rc;
-    memset(&rc, 0, sizeof(rc));
-    rc.logicalModemUuid = hidl_string();
+  int serial = 1;
+  RadioCapability rc;
+  memset(&rc, 0, sizeof(rc));
+  rc.logicalModemUuid = hidl_string();
 
-    radio->setRadioCapability(++serial, rc);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setRadioCapability(++serial, rc);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.startLceService() for the response returned.
  */
 TEST_F(RadioHidlTest, startLceService) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->startLceService(++serial, 5, true);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->startLceService(++serial, 5, true);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE
-                || radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
+                radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED);
+  }
 }
 
 /*
  * Test IRadio.stopLceService() for the response returned.
  */
 TEST_F(RadioHidlTest, stopLceService) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->stopLceService(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->stopLceService(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE
-                || radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
+                radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED);
+  }
 }
 
 /*
  * Test IRadio.pullLceData() for the response returned.
  */
 TEST_F(RadioHidlTest, pullLceData) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->pullLceData(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->pullLceData(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE
-                || radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
+                radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED);
+  }
 }
 
 /*
  * Test IRadio.getModemActivityInfo() for the response returned.
  */
 TEST_F(RadioHidlTest, getModemActivityInfo) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getModemActivityInfo(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getModemActivityInfo(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setAllowedCarriers() for the response returned.
  */
 TEST_F(RadioHidlTest, setAllowedCarriers) {
-    int serial = 1;
-    CarrierRestrictions carriers;
-    memset(&carriers, 0, sizeof(carriers));
-    carriers.allowedCarriers.resize(1);
-    carriers.excludedCarriers.resize(0);
-    carriers.allowedCarriers[0].mcc = hidl_string();
-    carriers.allowedCarriers[0].mnc = hidl_string();
-    carriers.allowedCarriers[0].matchType = CarrierMatchType::ALL;
-    carriers.allowedCarriers[0].matchData = hidl_string();
+  int serial = 1;
+  CarrierRestrictions carriers;
+  memset(&carriers, 0, sizeof(carriers));
+  carriers.allowedCarriers.resize(1);
+  carriers.excludedCarriers.resize(0);
+  carriers.allowedCarriers[0].mcc = hidl_string();
+  carriers.allowedCarriers[0].mnc = hidl_string();
+  carriers.allowedCarriers[0].matchType = CarrierMatchType::ALL;
+  carriers.allowedCarriers[0].matchData = hidl_string();
 
-    radio->setAllowedCarriers(++serial, false, carriers);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setAllowedCarriers(++serial, false, carriers);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getAllowedCarriers() for the response returned.
  */
 TEST_F(RadioHidlTest, getAllowedCarriers) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getAllowedCarriers(++serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getAllowedCarriers(++serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.sendDeviceState() for the response returned.
  */
 TEST_F(RadioHidlTest, sendDeviceState) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->sendDeviceState(++serial, DeviceStateType::POWER_SAVE_MODE, true);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->sendDeviceState(++serial, DeviceStateType::POWER_SAVE_MODE, true);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setIndicationFilter() for the response returned.
  */
 TEST_F(RadioHidlTest, setIndicationFilter) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setIndicationFilter(++serial, 1);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setIndicationFilter(++serial, 1);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.setSimCardPower() for the response returned.
  */
 TEST_F(RadioHidlTest, setSimCardPower) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setSimCardPower(++serial, true);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setSimCardPower(++serial, true);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::SIM_ABSENT);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::SIM_ABSENT);
+  }
 }
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_sms.cpp b/radio/1.0/vts/functional/radio_hidl_hal_sms.cpp
index 54ae7c0..7caf471 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_sms.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_sms.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 using namespace ::android::hardware::radio::V1_0;
 
@@ -22,403 +22,408 @@
  * Test IRadio.sendSms() for the response returned.
  */
 TEST_F(RadioHidlTest, sendSms) {
-    int serial = 0;
-    GsmSmsMessage msg;
-    msg.smscPdu = "";
-    msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
+  int serial = 0;
+  GsmSmsMessage msg;
+  msg.smscPdu = "";
+  msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
 
-    radio->sendSms(++serial, msg);
+  radio->sendSms(++serial, msg);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-        EXPECT_EQ(0, radioRsp->sendSmsResult.errorCode);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+    EXPECT_EQ(0, radioRsp->sendSmsResult.errorCode);
+  }
 }
 
 /*
  * Test IRadio.sendSMSExpectMore() for the response returned.
  */
 TEST_F(RadioHidlTest, sendSMSExpectMore) {
-    int serial = 0;
-    GsmSmsMessage msg;
-    msg.smscPdu = "";
-    msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
+  int serial = 0;
+  GsmSmsMessage msg;
+  msg.smscPdu = "";
+  msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
 
-    radio->sendSMSExpectMore(++serial, msg);
+  radio->sendSMSExpectMore(++serial, msg);
 
-    // TODO(shuoq): add more test for this API when inserted sim card is considered
+  // TODO(shuoq): add more test for this API when inserted sim card is
+  // considered
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+  }
 }
 
 /*
  * Test IRadio.acknowledgeLastIncomingGsmSms() for the response returned.
  */
 TEST_F(RadioHidlTest, acknowledgeLastIncomingGsmSms) {
-    int serial = 0;
-    bool success = true;
+  int serial = 0;
+  bool success = true;
 
-    radio->acknowledgeLastIncomingGsmSms(++serial, success,
-        SmsAcknowledgeFailCause::MEMORY_CAPACITY_EXCEEDED);
+  radio->acknowledgeLastIncomingGsmSms(
+      ++serial, success, SmsAcknowledgeFailCause::MEMORY_CAPACITY_EXCEEDED);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.acknowledgeIncomingGsmSmsWithPdu() for the response returned.
  */
 TEST_F(RadioHidlTest, acknowledgeIncomingGsmSmsWithPdu) {
-    int serial = 0;
-    bool success = true;
-    std::string ackPdu = "";
+  int serial = 0;
+  bool success = true;
+  std::string ackPdu = "";
 
-    radio->acknowledgeIncomingGsmSmsWithPdu(++serial, success, ackPdu);
+  radio->acknowledgeIncomingGsmSmsWithPdu(++serial, success, ackPdu);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        // TODO(shuoq): Will add error check when we know the expected error from QC
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    // TODO(shuoq): Will add error check when we know the expected error from QC
+  }
 }
 
 /*
  * Test IRadio.sendCdmaSms() for the response returned.
  */
 TEST_F(RadioHidlTest, sendCdmaSms) {
-    int serial = 0;
+  int serial = 0;
 
-    // Create a CdmaSmsAddress
-    CdmaSmsAddress cdmaSmsAddress;
-    cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
-    cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
-    cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
-    cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
-    cdmaSmsAddress.digits = (std::vector<uint8_t>) {11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
+  // Create a CdmaSmsAddress
+  CdmaSmsAddress cdmaSmsAddress;
+  cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
+  cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
+  cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
+  cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
+  cdmaSmsAddress.digits =
+      (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
 
-    // Create a CdmaSmsSubAddress
-    CdmaSmsSubaddress cdmaSmsSubaddress;
-    cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
-    cdmaSmsSubaddress.odd = false;
-    cdmaSmsSubaddress.digits = (std::vector<uint8_t>) {};
+  // Create a CdmaSmsSubAddress
+  CdmaSmsSubaddress cdmaSmsSubaddress;
+  cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
+  cdmaSmsSubaddress.odd = false;
+  cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
 
-    // Create a CdmaSmsMessage
-    android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage;
-    cdmaSmsMessage.teleserviceId = 4098;
-    cdmaSmsMessage.isServicePresent = false;
-    cdmaSmsMessage.serviceCategory = 0;
-    cdmaSmsMessage.address = cdmaSmsAddress;
-    cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
-    cdmaSmsMessage.bearerData = (std::vector<uint8_t>)
-        {15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
+  // Create a CdmaSmsMessage
+  android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage;
+  cdmaSmsMessage.teleserviceId = 4098;
+  cdmaSmsMessage.isServicePresent = false;
+  cdmaSmsMessage.serviceCategory = 0;
+  cdmaSmsMessage.address = cdmaSmsAddress;
+  cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
+  cdmaSmsMessage.bearerData = (std::vector<uint8_t>){
+      15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-    radio->sendCdmaSms(++serial, cdmaSmsMessage);
+  radio->sendCdmaSms(++serial, cdmaSmsMessage);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+  }
 }
 
 /*
  * Test IRadio.acknowledgeLastIncomingCdmaSms() for the response returned.
  */
 TEST_F(RadioHidlTest, acknowledgeLastIncomingCdmaSms) {
-    int serial = 0;
+  int serial = 0;
 
-    // Create a CdmaSmsAck
-    CdmaSmsAck cdmaSmsAck;
-    cdmaSmsAck.errorClass = CdmaSmsErrorClass::NO_ERROR;
-    cdmaSmsAck.smsCauseCode = 1;
+  // Create a CdmaSmsAck
+  CdmaSmsAck cdmaSmsAck;
+  cdmaSmsAck.errorClass = CdmaSmsErrorClass::NO_ERROR;
+  cdmaSmsAck.smsCauseCode = 1;
 
-    radio->acknowledgeLastIncomingCdmaSms(++serial, cdmaSmsAck);
+  radio->acknowledgeLastIncomingCdmaSms(++serial, cdmaSmsAck);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NO_SMS_TO_ACK, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NO_SMS_TO_ACK, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.sendImsSms() for the response returned.
  */
 TEST_F(RadioHidlTest, sendImsSms) {
-    int serial = 1;
+  int serial = 1;
 
-    // Create a CdmaSmsAddress
-    CdmaSmsAddress cdmaSmsAddress;
-    cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
-    cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
-    cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
-    cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
-    cdmaSmsAddress.digits = (std::vector<uint8_t>) {11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
+  // Create a CdmaSmsAddress
+  CdmaSmsAddress cdmaSmsAddress;
+  cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
+  cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
+  cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
+  cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
+  cdmaSmsAddress.digits =
+      (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
 
-    // Create a CdmaSmsSubAddress
-    CdmaSmsSubaddress cdmaSmsSubaddress;
-    cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
-    cdmaSmsSubaddress.odd = false;
-    cdmaSmsSubaddress.digits = (std::vector<uint8_t>) {};
+  // Create a CdmaSmsSubAddress
+  CdmaSmsSubaddress cdmaSmsSubaddress;
+  cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
+  cdmaSmsSubaddress.odd = false;
+  cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
 
-    // Create a CdmaSmsMessage
-    CdmaSmsMessage cdmaSmsMessage;
-    cdmaSmsMessage.teleserviceId = 4098;
-    cdmaSmsMessage.isServicePresent = false;
-    cdmaSmsMessage.serviceCategory = 0;
-    cdmaSmsMessage.address = cdmaSmsAddress;
-    cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
-    cdmaSmsMessage.bearerData = (std::vector<uint8_t>)
-        {15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
+  // Create a CdmaSmsMessage
+  CdmaSmsMessage cdmaSmsMessage;
+  cdmaSmsMessage.teleserviceId = 4098;
+  cdmaSmsMessage.isServicePresent = false;
+  cdmaSmsMessage.serviceCategory = 0;
+  cdmaSmsMessage.address = cdmaSmsAddress;
+  cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
+  cdmaSmsMessage.bearerData = (std::vector<uint8_t>){
+      15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-    // Creata an ImsSmsMessage
-    ImsSmsMessage msg;
-    msg.tech = RadioTechnologyFamily::THREE_GPP2;
-    msg.retry = false;
-    msg.messageRef = 0;
-    msg.cdmaMessage = (std::vector<CdmaSmsMessage>) {cdmaSmsMessage};
-    msg.gsmMessage = (std::vector<GsmSmsMessage>) {};
+  // Creata an ImsSmsMessage
+  ImsSmsMessage msg;
+  msg.tech = RadioTechnologyFamily::THREE_GPP2;
+  msg.retry = false;
+  msg.messageRef = 0;
+  msg.cdmaMessage = (std::vector<CdmaSmsMessage>){cdmaSmsMessage};
+  msg.gsmMessage = (std::vector<GsmSmsMessage>){};
 
-    radio->sendImsSms(serial, msg);
+  radio->sendImsSms(serial, msg);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.getSmscAddress() for the response returned.
  */
 TEST_F(RadioHidlTest, getSmscAddress) {
-    int serial = 0;
+  int serial = 0;
 
-    radio->getSmscAddress(++serial);
+  radio->getSmscAddress(++serial);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE);
+  }
 }
 
 /*
  * Test IRadio.setSmscAddress() for the response returned.
  */
 TEST_F(RadioHidlTest, setSmscAddress) {
-    int serial = 0;
-    hidl_string address = hidl_string("smscAddress");
+  int serial = 0;
+  hidl_string address = hidl_string("smscAddress");
 
-    radio->setSmscAddress(++serial, address);
+  radio->setSmscAddress(++serial, address);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::INVALID_SMS_FORMAT, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::INVALID_SMS_FORMAT, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.writeSmsToSim() for the response returned.
  */
 TEST_F(RadioHidlTest, writeSmsToSim) {
-    int serial = 0;
-    SmsWriteArgs smsWriteArgs;
-    smsWriteArgs.status = SmsWriteArgsStatus::REC_UNREAD;
-    smsWriteArgs.smsc = "";
-    smsWriteArgs.pdu = "01000b916105770203f3000006d4f29c3e9b01";
+  int serial = 0;
+  SmsWriteArgs smsWriteArgs;
+  smsWriteArgs.status = SmsWriteArgsStatus::REC_UNREAD;
+  smsWriteArgs.smsc = "";
+  smsWriteArgs.pdu = "01000b916105770203f3000006d4f29c3e9b01";
 
-    radio->writeSmsToSim(++serial, smsWriteArgs);
+  radio->writeSmsToSim(++serial, smsWriteArgs);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.deleteSmsOnSim() for the response returned.
  */
 TEST_F(RadioHidlTest, deleteSmsOnSim) {
-    int serial = 0;
-    int index = 1;
+  int serial = 0;
+  int index = 1;
 
-    radio->deleteSmsOnSim(++serial, index);
+  radio->deleteSmsOnSim(++serial, index);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::INVALID_SMS_FORMAT, radioRsp->rspInfo.error);
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::INVALID_SMS_FORMAT, radioRsp->rspInfo.error);
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR);
+  }
 }
 
 /*
  * Test IRadio.writeSmsToRuim() for the response returned.
  */
 TEST_F(RadioHidlTest, writeSmsToRuim) {
-    int serial = 0;
+  int serial = 0;
 
-    // Create a CdmaSmsAddress
-    CdmaSmsAddress cdmaSmsAddress;
-    cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
-    cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
-    cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
-    cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
-    cdmaSmsAddress.digits = (std::vector<uint8_t>) {11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
+  // Create a CdmaSmsAddress
+  CdmaSmsAddress cdmaSmsAddress;
+  cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
+  cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
+  cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
+  cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
+  cdmaSmsAddress.digits =
+      (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
 
-    // Create a CdmaSmsSubAddress
-    CdmaSmsSubaddress cdmaSmsSubaddress;
-    cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
-    cdmaSmsSubaddress.odd = false;
-    cdmaSmsSubaddress.digits = (std::vector<uint8_t>) {};
+  // Create a CdmaSmsSubAddress
+  CdmaSmsSubaddress cdmaSmsSubaddress;
+  cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
+  cdmaSmsSubaddress.odd = false;
+  cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
 
-    // Create a CdmaSmsMessage
-    CdmaSmsMessage cdmaSmsMessage;
-    cdmaSmsMessage.teleserviceId = 4098;
-    cdmaSmsMessage.isServicePresent = false;
-    cdmaSmsMessage.serviceCategory = 0;
-    cdmaSmsMessage.address = cdmaSmsAddress;
-    cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
-    cdmaSmsMessage.bearerData = (std::vector<uint8_t>)
-        {15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
+  // Create a CdmaSmsMessage
+  CdmaSmsMessage cdmaSmsMessage;
+  cdmaSmsMessage.teleserviceId = 4098;
+  cdmaSmsMessage.isServicePresent = false;
+  cdmaSmsMessage.serviceCategory = 0;
+  cdmaSmsMessage.address = cdmaSmsAddress;
+  cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
+  cdmaSmsMessage.bearerData = (std::vector<uint8_t>){
+      15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-    // Create a CdmaSmsWriteArgs
-    CdmaSmsWriteArgs cdmaSmsWriteArgs;
-    cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
-    cdmaSmsWriteArgs.message = cdmaSmsMessage;
+  // Create a CdmaSmsWriteArgs
+  CdmaSmsWriteArgs cdmaSmsWriteArgs;
+  cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
+  cdmaSmsWriteArgs.message = cdmaSmsMessage;
 
-    radio->writeSmsToRuim(++serial, cdmaSmsWriteArgs);
+  radio->writeSmsToRuim(++serial, cdmaSmsWriteArgs);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.deleteSmsOnRuim() for the response returned.
  */
 TEST_F(RadioHidlTest, deleteSmsOnRuim) {
-    int serial = 0;
-    int index = 1;
+  int serial = 0;
+  int index = 1;
 
-    // Create a CdmaSmsAddress
-    CdmaSmsAddress cdmaSmsAddress;
-    cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
-    cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
-    cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
-    cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
-    cdmaSmsAddress.digits = (std::vector<uint8_t>) {11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
+  // Create a CdmaSmsAddress
+  CdmaSmsAddress cdmaSmsAddress;
+  cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
+  cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
+  cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
+  cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
+  cdmaSmsAddress.digits =
+      (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
 
-    // Create a CdmaSmsSubAddress
-    CdmaSmsSubaddress cdmaSmsSubaddress;
-    cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
-    cdmaSmsSubaddress.odd = false;
-    cdmaSmsSubaddress.digits = (std::vector<uint8_t>) {};
+  // Create a CdmaSmsSubAddress
+  CdmaSmsSubaddress cdmaSmsSubaddress;
+  cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
+  cdmaSmsSubaddress.odd = false;
+  cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
 
-    // Create a CdmaSmsMessage
-    CdmaSmsMessage cdmaSmsMessage;
-    cdmaSmsMessage.teleserviceId = 4098;
-    cdmaSmsMessage.isServicePresent = false;
-    cdmaSmsMessage.serviceCategory = 0;
-    cdmaSmsMessage.address = cdmaSmsAddress;
-    cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
-    cdmaSmsMessage.bearerData = (std::vector<uint8_t>)
-        {15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
+  // Create a CdmaSmsMessage
+  CdmaSmsMessage cdmaSmsMessage;
+  cdmaSmsMessage.teleserviceId = 4098;
+  cdmaSmsMessage.isServicePresent = false;
+  cdmaSmsMessage.serviceCategory = 0;
+  cdmaSmsMessage.address = cdmaSmsAddress;
+  cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
+  cdmaSmsMessage.bearerData = (std::vector<uint8_t>){
+      15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-    // Create a CdmaSmsWriteArgs
-    CdmaSmsWriteArgs cdmaSmsWriteArgs;
-    cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
-    cdmaSmsWriteArgs.message = cdmaSmsMessage;
+  // Create a CdmaSmsWriteArgs
+  CdmaSmsWriteArgs cdmaSmsWriteArgs;
+  cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
+  cdmaSmsWriteArgs.message = cdmaSmsMessage;
 
-    radio->deleteSmsOnRuim(++serial, index);
+  radio->deleteSmsOnRuim(++serial, index);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR);
+  }
 }
 
 /*
  * Test IRadio.reportSmsMemoryStatus() for the response returned.
  */
 TEST_F(RadioHidlTest, reportSmsMemoryStatus) {
-    int serial = 0;
-    bool available = true;
+  int serial = 0;
+  bool available = true;
 
-    radio->reportSmsMemoryStatus(++serial, available);
+  radio->reportSmsMemoryStatus(++serial, available);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+  }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_stk.cpp b/radio/1.0/vts/functional/radio_hidl_hal_stk.cpp
index f6d576d..b02a740 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_stk.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_stk.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 using namespace ::android::hardware::radio::V1_0;
 
@@ -22,132 +22,133 @@
  * Test IRadio.sendEnvelope() for the response returned.
  */
 TEST_F(RadioHidlTest, sendEnvelope) {
-    int serial = 0;
+  int serial = 0;
 
-    // Test with sending empty string
-    std::string content = "";
+  // Test with sending empty string
+  std::string content = "";
 
-    radio->sendEnvelope(++serial, content);
+  radio->sendEnvelope(++serial, content);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 
-    // Test with sending random string
-    content = "0";
+  // Test with sending random string
+  content = "0";
 
-    radio->sendEnvelope(++serial, content);
+  radio->sendEnvelope(++serial, content);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.sendTerminalResponseToSim() for the response returned.
  */
 TEST_F(RadioHidlTest, sendTerminalResponseToSim) {
-    int serial = 0;
+  int serial = 0;
 
-    // Test with sending empty string
-    std::string commandResponse = "";
+  // Test with sending empty string
+  std::string commandResponse = "";
 
-    radio->sendTerminalResponseToSim(++serial, commandResponse);
+  radio->sendTerminalResponseToSim(++serial, commandResponse);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 
-    // Test with sending random string
-    commandResponse = "0";
+  // Test with sending random string
+  commandResponse = "0";
 
-    radio->sendTerminalResponseToSim(++serial, commandResponse);
+  radio->sendTerminalResponseToSim(++serial, commandResponse);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.handleStkCallSetupRequestFromSim() for the response returned.
  */
 TEST_F(RadioHidlTest, handleStkCallSetupRequestFromSim) {
-    int serial = 0;
-    bool accept = false;
+  int serial = 0;
+  bool accept = false;
 
-    radio->handleStkCallSetupRequestFromSim(++serial, accept);
+  radio->handleStkCallSetupRequestFromSim(++serial, accept);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
  * Test IRadio.reportStkServiceIsRunning() for the response returned.
  */
 TEST_F(RadioHidlTest, reportStkServiceIsRunning) {
-    int serial = 0;
+  int serial = 0;
 
-    radio->reportStkServiceIsRunning(++serial);
+  radio->reportStkServiceIsRunning(++serial);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 }
 
 /*
- * Test IRadio.sendEnvelopeWithStatus() for the response returned with empty string.
+ * Test IRadio.sendEnvelopeWithStatus() for the response returned with empty
+ * string.
  */
 TEST_F(RadioHidlTest, sendEnvelopeWithStatus) {
-    int serial = 0;
+  int serial = 0;
 
-    // Test with sending empty string
-    std::string contents = "";
+  // Test with sending empty string
+  std::string contents = "";
 
-    radio->sendEnvelopeWithStatus(++serial, contents);
+  radio->sendEnvelopeWithStatus(++serial, contents);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  }
 
-    // Test with sending random string
-    contents = "0";
+  // Test with sending random string
+  contents = "0";
 
-    radio->sendEnvelopeWithStatus(++serial, contents);
+  radio->sendEnvelopeWithStatus(++serial, contents);
 
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_FALSE(RadioError::NONE == radioRsp->rspInfo.error);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_FALSE(RadioError::NONE == radioRsp->rspInfo.error);
+  }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_test.cpp b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
index db7356f..9094f39 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
@@ -14,48 +14,47 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 void RadioHidlTest::SetUp() {
-    radio = ::testing::VtsHalHidlTargetTestBase::getService<IRadio>(hidl_string("rild"));
-    ASSERT_NE(radio, nullptr);
+  radio = ::testing::VtsHalHidlTargetTestBase::getService<IRadio>(
+      hidl_string("rild"));
+  ASSERT_NE(radio, nullptr);
 
-    radioRsp = new RadioResponse(*this);
-    ASSERT_NE(radioRsp, nullptr);
+  radioRsp = new RadioResponse(*this);
+  ASSERT_NE(radioRsp, nullptr);
 
-    count = 0;
+  count = 0;
 
-    radioInd = NULL;
-    radio->setResponseFunctions(radioRsp, radioInd);
+  radioInd = NULL;
+  radio->setResponseFunctions(radioRsp, radioInd);
 
-    radio->getIccCardStatus(1);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(1, radioRsp->rspInfo.serial);
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+  radio->getIccCardStatus(1);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(1, radioRsp->rspInfo.serial);
+  EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
 }
 
-void RadioHidlTest::TearDown() {
-}
+void RadioHidlTest::TearDown() {}
 
 void RadioHidlTest::notify() {
-    std::unique_lock<std::mutex> lock(mtx);
-    count++;
-    cv.notify_one();
+  std::unique_lock<std::mutex> lock(mtx);
+  count++;
+  cv.notify_one();
 }
 
 std::cv_status RadioHidlTest::wait() {
-    std::unique_lock<std::mutex> lock(mtx);
+  std::unique_lock<std::mutex> lock(mtx);
 
-    std::cv_status status = std::cv_status::no_timeout;
-    auto now = std::chrono::system_clock::now();
-    while (count == 0) {
-        status = cv.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
-        if (status == std::cv_status::timeout) {
-            return status;
-        }
+  std::cv_status status = std::cv_status::no_timeout;
+  auto now = std::chrono::system_clock::now();
+  while (count == 0) {
+    status = cv.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
+    if (status == std::cv_status::timeout) {
+      return status;
     }
-    count--;
-    return status;
+  }
+  count--;
+  return status;
 }
-
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_utils.h b/radio/1.0/vts/functional/radio_hidl_hal_utils.h
index 126ad0d..6826238 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_utils.h
+++ b/radio/1.0/vts/functional/radio_hidl_hal_utils.h
@@ -22,8 +22,8 @@
 #include <mutex>
 
 #include <android/hardware/radio/1.0/IRadio.h>
-#include <android/hardware/radio/1.0/IRadioResponse.h>
 #include <android/hardware/radio/1.0/IRadioIndication.h>
+#include <android/hardware/radio/1.0/IRadioResponse.h>
 #include <android/hardware/radio/1.0/types.h>
 
 using ::android::hardware::radio::V1_0::ActivityStatsInfo;
@@ -87,387 +87,426 @@
 
 /* Callback class for radio response */
 class RadioResponse : public IRadioResponse {
-private:
-    RadioHidlTest& parent;
+ private:
+  RadioHidlTest& parent;
 
-public:
-    RadioResponseInfo rspInfo;
-    hidl_string imsi;
-    IccIoResult iccIoResult;
-    int channelId;
+ public:
+  RadioResponseInfo rspInfo;
+  hidl_string imsi;
+  IccIoResult iccIoResult;
+  int channelId;
 
-    // Sms
-    SendSmsResult sendSmsResult;
-    hidl_string smscAddress;
-    uint32_t writeSmsToSimIndex;
-    uint32_t writeSmsToRuimIndex;
+  // Sms
+  SendSmsResult sendSmsResult;
+  hidl_string smscAddress;
+  uint32_t writeSmsToSimIndex;
+  uint32_t writeSmsToRuimIndex;
 
-    RadioResponse(RadioHidlTest& parent);
+  RadioResponse(RadioHidlTest& parent);
 
-    virtual ~RadioResponse() = default;
+  virtual ~RadioResponse() = default;
 
-    Return<void> getIccCardStatusResponse(const RadioResponseInfo& info,
-            const CardStatus& cardStatus);
+  Return<void> getIccCardStatusResponse(const RadioResponseInfo& info,
+                                        const CardStatus& cardStatus);
 
-    Return<void> supplyIccPinForAppResponse(const RadioResponseInfo& info,
-            int32_t remainingRetries);
+  Return<void> supplyIccPinForAppResponse(const RadioResponseInfo& info,
+                                          int32_t remainingRetries);
 
-    Return<void> supplyIccPukForAppResponse(const RadioResponseInfo& info,
-            int32_t remainingRetries);
+  Return<void> supplyIccPukForAppResponse(const RadioResponseInfo& info,
+                                          int32_t remainingRetries);
 
-    Return<void> supplyIccPin2ForAppResponse(const RadioResponseInfo& info,
-            int32_t remainingRetries);
+  Return<void> supplyIccPin2ForAppResponse(const RadioResponseInfo& info,
+                                           int32_t remainingRetries);
 
-    Return<void> supplyIccPuk2ForAppResponse(const RadioResponseInfo& info,
-            int32_t remainingRetries);
+  Return<void> supplyIccPuk2ForAppResponse(const RadioResponseInfo& info,
+                                           int32_t remainingRetries);
 
-    Return<void> changeIccPinForAppResponse(const RadioResponseInfo& info,
-            int32_t remainingRetries);
+  Return<void> changeIccPinForAppResponse(const RadioResponseInfo& info,
+                                          int32_t remainingRetries);
 
-    Return<void> changeIccPin2ForAppResponse(const RadioResponseInfo& info,
-            int32_t remainingRetries);
+  Return<void> changeIccPin2ForAppResponse(const RadioResponseInfo& info,
+                                           int32_t remainingRetries);
 
-    Return<void> supplyNetworkDepersonalizationResponse(
-            const RadioResponseInfo& info, int32_t remainingRetries);
+  Return<void> supplyNetworkDepersonalizationResponse(
+      const RadioResponseInfo& info, int32_t remainingRetries);
 
-    Return<void> getCurrentCallsResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<Call>& calls);
+  Return<void> getCurrentCallsResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<Call>& calls);
 
-    Return<void> dialResponse(const RadioResponseInfo& info);
+  Return<void> dialResponse(const RadioResponseInfo& info);
 
-    Return<void> getIMSIForAppResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_string& imsi);
+  Return<void> getIMSIForAppResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_string& imsi);
 
-    Return<void> hangupConnectionResponse(const RadioResponseInfo& info);
+  Return<void> hangupConnectionResponse(const RadioResponseInfo& info);
 
-    Return<void> hangupWaitingOrBackgroundResponse(
-            const RadioResponseInfo& info);
+  Return<void> hangupWaitingOrBackgroundResponse(const RadioResponseInfo& info);
 
-    Return<void> hangupForegroundResumeBackgroundResponse(
-            const RadioResponseInfo& info);
+  Return<void> hangupForegroundResumeBackgroundResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> switchWaitingOrHoldingAndActiveResponse(
-            const RadioResponseInfo& info);
+  Return<void> switchWaitingOrHoldingAndActiveResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> conferenceResponse(const RadioResponseInfo& info);
+  Return<void> conferenceResponse(const RadioResponseInfo& info);
 
-    Return<void> rejectCallResponse(const RadioResponseInfo& info);
+  Return<void> rejectCallResponse(const RadioResponseInfo& info);
 
-    Return<void> getLastCallFailCauseResponse(const RadioResponseInfo& info,
-            const LastCallFailCauseInfo& failCauseInfo);
+  Return<void> getLastCallFailCauseResponse(
+      const RadioResponseInfo& info,
+      const LastCallFailCauseInfo& failCauseInfo);
 
-    Return<void> getSignalStrengthResponse(const RadioResponseInfo& info,
-            const SignalStrength& sigStrength);
+  Return<void> getSignalStrengthResponse(const RadioResponseInfo& info,
+                                         const SignalStrength& sigStrength);
 
-    Return<void> getVoiceRegistrationStateResponse(const RadioResponseInfo& info,
-            const VoiceRegStateResult& voiceRegResponse);
+  Return<void> getVoiceRegistrationStateResponse(
+      const RadioResponseInfo& info,
+      const VoiceRegStateResult& voiceRegResponse);
 
-    Return<void> getDataRegistrationStateResponse(const RadioResponseInfo& info,
-            const DataRegStateResult& dataRegResponse);
+  Return<void> getDataRegistrationStateResponse(
+      const RadioResponseInfo& info, const DataRegStateResult& dataRegResponse);
 
-    Return<void> getOperatorResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_string& longName,
-            const ::android::hardware::hidl_string& shortName,
-            const ::android::hardware::hidl_string& numeric);
+  Return<void> getOperatorResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_string& longName,
+      const ::android::hardware::hidl_string& shortName,
+      const ::android::hardware::hidl_string& numeric);
 
-    Return<void> setRadioPowerResponse(const RadioResponseInfo& info);
+  Return<void> setRadioPowerResponse(const RadioResponseInfo& info);
 
-    Return<void> sendDtmfResponse(const RadioResponseInfo& info);
+  Return<void> sendDtmfResponse(const RadioResponseInfo& info);
 
-    Return<void> sendSmsResponse(const RadioResponseInfo& info,
-            const SendSmsResult& sms);
+  Return<void> sendSmsResponse(const RadioResponseInfo& info,
+                               const SendSmsResult& sms);
 
-    Return<void> sendSMSExpectMoreResponse(const RadioResponseInfo& info,
-            const SendSmsResult& sms);
+  Return<void> sendSMSExpectMoreResponse(const RadioResponseInfo& info,
+                                         const SendSmsResult& sms);
 
-    Return<void> setupDataCallResponse(const RadioResponseInfo& info,
-            const SetupDataCallResult& dcResponse);
+  Return<void> setupDataCallResponse(const RadioResponseInfo& info,
+                                     const SetupDataCallResult& dcResponse);
 
-    Return<void> iccIOForAppResponse(const RadioResponseInfo& info,
-            const IccIoResult& iccIo);
+  Return<void> iccIOForAppResponse(const RadioResponseInfo& info,
+                                   const IccIoResult& iccIo);
 
-    Return<void> sendUssdResponse(const RadioResponseInfo& info);
+  Return<void> sendUssdResponse(const RadioResponseInfo& info);
 
-    Return<void> cancelPendingUssdResponse(const RadioResponseInfo& info);
+  Return<void> cancelPendingUssdResponse(const RadioResponseInfo& info);
 
-    Return<void> getClirResponse(const RadioResponseInfo& info, int32_t n, int32_t m);
+  Return<void> getClirResponse(const RadioResponseInfo& info, int32_t n,
+                               int32_t m);
 
-    Return<void> setClirResponse(const RadioResponseInfo& info);
+  Return<void> setClirResponse(const RadioResponseInfo& info);
 
-    Return<void> getCallForwardStatusResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<CallForwardInfo>& call_forwardInfos);
+  Return<void> getCallForwardStatusResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<CallForwardInfo>& call_forwardInfos);
 
-    Return<void> setCallForwardResponse(const RadioResponseInfo& info);
+  Return<void> setCallForwardResponse(const RadioResponseInfo& info);
 
-    Return<void> getCallWaitingResponse(const RadioResponseInfo& info,
-            bool enable, int32_t serviceClass);
+  Return<void> getCallWaitingResponse(const RadioResponseInfo& info,
+                                      bool enable, int32_t serviceClass);
 
-    Return<void> setCallWaitingResponse(const RadioResponseInfo& info);
+  Return<void> setCallWaitingResponse(const RadioResponseInfo& info);
 
-    Return<void> acknowledgeLastIncomingGsmSmsResponse(const RadioResponseInfo& info);
+  Return<void> acknowledgeLastIncomingGsmSmsResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> acceptCallResponse(const RadioResponseInfo& info);
+  Return<void> acceptCallResponse(const RadioResponseInfo& info);
 
-    Return<void> deactivateDataCallResponse(const RadioResponseInfo& info);
+  Return<void> deactivateDataCallResponse(const RadioResponseInfo& info);
 
-    Return<void> getFacilityLockForAppResponse(const RadioResponseInfo& info,int32_t response);
+  Return<void> getFacilityLockForAppResponse(const RadioResponseInfo& info,
+                                             int32_t response);
 
-    Return<void> setFacilityLockForAppResponse(const RadioResponseInfo& info,int32_t retry);
+  Return<void> setFacilityLockForAppResponse(const RadioResponseInfo& info,
+                                             int32_t retry);
 
-    Return<void> setBarringPasswordResponse(const RadioResponseInfo& info);
+  Return<void> setBarringPasswordResponse(const RadioResponseInfo& info);
 
-    Return<void> getNetworkSelectionModeResponse(const RadioResponseInfo& info,bool manual);
+  Return<void> getNetworkSelectionModeResponse(const RadioResponseInfo& info,
+                                               bool manual);
 
-    Return<void> setNetworkSelectionModeAutomaticResponse(const RadioResponseInfo& info);
+  Return<void> setNetworkSelectionModeAutomaticResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> setNetworkSelectionModeManualResponse(const RadioResponseInfo& info);
+  Return<void> setNetworkSelectionModeManualResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> getAvailableNetworksResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<OperatorInfo>& networkInfos);
+  Return<void> getAvailableNetworksResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<OperatorInfo>& networkInfos);
 
-    Return<void> startDtmfResponse(const RadioResponseInfo& info);
+  Return<void> startDtmfResponse(const RadioResponseInfo& info);
 
-    Return<void> stopDtmfResponse(const RadioResponseInfo& info);
+  Return<void> stopDtmfResponse(const RadioResponseInfo& info);
 
-    Return<void> getBasebandVersionResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_string& version);
+  Return<void> getBasebandVersionResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_string& version);
 
-    Return<void> separateConnectionResponse(const RadioResponseInfo& info);
+  Return<void> separateConnectionResponse(const RadioResponseInfo& info);
 
-    Return<void> setMuteResponse(const RadioResponseInfo& info);
+  Return<void> setMuteResponse(const RadioResponseInfo& info);
 
-    Return<void> getMuteResponse(const RadioResponseInfo& info, bool enable);
+  Return<void> getMuteResponse(const RadioResponseInfo& info, bool enable);
 
-    Return<void> getClipResponse(const RadioResponseInfo& info,ClipStatus status);
+  Return<void> getClipResponse(const RadioResponseInfo& info,
+                               ClipStatus status);
 
-    Return<void> getDataCallListResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<SetupDataCallResult>& dcResponse);
+  Return<void> getDataCallListResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<SetupDataCallResult>& dcResponse);
 
-    Return<void> sendOemRilRequestRawResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<uint8_t>& data);
+  Return<void> sendOemRilRequestRawResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<uint8_t>& data);
 
-    Return<void> sendOemRilRequestStringsResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<::android::hardware::hidl_string>& data);
+  Return<void> sendOemRilRequestStringsResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<::android::hardware::hidl_string>&
+          data);
 
-    Return<void> setSuppServiceNotificationsResponse(
-            const RadioResponseInfo& info);
+  Return<void> setSuppServiceNotificationsResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> writeSmsToSimResponse(const RadioResponseInfo& info,int32_t index);
+  Return<void> writeSmsToSimResponse(const RadioResponseInfo& info,
+                                     int32_t index);
 
-    Return<void> deleteSmsOnSimResponse(const RadioResponseInfo& info);
+  Return<void> deleteSmsOnSimResponse(const RadioResponseInfo& info);
 
-    Return<void> setBandModeResponse(const RadioResponseInfo& info);
+  Return<void> setBandModeResponse(const RadioResponseInfo& info);
 
-    Return<void> getAvailableBandModesResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<RadioBandMode>& bandModes);
+  Return<void> getAvailableBandModesResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<RadioBandMode>& bandModes);
 
-    Return<void> sendEnvelopeResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_string& commandResponse);
+  Return<void> sendEnvelopeResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_string& commandResponse);
 
-    Return<void> sendTerminalResponseToSimResponse(const RadioResponseInfo& info);
+  Return<void> sendTerminalResponseToSimResponse(const RadioResponseInfo& info);
 
-    Return<void> handleStkCallSetupRequestFromSimResponse(
-            const RadioResponseInfo& info);
+  Return<void> handleStkCallSetupRequestFromSimResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> explicitCallTransferResponse(const RadioResponseInfo& info);
+  Return<void> explicitCallTransferResponse(const RadioResponseInfo& info);
 
-    Return<void> setPreferredNetworkTypeResponse(const RadioResponseInfo& info);
+  Return<void> setPreferredNetworkTypeResponse(const RadioResponseInfo& info);
 
-    Return<void> getPreferredNetworkTypeResponse(const RadioResponseInfo& info,
-            PreferredNetworkType nwType);
+  Return<void> getPreferredNetworkTypeResponse(const RadioResponseInfo& info,
+                                               PreferredNetworkType nwType);
 
-    Return<void> getNeighboringCidsResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<NeighboringCell>& cells);
+  Return<void> getNeighboringCidsResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<NeighboringCell>& cells);
 
-    Return<void> setLocationUpdatesResponse(const RadioResponseInfo& info);
+  Return<void> setLocationUpdatesResponse(const RadioResponseInfo& info);
 
-    Return<void> setCdmaSubscriptionSourceResponse(const RadioResponseInfo& info);
+  Return<void> setCdmaSubscriptionSourceResponse(const RadioResponseInfo& info);
 
-    Return<void> setCdmaRoamingPreferenceResponse(const RadioResponseInfo& info);
+  Return<void> setCdmaRoamingPreferenceResponse(const RadioResponseInfo& info);
 
-    Return<void> getCdmaRoamingPreferenceResponse(const RadioResponseInfo& info,
-            CdmaRoamingType type);
+  Return<void> getCdmaRoamingPreferenceResponse(const RadioResponseInfo& info,
+                                                CdmaRoamingType type);
 
-    Return<void> setTTYModeResponse(const RadioResponseInfo& info);
+  Return<void> setTTYModeResponse(const RadioResponseInfo& info);
 
-    Return<void> getTTYModeResponse(const RadioResponseInfo& info, TtyMode mode);
+  Return<void> getTTYModeResponse(const RadioResponseInfo& info, TtyMode mode);
 
-    Return<void> setPreferredVoicePrivacyResponse(const RadioResponseInfo& info);
+  Return<void> setPreferredVoicePrivacyResponse(const RadioResponseInfo& info);
 
-    Return<void> getPreferredVoicePrivacyResponse(const RadioResponseInfo& info, bool enable);
+  Return<void> getPreferredVoicePrivacyResponse(const RadioResponseInfo& info,
+                                                bool enable);
 
-    Return<void> sendCDMAFeatureCodeResponse(const RadioResponseInfo& info);
+  Return<void> sendCDMAFeatureCodeResponse(const RadioResponseInfo& info);
 
-    Return<void> sendBurstDtmfResponse(const RadioResponseInfo& info);
+  Return<void> sendBurstDtmfResponse(const RadioResponseInfo& info);
 
-    Return<void> sendCdmaSmsResponse(const RadioResponseInfo& info, const SendSmsResult& sms);
+  Return<void> sendCdmaSmsResponse(const RadioResponseInfo& info,
+                                   const SendSmsResult& sms);
 
-    Return<void> acknowledgeLastIncomingCdmaSmsResponse(const RadioResponseInfo& info);
+  Return<void> acknowledgeLastIncomingCdmaSmsResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> getGsmBroadcastConfigResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>& configs);
+  Return<void> getGsmBroadcastConfigResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>& configs);
 
-    Return<void> setGsmBroadcastConfigResponse(const RadioResponseInfo& info);
+  Return<void> setGsmBroadcastConfigResponse(const RadioResponseInfo& info);
 
-    Return<void> setGsmBroadcastActivationResponse(const RadioResponseInfo& info);
+  Return<void> setGsmBroadcastActivationResponse(const RadioResponseInfo& info);
 
-    Return<void> getCdmaBroadcastConfigResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>& configs);
+  Return<void> getCdmaBroadcastConfigResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>& configs);
 
-    Return<void> setCdmaBroadcastConfigResponse(const RadioResponseInfo& info);
+  Return<void> setCdmaBroadcastConfigResponse(const RadioResponseInfo& info);
 
-    Return<void> setCdmaBroadcastActivationResponse(const RadioResponseInfo& info);
+  Return<void> setCdmaBroadcastActivationResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> getCDMASubscriptionResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_string& mdn,
-            const ::android::hardware::hidl_string& hSid,
-            const ::android::hardware::hidl_string& hNid,
-            const ::android::hardware::hidl_string& min,
-            const ::android::hardware::hidl_string& prl);
+  Return<void> getCDMASubscriptionResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_string& mdn,
+      const ::android::hardware::hidl_string& hSid,
+      const ::android::hardware::hidl_string& hNid,
+      const ::android::hardware::hidl_string& min,
+      const ::android::hardware::hidl_string& prl);
 
-    Return<void> writeSmsToRuimResponse(const RadioResponseInfo& info, uint32_t index);
+  Return<void> writeSmsToRuimResponse(const RadioResponseInfo& info,
+                                      uint32_t index);
 
-    Return<void> deleteSmsOnRuimResponse(const RadioResponseInfo& info);
+  Return<void> deleteSmsOnRuimResponse(const RadioResponseInfo& info);
 
-    Return<void> getDeviceIdentityResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_string& imei,
-            const ::android::hardware::hidl_string& imeisv,
-            const ::android::hardware::hidl_string& esn,
-            const ::android::hardware::hidl_string& meid);
+  Return<void> getDeviceIdentityResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_string& imei,
+      const ::android::hardware::hidl_string& imeisv,
+      const ::android::hardware::hidl_string& esn,
+      const ::android::hardware::hidl_string& meid);
 
-    Return<void> exitEmergencyCallbackModeResponse(const RadioResponseInfo& info);
+  Return<void> exitEmergencyCallbackModeResponse(const RadioResponseInfo& info);
 
-    Return<void> getSmscAddressResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_string& smsc);
+  Return<void> getSmscAddressResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_string& smsc);
 
-    Return<void> setSmscAddressResponse(const RadioResponseInfo& info);
+  Return<void> setSmscAddressResponse(const RadioResponseInfo& info);
 
-    Return<void> reportSmsMemoryStatusResponse(const RadioResponseInfo& info);
+  Return<void> reportSmsMemoryStatusResponse(const RadioResponseInfo& info);
 
-    Return<void> reportStkServiceIsRunningResponse(const RadioResponseInfo& info);
+  Return<void> reportStkServiceIsRunningResponse(const RadioResponseInfo& info);
 
-    Return<void> getCdmaSubscriptionSourceResponse(const RadioResponseInfo& info,
-            CdmaSubscriptionSource source);
+  Return<void> getCdmaSubscriptionSourceResponse(const RadioResponseInfo& info,
+                                                 CdmaSubscriptionSource source);
 
-    Return<void> requestIsimAuthenticationResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_string& response);
+  Return<void> requestIsimAuthenticationResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_string& response);
 
-    Return<void> acknowledgeIncomingGsmSmsWithPduResponse(
-            const RadioResponseInfo& info);
+  Return<void> acknowledgeIncomingGsmSmsWithPduResponse(
+      const RadioResponseInfo& info);
 
-    Return<void> sendEnvelopeWithStatusResponse(const RadioResponseInfo& info,
-            const IccIoResult& iccIo);
+  Return<void> sendEnvelopeWithStatusResponse(const RadioResponseInfo& info,
+                                              const IccIoResult& iccIo);
 
-    Return<void> getVoiceRadioTechnologyResponse(const RadioResponseInfo& info,
-            RadioTechnology rat);
+  Return<void> getVoiceRadioTechnologyResponse(const RadioResponseInfo& info,
+                                               RadioTechnology rat);
 
-    Return<void> getCellInfoListResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<CellInfo>& cellInfo);
+  Return<void> getCellInfoListResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<CellInfo>& cellInfo);
 
-    Return<void> setCellInfoListRateResponse(const RadioResponseInfo& info);
+  Return<void> setCellInfoListRateResponse(const RadioResponseInfo& info);
 
-    Return<void> setInitialAttachApnResponse(const RadioResponseInfo& info);
+  Return<void> setInitialAttachApnResponse(const RadioResponseInfo& info);
 
-    Return<void> getImsRegistrationStateResponse(const RadioResponseInfo& info,
-            bool isRegistered, RadioTechnologyFamily ratFamily);
+  Return<void> getImsRegistrationStateResponse(const RadioResponseInfo& info,
+                                               bool isRegistered,
+                                               RadioTechnologyFamily ratFamily);
 
-    Return<void> sendImsSmsResponse(const RadioResponseInfo& info,
-            const SendSmsResult& sms);
+  Return<void> sendImsSmsResponse(const RadioResponseInfo& info,
+                                  const SendSmsResult& sms);
 
-    Return<void> iccTransmitApduBasicChannelResponse(
-            const RadioResponseInfo& info, const IccIoResult& result);
+  Return<void> iccTransmitApduBasicChannelResponse(
+      const RadioResponseInfo& info, const IccIoResult& result);
 
-    Return<void> iccOpenLogicalChannelResponse(const RadioResponseInfo& info,
-            int32_t channelId, const ::android::hardware::hidl_vec<int8_t>& selectResponse);
+  Return<void> iccOpenLogicalChannelResponse(
+      const RadioResponseInfo& info, int32_t channelId,
+      const ::android::hardware::hidl_vec<int8_t>& selectResponse);
 
-    Return<void> iccCloseLogicalChannelResponse(const RadioResponseInfo& info);
+  Return<void> iccCloseLogicalChannelResponse(const RadioResponseInfo& info);
 
-    Return<void> iccTransmitApduLogicalChannelResponse(
-            const RadioResponseInfo& info, const IccIoResult& result);
+  Return<void> iccTransmitApduLogicalChannelResponse(
+      const RadioResponseInfo& info, const IccIoResult& result);
 
-    Return<void> nvReadItemResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_string& result);
+  Return<void> nvReadItemResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_string& result);
 
-    Return<void> nvWriteItemResponse(const RadioResponseInfo& info);
+  Return<void> nvWriteItemResponse(const RadioResponseInfo& info);
 
-    Return<void> nvWriteCdmaPrlResponse(const RadioResponseInfo& info);
+  Return<void> nvWriteCdmaPrlResponse(const RadioResponseInfo& info);
 
-    Return<void> nvResetConfigResponse(const RadioResponseInfo& info);
+  Return<void> nvResetConfigResponse(const RadioResponseInfo& info);
 
-    Return<void> setUiccSubscriptionResponse(const RadioResponseInfo& info);
+  Return<void> setUiccSubscriptionResponse(const RadioResponseInfo& info);
 
-    Return<void> setDataAllowedResponse(const RadioResponseInfo& info);
+  Return<void> setDataAllowedResponse(const RadioResponseInfo& info);
 
-    Return<void> getHardwareConfigResponse(const RadioResponseInfo& info,
-            const ::android::hardware::hidl_vec<HardwareConfig>& config);
+  Return<void> getHardwareConfigResponse(
+      const RadioResponseInfo& info,
+      const ::android::hardware::hidl_vec<HardwareConfig>& config);
 
-    Return<void> requestIccSimAuthenticationResponse(
-            const RadioResponseInfo& info, const IccIoResult& result);
+  Return<void> requestIccSimAuthenticationResponse(
+      const RadioResponseInfo& info, const IccIoResult& result);
 
-    Return<void> setDataProfileResponse(const RadioResponseInfo& info);
+  Return<void> setDataProfileResponse(const RadioResponseInfo& info);
 
-    Return<void> requestShutdownResponse(const RadioResponseInfo& info);
+  Return<void> requestShutdownResponse(const RadioResponseInfo& info);
 
-    Return<void> getRadioCapabilityResponse(const RadioResponseInfo& info,
-            const RadioCapability& rc);
+  Return<void> getRadioCapabilityResponse(const RadioResponseInfo& info,
+                                          const RadioCapability& rc);
 
-    Return<void> setRadioCapabilityResponse(const RadioResponseInfo& info,
-            const RadioCapability& rc);
+  Return<void> setRadioCapabilityResponse(const RadioResponseInfo& info,
+                                          const RadioCapability& rc);
 
-    Return<void> startLceServiceResponse(const RadioResponseInfo& info,
-            const LceStatusInfo& statusInfo);
+  Return<void> startLceServiceResponse(const RadioResponseInfo& info,
+                                       const LceStatusInfo& statusInfo);
 
-    Return<void> stopLceServiceResponse(const RadioResponseInfo& info,
-            const LceStatusInfo& statusInfo);
+  Return<void> stopLceServiceResponse(const RadioResponseInfo& info,
+                                      const LceStatusInfo& statusInfo);
 
-    Return<void> pullLceDataResponse(const RadioResponseInfo& info,
-            const LceDataInfo& lceInfo);
+  Return<void> pullLceDataResponse(const RadioResponseInfo& info,
+                                   const LceDataInfo& lceInfo);
 
-    Return<void> getModemActivityInfoResponse(const RadioResponseInfo& info,
-            const ActivityStatsInfo& activityInfo);
+  Return<void> getModemActivityInfoResponse(
+      const RadioResponseInfo& info, const ActivityStatsInfo& activityInfo);
 
-    Return<void> setAllowedCarriersResponse(const RadioResponseInfo& info,
-            int32_t numAllowed);
+  Return<void> setAllowedCarriersResponse(const RadioResponseInfo& info,
+                                          int32_t numAllowed);
 
-    Return<void> getAllowedCarriersResponse(const RadioResponseInfo& info,
-            bool allAllowed, const CarrierRestrictions& carriers);
+  Return<void> getAllowedCarriersResponse(const RadioResponseInfo& info,
+                                          bool allAllowed,
+                                          const CarrierRestrictions& carriers);
 
-    Return<void> sendDeviceStateResponse(const RadioResponseInfo& info);
+  Return<void> sendDeviceStateResponse(const RadioResponseInfo& info);
 
-    Return<void> setIndicationFilterResponse(const RadioResponseInfo& info);
+  Return<void> setIndicationFilterResponse(const RadioResponseInfo& info);
 
-    Return<void> setSimCardPowerResponse(const RadioResponseInfo& info);
+  Return<void> setSimCardPowerResponse(const RadioResponseInfo& info);
 
-    Return<void> acknowledgeRequest(int32_t serial);
+  Return<void> acknowledgeRequest(int32_t serial);
 };
 
 // The main test class for Radio HIDL.
 class RadioHidlTest : public ::testing::VtsHalHidlTargetTestBase {
-private:
-    std::mutex mtx;
-    std::condition_variable cv;
-    int count;
+ private:
+  std::mutex mtx;
+  std::condition_variable cv;
+  int count;
 
-public:
-    virtual void SetUp() override;
+ public:
+  virtual void SetUp() override;
 
-    virtual void TearDown() override;
+  virtual void TearDown() override;
 
-    /* Used as a mechanism to inform the test about data/event callback */
-    void notify();
+  /* Used as a mechanism to inform the test about data/event callback */
+  void notify();
 
-    /* Test code calls this function to wait for response */
-    std::cv_status wait();
+  /* Test code calls this function to wait for response */
+  std::cv_status wait();
 
-    sp<IRadio> radio;
-    sp<RadioResponse> radioRsp;
-    sp<IRadioIndication> radioInd;
-
+  sp<IRadio> radio;
+  sp<RadioResponse> radioRsp;
+  sp<IRadioIndication> radioInd;
 };
 
 // A class for test environment setup
 class RadioHidlEnvironment : public ::testing::Environment {
-public:
-    virtual void SetUp() {}
-    virtual void TearDown() {}
+ public:
+  virtual void SetUp() {}
+  virtual void TearDown() {}
 };
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_voice.cpp b/radio/1.0/vts/functional/radio_hidl_hal_voice.cpp
index fa2871d..ef10d10 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_voice.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_voice.cpp
@@ -14,471 +14,471 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 /*
  * Test IRadio.getCurrentCalls() for the response returned.
  */
 TEST_F(RadioHidlTest, getCurrentCalls) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getCurrentCalls(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getCurrentCalls(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.dial() for the response returned.
  */
 TEST_F(RadioHidlTest, dial) {
-    int serial = 1;
+  int serial = 1;
 
-    Dial dialInfo;
-    memset(&dialInfo, 0, sizeof(dialInfo));
-    dialInfo.address = hidl_string("123456789");
+  Dial dialInfo;
+  memset(&dialInfo, 0, sizeof(dialInfo));
+  dialInfo.address = hidl_string("123456789");
 
-    radio->dial(serial, dialInfo);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->dial(serial, dialInfo);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.hangup() for the response returned.
  */
 TEST_F(RadioHidlTest, hangup) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->hangup(serial, 1);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->hangup(serial, 1);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.hangupWaitingOrBackground() for the response returned.
  */
 TEST_F(RadioHidlTest, hangupWaitingOrBackground) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->hangupWaitingOrBackground(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->hangupWaitingOrBackground(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.hangupForegroundResumeBackground() for the response returned.
  */
 TEST_F(RadioHidlTest, hangupForegroundResumeBackground) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->hangupForegroundResumeBackground(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->hangupForegroundResumeBackground(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.switchWaitingOrHoldingAndActive() for the response returned.
  */
 TEST_F(RadioHidlTest, switchWaitingOrHoldingAndActive) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->switchWaitingOrHoldingAndActive(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->switchWaitingOrHoldingAndActive(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.conference() for the response returned.
  */
 TEST_F(RadioHidlTest, conference) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->conference(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->conference(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.rejectCall() for the response returned.
  */
 TEST_F(RadioHidlTest, rejectCall) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->rejectCall(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->rejectCall(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.getLastCallFailCause() for the response returned.
  */
 TEST_F(RadioHidlTest, getLastCallFailCause) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getLastCallFailCause(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getLastCallFailCause(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.sendUssd() for the response returned.
  */
 TEST_F(RadioHidlTest, sendUssd) {
-    int serial = 1;
-    radio->sendUssd(serial, hidl_string("test"));
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  int serial = 1;
+  radio->sendUssd(serial, hidl_string("test"));
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.cancelPendingUssd() for the response returned.
  */
 TEST_F(RadioHidlTest, cancelPendingUssd) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->cancelPendingUssd(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->cancelPendingUssd(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.getCallForwardStatus() for the response returned.
  */
 TEST_F(RadioHidlTest, getCallForwardStatus) {
-    int serial = 1;
-    CallForwardInfo callInfo;
-    memset(&callInfo, 0, sizeof(callInfo));
-    callInfo.number = hidl_string();
+  int serial = 1;
+  CallForwardInfo callInfo;
+  memset(&callInfo, 0, sizeof(callInfo));
+  callInfo.number = hidl_string();
 
-    radio->getCallForwardStatus(serial, callInfo);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getCallForwardStatus(serial, callInfo);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.setCallForward() for the response returned.
  */
 TEST_F(RadioHidlTest, setCallForward) {
-    int serial = 1;
-    CallForwardInfo callInfo;
-    memset(&callInfo, 0, sizeof(callInfo));
-    callInfo.number = hidl_string();
+  int serial = 1;
+  CallForwardInfo callInfo;
+  memset(&callInfo, 0, sizeof(callInfo));
+  callInfo.number = hidl_string();
 
-    radio->setCallForward(serial, callInfo);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setCallForward(serial, callInfo);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.getCallWaiting() for the response returned.
  */
 TEST_F(RadioHidlTest, getCallWaiting) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getCallWaiting(serial, 1);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getCallWaiting(serial, 1);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::NONE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::NONE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.setCallWaiting() for the response returned.
  */
 TEST_F(RadioHidlTest, setCallWaiting) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setCallWaiting(serial, true, 1);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setCallWaiting(serial, true, 1);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.acceptCall() for the response returned.
  */
 TEST_F(RadioHidlTest, acceptCall) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->acceptCall(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->acceptCall(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.separateConnection() for the response returned.
  */
 TEST_F(RadioHidlTest, separateConnection) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->separateConnection(serial, 1);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->separateConnection(serial, 1);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.explicitCallTransfer() for the response returned.
  */
 TEST_F(RadioHidlTest, explicitCallTransfer) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->explicitCallTransfer(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->explicitCallTransfer(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.sendCDMAFeatureCode() for the response returned.
  */
 TEST_F(RadioHidlTest, sendCDMAFeatureCode) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->sendCDMAFeatureCode(serial, hidl_string());
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->sendCDMAFeatureCode(serial, hidl_string());
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR);
+  }
 }
 
 /*
  * Test IRadio.sendDtmf() for the response returned.
  */
 TEST_F(RadioHidlTest, sendDtmf) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->sendDtmf(serial, "1");
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->sendDtmf(serial, "1");
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::NO_RESOURCES
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::NO_RESOURCES ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+  }
 }
 
 /*
  * Test IRadio.startDtmf() for the response returned.
  */
 TEST_F(RadioHidlTest, startDtmf) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->startDtmf(serial, "1");
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->startDtmf(serial, "1");
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.stopDtmf() for the response returned.
  */
 TEST_F(RadioHidlTest, stopDtmf) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->stopDtmf(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->stopDtmf(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+  }
 }
 
 /*
  * Test IRadio.setMute() for the response returned.
  */
 TEST_F(RadioHidlTest, setMute) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->setMute(serial, true);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->setMute(serial, true);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.getMute() for the response returned.
  */
 TEST_F(RadioHidlTest, getMute) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->getMute(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->getMute(serial);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+  }
 }
 
 /*
  * Test IRadio.sendBurstDtmf() for the response returned.
  */
 TEST_F(RadioHidlTest, sendBurstDtmf) {
-    int serial = 1;
+  int serial = 1;
 
-    radio->sendBurstDtmf(serial, "1", 0, 0);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+  radio->sendBurstDtmf(serial, "1", 0, 0);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS
-                || radioRsp->rspInfo.error == RadioError::SYSTEM_ERR
-                || radioRsp->rspInfo.error == RadioError::MODEM_ERR
-                || radioRsp->rspInfo.error == RadioError::INTERNAL_ERR
-                || radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-    }
+  if (cardStatus.cardState == CardState::ABSENT) {
+    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                radioRsp->rspInfo.error == RadioError::INTERNAL_ERR ||
+                radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+  }
 }
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/radio_response.cpp b/radio/1.0/vts/functional/radio_response.cpp
index c889a18..22c20a5 100644
--- a/radio/1.0/vts/functional/radio_response.cpp
+++ b/radio/1.0/vts/functional/radio_response.cpp
@@ -14,913 +14,959 @@
  * limitations under the License.
  */
 
-#include<radio_hidl_hal_utils.h>
+#include <radio_hidl_hal_utils.h>
 
 CardStatus cardStatus;
 
-RadioResponse::RadioResponse(RadioHidlTest& parent) : parent(parent) {
-}
+RadioResponse::RadioResponse(RadioHidlTest& parent) : parent(parent) {}
 
 Return<void> RadioResponse::getIccCardStatusResponse(
-        const RadioResponseInfo& info, const CardStatus& card_status) {
-    rspInfo = info;
-    cardStatus = card_status;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const CardStatus& card_status) {
+  rspInfo = info;
+  cardStatus = card_status;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::supplyIccPinForAppResponse(
-        const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::supplyIccPukForAppResponse(
-        const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::supplyIccPin2ForAppResponse(
-        const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
+    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
   rspInfo = info;
   parent.notify();
   return Void();
 }
 
 Return<void> RadioResponse::supplyIccPuk2ForAppResponse(
-        const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::changeIccPinForAppResponse(
-        const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::changeIccPin2ForAppResponse(
-        const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::supplyNetworkDepersonalizationResponse(
-        const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getCurrentCallsResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_vec<Call>& /*calls*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<Call>& /*calls*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::dialResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getIMSIForAppResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_string& imsi) {
-    rspInfo = info;
-    this->imsi = imsi;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_string& imsi) {
+  rspInfo = info;
+  this->imsi = imsi;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::hangupConnectionResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::hangupWaitingOrBackgroundResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::hangupForegroundResumeBackgroundResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::switchWaitingOrHoldingAndActiveResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::conferenceResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::conferenceResponse(const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::rejectCallResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::rejectCallResponse(const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getLastCallFailCauseResponse(
-        const RadioResponseInfo& info, const LastCallFailCauseInfo& /*failCauseInfo*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const LastCallFailCauseInfo& /*failCauseInfo*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getSignalStrengthResponse(
-        const RadioResponseInfo& info, const SignalStrength& /*sig_strength*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const SignalStrength& /*sig_strength*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getVoiceRegistrationStateResponse(
-        const RadioResponseInfo& info, const VoiceRegStateResult& /*voiceRegResponse*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const VoiceRegStateResult& /*voiceRegResponse*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getDataRegistrationStateResponse(
-        const RadioResponseInfo& info, const DataRegStateResult& /*dataRegResponse*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const DataRegStateResult& /*dataRegResponse*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getOperatorResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*longName*/,
-        const ::android::hardware::hidl_string& /*shortName*/,
-        const ::android::hardware::hidl_string& /*numeric*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_string& /*longName*/,
+    const ::android::hardware::hidl_string& /*shortName*/,
+    const ::android::hardware::hidl_string& /*numeric*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setRadioPowerResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setRadioPowerResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::sendDtmfResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::sendSmsResponse(const RadioResponseInfo& info,
-        const SendSmsResult& sms) {
-    rspInfo = info;
-    sendSmsResult = sms;
-    parent.notify();
-    return Void();
+                                            const SendSmsResult& sms) {
+  rspInfo = info;
+  sendSmsResult = sms;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::sendSMSExpectMoreResponse(
-        const RadioResponseInfo& info, const SendSmsResult& sms) {
-    rspInfo = info;
-    sendSmsResult = sms;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const SendSmsResult& sms) {
+  rspInfo = info;
+  sendSmsResult = sms;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setupDataCallResponse(
-        const RadioResponseInfo& info, const SetupDataCallResult& /*dcResponse*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const SetupDataCallResult& /*dcResponse*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::iccIOForAppResponse(
-        const RadioResponseInfo& info, const IccIoResult& iccIo) {
-    rspInfo = info;
-    this->iccIoResult = iccIo;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::iccIOForAppResponse(const RadioResponseInfo& info,
+                                                const IccIoResult& iccIo) {
+  rspInfo = info;
+  this->iccIoResult = iccIo;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::sendUssdResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::cancelPendingUssdResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::cancelPendingUssdResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::getClirResponse(const RadioResponseInfo& info, int32_t /*n*/,
-        int32_t /*m*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::getClirResponse(const RadioResponseInfo& info,
+                                            int32_t /*n*/, int32_t /*m*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setClirResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getCallForwardStatusResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_vec<CallForwardInfo>&
-        /*callForwardInfos*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<CallForwardInfo>&
+    /*callForwardInfos*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setCallForwardResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setCallForwardResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getCallWaitingResponse(
-        const RadioResponseInfo& info, bool /*enable*/, int32_t /*serviceClass*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, bool /*enable*/, int32_t /*serviceClass*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setCallWaitingResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setCallWaitingResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::acknowledgeLastIncomingGsmSmsResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::acknowledgeLastIncomingGsmSmsResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::acceptCallResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::deactivateDataCallResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::deactivateDataCallResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::getFacilityLockForAppResponse(const RadioResponseInfo& info,
-        int32_t /*response*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::getFacilityLockForAppResponse(
+    const RadioResponseInfo& info, int32_t /*response*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setFacilityLockForAppResponse(const RadioResponseInfo& info,
-        int32_t /*retry*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setFacilityLockForAppResponse(
+    const RadioResponseInfo& info, int32_t /*retry*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setBarringPasswordResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setBarringPasswordResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getNetworkSelectionModeResponse(
-        const RadioResponseInfo& info, bool /*manual*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, bool /*manual*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setNetworkSelectionModeAutomaticResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setNetworkSelectionModeManualResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getAvailableNetworksResponse(
-        const RadioResponseInfo& info,
-        const ::android::hardware::hidl_vec<OperatorInfo>& /*networkInfos*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<OperatorInfo>& /*networkInfos*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::startDtmfResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::startDtmfResponse(const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::stopDtmfResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::stopDtmfResponse(const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getBasebandVersionResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*version*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_string& /*version*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::separateConnectionResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::separateConnectionResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setMuteResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::getMuteResponse(const RadioResponseInfo& info, bool /*enable*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::getMuteResponse(const RadioResponseInfo& info,
+                                            bool /*enable*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getClipResponse(const RadioResponseInfo& info,
-        ClipStatus /*status*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+                                            ClipStatus /*status*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getDataCallListResponse(
-        const RadioResponseInfo& info,
-        const ::android::hardware::hidl_vec<SetupDataCallResult>& /*dcResponse*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<SetupDataCallResult>& /*dcResponse*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::sendOemRilRequestRawResponse(
-        const RadioResponseInfo& /*info*/,
-        const ::android::hardware::hidl_vec<uint8_t>& /*data*/) {
-    return Void();
+    const RadioResponseInfo& /*info*/,
+    const ::android::hardware::hidl_vec<uint8_t>& /*data*/) {
+  return Void();
 }
 
 Return<void> RadioResponse::sendOemRilRequestStringsResponse(
-        const RadioResponseInfo& /*info*/,
-        const ::android::hardware::hidl_vec<::android::hardware::hidl_string>& /*data*/) {
-    return Void();
+    const RadioResponseInfo& /*info*/,
+    const ::android::hardware::hidl_vec<
+        ::android::hardware::hidl_string>& /*data*/) {
+  return Void();
 }
 
 Return<void> RadioResponse::setSuppServiceNotificationsResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::writeSmsToSimResponse(
-        const RadioResponseInfo& info, int32_t index) {
-    rspInfo = info;
-    writeSmsToSimIndex = index;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::writeSmsToSimResponse(const RadioResponseInfo& info,
+                                                  int32_t index) {
+  rspInfo = info;
+  writeSmsToSimIndex = index;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::deleteSmsOnSimResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setBandModeResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getAvailableBandModesResponse(
-        const RadioResponseInfo& info,
-        const ::android::hardware::hidl_vec<RadioBandMode>& /*bandModes*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<RadioBandMode>& /*bandModes*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::sendEnvelopeResponse(const RadioResponseInfo& info,
-        const ::android::hardware::hidl_string& /*commandResponse*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::sendEnvelopeResponse(
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_string& /*commandResponse*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::sendTerminalResponseToSimResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::sendTerminalResponseToSimResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::handleStkCallSetupRequestFromSimResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::explicitCallTransferResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::explicitCallTransferResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setPreferredNetworkTypeResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setPreferredNetworkTypeResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getPreferredNetworkTypeResponse(
-        const RadioResponseInfo& info, PreferredNetworkType /*nw_type*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, PreferredNetworkType /*nw_type*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getNeighboringCidsResponse(
-        const RadioResponseInfo& info,
-        const ::android::hardware::hidl_vec<NeighboringCell>& /*cells*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<NeighboringCell>& /*cells*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setLocationUpdatesResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setCdmaSubscriptionSourceResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setCdmaSubscriptionSourceResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setCdmaRoamingPreferenceResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setCdmaRoamingPreferenceResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getCdmaRoamingPreferenceResponse(
-        const RadioResponseInfo& info, CdmaRoamingType /*type*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, CdmaRoamingType /*type*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setTTYModeResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getTTYModeResponse(const RadioResponseInfo& info,
-        TtyMode /*mode*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+                                               TtyMode /*mode*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setPreferredVoicePrivacyResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setPreferredVoicePrivacyResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getPreferredVoicePrivacyResponse(
-        const RadioResponseInfo& info, bool /*enable*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, bool /*enable*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::sendCDMAFeatureCodeResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::sendCDMAFeatureCodeResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::sendBurstDtmfResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::sendBurstDtmfResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::sendCdmaSmsResponse(
-        const RadioResponseInfo& info, const SendSmsResult& sms) {
-    rspInfo = info;
-    sendSmsResult = sms;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::sendCdmaSmsResponse(const RadioResponseInfo& info,
+                                                const SendSmsResult& sms) {
+  rspInfo = info;
+  sendSmsResult = sms;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::acknowledgeLastIncomingCdmaSmsResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getGsmBroadcastConfigResponse(
-        const RadioResponseInfo& info,
-        const ::android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>& /*configs*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<
+        GsmBroadcastSmsConfigInfo>& /*configs*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setGsmBroadcastConfigResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setGsmBroadcastConfigResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setGsmBroadcastActivationResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setGsmBroadcastActivationResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getCdmaBroadcastConfigResponse(
-        const RadioResponseInfo& info,
-        const ::android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>& /*configs*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<
+        CdmaBroadcastSmsConfigInfo>& /*configs*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setCdmaBroadcastConfigResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setCdmaBroadcastConfigResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setCdmaBroadcastActivationResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setCdmaBroadcastActivationResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getCDMASubscriptionResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*mdn*/,
-        const ::android::hardware::hidl_string& /*hSid*/,
-        const ::android::hardware::hidl_string& /*hNid*/,
-        const ::android::hardware::hidl_string& /*min*/,
-        const ::android::hardware::hidl_string& /*prl*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_string& /*mdn*/,
+    const ::android::hardware::hidl_string& /*hSid*/,
+    const ::android::hardware::hidl_string& /*hNid*/,
+    const ::android::hardware::hidl_string& /*min*/,
+    const ::android::hardware::hidl_string& /*prl*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::writeSmsToRuimResponse(
-        const RadioResponseInfo& info, uint32_t index) {
-    rspInfo = info;
-    writeSmsToRuimIndex = index;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, uint32_t index) {
+  rspInfo = info;
+  writeSmsToRuimIndex = index;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::deleteSmsOnRuimResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getDeviceIdentityResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*imei*/,
-        const ::android::hardware::hidl_string& /*imeisv*/,
-        const ::android::hardware::hidl_string& /*esn*/,
-        const ::android::hardware::hidl_string& /*meid*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_string& /*imei*/,
+    const ::android::hardware::hidl_string& /*imeisv*/,
+    const ::android::hardware::hidl_string& /*esn*/,
+    const ::android::hardware::hidl_string& /*meid*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::exitEmergencyCallbackModeResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::exitEmergencyCallbackModeResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getSmscAddressResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_string& smsc) {
-    rspInfo = info;
-    smscAddress = smsc;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_string& smsc) {
+  rspInfo = info;
+  smscAddress = smsc;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setSmscAddressResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setSmscAddressResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::reportSmsMemoryStatusResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::reportSmsMemoryStatusResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::reportStkServiceIsRunningResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::reportStkServiceIsRunningResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getCdmaSubscriptionSourceResponse(
-        const RadioResponseInfo& info, CdmaSubscriptionSource /*source*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, CdmaSubscriptionSource /*source*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::requestIsimAuthenticationResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*response*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_string& /*response*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::acknowledgeIncomingGsmSmsWithPduResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::sendEnvelopeWithStatusResponse(
-        const RadioResponseInfo& info, const IccIoResult& /*iccIo*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const IccIoResult& /*iccIo*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getVoiceRadioTechnologyResponse(
-        const RadioResponseInfo& info, RadioTechnology /*rat*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, RadioTechnology /*rat*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getCellInfoListResponse(
-        const RadioResponseInfo& info,
-        const ::android::hardware::hidl_vec<CellInfo>& /*cellInfo*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<CellInfo>& /*cellInfo*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setCellInfoListRateResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setCellInfoListRateResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setInitialAttachApnResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setInitialAttachApnResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getImsRegistrationStateResponse(
-        const RadioResponseInfo& info, bool /*isRegistered*/,
-        RadioTechnologyFamily /*ratFamily*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, bool /*isRegistered*/,
+    RadioTechnologyFamily /*ratFamily*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::sendImsSmsResponse(
-        const RadioResponseInfo& info, const SendSmsResult& sms) {
-    rspInfo = info;
-    sendSmsResult = sms;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::sendImsSmsResponse(const RadioResponseInfo& info,
+                                               const SendSmsResult& sms) {
+  rspInfo = info;
+  sendSmsResult = sms;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::iccTransmitApduBasicChannelResponse(
-        const RadioResponseInfo& info, const IccIoResult& result) {
-    rspInfo = info;
-    this->iccIoResult = result;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const IccIoResult& result) {
+  rspInfo = info;
+  this->iccIoResult = result;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::iccOpenLogicalChannelResponse(
-        const RadioResponseInfo& info, int32_t channelId,
-        const ::android::hardware::hidl_vec<int8_t>& /*selectResponse*/) {
-    rspInfo = info;
-    this->channelId = channelId;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, int32_t channelId,
+    const ::android::hardware::hidl_vec<int8_t>& /*selectResponse*/) {
+  rspInfo = info;
+  this->channelId = channelId;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::iccCloseLogicalChannelResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::iccCloseLogicalChannelResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::iccTransmitApduLogicalChannelResponse(
-        const RadioResponseInfo& info, const IccIoResult& result) {
-    rspInfo = info;
-    this->iccIoResult = result;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const IccIoResult& result) {
+  rspInfo = info;
+  this->iccIoResult = result;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::nvReadItemResponse(
-        const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*result*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_string& /*result*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::nvWriteItemResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::nvWriteCdmaPrlResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::nvWriteCdmaPrlResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::nvResetConfigResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::nvResetConfigResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setUiccSubscriptionResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setUiccSubscriptionResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setDataAllowedResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setDataAllowedResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getHardwareConfigResponse(
-        const RadioResponseInfo& info,
-        const ::android::hardware::hidl_vec<HardwareConfig>& /*config*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info,
+    const ::android::hardware::hidl_vec<HardwareConfig>& /*config*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::requestIccSimAuthenticationResponse(
-        const RadioResponseInfo& info, const IccIoResult& result) {
-    rspInfo = info;
-    this->iccIoResult = result;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const IccIoResult& result) {
+  rspInfo = info;
+  this->iccIoResult = result;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::setDataProfileResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::setDataProfileResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
-Return<void> RadioResponse::requestShutdownResponse(const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+Return<void> RadioResponse::requestShutdownResponse(
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getRadioCapabilityResponse(
-        const RadioResponseInfo& info, const RadioCapability& /*rc*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const RadioCapability& /*rc*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setRadioCapabilityResponse(
-        const RadioResponseInfo& info, const RadioCapability& /*rc*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const RadioCapability& /*rc*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::startLceServiceResponse(
-        const RadioResponseInfo& info, const LceStatusInfo& /*statusInfo*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const LceStatusInfo& /*statusInfo*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::stopLceServiceResponse(
-        const RadioResponseInfo& info, const LceStatusInfo& /*statusInfo*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const LceStatusInfo& /*statusInfo*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::pullLceDataResponse(
-        const RadioResponseInfo& info, const LceDataInfo& /*lceInfo*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const LceDataInfo& /*lceInfo*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getModemActivityInfoResponse(
-        const RadioResponseInfo& info, const ActivityStatsInfo& /*activityInfo*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, const ActivityStatsInfo& /*activityInfo*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setAllowedCarriersResponse(
-        const RadioResponseInfo& info, int32_t /*numAllowed*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, int32_t /*numAllowed*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::getAllowedCarriersResponse(
-        const RadioResponseInfo& info, bool /*allAllowed*/,
-        const CarrierRestrictions& /*carriers*/) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info, bool /*allAllowed*/,
+    const CarrierRestrictions& /*carriers*/) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::sendDeviceStateResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setIndicationFilterResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::setSimCardPowerResponse(
-        const RadioResponseInfo& info) {
-    rspInfo = info;
-    parent.notify();
-    return Void();
+    const RadioResponseInfo& info) {
+  rspInfo = info;
+  parent.notify();
+  return Void();
 }
 
 Return<void> RadioResponse::acknowledgeRequest(int32_t /*serial*/) {
-    return Void();
+  return Void();
 }
diff --git a/radio/1.0/vts/functional/sap_callback.cpp b/radio/1.0/vts/functional/sap_callback.cpp
new file mode 100644
index 0000000..3a06ecd
--- /dev/null
+++ b/radio/1.0/vts/functional/sap_callback.cpp
@@ -0,0 +1,95 @@
+/*
+ * 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 <sap_hidl_hal_utils.h>
+
+SapCallback::SapCallback(SapHidlTest& parent) : parent(parent) {}
+
+Return<void> SapCallback::connectResponse(int32_t token,
+                                          SapConnectRsp /*sapConnectRsp*/,
+                                          int32_t /*maxMsgSize*/) {
+  sapResponseToken = token;
+  parent.notify();
+  return Void();
+}
+
+Return<void> SapCallback::disconnectResponse(int32_t token) {
+  sapResponseToken = token;
+  parent.notify();
+  return Void();
+}
+
+Return<void> SapCallback::disconnectIndication(
+    int32_t /*token*/, SapDisconnectType /*disconnectType*/) {
+  return Void();
+}
+
+Return<void> SapCallback::apduResponse(
+    int32_t token, SapResultCode resultCode,
+    const ::android::hardware::hidl_vec<uint8_t>& /*apduRsp*/) {
+  sapResponseToken = token;
+  sapResultCode = resultCode;
+  parent.notify();
+  return Void();
+}
+
+Return<void> SapCallback::transferAtrResponse(
+    int32_t token, SapResultCode resultCode,
+    const ::android::hardware::hidl_vec<uint8_t>& /*atr*/) {
+  sapResponseToken = token;
+  sapResultCode = resultCode;
+  parent.notify();
+  return Void();
+}
+
+Return<void> SapCallback::powerResponse(int32_t token,
+                                        SapResultCode resultCode) {
+  sapResponseToken = token;
+  sapResultCode = resultCode;
+  parent.notify();
+  return Void();
+}
+
+Return<void> SapCallback::resetSimResponse(int32_t token,
+                                           SapResultCode resultCode) {
+  sapResponseToken = token;
+  sapResultCode = resultCode;
+  parent.notify();
+  return Void();
+}
+
+Return<void> SapCallback::statusIndication(int32_t /*token*/,
+                                           SapStatus /*status*/) {
+  return Void();
+}
+
+Return<void> SapCallback::transferCardReaderStatusResponse(
+    int32_t token, SapResultCode resultCode, int32_t /*cardReaderStatus*/) {
+  sapResponseToken = token;
+  sapResultCode = resultCode;
+  parent.notify();
+  return Void();
+}
+
+Return<void> SapCallback::errorResponse(int32_t /*token*/) { return Void(); }
+
+Return<void> SapCallback::transferProtocolResponse(int32_t token,
+                                                   SapResultCode resultCode) {
+  sapResponseToken = token;
+  sapResultCode = resultCode;
+  parent.notify();
+  return Void();
+}
diff --git a/radio/1.0/vts/functional/sap_hidl_hal_api.cpp b/radio/1.0/vts/functional/sap_hidl_hal_api.cpp
new file mode 100644
index 0000000..682230c
--- /dev/null
+++ b/radio/1.0/vts/functional/sap_hidl_hal_api.cpp
@@ -0,0 +1,131 @@
+/*
+ * 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 <sap_hidl_hal_utils.h>
+
+/*
+ * Test ISap.connectReq() for the response returned.
+ */
+TEST_F(SapHidlTest, connectReq) {
+  int32_t token = 0;
+  int32_t maxMsgSize = 100;
+
+  sap->connectReq(++token, maxMsgSize);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(sapCb->sapResponseToken, token);
+}
+
+/*
+ * Test IRadio.disconnectReq() for the response returned
+ */
+TEST_F(SapHidlTest, disconnectReq) {
+  int32_t token = 0;
+
+  sap->disconnectReq(++token);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(sapCb->sapResponseToken, token);
+}
+
+/*
+ * Test IRadio.apduReq() for the response returned.
+ */
+TEST_F(SapHidlTest, apduReq) {
+  int32_t token = 0;
+  SapApduType sapApduType = SapApduType::APDU;
+  android::hardware::hidl_vec<uint8_t> command = {};
+
+  sap->apduReq(++token, sapApduType, command);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(sapCb->sapResponseToken, token);
+
+  ASSERT_TRUE(SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
+              SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
+              SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
+}
+
+/*
+ * Test IRadio.transferAtrReq() for the response returned.
+ */
+TEST_F(SapHidlTest, transferAtrReq) {
+  int32_t token = 0;
+
+  sap->transferAtrReq(++token);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(sapCb->sapResponseToken, token);
+
+  ASSERT_TRUE(SapResultCode::DATA_NOT_AVAILABLE == sapCb->sapResultCode ||
+              SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
+              SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
+}
+
+/*
+ * Test IRadio.powerReq() for the response returned.
+ */
+TEST_F(SapHidlTest, powerReq) {
+  int32_t token = 0;
+  bool state = true;
+
+  sap->powerReq(++token, state);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(sapCb->sapResponseToken, token);
+
+  ASSERT_TRUE(SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
+              SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
+              SapResultCode::CARD_REMOVED == sapCb->sapResultCode ||
+              SapResultCode::CARD_ALREADY_POWERED_ON == sapCb->sapResultCode);
+}
+
+/*
+ * Test IRadio.resetSimReq() for the response returned.
+ */
+TEST_F(SapHidlTest, resetSimReq) {
+  int32_t token = 0;
+
+  sap->resetSimReq(++token);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(sapCb->sapResponseToken, token);
+
+  ASSERT_TRUE(SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
+              SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
+              SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
+}
+
+/*
+ * Test IRadio.transferCardReaderStatusReq() for the response returned.
+ */
+TEST_F(SapHidlTest, transferCardReaderStatusReq) {
+  int32_t token = 0;
+
+  sap->transferCardReaderStatusReq(++token);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(sapCb->sapResponseToken, token);
+
+  EXPECT_EQ(SapResultCode::DATA_NOT_AVAILABLE, sapCb->sapResultCode);
+}
+
+/*
+ * Test IRadio.setTransferProtocolReq() for the response returned.
+ */
+TEST_F(SapHidlTest, setTransferProtocolReq) {
+  int32_t token = 0;
+  SapTransferProtocol sapTransferProtocol = SapTransferProtocol::T0;
+
+  sap->setTransferProtocolReq(++token, sapTransferProtocol);
+  EXPECT_EQ(std::cv_status::no_timeout, wait());
+  EXPECT_EQ(sapCb->sapResponseToken, token);
+
+  EXPECT_EQ(SapResultCode::NOT_SUPPORTED, sapCb->sapResultCode);
+}
diff --git a/radio/1.0/vts/functional/sap_hidl_hal_test.cpp b/radio/1.0/vts/functional/sap_hidl_hal_test.cpp
new file mode 100644
index 0000000..88274cd
--- /dev/null
+++ b/radio/1.0/vts/functional/sap_hidl_hal_test.cpp
@@ -0,0 +1,53 @@
+/*
+ * 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 <sap_hidl_hal_utils.h>
+
+void SapHidlTest::SetUp() {
+  sap = ::testing::VtsHalHidlTargetTestBase::getService<ISap>(
+      hidl_string("sap_uim_socket1"));
+  ASSERT_NE(sap, nullptr);
+
+  sapCb = new SapCallback(*this);
+  ASSERT_NE(sapCb, nullptr);
+
+  count = 0;
+
+  sap->setCallback(sapCb);
+}
+
+void SapHidlTest::TearDown() {}
+
+void SapHidlTest::notify() {
+  std::unique_lock<std::mutex> lock(mtx);
+  count++;
+  cv.notify_one();
+}
+
+std::cv_status SapHidlTest::wait() {
+  std::unique_lock<std::mutex> lock(mtx);
+
+  std::cv_status status = std::cv_status::no_timeout;
+  auto now = std::chrono::system_clock::now();
+  while (count == 0) {
+    status = cv.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
+    if (status == std::cv_status::timeout) {
+      return status;
+    }
+  }
+  count--;
+  return status;
+}
diff --git a/radio/1.0/vts/functional/sap_hidl_hal_utils.h b/radio/1.0/vts/functional/sap_hidl_hal_utils.h
new file mode 100644
index 0000000..2ee3c96
--- /dev/null
+++ b/radio/1.0/vts/functional/sap_hidl_hal_utils.h
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <android-base/logging.h>
+
+#include <VtsHalHidlTargetTestBase.h>
+#include <chrono>
+#include <condition_variable>
+#include <mutex>
+
+#include <android/hardware/radio/1.0/ISap.h>
+#include <android/hardware/radio/1.0/ISapCallback.h>
+#include <android/hardware/radio/1.0/types.h>
+
+using namespace ::android::hardware::radio::V1_0;
+
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+#define TIMEOUT_PERIOD 40
+
+class SapHidlTest;
+
+/* Callback class for sap response */
+class SapCallback : public ISapCallback {
+ private:
+  SapHidlTest& parent;
+
+ public:
+  SapResultCode sapResultCode;
+  int32_t sapResponseToken;
+
+  SapCallback(SapHidlTest& parent);
+
+  virtual ~SapCallback() = default;
+
+  Return<void> connectResponse(int32_t token, SapConnectRsp sapConnectRsp,
+                               int32_t maxMsgSize);
+
+  Return<void> disconnectResponse(int32_t token);
+
+  Return<void> disconnectIndication(int32_t token,
+                                    SapDisconnectType disconnectType);
+
+  Return<void> apduResponse(
+      int32_t token, SapResultCode resultCode,
+      const ::android::hardware::hidl_vec<uint8_t>& apduRsp);
+
+  Return<void> transferAtrResponse(
+      int32_t token, SapResultCode resultCode,
+      const ::android::hardware::hidl_vec<uint8_t>& atr);
+
+  Return<void> powerResponse(int32_t token, SapResultCode resultCode);
+
+  Return<void> resetSimResponse(int32_t token, SapResultCode resultCode);
+
+  Return<void> statusIndication(int32_t token, SapStatus status);
+
+  Return<void> transferCardReaderStatusResponse(int32_t token,
+                                                SapResultCode resultCode,
+                                                int32_t cardReaderStatus);
+
+  Return<void> errorResponse(int32_t token);
+
+  Return<void> transferProtocolResponse(int32_t token,
+                                        SapResultCode resultCode);
+};
+
+// The main test class for Sap HIDL.
+class SapHidlTest : public ::testing::VtsHalHidlTargetTestBase {
+ private:
+  std::mutex mtx;
+  std::condition_variable cv;
+  int count;
+
+ public:
+  virtual void SetUp() override;
+
+  virtual void TearDown() override;
+
+  /* Used as a mechanism to inform the test about data/event callback */
+  void notify();
+
+  /* Test code calls this function to wait for response */
+  std::cv_status wait();
+
+  /* Sap service */
+  sp<ISap> sap;
+
+  /* Sap Callback object */
+  sp<SapCallback> sapCb;
+};
+
+// A class for test environment setup
+class SapHidlEnvironment : public ::testing::Environment {
+ public:
+  virtual void SetUp() {}
+  virtual void TearDown() {}
+};
diff --git a/tests/Android.bp b/tests/Android.bp
index 31dc75e..6f99a36 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -9,6 +9,8 @@
     "foo/1.0",
     "foo/1.0/default",
     "foo/1.0/default/lib",
+    "hash/1.0",
+    "hash/1.0/default",
     "inheritance/1.0",
     "inheritance/1.0/default",
     "libhwbinder/1.0",
diff --git a/tests/hash/1.0/Android.bp b/tests/hash/1.0/Android.bp
new file mode 100644
index 0000000..c217e5c
--- /dev/null
+++ b/tests/hash/1.0/Android.bp
@@ -0,0 +1,59 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.tests.hash@1.0_hal",
+    srcs: [
+        "IHash.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.hash@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.hash@1.0",
+    srcs: [
+        ":android.hardware.tests.hash@1.0_hal",
+    ],
+    out: [
+        "android/hardware/tests/hash/1.0/HashAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.tests.hash@1.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.hash@1.0",
+    srcs: [
+        ":android.hardware.tests.hash@1.0_hal",
+    ],
+    out: [
+        "android/hardware/tests/hash/1.0/IHash.h",
+        "android/hardware/tests/hash/1.0/IHwHash.h",
+        "android/hardware/tests/hash/1.0/BnHwHash.h",
+        "android/hardware/tests/hash/1.0/BpHwHash.h",
+        "android/hardware/tests/hash/1.0/BsHash.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.tests.hash@1.0",
+    generated_sources: ["android.hardware.tests.hash@1.0_genc++"],
+    generated_headers: ["android.hardware.tests.hash@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.tests.hash@1.0_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/tests/hash/1.0/Android.mk b/tests/hash/1.0/Android.mk
new file mode 100644
index 0000000..15428b4
--- /dev/null
+++ b/tests/hash/1.0/Android.mk
@@ -0,0 +1,76 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.hash@1.0-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java \
+
+
+#
+# Build IHash.hal
+#
+GEN := $(intermediates)/android/hardware/tests/hash/V1_0/IHash.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IHash.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.hash@1.0::IHash
+
+$(GEN): $(LOCAL_PATH)/IHash.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.tests.hash@1.0-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java-static \
+
+
+#
+# Build IHash.hal
+#
+GEN := $(intermediates)/android/hardware/tests/hash/V1_0/IHash.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IHash.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.hash@1.0::IHash
+
+$(GEN): $(LOCAL_PATH)/IHash.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/hash/1.0/IHash.hal b/tests/hash/1.0/IHash.hal
new file mode 100644
index 0000000..ba48384
--- /dev/null
+++ b/tests/hash/1.0/IHash.hal
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.tests.hash@1.0;
+
+/**
+ * Test interface for hashing HAL files.
+ * This file is FREEZED to ensure its hash doesn't change.
+ */
+interface IHash {
+    /**
+     * Dummy.
+     */
+    dummy();
+    /**
+     * Dummy.
+     */
+    functions();
+};
diff --git a/tests/hash/1.0/default/Android.bp b/tests/hash/1.0/default/Android.bp
new file mode 100644
index 0000000..e798a66
--- /dev/null
+++ b/tests/hash/1.0/default/Android.bp
@@ -0,0 +1,15 @@
+cc_library_shared {
+    name: "android.hardware.tests.hash@1.0-impl",
+    relative_install_path: "hw",
+    proprietary: true,
+    srcs: [
+        "Hash.cpp",
+    ],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hardware.tests.hash@1.0",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/tests/hash/1.0/default/Hash.cpp b/tests/hash/1.0/default/Hash.cpp
new file mode 100644
index 0000000..caed721
--- /dev/null
+++ b/tests/hash/1.0/default/Hash.cpp
@@ -0,0 +1,30 @@
+#include "Hash.h"
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace hash {
+namespace V1_0 {
+namespace implementation {
+
+// Methods from ::android::hardware::tests::hash::V1_0::IHash follow.
+Return<void> Hash::dummy() {
+    return Void();
+}
+
+Return<void> Hash::functions() {
+    return Void();
+}
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+IHash* HIDL_FETCH_IHash(const char* /* name */) {
+    return new Hash();
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace hash
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
diff --git a/tests/hash/1.0/default/Hash.h b/tests/hash/1.0/default/Hash.h
new file mode 100644
index 0000000..dd1678f
--- /dev/null
+++ b/tests/hash/1.0/default/Hash.h
@@ -0,0 +1,43 @@
+#ifndef ANDROID_HARDWARE_TESTS_HASH_V1_0_HASH_H
+#define ANDROID_HARDWARE_TESTS_HASH_V1_0_HASH_H
+
+#include <android/hardware/tests/hash/1.0/IHash.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace hash {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::tests::hash::V1_0::IHash;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct Hash : public IHash {
+    // Methods from ::android::hardware::tests::hash::V1_0::IHash follow.
+    Return<void> dummy() override;
+    Return<void> functions() override;
+
+    // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+extern "C" IHash* HIDL_FETCH_IHash(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace hash
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_TESTS_HASH_V1_0_HASH_H
diff --git a/wifi/supplicant/1.0/vts/Android.mk b/wifi/supplicant/1.0/vts/Android.mk
new file mode 100644
index 0000000..6361f9b
--- /dev/null
+++ b/wifi/supplicant/1.0/vts/Android.mk
@@ -0,0 +1,2 @@
+LOCAL_PATH := $(call my-dir)
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp
index 1fcfc8c..df4bfa9 100644
--- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp
+++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp
@@ -136,14 +136,14 @@
 };
 
 void stopWifiFramework() {
-    ASSERT_EQ(std::system("svc wifi disable"), 0);
+    ASSERT_EQ(std::system("stop"), 0);
     // TODO: Use some other mechanism to wait for the framework to
     // finish disabling.
     sleep(5);
 }
 
 void startWifiFramework() {
-    ASSERT_EQ(std::system("svc wifi enable"), 0);
+    ASSERT_EQ(std::system("start"), 0);
     // These tests don't care whether the framework
     // finished enabling or not.
 }
diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_sta_iface_hidl_test.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_sta_iface_hidl_test.cpp
index c2a58b6..5abf4e0 100644
--- a/wifi/supplicant/1.0/vts/functional/supplicant_sta_iface_hidl_test.cpp
+++ b/wifi/supplicant/1.0/vts/functional/supplicant_sta_iface_hidl_test.cpp
@@ -104,11 +104,13 @@
     }
     Return<void> onDisconnected(const hidl_array<uint8_t, 6>& /* bssid */,
                                 bool /* locallyGenerated */,
-                                uint32_t /* reasonCode */) override {
+                                ISupplicantStaIfaceCallback::ReasonCode
+                                /* reasonCode */) override {
         return Void();
     }
     Return<void> onAssociationRejected(
-        const hidl_array<uint8_t, 6>& /* bssid */, uint32_t /* statusCode */,
+        const hidl_array<uint8_t, 6>& /* bssid */,
+        ISupplicantStaIfaceCallback::StatusCode /* statusCode */,
         bool /*timedOut */) override {
         return Void();
     }
@@ -116,6 +118,11 @@
         const hidl_array<uint8_t, 6>& /* bssid */) override {
         return Void();
     }
+    Return<void> onBssidChanged(
+        ISupplicantStaIfaceCallback::BssidChangeReason /* reason */,
+        const hidl_array<uint8_t, 6>& /* bssid */) override {
+        return Void();
+    }
     Return<void> onEapFailure() override { return Void(); }
     Return<void> onWpsEventSuccess() override { return Void(); }
     Return<void> onWpsEventFail(