From 7f4f347c2c926bfb52e166a2b4cd50c7c7f44ea4 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Mon, 11 Apr 2022 16:38:46 +0200 Subject: [PATCH] hidl: fingerprint: Initial AOSP -> Oplus wrapper Change-Id: I8729b3920dd52c18416179d4118a4d012fb5b1d3 --- hidl/fingerprint/.clang-format | 1 + hidl/fingerprint/Android.bp | 21 +++ hidl/fingerprint/BiometricsFingerprint.cpp | 145 ++++++++++++++++++ hidl/fingerprint/BiometricsFingerprint.h | 117 ++++++++++++++ ...iometrics.fingerprint@2.3-service.oplus.rc | 4 + ...ometrics.fingerprint@2.3-service.oplus.xml | 11 ++ hidl/fingerprint/service.cpp | 43 ++++++ 7 files changed, 342 insertions(+) create mode 120000 hidl/fingerprint/.clang-format create mode 100644 hidl/fingerprint/Android.bp create mode 100644 hidl/fingerprint/BiometricsFingerprint.cpp create mode 100644 hidl/fingerprint/BiometricsFingerprint.h create mode 100644 hidl/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.oplus.rc create mode 100644 hidl/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.oplus.xml create mode 100644 hidl/fingerprint/service.cpp diff --git a/hidl/fingerprint/.clang-format b/hidl/fingerprint/.clang-format new file mode 120000 index 0000000..0457b53 --- /dev/null +++ b/hidl/fingerprint/.clang-format @@ -0,0 +1 @@ +../../../../build/soong/scripts/system-clang-format \ No newline at end of file diff --git a/hidl/fingerprint/Android.bp b/hidl/fingerprint/Android.bp new file mode 100644 index 0000000..7282393 --- /dev/null +++ b/hidl/fingerprint/Android.bp @@ -0,0 +1,21 @@ +cc_binary { + name: "android.hardware.biometrics.fingerprint@2.3-service.oplus", + defaults: ["hidl_defaults"], + init_rc: ["android.hardware.biometrics.fingerprint@2.3-service.oplus.rc"], + vintf_fragments: ["android.hardware.biometrics.fingerprint@2.3-service.oplus.xml"], + vendor: true, + relative_install_path: "hw", + srcs: [ + "BiometricsFingerprint.cpp", + "service.cpp", + ], + shared_libs: [ + "libbase", + "libhidlbase", + "libutils", + "android.hardware.biometrics.fingerprint@2.1", + "android.hardware.biometrics.fingerprint@2.2", + "android.hardware.biometrics.fingerprint@2.3", + "vendor.oplus.hardware.biometrics.fingerprint@2.1", + ], +} diff --git a/hidl/fingerprint/BiometricsFingerprint.cpp b/hidl/fingerprint/BiometricsFingerprint.cpp new file mode 100644 index 0000000..b82fe2d --- /dev/null +++ b/hidl/fingerprint/BiometricsFingerprint.cpp @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2022 The LineageOS 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.oplus" + +#include "BiometricsFingerprint.h" + +namespace android { +namespace hardware { +namespace biometrics { +namespace fingerprint { +namespace V2_3 { +namespace implementation { + +BiometricsFingerprint::BiometricsFingerprint() { + mOplusBiometricsFingerprint = IOplusBiometricsFingerprint::getService(); + mOplusBiometricsFingerprint->setHalCallback(this); +} + +Return BiometricsFingerprint::setNotify( + const sp& clientCallback) { + mClientCallback = std::move(clientCallback); + return mOplusBiometricsFingerprint->setNotify(this); +} + +Return BiometricsFingerprint::preEnroll() { + return mOplusBiometricsFingerprint->preEnroll(); +} + +Return BiometricsFingerprint::enroll(const hidl_array& hat, + uint32_t gid, uint32_t timeoutSec) { + return mOplusBiometricsFingerprint->enroll(hat, gid, timeoutSec); +} + +Return BiometricsFingerprint::postEnroll() { + return mOplusBiometricsFingerprint->postEnroll(); +} + +Return BiometricsFingerprint::getAuthenticatorId() { + return mOplusBiometricsFingerprint->getAuthenticatorId(); +} + +Return BiometricsFingerprint::cancel() { + return mOplusBiometricsFingerprint->cancel(); +} + +Return BiometricsFingerprint::enumerate() { + return mOplusBiometricsFingerprint->enumerate(); +} + +Return BiometricsFingerprint::remove(uint32_t gid, uint32_t fid) { + return mOplusBiometricsFingerprint->remove(gid, fid); +} + +Return BiometricsFingerprint::setActiveGroup(uint32_t gid, + const hidl_string& storePath) { + return mOplusBiometricsFingerprint->setActiveGroup(gid, storePath); +} + +Return BiometricsFingerprint::authenticate(uint64_t operationId, uint32_t gid) { + return mOplusBiometricsFingerprint->authenticate(operationId, gid); +} + +Return BiometricsFingerprint::isUdfps(uint32_t sensorID) { + return mOplusBiometricsFingerprint->isUdfps(sensorID); +} + +Return BiometricsFingerprint::onFingerDown(uint32_t x, uint32_t y, float minor, float major) { + return mOplusBiometricsFingerprint->onFingerDown(x, y, minor, major); +} + +Return BiometricsFingerprint::onFingerUp() { + return mOplusBiometricsFingerprint->onFingerUp(); +} + +Return BiometricsFingerprint::onEnrollResult(uint64_t deviceId, uint32_t fingerId, + uint32_t groupId, uint32_t remaining) { + return mClientCallback->onEnrollResult(deviceId, fingerId, groupId, remaining); +} + +Return BiometricsFingerprint::onAcquired(uint64_t deviceId, + V2_1::FingerprintAcquiredInfo acquiredInfo, + int32_t vendorCode) { + return mClientCallback->onAcquired(deviceId, acquiredInfo, vendorCode); +} + +Return BiometricsFingerprint::onAuthenticated(uint64_t deviceId, uint32_t fingerId, + uint32_t groupId, + const hidl_vec& token) { + return mClientCallback->onAuthenticated(deviceId, fingerId, groupId, token); +} + +Return BiometricsFingerprint::onError(uint64_t deviceId, FingerprintError error, + int32_t vendorCode) { + return mClientCallback->onError(deviceId, error, vendorCode); +} + +Return BiometricsFingerprint::onRemoved(uint64_t deviceId, uint32_t fingerId, + uint32_t groupId, uint32_t remaining) { + return mClientCallback->onRemoved(deviceId, fingerId, groupId, remaining); +} + +Return BiometricsFingerprint::onEnumerate(uint64_t deviceId, uint32_t fingerId, + uint32_t groupId, uint32_t remaining) { + return mClientCallback->onEnumerate(deviceId, fingerId, groupId, remaining); +} + +Return BiometricsFingerprint::onAcquired_2_2(uint64_t deviceId, + FingerprintAcquiredInfo acquiredInfo, + int32_t vendorCode) { + return reinterpret_cast(mClientCallback.get()) + ->onAcquired_2_2(deviceId, acquiredInfo, vendorCode); +} + +Return BiometricsFingerprint::onEngineeringInfoUpdated( + uint32_t /*lenth*/, const hidl_vec& /*keys*/, + const hidl_vec& /*values*/) { + return Void(); +} + +Return BiometricsFingerprint::onFingerprintCmd(int32_t /*cmdId*/, + const hidl_vec& /*result*/, + uint32_t /*resultLen*/) { + return Void(); +} + +} // namespace implementation +} // namespace V2_3 +} // namespace fingerprint +} // namespace biometrics +} // namespace hardware +} // namespace android diff --git a/hidl/fingerprint/BiometricsFingerprint.h b/hidl/fingerprint/BiometricsFingerprint.h new file mode 100644 index 0000000..6b167a5 --- /dev/null +++ b/hidl/fingerprint/BiometricsFingerprint.h @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2022 The LineageOS 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. + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace android { +namespace hardware { +namespace biometrics { +namespace fingerprint { +namespace V2_3 { +namespace implementation { + +using ::android::sp; +using ::android::hardware::hidl_string; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::hardware::biometrics::fingerprint::V2_1::FingerprintError; +using ::android::hardware::biometrics::fingerprint::V2_1::RequestStatus; +using ::android::hardware::biometrics::fingerprint::V2_2::FingerprintAcquiredInfo; +using ::android::hardware::biometrics::fingerprint::V2_2::IBiometricsFingerprintClientCallback; +using ::android::hardware::biometrics::fingerprint::V2_3::IBiometricsFingerprint; + +using IOplusBiometricsFingerprint = + vendor::oplus::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprint; +using ::vendor::oplus::hardware::biometrics::fingerprint::V2_1:: + IBiometricsFingerprintClientCallbackEx; + +class BiometricsFingerprint : public IBiometricsFingerprint, + public IBiometricsFingerprintClientCallback, + public IBiometricsFingerprintClientCallbackEx { + public: + BiometricsFingerprint(); + + // Methods from ::android::hardware::biometrics::fingerprint::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; + + // Methods from ::android::hardware::biometrics::fingerprint::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; + + // Methods from + // ::android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprintClientCallback + // follow. + Return onEnrollResult(uint64_t deviceId, uint32_t fingerId, uint32_t groupId, + uint32_t remaining) override; + Return onAcquired(uint64_t deviceId, V2_1::FingerprintAcquiredInfo acquiredInfo, + int32_t vendorCode) override; + Return onAuthenticated(uint64_t deviceId, uint32_t fingerId, uint32_t groupId, + const hidl_vec& token) override; + Return onError(uint64_t deviceId, FingerprintError error, int32_t vendorCode) override; + Return onRemoved(uint64_t deviceId, uint32_t fingerId, uint32_t groupId, + uint32_t remaining) override; + Return onEnumerate(uint64_t deviceId, uint32_t fingerId, uint32_t groupId, + uint32_t remaining) override; + + // Methods from + // ::android::hardware::biometrics::fingerprint::V2_2::IBiometricsFingerprintClientCallback + // follow. + Return onAcquired_2_2(uint64_t deviceId, FingerprintAcquiredInfo acquiredInfo, + int32_t vendorCode) override; + + // Methods from + // ::vendor::oplus::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprintClientCallbackEx + // follow. + Return onEngineeringInfoUpdated(uint32_t lenth, const hidl_vec& keys, + const hidl_vec& values) override; + Return onFingerprintCmd(int32_t cmdId, const hidl_vec& result, + uint32_t resultLen) override; + + private: + sp mOplusBiometricsFingerprint; + sp mClientCallback; +}; + +} // namespace implementation +} // namespace V2_3 +} // namespace fingerprint +} // namespace biometrics +} // namespace hardware +} // namespace android diff --git a/hidl/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.oplus.rc b/hidl/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.oplus.rc new file mode 100644 index 0000000..e3a395f --- /dev/null +++ b/hidl/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.oplus.rc @@ -0,0 +1,4 @@ +service vendor.fps_hal_oplus /vendor/bin/hw/android.hardware.biometrics.fingerprint@2.3-service.oplus + class late_start + user system + group system diff --git a/hidl/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.oplus.xml b/hidl/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.oplus.xml new file mode 100644 index 0000000..4931b8a --- /dev/null +++ b/hidl/fingerprint/android.hardware.biometrics.fingerprint@2.3-service.oplus.xml @@ -0,0 +1,11 @@ + + + android.hardware.biometrics.fingerprint + hwbinder + 2.3 + + IBiometricsFingerprint + default + + + diff --git a/hidl/fingerprint/service.cpp b/hidl/fingerprint/service.cpp new file mode 100644 index 0000000..6b68ee0 --- /dev/null +++ b/hidl/fingerprint/service.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2022 The LineageOS 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.oplus" + +#include +#include + +#include "BiometricsFingerprint.h" + +using android::sp; +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; + +int main() { + sp bio = new BiometricsFingerprint(); + + configureRpcThreadpool(1, true /*callerWillJoin*/); + + if (bio->registerAsService() != android::OK) { + LOG(ERROR) << "Can't register BiometricsFingerprint HAL service"; + return 1; + } + + joinRpcThreadpool(); + + return 0; // should never get here +}