Merge "Support different SIM power states"
diff --git a/bluetooth/1.0/default/service.cpp b/bluetooth/1.0/default/service.cpp
index fa5106f..a588c37 100644
--- a/bluetooth/1.0/default/service.cpp
+++ b/bluetooth/1.0/default/service.cpp
@@ -20,10 +20,13 @@
 
 #include <hidl/LegacySupport.h>
 
+// Add an extra thread for calls to the scheduler service.
+static const size_t kMaxThreads = 2;
+
 // Generated HIDL files
 using android::hardware::bluetooth::V1_0::IBluetoothHci;
 using android::hardware::defaultPassthroughServiceImplementation;
 
 int main() {
-  return defaultPassthroughServiceImplementation<IBluetoothHci>();
+    return defaultPassthroughServiceImplementation<IBluetoothHci>(kMaxThreads);
 }
diff --git a/configstore/utils/include/configstore/Utils.h b/configstore/utils/include/configstore/Utils.h
index b054534..862e812 100644
--- a/configstore/utils/include/configstore/Utils.h
+++ b/configstore/utils/include/configstore/Utils.h
@@ -17,7 +17,7 @@
 #ifndef ANDROID_HARDWARE_CONFIGSTORE_UTILS_H
 #define ANDROID_HARDWARE_CONFIGSTORE_UTILS_H
 
-#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
+#include <android/hardware/configstore/1.0/types.h>
 #include <hidl/Status.h>
 
 #include <sstream>
