summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbohu <bohu@google.com>2015-05-27 18:16:11 -0700
committerbohu <bohu@google.com>2015-05-27 18:16:11 -0700
commite4b5058d2e09f95345b4e345b139e9084ad2de30 (patch)
treed422ab408c744342b66ba7eb12a55794a79d9bae
parent9aaf1aa5269232f3c2dad4ce28e21e2651fc35c8 (diff)
downloadandroid_device_generic_goldfish-e4b5058d2e09f95345b4e345b139e9084ad2de30.tar.gz
android_device_generic_goldfish-e4b5058d2e09f95345b4e345b139e9084ad2de30.tar.bz2
android_device_generic_goldfish-e4b5058d2e09f95345b4e345b139e9084ad2de30.zip
Handle un-enrolled fingerprint properly
For un-enrolled fingerprint, finger id 0 should be sent; previously nothing is sent. bug: 21342005 Change-Id: Ie32ae6c15fe63cd47657b3d95025542f09d77623
-rw-r--r--fingerprint/fingerprint.c52
1 files changed, 29 insertions, 23 deletions
diff --git a/fingerprint/fingerprint.c b/fingerprint/fingerprint.c
index e5e15a9..436081d 100644
--- a/fingerprint/fingerprint.c
+++ b/fingerprint/fingerprint.c
@@ -113,20 +113,18 @@ static void listener_send_notice(emu_fingerprint_hal_device_t* dev)
} else {
is_authentication = true;
is_valid_finger = finger_already_enrolled(dev);
- if (is_valid_finger) {
- message.type = FINGERPRINT_AUTHENTICATED;
- message.data.authenticated.finger.gid = 0;
- message.data.authenticated.finger.fid = dev->listener.fingerid;
- message.data.authenticated.hat.version = HW_AUTH_TOKEN_VERSION;
- message.data.authenticated.hat.authenticator_type = htobe32(HW_AUTH_FINGERPRINT);
- message.data.authenticated.hat.challenge = dev->op_id;
- message.data.authenticated.hat.authenticator_id = dev->authenticator_id;
- message.data.authenticated.hat.user_id = dev->secure_user_id;
- struct timespec ts;
- clock_gettime(CLOCK_MONOTONIC, &ts);
- message.data.authenticated.hat.timestamp =
- htobe64((uint64_t)ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
- }
+ message.type = FINGERPRINT_AUTHENTICATED;
+ message.data.authenticated.finger.gid = 0;
+ message.data.authenticated.finger.fid = is_valid_finger ? dev->listener.fingerid : 0;
+ message.data.authenticated.hat.version = HW_AUTH_TOKEN_VERSION;
+ message.data.authenticated.hat.authenticator_type = htobe32(HW_AUTH_FINGERPRINT);
+ message.data.authenticated.hat.challenge = dev->op_id;
+ message.data.authenticated.hat.authenticator_id = dev->authenticator_id;
+ message.data.authenticated.hat.user_id = dev->secure_user_id;
+ struct timespec ts;
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ message.data.authenticated.hat.timestamp =
+ htobe64((uint64_t)ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
}
pthread_mutex_unlock(&dev->listener.mutex);
@@ -137,7 +135,7 @@ static void listener_send_notice(emu_fingerprint_hal_device_t* dev)
message.data.acquired.acquired_info = FINGERPRINT_ACQUIRED_GOOD;
dev->device.notify(acquired_message);
}
- if (is_valid_finger) {
+ if (is_valid_finger || is_authentication) {
dev->device.notify(message);
}
pthread_mutex_unlock(&dev->lock);
@@ -249,6 +247,12 @@ static uint64_t fingerprint_get_auth_id(struct fingerprint_device __unused *devi
return dev->authenticator_id;
}
+static int fingerprint_set_active_group(struct fingerprint_device __unused *device, uint32_t gid,
+ const char *path) {
+ // TODO: implements me
+ return 0;
+}
+
static int fingerprint_authenticate(struct fingerprint_device __unused *device,
uint64_t __unused operation_id, __unused uint32_t gid)
{
@@ -303,16 +307,18 @@ static int fingerprint_cancel(struct fingerprint_device __unused *device) {
return 0;
}
+static int fingerprint_enumerate(struct fingerprint_device *device,
+ fingerprint_finger_id_t *results, uint32_t *max_size) {
+ // TODO: implement me
+ return 0;
+}
+
static int fingerprint_remove(struct fingerprint_device __unused *dev,
fingerprint_finger_id_t __unused fingerprint_id) {
// TODO: implement enroll and remove, and set dev->authenticator_id = 0 when no FPs enrolled
return FINGERPRINT_ERROR;
}
-static int fingerprint_set_active_group(struct fingerprint_device __unused *dev, uint32_t __unused gid) {
- return 0;
-}
-
static int set_notify_callback(struct fingerprint_device *device,
fingerprint_notify_t notify) {
ALOGD("set_notify");
@@ -340,14 +346,14 @@ static int fingerprint_open(const hw_module_t* module, const char __unused *id,
dev->device.common.version = HARDWARE_MODULE_API_VERSION(2, 0);
dev->device.common.module = (struct hw_module_t*) module;
dev->device.common.close = fingerprint_close;
-
- dev->device.enroll = fingerprint_enroll;
dev->device.pre_enroll = fingerprint_pre_enroll;
- dev->device.cancel = fingerprint_cancel;
+ dev->device.enroll = fingerprint_enroll;
dev->device.get_authenticator_id = fingerprint_get_auth_id;
+ dev->device.set_active_group = fingerprint_set_active_group;
dev->device.authenticate = fingerprint_authenticate;
+ dev->device.cancel = fingerprint_cancel;
+ dev->device.enumerate = fingerprint_enumerate;
dev->device.remove = fingerprint_remove;
- dev->device.set_active_group = fingerprint_set_active_group;
dev->device.set_notify = set_notify_callback;
dev->device.notify = NULL;