lineage/interfaces: Add custom HAL 2.0 fingerprint service
Identical to android.hardware.biometrics.fingerprint@2.1-service
but checks for HAL version 2.0 instead of 2.1 and passes the
expected enumerate function to the HAL
Change-Id: Ibe8253297c1712ad1583a058efef5e55ff70720d
diff --git a/biometrics/fingerprint/Android.bp b/biometrics/fingerprint/Android.bp
index 4ad1869..583b0cf 100644
--- a/biometrics/fingerprint/Android.bp
+++ b/biometrics/fingerprint/Android.bp
@@ -1,5 +1,6 @@
//
// Copyright (C) 2017 The Android Open Source Project
+// Copyright (C) 2017 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.
@@ -13,9 +14,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
cc_binary {
- name: "android.hardware.biometrics.fingerprint@2.1-service",
+ name: "android.hardware.biometrics.fingerprint@2.1-service.2.0",
relative_install_path: "hw",
- init_rc: ["android.hardware.biometrics.fingerprint@2.1-service.rc"],
+ init_rc: ["android.hardware.biometrics.fingerprint@2.1-service.2.0.rc"],
srcs: ["service.cpp", "BiometricsFingerprint.cpp"],
shared_libs: [
"libutils",
diff --git a/biometrics/fingerprint/BiometricsFingerprint.cpp b/biometrics/fingerprint/BiometricsFingerprint.cpp
index c6774ca..7cf71b6 100644
--- a/biometrics/fingerprint/BiometricsFingerprint.cpp
+++ b/biometrics/fingerprint/BiometricsFingerprint.cpp
@@ -33,7 +33,7 @@
namespace implementation {
// Supported fingerprint HAL version
-static const uint16_t kVersion = HARDWARE_MODULE_API_VERSION(2, 1);
+static const uint16_t kVersion = HARDWARE_MODULE_API_VERSION(2, 0);
using RequestStatus =
android::hardware::biometrics::fingerprint::V2_1::RequestStatus;
@@ -176,8 +176,31 @@
return ErrorFilter(mDevice->cancel(mDevice));
}
+#define MAX_FINGERPRINTS 100
+
+typedef int (*enumerate_2_0)(struct fingerprint_device *dev, fingerprint_finger_id_t *results,
+ uint32_t *max_size);
+
Return<RequestStatus> BiometricsFingerprint::enumerate() {
- return ErrorFilter(mDevice->enumerate(mDevice));
+ fingerprint_finger_id_t results[MAX_FINGERPRINTS];
+ uint32_t n = MAX_FINGERPRINTS;
+ enumerate_2_0 enumerate = (enumerate_2_0) mDevice->enumerate;
+ int ret = enumerate(mDevice, results, &n);
+ Return<RequestStatus> rv = ErrorFilter(ret);
+
+ if (ret == 0) {
+ uint32_t i;
+ fingerprint_msg_t msg;
+
+ msg.type = FINGERPRINT_TEMPLATE_ENUMERATING;
+ for (i = 0; i < n; i++) {
+ msg.data.enumerated.finger = results[i];
+ msg.data.enumerated.remaining_templates = n - i - 1;
+ mDevice->notify(&msg);
+ }
+ }
+
+ return rv;
}
Return<RequestStatus> BiometricsFingerprint::remove(uint32_t gid, uint32_t fid) {
diff --git a/biometrics/fingerprint/android.hardware.biometrics.fingerprint@2.1-service.rc b/biometrics/fingerprint/android.hardware.biometrics.fingerprint@2.1-service.2.0.rc
similarity index 92%
rename from biometrics/fingerprint/android.hardware.biometrics.fingerprint@2.1-service.rc
rename to biometrics/fingerprint/android.hardware.biometrics.fingerprint@2.1-service.2.0.rc
index aa767a6..4be55f9 100644
--- a/biometrics/fingerprint/android.hardware.biometrics.fingerprint@2.1-service.rc
+++ b/biometrics/fingerprint/android.hardware.biometrics.fingerprint@2.1-service.2.0.rc
@@ -1,4 +1,4 @@
-service fps_hal /vendor/bin/hw/android.hardware.biometrics.fingerprint@2.1-service
+service fps_hal /vendor/bin/hw/android.hardware.biometrics.fingerprint@2.1-service.2.0
# "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.