diff --git a/nfc/1.0/default/Android.mk b/nfc/1.0/default/Android.mk index afd0cd64b0..6329b6904e 100644 --- a/nfc/1.0/default/Android.mk +++ b/nfc/1.0/default/Android.mk @@ -6,3 +6,26 @@ LOCAL_MODULE_RELATIVE_PATH := hw LOCAL_SRC_FILES := Nfc.cpp LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware libhwbinder libbase libcutils libutils libhidl android.hardware.nfc@1.0 include $(BUILD_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE_RELATIVE_PATH := hw +LOCAL_MODULE := android.hardware.nfc@1.0-service +LOCAL_INIT_RC := android.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 += \ + libhwbinder \ + libhidl \ + android.hardware.nfc@1.0 \ + +include $(BUILD_EXECUTABLE) diff --git a/nfc/1.0/default/Nfc.cpp b/nfc/1.0/default/Nfc.cpp index 9023eccdf2..b836adad8a 100644 --- a/nfc/1.0/default/Nfc.cpp +++ b/nfc/1.0/default/Nfc.cpp @@ -1,3 +1,6 @@ +#define LOG_TAG "android.hardware.nfc@1.0-impl" +#include + #include #include #include "Nfc.h" diff --git a/nfc/1.0/default/android.hardware.nfc@1.0-service.rc b/nfc/1.0/default/android.hardware.nfc@1.0-service.rc new file mode 100644 index 0000000000..1d427188c1 --- /dev/null +++ b/nfc/1.0/default/android.hardware.nfc@1.0-service.rc @@ -0,0 +1,4 @@ +service nfc_hal_service /system/bin/hw/android.hardware.nfc@1.0-service + class hal + user nfc + group nfc readproc diff --git a/nfc/1.0/default/service.cpp b/nfc/1.0/default/service.cpp new file mode 100644 index 0000000000..8952052c31 --- /dev/null +++ b/nfc/1.0/default/service.cpp @@ -0,0 +1,44 @@ +#define LOG_TAG "android.hardware.nfc@1.0-service" +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include + +using android::sp; + +// libhwbinder: +using android::hardware::IPCThreadState; +using android::hardware::ProcessState; + +// Generated HIDL files +using android::hardware::nfc::V1_0::INfc; + +int main() { + ALOGI("Service is starting."); + const char instance[] = "nfc_nci"; + ALOGI("Retrieving default implementation of instance %s.", + instance); + android::sp service = INfc::getService(instance, true); + if (service.get() == nullptr) { + ALOGE("INfc::getService returned NULL, exiting"); + return -1; + } + ALOGI("Default implementation using %s is %s", + instance, (service->isRemote() ? "REMOTE" : "LOCAL")); + LOG_FATAL_IF(service->isRemote(), "Implementation is REMOTE!"); + ALOGI("Registering instance %s.", instance); + service->registerAsService("nfc_nci"); + ALOGI("Ready."); + + ProcessState::self()->setThreadPoolMaxThreadCount(0); + ProcessState::self()->startThreadPool(); + IPCThreadState::self()->joinThreadPool(); +}