mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
android.hardware.nfc@1.0: provide a default implementation
b/31524912 Test: pass Change-Id: Id9d34f62f4a2b92bdc3beb3e62c89c82743c0ca0 Signed-off-by: Iliyan Malchev <malchev@google.com>
This commit is contained in:
8
nfc/1.0/default/Android.mk
Normal file
8
nfc/1.0/default/Android.mk
Normal file
@@ -0,0 +1,8 @@
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := android.hardware.nfc@1.0-impl
|
||||
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)
|
||||
76
nfc/1.0/default/Nfc.cpp
Normal file
76
nfc/1.0/default/Nfc.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
#include <hardware/hardware.h>
|
||||
#include <hardware/nfc.h>
|
||||
#include "Nfc.h"
|
||||
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace nfc {
|
||||
namespace V1_0 {
|
||||
namespace implementation {
|
||||
|
||||
sp<INfcClientCallback> Nfc::mCallback = NULL;
|
||||
|
||||
Nfc::Nfc(nfc_nci_device_t* device) : mDevice(device) {
|
||||
}
|
||||
|
||||
// Methods from ::android::hardware::nfc::V1_0::INfc follow.
|
||||
::android::hardware::Return<int32_t> Nfc::open(const sp<INfcClientCallback>& clientCallback) {
|
||||
mCallback = clientCallback;
|
||||
return mDevice->open(mDevice, event_callback, data_callback);
|
||||
}
|
||||
|
||||
::android::hardware::Return<int32_t> Nfc::write(const nfc_data_t& data) {
|
||||
return mDevice->write(mDevice, data.data.size(), &data.data[0]);
|
||||
}
|
||||
|
||||
::android::hardware::Return<int32_t> Nfc::core_initialized(const hidl_vec<uint8_t>& data) {
|
||||
hidl_vec<uint8_t> copy = data;
|
||||
return mDevice->core_initialized(mDevice, ©[0]);
|
||||
}
|
||||
|
||||
::android::hardware::Return<int32_t> Nfc::pre_discover() {
|
||||
return mDevice->pre_discover(mDevice);
|
||||
}
|
||||
|
||||
::android::hardware::Return<int32_t> Nfc::close() {
|
||||
return mDevice->close(mDevice);
|
||||
}
|
||||
|
||||
::android::hardware::Return<int32_t> Nfc::control_granted() {
|
||||
return mDevice->control_granted(mDevice);
|
||||
}
|
||||
|
||||
::android::hardware::Return<int32_t> Nfc::power_cycle() {
|
||||
return mDevice->power_cycle(mDevice);
|
||||
}
|
||||
|
||||
|
||||
INfc* HIDL_FETCH_INfc(const char *hal) {
|
||||
nfc_nci_device_t* nfc_device;
|
||||
int ret = 0;
|
||||
const hw_module_t* hw_module = NULL;
|
||||
|
||||
ret = hw_get_module (hal, &hw_module);
|
||||
if (ret == 0)
|
||||
{
|
||||
ret = nfc_nci_open (hw_module, &nfc_device);
|
||||
if (ret != 0) {
|
||||
ALOGE ("nfc_nci_open %s failed: %d", hal, ret);
|
||||
}
|
||||
}
|
||||
else
|
||||
ALOGE ("hw_get_module %s failed: %d", hal, ret);
|
||||
|
||||
if (ret == 0) {
|
||||
return new Nfc(nfc_device);
|
||||
} else {
|
||||
ALOGE("Passthrough failed to load legacy HAL.");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V1_0
|
||||
} // namespace nfc
|
||||
} // namespace hardware
|
||||
} // namespace android
|
||||
60
nfc/1.0/default/Nfc.h
Normal file
60
nfc/1.0/default/Nfc.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#ifndef HIDL_GENERATED_android_hardware_nfc_V1_0_Nfc_H_
|
||||
#define HIDL_GENERATED_android_hardware_nfc_V1_0_Nfc_H_
|
||||
|
||||
#include <android/hardware/nfc/1.0/INfc.h>
|
||||
#include <hidl/Status.h>
|
||||
#include <hardware/hardware.h>
|
||||
#include <hardware/nfc.h>
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace nfc {
|
||||
namespace V1_0 {
|
||||
namespace implementation {
|
||||
|
||||
using ::android::hardware::nfc::V1_0::INfc;
|
||||
using ::android::hardware::nfc::V1_0::INfcClientCallback;
|
||||
using ::android::hardware::nfc::V1_0::nfc_data_t;
|
||||
using ::android::hardware::Return;
|
||||
using ::android::hardware::Void;
|
||||
using ::android::hardware::hidl_vec;
|
||||
using ::android::hardware::hidl_string;
|
||||
using ::android::sp;
|
||||
|
||||
struct Nfc : public INfc {
|
||||
Nfc(nfc_nci_device_t* device);
|
||||
::android::hardware::Return<int32_t> open(const sp<INfcClientCallback>& clientCallback) override;
|
||||
::android::hardware::Return<int32_t> write(const nfc_data_t& data) override;
|
||||
::android::hardware::Return<int32_t> core_initialized(const hidl_vec<uint8_t>& data) override;
|
||||
::android::hardware::Return<int32_t> pre_discover() override;
|
||||
::android::hardware::Return<int32_t> close() override;
|
||||
::android::hardware::Return<int32_t> control_granted() override;
|
||||
::android::hardware::Return<int32_t> power_cycle() override;
|
||||
|
||||
static void event_callback(uint8_t event, uint8_t status) {
|
||||
if (mCallback != nullptr) {
|
||||
mCallback->sendEvent(
|
||||
(::android::hardware::nfc::V1_0::nfc_event_t) event,
|
||||
(::android::hardware::nfc::V1_0::nfc_status_t) status);
|
||||
}
|
||||
}
|
||||
static void data_callback(uint16_t data_len, uint8_t* p_data) {
|
||||
nfc_data_t data;
|
||||
data.data.setToExternal(p_data, data_len);
|
||||
if (mCallback != nullptr) {
|
||||
mCallback->sendData(data);
|
||||
}
|
||||
}
|
||||
private:
|
||||
static sp<INfcClientCallback> mCallback;
|
||||
const nfc_nci_device_t* mDevice;
|
||||
};
|
||||
|
||||
extern "C" INfc* HIDL_FETCH_INfc(const char* name);
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V1_0
|
||||
} // namespace nfc
|
||||
} // namespace hardware
|
||||
} // namespace android
|
||||
|
||||
#endif // HIDL_GENERATED_android_hardware_nfc_V1_0_Nfc_H_
|
||||
Reference in New Issue
Block a user