@@ -34,7 +34,14 @@
 }  // namespace details
 
 namespace configstore {
-using namespace android::hardware::configstore::V1_0;
+// import types from V1_0
+using ::android::hardware::configstore::V1_0::OptionalBool;
+using ::android::hardware::configstore::V1_0::OptionalInt32;
+using ::android::hardware::configstore::V1_0::OptionalUInt32;
+using ::android::hardware::configstore::V1_0::OptionalInt64;
+using ::android::hardware::configstore::V1_0::OptionalUInt64;
+using ::android::hardware::configstore::V1_0::OptionalString;
+
 // arguments V: type for the value (i.e., OptionalXXX)
 //           I: interface class name
 //           func: member function pointer
diff --git a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
index cf9f66e..e77cc14 100644
--- a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
+++ b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
@@ -42,6 +42,8 @@
   { 0x20, 0x00, 0x01, 0x01 }
 #define CORE_CONN_CREATE_CMD \
   { 0x20, 0x04, 0x02, 0x01, 0x00 }
+#define CORE_INIT_CMD \
+    { 0x20, 0x01, 0x00 }
 #define INVALID_COMMAND \
   { 0x20, 0x00, 0x00 }
 #define FAULTY_DATA_PACKET \
@@ -155,7 +157,7 @@
   EXPECT_EQ(6ul, res.args->last_data_.size());
   EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
   EXPECT_GE(VERSION, res.args->last_data_[4]);
-  EXPECT_EQ(0ul, res.args->last_data_[5]);
+  EXPECT_GE(1ul, res.args->last_data_[5]);
 }
 
 /*
@@ -205,30 +207,47 @@
  * Check the response
  */
 TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) {
-  // Send an Error Data Packet
-  std::vector<uint8_t> cmd = FAULTY_DATA_PACKET;
-  NfcData data = cmd;
-  size_t size = data.size();
-
-  for (int i = 0; i < 100; i++) {
-    data.resize(++size);
-    data[size - 1] = 0xFF;
+    std::vector<uint8_t> cmd = CORE_RESET_CMD;
+    NfcData data = cmd;
     EXPECT_EQ(data.size(), nfc_->write(data));
-    // Wait for CORE_INTERFACE_ERROR_NTF
+    // Wait for CORE_RESET_RSP
     auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
     EXPECT_TRUE(res.no_timeout);
-    EXPECT_EQ(5ul, res.args->last_data_.size());
-    EXPECT_EQ(0x60, res.args->last_data_[0]);
-    EXPECT_EQ(0x08, res.args->last_data_[1]);
-    EXPECT_EQ(0x02, res.args->last_data_[2]);
-    EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+
+    cmd = CORE_INIT_CMD;
+    data = cmd;
+    EXPECT_EQ(data.size(), nfc_->write(data));
+    // Wait for CORE_INIT_RSP
+    res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+
+    // Send an Error Data Packet
+    cmd = FAULTY_DATA_PACKET;
+    data = cmd;
+    size_t size = data.size();
+
+    for (int i = 0; i < 100; i++) {
+        data.resize(++size);
+        data[size - 1] = 0xFF;
+        EXPECT_EQ(data.size(), nfc_->write(data));
+        // Wait for CORE_INTERFACE_ERROR_NTF
+        res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+        EXPECT_TRUE(res.no_timeout);
+        EXPECT_EQ(5ul, res.args->last_data_.size());
+        EXPECT_EQ(0x60, res.args->last_data_[0]);
+        EXPECT_EQ(0x08, res.args->last_data_[1]);
+        EXPECT_EQ(0x02, res.args->last_data_[2]);
+        EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
   }
 
   cmd = CORE_CONN_CREATE_CMD;
   data = cmd;
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for CORE_CONN_CREATE_RSP
-  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+  res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
   EXPECT_TRUE(res.no_timeout);
   EXPECT_EQ(7ul, res.args->last_data_.size());
   EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
@@ -242,52 +261,70 @@
  * Repeat to send total of 1Mb data
  */
 TEST_F(NfcHidlTest, Bandwidth) {
-  std::vector<uint8_t> cmd = CORE_CONN_CREATE_CMD;
-  NfcData data = cmd;
-  EXPECT_EQ(data.size(), nfc_->write(data));
-  // Wait for CORE_CONN_CREATE_RSP
-  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-  EXPECT_TRUE(res.no_timeout);
-  EXPECT_EQ(7ul, res.args->last_data_.size());
-  EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
-  uint8_t conn_id = res.args->last_data_[6];
-  uint32_t max_payload_size = res.args->last_data_[4];
+    std::vector<uint8_t> cmd = CORE_RESET_CMD;
+    NfcData data = cmd;
+    EXPECT_EQ(data.size(), nfc_->write(data));
+    // Wait for CORE_RESET_RSP
+    auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
 
-  for (int loops = 0; loops < NUMBER_LOOPS; loops++) {
-      res.args->last_data_.resize(0);
-      data.resize(max_payload_size + LOOP_BACK_HEADER_SIZE);
-      data[0] = conn_id;
-      data[1] = 0x00;
-      data[2] = max_payload_size;
-      for (uint32_t i = 0; i < max_payload_size; i++) {
-          data[i + LOOP_BACK_HEADER_SIZE] = i;
-    }
-    EXPECT_EQ(max_payload_size + LOOP_BACK_HEADER_SIZE, nfc_->write(data));
-    // Wait for data and CORE_CONN_CREDITS_NTF
-    auto res1 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res1.no_timeout);
-    auto res2 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res2.no_timeout);
-    // Check if the same data was received back
-    EXPECT_TRUE(res1.args);
-    EXPECT_TRUE(res2.args);
+    cmd = CORE_INIT_CMD;
+    data = cmd;
+    EXPECT_EQ(data.size(), nfc_->write(data));
+    // Wait for CORE_INIT_RSP
+    res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
 
-    NfcData credits_ntf = res1.args->last_data_;
-    NfcData received_data = res2.args->last_data_;
-    /* It is possible that CORE_CONN_CREDITS_NTF is received before data,
-     * Find the order and do further checks depending on that */
-    if (received_data.size() != data.size()) {
-        credits_ntf = res2.args->last_data_;
-        received_data = res1.args->last_data_;
-    }
-    EXPECT_EQ(data.size(), received_data.size());
-    for (size_t i = 0; i < data.size(); i++) {
-        EXPECT_EQ(data[i], received_data[i]);
-    }
+    cmd = CORE_CONN_CREATE_CMD;
+    data = cmd;
+    EXPECT_EQ(data.size(), nfc_->write(data));
+    // Wait for CORE_CONN_CREATE_RSP
+    res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ(7ul, res.args->last_data_.size());
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+    uint8_t conn_id = res.args->last_data_[6];
+    uint32_t max_payload_size = res.args->last_data_[4];
 
-    EXPECT_EQ(6ul, credits_ntf.size());
-    // Check if the credit is refilled to 1
-    EXPECT_EQ(1, credits_ntf[5]);
+    for (int loops = 0; loops < NUMBER_LOOPS; loops++) {
+        res.args->last_data_.resize(0);
+        data.resize(max_payload_size + LOOP_BACK_HEADER_SIZE);
+        data[0] = conn_id;
+        data[1] = 0x00;
+        data[2] = max_payload_size;
+        for (uint32_t i = 0; i < max_payload_size; i++) {
+            data[i + LOOP_BACK_HEADER_SIZE] = i;
+        }
+        EXPECT_EQ(max_payload_size + LOOP_BACK_HEADER_SIZE, nfc_->write(data));
+        // Wait for data and CORE_CONN_CREDITS_NTF
+        auto res1 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+        EXPECT_TRUE(res1.no_timeout);
+        auto res2 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+        EXPECT_TRUE(res2.no_timeout);
+        // Check if the same data was received back
+        EXPECT_TRUE(res1.args);
+        EXPECT_TRUE(res2.args);
+
+        NfcData credits_ntf = res1.args->last_data_;
+        NfcData received_data = res2.args->last_data_;
+        /* It is possible that CORE_CONN_CREDITS_NTF is received before data,
+         * Find the order and do further checks depending on that */
+        if (received_data.size() != data.size()) {
+            credits_ntf = res2.args->last_data_;
+            received_data = res1.args->last_data_;
+        }
+        EXPECT_EQ(data.size(), received_data.size());
+        for (size_t i = 0; i < data.size(); i++) {
+            EXPECT_EQ(data[i], received_data[i]);
+        }
+
+        EXPECT_EQ(6ul, credits_ntf.size());
+        // Check if the credit is refilled to 1
+        EXPECT_EQ(1, credits_ntf[5]);
   }
 }
 
diff --git a/tests/libhwbinder/1.0/Android.bp b/tests/libhwbinder/1.0/Android.bp
index 9fc19d1..cfebfbb 100644
--- a/tests/libhwbinder/1.0/Android.bp
+++ b/tests/libhwbinder/1.0/Android.bp
@@ -4,6 +4,7 @@
     name: "android.hardware.tests.libhwbinder@1.0_hal",
     srcs: [
         "IBenchmark.hal",
+        "IScheduleTest.hal",
     ],
 }
 
