Merge "Update gatekeeper makefile with profiler."
diff --git a/camera/common/1.0/default/CameraModule.cpp b/camera/common/1.0/default/CameraModule.cpp
index 5d9ae4d..3a4bc9c 100644
--- a/camera/common/1.0/default/CameraModule.cpp
+++ b/camera/common/1.0/default/CameraModule.cpp
@@ -369,9 +369,11 @@
 }
 
 int CameraModule::setCallbacks(const camera_module_callbacks_t *callbacks) {
-    int res;
+    int res = OK;
     ATRACE_BEGIN("camera_module->set_callbacks");
-    res = mModule->set_callbacks(callbacks);
+    if (getModuleApiVersion() >= CAMERA_MODULE_API_VERSION_2_1) {
+        res = mModule->set_callbacks(callbacks);
+    }
     ATRACE_END();
     return res;
 }
diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp
index 1a34aa6..f1a66a8 100644
--- a/camera/provider/2.4/default/CameraProvider.cpp
+++ b/camera/provider/2.4/default/CameraProvider.cpp
@@ -184,13 +184,20 @@
     mModule = new CameraModule(rawModule);
     err = mModule->init();
     if (err != OK) {
-        ALOGE("Could not initialize camera HAL module: %d (%s)", err,
-            strerror(-err));
+        ALOGE("Could not initialize camera HAL module: %d (%s)", err, strerror(-err));
         mModule.clear();
         return true;
     }
     ALOGI("Loaded \"%s\" camera module", mModule->getModuleName());
 
