Merge "graphics: use FIFO scheduler in IComposer"
diff --git a/audio/2.0/Android.mk b/audio/2.0/Android.mk
index f8767ec..e989364 100644
--- a/audio/2.0/Android.mk
+++ b/audio/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.audio@2.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/audio/2.0/IStreamIn.hal b/audio/2.0/IStreamIn.hal
index e34c95f..6f1f9df 100644
--- a/audio/2.0/IStreamIn.hal
+++ b/audio/2.0/IStreamIn.hal
@@ -91,7 +91,11 @@
      *     to the client;
      *  -- status queue is used for reporting operation status
      *     (e.g. amount of bytes actually read or error code).
-     * The driver operates on a dedicated thread.
+     *
+     * The driver operates on a dedicated thread. The client must ensure that
+     * the thread is given an appropriate priority and assigned to correct
+     * scheduler and cgroup. For this purpose, the method returns identifiers
+     * of the driver thread.
      *
      * @param frameSize the size of a single frame, in bytes.
      * @param framesCount the number of frames in a buffer.
@@ -105,15 +109,15 @@
      *                specified at the stream opening.
      * @return statusMQ a message queue used for passing status from the driver
      *                  using ReadStatus structures.
+     * @return threadInfo identifiers of the driver's dedicated thread.
      */
-    prepareForReading(
-            uint32_t frameSize, uint32_t framesCount,
-            ThreadPriority threadPriority)
+    prepareForReading(uint32_t frameSize, uint32_t framesCount)
     generates (
             Result retval,
             fmq_sync<ReadParameters> commandMQ,
             fmq_sync<uint8_t> dataMQ,
-            fmq_sync<ReadStatus> statusMQ);
+            fmq_sync<ReadStatus> statusMQ,
+            ThreadInfo threadInfo);
 
     /*
      * Return the amount of input frames lost in the audio driver since the last
diff --git a/audio/2.0/IStreamOut.hal b/audio/2.0/IStreamOut.hal
index 2ec080d..9ee32c5 100644
--- a/audio/2.0/IStreamOut.hal
+++ b/audio/2.0/IStreamOut.hal
@@ -85,11 +85,14 @@
      *     to the driver;
      *  -- status queue is used for reporting operation status
      *     (e.g. amount of bytes actually written or error code).
-     * The driver operates on a dedicated thread.
+     *
+     * The driver operates on a dedicated thread. The client must ensure that
+     * the thread is given an appropriate priority and assigned to correct
+     * scheduler and cgroup. For this purpose, the method returns identifiers
+     * of the driver thread.
      *
      * @param frameSize the size of a single frame, in bytes.
      * @param framesCount the number of frames in a buffer.
-     * @param threadPriority priority of the driver thread.
      * @return retval OK if both message queues were created successfully.
      *                INVALID_STATE if the method was already called.
      *                INVALID_ARGUMENTS if there was a problem setting up
@@ -99,15 +102,15 @@
      *                specified at the stream opening.
      * @return statusMQ a message queue used for passing status from the driver
      *                  using WriteStatus structures.
+     * @return threadInfo identifiers of the driver's dedicated thread.
      */
-    prepareForWriting(
-            uint32_t frameSize, uint32_t framesCount,
-            ThreadPriority threadPriority)
+    prepareForWriting(uint32_t frameSize, uint32_t framesCount)
     generates (
             Result retval,
             fmq_sync<WriteCommand> commandMQ,
             fmq_sync<uint8_t> dataMQ,
-            fmq_sync<WriteStatus> statusMQ);
+            fmq_sync<WriteStatus> statusMQ,
+            ThreadInfo threadInfo);
 
     /*
      * Return the number of audio frames written by the audio DSP to DAC since
diff --git a/audio/2.0/default/Android.mk b/audio/2.0/default/Android.mk
index eeea92c..cbeda35 100644
--- a/audio/2.0/default/Android.mk
+++ b/audio/2.0/default/Android.mk
@@ -38,7 +38,6 @@
     libhidltransport \
     libhwbinder \
     liblog \
-    libmediautils \
     libutils \
     android.hardware.audio@2.0 \
     android.hardware.audio.common@2.0 \
diff --git a/audio/2.0/default/StreamIn.cpp b/audio/2.0/default/StreamIn.cpp
index 9c49170..75bf306 100644
--- a/audio/2.0/default/StreamIn.cpp
+++ b/audio/2.0/default/StreamIn.cpp
@@ -20,7 +20,6 @@
 
 #include <android/log.h>
 #include <hardware/audio.h>
-#include <mediautils/SchedulingPolicyService.h>
 #include <utils/Trace.h>
 
 #include "StreamIn.h"
@@ -33,6 +32,8 @@
 namespace V2_0 {
 namespace implementation {
 
+using ::android::hardware::audio::common::V2_0::ThreadInfo;
+
 namespace {
 
 class ReadThread : public Thread {
@@ -43,8 +44,7 @@
             StreamIn::CommandMQ* commandMQ,
             StreamIn::DataMQ* dataMQ,
             StreamIn::StatusMQ* statusMQ,
-            EventFlag* efGroup,
-            ThreadPriority threadPriority)
+            EventFlag* efGroup)
             : Thread(false /*canCallJava*/),
               mStop(stop),
               mStream(stream),
@@ -52,13 +52,10 @@
               mDataMQ(dataMQ),
               mStatusMQ(statusMQ),
               mEfGroup(efGroup),
-              mThreadPriority(threadPriority),
               mBuffer(new uint8_t[dataMQ->getQuantumCount()]) {
     }
     virtual ~ReadThread() {}
 
-    status_t readyToRun() override;
-
   private:
     std::atomic<bool>* mStop;
     audio_stream_in_t* mStream;
@@ -66,7 +63,6 @@
     StreamIn::DataMQ* mDataMQ;
     StreamIn::StatusMQ* mStatusMQ;
     EventFlag* mEfGroup;
-    ThreadPriority mThreadPriority;
     std::unique_ptr<uint8_t[]> mBuffer;
     IStreamIn::ReadParameters mParameters;
     IStreamIn::ReadStatus mStatus;
@@ -77,16 +73,6 @@
     void doRead();
 };
 
-status_t ReadThread::readyToRun() {
-    if (mThreadPriority != ThreadPriority::NORMAL) {
-        int err = requestPriority(
-                getpid(), getTid(), static_cast<int>(mThreadPriority), true /*asynchronous*/);
-        ALOGW_IF(err, "failed to set priority %d for pid %d tid %d; error %d",
-                static_cast<int>(mThreadPriority), getpid(), getTid(), err);
-    }
-    return OK;
-}
-
 void ReadThread::doRead() {
     size_t availableToWrite = mDataMQ->availableToWrite();
     size_t requestedToRead = mParameters.params.read;
@@ -313,14 +299,14 @@
 }
 
 Return<void> StreamIn::prepareForReading(
-        uint32_t frameSize, uint32_t framesCount, ThreadPriority threadPriority,
-        prepareForReading_cb _hidl_cb)  {
+        uint32_t frameSize, uint32_t framesCount, prepareForReading_cb _hidl_cb)  {
     status_t status;
+    ThreadInfo threadInfo = { 0, 0 };
     // Create message queues.
     if (mDataMQ) {
         ALOGE("the client attempts to call prepareForReading twice");
         _hidl_cb(Result::INVALID_STATE,
-                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
     std::unique_ptr<CommandMQ> tempCommandMQ(new CommandMQ(1));
@@ -332,7 +318,7 @@
         ALOGE_IF(!tempDataMQ->isValid(), "data MQ is invalid");
         ALOGE_IF(!tempStatusMQ->isValid(), "status MQ is invalid");
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
     // TODO: Remove event flag management once blocking MQ is implemented. b/33815422
@@ -340,7 +326,7 @@
     if (status != OK || !mEfGroup) {
         ALOGE("failed creating event flag for data MQ: %s", strerror(-status));
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
 
@@ -351,20 +337,23 @@
             tempCommandMQ.get(),
             tempDataMQ.get(),
             tempStatusMQ.get(),
-            mEfGroup,
-            threadPriority);
+            mEfGroup);
     status = mReadThread->run("reader", PRIORITY_URGENT_AUDIO);
     if (status != OK) {
         ALOGW("failed to start reader thread: %s", strerror(-status));
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
 
     mCommandMQ = std::move(tempCommandMQ);
     mDataMQ = std::move(tempDataMQ);
     mStatusMQ = std::move(tempStatusMQ);
-    _hidl_cb(Result::OK, *mCommandMQ->getDesc(), *mDataMQ->getDesc(), *mStatusMQ->getDesc());
+    threadInfo.pid = getpid();
+    threadInfo.tid = mReadThread->getTid();
+    _hidl_cb(Result::OK,
+            *mCommandMQ->getDesc(), *mDataMQ->getDesc(), *mStatusMQ->getDesc(),
+            threadInfo);
     return Void();
 }
 
diff --git a/audio/2.0/default/StreamIn.h b/audio/2.0/default/StreamIn.h
index 3566430..b867387 100644
--- a/audio/2.0/default/StreamIn.h
+++ b/audio/2.0/default/StreamIn.h
@@ -44,7 +44,6 @@
 using ::android::hardware::audio::V2_0::IStreamIn;
 using ::android::hardware::audio::V2_0::ParameterValue;
 using ::android::hardware::audio::V2_0::Result;
-using ::android::hardware::audio::V2_0::ThreadPriority;
 using ::android::hardware::Return;
 using ::android::hardware::Void;
 using ::android::hardware::hidl_vec;
@@ -89,8 +88,7 @@
     Return<void> getAudioSource(getAudioSource_cb _hidl_cb)  override;
     Return<Result> setGain(float gain)  override;
     Return<void> prepareForReading(
-            uint32_t frameSize, uint32_t framesCount, ThreadPriority threadPriority,
-            prepareForReading_cb _hidl_cb)  override;
+            uint32_t frameSize, uint32_t framesCount, prepareForReading_cb _hidl_cb)  override;
     Return<uint32_t> getInputFramesLost()  override;
     Return<void> getCapturePosition(getCapturePosition_cb _hidl_cb)  override;
     Return<Result> start() override;
diff --git a/audio/2.0/default/StreamOut.cpp b/audio/2.0/default/StreamOut.cpp
index 6e46db2..4cd25aa 100644
--- a/audio/2.0/default/StreamOut.cpp
+++ b/audio/2.0/default/StreamOut.cpp
@@ -20,7 +20,6 @@
 
 #include <android/log.h>
 #include <hardware/audio.h>
-#include <mediautils/SchedulingPolicyService.h>
 #include <utils/Trace.h>
 
 #include "StreamOut.h"
@@ -31,6 +30,8 @@
 namespace V2_0 {
 namespace implementation {
 
+using ::android::hardware::audio::common::V2_0::ThreadInfo;
+
 namespace {
 
 class WriteThread : public Thread {
@@ -41,8 +42,7 @@
             StreamOut::CommandMQ* commandMQ,
             StreamOut::DataMQ* dataMQ,
             StreamOut::StatusMQ* statusMQ,
-            EventFlag* efGroup,
-            ThreadPriority threadPriority)
+            EventFlag* efGroup)
             : Thread(false /*canCallJava*/),
               mStop(stop),
               mStream(stream),
@@ -50,13 +50,10 @@
               mDataMQ(dataMQ),
               mStatusMQ(statusMQ),
               mEfGroup(efGroup),
-              mThreadPriority(threadPriority),
               mBuffer(new uint8_t[dataMQ->getQuantumCount()]) {
     }
     virtual ~WriteThread() {}
 
-    status_t readyToRun() override;
-
   private:
     std::atomic<bool>* mStop;
     audio_stream_out_t* mStream;
@@ -64,7 +61,6 @@
     StreamOut::DataMQ* mDataMQ;
     StreamOut::StatusMQ* mStatusMQ;
     EventFlag* mEfGroup;
-    ThreadPriority mThreadPriority;
     std::unique_ptr<uint8_t[]> mBuffer;
     IStreamOut::WriteStatus mStatus;
 
@@ -75,16 +71,6 @@
     void doWrite();
 };
 
-status_t WriteThread::readyToRun() {
-    if (mThreadPriority != ThreadPriority::NORMAL) {
-        int err = requestPriority(
-                getpid(), getTid(), static_cast<int>(mThreadPriority), true /*asynchronous*/);
-        ALOGW_IF(err, "failed to set priority %d for pid %d tid %d; error %d",
-                static_cast<int>(mThreadPriority), getpid(), getTid(), err);
-    }
-    return OK;
-}
-
 void WriteThread::doWrite() {
     const size_t availToRead = mDataMQ->availableToRead();
     mStatus.retval = Result::OK;
@@ -297,14 +283,14 @@
 }
 
 Return<void> StreamOut::prepareForWriting(
-        uint32_t frameSize, uint32_t framesCount, ThreadPriority threadPriority,
-        prepareForWriting_cb _hidl_cb)  {
+        uint32_t frameSize, uint32_t framesCount, prepareForWriting_cb _hidl_cb)  {
     status_t status;
+    ThreadInfo threadInfo = { 0, 0 };
     // Create message queues.
     if (mDataMQ) {
         ALOGE("the client attempts to call prepareForWriting twice");
         _hidl_cb(Result::INVALID_STATE,
-                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
     std::unique_ptr<CommandMQ> tempCommandMQ(new CommandMQ(1));
@@ -316,7 +302,7 @@
         ALOGE_IF(!tempDataMQ->isValid(), "data MQ is invalid");
         ALOGE_IF(!tempStatusMQ->isValid(), "status MQ is invalid");
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
     // TODO: Remove event flag management once blocking MQ is implemented. b/33815422
@@ -324,7 +310,7 @@
     if (status != OK || !mEfGroup) {
         ALOGE("failed creating event flag for data MQ: %s", strerror(-status));
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
 
@@ -335,20 +321,23 @@
             tempCommandMQ.get(),
             tempDataMQ.get(),
             tempStatusMQ.get(),
-            mEfGroup,
-            threadPriority);
+            mEfGroup);
     status = mWriteThread->run("writer", PRIORITY_URGENT_AUDIO);
     if (status != OK) {
         ALOGW("failed to start writer thread: %s", strerror(-status));
         _hidl_cb(Result::INVALID_ARGUMENTS,
-                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor());
+                CommandMQ::Descriptor(), DataMQ::Descriptor(), StatusMQ::Descriptor(), threadInfo);
         return Void();
     }
 
     mCommandMQ = std::move(tempCommandMQ);
     mDataMQ = std::move(tempDataMQ);
     mStatusMQ = std::move(tempStatusMQ);
-    _hidl_cb(Result::OK, *mCommandMQ->getDesc(), *mDataMQ->getDesc(), *mStatusMQ->getDesc());
+    threadInfo.pid = getpid();
+    threadInfo.tid = mWriteThread->getTid();
+    _hidl_cb(Result::OK,
+            *mCommandMQ->getDesc(), *mDataMQ->getDesc(), *mStatusMQ->getDesc(),
+            threadInfo);
     return Void();
 }
 
diff --git a/audio/2.0/default/StreamOut.h b/audio/2.0/default/StreamOut.h
index 6616557..bbe64a1 100644
--- a/audio/2.0/default/StreamOut.h
+++ b/audio/2.0/default/StreamOut.h
@@ -45,7 +45,6 @@
 using ::android::hardware::audio::V2_0::IStreamOutCallback;
 using ::android::hardware::audio::V2_0::ParameterValue;
 using ::android::hardware::audio::V2_0::Result;
-using ::android::hardware::audio::V2_0::ThreadPriority;
 using ::android::hardware::audio::V2_0::TimeSpec;
 using ::android::hardware::Return;
 using ::android::hardware::Void;
@@ -91,8 +90,7 @@
     Return<uint32_t> getLatency()  override;
     Return<Result> setVolume(float left, float right)  override;
     Return<void> prepareForWriting(
-            uint32_t frameSize, uint32_t framesCount, ThreadPriority threadPriority,
-            prepareForWriting_cb _hidl_cb)  override;
+            uint32_t frameSize, uint32_t framesCount, prepareForWriting_cb _hidl_cb)  override;
     Return<void> getRenderPosition(getRenderPosition_cb _hidl_cb)  override;
     Return<void> getNextWriteTimestamp(getNextWriteTimestamp_cb _hidl_cb)  override;
     Return<Result> setCallback(const sp<IStreamOutCallback>& callback)  override;
diff --git a/audio/2.0/default/service.cpp b/audio/2.0/default/service.cpp
index 646d898..8b608c8 100644
--- a/audio/2.0/default/service.cpp
+++ b/audio/2.0/default/service.cpp
@@ -33,11 +33,20 @@
 using android::hardware::registerPassthroughServiceImplementation;
 using android::hardware::broadcastradio::V1_0::IBroadcastRadioFactory;
 
+using android::OK;
+
 int main(int /* argc */, char* /* argv */ []) {
     configureRpcThreadpool(16, true /*callerWillJoin*/);
-    registerPassthroughServiceImplementation<IDevicesFactory>("audio_devices_factory");
-    registerPassthroughServiceImplementation<IEffectsFactory>("audio_effects_factory");
-    registerPassthroughServiceImplementation<ISoundTriggerHw>("sound_trigger.primary");
-    registerPassthroughServiceImplementation<IBroadcastRadioFactory>("broadcastradio");
+    android::status_t status;
+    status = registerPassthroughServiceImplementation<IDevicesFactory>("audio_devices_factory");
+    LOG_ALWAYS_FATAL_IF(status != OK, "Error while registering audio service: %d", status);
+    status = registerPassthroughServiceImplementation<IEffectsFactory>("audio_effects_factory");
+    LOG_ALWAYS_FATAL_IF(status != OK, "Error while registering audio effects service: %d", status);
+    // Soundtrigger and FM radio might be not present.
+    status = registerPassthroughServiceImplementation<ISoundTriggerHw>("sound_trigger.primary");
+    ALOGE_IF(status != OK, "Error while registering soundtrigger service: %d", status);
+    status = registerPassthroughServiceImplementation<IBroadcastRadioFactory>("broadcastradio");
+    ALOGE_IF(status != OK, "Error while registering fm radio service: %d", status);
     joinRpcThreadpool();
+    return status;
 }
diff --git a/audio/2.0/types.hal b/audio/2.0/types.hal
index 8fc4314..8e9ff14 100644
--- a/audio/2.0/types.hal
+++ b/audio/2.0/types.hal
@@ -98,12 +98,3 @@
     NOT_EMPTY = 1 << 0,
     NOT_FULL = 1 << 1
 };