@@ -16,6 +17,7 @@
     ],
     out: [
         "android/hardware/tests/libhwbinder/1.0/BenchmarkAll.cpp",
+        "android/hardware/tests/libhwbinder/1.0/ScheduleTestAll.cpp",
     ],
 }
 
@@ -32,6 +34,11 @@
         "android/hardware/tests/libhwbinder/1.0/BnHwBenchmark.h",
         "android/hardware/tests/libhwbinder/1.0/BpHwBenchmark.h",
         "android/hardware/tests/libhwbinder/1.0/BsBenchmark.h",
+        "android/hardware/tests/libhwbinder/1.0/IScheduleTest.h",
+        "android/hardware/tests/libhwbinder/1.0/IHwScheduleTest.h",
+        "android/hardware/tests/libhwbinder/1.0/BnHwScheduleTest.h",
+        "android/hardware/tests/libhwbinder/1.0/BpHwScheduleTest.h",
+        "android/hardware/tests/libhwbinder/1.0/BsScheduleTest.h",
     ],
 }
 
diff --git a/tests/libhwbinder/1.0/Android.mk b/tests/libhwbinder/1.0/Android.mk
index 4a5f779..bb430fb 100644
--- a/tests/libhwbinder/1.0/Android.mk
+++ b/tests/libhwbinder/1.0/Android.mk
@@ -34,6 +34,25 @@
 $(GEN): $(LOCAL_PATH)/IBenchmark.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IScheduleTest.hal
