From da9f0914361e2f45a8a44dc687a1aebd8a970cb9 Mon Sep 17 00:00:00 2001 From: TheScarastic Date: Fri, 23 Sep 2022 16:05:58 +0530 Subject: [PATCH] dubai: Introduce biometric 2.3 hal * wrap 2.1 hal and add additional function Change-Id: I4a66760fb8ca88de4e9229b7aec90052470ce6f0 --- device.mk | 2 +- fingerprint/Android.bp | 21 ++++ fingerprint/BiometricsFingerprint.cpp | 97 +++++++++++++++++++ fingerprint/BiometricsFingerprint.h | 71 ++++++++++++++ ...iometrics.fingerprint@2.3-service.dubai.rc | 8 ++ ...ometrics.fingerprint@2.3-service.dubai.xml | 11 +++ fingerprint/service.cpp | 48 +++++++++ 7 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 fingerprint/Android.bp create mode 100644 fingerprint/BiometricsFingerprint.cpp create mode 100644 fingerprint/BiometricsFingerprint.h create mode 100644 fingerprint/android.hardware.biometrics.fingerprint@2.3-service.dubai.rc create mode 100644 fingerprint/android.hardware.biometrics.fingerprint@2.3-service.dubai.xml create mode 100644 fingerprint/service.cpp diff --git a/device.mk b/device.mk index 37874e2..67e115b 100644 --- a/device.mk +++ b/device.mk @@ -51,7 +51,7 @@ PRODUCT_COPY_FILES += \ # Fingerprint PRODUCT_PACKAGES += \ - android.hardware.biometrics.fingerprint@2.1.vendor + android.hardware.biometrics.fingerprint@2.3-service.dubai # Init $(foreach f,$(wildcard $(LOCAL_PATH)/rootdir/etc/init/hw/*.rc),\ diff --git a/fingerprint/Android.bp b/fingerprint/Android.bp new file mode 100644 index 0000000..bb68900 --- /dev/null +++ b/fingerprint/Android.bp @@ -0,0 +1,21 @@ +cc_binary { + name: "android.hardware.biometrics.fingerprint@2.3-service.dubai", + defaults: ["hidl_defaults"], + init_rc: ["android.hardware.biometrics.fingerprint@2.3-service.dubai.rc"], + vintf_fragments: ["android.hardware.biometrics.fingerprint@2.3-service.dubai.xml"], + relative_install_path: "hw", + srcs: [ + "service.cpp", + "BiometricsFingerprint.cpp", + ], + vendor: true, + shared_libs: [ + "libbase", + "libhidlbase", + "liblog", + "libutils", + "android.hardware.biometrics.fingerprint@2.1", + "android.hardware.biometrics.fingerprint@2.2", + "android.hardware.biometrics.fingerprint@2.3", + ], +} diff --git a/fingerprint/BiometricsFingerprint.cpp b/fingerprint/BiometricsFingerprint.cpp new file mode 100644 index 0000000..f80c3ff --- /dev/null +++ b/fingerprint/BiometricsFingerprint.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2017 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.biometrics.fingerprint@2.3-service.dubai" + +#include "BiometricsFingerprint.h" + +#include +#include +#include +#include + +#include +#include +#include + +namespace android { +namespace hardware { +namespace biometrics { +namespace fingerprint { +namespace V2_3 { +namespace implementation { + +BiometricsFingerprint::BiometricsFingerprint() { + biometrics_2_1_service = IBiometricsFingerprint_2_1::getService(); +} + +Return BiometricsFingerprint::setNotify(const sp& clientCallback) { + return biometrics_2_1_service->setNotify(clientCallback); +} + +Return BiometricsFingerprint::preEnroll() { + return biometrics_2_1_service->preEnroll(); +} + +Return BiometricsFingerprint::enroll(const hidl_array& hat, uint32_t gid, uint32_t timeoutSec) { + return biometrics_2_1_service->enroll(hat, gid, timeoutSec); +} + +Return BiometricsFingerprint::postEnroll() { + return biometrics_2_1_service->postEnroll(); +} + +Return BiometricsFingerprint::getAuthenticatorId() { + return biometrics_2_1_service->getAuthenticatorId(); +} + +Return BiometricsFingerprint::cancel() { + return biometrics_2_1_service->cancel(); +} + +Return BiometricsFingerprint::enumerate() { + return biometrics_2_1_service->enumerate(); +} + +Return BiometricsFingerprint::remove(uint32_t gid, uint32_t fid) { + return biometrics_2_1_service->remove(gid, fid); +} + +Return BiometricsFingerprint::setActiveGroup(uint32_t gid, const hidl_string& storePath) { + return biometrics_2_1_service->setActiveGroup(gid, storePath); +} + +Return BiometricsFingerprint::authenticate(uint64_t operationId, uint32_t gid) { + return biometrics_2_1_service->authenticate(operationId, gid); +} + +Return BiometricsFingerprint::isUdfps(uint32_t) { + return true; +} + +Return BiometricsFingerprint::onFingerDown(uint32_t, uint32_t, float, float) { + return Void(); +} + +Return BiometricsFingerprint::onFingerUp() { + return Void(); +} + +} // namespace implementation +} // namespace V2_3 +} // namespace fingerprint +} // namespace biometrics +} // namespace hardware +} // namespace android diff --git a/fingerprint/BiometricsFingerprint.h b/fingerprint/BiometricsFingerprint.h new file mode 100644 index 0000000..d44bf48 --- /dev/null +++ b/fingerprint/BiometricsFingerprint.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2017 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_BIOMETRICS_FINGERPRINT_V2_3_BIOMETRICSFINGERPRINT_H +#define ANDROID_HARDWARE_BIOMETRICS_FINGERPRINT_V2_3_BIOMETRICSFINGERPRINT_H + +#include +#include +#include + +namespace android { +namespace hardware { +namespace biometrics { +namespace fingerprint { +namespace V2_3 { +namespace implementation { + +using IBiometricsFingerprint_2_1 = ::android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprint; +using ::android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprintClientCallback; +using ::android::hardware::biometrics::fingerprint::V2_1::RequestStatus; +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 BiometricsFingerprint : public IBiometricsFingerprint { + BiometricsFingerprint(); + // Methods from ::V2_1::IBiometricsFingerprint follow. + Return setNotify(const sp& clientCallback) override; + Return preEnroll() override; + Return enroll(const hidl_array& hat, uint32_t gid, uint32_t timeoutSec) override; + Return postEnroll() override; + Return getAuthenticatorId() override; + Return cancel() override; + Return enumerate() override; + Return remove(uint32_t gid, uint32_t fid) override; + Return setActiveGroup(uint32_t gid, const hidl_string& storePath) override; + Return authenticate(uint64_t operationId, uint32_t gid) override; + + // ::V2_3::IBiometricsFingerprint follow. + Return isUdfps(uint32_t sensorId) override; + Return onFingerDown(uint32_t x, uint32_t y, float minor, float major) override; + Return onFingerUp() override; + +private: + sp biometrics_2_1_service; +}; + +} // namespace implementation +} // namespace V2_3 +} // namespace fingerprint +} // namespace biometrics +} // namespace hardware +} // namespace android +#endif // ANDROID_HARDWARE_BIOMETRICS_FINGERPRINT_V2_3_BIOMETRICSFINGERPRINT_H diff --git a/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.dubai.rc b/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.dubai.rc new file mode 100644 index 0000000..22c789d --- /dev/null +++ b/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.dubai.rc @@ -0,0 +1,8 @@ +service fps_hal.dubai /vendor/bin/hw/android.hardware.biometrics.fingerprint@2.3-service.dubai + # "class hal" causes a race condition on some devices due to files created + # in /data. As a workaround, postpone startup until later in boot once + # /data is mounted. + class late_start + user system + group system input uhid + writepid /dev/cpuset/system-background/tasks diff --git a/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.dubai.xml b/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.dubai.xml new file mode 100644 index 0000000..4931b8a --- /dev/null +++ b/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.dubai.xml @@ -0,0 +1,11 @@ + + + android.hardware.biometrics.fingerprint + hwbinder + 2.3 + + IBiometricsFingerprint + default + + + diff --git a/fingerprint/service.cpp b/fingerprint/service.cpp new file mode 100644 index 0000000..7a3b091 --- /dev/null +++ b/fingerprint/service.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2017 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.biometrics.fingerprint@2.3-service.dubai" +#include +#include +#include "BiometricsFingerprint.h" + +using android::hardware::configureRpcThreadpool; +using android::hardware::joinRpcThreadpool; + +using android::hardware::biometrics::fingerprint::V2_3::IBiometricsFingerprint; +using android::hardware::biometrics::fingerprint::V2_3::implementation::BiometricsFingerprint; + +using android::OK; +using android::status_t; + +int main() { + android::sp service = new BiometricsFingerprint(); + + configureRpcThreadpool(1, true); + + status_t status = service->registerAsService(); + if (status != OK) { + LOG(ERROR) << "Cannot register Biometrics 2.3 HAL service."; + return 1; + } + + LOG(INFO) << "Biometrics 2.3 HAL service ready."; + + joinRpcThreadpool(); + + LOG(ERROR) << "Biometrics 2.3 HAL service failed to join thread pool."; + return 1; +}