+    // Setup callback now because we are going to try openLegacy next
+    err = mModule->setCallbacks(this);
+    if (err != OK) {
+        ALOGE("Could not set camera module callback: %d (%s)", err, strerror(-err));
+        mModule.clear();
+        return true;
+    }
+
     mNumberOfLegacyCameras = mModule->getNumberOfCameras();
     for (int i = 0; i < mNumberOfLegacyCameras; i++) {
         char cameraId[kMaxCameraIdLen];
@@ -289,11 +296,9 @@
 
 // Methods from ::android::hardware::camera::provider::V2_4::ICameraProvider follow.
 Return<Status> CameraProvider::setCallback(const sp<ICameraProviderCallback>& callback)  {
-    {
-        Mutex::Autolock _l(mCbLock);
-        mCallbacks = callback;
-    } // release lock here because HAL might send callbacks in setCallbacks call
-    return getHidlStatus(mModule->setCallbacks(this));
+    Mutex::Autolock _l(mCbLock);
+    mCallbacks = callback;
+    return Status::OK;
 }
 
 Return<void> CameraProvider::getVendorTags(getVendorTags_cb _hidl_cb)  {
@@ -320,8 +325,9 @@
 }
 
 Return<void> CameraProvider::getCameraDeviceInterface_V1_x(
-        const hidl_string& /*cameraDeviceName*/, getCameraDeviceInterface_V1_x_cb /*_hidl_cb*/)  {
+        const hidl_string& /*cameraDeviceName*/, getCameraDeviceInterface_V1_x_cb _hidl_cb)  {
     // TODO implement after device 1.0 is implemented
+    _hidl_cb(Status::INTERNAL_ERROR, nullptr);
     return Void();
 }
 
diff --git a/camera/provider/2.4/default/service.cpp b/camera/provider/2.4/default/service.cpp
index 2723dee..9600559 100644
--- a/camera/provider/2.4/default/service.cpp
+++ b/camera/provider/2.4/default/service.cpp
@@ -20,6 +20,7 @@
 #include <CameraProvider.h>
 
 #include <hidl/HidlTransportSupport.h>
+#include <hidl/LegacySupport.h>
 #include <utils/StrongPointer.h>
 
 using android::hardware::configureRpcThreadpool;
@@ -32,6 +33,11 @@
 {
     const char instance[] = "legacy/0";
 
+    // TODO(b/34817742): use defaultServicePassthroughImplementation
+    // so that the toggle is implemented correctly
+    using ::android::hardware::details::blockIfBinderizationDisabled;
+    blockIfBinderizationDisabled(ICameraProvider::descriptor, instance);
+
     ALOGI("Camera provider Service is starting.");
 
     configureRpcThreadpool(1, true /* callerWillJoin */);
diff --git a/configstore/1.0/Android.bp b/configstore/1.0/Android.bp
new file mode 100644
index 0000000..06fcbd9
--- /dev/null
+++ b/configstore/1.0/Android.bp
@@ -0,0 +1,56 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+genrule {
+    name: "android.hardware.configstore@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0",
+    srcs: [
+        "types.hal",
+        "ISurfaceFlingerConfigs.hal",
+    ],
+    out: [
+        "android/hardware/configstore/1.0/types.cpp",
+        "android/hardware/configstore/1.0/SurfaceFlingerConfigsAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.configstore@1.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0",
+    srcs: [
+        "types.hal",
+        "ISurfaceFlingerConfigs.hal",
+    ],
+    out: [
+        "android/hardware/configstore/1.0/types.h",
+        "android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h",
+        "android/hardware/configstore/1.0/IHwSurfaceFlingerConfigs.h",
+        "android/hardware/configstore/1.0/BnHwSurfaceFlingerConfigs.h",
+        "android/hardware/configstore/1.0/BpHwSurfaceFlingerConfigs.h",
+        "android/hardware/configstore/1.0/BsSurfaceFlingerConfigs.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.configstore@1.0",
+    generated_sources: ["android.hardware.configstore@1.0_genc++"],
+    generated_headers: ["android.hardware.configstore@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.configstore@1.0_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/configstore/1.0/Android.mk b/configstore/1.0/Android.mk
new file mode 100644
index 0000000..fd2718e
--- /dev/null
+++ b/configstore/1.0/Android.mk
@@ -0,0 +1,308 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.configstore@1.0-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java \
+
+
+#
+# Build types.hal (OptionalBool)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalBool.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalBool
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalInt32)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt32.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalInt32
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalInt64)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt64.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalInt64
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalString)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalString.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalString
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalUInt32)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt32.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalUInt32
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalUInt64)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt64.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalUInt64
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build ISurfaceFlingerConfigs.hal
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/ISurfaceFlingerConfigs.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::ISurfaceFlingerConfigs
+
+$(GEN): $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.configstore@1.0-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hidl.base@1.0-java-static \
+
+
+#
+# Build types.hal (OptionalBool)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalBool.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalBool
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalInt32)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt32.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalInt32
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalInt64)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt64.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalInt64
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalString)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalString.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalString
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalUInt32)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt32.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalUInt32
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (OptionalUInt64)
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt64.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::types.OptionalUInt64
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build ISurfaceFlingerConfigs.hal
+#
+GEN := $(intermediates)/android/hardware/configstore/V1_0/ISurfaceFlingerConfigs.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.configstore@1.0::ISurfaceFlingerConfigs
+
+$(GEN): $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/configstore/1.0/ISurfaceFlingerConfigs.hal b/configstore/1.0/ISurfaceFlingerConfigs.hal
new file mode 100644
index 0000000..97dc915
--- /dev/null
+++ b/configstore/1.0/ISurfaceFlingerConfigs.hal
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.hardware.configstore@1.0;
+
+interface ISurfaceFlingerConfigs {
+    vsyncEventPhaseOffsetNs() generates (OptionalInt64 value);
+};
diff --git a/configstore/1.0/default/Android.mk b/configstore/1.0/default/Android.mk
new file mode 100644
index 0000000..5de3451
--- /dev/null
+++ b/configstore/1.0/default/Android.mk
@@ -0,0 +1,40 @@
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.configstore@1.0-impl
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_MODULE_RELATIVE_PATH := hw
+
+include $(LOCAL_PATH)/surfaceflinger.mk
+
+LOCAL_SHARED_LIBRARIES := \
+    libbase \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    libutils \
+    android.hardware.configstore@1.0 \
+    android.hidl.base@1.0
+
+include $(BUILD_SHARED_LIBRARY)
+
+################################################################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.configstore@1.0-service
+LOCAL_MODULE_CLASS := EXECUTABLES
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_INIT_RC := android.hardware.configstore@1.0-service.rc
+LOCAL_SRC_FILES:= service.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog \
+    libdl \
+    libutils \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    android.hardware.configstore@1.0 \
+
+include $(BUILD_EXECUTABLE)
+
diff --git a/configstore/1.0/default/SurfaceFlingerConfigs.cpp b/configstore/1.0/default/SurfaceFlingerConfigs.cpp
new file mode 100644
index 0000000..fc75182
--- /dev/null
+++ b/configstore/1.0/default/SurfaceFlingerConfigs.cpp
@@ -0,0 +1,33 @@
+#include "SurfaceFlingerConfigs.h"
+
+#include <android-base/logging.h>
+
+namespace android {
+namespace hardware {
+namespace configstore {
+namespace V1_0 {
+namespace implementation {
+
+// Methods from ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs follow.
+Return<void> SurfaceFlingerConfigs::vsyncEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb) {
+#ifdef VSYNC_EVENT_PHASE_OFFSET_NS
+    _hidl_cb({true, VSYNC_EVENT_PHASE_OFFSET_NS});
+    LOG(INFO) << "vsync event phase offset ns =  " << VSYNC_EVENT_PHASE_OFFSET_NS;
+#else
+    _hidl_cb({false, 0});
+#endif
+    return Void();
+}
+
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+ISurfaceFlingerConfigs* HIDL_FETCH_ISurfaceFlingerConfigs(const char* /* name */) {
+    return new SurfaceFlingerConfigs();
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace configstore
+}  // namespace hardware
+}  // namespace android
diff --git a/configstore/1.0/default/SurfaceFlingerConfigs.h b/configstore/1.0/default/SurfaceFlingerConfigs.h
new file mode 100644
index 0000000..5c754a0
--- /dev/null
+++ b/configstore/1.0/default/SurfaceFlingerConfigs.h
@@ -0,0 +1,41 @@
+#ifndef ANDROID_HARDWARE_CONFIGSTORE_V1_0_SURFACEFLINGERCONFIGS_H
+#define ANDROID_HARDWARE_CONFIGSTORE_V1_0_SURFACEFLINGERCONFIGS_H
+
+#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace configstore {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs;
+using ::android::hardware::configstore::V1_0::OptionalBool;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct SurfaceFlingerConfigs : public ISurfaceFlingerConfigs {
+    // Methods from ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs follow.
+    Return<void> vsyncEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb) override;
+
+    // Methods from ::android::hidl::base::V1_0::IBase follow.
+
+};
+
+extern "C" ISurfaceFlingerConfigs* HIDL_FETCH_ISurfaceFlingerConfigs(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace configstore
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_CONFIGSTORE_V1_0_SURFACEFLINGERCONFIGS_H
diff --git a/configstore/1.0/default/android.hardware.configstore@1.0-service.rc b/configstore/1.0/default/android.hardware.configstore@1.0-service.rc
new file mode 100644
index 0000000..2e303b0
--- /dev/null
+++ b/configstore/1.0/default/android.hardware.configstore@1.0-service.rc
@@ -0,0 +1,4 @@
+service configstore-hal-1-0 /system/bin/hw/android.hardware.configstore@1.0-service
+    class hal
+    user system
+    group system
diff --git a/configstore/1.0/default/service.cpp b/configstore/1.0/default/service.cpp
new file mode 100644
index 0000000..caec0ba
--- /dev/null
+++ b/configstore/1.0/default/service.cpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "android.hardware.configstore@1.0-service"
+
+#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
+#include <hidl/LegacySupport.h>
+
+using android::hardware::configstore::V1_0::ISurfaceFlingerConfigs;
+using android::hardware::configureRpcThreadpool;
+using android::hardware::registerPassthroughServiceImplementation;
+using android::hardware::joinRpcThreadpool;
+
+int main() {
+    // TODO(b/34857894): tune the max thread count.
+    configureRpcThreadpool(10, true);
+    registerPassthroughServiceImplementation<ISurfaceFlingerConfigs>();
+    // other interface registration comes here
+    joinRpcThreadpool();
+    return 0;
+}
diff --git a/configstore/1.0/default/surfaceflinger.mk b/configstore/1.0/default/surfaceflinger.mk
new file mode 100644
index 0000000..42fa191
--- /dev/null
+++ b/configstore/1.0/default/surfaceflinger.mk
@@ -0,0 +1,6 @@
+
+LOCAL_SRC_FILES += SurfaceFlingerConfigs.cpp
+
+ifneq ($(VSYNC_EVENT_PHASE_OFFSET_NS),)
+    LOCAL_CFLAGS += -DVSYNC_EVENT_PHASE_OFFSET_NS=$(VSYNC_EVENT_PHASE_OFFSET_NS)
+endif
diff --git a/configstore/1.0/types.hal b/configstore/1.0/types.hal
new file mode 100644
index 0000000..49e9bef
--- /dev/null
+++ b/configstore/1.0/types.hal
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.hardware.configstore@1.0;
+
+struct OptionalBool {
+    bool specified;
+    bool value;
+};
+
+struct OptionalInt32 {
+    bool specified;
+    int32_t value;
+};
+
+struct OptionalUInt32 {
+    bool specified;
+    uint32_t value;
+};
+
+struct OptionalInt64 {
+    bool specified;
+    int64_t value;
+};
+
+struct OptionalUInt64 {
+    bool specified;
+    uint64_t value;
+};
+
+struct OptionalString {
+    bool specified;
+    string value;
+};
diff --git a/configstore/Android.bp b/configstore/Android.bp
new file mode 100644
index 0000000..bbb3e4b
--- /dev/null
+++ b/configstore/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+]
diff --git a/power/1.0/types.hal b/power/1.0/types.hal
index c27242e..debdc35 100644
--- a/power/1.0/types.hal
+++ b/power/1.0/types.hal
@@ -76,15 +76,6 @@
     * it has been launched.
     */
     LAUNCH = 0x00000008,
-
-   /*
-    * When device enters some special modes, e.g. theater mode in Android
-    * Wear, there is no touch interaction expected between device and user.
-    * Touch controller could be disabled in those modes to save power.
-    * The data parameter is non-zero when touch could be disabled, and zero
-    * when touch needs to be re-enabled.
-    */
-    DISABLE_TOUCH = 0x00000009
 };
 
 enum Feature : uint32_t {
diff --git a/power/1.0/vts/functional/power_hidl_hal_test.cpp b/power/1.0/vts/functional/power_hidl_hal_test.cpp
index 3f0ef56..b114944 100644
--- a/power/1.0/vts/functional/power_hidl_hal_test.cpp
+++ b/power/1.0/vts/functional/power_hidl_hal_test.cpp
@@ -62,7 +62,7 @@
                 PowerHint::VIDEO_ENCODE,  PowerHint::VIDEO_DECODE,
                 PowerHint::LOW_POWER,     PowerHint::SUSTAINED_PERFORMANCE,
                 PowerHint::VR_MODE,       PowerHint::LAUNCH,
-                PowerHint::DISABLE_TOUCH, badHint};
+                badHint};
   Return<void> ret;
   for (auto hint : hints) {
     ret = power->powerHint(hint, 1);
diff --git a/power/1.0/vts/types.vts b/power/1.0/vts/types.vts
index 94c003b..5724946 100644
--- a/power/1.0/vts/types.vts
+++ b/power/1.0/vts/types.vts
@@ -43,10 +43,6 @@
         scalar_value: {
             uint32_t: 8
         }
-        enumerator: "DISABLE_TOUCH"
-        scalar_value: {
-            uint32_t: 9
-        }
     }
 }
 