-
-/*
- * The priority of threads executing reads and writes of audio data.
- */
-enum ThreadPriority : int32_t {
-    NORMAL = 0,
-    FAST_CAPTURE = 3,
-    FAST_MIXER = 3
-};
diff --git a/audio/common/2.0/Android.mk b/audio/common/2.0/Android.mk
index 423fe35..7d62779 100644
--- a/audio/common/2.0/Android.mk
+++ b/audio/common/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.audio.common@2.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/audio/common/2.0/types.hal b/audio/common/2.0/types.hal
index 63d66db..ae7f545 100644
--- a/audio/common/2.0/types.hal
+++ b/audio/common/2.0/types.hal
@@ -933,3 +933,8 @@
         AudioPortSessionExt session;
     } ext;
 };
+
+struct ThreadInfo {
+    int64_t pid;
+    int64_t tid;
+};
diff --git a/audio/effect/2.0/Android.mk b/audio/effect/2.0/Android.mk
index 3383efd..d71255e 100644
--- a/audio/effect/2.0/Android.mk
+++ b/audio/effect/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.audio.effect@2.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/automotive/vehicle/2.0/Android.mk b/automotive/vehicle/2.0/Android.mk
index ca83918..c540027 100644
--- a/automotive/vehicle/2.0/Android.mk
+++ b/automotive/vehicle/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.automotive.vehicle@2.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -1189,7 +1189,7 @@
 LOCAL_MODULE := android.hardware.automotive.vehicle@2.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/automotive/vehicle/2.0/default/impl/DefaultConfig.h b/automotive/vehicle/2.0/default/impl/DefaultConfig.h
index 270bf8c..0c549b9 100644
--- a/automotive/vehicle/2.0/default/impl/DefaultConfig.h
+++ b/automotive/vehicle/2.0/default/impl/DefaultConfig.h
@@ -174,6 +174,18 @@
         .access = VehiclePropertyAccess::READ,
         .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
         .configArray = {0,0}
+    },
+
+    {
+        .prop = toInt(VehicleProperty::OBD2_FREEZE_FRAME_INFO),
+        .access = VehiclePropertyAccess::READ,
+        .changeMode = VehiclePropertyChangeMode::ON_CHANGE
+    },
+
+    {
+        .prop = toInt(VehicleProperty::OBD2_FREEZE_FRAME_CLEAR),
+        .access = VehiclePropertyAccess::WRITE,
+        .changeMode = VehiclePropertyChangeMode::ON_CHANGE
     }
 };
 
diff --git a/automotive/vehicle/2.0/default/impl/DefaultVehicleHal.cpp b/automotive/vehicle/2.0/default/impl/DefaultVehicleHal.cpp
index 88717a9..d3d77b6 100644
--- a/automotive/vehicle/2.0/default/impl/DefaultVehicleHal.cpp
+++ b/automotive/vehicle/2.0/default/impl/DefaultVehicleHal.cpp
@@ -15,9 +15,9 @@
  */
 
 #define LOG_TAG "DefaultVehicleHal"
+#include <android/log.h>
 
 #include <algorithm>
-#include <android/log.h>
 #include <netinet/in.h>
 #include <sys/socket.h>
 
@@ -181,87 +181,113 @@
     return nullptr;
 }
 
-void DefaultVehicleHal::initObd2LiveFrame(VehiclePropConfig& obd2LiveFramePropConfig) {
-    mObd2SensorStore.reset(new Obd2SensorStore(
-        obd2LiveFramePropConfig.configArray[0],
-        obd2LiveFramePropConfig.configArray[1]));
-    // precalculate OBD2 sensor values
-    mObd2SensorStore->setIntegerSensor(
+static std::unique_ptr<Obd2SensorStore> fillDefaultObd2Frame(
+        size_t numVendorIntegerSensors,
+        size_t numVendorFloatSensors) {
+    std::unique_ptr<Obd2SensorStore> sensorStore(new Obd2SensorStore(
+            numVendorIntegerSensors, numVendorFloatSensors));
+
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::FUEL_SYSTEM_STATUS,
         toInt(FuelSystemStatus::CLOSED_LOOP));
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::MALFUNCTION_INDICATOR_LIGHT_ON, 0);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::IGNITION_MONITORS_SUPPORTED,
         toInt(IgnitionMonitorKind::SPARK));
