/* * 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 #include #include namespace android { namespace hardware { namespace biometrics { namespace fingerprint { namespace V2_3 { namespace implementation { using ::android::sp; using ::android::base::GetProperty; 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: bool isUdfps() { // We need to rely on `persist.vendor.fingerprint.sensor_type` here because we can't get our // sensorId from anywhere. return GetProperty("persist.vendor.fingerprint.sensor_type", "") == "optical"; } bool setDimlayerHbm(unsigned int value) { return isUdfps() && ioctl(mOplusDisplayFd, PANEL_IOCTL_SET_DIMLAYER_HBM, &value) == 0; } bool setFpPress(unsigned int value) { return isUdfps() && ioctl(mOplusDisplayFd, PANEL_IOCTL_SET_FP_PRESS, &value) == 0; } sp mOplusBiometricsFingerprint; sp mClientCallback; int mOplusDisplayFd; }; } // namespace implementation } // namespace V2_3 } // namespace fingerprint } // namespace biometrics } // namespace hardware } // namespace android