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.