+#
+GEN := $(intermediates)/android/hardware/tests/libhwbinder/V1_0/IScheduleTest.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IScheduleTest.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.libhwbinder@1.0::IScheduleTest
+
+$(GEN): $(LOCAL_PATH)/IScheduleTest.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
 include $(BUILD_JAVA_LIBRARY)
 
 
@@ -69,6 +88,25 @@
 $(GEN): $(LOCAL_PATH)/IBenchmark.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IScheduleTest.hal
+#
+GEN := $(intermediates)/android/hardware/tests/libhwbinder/V1_0/IScheduleTest.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IScheduleTest.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.tests.libhwbinder@1.0::IScheduleTest
+
+$(GEN): $(LOCAL_PATH)/IScheduleTest.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 
diff --git a/tests/libhwbinder/1.0/IBenchmark.hal b/tests/libhwbinder/1.0/IBenchmark.hal
index 6b266e2..b3aa320 100644
--- a/tests/libhwbinder/1.0/IBenchmark.hal
+++ b/tests/libhwbinder/1.0/IBenchmark.hal
@@ -17,5 +17,5 @@
 package android.hardware.tests.libhwbinder@1.0;
 
 interface IBenchmark {
-  sendVec(vec<uint8_t> data) generates (vec<uint8_t> return_data);
+  sendVec(vec<uint8_t> data) generates (vec<uint8_t> data);
 };
