Merge "Revert "Revert "Update makefiles for Java package path."""
diff --git a/ir/1.0/Android.bp b/ir/1.0/Android.bp
new file mode 100644
index 0000000..9badd6f
--- /dev/null
+++ b/ir/1.0/Android.bp
@@ -0,0 +1,56 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+genrule {
+    name: "android.hardware.ir@1.0_genc++",
+    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",
+    ],
+    out: [
+        "android/hardware/ir/1.0/types.cpp",
+        "android/hardware/ir/1.0/ConsumerIrAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.ir@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.ir@1.0",
+    srcs: [
+        "types.hal",
+        "IConsumerIr.hal",
+    ],
+    out: [
+        "android/hardware/ir/1.0/types.h",
+        "android/hardware/ir/1.0/IConsumerIr.h",
+        "android/hardware/ir/1.0/IHwConsumerIr.h",
+        "android/hardware/ir/1.0/BnConsumerIr.h",
+        "android/hardware/ir/1.0/BpConsumerIr.h",
+        "android/hardware/ir/1.0/BsConsumerIr.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.ir@1.0",
+    generated_sources: ["android.hardware.ir@1.0_genc++"],
+    generated_headers: ["android.hardware.ir@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.ir@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/ir/1.0/Android.mk b/ir/1.0/Android.mk
new file mode 100644
index 0000000..660b32b
--- /dev/null
+++ b/ir/1.0/Android.mk
@@ -0,0 +1,118 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.ir@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 (ConsumerIrFreqRange)
+#
+GEN := $(intermediates)/android/hardware/ir/V1_0/ConsumerIrFreqRange.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.ir@1.0::types.ConsumerIrFreqRange
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IConsumerIr.hal
+#
+GEN := $(intermediates)/android/hardware/ir/V1_0/IConsumerIr.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IConsumerIr.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.ir@1.0::IConsumerIr
+
+$(GEN): $(LOCAL_PATH)/IConsumerIr.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.ir@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 (ConsumerIrFreqRange)
+#
+GEN := $(intermediates)/android/hardware/ir/V1_0/ConsumerIrFreqRange.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.ir@1.0::types.ConsumerIrFreqRange
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IConsumerIr.hal
+#
+GEN := $(intermediates)/android/hardware/ir/V1_0/IConsumerIr.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IConsumerIr.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.ir@1.0::IConsumerIr
+
+$(GEN): $(LOCAL_PATH)/IConsumerIr.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/ir/1.0/IConsumerIr.hal b/ir/1.0/IConsumerIr.hal
new file mode 100644
index 0000000..f928c0e
--- /dev/null
+++ b/ir/1.0/IConsumerIr.hal
@@ -0,0 +1,40 @@
+/*
+ * Copyright 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.ir@1.0;
+
+interface IConsumerIr {
+    /*
+     * transmit() sends an IR pattern at a given carrierFreq.
+     *
+     * The pattern is alternating series of carrier on and off periods measured in
+     * microseconds. The carrier should be turned off at the end of a transmit
+     * even if there are and odd number of entries in the pattern array.
+     *
+     * This call must return when the transmit is complete or encounters an error.
+     *
+     * returns: true on success, false on error.
+     */
+    transmit(int32_t carrierFreq, vec<int32_t> pattern, int32_t patternLen) generates (bool success);
+
+    /*
+     * getCarrierFreqs() enumerates which frequencies the IR transmitter supports.
+     *
+     * returns: On success, true and a vector of all supported frequency
+     * ranges. On error, returns false.
+     */
+    getCarrierFreqs() generates (bool success, vec<ConsumerIrFreqRange> ranges);
+};
diff --git a/ir/1.0/default/Android.bp b/ir/1.0/default/Android.bp
new file mode 100644
index 0000000..7c441da
--- /dev/null
+++ b/ir/1.0/default/Android.bp
@@ -0,0 +1,46 @@
+//
+// Copyright (C) 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+cc_library_shared {
+    name: "android.hardware.ir@1.0-impl",
+    relative_install_path: "hw",
+    srcs: ["ConsumerIr.cpp"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhardware",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "android.hardware.ir@1.0",
+    ],
+}
+
+cc_binary {
+    relative_install_path: "hw",
+    name: "android.hardware.ir@1.0-service",
+    init_rc: ["android.hardware.ir@1.0-service.rc"],
+    srcs: ["service.cpp"],
+
+    shared_libs: [
+        "liblog",
+        "libhwbinder",
+        "libhardware",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hardware.ir@1.0",
+    ],
+
+}
diff --git a/ir/1.0/default/ConsumerIr.cpp b/ir/1.0/default/ConsumerIr.cpp
new file mode 100644
index 0000000..763e09a
--- /dev/null
+++ b/ir/1.0/default/ConsumerIr.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "ConsumerIrService"
+#include <android/log.h>
+
+#include <hardware/hardware.h>
+#include <hardware/consumerir.h>
+#include "ConsumerIr.h"
+
+namespace android {
+namespace hardware {
+namespace ir {
+namespace V1_0 {
+namespace implementation {
+
+ConsumerIr::ConsumerIr(consumerir_device_t *device) {
+    mDevice = device;
+}
+
+// Methods from ::android::hardware::consumerir::V1_0::IConsumerIr follow.
+Return<bool> ConsumerIr::transmit(int32_t carrierFreq, const hidl_vec<int32_t>& pattern, int32_t patternLen) {
+    return mDevice->transmit(mDevice, carrierFreq, pattern.data(), patternLen) == 0;
+}
+
+Return<void> ConsumerIr::getCarrierFreqs(getCarrierFreqs_cb _hidl_cb) {
+    int32_t len = mDevice->get_num_carrier_freqs(mDevice);
+    if (len < 0) {
+        _hidl_cb(false, {});
+        return Void();
+    }
+
+    consumerir_freq_range_t *rangeAr = new consumerir_freq_range_t[len];
+    bool success = (mDevice->get_carrier_freqs(mDevice, len, rangeAr) >= 0);
+    if (!success) {
+        _hidl_cb(false, {});
+        return Void();
+    }
+
+    hidl_vec<ConsumerIrFreqRange> rangeVec;
+    rangeVec.resize(len);
+    for (int32_t i = 0; i < len; i++) {
+        rangeVec[i].min = static_cast<uint32_t>(rangeAr[i].min);
+        rangeVec[i].max = static_cast<uint32_t>(rangeAr[i].max);
+    }
+    _hidl_cb(true, rangeVec);
+    return Void();
+}
+
+
+IConsumerIr* HIDL_FETCH_IConsumerIr(const char *name) {
+    consumerir_device_t *dev;
+    const hw_module_t *hw_module = NULL;
+
+    int ret = hw_get_module(name, &hw_module);
+    if (ret != 0) {
+        ALOGE("hw_get_module %s failed: %d", name, ret);
+        return nullptr;
+    }
+    ret = hw_module->methods->open(hw_module, CONSUMERIR_TRANSMITTER, (hw_device_t **) &dev);
+    if (ret < 0) {
+        ALOGE("Can't open consumer IR transmitter, error: %d", ret);
+        return nullptr;
+    }
+    return new ConsumerIr(dev);
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace ir
+}  // namespace hardware
+}  // namespace android
diff --git a/ir/1.0/default/ConsumerIr.h b/ir/1.0/default/ConsumerIr.h
new file mode 100644
index 0000000..527c577
--- /dev/null
+++ b/ir/1.0/default/ConsumerIr.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_HARDWARE_IR_V1_0_IR_H
+#define ANDROID_HARDWARE_IR_V1_0_IR_H
+
+#include <android/hardware/ir/1.0/IConsumerIr.h>
+#include <hardware/consumerir.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace ir {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::ir::V1_0::ConsumerIrFreqRange;
+using ::android::hardware::ir::V1_0::IConsumerIr;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct ConsumerIr : public IConsumerIr {
+    ConsumerIr(consumerir_device_t *device);
+    // Methods from ::android::hardware::ir::V1_0::IConsumerIr follow.
+    Return<bool> transmit(int32_t carrierFreq, const hidl_vec<int32_t>& pattern, int32_t patternLen) override;
+    Return<void> getCarrierFreqs(getCarrierFreqs_cb _hidl_cb) override;
+private:
+    consumerir_device_t *mDevice;
+};
+
+extern "C" IConsumerIr* HIDL_FETCH_IConsumerIr(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace ir
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_IR_V1_0_IR_H
diff --git a/ir/1.0/default/android.hardware.ir@1.0-service.rc b/ir/1.0/default/android.hardware.ir@1.0-service.rc
new file mode 100644
index 0000000..5b05ba2
--- /dev/null
+++ b/ir/1.0/default/android.hardware.ir@1.0-service.rc
@@ -0,0 +1,4 @@
+service ir-hal-1-0 /system/bin/hw/android.hardware.ir@1.0-service
+    class hal
+    user system
+    group system
\ No newline at end of file
diff --git a/ir/1.0/default/service.cpp b/ir/1.0/default/service.cpp
new file mode 100644
index 0000000..237b2c9
--- /dev/null
+++ b/ir/1.0/default/service.cpp
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "android.hardware.ir@1.0-service"
+
+#include <android/hardware/ir/1.0/IConsumerIr.h>
+#include <hidl/LegacySupport.h>
+
+using android::hardware::ir::V1_0::IConsumerIr;
+using android::hardware::defaultPassthroughServiceImplementation;
+
+int main() {
+    return defaultPassthroughServiceImplementation<IConsumerIr>("consumerir");
+}
diff --git a/ir/1.0/types.hal b/ir/1.0/types.hal
new file mode 100644
index 0000000..9c65de6
--- /dev/null
+++ b/ir/1.0/types.hal
@@ -0,0 +1,24 @@
+/*
+ * Copyright 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.ir@1.0;
+
+struct ConsumerIrFreqRange {
+    uint32_t min;
+
+    uint32_t max;
+
+};
diff --git a/ir/Android.bp b/ir/Android.bp
new file mode 100644
index 0000000..ba90f2c
--- /dev/null
+++ b/ir/Android.bp
@@ -0,0 +1,5 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+    "1.0/default",
+]
diff --git a/tests/baz/1.0/IBaz.hal b/tests/baz/1.0/IBaz.hal
index 36d79cd..3e1e2b9 100644
--- a/tests/baz/1.0/IBaz.hal
+++ b/tests/baz/1.0/IBaz.hal
@@ -57,4 +57,6 @@
     returnABunchOfStrings() generates (string a, string b, string c);
 
     returnABitField() generates (bitfield<BitField> good);
+
+    size(uint32_t size) generates (uint32_t size);
 };