From 1b74813adf2bc9f2ab3db2a1f1a6270063c82f3e Mon Sep 17 00:00:00 2001 From: Evgeny Gagauz Date: Wed, 13 May 2020 09:51:23 +0000 Subject: [PATCH] vfs0050: Stop capture after a timeout happens If a transfer errors out then actual_length is negative. The only error that is not caught is a timeout error, which should also result in the SSM to move to the next state. --- libfprint/drivers/vfs0050.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libfprint/drivers/vfs0050.c b/libfprint/drivers/vfs0050.c index 9dc8f9a..0d8b9f5 100644 --- a/libfprint/drivers/vfs0050.c +++ b/libfprint/drivers/vfs0050.c @@ -156,6 +156,8 @@ async_abort (FpDevice *dev, FpiSsm *ssm, int ep) else fpi_usb_transfer_fill_bulk (transfer, ep, VFS_USB_BUFFER_SIZE); + transfer->ssm = ssm; + fpi_usb_transfer_submit (transfer, VFS_USB_ABORT_TIMEOUT, NULL, async_abort_callback, NULL); } @@ -464,8 +466,8 @@ receive_callback (FpiUsbTransfer *transfer, FpDevice *device, if (error) g_error_free (error); - /* Check if fingerprint data is over */ - if (transfer->actual_length == 0) + /* Capture is done when there is no more data to transfer or device timed out */ + if (transfer->actual_length <= 0) { fpi_ssm_next_state (transfer->ssm); } @@ -473,7 +475,7 @@ receive_callback (FpiUsbTransfer *transfer, FpDevice *device, { self->bytes += transfer->actual_length; - /* We need more data */ + /* Try reading more data */ fpi_ssm_jump_to_state (transfer->ssm, fpi_ssm_get_cur_state (transfer->ssm)); } @@ -595,8 +597,7 @@ activate_ssm (FpiSsm *ssm, FpDevice *dev) /* Receive chunk of data */ transfer = fpi_usb_transfer_new (dev); fpi_usb_transfer_fill_bulk_full (transfer, 0x82, - (guint8 *) - (self->lines_buffer + self->bytes), + (guint8 *) self->lines_buffer + self->bytes, VFS_USB_BUFFER_SIZE, NULL); transfer->ssm = ssm; fpi_usb_transfer_submit (transfer, VFS_USB_TIMEOUT, NULL,