image-device: Print warning for incorrect deactivation

Drivers may not handle deactivation properly when they are awaiting a
finger. This should be prevented by the internal FpImageDevice state
machine.
This commit is contained in:
Benjamin Berg 2019-12-04 19:54:07 +01:00 committed by Benjamin Berg
parent a64ac2296b
commit 702255b182

View file

@ -50,6 +50,7 @@ typedef struct
{ {
FpImageDeviceState state; FpImageDeviceState state;
gboolean active; gboolean active;
gboolean cancelling;
gboolean enroll_await_on_pending; gboolean enroll_await_on_pending;
gint enroll_stage; gint enroll_stage;
@ -140,6 +141,9 @@ fp_image_device_deactivate (FpDevice *device)
fp_dbg ("Already deactivated, ignoring request."); fp_dbg ("Already deactivated, ignoring request.");
return; return;
} }
if (!priv->cancelling && priv->state == FP_IMAGE_DEVICE_STATE_AWAIT_FINGER_ON)
g_warning ("Deactivating image device while waiting for finger, this should not happen.");
priv->state = FP_IMAGE_DEVICE_STATE_INACTIVE; priv->state = FP_IMAGE_DEVICE_STATE_INACTIVE;
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FPI_STATE]); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FPI_STATE]);
@ -203,6 +207,7 @@ static void
fp_image_device_cancel_action (FpDevice *device) fp_image_device_cancel_action (FpDevice *device)
{ {
FpImageDevice *self = FP_IMAGE_DEVICE (device); FpImageDevice *self = FP_IMAGE_DEVICE (device);
FpImageDevicePrivate *priv = fp_image_device_get_instance_private (self);
FpDeviceAction action; FpDeviceAction action;
action = fpi_device_get_current_action (device); action = fpi_device_get_current_action (device);
@ -214,7 +219,9 @@ fp_image_device_cancel_action (FpDevice *device)
action == FP_DEVICE_ACTION_IDENTIFY || action == FP_DEVICE_ACTION_IDENTIFY ||
action == FP_DEVICE_ACTION_CAPTURE) action == FP_DEVICE_ACTION_CAPTURE)
{ {
priv->cancelling = TRUE;
fp_image_device_deactivate (FP_DEVICE (self)); fp_image_device_deactivate (FP_DEVICE (self));
priv->cancelling = FALSE;
/* XXX: Some nicer way of doing this would be good. */ /* XXX: Some nicer way of doing this would be good. */
fpi_device_action_error (FP_DEVICE (self), fpi_device_action_error (FP_DEVICE (self),