diff --git a/vr/1.0/default/Android.bp b/vr/1.0/default/Android.bp
index d100570..da8a754 100644
--- a/vr/1.0/default/Android.bp
+++ b/vr/1.0/default/Android.bp
@@ -15,3 +15,20 @@
         "android.hardware.vr@1.0",
     ],
 }
+
+cc_binary {
+    relative_install_path: "hw",
+    name: "android.hardware.vr@1.0-service",
+    init_rc: ["android.hardware.vr@1.0-service.rc"],
+    srcs: ["service.cpp"],
+    shared_libs: [
+        "liblog",
+        "libdl",
+        "libutils",
+        "libhardware",
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "android.hardware.vr@1.0",
+    ],
+}
diff --git a/wifi/1.0/IWifiNanIfaceEventCallback.hal b/wifi/1.0/IWifiNanIfaceEventCallback.hal
index 906d673..cb4b043 100644
--- a/wifi/1.0/IWifiNanIfaceEventCallback.hal
+++ b/wifi/1.0/IWifiNanIfaceEventCallback.hal
@@ -162,8 +162,10 @@
    *        |NanStatusType.INTERNAL_FAILURE|
    *        |NanStatusType.PROTOCOL_FAILURE|
    *        |NanStatusType.INVALID_PEER_ID|
