mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-09-10 13:00:08 +00:00
secugen: Use device timeout rather than a custom one
This commit is contained in:
+32
-32
@@ -120,7 +120,7 @@ struct _FpiDeviceSecugen
|
|||||||
guint8 iface_num; /* Claimed USB interface number */
|
guint8 iface_num; /* Claimed USB interface number */
|
||||||
|
|
||||||
/* Finger detection */
|
/* Finger detection */
|
||||||
guint finger_poll_source; /* GLib timeout source ID */
|
GSource *finger_poll_source; /* Detection/finger-off timeout source */
|
||||||
|
|
||||||
/* Calibration / flat-field correction */
|
/* Calibration / flat-field correction */
|
||||||
guint8 *cal_raw; /* Background frame at raw sensor res (956x688) */
|
guint8 *cal_raw; /* Background frame at raw sensor res (956x688) */
|
||||||
@@ -1679,7 +1679,8 @@ enum detect_states {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void detect_start (FpImageDevice *dev);
|
static void detect_start (FpImageDevice *dev);
|
||||||
static gboolean detect_retry_cb (gpointer user_data);
|
static void detect_retry_timeout (FpDevice *dev,
|
||||||
|
gpointer user_data G_GNUC_UNUSED);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
detect_run_state (FpiSsm *ssm, FpDevice *_dev)
|
detect_run_state (FpiSsm *ssm, FpDevice *_dev)
|
||||||
@@ -1774,8 +1775,11 @@ detect_run_state (FpiSsm *ssm, FpDevice *_dev)
|
|||||||
|
|
||||||
/* Schedule another poll */
|
/* Schedule another poll */
|
||||||
self->finger_poll_source =
|
self->finger_poll_source =
|
||||||
g_timeout_add (SECUGEN_FINGER_POLL_MS,
|
fpi_device_add_timeout (FP_DEVICE (dev),
|
||||||
(GSourceFunc) detect_retry_cb, dev);
|
SECUGEN_FINGER_POLL_MS,
|
||||||
|
detect_retry_timeout,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
fpi_ssm_mark_completed (ssm);
|
fpi_ssm_mark_completed (ssm);
|
||||||
@@ -1784,16 +1788,14 @@ detect_run_state (FpiSsm *ssm, FpDevice *_dev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
detect_retry_cb (gpointer user_data)
|
detect_retry_timeout (FpDevice *dev, gpointer user_data G_GNUC_UNUSED)
|
||||||
{
|
{
|
||||||
FpImageDevice *dev = FP_IMAGE_DEVICE (user_data);
|
FpImageDevice *img_dev = FP_IMAGE_DEVICE (dev);
|
||||||
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (dev);
|
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (img_dev);
|
||||||
|
|
||||||
self->finger_poll_source = 0;
|
self->finger_poll_source = NULL;
|
||||||
detect_start (dev);
|
detect_start (img_dev);
|
||||||
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1829,16 +1831,14 @@ detect_start (FpImageDevice *dev)
|
|||||||
fpi_ssm_start (ssm, detect_ssm_complete);
|
fpi_ssm_start (ssm, detect_ssm_complete);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
finger_off_cb (gpointer user_data)
|
finger_off_timeout (FpDevice *dev, gpointer user_data G_GNUC_UNUSED)
|
||||||
{
|
{
|
||||||
FpImageDevice *dev = FP_IMAGE_DEVICE (user_data);
|
FpImageDevice *img_dev = FP_IMAGE_DEVICE (dev);
|
||||||
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (dev);
|
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (img_dev);
|
||||||
|
|
||||||
self->finger_poll_source = 0;
|
self->finger_poll_source = NULL;
|
||||||
fpi_image_device_report_finger_status (dev, FALSE);
|
fpi_image_device_report_finger_status (img_dev, FALSE);
|
||||||
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================================================================
|
/* ================================================================
|
||||||
@@ -1918,6 +1918,8 @@ dev_deinit (FpImageDevice *dev)
|
|||||||
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (dev);
|
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (dev);
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_clear_pointer (&self->finger_poll_source, g_source_destroy);
|
||||||
|
|
||||||
g_clear_pointer (&self->cal_raw, g_free);
|
g_clear_pointer (&self->cal_raw, g_free);
|
||||||
g_clear_pointer (&self->bulk_buffer, g_free);
|
g_clear_pointer (&self->bulk_buffer, g_free);
|
||||||
g_clear_pointer (&self->fw_data, g_free);
|
g_clear_pointer (&self->fw_data, g_free);
|
||||||
@@ -2001,11 +2003,7 @@ dev_deactivate (FpImageDevice *dev)
|
|||||||
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (dev);
|
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (dev);
|
||||||
|
|
||||||
/* Cancel any pending timeout */
|
/* Cancel any pending timeout */
|
||||||
if (self->finger_poll_source)
|
g_clear_pointer (&self->finger_poll_source, g_source_destroy);
|
||||||
{
|
|
||||||
g_source_remove (self->finger_poll_source);
|
|
||||||
self->finger_poll_source = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If an init/detect/capture SSM is still in flight, defer completion until
|
/* If an init/detect/capture SSM is still in flight, defer completion until
|
||||||
* it unwinds - its completion handler calls secugen_finish_deactivate(). This
|
* it unwinds - its completion handler calls secugen_finish_deactivate(). This
|
||||||
@@ -2070,11 +2068,7 @@ dev_change_state (FpImageDevice *dev,
|
|||||||
fp_dbg ("Starting image capture");
|
fp_dbg ("Starting image capture");
|
||||||
|
|
||||||
/* Cancel timeout if still running */
|
/* Cancel timeout if still running */
|
||||||
if (self->finger_poll_source)
|
g_clear_pointer (&self->finger_poll_source, g_source_destroy);
|
||||||
{
|
|
||||||
g_source_remove (self->finger_poll_source);
|
|
||||||
self->finger_poll_source = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
self->ssm_count++;
|
self->ssm_count++;
|
||||||
ssm = fpi_ssm_new (FP_DEVICE (dev), capture_run_state,
|
ssm = fpi_ssm_new (FP_DEVICE (dev), capture_run_state,
|
||||||
@@ -2085,7 +2079,11 @@ dev_change_state (FpImageDevice *dev,
|
|||||||
|
|
||||||
case FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_OFF:
|
case FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_OFF:
|
||||||
fp_dbg ("Waiting for finger off");
|
fp_dbg ("Waiting for finger off");
|
||||||
self->finger_poll_source = g_timeout_add (500, finger_off_cb, dev);
|
self->finger_poll_source = fpi_device_add_timeout (FP_DEVICE (dev),
|
||||||
|
500,
|
||||||
|
finger_off_timeout,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FPI_IMAGE_DEVICE_STATE_IDLE:
|
case FPI_IMAGE_DEVICE_STATE_IDLE:
|
||||||
@@ -2110,7 +2108,7 @@ fpi_device_secugen_init (FpiDeviceSecugen *self)
|
|||||||
{
|
{
|
||||||
self->init_reg_idx = 0;
|
self->init_reg_idx = 0;
|
||||||
self->fw_read_idx = 0;
|
self->fw_read_idx = 0;
|
||||||
self->finger_poll_source = 0;
|
self->finger_poll_source = NULL;
|
||||||
self->exposure = SECUGEN_EXPOSURE_NORMAL;
|
self->exposure = SECUGEN_EXPOSURE_NORMAL;
|
||||||
self->deactivating = FALSE;
|
self->deactivating = FALSE;
|
||||||
self->ssm_count = 0;
|
self->ssm_count = 0;
|
||||||
@@ -2121,6 +2119,8 @@ fpi_device_secugen_finalize (GObject *object)
|
|||||||
{
|
{
|
||||||
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (object);
|
FpiDeviceSecugen *self = FPI_DEVICE_SECUGEN (object);
|
||||||
|
|
||||||
|
g_clear_pointer (&self->finger_poll_source, g_source_destroy);
|
||||||
|
|
||||||
/* Safety net: free heap buffers even if img_close never ran (e.g. an
|
/* Safety net: free heap buffers even if img_close never ran (e.g. an
|
||||||
* activation failure tore the device down before dev_deinit). */
|
* activation failure tore the device down before dev_deinit). */
|
||||||
g_clear_pointer (&self->cal_raw, g_free);
|
g_clear_pointer (&self->cal_raw, g_free);
|
||||||
|
|||||||
Reference in New Issue
Block a user