diff options
Diffstat (limited to '1.0')
-rw-r--r-- | 1.0/Android.bp | 64 | ||||
-rw-r--r-- | 1.0/Android.mk | 80 | ||||
-rw-r--r-- | 1.0/INqNfc.hal | 43 | ||||
-rw-r--r-- | 1.0/default/Android.bp | 17 | ||||
-rw-r--r-- | 1.0/default/Android.mk | 26 | ||||
-rw-r--r-- | 1.0/default/NqNfc.cpp | 108 | ||||
-rw-r--r-- | 1.0/default/NqNfc.h | 79 | ||||
-rw-r--r-- | 1.0/default/include/device.h | 42 | ||||
-rw-r--r-- | 1.0/default/include/utils.h | 121 | ||||
-rw-r--r-- | 1.0/default/service.cpp | 53 | ||||
-rw-r--r-- | 1.0/default/vendor.nxp.hardware.nfc@1.0-service.rc | 33 | ||||
-rw-r--r-- | 1.0/types.hal | 33 |
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; + |