+   * @param ndpInstanceId ID of the new data path being negotiated (on successful status).
    */
-  oneway notifyInitiateDataPathResponse(CommandIdShort id, WifiNanStatus status);
+  oneway notifyInitiateDataPathResponse(CommandIdShort id, WifiNanStatus status,
+        uint32_t ndpInstanceId );
 
   /**
    * Callback invoked in response to a respond to data path indication request
@@ -176,10 +178,8 @@
    *        |NanStatusType.INTERNAL_FAILURE|
    *        |NanStatusType.PROTOCOL_FAILURE|
    *        |NanStatusType.INVALID_NDP_ID|
-   * @param ndpInstanceId ID of the new data path being negotiated (on successful status).
    */
-  oneway notifyRespondToDataPathIndicationResponse(CommandIdShort id, WifiNanStatus status,
-                                                   uint32_t ndpInstanceId);
+  oneway notifyRespondToDataPathIndicationResponse(CommandIdShort id, WifiNanStatus status);
 
   /**
    * Callback invoked in response to a terminate data path request |terminateDataPathRequest|.
diff --git a/wifi/1.0/default/hidl_struct_util.cpp b/wifi/1.0/default/hidl_struct_util.cpp
index 37fcfea..7464b81 100644
--- a/wifi/1.0/default/hidl_struct_util.cpp
+++ b/wifi/1.0/default/hidl_struct_util.cpp
@@ -759,17 +759,17 @@
     const NanEnableRequest& hidl_request,
     legacy_hal::NanEnableRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: null legacy_request";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanEnableRequest));
 
-  // TODO: b/34059183 tracks missing configurations in legacy HAL or uknown defaults
   legacy_request->config_2dot4g_support = 1;
   legacy_request->support_2dot4g_val = hidl_request.operateInBand[
         (size_t) NanBandIndex::NAN_BAND_24GHZ];
   legacy_request->config_support_5g = 1;
   legacy_request->support_5g_val = hidl_request.operateInBand[(size_t) NanBandIndex::NAN_BAND_5GHZ];
-  legacy_request->config_hop_count_limit = 0; // TODO: don't know default yet
+  legacy_request->config_hop_count_limit = 1;
   legacy_request->hop_count_limit_val = hidl_request.hopCountMax;
   legacy_request->master_pref = hidl_request.configParams.masterPref;
   legacy_request->discovery_indication_cfg = 0;
@@ -781,11 +781,12 @@
         hidl_request.configParams.disableJoinedClusterIndication ? 0x4 : 0x0;
   legacy_request->config_sid_beacon = 1;
   if (hidl_request.configParams.numberOfServiceIdsInBeacon > 127) {
+    LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: numberOfServiceIdsInBeacon > 127";
     return false;
   }
   legacy_request->sid_beacon_val = (hidl_request.configParams.includeServiceIdsInBeacon ? 0x1 : 0x0)
         | (hidl_request.configParams.numberOfServiceIdsInBeacon << 1);
-  legacy_request->config_rssi_window_size = 0; // TODO: don't know default yet
+  legacy_request->config_rssi_window_size = 1;
   legacy_request->rssi_window_size_val = hidl_request.configParams.rssiWindowSize;
   legacy_request->config_disc_mac_addr_randomization = 1;
   legacy_request->disc_mac_addr_rand_interval_sec =
@@ -793,19 +794,23 @@
   legacy_request->config_responder_auto_response = 1;
   legacy_request->ranging_auto_response_cfg = hidl_request.configParams.acceptRangingRequests ?
        legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE;
-  legacy_request->config_2dot4g_rssi_close = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_close = 1;
+  if (hidl_request.configParams.bandSpecificConfig.size() != 2) {
+    LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: bandSpecificConfig.size() != 2";
+    return false;
+  }
   legacy_request->rssi_close_2dot4g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiClose;
-  legacy_request->config_2dot4g_rssi_middle = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_middle = 1;
   legacy_request->rssi_middle_2dot4g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiMiddle;
-  legacy_request->config_2dot4g_rssi_proximity = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_proximity = 1;
   legacy_request->rssi_proximity_2dot4g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiProximity;
-  legacy_request->config_scan_params = 0; // TODO: don't know default yet
+  legacy_request->config_scan_params = 1;
   legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_24G_BAND] =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].dwellTimeMs;
@@ -816,15 +821,15 @@
         .bandSpecificConfig[(size_t) NanBandIndex::NAN_BAND_24GHZ].validDiscoveryWindowIntervalVal;
   legacy_request->config_dw.dw_2dot4g_interval_val = hidl_request.configParams
         .bandSpecificConfig[(size_t) NanBandIndex::NAN_BAND_24GHZ].discoveryWindowIntervalVal;
-  legacy_request->config_5g_rssi_close = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_close = 1;
   legacy_request->rssi_close_5g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiClose;
-  legacy_request->config_5g_rssi_middle = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_middle = 1;
   legacy_request->rssi_middle_5g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiMiddle;
-  legacy_request->config_5g_rssi_close_proximity = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_close_proximity = 1;
   legacy_request->rssi_close_proximity_5g_val =
         hidl_request.configParams.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiProximity;
@@ -885,6 +890,7 @@
     const NanPublishRequest& hidl_request,
     legacy_hal::NanPublishRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: null legacy_request";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanPublishRequest));
@@ -895,14 +901,16 @@
   legacy_request->publish_count = hidl_request.baseConfigs.discoveryCount;
   legacy_request->service_name_len = hidl_request.baseConfigs.serviceName.size();
   if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: service_name_len too large";
     return false;
   }
-  memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.c_str(),
+  memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.data(),
         legacy_request->service_name_len);
   legacy_request->publish_match_indicator =
         (legacy_hal::NanMatchAlg) hidl_request.baseConfigs.discoveryMatchIndicator;
   legacy_request->service_specific_info_len = hidl_request.baseConfigs.serviceSpecificInfo.size();
   if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: service_specific_info_len too large";
     return false;
   }
   memcpy(legacy_request->service_specific_info,
@@ -910,6 +918,7 @@
         legacy_request->service_specific_info_len);
   legacy_request->rx_match_filter_len = hidl_request.baseConfigs.rxMatchFilter.size();
   if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: rx_match_filter_len too large";
     return false;
   }
   memcpy(legacy_request->rx_match_filter,
@@ -917,6 +926,7 @@
         legacy_request->rx_match_filter_len);
   legacy_request->tx_match_filter_len = hidl_request.baseConfigs.txMatchFilter.size();
   if (legacy_request->tx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: tx_match_filter_len too large";
     return false;
   }
   memcpy(legacy_request->tx_match_filter,
@@ -933,6 +943,7 @@
   legacy_request->cipher_type = hidl_request.baseConfigs.supportedCipherTypes;
   legacy_request->pmk_len = hidl_request.baseConfigs.pmk.size();
   if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: pmk_len too large";
     return false;
   }
   memcpy(legacy_request->pmk,
@@ -957,6 +968,7 @@
     const NanSubscribeRequest& hidl_request,
     legacy_hal::NanSubscribeRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanSubscribeRequest));
@@ -967,14 +979,16 @@
   legacy_request->subscribe_count = hidl_request.baseConfigs.discoveryCount;
   legacy_request->service_name_len = hidl_request.baseConfigs.serviceName.size();
   if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: service_name_len too large";
     return false;
   }
-  memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.c_str(),
+  memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.data(),
         legacy_request->service_name_len);
   legacy_request->subscribe_match_indicator =
         (legacy_hal::NanMatchAlg) hidl_request.baseConfigs.discoveryMatchIndicator;
   legacy_request->service_specific_info_len = hidl_request.baseConfigs.serviceSpecificInfo.size();
   if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: service_specific_info_len too large";
     return false;
   }
   memcpy(legacy_request->service_specific_info,
@@ -982,6 +996,7 @@
         legacy_request->service_specific_info_len);
   legacy_request->rx_match_filter_len = hidl_request.baseConfigs.rxMatchFilter.size();
   if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: rx_match_filter_len too large";
     return false;
   }
   memcpy(legacy_request->rx_match_filter,
@@ -989,6 +1004,7 @@
         legacy_request->rx_match_filter_len);
   legacy_request->tx_match_filter_len = hidl_request.baseConfigs.txMatchFilter.size();
   if (legacy_request->tx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: tx_match_filter_len too large";
     return false;
   }
   memcpy(legacy_request->tx_match_filter,
@@ -1005,6 +1021,7 @@
   legacy_request->cipher_type = hidl_request.baseConfigs.supportedCipherTypes;
   legacy_request->pmk_len = hidl_request.baseConfigs.pmk.size();
   if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: pmk_len too large";
     return false;
   }
   memcpy(legacy_request->pmk,
@@ -1029,6 +1046,7 @@
         legacy_hal::NAN_SSI_REQUIRED_IN_MATCH_IND : legacy_hal::NAN_SSI_NOT_REQUIRED_IN_MATCH_IND;
   legacy_request->num_intf_addr_present = hidl_request.intfAddr.size();
   if (legacy_request->num_intf_addr_present > NAN_MAX_SUBSCRIBE_MAX_ADDRESS) {
+    LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: num_intf_addr_present - too many";
     return false;
   }
   for (int i = 0; i < legacy_request->num_intf_addr_present; i++) {
@@ -1042,6 +1060,7 @@
     const NanTransmitFollowupRequest& hidl_request,
     legacy_hal::NanTransmitFollowupRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanTransmitFollowupRequest));
@@ -1055,6 +1074,7 @@
         legacy_hal::NAN_TRANSMIT_IN_DW : legacy_hal::NAN_TRANSMIT_IN_FAW;
   legacy_request->service_specific_info_len = hidl_request.message.size();
   if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: service_specific_info_len too large";
     return false;
   }
   memcpy(legacy_request->service_specific_info,
@@ -1069,6 +1089,7 @@
     const NanConfigRequest& hidl_request,
     legacy_hal::NanConfigRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanConfigRequestToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanConfigRequest));
@@ -1084,11 +1105,12 @@
         hidl_request.disableJoinedClusterIndication ? 0x4 : 0x0;
   legacy_request->config_sid_beacon = 1;
   if (hidl_request.numberOfServiceIdsInBeacon > 127) {
+    LOG(ERROR) << "convertHidlNanConfigRequestToLegacy: numberOfServiceIdsInBeacon > 127";
     return false;
   }
   legacy_request->sid_beacon = (hidl_request.includeServiceIdsInBeacon ? 0x1 : 0x0)
         | (hidl_request.numberOfServiceIdsInBeacon << 1);
-  legacy_request->config_rssi_window_size = 0; // TODO: don't know default yet
+  legacy_request->config_rssi_window_size = 1;
   legacy_request->rssi_window_size_val = hidl_request.rssiWindowSize;
   legacy_request->config_disc_mac_addr_randomization = 1;
   legacy_request->disc_mac_addr_rand_interval_sec =
@@ -1097,20 +1119,20 @@
   legacy_request->ranging_auto_response_cfg = hidl_request.acceptRangingRequests ?
        legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE;
   /* TODO : missing
-  legacy_request->config_2dot4g_rssi_close = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_close = 1;
   legacy_request->rssi_close_2dot4g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiClose;
-  legacy_request->config_2dot4g_rssi_middle = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_middle = 1;
   legacy_request->rssi_middle_2dot4g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiMiddle;
-  legacy_request->config_2dot4g_rssi_proximity = 0; // TODO: don't know default yet
+  legacy_request->config_2dot4g_rssi_proximity = 1;
   legacy_request->rssi_proximity_2dot4g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiProximity;
   */