-    mObd2SensorStore->setIntegerSensor(Obd2IntegerSensorIndex::IGNITION_SPECIFIC_MONITORS,
+    sensorStore->setIntegerSensor(Obd2IntegerSensorIndex::IGNITION_SPECIFIC_MONITORS,
         CommonIgnitionMonitors::COMPONENTS_AVAILABLE |
         CommonIgnitionMonitors::MISFIRE_AVAILABLE |
         SparkIgnitionMonitors::AC_REFRIGERANT_AVAILABLE |
         SparkIgnitionMonitors::EVAPORATIVE_SYSTEM_AVAILABLE);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::INTAKE_AIR_TEMPERATURE, 35);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::COMMANDED_SECONDARY_AIR_STATUS,
         toInt(SecondaryAirStatus::FROM_OUTSIDE_OR_OFF));
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::NUM_OXYGEN_SENSORS_PRESENT, 1);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::RUNTIME_SINCE_ENGINE_START, 500);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON, 0);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::WARMUPS_SINCE_CODES_CLEARED, 51);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::DISTANCE_TRAVELED_SINCE_CODES_CLEARED, 365);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::ABSOLUTE_BAROMETRIC_PRESSURE, 30);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::CONTROL_MODULE_VOLTAGE, 12);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::AMBIENT_AIR_TEMPERATURE, 18);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::MAX_FUEL_AIR_EQUIVALENCE_RATIO, 1);
-    mObd2SensorStore->setIntegerSensor(
+    sensorStore->setIntegerSensor(
         Obd2IntegerSensorIndex::FUEL_TYPE, toInt(FuelType::GASOLINE));
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::CALCULATED_ENGINE_LOAD, 0.153);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::SHORT_TERM_FUEL_TRIM_BANK1, -0.16);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::LONG_TERM_FUEL_TRIM_BANK1, -0.16);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::SHORT_TERM_FUEL_TRIM_BANK2, -0.16);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::LONG_TERM_FUEL_TRIM_BANK2, -0.16);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::INTAKE_MANIFOLD_ABSOLUTE_PRESSURE, 7.5);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::ENGINE_RPM, 1250.);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::VEHICLE_SPEED, 40.);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::TIMING_ADVANCE, 2.5);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::THROTTLE_POSITION, 19.75);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::OXYGEN_SENSOR1_VOLTAGE, 0.265);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::FUEL_TANK_LEVEL_INPUT, 0.824);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::EVAPORATION_SYSTEM_VAPOR_PRESSURE, -0.373);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::CATALYST_TEMPERATURE_BANK1_SENSOR1, 190.);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::RELATIVE_THROTTLE_POSITION, 3.);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::ABSOLUTE_THROTTLE_POSITION_B, 0.306);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::ACCELERATOR_PEDAL_POSITION_D, 0.188);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::ACCELERATOR_PEDAL_POSITION_E, 0.094);
-    mObd2SensorStore->setFloatSensor(
+    sensorStore->setFloatSensor(
         Obd2FloatSensorIndex::COMMANDED_THROTTLE_ACTUATOR, 0.024);
+
+    return sensorStore;
+}
+
+void DefaultVehicleHal::initObd2LiveFrame(VehiclePropConfig& propConfig) {
+    auto sensorStore = fillDefaultObd2Frame(propConfig.configArray[0],
+            propConfig.configArray[1]);
+    mLiveObd2Frame = createVehiclePropValue(VehiclePropertyType::COMPLEX, 0);
+    sensorStore->fillPropValue(mLiveObd2Frame.get(), "");
+}
+
+void DefaultVehicleHal::initObd2FreezeFrame(VehiclePropConfig& propConfig) {
+    auto sensorStore = fillDefaultObd2Frame(propConfig.configArray[0],
+            propConfig.configArray[1]);
+
+    mFreezeObd2Frames.push_back(
+            createVehiclePropValue(VehiclePropertyType::COMPLEX,0));
+    mFreezeObd2Frames.push_back(
+            createVehiclePropValue(VehiclePropertyType::COMPLEX,0));
+    mFreezeObd2Frames.push_back(
+            createVehiclePropValue(VehiclePropertyType::COMPLEX,0));
+
+    sensorStore->fillPropValue(mFreezeObd2Frames[0].get(), "P0070");
+    sensorStore->fillPropValue(mFreezeObd2Frames[1].get(), "P0102");
+    sensorStore->fillPropValue(mFreezeObd2Frames[2].get(), "P0123");
 }
 
 void DefaultVehicleHal::parseRxProtoBuf(std::vector<uint8_t>& msg) {
@@ -598,11 +624,15 @@
     switch (propId) {
     case toInt(VehicleProperty::OBD2_LIVE_FRAME):
         v = pool.obtainComplex();
-        status = fillObd2LiveFrame(&v);
+        status = fillObd2LiveFrame(v.get());
         break;
     case toInt(VehicleProperty::OBD2_FREEZE_FRAME):
         v = pool.obtainComplex();
-        status = fillObd2FreezeFrame(&v);
+        status = fillObd2FreezeFrame(requestedPropValue, v.get());
+        break;
+    case toInt(VehicleProperty::OBD2_FREEZE_FRAME_INFO):
+        v = pool.obtainComplex();
+        status = fillObd2DtcInfo(v.get());
         break;
     default:
         {
@@ -627,16 +657,24 @@
 }
 
 StatusCode DefaultVehicleHal::set(const VehiclePropValue& propValue) {
-    StatusCode status = updateProperty(propValue);
-
-    if (status == StatusCode::OK) {
-        // Send property update to emulator
-        emulator::EmulatorMessage msg;
-        emulator::VehiclePropValue *val = msg.add_value();
-        populateProtoVehiclePropValue(val, &propValue);
-        msg.set_status(emulator::RESULT_OK);
-        msg.set_msg_type(emulator::SET_PROPERTY_ASYNC);
-        txMsg(msg);
+    auto propId = propValue.prop;
+    StatusCode status;
+    switch (propId) {
+        case toInt(VehicleProperty::OBD2_FREEZE_FRAME_CLEAR):
+            status = clearObd2FreezeFrames(propValue);
+            break;
+        default:
+            status = updateProperty(propValue);
+            if (status == StatusCode::OK) {
+                // Send property update to emulator
+                emulator::EmulatorMessage msg;
+                emulator::VehiclePropValue *val = msg.add_value();
+                populateProtoVehiclePropValue(val, &propValue);
+                msg.set_status(emulator::RESULT_OK);
+                msg.set_msg_type(emulator::SET_PROPERTY_ASYNC);
+                txMsg(msg);
+            }
+            break;
     }
 
     return status;
@@ -680,6 +718,9 @@
             case toInt(VehicleProperty::OBD2_LIVE_FRAME):
                 initObd2LiveFrame(cfg);
                 break;
+            case toInt(VehicleProperty::OBD2_FREEZE_FRAME):
+                initObd2FreezeFrame(cfg);
+                break;
             default:
                 // Need to handle each complex property separately
                 break;
@@ -721,21 +762,78 @@
     mThread = std::thread(&DefaultVehicleHal::rxThread, this);
 }
 
-StatusCode DefaultVehicleHal::fillObd2LiveFrame(VehiclePropValuePtr* v) {
-    (*v)->value.int32Values = mObd2SensorStore->getIntegerSensors();
-    (*v)->value.floatValues = mObd2SensorStore->getFloatSensors();
-    (*v)->value.bytes = mObd2SensorStore->getSensorsBitmask();
+StatusCode DefaultVehicleHal::fillObd2LiveFrame(VehiclePropValue* v) {
+    v->prop = toInt(VehicleProperty::OBD2_LIVE_FRAME);
+    v->value.int32Values = mLiveObd2Frame->value.int32Values;
+    v->value.floatValues = mLiveObd2Frame->value.floatValues;
+    v->value.bytes = mLiveObd2Frame->value.bytes;
     return StatusCode::OK;
 }
 
-StatusCode DefaultVehicleHal::fillObd2FreezeFrame(VehiclePropValuePtr* v) {
-    (*v)->value.int32Values = mObd2SensorStore->getIntegerSensors();
-    (*v)->value.floatValues = mObd2SensorStore->getFloatSensors();
-    (*v)->value.bytes = mObd2SensorStore->getSensorsBitmask();
-    (*v)->value.stringValue = "P0010";
+template<typename Iterable>
+typename Iterable::const_iterator findPropValueAtTimestamp(
+        const Iterable& frames,
+        int64_t timestamp) {
+    return std::find_if(frames.begin(),
+            frames.end(),
+            [timestamp] (const std::unique_ptr<VehiclePropValue>&
+                         propValue) -> bool {
+                             return propValue->timestamp == timestamp;
+            });
+}
+
+StatusCode DefaultVehicleHal::fillObd2FreezeFrame(
+        const VehiclePropValue& requestedPropValue, VehiclePropValue* v) {
+    if (requestedPropValue.value.int64Values.size() != 1) {
+        ALOGE("asked for OBD2_FREEZE_FRAME without valid timestamp");
+        return StatusCode::INVALID_ARG;
+    }
+    auto timestamp = requestedPropValue.value.int64Values[0];
+    auto freezeFrameIter = findPropValueAtTimestamp(mFreezeObd2Frames,
+            timestamp);
+    if(mFreezeObd2Frames.end() == freezeFrameIter) {
+        ALOGE("asked for OBD2_FREEZE_FRAME at invalid timestamp");
+        return StatusCode::INVALID_ARG;
+    }
+    const std::unique_ptr<VehiclePropValue>& freezeFrame = *freezeFrameIter;
+    v->prop = toInt(VehicleProperty::OBD2_FREEZE_FRAME);
+    v->value.int32Values = freezeFrame->value.int32Values;
+    v->value.floatValues = freezeFrame->value.floatValues;
+    v->value.bytes = freezeFrame->value.bytes;
+    v->value.stringValue = freezeFrame->value.stringValue;
+    v->timestamp = freezeFrame->timestamp;
     return StatusCode::OK;
 }
 
+StatusCode DefaultVehicleHal::clearObd2FreezeFrames(
+    const VehiclePropValue& propValue) {
+    if (propValue.value.int64Values.size() == 0) {
+        mFreezeObd2Frames.clear();
+        return StatusCode::OK;
+    } else {
+        for(int64_t timestamp: propValue.value.int64Values) {
+            auto freezeFrameIter = findPropValueAtTimestamp(mFreezeObd2Frames,
+                    timestamp);
+            if(mFreezeObd2Frames.end() == freezeFrameIter) {
+                ALOGE("asked for OBD2_FREEZE_FRAME at invalid timestamp");
+                return StatusCode::INVALID_ARG;
+            }
+            mFreezeObd2Frames.erase(freezeFrameIter);
+        }
+    }
+    return StatusCode::OK;
+}
+
+StatusCode DefaultVehicleHal::fillObd2DtcInfo(VehiclePropValue* v) {
+    std::vector<int64_t> timestamps;
+    for(const auto& freezeFrame: mFreezeObd2Frames) {
+        timestamps.push_back(freezeFrame->timestamp);
+    }
+    v->value.int64Values = timestamps;
+    return StatusCode::OK;
+}
+
+
 
 }  // impl
 
diff --git a/automotive/vehicle/2.0/default/impl/DefaultVehicleHal.h b/automotive/vehicle/2.0/default/impl/DefaultVehicleHal.h
index edfc224..4b89f55 100644
--- a/automotive/vehicle/2.0/default/impl/DefaultVehicleHal.h
+++ b/automotive/vehicle/2.0/default/impl/DefaultVehicleHal.h
@@ -85,7 +85,8 @@
     void doGetPropertyAll(emulator::EmulatorMessage& rxMsg, emulator::EmulatorMessage& respMsg);
     void doSetProperty(emulator::EmulatorMessage& rxMsg, emulator::EmulatorMessage& respMsg);
     VehiclePropValue* getVehiclePropValueLocked(int32_t propId, int32_t areaId);
-    void initObd2LiveFrame(VehiclePropConfig& obd2LiveFramePropConfig);
+    void initObd2LiveFrame(VehiclePropConfig& propConfig);
+    void initObd2FreezeFrame(VehiclePropConfig& propConfig);
     void parseRxProtoBuf(std::vector<uint8_t>& msg);
     void populateProtoVehicleConfig(emulator::VehiclePropConfig* protoCfg,
                                     const VehiclePropConfig& cfg);
@@ -96,14 +97,18 @@
     void rxThread(void);
     void txMsg(emulator::EmulatorMessage& txMsg);
     StatusCode updateProperty(const VehiclePropValue& propValue);
-    StatusCode fillObd2LiveFrame(VehiclePropValuePtr* v);
-    StatusCode fillObd2FreezeFrame(VehiclePropValuePtr* v);
+    StatusCode fillObd2LiveFrame(VehiclePropValue* v);
+    StatusCode fillObd2FreezeFrame(const VehiclePropValue& requestedPropValue,
+            VehiclePropValue* v);
+    StatusCode fillObd2DtcInfo(VehiclePropValue *v);
+    StatusCode clearObd2FreezeFrames(const VehiclePropValue& propValue);
 private:
     // TODO:  Use a hashtable to support indexing props
     std::vector<std::unique_ptr<VehiclePropValue>> mProps;
     std::atomic<int> mCurSocket;
     std::atomic<int> mExit;
-    std::unique_ptr<Obd2SensorStore> mObd2SensorStore{nullptr};
+    std::unique_ptr<VehiclePropValue> mLiveObd2Frame {nullptr};
+    std::vector<std::unique_ptr<VehiclePropValue>> mFreezeObd2Frames;
     std::mutex mPropsMutex;
     int mSocket;
     std::mutex mTxMutex;
diff --git a/automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp b/automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
index 7c9a4d9..6922b86 100644
--- a/automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/AccessControlConfigParser_test.cpp
@@ -50,7 +50,7 @@
 
     ASSERT_TRUE(parser->parseFromStream(&file, &aclMap));
 
-    ASSERT_EQ(1, aclMap.size());
+    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);
@@ -74,7 +74,7 @@
     for (auto it = range.first; it != range.second; ++it) {
         auto& acl = it->second;
 
-        ASSERT_EQ(1, expectedUids.count(acl.uid))
+        ASSERT_EQ(1u, expectedUids.count(acl.uid))
                 << " uid: " << std::hex << acl.uid;
 
         if (acl.uid == 0xbeef) {
@@ -93,12 +93,12 @@
 
     ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
 
-    ASSERT_EQ(1, aclMap.size());
+    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(0xbeef, it->second.uid);
+    ASSERT_EQ(0xBEEFu, it->second.uid);
 }
 
 TEST_F(AccessControlConfigParserTest, badIntegerFormat) {
@@ -106,7 +106,7 @@
     file << "S:0x0500 A12 RW " << std::endl;
 
     ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
-    ASSERT_EQ(0, aclMap.size());
+    ASSERT_EQ(0u, aclMap.size());
 }
 
 TEST_F(AccessControlConfigParserTest, ignoreNotSupportedProperties) {
@@ -114,7 +114,7 @@
     file << "S:0x0666 1000 RW " << std::endl;
 
     ASSERT_FALSE(parser->parseFromStream(&file, &aclMap));
-    ASSERT_EQ(0, aclMap.size());
+    ASSERT_EQ(0u, aclMap.size());
 }
 
 TEST_F(AccessControlConfigParserTest, multipleCalls) {
@@ -122,12 +122,12 @@
     configFile << "S:0x0500 1000 RW" << std::endl;
 
     ASSERT_TRUE(parser->parseFromStream(&configFile, &aclMap));
-    ASSERT_EQ(1, aclMap.size());
+    ASSERT_EQ(1u, aclMap.size());
 
     std::stringstream configFile2;
     configFile2 << "S:0x0501 1004 RW" << std::endl;
     ASSERT_TRUE(parser->parseFromStream(&configFile2, &aclMap));
-    ASSERT_EQ(2, aclMap.size());
+    ASSERT_EQ(2u, aclMap.size());
 
     auto it = aclMap.find(toInt(VehicleProperty::HVAC_FAN_SPEED));
     ASSERT_NE(aclMap.end(), it);
diff --git a/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp b/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
index 1ca5824..274a843 100644
--- a/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
@@ -103,13 +103,13 @@
         return StatusCode::OK;
     }
 
-    StatusCode subscribe(int32_t property,
-                         int32_t areas,
-                         float sampleRate) override {
+    StatusCode subscribe(int32_t /* property */,
+                         int32_t /* areas */,
+                         float /* sampleRate */) override {
         return StatusCode::OK;
     }
 
-    StatusCode unsubscribe(int32_t property) override {
+    StatusCode unsubscribe(int32_t /* property */) override {
         return StatusCode::OK;
     }
 
@@ -323,20 +323,20 @@
     ASSERT_EQ(StatusCode::OK, actualStatusCode);
     ASSERT_EQ(toInt(VehicleProperty::VEHICLE_MAP_SERVICE), actualValue.prop);
 
-    ASSERT_EQ(3, actualValue.value.bytes.size());
+    ASSERT_EQ(3u, actualValue.value.bytes.size());
     ASSERT_EQ(1, actualValue.value.bytes[0]);
     ASSERT_EQ(2, actualValue.value.bytes[1]);
     ASSERT_EQ(3, actualValue.value.bytes[2]);
 
-    ASSERT_EQ(2, actualValue.value.int32Values.size());
+    ASSERT_EQ(2u, actualValue.value.int32Values.size());
     ASSERT_EQ(10, actualValue.value.int32Values[0]);
     ASSERT_EQ(20, actualValue.value.int32Values[1]);
 
-    ASSERT_EQ(2, actualValue.value.floatValues.size());
+    ASSERT_EQ(2u, actualValue.value.floatValues.size());
     ASSERT_FLOAT_EQ(1.1, actualValue.value.floatValues[0]);
     ASSERT_FLOAT_EQ(2.2, actualValue.value.floatValues[1]);
 
-    ASSERT_EQ(2, actualValue.value.int64Values.size());
+    ASSERT_EQ(2u, actualValue.value.int64Values.size());
     ASSERT_FLOAT_EQ(30, actualValue.value.int64Values[0]);
     ASSERT_FLOAT_EQ(40, actualValue.value.int64Values[1]);
 
diff --git a/automotive/vehicle/2.0/default/tests/VehicleHalTestUtils.h b/automotive/vehicle/2.0/default/tests/VehicleHalTestUtils.h
index a512fcf..8ba36d8 100644
--- a/automotive/vehicle/2.0/default/tests/VehicleHalTestUtils.h
+++ b/automotive/vehicle/2.0/default/tests/VehicleHalTestUtils.h
@@ -131,12 +131,12 @@
         mEventCond.notify_one();
         return Return<void>();
     }
-    Return<void> onPropertySet(const VehiclePropValue& value) override {
+    Return<void> onPropertySet(const VehiclePropValue& /* value */) override {
         return Return<void>();
     }
-    Return<void> onPropertySetError(StatusCode errorCode,
-                                    int32_t propId,
-                                    int32_t areaId) override {
+    Return<void> onPropertySetError(StatusCode /* errorCode */,
+                                    int32_t /* propId */,
+                                    int32_t /* areaId */) override {
         return Return<void>();
     }
 
diff --git a/automotive/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp b/automotive/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
index 0d57284..7d37355 100644
--- a/automotive/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
@@ -85,9 +85,9 @@
     // In this test we have T threads that concurrently in C cycles
     // obtain and release O VehiclePropValue objects of FLOAT / INT32 types.
 
-    const auto T = 2;
-    const auto C  = 500;
-    const auto O = 100;
+    const int T = 2;
+    const int C = 500;
+    const int O = 100;
 
     auto poolPtr = valuePool.get();
 
@@ -112,10 +112,10 @@
     }
     auto finish = elapsedRealtimeNano();
 
-    ASSERT_EQ(T * C * O, stats->Obtained);
-    ASSERT_EQ(T * C * O, stats->Recycled);
+    ASSERT_EQ(static_cast<uint32_t>(T * C * O), stats->Obtained);
+    ASSERT_EQ(static_cast<uint32_t>(T * C * O), stats->Recycled);
     // Created less than obtained.
-    ASSERT_GE(T * O, stats->Created);
+    ASSERT_GE(static_cast<uint32_t>(T * O), stats->Created);
 
     auto elapsedMs = (finish - start) / 1000000;
     ASSERT_GE(1000, elapsedMs);  // Less a second to access 100K objects.
diff --git a/automotive/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.cpp b/automotive/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.cpp
index 3a252af..761e550 100644
--- a/automotive/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.cpp
+++ b/automotive/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.cpp
@@ -16,6 +16,7 @@
 
 #include "Obd2SensorStore.h"
 
+#include <utils/SystemClock.h>
 #include <vehicle_hal_manager/VehicleUtils.h>
 
 namespace android {
@@ -98,6 +99,16 @@
     return mSensorsBitmask.getBitmask();
 }
 
+void Obd2SensorStore::fillPropValue(VehiclePropValue *propValue,
+                                    std::string dtc) const {
+    propValue->timestamp = elapsedRealtimeNano();
+    propValue->value.int32Values = getIntegerSensors();
+    propValue->value.floatValues = getFloatSensors();
+    propValue->value.bytes = getSensorsBitmask();
+    propValue->value.stringValue = dtc;
+}
+
+
 
 }  // namespace V2_0
 }  // namespace vehicle
diff --git a/automotive/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.h b/automotive/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.h
index cbe9893..3e2a08e 100644
--- a/automotive/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.h
+++ b/automotive/vehicle/2.0/default/vehicle_hal_manager/Obd2SensorStore.h
@@ -54,6 +54,10 @@
     // Returns a vector that contains a bitmask for all stored sensors.
     const std::vector<uint8_t>& getSensorsBitmask() const;
 
+    // Given a stringValue, fill in a VehiclePropValue
+    void fillPropValue(VehiclePropValue *propValue,
+            std::string dtc) const;
+
 private:
     class BitmaskInVector {
     public:
diff --git a/automotive/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp b/automotive/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp
index a79c55c..ac1245a 100644
--- a/automotive/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp
+++ b/automotive/vehicle/2.0/default/vehicle_hal_manager/VehicleObjectPool.cpp
@@ -129,7 +129,7 @@
     if (!check(&o->value)) {
         ALOGE("Discarding value for prop 0x%x because it contains "
                   "data that is not consistent with this pool. "
-                  "Expected type: %d, vector size: %d",
+                  "Expected type: %d, vector size: %zu",
               o->prop, mPropType, mVectorSize);
         delete o;
     } else {
diff --git a/automotive/vehicle/2.0/types.hal b/automotive/vehicle/2.0/types.hal
index 05e10be..fa432f4 100644
--- a/automotive/vehicle/2.0/types.hal
+++ b/automotive/vehicle/2.0/types.hal
@@ -1829,6 +1829,10 @@
      *   configArray[1] : number of vendor-specific float-valued sensors
      *                    that can be returned in a frame.
      *
+     * A get of this property must take the following form:
+     *   int64Values[0]: timestamp of the freeze frame to retrieve.
+     *                   Valid timestamps are given by OBD2_DTC_INFO.
+     *
      * The values are to be interpreted as follows:
      * the indices defined in Obd2IntegerSensorIndex are to be used to
      * read from int32Values;
@@ -1860,8 +1864,49 @@
         | VehiclePropertyType:COMPLEX
         | VehicleArea:GLOBAL),
 
-};
+    /*
+     * OBD2 Freeze Frame Information
+     *
+     * This property describes the current freeze frames stored in vehicle
+     * memory and available for retrieval via OBD2_FREEZE_FRAME.
+     *
+     * The values are to be interpreted as follows:
+     * each element of int64Values is the timestamp at which a a fault code
+     * has been detected and the corresponding freeze frame stored, and each
+     * such element can be used as the key to OBD2_FREEZE_FRAME to retrieve
+     * the corresponding freeze frame.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
+     * @access VehiclePropertyAccess:READ
+     */
+    OBD2_FREEZE_FRAME_INFO = (
+        0x0D02
+        | VehiclePropertyGroup:SYSTEM
+        | VehiclePropertyType:COMPLEX
+        | VehicleArea:GLOBAL),
 
+    /*
+     * OBD2 Freeze Frame Clear
+     *
+     * This property allows deletion of any of the freeze frames stored in
+     * vehicle memory, as described by OBD2_DTC_INFO.
+     *
+     * A set of this property is to be interpreted as follows:
+     * if int64Values contains no elements, then all DTCs stored will be cleared;
+     * if int64Values contains one or more elements, then DTCs at the timestamps
+     * stored in int64Values will be cleared, and the others not cleared, except
+     * the memory will be compacted so that all remaining DTCs are stored
+     * contiguously.
+     *
+     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
+     * @access VehiclePropertyAccess:WRITE
+     */
+    OBD2_FREEZE_FRAME_CLEAR = (
+        0x0D03
+        | VehiclePropertyGroup:SYSTEM
+        | VehiclePropertyType:COMPLEX
+        | VehicleArea:GLOBAL),
+};
 /*
  * Bit flags for fan direction
  */
diff --git a/benchmarks/msgq/1.0/Android.bp b/benchmarks/msgq/1.0/Android.bp
index de84e81..7f8ea99 100644
--- a/benchmarks/msgq/1.0/Android.bp
+++ b/benchmarks/msgq/1.0/Android.bp
@@ -12,7 +12,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.benchmarks.msgq@1.0",
     srcs: [
-        "IBenchmarkMsgQ.hal",
+        ":android.hardware.benchmarks.msgq@1.0_hal",
     ],
     out: [
         "android/hardware/benchmarks/msgq/1.0/BenchmarkMsgQAll.cpp",
@@ -24,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.benchmarks.msgq@1.0",
     srcs: [
-        "IBenchmarkMsgQ.hal",
+        ":android.hardware.benchmarks.msgq@1.0_hal",
     ],
     out: [
         "android/hardware/benchmarks/msgq/1.0/IBenchmarkMsgQ.h",
diff --git a/biometrics/fingerprint/2.1/Android.mk b/biometrics/fingerprint/2.1/Android.mk
index 22da268..567b38a 100644
--- a/biometrics/fingerprint/2.1/Android.mk
+++ b/biometrics/fingerprint/2.1/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.biometrics.fingerprint@2.1-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -239,7 +239,7 @@
 LOCAL_MODULE := android.hardware.biometrics.fingerprint@2.1-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/bluetooth/1.0/Android.bp b/bluetooth/1.0/Android.bp
index f2c394b..2373ceb 100644
--- a/bluetooth/1.0/Android.bp
+++ b/bluetooth/1.0/Android.bp
@@ -14,9 +14,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.bluetooth@1.0",
     srcs: [
-        "types.hal",
-        "IBluetoothHci.hal",
-        "IBluetoothHciCallbacks.hal",
+        ":android.hardware.bluetooth@1.0_hal",
     ],
     out: [
         "android/hardware/bluetooth/1.0/types.cpp",
@@ -30,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.bluetooth@1.0",
     srcs: [
-        "types.hal",
-        "IBluetoothHci.hal",
-        "IBluetoothHciCallbacks.hal",
+        ":android.hardware.bluetooth@1.0_hal",
     ],
     out: [
         "android/hardware/bluetooth/1.0/types.h",
diff --git a/bluetooth/1.0/Android.mk b/bluetooth/1.0/Android.mk
index 7924cee..d824d5d 100644
--- a/bluetooth/1.0/Android.mk
+++ b/bluetooth/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.bluetooth@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -87,7 +87,7 @@
 LOCAL_MODULE := android.hardware.bluetooth@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/boot/1.0/Android.bp b/boot/1.0/Android.bp
index 9dcabc4..7265cc2 100644
--- a/boot/1.0/Android.bp
+++ b/boot/1.0/Android.bp
@@ -13,8 +13,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0",
     srcs: [
-        "types.hal",
-        "IBootControl.hal",
+        ":android.hardware.boot@1.0_hal",
     ],
     out: [
         "android/hardware/boot/1.0/types.cpp",
@@ -27,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0",
     srcs: [
-        "types.hal",
-        "IBootControl.hal",
+        ":android.hardware.boot@1.0_hal",
     ],
     out: [
         "android/hardware/boot/1.0/types.h",
diff --git a/boot/1.0/Android.mk b/boot/1.0/Android.mk
index 6fa5e4b..b188acb 100644
--- a/boot/1.0/Android.mk
+++ b/boot/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.boot@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -83,7 +83,7 @@
 LOCAL_MODULE := android.hardware.boot@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/camera/common/1.0/Android.mk b/camera/common/1.0/Android.mk
index 2e68dc0..9e05172 100644
--- a/camera/common/1.0/Android.mk
+++ b/camera/common/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.camera.common@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -191,7 +191,7 @@
 LOCAL_MODULE := android.hardware.camera.common@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/camera/metadata/3.2/Android.mk b/camera/metadata/3.2/Android.mk
index 6604ccd..86cee91 100644
--- a/camera/metadata/3.2/Android.mk
+++ b/camera/metadata/3.2/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.camera.metadata@3.2-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -1236,7 +1236,7 @@
 LOCAL_MODULE := android.hardware.camera.metadata@3.2-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp
index f1a66a8..f3ba201 100644
--- a/camera/provider/2.4/default/CameraProvider.cpp
+++ b/camera/provider/2.4/default/CameraProvider.cpp
@@ -234,8 +234,10 @@
 
     // Setup vendor tags here so HAL can setup vendor keys in camera characteristics
     VendorTagDescriptor::clearGlobalVendorTagDescriptor();
-    bool setupSucceed = setUpVendorTags();
-    return !setupSucceed; // return flag here is mInitFailed
+    if (!setUpVendorTags()) {
+        ALOGE("%s: Vendor tag setup failed, will not be available.", __FUNCTION__);
+    }
+    return false; // mInitFailed
 }
 
 bool CameraProvider::setUpVendorTags() {
@@ -245,7 +247,7 @@
     // Check if vendor operations have been implemented
     if (!mModule->isVendorTagDefined()) {
         ALOGI("%s: No vendor tags defined for this device.", __FUNCTION__);
-        return false;
+        return true;
     }
 
     mModule->getVendorTagOps(&vOps);
diff --git a/configstore/1.0/Android.mk b/configstore/1.0/Android.mk
index fd2718e..010d509 100644
--- a/configstore/1.0/Android.mk
+++ b/configstore/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.configstore@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -159,7 +159,7 @@
 LOCAL_MODULE := android.hardware.configstore@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/contexthub/1.0/Android.mk b/contexthub/1.0/Android.mk
index c73c5c4..a053986 100644
--- a/contexthub/1.0/Android.mk
+++ b/contexthub/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.contexthub@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -334,7 +334,7 @@
 LOCAL_MODULE := android.hardware.contexthub@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/example/extension/light/2.0/Android.mk b/example/extension/light/2.0/Android.mk
index deb7a2a..0b79747 100644
--- a/example/extension/light/2.0/Android.mk
+++ b/example/extension/light/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.example.extension.light@2.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -103,7 +103,7 @@
 LOCAL_MODULE := android.hardware.example.extension.light@2.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/gatekeeper/1.0/Android.mk b/gatekeeper/1.0/Android.mk
index 5d66b45..70206ff 100644
--- a/gatekeeper/1.0/Android.mk
+++ b/gatekeeper/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.gatekeeper@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -83,7 +83,7 @@
 LOCAL_MODULE := android.hardware.gatekeeper@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/gnss/1.0/Android.mk b/gnss/1.0/Android.mk
index 98c547c..5985c87 100644
--- a/gnss/1.0/Android.mk
+++ b/gnss/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.gnss@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -530,7 +530,7 @@
 LOCAL_MODULE := android.hardware.gnss@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -1052,7 +1052,7 @@
 LOCAL_MODULE := android.hardware.gnss@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/graphics/common/1.0/Android.mk b/graphics/common/1.0/Android.mk
index 0fa6dcc..c08053d 100644
--- a/graphics/common/1.0/Android.mk
+++ b/graphics/common/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.graphics.common@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -134,7 +134,7 @@
 LOCAL_MODULE := android.hardware.graphics.common@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -260,7 +260,7 @@
 LOCAL_MODULE := android.hardware.graphics.common@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/health/1.0/Android.mk b/health/1.0/Android.mk
index f05d227..ebb89a7 100644
--- a/health/1.0/Android.mk
+++ b/health/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.health@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -140,7 +140,7 @@
 LOCAL_MODULE := android.hardware.health@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -272,7 +272,7 @@
 LOCAL_MODULE := android.hardware.health@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/ir/1.0/Android.bp b/ir/1.0/Android.bp
index 5628952..da49579 100644
--- a/ir/1.0/Android.bp
+++ b/ir/1.0/Android.bp
@@ -13,8 +13,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0",
     srcs: [
-        "types.hal",
-        "IConsumerIr.hal",
+        ":android.hardware.ir@1.0_hal",
     ],
     out: [
         "android/hardware/ir/1.0/types.cpp",
@@ -27,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0",
     srcs: [
-        "types.hal",
-        "IConsumerIr.hal",
+        ":android.hardware.ir@1.0_hal",
     ],
     out: [
         "android/hardware/ir/1.0/types.h",
diff --git a/ir/1.0/Android.mk b/ir/1.0/Android.mk
index 660b32b..d43286c 100644
--- a/ir/1.0/Android.mk
+++ b/ir/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.ir@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -64,7 +64,7 @@
 LOCAL_MODULE := android.hardware.ir@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/light/2.0/Android.mk b/light/2.0/Android.mk
index ef19bad..7bb4293 100644
--- a/light/2.0/Android.mk
+++ b/light/2.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.light@2.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -140,7 +140,7 @@
 LOCAL_MODULE := android.hardware.light@2.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/memtrack/1.0/Android.mk b/memtrack/1.0/Android.mk
index eeb67f6..62bee97 100644
--- a/memtrack/1.0/Android.mk
+++ b/memtrack/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.memtrack@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -121,7 +121,7 @@
 LOCAL_MODULE := android.hardware.memtrack@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/nfc/1.0/Android.bp b/nfc/1.0/Android.bp
index 7f228a7..e7305b4 100644
--- a/nfc/1.0/Android.bp
+++ b/nfc/1.0/Android.bp
@@ -14,9 +14,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0",
     srcs: [
-        "types.hal",
-        "INfc.hal",
-        "INfcClientCallback.hal",
+        ":android.hardware.nfc@1.0_hal",
     ],
     out: [
         "android/hardware/nfc/1.0/types.cpp",
@@ -30,9 +28,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0",
     srcs: [
-        "types.hal",
-        "INfc.hal",
-        "INfcClientCallback.hal",
+        ":android.hardware.nfc@1.0_hal",
     ],
     out: [
         "android/hardware/nfc/1.0/types.h",
diff --git a/nfc/1.0/Android.mk b/nfc/1.0/Android.mk
index 823bde5..6f09764 100644
--- a/nfc/1.0/Android.mk
+++ b/nfc/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.nfc@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -106,7 +106,7 @@
 LOCAL_MODULE := android.hardware.nfc@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -204,7 +204,7 @@
 LOCAL_MODULE := android.hardware.nfc@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/power/1.0/Android.mk b/power/1.0/Android.mk
index 4e11867..98d95a8 100644
--- a/power/1.0/Android.mk
+++ b/power/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.power@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -140,7 +140,7 @@
 LOCAL_MODULE := android.hardware.power@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/radio/1.0/Android.bp b/radio/1.0/Android.bp
index d9df910..f59cf66 100644
--- a/radio/1.0/Android.bp
+++ b/radio/1.0/Android.bp
@@ -17,12 +17,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0",
     srcs: [
-        "types.hal",
-        "IRadio.hal",
-        "IRadioIndication.hal",
-        "IRadioResponse.hal",
-        "ISap.hal",
-        "ISapCallback.hal",
+        ":android.hardware.radio@1.0_hal",
     ],
     out: [
         "android/hardware/radio/1.0/types.cpp",
@@ -39,12 +34,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0",
     srcs: [
-        "types.hal",
-        "IRadio.hal",
-        "IRadioIndication.hal",
-        "IRadioResponse.hal",
-        "ISap.hal",
-        "ISapCallback.hal",
+        ":android.hardware.radio@1.0_hal",
     ],
     out: [
         "android/hardware/radio/1.0/types.h",
diff --git a/radio/1.0/Android.mk b/radio/1.0/Android.mk
index 704ea08..9e9588a 100644
--- a/radio/1.0/Android.mk
+++ b/radio/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.radio@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -74,6 +74,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (ApnTypes)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/ApnTypes.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.ApnTypes
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (AppState)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/AppState.java
@@ -3023,7 +3042,7 @@
 LOCAL_MODULE := android.hardware.radio@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -3089,6 +3108,25 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
+# Build types.hal (ApnTypes)
+#
+GEN := $(intermediates)/android/hardware/radio/V1_0/ApnTypes.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.radio@1.0::types.ApnTypes
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
 # Build types.hal (AppState)
 #
 GEN := $(intermediates)/android/hardware/radio/V1_0/AppState.java
diff --git a/radio/1.0/IRadioResponse.hal b/radio/1.0/IRadioResponse.hal
index 538c06d..dafd264 100644
--- a/radio/1.0/IRadioResponse.hal
+++ b/radio/1.0/IRadioResponse.hal
@@ -1562,6 +1562,16 @@
 
     /*
      * @param info Response info struct containing response type, serial no. and error
+     *
+     * Valid errors returned:
+     *   RadioError:NONE
+     *   RadioError:RADIO_NOT_AVAILABLE
+     *   RadioError:GENERIC_FAILURE
+     */
+    oneway reportStkServiceIsRunningResponse(RadioResponseInfo info);
+
+    /*
+     * @param info Response info struct containing response type, serial no. and error
      * @param source CDMA subscription source
      *
      * Valid errors returned:
diff --git a/sensors/1.0/Android.mk b/sensors/1.0/Android.mk
index 5784916..29f7c7e 100644
--- a/sensors/1.0/Android.mk
+++ b/sensors/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.sensors@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/sensors/1.0/default/service.cpp b/sensors/1.0/default/service.cpp
index 65f6d81..5bcfe4b 100644
--- a/sensors/1.0/default/service.cpp
+++ b/sensors/1.0/default/service.cpp
@@ -23,9 +23,5 @@
 using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-    /* Sensors framework service needs at least two threads.
-     * One thread blocks on a "poll"
-     * The second thread is needed for all other HAL methods.
-     */
-    return defaultPassthroughServiceImplementation<ISensors>(2);
+    return defaultPassthroughServiceImplementation<ISensors>();
 }
diff --git a/tests/bar/1.0/Android.bp b/tests/bar/1.0/Android.bp
index 924b3ab..694804c 100644
--- a/tests/bar/1.0/Android.bp
+++ b/tests/bar/1.0/Android.bp
@@ -17,12 +17,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.bar@1.0",
     srcs: [
-        "types.hal",
-        "IBar.hal",
-        "IComplicated.hal",
-        "IFooCallback.hal",
-        "IImportRules.hal",
-        "IImportTypes.hal",
+        ":android.hardware.tests.bar@1.0_hal",
     ],
     out: [
         "android/hardware/tests/bar/1.0/types.cpp",
@@ -39,12 +34,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.bar@1.0",
     srcs: [
-        "types.hal",
-        "IBar.hal",
-        "IComplicated.hal",
-        "IFooCallback.hal",
-        "IImportRules.hal",
-        "IImportTypes.hal",
+        ":android.hardware.tests.bar@1.0_hal",
     ],
     out: [
         "android/hardware/tests/bar/1.0/types.h",
diff --git a/tests/baz/1.0/Android.bp b/tests/baz/1.0/Android.bp
index 1cf71b6..7939444 100644
--- a/tests/baz/1.0/Android.bp
+++ b/tests/baz/1.0/Android.bp
@@ -15,10 +15,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.baz@1.0",
     srcs: [
-        "types.hal",
-        "IBase.hal",
-        "IBaz.hal",
-        "IBazCallback.hal",
+        ":android.hardware.tests.baz@1.0_hal",
     ],
     out: [
         "android/hardware/tests/baz/1.0/types.cpp",
@@ -33,10 +30,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.baz@1.0",
     srcs: [
-        "types.hal",
-        "IBase.hal",
-        "IBaz.hal",
-        "IBazCallback.hal",
+        ":android.hardware.tests.baz@1.0_hal",
     ],
     out: [
         "android/hardware/tests/baz/1.0/types.h",
diff --git a/tests/baz/1.0/Android.mk b/tests/baz/1.0/Android.mk
index 82ba3cb..40026ec 100644
--- a/tests/baz/1.0/Android.mk
+++ b/tests/baz/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tests.baz@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -85,7 +85,7 @@
 LOCAL_MODULE := android.hardware.tests.baz@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/tests/expression/1.0/Android.bp b/tests/expression/1.0/Android.bp
index 1730aba..5279503 100644
--- a/tests/expression/1.0/Android.bp
+++ b/tests/expression/1.0/Android.bp
@@ -13,8 +13,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.expression@1.0",
     srcs: [
-        "IExpression.hal",
-        "IExpressionExt.hal",
+        ":android.hardware.tests.expression@1.0_hal",
     ],
     out: [
         "android/hardware/tests/expression/1.0/ExpressionAll.cpp",
@@ -27,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.expression@1.0",
     srcs: [
-        "IExpression.hal",
-        "IExpressionExt.hal",
+        ":android.hardware.tests.expression@1.0_hal",
     ],
     out: [
         "android/hardware/tests/expression/1.0/IExpression.h",
diff --git a/tests/expression/1.0/Android.mk b/tests/expression/1.0/Android.mk
index 1c7da4b..6bc9390 100644
--- a/tests/expression/1.0/Android.mk
+++ b/tests/expression/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tests.expression@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -64,7 +64,7 @@
 LOCAL_MODULE := android.hardware.tests.expression@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/tests/foo/1.0/Android.bp b/tests/foo/1.0/Android.bp
index c65d3cf..9572855 100644
--- a/tests/foo/1.0/Android.bp
+++ b/tests/foo/1.0/Android.bp
@@ -17,12 +17,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.foo@1.0",
     srcs: [
-        "types.hal",
-        "IFoo.hal",
-        "IFooCallback.hal",
-        "IMyTypes.hal",
-        "ISimple.hal",
-        "ITheirTypes.hal",
+        ":android.hardware.tests.foo@1.0_hal",
     ],
     out: [
         "android/hardware/tests/foo/1.0/types.cpp",
@@ -39,12 +34,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.foo@1.0",
     srcs: [
-        "types.hal",
-        "IFoo.hal",
-        "IFooCallback.hal",
-        "IMyTypes.hal",
-        "ISimple.hal",
-        "ITheirTypes.hal",
+        ":android.hardware.tests.foo@1.0_hal",
     ],
     out: [
         "android/hardware/tests/foo/1.0/types.h",
diff --git a/tests/inheritance/1.0/Android.bp b/tests/inheritance/1.0/Android.bp
index 433e9ac..f50aee4 100644
--- a/tests/inheritance/1.0/Android.bp
+++ b/tests/inheritance/1.0/Android.bp
@@ -15,10 +15,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.inheritance@1.0",
     srcs: [
-        "IChild.hal",
-        "IFetcher.hal",
-        "IGrandparent.hal",
-        "IParent.hal",
+        ":android.hardware.tests.inheritance@1.0_hal",
     ],
     out: [
         "android/hardware/tests/inheritance/1.0/ChildAll.cpp",
@@ -33,10 +30,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.inheritance@1.0",
     srcs: [
-        "IChild.hal",
-        "IFetcher.hal",
-        "IGrandparent.hal",
-        "IParent.hal",
+        ":android.hardware.tests.inheritance@1.0_hal",
     ],
     out: [
         "android/hardware/tests/inheritance/1.0/IChild.h",
diff --git a/tests/inheritance/1.0/Android.mk b/tests/inheritance/1.0/Android.mk
index 8c1b1c8..21aac00 100644
--- a/tests/inheritance/1.0/Android.mk
+++ b/tests/inheritance/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tests.inheritance@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -110,7 +110,7 @@
 LOCAL_MODULE := android.hardware.tests.inheritance@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/tests/libhwbinder/1.0/Android.bp b/tests/libhwbinder/1.0/Android.bp
index 1d0b4b5..580e961 100644
--- a/tests/libhwbinder/1.0/Android.bp
+++ b/tests/libhwbinder/1.0/Android.bp
@@ -12,7 +12,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.libhwbinder@1.0",
     srcs: [
-        "IBenchmark.hal",
+        ":android.hardware.tests.libhwbinder@1.0_hal",
     ],
     out: [
         "android/hardware/tests/libhwbinder/1.0/BenchmarkAll.cpp",
@@ -24,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.libhwbinder@1.0",
     srcs: [
-        "IBenchmark.hal",
+        ":android.hardware.tests.libhwbinder@1.0_hal",
     ],
     out: [
         "android/hardware/tests/libhwbinder/1.0/IBenchmark.h",
diff --git a/tests/libhwbinder/1.0/Android.mk b/tests/libhwbinder/1.0/Android.mk
index ae873af..2ee26d6 100644
--- a/tests/libhwbinder/1.0/Android.mk
+++ b/tests/libhwbinder/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tests.libhwbinder@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -43,7 +43,7 @@
 LOCAL_MODULE := android.hardware.tests.libhwbinder@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/tests/memory/1.0/Android.bp b/tests/memory/1.0/Android.bp
index 3f27810..49faf41 100644
--- a/tests/memory/1.0/Android.bp
+++ b/tests/memory/1.0/Android.bp
@@ -12,7 +12,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.memory@1.0",
     srcs: [
-        "IMemoryTest.hal",
+        ":android.hardware.tests.memory@1.0_hal",
     ],
     out: [
         "android/hardware/tests/memory/1.0/MemoryTestAll.cpp",
@@ -24,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.memory@1.0",
     srcs: [
-        "IMemoryTest.hal",
+        ":android.hardware.tests.memory@1.0_hal",
     ],
     out: [
         "android/hardware/tests/memory/1.0/IMemoryTest.h",
diff --git a/tests/msgq/1.0/Android.bp b/tests/msgq/1.0/Android.bp
index 39fef89..d17efe4 100644
--- a/tests/msgq/1.0/Android.bp
+++ b/tests/msgq/1.0/Android.bp
@@ -12,7 +12,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.msgq@1.0",
     srcs: [
-        "ITestMsgQ.hal",
+        ":android.hardware.tests.msgq@1.0_hal",
     ],
     out: [
         "android/hardware/tests/msgq/1.0/TestMsgQAll.cpp",
@@ -24,7 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.msgq@1.0",
     srcs: [
-        "ITestMsgQ.hal",
+        ":android.hardware.tests.msgq@1.0_hal",
     ],
     out: [
         "android/hardware/tests/msgq/1.0/ITestMsgQ.h",
diff --git a/tests/pointer/1.0/Android.bp b/tests/pointer/1.0/Android.bp
index e40003d..7f66e2a 100644
--- a/tests/pointer/1.0/Android.bp
+++ b/tests/pointer/1.0/Android.bp
@@ -13,8 +13,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.pointer@1.0",
     srcs: [
-        "IGraph.hal",
-        "IPointer.hal",
+        ":android.hardware.tests.pointer@1.0_hal",
     ],
     out: [
         "android/hardware/tests/pointer/1.0/GraphAll.cpp",
@@ -27,8 +26,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.pointer@1.0",
     srcs: [
-        "IGraph.hal",
-        "IPointer.hal",
+        ":android.hardware.tests.pointer@1.0_hal",
     ],
     out: [
         "android/hardware/tests/pointer/1.0/IGraph.h",
diff --git a/thermal/1.0/Android.mk b/thermal/1.0/Android.mk
index b88bb81..7748b9e 100644
--- a/thermal/1.0/Android.mk
+++ b/thermal/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.thermal@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -178,7 +178,7 @@
 LOCAL_MODULE := android.hardware.thermal@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -348,7 +348,7 @@
 LOCAL_MODULE := android.hardware.thermal@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/tv/cec/1.0/Android.mk b/tv/cec/1.0/Android.mk
index efa71a1..b08099e 100644
--- a/tv/cec/1.0/Android.mk
+++ b/tv/cec/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.tv.cec@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -296,7 +296,7 @@
 LOCAL_MODULE := android.hardware.tv.cec@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/usb/1.0/Android.mk b/usb/1.0/Android.mk
index 0eded5b..7be7147 100644
--- a/usb/1.0/Android.mk
+++ b/usb/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.usb@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -201,7 +201,7 @@
 LOCAL_MODULE := android.hardware.usb@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -394,7 +394,7 @@
 LOCAL_MODULE := android.hardware.usb@1.0-java-constants
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 #
diff --git a/vibrator/1.0/Android.mk b/vibrator/1.0/Android.mk
index 1437d44..4e1ba6a 100644
--- a/vibrator/1.0/Android.mk
+++ b/vibrator/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.vibrator@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -64,7 +64,7 @@
 LOCAL_MODULE := android.hardware.vibrator@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/vr/1.0/Android.mk b/vr/1.0/Android.mk
index 1b8e8c7..0fbdaf7 100644
--- a/vr/1.0/Android.mk
+++ b/vr/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.vr@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -43,7 +43,7 @@
 LOCAL_MODULE := android.hardware.vr@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
diff --git a/wifi/1.0/Android.bp b/wifi/1.0/Android.bp
index 59326d0..2319999 100644
--- a/wifi/1.0/Android.bp
+++ b/wifi/1.0/Android.bp
@@ -25,20 +25,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.0",
     srcs: [
-        "types.hal",
-        "IWifi.hal",
-        "IWifiApIface.hal",
-        "IWifiChip.hal",
-        "IWifiChipEventCallback.hal",
-        "IWifiEventCallback.hal",
-        "IWifiIface.hal",
-        "IWifiNanIface.hal",
-        "IWifiNanIfaceEventCallback.hal",
-        "IWifiP2pIface.hal",
-        "IWifiRttController.hal",
-        "IWifiRttControllerEventCallback.hal",
-        "IWifiStaIface.hal",
-        "IWifiStaIfaceEventCallback.hal",
+        ":android.hardware.wifi@1.0_hal",
     ],
     out: [
         "android/hardware/wifi/1.0/types.cpp",
@@ -63,20 +50,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.0",
     srcs: [
-        "types.hal",
-        "IWifi.hal",
-        "IWifiApIface.hal",
-        "IWifiChip.hal",
-        "IWifiChipEventCallback.hal",
-        "IWifiEventCallback.hal",
-        "IWifiIface.hal",
-        "IWifiNanIface.hal",
-        "IWifiNanIfaceEventCallback.hal",
-        "IWifiP2pIface.hal",
-        "IWifiRttController.hal",
-        "IWifiRttControllerEventCallback.hal",
-        "IWifiStaIface.hal",
-        "IWifiStaIfaceEventCallback.hal",
+        ":android.hardware.wifi@1.0_hal",
     ],
     out: [
         "android/hardware/wifi/1.0/types.h",
diff --git a/wifi/1.0/Android.mk b/wifi/1.0/Android.mk
index 708c14c..4476b14 100644
--- a/wifi/1.0/Android.mk
+++ b/wifi/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.wifi@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -74,44 +74,6 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NanBeaconSdfPayloadInd)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanBeaconSdfPayloadInd.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanBeaconSdfPayloadInd
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (NanBeaconSdfPayloadRequest)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanBeaconSdfPayloadRequest.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanBeaconSdfPayloadRequest
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
 # Build types.hal (NanCapabilities)
 #
 GEN := $(intermediates)/android/hardware/wifi/V1_0/NanCapabilities.java
@@ -587,25 +549,6 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NanVsaRxFrameMask)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanVsaRxFrameMask.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanVsaRxFrameMask
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
 # Build types.hal (RttBw)
 #
 GEN := $(intermediates)/android/hardware/wifi/V1_0/RttBw.java
@@ -1868,7 +1811,7 @@
 LOCAL_MODULE := android.hardware.wifi@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -1934,44 +1877,6 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NanBeaconSdfPayloadInd)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanBeaconSdfPayloadInd.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanBeaconSdfPayloadInd
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (NanBeaconSdfPayloadRequest)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanBeaconSdfPayloadRequest.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanBeaconSdfPayloadRequest
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
 # Build types.hal (NanCapabilities)
 #
 GEN := $(intermediates)/android/hardware/wifi/V1_0/NanCapabilities.java
@@ -2447,25 +2352,6 @@
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NanVsaRxFrameMask)
-#
-GEN := $(intermediates)/android/hardware/wifi/V1_0/NanVsaRxFrameMask.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.wifi@1.0::types.NanVsaRxFrameMask
-
-$(GEN): $(LOCAL_PATH)/types.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
 # Build types.hal (RttBw)
 #
 GEN := $(intermediates)/android/hardware/wifi/V1_0/RttBw.java
diff --git a/wifi/1.0/IWifiNanIface.hal b/wifi/1.0/IWifiNanIface.hal
index 3362339..450fba0 100644
--- a/wifi/1.0/IWifiNanIface.hal
+++ b/wifi/1.0/IWifiNanIface.hal
@@ -122,7 +122,7 @@
    *         |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|,
    *         |WifiStatusCode.ERROR_UNKNOWN|
    */
-  stopPublishRequest(CommandIdShort cmdId, uint16_t sessionId)
+  stopPublishRequest(CommandIdShort cmdId, uint8_t sessionId)
       generates (WifiStatus status);
 
   /**
@@ -151,7 +151,7 @@
    *         |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|,
    *         |WifiStatusCode.ERROR_UNKNOWN|
    */
-  stopSubscribeRequest(CommandIdShort cmdId, uint16_t sessionId)
+  stopSubscribeRequest(CommandIdShort cmdId, uint8_t sessionId)
       generates (WifiStatus status);
 
   /**
@@ -240,19 +240,4 @@
    */
   terminateDataPathRequest(CommandIdShort cmdId, uint32_t ndpInstanceId)
       generates (WifiStatus status);
-
-  /**
-   * Configure NAN Beacon or SDF payload to include vendor-specific payload.
-   *
-   * @param cmdId command Id to use for this invocation.
-   * @param msg Instance of |NanBeaconSdfPayloadRequest|.
-   * @return status WifiStatus of the operation.
-   *         Possible status codes:
-   *         |WifiStatusCode.SUCCESS|,
-   *         |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|,
-   *         |WifiStatusCode.ERROR_INVALID_ARGS|,
-   *         |WifiStatusCode.ERROR_UNKNOWN|
-   */
-  beaconSdfPayloadRequest(CommandIdShort cmdId, NanBeaconSdfPayloadRequest msg)
-      generates (WifiStatus status);
 };
diff --git a/wifi/1.0/IWifiNanIfaceEventCallback.hal b/wifi/1.0/IWifiNanIfaceEventCallback.hal
index cb4b043..c9fea8f 100644
--- a/wifi/1.0/IWifiNanIfaceEventCallback.hal
+++ b/wifi/1.0/IWifiNanIfaceEventCallback.hal
@@ -79,7 +79,7 @@
    *        |NanStatusType.INVALID_SESSION_ID|
    * @param sessionId ID of the new publish session (if successfully created).
    */
-  oneway notifyStartPublishResponse(CommandIdShort id, WifiNanStatus status, uint16_t sessionId);
+  oneway notifyStartPublishResponse(CommandIdShort id, WifiNanStatus status, uint8_t sessionId);
 
   /**
    * Callback invoked in response to a stop publish request |stopPublishRequest|.
@@ -104,7 +104,7 @@
    *        |NanStatusType.INVALID_SESSION_ID|
    * @param sessionId ID of the new subscribe session (if successfully created).
    */
-  oneway notifyStartSubscribeResponse(CommandIdShort id, WifiNanStatus status, uint16_t sessionId);
+  oneway notifyStartSubscribeResponse(CommandIdShort id, WifiNanStatus status, uint8_t sessionId);
 
   /**
    * Callback invoked in response to a stop subscribe request |stopSubscribeRequest|.
@@ -195,18 +195,6 @@
   oneway notifyTerminateDataPathResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
-   * Callback invoked in response to a request to include vendor-specific payload in beacon or SDF
-   * frames |beaconSdfPayloadRequest|.
-   *
-   * @param cmdId command Id corresponding to the original request.
-   * @param status WifiNanStatus of the operation. Possible status codes are:
-   *        |NanStatusType.SUCCESS|
-   *        |NanStatusType.INVALID_ARGS|
-   *        |NanStatusType.INTERNAL_FAILURE|
-   */
-  oneway notifyBeaconSdfPayloadResponse(CommandIdShort id, WifiNanStatus status);
-
-  /**
    * Callbacks for the various asynchornous NAN Events.
    */
 
@@ -235,7 +223,7 @@
    *                Possible status codes are:
    *                |NanStatusType.SUCCESS|
    */
-  oneway eventPublishTerminated(uint16_t sessionId, WifiNanStatus status);
+  oneway eventPublishTerminated(uint8_t sessionId, WifiNanStatus status);
 
   /**
    * Asynchronous callback indicating that an active subscribe session has terminated.
@@ -245,7 +233,7 @@
    *                 Possible status codes are:
    *                |NanStatusType.SUCCESS|
    */
-  oneway eventSubscribeTerminated(uint16_t sessionId, WifiNanStatus status);
+  oneway eventSubscribeTerminated(uint8_t sessionId, WifiNanStatus status);
 
   /**
    * Asynchronous callback indicating that a match has occurred: i.e. a service has been
@@ -261,7 +249,7 @@
    * @param discoverySessionId: The discovery session ID of the expired match.
    * @param peerId: The peer ID of the expired match.
    */
-  oneway eventMatchExpired(uint16_t discoverySessionId, uint32_t peerId);
+  oneway eventMatchExpired(uint8_t discoverySessionId, uint32_t peerId);
 
   /**
    * Asynchronous callback indicating that a followup message has been received from a peer.
@@ -303,11 +291,4 @@
    * @param ndpInstanceId: data-path ID of the terminated data-path.
    */
   oneway eventDataPathTerminated(uint32_t ndpInstanceId);
-
-  /**
-   * Asynchronous callback indicating vendor-specific payload received in NAN beacon or SDF frame.
-   *
-   * @param event: NanBeaconSdfPayloadInd containing event details.
-   */
-  oneway eventBeaconSdfPayload(NanBeaconSdfPayloadInd event);
 };
diff --git a/wifi/1.0/default/hidl_struct_util.cpp b/wifi/1.0/default/hidl_struct_util.cpp
index 7464b81..691f913 100644
--- a/wifi/1.0/default/hidl_struct_util.cpp
+++ b/wifi/1.0/default/hidl_struct_util.cpp
@@ -1177,30 +1177,6 @@
   return true;
 }
 
-bool convertHidlNanBeaconSdfPayloadRequestToLegacy(
-    const NanBeaconSdfPayloadRequest& hidl_request,
-    legacy_hal::NanBeaconSdfPayloadRequest* legacy_request) {
-  if (!legacy_request) {
-    LOG(ERROR) << "convertHidlNanBeaconSdfPayloadRequestToLegacy: legacy_request is null";
-    return false;
-  }
-  memset(legacy_request, 0, sizeof(legacy_hal::NanBeaconSdfPayloadRequest));
-
-  legacy_request->vsa.payload_transmit_flag = hidl_request.transmitInNext16dws ? 1 : 0;
-  legacy_request->vsa.tx_in_discovery_beacon = hidl_request.transmitInDiscoveryBeacon;
-  legacy_request->vsa.tx_in_sync_beacon = hidl_request.transmitInSyncBeacon;
-  legacy_request->vsa.tx_in_service_discovery = hidl_request.transmitInServiceDiscoveryFrame;
-  legacy_request->vsa.vendor_oui = hidl_request.vendorOui;
-  legacy_request->vsa.vsa_len = hidl_request.vsa.size();
-  if (legacy_request->vsa.vsa_len > NAN_MAX_VSA_DATA_LEN) {
-    LOG(ERROR) << "convertHidlNanBeaconSdfPayloadRequestToLegacy: vsa_len too long";
-    return false;
-  }
-  memcpy(legacy_request->vsa.vsa, hidl_request.vsa.data(), legacy_request->vsa.vsa_len);
-
-  return true;
-}
-
 bool convertHidlNanDataPathInitiatorRequestToLegacy(
     const NanInitiateDataPathRequest& hidl_request,
     legacy_hal::NanDataPathInitiatorRequest* legacy_request) {
@@ -1352,26 +1328,6 @@
   return true;
 }
 
-bool convertLegacyNanBeaconSdfPayloadIndToHidl(
-    const legacy_hal::NanBeaconSdfPayloadInd& legacy_ind,
-    NanBeaconSdfPayloadInd* hidl_ind) {
-  if (!hidl_ind) {
-    LOG(ERROR) << "convertLegacyNanBeaconSdfPayloadIndToHidl: hidl_ind is null";
-    return false;
-  }
-  hidl_ind->addr = hidl_array<uint8_t, 6>(legacy_ind.addr);
-  hidl_ind->isVsaReceived = legacy_ind.is_vsa_received == 1;
-  hidl_ind->vsaReceivedOnFrames = legacy_ind.vsa.vsa_received_on;
-  hidl_ind->vsaVendorOui = legacy_ind.vsa.vendor_oui;
-  hidl_ind->vsa = std::vector<uint8_t>(legacy_ind.vsa.vsa,
-        legacy_ind.vsa.vsa + legacy_ind.vsa.attr_len);
-  hidl_ind->isBeaconSdfPayloadReceived = legacy_ind.is_beacon_sdf_payload_received == 1;
-  hidl_ind->beaconSdfPayloadData = std::vector<uint8_t>(legacy_ind.data.frame_data,
-        legacy_ind.data.frame_data + legacy_ind.data.frame_len);
-
-  return true;
-}
-
 bool convertLegacyNanDataPathRequestIndToHidl(
     const legacy_hal::NanDataPathRequestInd& legacy_ind,
     NanDataPathRequestInd* hidl_ind) {
diff --git a/wifi/1.0/default/hidl_struct_util.h b/wifi/1.0/default/hidl_struct_util.h
index 14bc77d..490dcae 100644
--- a/wifi/1.0/default/hidl_struct_util.h
+++ b/wifi/1.0/default/hidl_struct_util.h
@@ -110,9 +110,6 @@
 bool convertHidlNanTransmitFollowupRequestToLegacy(
     const NanTransmitFollowupRequest& hidl_request,
     legacy_hal::NanTransmitFollowupRequest* legacy_request);
-bool convertHidlNanBeaconSdfPayloadRequestToLegacy(
-    const NanBeaconSdfPayloadRequest& hidl_request,
-    legacy_hal::NanBeaconSdfPayloadRequest* legacy_request);
 bool convertHidlNanDataPathInitiatorRequestToLegacy(
     const NanInitiateDataPathRequest& hidl_request,
     legacy_hal::NanDataPathInitiatorRequest* legacy_request);
@@ -135,9 +132,6 @@
 bool convertLegacyNanDataPathConfirmIndToHidl(
     const legacy_hal::NanDataPathConfirmInd& legacy_ind,
     NanDataPathConfirmInd* hidl_ind);
-bool convertLegacyNanBeaconSdfPayloadIndToHidl(
-    const legacy_hal::NanBeaconSdfPayloadInd& legacy_ind,
-    NanBeaconSdfPayloadInd* hidl_ind);
 
 // RTT controller conversion methods.
 bool convertHidlVectorOfRttConfigToLegacy(
diff --git a/wifi/1.0/default/wifi_nan_iface.cpp b/wifi/1.0/default/wifi_nan_iface.cpp
index 333fac7..8d76f91 100644
--- a/wifi/1.0/default/wifi_nan_iface.cpp
+++ b/wifi/1.0/default/wifi_nan_iface.cpp
@@ -120,14 +120,6 @@
         }
         break;
      }
-    case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD: {
-        for (const auto& callback : shared_ptr_this->event_callbacks_) {
-          if (!callback->notifyBeaconSdfPayloadResponse(id, wifiNanStatus).isOk()) {
-            LOG(ERROR) << "Failed to invoke the callback";
-          }
-        }
-        break;
-     }
     case legacy_hal::NAN_GET_CAPABILITIES: {
         NanCapabilities hidl_struct;
         if (!hidl_struct_util::convertLegacyNanCapabilitiesResponseToHidl(
@@ -183,6 +175,8 @@
         }
         break;
     }
+    case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD:
+        /* fall through */
     case legacy_hal::NAN_RESPONSE_TCA:
         /* fall through */
     case legacy_hal::NAN_RESPONSE_STATS:
@@ -402,24 +396,8 @@
   };
 
   callback_handlers.on_event_beacon_sdf_payload = [weak_ptr_this](
-        const legacy_hal::NanBeaconSdfPayloadInd& msg) {
-      const auto shared_ptr_this = weak_ptr_this.promote();
-      if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
-        LOG(ERROR) << "Callback invoked on an invalid object";
-        return;
-      }
-      NanBeaconSdfPayloadInd hidl_struct;
-      if (!hidl_struct_util::convertLegacyNanBeaconSdfPayloadIndToHidl(
-            msg, &hidl_struct)) {
-          LOG(ERROR) << "Failed to convert nan capabilities response";
-          return;
-      }
-
-      for (const auto& callback : shared_ptr_this->event_callbacks_) {
-        if (!callback->eventBeaconSdfPayload(hidl_struct).isOk()) {
-            LOG(ERROR) << "Failed to invoke the callback";
-        }
-      }
+        const legacy_hal::NanBeaconSdfPayloadInd& /* msg */) {
+      LOG(ERROR) << "on_event_beacon_sdf_payload - should not be called";
   };
 
   legacy_hal::wifi_error legacy_status =
@@ -517,7 +495,7 @@
 
 Return<void> WifiNanIface::stopPublishRequest(
     uint16_t cmd_id,
-    uint16_t sessionId,
+    uint8_t sessionId,
     stopPublishRequest_cb hidl_status_cb) {
   return validateAndCall(this,
                          WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
@@ -541,7 +519,7 @@
 
 Return<void> WifiNanIface::stopSubscribeRequest(
     uint16_t cmd_id,
-    uint16_t sessionId,
+    uint8_t sessionId,
     stopSubscribeRequest_cb hidl_status_cb) {
   return validateAndCall(this,
                          WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
@@ -621,18 +599,6 @@
                          ndpInstanceId);
 }
 
-Return<void> WifiNanIface::beaconSdfPayloadRequest(
-    uint16_t cmd_id,
-    const NanBeaconSdfPayloadRequest& msg,
-    beaconSdfPayloadRequest_cb hidl_status_cb) {
-  return validateAndCall(this,
-                         WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
-                         &WifiNanIface::beaconSdfPayloadRequestInternal,
-                         hidl_status_cb,
-                         cmd_id,
-                         msg);
-}
-
 std::pair<WifiStatus, std::string> WifiNanIface::getNameInternal() {
   return {createWifiStatus(WifiStatusCode::SUCCESS), ifname_};
 }
@@ -699,7 +665,7 @@
 }
 
 WifiStatus WifiNanIface::stopPublishRequestInternal(
-    uint16_t cmd_id, uint16_t sessionId) {
+    uint16_t cmd_id, uint8_t sessionId) {
   legacy_hal::NanPublishCancelRequest legacy_msg;
   legacy_msg.publish_id = sessionId;
   legacy_hal::wifi_error legacy_status =
@@ -720,7 +686,7 @@
 }
 
 WifiStatus WifiNanIface::stopSubscribeRequestInternal(
-    uint16_t cmd_id, uint16_t sessionId) {
+    uint16_t cmd_id, uint8_t sessionId) {
   legacy_hal::NanSubscribeCancelRequest legacy_msg;
   legacy_msg.subscribe_id = sessionId;
   legacy_hal::wifi_error legacy_status =
@@ -783,16 +749,6 @@
   free(legacy_msg);
   return createWifiStatusFromLegacyError(legacy_status);
 }
-WifiStatus WifiNanIface::beaconSdfPayloadRequestInternal(
-    uint16_t cmd_id, const NanBeaconSdfPayloadRequest& msg) {
-  legacy_hal::NanBeaconSdfPayloadRequest legacy_msg;
-  if (!hidl_struct_util::convertHidlNanBeaconSdfPayloadRequestToLegacy(msg, &legacy_msg)) {
-    return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
-  }
-  legacy_hal::wifi_error legacy_status =
-      legacy_hal_.lock()->nanBeaconSdfPayloadRequest(cmd_id, legacy_msg);
-  return createWifiStatusFromLegacyError(legacy_status);
-}
 
 }  // namespace implementation
 }  // namespace V1_0
diff --git a/wifi/1.0/default/wifi_nan_iface.h b/wifi/1.0/default/wifi_nan_iface.h
index 4fae3df..d1da60e 100644
--- a/wifi/1.0/default/wifi_nan_iface.h
+++ b/wifi/1.0/default/wifi_nan_iface.h
@@ -60,13 +60,13 @@
                                    const NanPublishRequest& msg,
                                    startPublishRequest_cb hidl_status_cb) override;
   Return<void> stopPublishRequest(uint16_t cmd_id,
-                                  uint16_t sessionId,
+                                  uint8_t sessionId,
                                   stopPublishRequest_cb hidl_status_cb) override;
   Return<void> startSubscribeRequest(uint16_t cmd_id,
                                      const NanSubscribeRequest& msg,
                                     startSubscribeRequest_cb hidl_status_cb) override;
   Return<void> stopSubscribeRequest(uint16_t cmd_id,
-                                    uint16_t sessionId,
+                                    uint8_t sessionId,
                                     stopSubscribeRequest_cb hidl_status_cb) override;
   Return<void> transmitFollowupRequest(uint16_t cmd_id,
                                        const NanTransmitFollowupRequest& msg,
@@ -87,9 +87,6 @@
   Return<void> terminateDataPathRequest(uint16_t cmd_id,
                                         uint32_t ndpInstanceId,
                                         terminateDataPathRequest_cb hidl_status_cb) override;
-  Return<void> beaconSdfPayloadRequest(uint16_t cmd_id,
-                                       const NanBeaconSdfPayloadRequest& msg,
-                                       beaconSdfPayloadRequest_cb hidl_status_cb) override;
 
  private:
   // Corresponding worker functions for the HIDL methods.
@@ -105,10 +102,10 @@
   WifiStatus disableRequestInternal(uint16_t cmd_id);
   WifiStatus startPublishRequestInternal(uint16_t cmd_id,
                                          const NanPublishRequest& msg);
-  WifiStatus stopPublishRequestInternal(uint16_t cmd_id, uint16_t sessionId);
+  WifiStatus stopPublishRequestInternal(uint16_t cmd_id, uint8_t sessionId);
   WifiStatus startSubscribeRequestInternal(uint16_t cmd_id,
                                            const NanSubscribeRequest& msg);
-  WifiStatus stopSubscribeRequestInternal(uint16_t cmd_id, uint16_t sessionId);
+  WifiStatus stopSubscribeRequestInternal(uint16_t cmd_id, uint8_t sessionId);
   WifiStatus transmitFollowupRequestInternal(
       uint16_t cmd_id, const NanTransmitFollowupRequest& msg);
   WifiStatus createDataInterfaceRequestInternal(uint16_t cmd_id,
@@ -121,8 +118,6 @@
       uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg);
   WifiStatus terminateDataPathRequestInternal(
       uint16_t cmd_id, uint32_t ndpInstanceId);
-  WifiStatus beaconSdfPayloadRequestInternal(
-      uint16_t cmd_id, const NanBeaconSdfPayloadRequest& msg);
 
   std::string ifname_;
   std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
diff --git a/wifi/1.0/types.hal b/wifi/1.0/types.hal
index 1ec1357..c4bdc23 100644
--- a/wifi/1.0/types.hal
+++ b/wifi/1.0/types.hal
@@ -867,7 +867,7 @@
    * The ID of the discovery session being configured. A value of 0 specifies a request to create
    * a new discovery session.
    */
-  uint16_t sessionId;
+  uint8_t sessionId;
   /**
    * The lifetime of the discovery session in seconds. A value of 0 means run forever or until
    * canceled.
@@ -1042,7 +1042,7 @@
    * ID of an active publish or subscribe discovery session. Follow-up message is transmitted in the
    * context of the discovery session.
    */
-  uint16_t discoverySessionId;
+  uint8_t discoverySessionId;
   /**
    * ID of the peer. Obtained as part of an earlier |eventMatch| or |eventFollowupReceived|.
    */
@@ -1159,31 +1159,6 @@
 };
 
 /**
- * Specifies vendor-specific information fields to be included in NAN management frames.
- */
-struct NanBeaconSdfPayloadRequest {
-  /**
-   * If true information is transmitted in next 16 DWs, else only in the next (1) DW.
-   */
-  bool transmitInNext16dws;
-  /**
-   * Specify the management frames in which the vendor-specific information is included.
-   */
-  bool transmitInDiscoveryBeacon;
-  bool transmitInSyncBeacon;
-  bool transmitInServiceDiscoveryFrame;
-  /**
-   * Organizationally Unique Identifier (OUI).
-   */
-  uint32_t vendorOui;
-  /**
-   * Vendor specific attribute to be transmitted.
-   * Max length: |NanCapabilities.maxVsaDataLen|.
-   */
-  vec<uint8_t> vsa;
-};
-
-/**
  * NDP Capabilities response.
  */
 struct NanCapabilities {
@@ -1253,7 +1228,7 @@
   /**
    * Publish or subscribe discovery session ID of an existing discovery session.
    */
-  uint16_t discoverySessionId;
+  uint8_t discoverySessionId;
   /**
    * A unique ID of the peer. Can be subsequently used in |transmitFollowupRequest|.
    */
@@ -1338,7 +1313,7 @@
    * Discovery session (publish or subscribe) ID of a previously created discovery session. The
    * message is received in the context of this discovery session.
    */
-  uint16_t discoverySessionId;
+  uint8_t discoverySessionId;
   /**
    * A unique ID of the peer. Can be subsequently used in |transmitFollowupRequest|.
    */
@@ -1394,54 +1369,6 @@
 };
 
 /**
- * Mask to determine on which frames the vendor-specific attribute (VSA) was received on.
- */
-enum NanVsaRxFrameMask: uint32_t {
-  DISCOVERY_BEACON_MASK = 1 << 0,
-  SYNC_BEACON_MASK = 1 << 1,
-  SERVICE_DISCOVERY_MASK = 1 << 2
-};
-
-/**
- * NAN Beacon or SDF Payload Indication Message structure.
- * The BeaconSdfPayloadInd message indicates to the upper layers that information
- * elements were received either in a Beacon or SDF which needs to be delivered
- * outside of a Publish/Subscribe Handle.
- */
-struct NanBeaconSdfPayloadInd {
-  /**
-   * The MAC address of the peer which sent the attributes.
-   */
-  MacAddress addr;
-  /**
-   * A flag indicating whether a vendor-specific attribute (VSA) has been received.
-   */
-  bool isVsaReceived;
-  /**
-   * Frames on which this vendor specific attribute was received.
-   * Mask |NanVsaRxFrameMask| defined above.
-   */
-  bitfield<NanVsaRxFrameMask> vsaReceivedOnFrames;
-  /**
-   * Organizationally Unique Identifier (OUI) of the vendor-specific attribute.
-   */
-  uint32_t vsaVendorOui;
-  /**
-   * Contents of the vendor specific attribute.
-   * Max length: |NanCapabilities.maxVsaDataLen|.
-   */
-  vec<uint8_t> vsa;
-  /**
-   * A flag indicating whether a NAN beacon or SDF payload has been received.
-   */
-  bool isBeaconSdfPayloadReceived;
-  /**
-   * The contents of the NAN beacon or SDF payload.
-   */
-  vec<uint8_t> beaconSdfPayloadData;
-};
-
-/**
  * NAN Data path request Indication Message structure.
  * Event indication received by an intended Responder when a Nan Data request initiated by an
  * Initiator.
@@ -1451,7 +1378,7 @@
    * ID of an active publish or subscribe discovery session - the data-path request is in the
    * context of this discovery session.
    */
-  uint16_t discoverySessionId;
+  uint8_t discoverySessionId;
   /**
    * MAC address of the Initiator peer. This is the MAC address of the peer's management/discovery
    * NAN interface.
diff --git a/wifi/1.0/vts/WifiNanIface.vts b/wifi/1.0/vts/WifiNanIface.vts
index 663b526..c06f985 100644
--- a/wifi/1.0/vts/WifiNanIface.vts
+++ b/wifi/1.0/vts/WifiNanIface.vts
@@ -259,20 +259,4 @@
         }
     }
 
-    api: {
-        name: "beaconSdfPayloadRequest"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiStatus"
-        }
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanBeaconSdfPayloadRequest"
-        }
-    }
-
 }
diff --git a/wifi/1.0/vts/WifiNanIfaceEventCallback.vts b/wifi/1.0/vts/WifiNanIfaceEventCallback.vts
index 30ca88a..02d04ac 100644
--- a/wifi/1.0/vts/WifiNanIfaceEventCallback.vts
+++ b/wifi/1.0/vts/WifiNanIfaceEventCallback.vts
@@ -192,18 +192,6 @@
     }
 
     api: {
-        name: "notifyBeaconSdfPayloadResponse"
-        arg: {
-            type: TYPE_SCALAR
-            scalar_type: "uint16_t"
-        }
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::WifiNanStatus"
-        }
-    }
-
-    api: {
         name: "eventClusterEvent"
         arg: {
             type: TYPE_STRUCT
@@ -307,12 +295,4 @@
         }
     }
 
-    api: {
-        name: "eventBeaconSdfPayload"
-        arg: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::wifi::V1_0::NanBeaconSdfPayloadInd"
-        }
-    }
-
 }
diff --git a/wifi/1.0/vts/types.vts b/wifi/1.0/vts/types.vts
index fd60d4e..fc52b69 100644
--- a/wifi/1.0/vts/types.vts
+++ b/wifi/1.0/vts/types.vts
@@ -1513,44 +1513,6 @@
 }
 
 attribute: {
-    name: "::android::hardware::wifi::V1_0::NanBeaconSdfPayloadRequest"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "transmitInNext16dws"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "transmitInDiscoveryBeacon"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "transmitInSyncBeacon"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "transmitInServiceDiscoveryFrame"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "vendorOui"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "vsa"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
     name: "::android::hardware::wifi::V1_0::NanCapabilities"
     type: TYPE_STRUCT
     struct_value: {
@@ -1804,56 +1766,6 @@
 }
 
 attribute: {
-    name: "::android::hardware::wifi::V1_0::NanBeaconSdfPayloadInd"
-    type: TYPE_STRUCT
-    struct_value: {
-        name: "addr"
-        type: TYPE_ARRAY
-        vector_value: {
-            vector_size: 6
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "isVsaReceived"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "vsaReceivedOnFrames"
-        type: TYPE_MASK
-        predefined_type: "::android::hardware::wifi::V1_0::NanVsaRxFrameMask"
-    }
-    struct_value: {
-        name: "vsaVendorOui"
-        type: TYPE_SCALAR
-        scalar_type: "uint32_t"
-    }
-    struct_value: {
-        name: "vsa"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-    struct_value: {
-        name: "isBeaconSdfPayloadReceived"
-        type: TYPE_SCALAR
-        scalar_type: "bool_t"
-    }
-    struct_value: {
-        name: "beaconSdfPayloadData"
-        type: TYPE_VECTOR
-        vector_value: {
-            type: TYPE_SCALAR
-            scalar_type: "uint8_t"
-        }
-    }
-}
-
-attribute: {
     name: "::android::hardware::wifi::V1_0::NanDataPathRequestInd"
     type: TYPE_STRUCT
     struct_value: {
diff --git a/wifi/supplicant/1.0/Android.bp b/wifi/supplicant/1.0/Android.bp
index b985a93..a6c2758 100644
--- a/wifi/supplicant/1.0/Android.bp
+++ b/wifi/supplicant/1.0/Android.bp
@@ -24,19 +24,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.supplicant@1.0",
     srcs: [
-        "types.hal",
-        "ISupplicant.hal",
-        "ISupplicantCallback.hal",
-        "ISupplicantIface.hal",
-        "ISupplicantNetwork.hal",
-        "ISupplicantP2pIface.hal",
-        "ISupplicantP2pIfaceCallback.hal",
-        "ISupplicantP2pNetwork.hal",
-        "ISupplicantP2pNetworkCallback.hal",
-        "ISupplicantStaIface.hal",
-        "ISupplicantStaIfaceCallback.hal",
-        "ISupplicantStaNetwork.hal",
-        "ISupplicantStaNetworkCallback.hal",
+        ":android.hardware.wifi.supplicant@1.0_hal",
     ],
     out: [
         "android/hardware/wifi/supplicant/1.0/types.cpp",
@@ -60,19 +48,7 @@
     tools: ["hidl-gen"],
     cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.supplicant@1.0",
     srcs: [
-        "types.hal",
-        "ISupplicant.hal",
-        "ISupplicantCallback.hal",
-        "ISupplicantIface.hal",
-        "ISupplicantNetwork.hal",
-        "ISupplicantP2pIface.hal",
-        "ISupplicantP2pIfaceCallback.hal",
-        "ISupplicantP2pNetwork.hal",
-        "ISupplicantP2pNetworkCallback.hal",
-        "ISupplicantStaIface.hal",
-        "ISupplicantStaIfaceCallback.hal",
-        "ISupplicantStaNetwork.hal",
-        "ISupplicantStaNetworkCallback.hal",
+        ":android.hardware.wifi.supplicant@1.0_hal",
     ],
     out: [
         "android/hardware/wifi/supplicant/1.0/types.h",
diff --git a/wifi/supplicant/1.0/Android.mk b/wifi/supplicant/1.0/Android.mk
index ad49b0a..dd210d0 100644
--- a/wifi/supplicant/1.0/Android.mk
+++ b/wifi/supplicant/1.0/Android.mk
@@ -8,7 +8,7 @@
 LOCAL_MODULE := android.hardware.wifi.supplicant@1.0-java
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
@@ -387,7 +387,7 @@
 LOCAL_MODULE := android.hardware.wifi.supplicant@1.0-java-static
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 
-intermediates := $(local-generated-sources-dir)
+intermediates := $(call local-generated-sources-dir, COMMON)
 
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)