diff --git a/tests/libhwbinder/1.0/IScheduleTest.hal b/tests/libhwbinder/1.0/IScheduleTest.hal
new file mode 100644
index 0000000..b3f57c5
--- /dev/null
+++ b/tests/libhwbinder/1.0/IScheduleTest.hal
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.tests.libhwbinder@1.0;
+
+interface IScheduleTest {
+  send(uint32_t cfg, uint32_t callerSta) generates (uint32_t data);
+};
diff --git a/tests/libhwbinder/1.0/default/Android.bp b/tests/libhwbinder/1.0/default/Android.bp
index e690ca5..af4caec 100644
--- a/tests/libhwbinder/1.0/default/Android.bp
+++ b/tests/libhwbinder/1.0/default/Android.bp
@@ -1,17 +1,14 @@
 cc_library_shared {
     name: "android.hardware.tests.libhwbinder@1.0-impl",
-    defaults: ["hidl_defaults"],
     relative_install_path: "hw",
     proprietary: true,
     srcs: [
         "Benchmark.cpp",
+        "ScheduleTest.cpp",
     ],
-
     shared_libs: [
-        "libbase",
         "libhidlbase",
         "libhidltransport",
-        "liblog",
         "libutils",
         "android.hardware.tests.libhwbinder@1.0",
     ],
diff --git a/tests/libhwbinder/1.0/default/ScheduleTest.cpp b/tests/libhwbinder/1.0/default/ScheduleTest.cpp
new file mode 100644
index 0000000..1ce50cf
--- /dev/null
+++ b/tests/libhwbinder/1.0/default/ScheduleTest.cpp
@@ -0,0 +1,80 @@
+#include "ScheduleTest.h"
+#include <pthread.h>
+#include <iomanip>
+#include <iostream>
+
+using namespace std;
+
+#define ASSERT(cond)                                                                              \
+    do {                                                                                          \
+        if (!(cond)) {                                                                            \
+            cerr << __func__ << ":" << __LINE__ << " condition:" << #cond << " failed\n" << endl; \
+            exit(EXIT_FAILURE);                                                                   \
+        }                                                                                         \
+    } while (0)
+
+static int threadPri() {
+    struct sched_param param;
+    int policy;
+    ASSERT(!pthread_getschedparam(pthread_self(), &policy, &param));
+    return param.sched_priority;
+}
+
+static void threadDump(const char* prefix, int verbose) {
+    struct sched_param param;
+    int policy;
+    if (!verbose) return;
+    cout << "--------------------------------------------------" << endl;
+    cout << setw(12) << left << prefix << " pid: " << getpid() << " tid: " << gettid()
+         << " cpu: " << sched_getcpu() << endl;
+    ASSERT(!pthread_getschedparam(pthread_self(), &policy, &param));
+    string s =
+        (policy == SCHED_OTHER)
+            ? "SCHED_OTHER"
+            : (policy == SCHED_FIFO) ? "SCHED_FIFO" : (policy == SCHED_RR) ? "SCHED_RR" : "???";
+    cout << setw(12) << left << s << param.sched_priority << endl;
+    return;
+}
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace libhwbinder {
+namespace V1_0 {
+namespace implementation {
+
+// Methods from ::android::hardware::tests::libhwbinder::V1_0::IScheduleTest
+// follow.
+Return<uint32_t> ScheduleTest::send(uint32_t cfg, uint32_t callerSta) {
+    // TODO implement
+    int priority = threadPri();
+    int priority_caller = (callerSta >> 16) & 0xffff;
+    int verbose = cfg & 1;
+    threadDump("hwbinder", verbose);
+    uint32_t h = 0, s = 0;
+    if (priority_caller != priority) {
+        h++;
+        if (verbose) {
+            cout << "err priority_caller:" << priority_caller << ", priority:" << priority << endl;
+        }
+    }
+    int cpu = sched_getcpu();
+    int cpu_caller = (callerSta)&0xffff;
+    if (cpu != cpu_caller) {
+        s++;
+    }
+    return (h << 16) | (s & 0xffff);
+}
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+IScheduleTest* HIDL_FETCH_IScheduleTest(const char* /* name */) {
+    return new ScheduleTest();
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace libhwbinder
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
diff --git a/tests/libhwbinder/1.0/default/ScheduleTest.h b/tests/libhwbinder/1.0/default/ScheduleTest.h
new file mode 100644
index 0000000..b1ed660
--- /dev/null
+++ b/tests/libhwbinder/1.0/default/ScheduleTest.h
@@ -0,0 +1,43 @@
+#ifndef ANDROID_HARDWARE_TESTS_LIBHWBINDER_V1_0_SCHEDULETEST_H
+#define ANDROID_HARDWARE_TESTS_LIBHWBINDER_V1_0_SCHEDULETEST_H
+
+#include <android/hardware/tests/libhwbinder/1.0/IScheduleTest.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace libhwbinder {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::tests::libhwbinder::V1_0::IScheduleTest;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct ScheduleTest : public IScheduleTest {
+    // Methods from ::android::hardware::tests::libhwbinder::V1_0::IScheduleTest
+    // follow.
+    Return<uint32_t> send(uint32_t cfg, uint32_t callerSta) override;
+
+    // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+extern "C" IScheduleTest* HIDL_FETCH_IScheduleTest(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace libhwbinder
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_TESTS_LIBHWBINDER_V1_0_SCHEDULETEST_H
diff --git a/update-makefiles.sh b/update-makefiles.sh
index 88cc97b..b7e4235 100755
--- a/update-makefiles.sh
+++ b/update-makefiles.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-source system/tools/hidl/update-makefiles-helper.sh
+source $ANDROID_BUILD_TOP/system/tools/hidl/update-makefiles-helper.sh
 
 do_makefiles_update \
   "android.hardware:hardware/interfaces" \