-  legacy_request->config_scan_params = 0; // TODO: don't know default yet
+  legacy_request->config_scan_params = 1;
   legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_24G_BAND] =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_24GHZ].dwellTimeMs;
@@ -1122,16 +1144,16 @@
   legacy_request->config_dw.dw_2dot4g_interval_val = hidl_request
         .bandSpecificConfig[(size_t) NanBandIndex::NAN_BAND_24GHZ].discoveryWindowIntervalVal;
   /* TODO: missing
-  legacy_request->config_5g_rssi_close = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_close = 1;
   legacy_request->rssi_close_5g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiClose;
-  legacy_request->config_5g_rssi_middle = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_middle = 1;
   legacy_request->rssi_middle_5g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiMiddle;
   */
-  legacy_request->config_5g_rssi_close_proximity = 0; // TODO: don't know default yet
+  legacy_request->config_5g_rssi_close_proximity = 1;
   legacy_request->rssi_close_proximity_5g_val =
         hidl_request.bandSpecificConfig[
             (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiProximity;
@@ -1159,6 +1181,7 @@
     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));
@@ -1170,6 +1193,7 @@
   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);
@@ -1181,6 +1205,7 @@
     const NanInitiateDataPathRequest& hidl_request,
     legacy_hal::NanDataPathInitiatorRequest* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanDataPathInitiatorRequest));
@@ -1195,6 +1220,7 @@
         legacy_hal::NAN_DP_CONFIG_SECURITY : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
   legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size();
   if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: ndp_app_info_len to large";
     return false;
   }
   memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
@@ -1213,6 +1239,7 @@
     const NanRespondToDataPathIndicationRequest& hidl_request,
     legacy_hal::NanDataPathIndicationResponse* legacy_request) {
   if (!legacy_request) {
+    LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: legacy_request is null";
     return false;
   }
   memset(legacy_request, 0, sizeof(legacy_hal::NanDataPathIndicationResponse));
@@ -1225,6 +1252,7 @@
         legacy_hal::NAN_DP_CONFIG_SECURITY : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
   legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size();
   if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: ndp_app_info_len too large";
     return false;
   }
   memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
@@ -1232,6 +1260,7 @@
   legacy_request->cipher_type = hidl_request.supportedCipherTypes;
   legacy_request->pmk_len = hidl_request.pmk.size();
   if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
+    LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: pmk_len too large";
     return false;
   }
   memcpy(legacy_request->pmk, hidl_request.pmk.data(), legacy_request->pmk_len);
@@ -1243,6 +1272,7 @@
     const legacy_hal::NanResponseMsg& legacy_response,
     WifiNanStatus* wifiNanStatus) {
   if (!wifiNanStatus) {
+    LOG(ERROR) << "convertLegacyNanResponseHeaderToHidl: wifiNanStatus is null";
     return false;
   }
   wifiNanStatus->status = convertLegacyNanStatusTypeToHidl(legacy_response.status);
@@ -1255,6 +1285,7 @@
     const legacy_hal::NanCapabilities& legacy_response,
     NanCapabilities* hidl_response) {
   if (!hidl_response) {
+    LOG(ERROR) << "convertLegacyNanCapabilitiesResponseToHidl: hidl_response is null";
     return false;
   }
   hidl_response->maxConcurrentClusters = legacy_response.max_concurrent_nan_clusters;
@@ -1280,6 +1311,7 @@
     const legacy_hal::NanMatchInd& legacy_ind,
     NanMatchInd* hidl_ind) {
   if (!hidl_ind) {
+    LOG(ERROR) << "convertLegacyNanMatchIndToHidl: hidl_ind is null";
     return false;
   }
   hidl_ind->discoverySessionId = legacy_ind.publish_subscribe_id;
@@ -1307,6 +1339,7 @@
     const legacy_hal::NanFollowupInd& legacy_ind,
     NanFollowupReceivedInd* hidl_ind) {
   if (!hidl_ind) {
+    LOG(ERROR) << "convertLegacyNanFollowupIndToHidl: hidl_ind is null";
     return false;
   }
   hidl_ind->discoverySessionId = legacy_ind.publish_subscribe_id;
@@ -1323,6 +1356,7 @@
     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);
