Merge "Require two samples to enroll an new fingerprint template"
diff --git a/fingerprint/fingerprint.c b/fingerprint/fingerprint.c
index 0c63ff8..8b54c11 100644
--- a/fingerprint/fingerprint.c
+++ b/fingerprint/fingerprint.c
@@ -68,6 +68,7 @@
typedef struct worker_thread_t {
pthread_t thread;
worker_state_t state;
+ int samples_remaining;
uint64_t secureid[MAX_NUM_FINGERS];
uint64_t fingerid[MAX_NUM_FINGERS];
char fp_filename[PATH_MAX];
@@ -340,6 +341,7 @@
pthread_mutex_lock(&dev->lock);
dev->listener.state = STATE_ENROLL;
+ dev->listener.samples_remaining = 2;
pthread_mutex_unlock(&dev->lock);
// fingerprint id, authenticator id, and secure_user_id
@@ -621,26 +623,26 @@
}
}
if (idx >= MAX_NUM_FINGERS) {
- qdev->listener.state = STATE_SCAN;
+ qdev->listener.state = STATE_IDLE;
pthread_mutex_unlock(&qdev->lock);
ALOGD("Fingerprint ID table is full");
return;
}
-
- qdev->listener.secureid[idx] = qdev->secure_user_id;
- qdev->listener.fingerid[idx] = fid;
- saveFingerprint(&qdev->listener, idx);
-
- qdev->listener.state = STATE_SCAN;
+ qdev->listener.samples_remaining--;
+ int samples_remaining = qdev->listener.samples_remaining;
+ if (samples_remaining <= 0) {
+ qdev->listener.secureid[idx] = qdev->secure_user_id;
+ qdev->listener.fingerid[idx] = fid;
+ saveFingerprint(&qdev->listener, idx);
+ qdev->listener.state = STATE_IDLE;
+ }
pthread_mutex_unlock(&qdev->lock);
-
// LOCKED notification?
fingerprint_msg_t msg = {0, {0}};
msg.type = FINGERPRINT_TEMPLATE_ENROLLING;
msg.data.enroll.finger.fid = fid;
- msg.data.enroll.samples_remaining = 0;
+ msg.data.enroll.samples_remaining = samples_remaining > 0 ? samples_remaining : 0;
qdev->device.notify(&msg);
-
return;
}