summaryrefslogtreecommitdiffstats
path: root/1.0
diff options
context:
space:
mode:
authorGaurav Singhal <gsinghal@codeaurora.org>2017-05-18 16:41:51 +0530
committerGaurav Singhal <gsinghal@codeaurora.org>2017-05-30 23:45:55 +0530
commit872461c7b315aaee7a4571b6eff95d0c171f23d7 (patch)
tree891b54b42be2fd79e15c11841ab2d0cb1e726b4e /1.0
parent5889312f186c21d5da4d6158ad1f63eade2a5b92 (diff)
downloadandroid_vendor_nxp_interfaces_opensource_nfc-872461c7b315aaee7a4571b6eff95d0c171f23d7.tar.gz
android_vendor_nxp_interfaces_opensource_nfc-872461c7b315aaee7a4571b6eff95d0c171f23d7.tar.bz2
android_vendor_nxp_interfaces_opensource_nfc-872461c7b315aaee7a4571b6eff95d0c171f23d7.zip
NFC: Vendor extension HAL implementation
Vendor extension HAL support added for ioctl API and for rest of the APIs default AOSP interface is used. Vendor HAL service registers both the interfaces. Change-Id: I340f6e89e2b1daafdb497a9c9ce39ee6a4169ddd
Diffstat (limited to '1.0')
-rw-r--r--1.0/Android.bp64
-rw-r--r--1.0/Android.mk80
-rw-r--r--1.0/INqNfc.hal43
-rw-r--r--1.0/default/Android.bp17
-rw-r--r--1.0/default/Android.mk26
-rw-r--r--1.0/default/NqNfc.cpp108
-rw-r--r--1.0/default/NqNfc.h79
-rw-r--r--1.0/default/include/device.h42
-rw-r--r--1.0/default/include/utils.h121
-rw-r--r--1.0/default/service.cpp53
-rw-r--r--1.0/default/vendor.nxp.hardware.nfc@1.0-service.rc33
-rw-r--r--1.0/types.hal33
12 files changed, 699 insertions, 0 deletions
diff --git a/1.0/Android.bp b/1.0/Android.bp
new file mode 100644
index 0000000..a87ac05
--- /dev/null
+++ b/1.0/Android.bp
@@ -0,0 +1,64 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+ name: "vendor.nxp.hardware.nfc@1.0_hal",
+ srcs: [
+ "types.hal",
+ "INqNfc.hal",
+ ],
+}
+
+genrule {
+ name: "vendor.nxp.hardware.nfc@1.0_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hidl:system/libhidl/transport -rvendor.nxp.hardware:vendor/nxp/interfaces/opensource vendor.nxp.hardware.nfc@1.0",
+ srcs: [
+ ":vendor.nxp.hardware.nfc@1.0_hal",
+ ],
+ out: [
+ "vendor/nxp/hardware/nfc/1.0/types.cpp",
+ "vendor/nxp/hardware/nfc/1.0/NqNfcAll.cpp",
+ ],
+}
+
+genrule {
+ name: "vendor.nxp.hardware.nfc@1.0_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hidl:system/libhidl/transport -rvendor.nxp.hardware:vendor/nxp/interfaces/opensource vendor.nxp.hardware.nfc@1.0",
+ srcs: [
+ ":vendor.nxp.hardware.nfc@1.0_hal",
+ ],
+ out: [
+ "vendor/nxp/hardware/nfc/1.0/types.h",
+ "vendor/nxp/hardware/nfc/1.0/hwtypes.h",
+ "vendor/nxp/hardware/nfc/1.0/INqNfc.h",
+ "vendor/nxp/hardware/nfc/1.0/IHwNqNfc.h",
+ "vendor/nxp/hardware/nfc/1.0/BnHwNqNfc.h",
+ "vendor/nxp/hardware/nfc/1.0/BpHwNqNfc.h",
+ "vendor/nxp/hardware/nfc/1.0/BsNqNfc.h",
+ ],
+}
+
+cc_library_shared {
+ name: "vendor.nxp.hardware.nfc@1.0",
+ generated_sources: ["vendor.nxp.hardware.nfc@1.0_genc++"],
+ generated_headers: ["vendor.nxp.hardware.nfc@1.0_genc++_headers"],
+ export_generated_headers: ["vendor.nxp.hardware.nfc@1.0_genc++_headers"],
+ vendor: true,
+ 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/1.0/Android.mk b/1.0/Android.mk
new file mode 100644
index 0000000..07ee267
--- /dev/null
+++ b/1.0/Android.mk
@@ -0,0 +1,80 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := vendor.nxp.hardware.nfc-V1.0-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+ android.hidl.base-V1.0-java \
+
+
+#
+# Build INqNfc.hal
+#
+GEN := $(intermediates)/vendor/nxp/hardware/nfc/V1_0/INqNfc.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/INqNfc.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.hidl:system/libhidl/transport \
+ -rvendor.nxp.hardware:vendor/nxp/interfaces/opensource \
+ vendor.nxp.hardware.nfc@1.0::INqNfc
+
+$(GEN): $(LOCAL_PATH)/INqNfc.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := vendor.nxp.hardware.nfc-V1.0-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+ android.hidl.base-V1.0-java \
+
+
+#
+# Build INqNfc.hal
+#
+GEN := $(intermediates)/vendor/nxp/hardware/nfc/V1_0/INqNfc.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/INqNfc.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.hidl:system/libhidl/transport \
+ -rvendor.nxp.hardware:vendor/nxp/interfaces/opensource \
+ vendor.nxp.hardware.nfc@1.0::INqNfc
+
+$(GEN): $(LOCAL_PATH)/INqNfc.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/1.0/INqNfc.hal b/1.0/INqNfc.hal
new file mode 100644
index 0000000..b12ef2c
--- /dev/null
+++ b/1.0/INqNfc.hal
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package vendor.nxp.hardware.nfc@1.0;
+
+interface INqNfc {
+ /*
+ * Performs an General Input Output operations.
+ *
+ * Based on the ioctlType, input data bytes are processed and
+ * Output data bytes are generated.
+ *
+ * @return output data as stream of bytes
+ */
+ @callflow(next={"ioctl", "write", "prediscover", "coreInitialized", "close", "powerCycle", "controlGranted"})
+ ioctl(uint64_t ioctlType, NfcData inputData) generates(NfcData outputData);
+};
diff --git a/1.0/default/Android.bp b/1.0/default/Android.bp
new file mode 100644
index 0000000..f7e60e5
--- /dev/null
+++ b/1.0/default/Android.bp
@@ -0,0 +1,17 @@
+cc_library_shared {
+ name: "vendor.nxp.hardware.nfc@1.0-impl",
+ relative_install_path: "hw",
+ vendor: true,
+ srcs: [
+ "NqNfc.cpp",
+ ],
+ shared_libs: [
+ "liblog",
+ "libhardware",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "vendor.nxp.hardware.nfc@1.0",
+ "android.hidl.base@1.0",
+ ],
+}
diff --git a/1.0/default/Android.mk b/1.0/default/Android.mk
new file mode 100644
index 0000000..3ac4278
--- /dev/null
+++ b/1.0/default/Android.mk
@@ -0,0 +1,26 @@
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE := vendor.nxp.hardware.nfc@1.0-service
+LOCAL_INIT_RC := vendor.nxp.hardware.nfc@1.0-service.rc
+LOCAL_SRC_FILES := \
+ service.cpp \
+
+LOCAL_SHARED_LIBRARIES := \
+ liblog \
+ libcutils \
+ libdl \
+ libbase \
+ libutils \
+ libhardware_legacy \
+ libhardware \
+
+LOCAL_SHARED_LIBRARIES += \
+ libhidlbase \
+ libhidltransport \
+ android.hardware.nfc@1.0 \
+ vendor.nxp.hardware.nfc@1.0 \
+
+include $(BUILD_EXECUTABLE)
diff --git a/1.0/default/NqNfc.cpp b/1.0/default/NqNfc.cpp
new file mode 100644
index 0000000..15a57bf
--- /dev/null
+++ b/1.0/default/NqNfc.cpp
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <hardware/hardware.h>
+#include <log/log.h>
+#include "NqNfc.h"
+
+namespace vendor {
+namespace nxp {
+namespace hardware {
+namespace nfc {
+namespace V1_0 {
+namespace implementation {
+
+NqNfc::NqNfc(pn547_dev_t* device) : mDevice(device) {
+}
+
+// Methods from ::vendor::nxp::hardware::nfc::V1_0::INqNfc follow.
+Return<void> NqNfc::ioctl(uint64_t ioctlType, const hidl_vec<uint8_t>& inputData, ioctl_cb _hidl_cb) {
+ uint32_t status;
+ nfc_nci_IoctlInOutData_t inpOutData;
+ NfcData outputData;
+
+ nfc_nci_IoctlInOutData_t *pInOutData = (nfc_nci_IoctlInOutData_t*)&inputData[0];
+
+ /*
+ * data from proxy->stub is copied to local data which can be updated by
+ * underlying HAL implementation since its an inout argument
+ */
+ memcpy(&inpOutData, pInOutData, sizeof(nfc_nci_IoctlInOutData_t));
+ status = mDevice->ioctl(&mDevice->nci_device, ioctlType, &inpOutData);
+
+ /*
+ * copy data and additional fields indicating status of ioctl operation
+ * and context of the caller. Then invoke the corresponding proxy callback
+ */
+ inpOutData.out.ioctlType = ioctlType;
+ inpOutData.out.context = pInOutData->inp.context;
+ inpOutData.out.result = status;
+ outputData.setToExternal((uint8_t*)&inpOutData.out, sizeof(nfc_nci_ExtnOutputData_t));
+ _hidl_cb(outputData);
+ return Void();
+}
+
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+INqNfc* HIDL_FETCH_INqNfc(const char* /* name */) {
+ nfc_nci_device_t* nci_device;
+ const hw_module_t* hw_module = NULL;
+ pn547_dev_t* nfc_device = NULL;
+ int ret = 0;
+
+ nci_device = &nfc_device->nci_device;
+
+ ret = hw_get_module (NFC_NCI_HARDWARE_MODULE_ID, &hw_module);
+ if (ret == 0)
+ {
+ ret = nfc_nci_open (hw_module, &nci_device);
+ if (ret != 0) {
+ ALOGE ("nfc_nci_open failed: %d", ret);
+ }
+ }
+ else
+ ALOGE ("hw_get_module %s failed: %d", NFC_NCI_HARDWARE_MODULE_ID, ret);
+
+ if (ret == 0) {
+ ALOGD ("vendor NXP NFC HAL module loaded properly");
+ nfc_device = (pn547_dev_t*)nci_device;
+ return new NqNfc(nfc_device);
+ } else {
+ ALOGE("Passthrough failed to load legacy HAL.");
+ return nullptr;
+ }
+}
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace nfc
+} // namespace hardware
+} // namespace nxp
+} // namespace vendor
diff --git a/1.0/default/NqNfc.h b/1.0/default/NqNfc.h
new file mode 100644
index 0000000..d3e22d8
--- /dev/null
+++ b/1.0/default/NqNfc.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef VENDOR_NXP_HARDWARE_NFC_V1_0_NQNFC_H
+#define VENDOR_NXP_HARDWARE_NFC_V1_0_NQNFC_H
+
+#include <vendor/nxp/hardware/nfc/1.0/INqNfc.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <hardware/nfc.h>
+#include "include/device.h"
+#include "include/utils.h"
+
+namespace vendor {
+namespace nxp {
+namespace hardware {
+namespace nfc {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using ::vendor::nxp::hardware::nfc::V1_0::INqNfc;
+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 NqNfc : public INqNfc {
+ NqNfc(pn547_dev_t* device);
+ // Methods from ::vendor::nxp::hardware::nfc::V1_0::INqNfc follow.
+ Return<void> ioctl(uint64_t ioctlType, const hidl_vec<uint8_t>& inputData, ioctl_cb _hidl_cb) override;
+
+ private:
+ const pn547_dev_t* mDevice;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+
+};
+
+extern "C" INqNfc* HIDL_FETCH_INqNfc(const char* name);
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace nfc
+} // namespace hardware
+} // namespace nxp
+} // namespace vendor
+
+#endif // VENDOR_NXP_HARDWARE_NFC_V1_0_NQNFC_H
diff --git a/1.0/default/include/device.h b/1.0/default/include/device.h
new file mode 100644
index 0000000..79f2e88
--- /dev/null
+++ b/1.0/default/include/device.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef VENDOR_NXP_NQNFC_V1_0_DEVICE_H
+#define VENDOR_NXP_NQNFC_V1_0_DEVICE_H
+
+typedef struct {
+ struct nfc_nci_device nci_device;
+
+ /* Local definitions */
+ int(*ioctl)(const struct nfc_nci_device *p_dev, long arg, void *p_data);
+ int(*check_fw_dwnld_flag)(const struct nfc_nci_device *p_dev, uint8_t* param1);
+
+} pn547_dev_t;
+
+#endif // VENDOR_NXP_NQNFC_V1_0_DEVICE_H
diff --git a/1.0/default/include/utils.h b/1.0/default/include/utils.h
new file mode 100644
index 0000000..ba2bf7c
--- /dev/null
+++ b/1.0/default/include/utils.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef VENDOR_NXP_NQNFC_V1_0_UTILS_H
+#define VENDOR_NXP_NQNFC_V1_0_UTILS_H
+
+#define MAX_IOCTL_TRANSCEIVE_CMD_LEN 256
+#define MAX_IOCTL_TRANSCEIVE_RESP_LEN 256
+#define MAX_ATR_INFO_LEN 128
+
+/*
+ * Data structures provided below are used of Hal Ioctl calls
+ */
+
+/*
+ * nfc_nci_ExtnCmd_t shall contain data for commands used for transceive command in ioctl
+ */
+typedef struct
+{
+ uint16_t cmd_len;
+ uint8_t p_cmd[MAX_IOCTL_TRANSCEIVE_CMD_LEN];
+} nfc_nci_ExtnCmd_t;
+
+/*
+ * nfc_nci_ExtnRsp_t shall contain response for command sent in transceive command
+ */
+typedef struct
+{
+ uint16_t rsp_len;
+ uint8_t p_rsp[MAX_IOCTL_TRANSCEIVE_RESP_LEN];
+} nfc_nci_ExtnRsp_t;
+
+/*
+ * InputData_t :ioctl has multiple subcommands
+ * Each command has corresponding input data which needs to be populated in this
+ */
+typedef union {
+ uint16_t bootMode;
+ uint8_t halType;
+ nfc_nci_ExtnCmd_t nciCmd;
+ uint32_t timeoutMilliSec;
+}InputData_t;
+
+/*
+ * nfc_nci_ExtnInputData_t :Apart from InputData_t, there are context data
+ * which is required during callback from stub to proxy.
+ * To avoid additional copy of data while propagating from libnfc to Adaptation
+ * and Nfcstub to ncihal, common structure is used. As a sideeffect, context data
+ * is exposed to libnfc (Not encapsulated).
+ */
+typedef struct {
+ void* context;
+ InputData_t data;
+}nfc_nci_ExtnInputData_t;
+
+/*
+ * outputData_t :ioctl has multiple commands/responses
+ * This contains the output types for each ioctl.
+ */
+typedef union{
+ uint32_t status;
+ nfc_nci_ExtnRsp_t nciRsp;
+ uint8_t nxpNciAtrInfo[MAX_ATR_INFO_LEN];
+ uint32_t p61CurrentState;
+ uint16_t fwUpdateInf;
+ uint16_t fwDwnldStatus;
+ uint16_t fwMwVerStatus;
+}outputData_t;
+
+/*
+ * nfc_nci_ExtnOutputData_t :Apart from outputData_t, there are other information
+ * which is required during callback from stub to proxy.
+ * For ex (context, result of the operation , type of ioctl which was completed).
+ * To avoid additional copy of data while propagating from libnfc to Adaptation
+ * and Nfcstub to ncihal, common structure is used. As a sideeffect, these data
+ * is exposed(Not encapsulated).
+ */
+typedef struct {
+ uint64_t ioctlType;
+ uint32_t result;
+ void* context;
+ outputData_t data;
+}nfc_nci_ExtnOutputData_t;
+
+/*
+ * nfc_nci_IoctlInOutData_t :data structure for input & output
+ * to be sent for ioctl command. input is populated by client/proxy side
+ * output is provided from server/stub to client/proxy
+ */
+typedef struct {
+ nfc_nci_ExtnInputData_t inp;
+ nfc_nci_ExtnOutputData_t out;
+}nfc_nci_IoctlInOutData_t;
+
+#endif //VENDOR_NXP_NQNFC_V1_0_UTILS_H
diff --git a/1.0/default/service.cpp b/1.0/default/service.cpp
new file mode 100644
index 0000000..795b368
--- /dev/null
+++ b/1.0/default/service.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define LOG_TAG "vendor.nxp.hardware.nfc@1.0-service"
+
+#include <android/hardware/nfc/1.0/INfc.h>
+#include <vendor/nxp/hardware/nfc/1.0/INqNfc.h>
+
+#include <hidl/LegacySupport.h>
+
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+using android::hardware::nfc::V1_0::INfc;
+using vendor::nxp::hardware::nfc::V1_0::INqNfc;
+using android::hardware::registerPassthroughServiceImplementation;
+using android::OK;
+
+int main() {
+ configureRpcThreadpool(10, true /*callerWillJoin*/);
+ android::status_t status;
+ status = registerPassthroughServiceImplementation<INfc>();
+ LOG_ALWAYS_FATAL_IF(status != OK, "Error while registering nfc AOSP service: %d", status);
+ status = registerPassthroughServiceImplementation<INqNfc>();
+ LOG_ALWAYS_FATAL_IF(status != OK, "Error while registering nqnfc vendor service: %d", status);
+ joinRpcThreadpool();
+ return status;
+}
diff --git a/1.0/default/vendor.nxp.hardware.nfc@1.0-service.rc b/1.0/default/vendor.nxp.hardware.nfc@1.0-service.rc
new file mode 100644
index 0000000..afa6209
--- /dev/null
+++ b/1.0/default/vendor.nxp.hardware.nfc@1.0-service.rc
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+service nqnfc_hal_service /vendor/bin/hw/vendor.nxp.hardware.nfc@1.0-service
+ class hal
+ user nfc
+ group nfc
diff --git a/1.0/types.hal b/1.0/types.hal
new file mode 100644
index 0000000..2b35d05
--- /dev/null
+++ b/1.0/types.hal
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package vendor.nxp.hardware.nfc@1.0;
+
+typedef vec<uint8_t> NfcData;
+