From 2d10d864d8bc4b952cf412f6e18e44412dba759a Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Wed, 9 Dec 2020 15:46:23 +0100 Subject: [PATCH 01/16] nbis: Disable array-parameter and array-bounds warnings NBIS just does weird things and while the array-parameter warning is easy to fix, the other is not trivial. So disable these warnings so that we can still build using newer GCC versions. --- libfprint/meson.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libfprint/meson.build b/libfprint/meson.build index 96cfe9b5..4d1d30cc 100644 --- a/libfprint/meson.build +++ b/libfprint/meson.build @@ -234,6 +234,8 @@ libnbis = static_library('nbis', '-Wno-error=redundant-decls', '-Wno-redundant-decls', '-Wno-discarded-qualifiers', + '-Wno-array-bounds', + '-Wno-array-parameter', ]), install: false) From ed5339c4f5bbd80ac79b98ef21d8924af61b400d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Mon, 14 Dec 2020 18:13:53 +0100 Subject: [PATCH 02/16] vfs5011: Unset the recorded rows list when freeing them Ensure that we unset the rows list when closing the device, so that we won't try to append to invalid rows list new ones again. --- libfprint/drivers/vfs5011.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libfprint/drivers/vfs5011.c b/libfprint/drivers/vfs5011.c index ffc06803..2d5b0b9f 100644 --- a/libfprint/drivers/vfs5011.c +++ b/libfprint/drivers/vfs5011.c @@ -821,7 +821,7 @@ dev_close (FpImageDevice *dev) 0, 0, &error); g_free (self->capture_buffer); - g_slist_free_full (self->rows, g_free); + g_slist_free_full (g_steal_pointer (&self->rows), g_free); fpi_image_device_close_complete (dev, error); } From 3560a0f1e7c8aab6082dc3c20a0e0e33eb814105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Mon, 14 Dec 2020 18:16:43 +0100 Subject: [PATCH 03/16] vfs5011: Remove the stray ; --- libfprint/drivers/vfs5011.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/libfprint/drivers/vfs5011.c b/libfprint/drivers/vfs5011.c index 2d5b0b9f..c1e684c1 100644 --- a/libfprint/drivers/vfs5011.c +++ b/libfprint/drivers/vfs5011.c @@ -815,8 +815,6 @@ dev_close (FpImageDevice *dev) GError *error = NULL; FpDeviceVfs5011 *self = FPI_DEVICE_VFS5011 (dev); - ; - g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (dev)), 0, 0, &error); From 7e2b89791e36d63dd12e3e5969edc054d48519a2 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Fri, 4 Dec 2020 16:26:22 +0100 Subject: [PATCH 04/16] tests: Fix typo in instructions --- tests/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/README.md b/tests/README.md index 8a70ba12..9dc575ed 100644 --- a/tests/README.md +++ b/tests/README.md @@ -27,7 +27,7 @@ A new 'capture' test is created by means of `capture.py` script: - `export LD_PRELOAD=/libfprint/libfprint-2.so` - `export GI_TYPELIB_PATH=/libfprint` - Also, sometimes the driver must be adopted to the emulated environment + Also, sometimes the driver must be adapted to the emulated environment (mainly if it uses random numbers, see `synaptics.c` for an example). Set the following environment variable to enable this adaptation: - `export FP_DEVICE_EMULATION=1` From b1b20f8ab962fb75df8caa4a0a5eda5ce982b5c1 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Fri, 4 Dec 2020 16:26:34 +0100 Subject: [PATCH 05/16] tests: Mention permissions in test docs --- tests/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/README.md b/tests/README.md index 9dc575ed..9eac6a4b 100644 --- a/tests/README.md +++ b/tests/README.md @@ -41,6 +41,11 @@ A new 'capture' test is created by means of `capture.py` script: The following USB device is used in the example above: `/dev/bus/usb/001/005`. + For the following commands, it is assumed that the user that's + running the commands has full access to the device node, whether + by running the commands as `root`, or changing the permissions for + that device node. + 4. Record information about this device: `umockdev-record /dev/bus/usb/001/005 > DRIVER/device` From d6ca8ff2b0fff62ebc0b5507f3633f1fe7db75d5 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Thu, 17 Dec 2020 13:58:38 +0100 Subject: [PATCH 06/16] tests: Fix typo in comment --- tests/test-fp-context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test-fp-context.c b/tests/test-fp-context.c index 1dd1f727..156e6d47 100644 --- a/tests/test-fp-context.c +++ b/tests/test-fp-context.c @@ -287,7 +287,7 @@ test_context_remove_device_opening (void) g_assert_true (removed); g_assert_null (tctx->user_data); - /* Running the mainloop now will cause the open to *succeed* dispite removal! */ + /* Running the mainloop now will cause the open to *succeed* despite removal! */ while (!open_done) g_main_context_iteration (NULL, TRUE); From ee928db5b2cdb82f967aff156a8fc01686e6bc58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torstein=20Huseb=C3=B8?= Date: Tue, 18 Aug 2020 17:36:16 +0200 Subject: [PATCH 07/16] treewide: Correct typos --- libfprint/drivers/goodixmoc/goodix.c | 2 +- libfprint/drivers/synaptics/synaptics.c | 2 +- libfprint/fp-device.c | 2 +- libfprint/fpi-device.c | 2 +- libfprint/fpi-ssm.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index bb0368b9..563b379a 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -742,7 +742,7 @@ fp_finger_mode_cb (FpiDeviceGoodixMoc *self, fpi_ssm_mark_failed (self->task_ssm, error); return; } - /* if reach max timeout(5sec) finger not up, swtich to finger up again */ + /* if reach max timeout(5sec) finger not up, switch to finger up again */ if (resp->finger_status.status == GX_ERROR_WAIT_FINGER_UP_TIMEOUT) { fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_WAIT_FINGER_UP); diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c index 934a271e..f4100722 100644 --- a/libfprint/drivers/synaptics/synaptics.c +++ b/libfprint/drivers/synaptics/synaptics.c @@ -121,7 +121,7 @@ cmd_receive_cb (FpiUsbTransfer *transfer, { if (resp.response_id == BMKT_RSP_CANCEL_OP_OK) { - fp_dbg ("Received cancellation success resonse"); + fp_dbg ("Received cancellation success response"); fpi_ssm_mark_failed (transfer->ssm, g_error_new_literal (G_IO_ERROR, G_IO_ERROR_CANCELLED, diff --git a/libfprint/fp-device.c b/libfprint/fp-device.c index 6db665fa..f752a487 100644 --- a/libfprint/fp-device.c +++ b/libfprint/fp-device.c @@ -792,7 +792,7 @@ fp_device_close_finish (FpDevice *device, * in. The driver may make use of this metadata, when e.g. storing the print on * device memory. It is undefined whether this print is filled in by the driver * and returned, or whether the driver will return a newly created print after - * enrollment successed. + * enrollment succeeded. */ void fp_device_enroll (FpDevice *device, diff --git a/libfprint/fpi-device.c b/libfprint/fpi-device.c index 0968c0c1..de511920 100644 --- a/libfprint/fpi-device.c +++ b/libfprint/fpi-device.c @@ -760,7 +760,7 @@ fp_device_task_return_in_idle_cb (gpointer user_data) g_task_return_error (task, fpi_device_error_new (FP_DEVICE_ERROR_REMOVED)); /* NOTE: The removed signal will be emitted from the GTask - * notify::completed if that is neccessary. */ + * notify::completed if that is necessary. */ return G_SOURCE_REMOVE; } diff --git a/libfprint/fpi-ssm.c b/libfprint/fpi-ssm.c index 3cc39a7f..25728d18 100644 --- a/libfprint/fpi-ssm.c +++ b/libfprint/fpi-ssm.c @@ -74,7 +74,7 @@ * upon success (or fails). * * Your completion callback should examine the return value of - * fpi_ssm_get_error() in ordater to determine whether the #FpiSsm completed or + * fpi_ssm_get_error() in order to determine whether the #FpiSsm completed or * failed. An error code of zero indicates successful completion. */ From e6712fbcca7b087c4d90f47a86ab94449b5814ea Mon Sep 17 00:00:00 2001 From: fengqiangguo Date: Wed, 16 Dec 2020 20:35:53 +0800 Subject: [PATCH 08/16] goodixmoc: add two new Goodix PID support. Add two new Goodix PID 0x63AC and 0x639C, to support two more Goodix fingerprint devices on Linux platform. --- libfprint/drivers/goodixmoc/goodix.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index 563b379a..e9f91fef 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -1424,6 +1424,8 @@ static const FpIdEntry id_table[] = { { .vid = 0x27c6, .pid = 0x5840, }, { .vid = 0x27c6, .pid = 0x6496, }, { .vid = 0x27c6, .pid = 0x60A2, }, + { .vid = 0x27c6, .pid = 0x63AC, }, + { .vid = 0x27c6, .pid = 0x639C, }, { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ }; From 2ee0d1678410b675efd6c32934ab44194e7be376 Mon Sep 17 00:00:00 2001 From: fengqiangguo Date: Thu, 10 Dec 2020 23:12:38 +0800 Subject: [PATCH 09/16] goodixmoc: fetch max_stored_prints from device During updating configuration, device will send back the max_stored_prints back. The number of max_stored_prints is different among different devices. --- libfprint/drivers/goodixmoc/goodix.c | 12 +++++++++++- libfprint/drivers/goodixmoc/goodix_proto.c | 8 +++++++- libfprint/drivers/goodixmoc/goodix_proto.h | 8 +++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index e9f91fef..7c66ba32 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -53,6 +53,7 @@ struct _FpiDeviceGoodixMoc pgxfp_sensor_cfg_t sensorcfg; gint enroll_stage; gint max_enroll_stage; + gint max_stored_prints; GCancellable *cancellable; GPtrArray *list_result; guint8 template_id[TEMPLATE_ID_SIZE]; @@ -560,6 +561,13 @@ fp_enroll_enum_cb (FpiDeviceGoodixMoc *self, resp->result)); return; } + if (resp->finger_list_resp.finger_num >= self->max_stored_prints) + { + fpi_ssm_mark_failed (self->task_ssm, + fpi_device_error_new (FP_DEVICE_ERROR_DATA_FULL)); + return; + } + fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); } @@ -975,7 +983,7 @@ fp_init_config_cb (FpiDeviceGoodixMoc *self, fpi_ssm_mark_failed (self->task_ssm, error); return; } - + self->max_stored_prints = resp->finger_config.max_stored_prints; fpi_ssm_next_state (self->task_ssm); } @@ -1259,6 +1267,8 @@ gx_fp_init (FpDevice *device) GError *error = NULL; int ret = 0; + self->max_stored_prints = FP_MAX_FINGERNUM; + self->cancellable = g_cancellable_new (); self->sensorcfg = g_new0 (gxfp_sensor_cfg_t, 1); diff --git a/libfprint/drivers/goodixmoc/goodix_proto.c b/libfprint/drivers/goodixmoc/goodix_proto.c index ece8123d..e30d23df 100644 --- a/libfprint/drivers/goodixmoc/goodix_proto.c +++ b/libfprint/drivers/goodixmoc/goodix_proto.c @@ -294,6 +294,12 @@ gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint32_t buffer_len, pgxfp_c break; case MOC_CMD0_UPDATE_CONFIG: + { + presp->finger_config.status = buffer[0]; + presp->finger_config.max_stored_prints = buffer[2]; + } + break; + case MOC_CMD0_COMMITENROLLMENT: case MOC_CMD0_DELETETEMPLATE: break; @@ -411,7 +417,7 @@ gx_proto_init_sensor_config (pgxfp_sensor_cfg_t pconfig) memset (pconfig, 0, sizeof (*pconfig)); //NOTICE: Do not change any value! - memcpy (&pconfig->config, sensor_config, 26); + memcpy (&pconfig->config, sensor_config, G_N_ELEMENTS (sensor_config)); pconfig->reserved[0] = 1; gx_proto_crc32_calc ((uint8_t *) pconfig, sizeof (*pconfig) - PACKAGE_CRC_SIZE, (uint8_t *) &crc32_calc); diff --git a/libfprint/drivers/goodixmoc/goodix_proto.h b/libfprint/drivers/goodixmoc/goodix_proto.h index 1611a601..53eea046 100644 --- a/libfprint/drivers/goodixmoc/goodix_proto.h +++ b/libfprint/drivers/goodixmoc/goodix_proto.h @@ -25,7 +25,7 @@ #define PACKAGE_CRC_SIZE (4) #define PACKAGE_HEADER_SIZE (8) -#define FP_MAX_FINGERNUM (10) +#define FP_MAX_FINGERNUM (20) #define TEMPLATE_ID_SIZE (32) @@ -167,6 +167,11 @@ typedef struct _fp_finger_status uint8_t status; } fp_finger_status_t, *pfp_finger_status_t; +typedef struct _fp_finger_config +{ + uint8_t status; + uint8_t max_stored_prints; +} fp_finger_config_t, *pfp_finger_config_t; typedef struct _fp_cmd_response { @@ -183,6 +188,7 @@ typedef struct _fp_cmd_response gxfp_enum_fingerlist_t finger_list_resp; gxfp_version_info_t version_info; fp_finger_status_t finger_status; + fp_finger_config_t finger_config; }; } gxfp_cmd_response_t, *pgxfp_cmd_response_t; From 3d5db6a391f9f168c6b6b2c721c5443e59881268 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Wed, 9 Dec 2020 15:04:08 +0100 Subject: [PATCH 10/16] synaptics: Improve identify handler and return a new print It is easier (and more correct) to create a new print from the reported data and match that against the prints in the gallery. We continue to return NULL during verify as we cannot provide any additional information in that case. --- libfprint/drivers/synaptics/synaptics.c | 91 +++++++++++++------------ 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c index f4100722..61abe84a 100644 --- a/libfprint/drivers/synaptics/synaptics.c +++ b/libfprint/drivers/synaptics/synaptics.c @@ -451,6 +451,37 @@ parse_print_data (GVariant *data, return TRUE; } +static FpPrint * +create_print (FpiDeviceSynaptics *self, + guint8 *user_id, + guint8 finger_id) +{ + FpPrint *print; + g_autofree gchar *user_id_safe; + GVariant *data = NULL; + GVariant *uid = NULL; + + user_id_safe = g_strndup ((char *) user_id, BMKT_MAX_USER_ID_LEN); + + print = fp_print_new (FP_DEVICE (self)); + uid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, + user_id_safe, + strlen (user_id_safe), + 1); + data = g_variant_new ("(y@ay)", + finger_id, + uid); + + fpi_print_set_type (print, FPI_PRINT_RAW); + fpi_print_set_device_stored (print, TRUE); + g_object_set (print, "fpi-data", data, NULL); + g_object_set (print, "description", user_id_safe, NULL); + + fpi_print_fill_from_user_id (print, user_id_safe); + + return print; +} + static void list_msg_cb (FpiDeviceSynaptics *self, bmkt_response_t *resp, @@ -503,10 +534,7 @@ list_msg_cb (FpiDeviceSynaptics *self, for (int n = 0; n < BMKT_MAX_NUM_TEMPLATES_INTERNAL_FLASH; n++) { - GVariant *data = NULL; - GVariant *uid = NULL; FpPrint *print; - gchar *userid; if (get_enroll_templates_resp->templates[n].user_id_len == 0) continue; @@ -519,23 +547,9 @@ list_msg_cb (FpiDeviceSynaptics *self, get_enroll_templates_resp->templates[n].user_id, get_enroll_templates_resp->templates[n].finger_id); - userid = (gchar *) get_enroll_templates_resp->templates[n].user_id; - - print = fp_print_new (FP_DEVICE (self)); - uid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, - get_enroll_templates_resp->templates[n].user_id, - get_enroll_templates_resp->templates[n].user_id_len, - 1); - data = g_variant_new ("(y@ay)", - get_enroll_templates_resp->templates[n].finger_id, - uid); - - fpi_print_set_type (print, FPI_PRINT_RAW); - fpi_print_set_device_stored (print, TRUE); - g_object_set (print, "fpi-data", data, NULL); - g_object_set (print, "description", get_enroll_templates_resp->templates[n].user_id, NULL); - - fpi_print_fill_from_user_id (print, userid); + print = create_print (self, + get_enroll_templates_resp->templates[n].user_id, + get_enroll_templates_resp->templates[n].finger_id); g_ptr_array_add (self->list_result, g_object_ref_sink (print)); } @@ -760,37 +774,28 @@ identify_msg_cb (FpiDeviceSynaptics *self, FpPrint *print = NULL; GPtrArray *prints = NULL; g_autoptr(GVariant) data = NULL; - guint8 finger; - const guint8 *user_id; - gsize user_id_len = 0; - gint cnt = 0; - gboolean find = FALSE; + gboolean found = FALSE; + guint index; + + print = create_print (self, + resp->response.id_resp.user_id, + resp->response.id_resp.finger_id); fpi_device_get_identify_data (device, &prints); - for (cnt = 0; cnt < prints->len; cnt++) + found = g_ptr_array_find_with_equal_func (prints, + print, + (GEqualFunc) fp_print_equal, + &index); + + if (found) { - print = g_ptr_array_index (prints, cnt); - g_object_get (print, "fpi-data", &data, NULL); - g_debug ("data is %p", data); - parse_print_data (data, &finger, &user_id, &user_id_len); - if (user_id) - { - if (memcmp (resp->response.id_resp.user_id, user_id, user_id_len) == 0) - { - find = TRUE; - break; - } - } - } - if(find) - { - fpi_device_identify_report (device, print, print, NULL); + fpi_device_identify_report (device, g_ptr_array_index (prints, index), print, NULL); fpi_device_identify_complete (device, NULL); } else { - fpi_device_identify_report (device, NULL, NULL, NULL); + fpi_device_identify_report (device, NULL, print, NULL); identify_complete_after_finger_removal (self); } } From 35d2d78e672934acc27d19d2bfa23a773b944b3e Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Tue, 15 Dec 2020 13:16:19 +0100 Subject: [PATCH 11/16] synaptics: Delay verify operation completion until finger remoal We used to return early in the case where the print matched in order to report the result more quickly. However, with the early reporting mechanism and the fprintd side implementation of it, this is not necessary anymore. As such, only stop the "verify" and "identify" operations when the finger is removed (or the operation is cancelled, which is actually what will happen currently). --- libfprint/drivers/synaptics/synaptics.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c index 61abe84a..27021517 100644 --- a/libfprint/drivers/synaptics/synaptics.c +++ b/libfprint/drivers/synaptics/synaptics.c @@ -663,7 +663,7 @@ verify_msg_cb (FpiDeviceSynaptics *self, fp_info ("Verify was successful! for user: %s finger: %d score: %f", verify_resp->user_id, verify_resp->finger_id, verify_resp->match_result); fpi_device_verify_report (device, FPI_MATCH_SUCCESS, NULL, NULL); - fpi_device_verify_complete (device, NULL); + verify_complete_after_finger_removal (self); break; } } @@ -789,15 +789,11 @@ identify_msg_cb (FpiDeviceSynaptics *self, &index); if (found) - { - fpi_device_identify_report (device, g_ptr_array_index (prints, index), print, NULL); - fpi_device_identify_complete (device, NULL); - } + fpi_device_identify_report (device, g_ptr_array_index (prints, index), print, NULL); else - { - fpi_device_identify_report (device, NULL, print, NULL); - identify_complete_after_finger_removal (self); - } + fpi_device_identify_report (device, NULL, print, NULL); + + identify_complete_after_finger_removal (self); } } } From f852d972a5c9948b52589e30bed3f9e30dc29bf9 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Mon, 14 Dec 2020 20:34:56 +0100 Subject: [PATCH 12/16] goodix: Add missing return to fp_verify_capture_cb Found by coverity. While quite bad in theory, proper safeguards are in place, so it will only result in a g_return_val_if_fail to be hit rather than causing more severe side effects. --- libfprint/drivers/goodixmoc/goodix.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index 7c66ba32..d22c44f8 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -342,6 +342,7 @@ fp_verify_capture_cb (FpiDeviceGoodixMoc *self, { fpi_ssm_mark_failed (self->task_ssm, fpi_device_retry_new (FP_DEVICE_RETRY_CENTER_FINGER)); + return; } fpi_ssm_next_state (self->task_ssm); } From 943c64d96f8679b74e6fab8a5b1542b2ec34fae4 Mon Sep 17 00:00:00 2001 From: Vincent Huang Date: Tue, 5 Jan 2021 15:25:46 +0800 Subject: [PATCH 13/16] synaptics: modify the command to only identify the provided print list --- libfprint/drivers/synaptics/synaptics.c | 105 ++++++++++++++++++++---- libfprint/drivers/synaptics/synaptics.h | 1 + 2 files changed, 90 insertions(+), 16 deletions(-) diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c index 27021517..be5582e5 100644 --- a/libfprint/drivers/synaptics/synaptics.c +++ b/libfprint/drivers/synaptics/synaptics.c @@ -27,6 +27,9 @@ G_DEFINE_TYPE (FpiDeviceSynaptics, fpi_device_synaptics, FP_TYPE_DEVICE) +static void init_identify_msg (FpDevice *device); +static void compose_and_send_identify_msg (FpDevice *device); + static const FpIdEntry id_table[] = { { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xBD, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xE9, }, @@ -739,6 +742,12 @@ identify_msg_cb (FpiDeviceSynaptics *self, fp_info ("Place Finger on the Sensor!"); break; + case BMKT_RSP_SEND_NEXT_USER_ID: + { + compose_and_send_identify_msg (device); + break; + } + case BMKT_RSP_ID_FAIL: if (resp->result == BMKT_SENSOR_STIMULUS_ERROR) { @@ -800,6 +809,21 @@ identify_msg_cb (FpiDeviceSynaptics *self, static void identify (FpDevice *device) +{ + init_identify_msg (device); + compose_and_send_identify_msg (device); +} + +static void +init_identify_msg (FpDevice *device) +{ + FpiDeviceSynaptics *self = FPI_DEVICE_SYNAPTICS (device); + + self->id_idx = 0; +} + +static void +compose_and_send_identify_msg (FpDevice *device) { FpiDeviceSynaptics *self = FPI_DEVICE_SYNAPTICS (device); FpPrint *print = NULL; @@ -809,28 +833,77 @@ identify (FpDevice *device) guint8 finger; const guint8 *user_id; gsize user_id_len = 0; - gint cnt = 0; + g_autofree guint8 *payload = NULL; + guint8 payload_len = 0; + guint8 payloadOffset = 0; fpi_device_get_identify_data (device, &prints); - - for (cnt = 0; cnt < prints->len; cnt++) + if (prints->len > UINT8_MAX) { - print = g_ptr_array_index (prints, cnt); - g_object_get (print, "fpi-data", &data, NULL); - g_debug ("data is %p", data); - if (!parse_print_data (data, &finger, &user_id, &user_id_len)) - { - fpi_device_identify_complete (device, - fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID)); - return; - } + fpi_device_identify_complete (device, + fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID)); + return; } - G_DEBUG_HERE (); + if(self->id_idx >= prints->len) + { + fp_warn ("Device asked for more prints than we are providing."); + fpi_device_identify_complete (device, + fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, + "Unexpected index")); + return; + } + print = g_ptr_array_index (prints, self->id_idx); + g_object_get (print, "fpi-data", &data, NULL); + g_debug ("data is %p", data); + if (!parse_print_data (data, &finger, &user_id, &user_id_len)) + { + fpi_device_identify_complete (device, + fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID)); + return; + } + if(self->id_idx == 0) + { + /* + * Construct payload. + * 1st byte is total number of IDs in list. + * 2nd byte is number of IDs in list. + * 1 byte for each ID length, maximum id length is 100. + * user_id_len bytes of each ID + */ + payload_len = 2 + 1 + user_id_len; + payload = g_malloc0 (payload_len); + payload[payloadOffset] = prints->len; + payloadOffset += 1; + payload[payloadOffset] = 1; /* send one id per message */ + payloadOffset += 1; + payload[payloadOffset] = user_id_len; + payloadOffset += 1; + memcpy (&payload[payloadOffset], user_id, user_id_len); + payloadOffset += user_id_len; - synaptics_sensor_cmd (self, 0, BMKT_CMD_ID_USER, NULL, 0, identify_msg_cb); + G_DEBUG_HERE (); + + synaptics_sensor_cmd (self, 0, BMKT_CMD_ID_USER_IN_ORDER, payload, payloadOffset, identify_msg_cb); + } + else + { + /* + * 1st byte is the number of IDs + * 1 byte for each ID length + * id_length bytes for each ID + */ + payload_len = 1 + 1 + user_id_len; + payload = g_malloc0 (payload_len); + payload[payloadOffset] = 1; /* send one id per message */ + payloadOffset += 1; + payload[payloadOffset] = user_id_len; + payloadOffset += 1; + memcpy (&payload[payloadOffset], user_id, user_id_len); + payloadOffset += user_id_len; + synaptics_sensor_cmd (self, self->cmd_seq_num, BMKT_CMD_ID_NEXT_USER, payload, payloadOffset, NULL); + } + self->id_idx++; } - - static void enroll_msg_cb (FpiDeviceSynaptics *self, bmkt_response_t *resp, diff --git a/libfprint/drivers/synaptics/synaptics.h b/libfprint/drivers/synaptics/synaptics.h index ac50171b..deb3a224 100644 --- a/libfprint/drivers/synaptics/synaptics.h +++ b/libfprint/drivers/synaptics/synaptics.h @@ -110,6 +110,7 @@ struct _FpiDeviceSynaptics FpiSsm *cmd_ssm; FpiUsbTransfer *cmd_pending_transfer; gboolean cmd_complete_on_removal; + guint8 id_idx; bmkt_sensor_version_t mis_version; From 8254b9e99e4ca1b16e0d02ea337e966f58cbf72c Mon Sep 17 00:00:00 2001 From: boger Date: Mon, 4 Jan 2021 15:37:52 +0800 Subject: [PATCH 14/16] goodixmoc: support finger status report there is no specific API for report finger status, finger needed status is set when captrue sample cmd send, once cmd receive correct, finger is pressing on sensor. --- libfprint/drivers/goodixmoc/goodix.c | 17 +++++++++++++++-- tests/goodixmoc/custom.py | 5 +++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index d22c44f8..af64d814 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -331,7 +331,9 @@ fp_verify_capture_cb (FpiDeviceGoodixMoc *self, fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL)); return; } - + fpi_device_report_finger_status_changes (FP_DEVICE (self), + FP_FINGER_STATUS_PRESENT, + FP_FINGER_STATUS_NONE); if (resp->capture_data_resp.img_quality == 0) { fpi_ssm_mark_failed (self->task_ssm, @@ -435,6 +437,9 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) switch (fpi_ssm_get_cur_state (ssm)) { case FP_VERIFY_CAPTURE: + fpi_device_report_finger_status_changes (device, + FP_FINGER_STATUS_NEEDED, + FP_FINGER_STATUS_NONE); goodix_sensor_cmd (self, MOC_CMD0_CAPTURE_DATA, MOC_CMD1_DEFAULT, true, (const guint8 *) ¶m, @@ -629,7 +634,9 @@ fp_enroll_capture_cb (FpiDeviceGoodixMoc *self, fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); return; } - + fpi_device_report_finger_status_changes (FP_DEVICE (self), + FP_FINGER_STATUS_PRESENT, + FP_FINGER_STATUS_NONE); if ((resp->capture_data_resp.img_quality < self->sensorcfg->config[4]) || (resp->capture_data_resp.img_coverage < self->sensorcfg->config[5])) { @@ -764,6 +771,9 @@ fp_finger_mode_cb (FpiDeviceGoodixMoc *self, "Switch finger mode failed")); return; } + fpi_device_report_finger_status_changes (FP_DEVICE (self), + FP_FINGER_STATUS_NONE, + FP_FINGER_STATUS_PRESENT); if (self->enroll_stage < self->max_enroll_stage) { fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); @@ -826,6 +836,9 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) break; case FP_ENROLL_CAPTURE: + fpi_device_report_finger_status_changes (device, + FP_FINGER_STATUS_NEEDED, + FP_FINGER_STATUS_NONE); goodix_sensor_cmd (self, MOC_CMD0_CAPTURE_DATA, MOC_CMD1_DEFAULT, true, (const guint8 *) &dummy, diff --git a/tests/goodixmoc/custom.py b/tests/goodixmoc/custom.py index 57faf6c5..17f35622 100755 --- a/tests/goodixmoc/custom.py +++ b/tests/goodixmoc/custom.py @@ -20,6 +20,7 @@ d.open_sync() template = FPrint.Print.new(d) def enroll_progress(*args): + assert d.get_finger_status() == FPrint.FingerStatusFlags.NEEDED print('enroll progress: ' + str(args)) def identify_done(dev, res): @@ -31,7 +32,9 @@ def identify_done(dev, res): # List, enroll, list, verify, identify, delete print("enrolling") +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE p = d.enroll_sync(template, None, enroll_progress, None) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE print("enroll done") print("listing") @@ -40,7 +43,9 @@ print("listing done") assert len(stored) == 1 assert stored[0].equal(p) print("verifying") +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE verify_res, verify_print = d.verify_sync(p) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE print("verify done") del p assert verify_res == True From a6c2509ca8c3aacefac8d00232e260f53eeed9f0 Mon Sep 17 00:00:00 2001 From: Aris Lin Date: Fri, 8 Jan 2021 14:48:22 +0800 Subject: [PATCH 15/16] synaptics: check if current firmware supports during device probe Fixes: #239 and #351 --- libfprint/drivers/synaptics/synaptics.c | 73 +++++++++++++------------ tests/synaptics/custom.ioctl | 72 ++++++++++++------------ 2 files changed, 76 insertions(+), 69 deletions(-) diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c index be5582e5..b4711faf 100644 --- a/libfprint/drivers/synaptics/synaptics.c +++ b/libfprint/drivers/synaptics/synaptics.c @@ -1133,6 +1133,44 @@ delete_print (FpDevice *device) synaptics_sensor_cmd (self, 0, BMKT_CMD_DEL_USER_FP, payload, user_id_len + 1, delete_msg_cb); } +static void +prob_msg_cb (FpiDeviceSynaptics *self, + bmkt_response_t *resp, + GError *error) +{ + GUsbDevice *usb_dev = NULL; + g_autofree gchar *serial = NULL; + + usb_dev = fpi_device_get_usb_device (FP_DEVICE (self)); + + if (error) + { + g_usb_device_close (usb_dev, NULL); + fpi_device_probe_complete (FP_DEVICE (self), NULL, NULL, + fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, "unsupported firmware version")); + return; + } + + if (g_strcmp0 (g_getenv ("FP_DEVICE_EMULATION"), "1") == 0) + serial = g_strdup ("emulated-device"); + else + serial = g_usb_device_get_string_descriptor (usb_dev, + g_usb_device_get_serial_number_index (usb_dev), + &error); + + if (resp->result == BMKT_SUCCESS) + { + g_usb_device_close (usb_dev, NULL); + fpi_device_probe_complete (FP_DEVICE (self), serial, NULL, error); + } + else + { + g_warning ("Probe fingerprint sensor failed with %d!", resp->result); + g_usb_device_close (usb_dev, NULL); + fpi_device_probe_complete (FP_DEVICE (self), serial, NULL, fpi_device_error_new (FP_DEVICE_ERROR_GENERAL)); + } +} + static void dev_probe (FpDevice *device) { @@ -1233,40 +1271,7 @@ dev_probe (FpDevice *device) fp_dbg ("Target: %d", self->mis_version.target); fp_dbg ("Product: %d", self->mis_version.product); - - /* We need at least firmware version 10.1, and for 10.1 build 2989158 */ - if (self->mis_version.version_major < 10 || - self->mis_version.version_minor < 1 || - (self->mis_version.version_major == 10 && - self->mis_version.version_minor == 1 && - self->mis_version.build_num < 2989158)) - { - fp_warn ("Firmware version %d.%d with build number %d is unsupported", - self->mis_version.version_major, - self->mis_version.version_minor, - self->mis_version.build_num); - - error = fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, - "Unsupported firmware version " - "(%d.%d with build number %d)", - self->mis_version.version_major, - self->mis_version.version_minor, - self->mis_version.build_num); - goto err_close; - } - - /* This is the same as the serial_number from above, hex encoded and somewhat reordered */ - /* Should we add in more, e.g. the chip revision? */ - if (g_strcmp0 (g_getenv ("FP_DEVICE_EMULATION"), "1") == 0) - serial = g_strdup ("emulated-device"); - else - serial = g_usb_device_get_string_descriptor (usb_dev, - g_usb_device_get_serial_number_index (usb_dev), - &error); - - g_usb_device_close (usb_dev, NULL); - - fpi_device_probe_complete (device, serial, NULL, error); + synaptics_sensor_cmd (self, 0, BMKT_CMD_FPS_INIT, NULL, 0, prob_msg_cb); return; diff --git a/tests/synaptics/custom.ioctl b/tests/synaptics/custom.ioctl index 370a8e07..e2ea71f1 100644 --- a/tests/synaptics/custom.ioctl +++ b/tests/synaptics/custom.ioctl @@ -4,14 +4,16 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 01 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 40 38 0 00009C37FE5C669C2D000A01014101C10000D11BB7134A090FA1000000000100000000000003 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE011100 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE01130100 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302D302D30303030303030302D6E6F626F6479 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE025400 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE021100 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02130100 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE03512000014650312D30303030303030302D302D30303030303030302D6E6F626F6479 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE035400 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -20,13 +22,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0255010C + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0355010C USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -35,19 +37,19 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550119 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550119 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550125 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550125 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -56,13 +58,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550125 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550125 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -71,13 +73,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550132 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550132 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -86,13 +88,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0255013E + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0355013E USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -101,13 +103,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0255013E + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0355013E USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -116,13 +118,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0255014B + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE0355014B USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 @@ -131,7 +133,7 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -140,13 +142,13 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550157 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550157 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE026000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE036000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -155,21 +157,21 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 37 37 0 A7FE02512000014650312D30303030303030302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE02550164 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE03550164 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 37 0 0000FE02591F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 37 0 0000FE03591F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE037100 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 41 0 0000FE03752301012007014650312D30303030303030302D302D30303030303030302D6E6F626F6479 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE037200 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE037600 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 35 35 0 A7FE04651E4650312D30303030303030302D302D30303030303030302D6E6F626F6479 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE046600 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE047100 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 41 0 0000FE04752301012007014650312D30303030303030302D302D30303030303030302D6E6F626F6479 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE047200 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE047600 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 35 35 0 A7FE05651E4650312D30303030303030302D302D30303030303030302D6E6F626F6479 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE056600 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000000 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE046000 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE056000 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 06000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910101 @@ -178,9 +180,9 @@ USBDEVFS_REAPURBNDELAY 0 3 1 0 0 35 35 0 A7FE04651E4650312D30303030303030302D302 USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 7 0 0000FE00910100 USBDEVFS_REAPURBNDELAY 0 1 131 0 0 7 7 0 05000000000100 USBDEVFS_REAPURBNDELAY 0 3 1 0 0 1 1 0 A8 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 39 0 0000FE0468214F2B014650312D30303030303030302D302D30303030303030302D6E6F626F6479 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 36 36 0 A7FE05811F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 37 0 0000FE05831F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 -USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE06A100 - USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE06A200 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 39 0 0000FE0568214F2B014650312D30303030303030302D302D30303030303030302D6E6F626F6479 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 36 36 0 A7FE06811F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 37 0 0000FE06831F014650312D30303030303030302D302D30303030303030302D6E6F626F6479 +USBDEVFS_REAPURBNDELAY 0 3 1 0 0 5 5 0 A7FE07A100 + USBDEVFS_REAPURBNDELAY 0 3 129 0 0 266 6 0 0000FE07A200 From 7c2a67a9544dd5b7bfa134ad7add566590f9c913 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Wed, 13 Jan 2021 13:18:58 +0100 Subject: [PATCH 16/16] Release 1.90.7 --- NEWS | 10 ++++++++++ meson.build | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 335986ed..c7a9c70b 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,16 @@ This file lists notable changes in each release. For the full history of all changes, see ChangeLog. +2020-12-01: v1.90.7 release + +Highlights: + * vfs5011: Fix possible use-after-free + * goodixmoc: Add two new PIDs (0x63AC, 0x639C) + * goodixmoc: Support finger status API + * synaptics: Only identify within provided prints + * synaptics: Reject devices with old firmware during probe (#239) + + 2020-12-01: v1.90.6 release This release is primarily a bugfix release for some older issues. diff --git a/meson.build b/meson.build index a2b849b1..139c571c 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('libfprint', [ 'c', 'cpp' ], - version: '1.90.6', + version: '1.90.7', license: 'LGPLv2.1+', default_options: [ 'buildtype=debugoptimized',