@@ -1342,6 +1376,7 @@
     const legacy_hal::NanDataPathRequestInd& legacy_ind,
     NanDataPathRequestInd* hidl_ind) {
   if (!hidl_ind) {
+    LOG(ERROR) << "convertLegacyNanDataPathRequestIndToHidl: hidl_ind is null";
     return false;
   }
   hidl_ind->discoverySessionId = legacy_ind.service_instance_id;
@@ -1359,6 +1394,7 @@
     const legacy_hal::NanDataPathConfirmInd& legacy_ind,
     NanDataPathConfirmInd* hidl_ind) {
   if (!hidl_ind) {
+    LOG(ERROR) << "convertLegacyNanDataPathConfirmIndToHidl: hidl_ind is null";
     return false;
   }
   hidl_ind->ndpInstanceId = legacy_ind.ndp_instance_id;
diff --git a/wifi/1.0/default/wifi_nan_iface.cpp b/wifi/1.0/default/wifi_nan_iface.cpp
index 5ac6fa8..333fac7 100644
--- a/wifi/1.0/default/wifi_nan_iface.cpp
+++ b/wifi/1.0/default/wifi_nan_iface.cpp
@@ -60,6 +60,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_DISABLED: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -67,6 +68,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_PUBLISH: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -75,6 +77,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_PUBLISH_CANCEL: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -82,6 +85,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_TRANSMIT_FOLLOWUP: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -89,6 +93,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_SUBSCRIBE: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -97,6 +102,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_SUBSCRIBE_CANCEL: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -104,6 +110,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_CONFIG: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -111,6 +118,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
      }
     case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -118,6 +126,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
      }
     case legacy_hal::NAN_GET_CAPABILITIES: {
         NanCapabilities hidl_struct;
@@ -132,6 +141,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_DP_INTERFACE_CREATE: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -139,6 +149,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_DP_INTERFACE_DELETE: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
@@ -146,18 +157,20 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_DP_INITIATOR_RESPONSE: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
-          if (!callback->notifyInitiateDataPathResponse(id, wifiNanStatus).isOk()) {
+          if (!callback->notifyInitiateDataPathResponse(id, wifiNanStatus,
+                msg.body.data_request_response.ndp_instance_id).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_DP_RESPONDER_RESPONSE: {
         for (const auto& callback : shared_ptr_this->event_callbacks_) {
-          if (!callback->notifyRespondToDataPathIndicationResponse(id, wifiNanStatus,
-                    msg.body.data_request_response.ndp_instance_id).isOk()) {
+          if (!callback->notifyRespondToDataPathIndicationResponse(id, wifiNanStatus).isOk()) {
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
@@ -168,6 +181,7 @@
             LOG(ERROR) << "Failed to invoke the callback";
           }
         }
+        break;
     }
     case legacy_hal::NAN_RESPONSE_TCA:
         /* fall through */
diff --git a/wifi/1.0/types.hal b/wifi/1.0/types.hal
index bb00114..1ec1357 100644
--- a/wifi/1.0/types.hal
+++ b/wifi/1.0/types.hal
@@ -750,19 +750,19 @@
    * Frequency in MHz to of the discovery channel in the specified band. Indexed by |NanBandIndex|.
    */
   bool validDiscoveryChannelVal;
-  vec<WifiChannelInMhz> discoveryChannelMhzVal;
+  WifiChannelInMhz[2] discoveryChannelMhzVal;
   /**
    * Specifies whether sync/discovery beacons are transmitted in the specified band. Indexed by
    * |NanBandIndex|.
    */
   bool validUseBeaconsInBandVal;
-  vec<bool> useBeaconsInBandVal;
+  bool[2] useBeaconsInBandVal;
   /**
    * Specified whether SDF (service discovery frames) are transmitted in the specified band. Indexed
    * by |NanBandIndex|.
    */
   bool validUseSdfInBandVal;
-  vec<bool> useSdfInBandVal;
+  bool[2] useSdfInBandVal;
 };
 
 /**
@@ -816,7 +816,7 @@
   /**
    * Additional configuration provided per band: indexed by |NanBandIndex|.
    */
-  vec<NanBandSpecificConfig> bandSpecificConfig;
+  NanBandSpecificConfig[2] bandSpecificConfig;
 };
 
 /**
@@ -826,7 +826,7 @@
   /**
    * Enable operation in a specific band: indexed by |NanBandIndex|.
    */
-  vec<bool> operateInBand;
+  bool[2] operateInBand;
   /**
    * Specify extent of cluster by specifying the max hop count.
    */
@@ -888,7 +888,7 @@
    * UTF-8 encoded string identifying the service.
    * Max length: |NanCapabilities.maxServiceNameLen|.
    */
-  string serviceName;
+  vec<uint8_t> serviceName;
   /**
    * Specifies the matching indication to host: once, continuous, or never.
    */