|
|
73b847 |
From 651cc37ee0409af767447f626f6a90db50c016b0 Mon Sep 17 00:00:00 2001
|
|
|
73b847 |
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
|
73b847 |
Date: Fri, 22 Nov 2019 18:39:02 +0100
|
|
|
73b847 |
Subject: [PATCH 061/181] drivers: Use SSM delayed actions when possible
|
|
|
73b847 |
|
|
|
73b847 |
---
|
|
|
73b847 |
libfprint/drivers/uru4000.c | 72 ++++++++++++++-----------------------
|
|
|
73b847 |
libfprint/drivers/vfs0050.c | 13 +------
|
|
|
73b847 |
libfprint/fpi-ssm.c | 3 +-
|
|
|
73b847 |
3 files changed, 29 insertions(+), 59 deletions(-)
|
|
|
73b847 |
|
|
|
73b847 |
diff --git a/libfprint/drivers/uru4000.c b/libfprint/drivers/uru4000.c
|
|
|
73b847 |
index 1deadd3..e15f1ca 100644
|
|
|
73b847 |
--- a/libfprint/drivers/uru4000.c
|
|
|
73b847 |
+++ b/libfprint/drivers/uru4000.c
|
|
|
73b847 |
@@ -829,26 +829,6 @@ enum rebootpwr_states {
|
|
|
73b847 |
REBOOTPWR_NUM_STATES,
|
|
|
73b847 |
};
|
|
|
73b847 |
|
|
|
73b847 |
-static void
|
|
|
73b847 |
-rebootpwr_pause_cb (FpDevice *dev,
|
|
|
73b847 |
- void *data)
|
|
|
73b847 |
-{
|
|
|
73b847 |
- FpiSsm *ssm = data;
|
|
|
73b847 |
- FpiDeviceUru4000 *self = FPI_DEVICE_URU4000 (dev);
|
|
|
73b847 |
-
|
|
|
73b847 |
- if (!--self->rebootpwr_ctr)
|
|
|
73b847 |
- {
|
|
|
73b847 |
- fp_err ("could not reboot device power");
|
|
|
73b847 |
- fpi_ssm_mark_failed (ssm,
|
|
|
73b847 |
- fpi_device_error_new_msg (FP_DEVICE_ERROR,
|
|
|
73b847 |
- "Could not reboot device"));
|
|
|
73b847 |
- }
|
|
|
73b847 |
- else
|
|
|
73b847 |
- {
|
|
|
73b847 |
- fpi_ssm_jump_to_state (ssm, REBOOTPWR_GET_HWSTAT);
|
|
|
73b847 |
- }
|
|
|
73b847 |
-}
|
|
|
73b847 |
-
|
|
|
73b847 |
static void
|
|
|
73b847 |
rebootpwr_run_state (FpiSsm *ssm, FpDevice *_dev)
|
|
|
73b847 |
{
|
|
|
73b847 |
@@ -875,7 +855,17 @@ rebootpwr_run_state (FpiSsm *ssm, FpDevice *_dev)
|
|
|
73b847 |
break;
|
|
|
73b847 |
|
|
|
73b847 |
case REBOOTPWR_PAUSE:
|
|
|
73b847 |
- fpi_device_add_timeout (_dev, 10, rebootpwr_pause_cb, ssm, NULL);
|
|
|
73b847 |
+ if (!--self->rebootpwr_ctr)
|
|
|
73b847 |
+ {
|
|
|
73b847 |
+ fp_err ("could not reboot device power");
|
|
|
73b847 |
+ fpi_ssm_mark_failed (ssm,
|
|
|
73b847 |
+ fpi_device_error_new_msg (FP_DEVICE_ERROR,
|
|
|
73b847 |
+ "Could not reboot device"));
|
|
|
73b847 |
+ }
|
|
|
73b847 |
+ else
|
|
|
73b847 |
+ {
|
|
|
73b847 |
+ fpi_ssm_jump_to_state_delayed (ssm, 10, REBOOTPWR_GET_HWSTAT);
|
|
|
73b847 |
+ }
|
|
|
73b847 |
break;
|
|
|
73b847 |
}
|
|
|
73b847 |
}
|
|
|
73b847 |
@@ -916,30 +906,6 @@ enum powerup_states {
|
|
|
73b847 |
POWERUP_NUM_STATES,
|
|
|
73b847 |
};
|
|
|
73b847 |
|
|
|
73b847 |
-static void
|
|
|
73b847 |
-powerup_pause_cb (FpDevice *dev,
|
|
|
73b847 |
- void *data)
|
|
|
73b847 |
-{
|
|
|
73b847 |
- FpiSsm *ssm = data;
|
|
|
73b847 |
- FpiDeviceUru4000 *self = FPI_DEVICE_URU4000 (dev);
|
|
|
73b847 |
-
|
|
|
73b847 |
- if (!--self->powerup_ctr)
|
|
|
73b847 |
- {
|
|
|
73b847 |
- fp_err ("could not power device up");
|
|
|
73b847 |
- fpi_ssm_mark_failed (ssm,
|
|
|
73b847 |
- fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL,
|
|
|
73b847 |
- "could not power device up"));
|
|
|
73b847 |
- }
|
|
|
73b847 |
- else if (!self->profile->auth_cr)
|
|
|
73b847 |
- {
|
|
|
73b847 |
- fpi_ssm_jump_to_state (ssm, POWERUP_SET_HWSTAT);
|
|
|
73b847 |
- }
|
|
|
73b847 |
- else
|
|
|
73b847 |
- {
|
|
|
73b847 |
- fpi_ssm_next_state (ssm);
|
|
|
73b847 |
- }
|
|
|
73b847 |
-}
|
|
|
73b847 |
-
|
|
|
73b847 |
static void
|
|
|
73b847 |
powerup_run_state (FpiSsm *ssm, FpDevice *_dev)
|
|
|
73b847 |
{
|
|
|
73b847 |
@@ -971,7 +937,21 @@ powerup_run_state (FpiSsm *ssm, FpDevice *_dev)
|
|
|
73b847 |
break;
|
|
|
73b847 |
|
|
|
73b847 |
case POWERUP_PAUSE:
|
|
|
73b847 |
- fpi_device_add_timeout (_dev, 10, powerup_pause_cb, ssm, NULL);
|
|
|
73b847 |
+ if (!--self->powerup_ctr)
|
|
|
73b847 |
+ {
|
|
|
73b847 |
+ fp_err ("could not power device up");
|
|
|
73b847 |
+ fpi_ssm_mark_failed (ssm,
|
|
|
73b847 |
+ fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL,
|
|
|
73b847 |
+ "could not power device up"));
|
|
|
73b847 |
+ }
|
|
|
73b847 |
+ else if (!self->profile->auth_cr)
|
|
|
73b847 |
+ {
|
|
|
73b847 |
+ fpi_ssm_jump_to_state_delayed (ssm, POWERUP_SET_HWSTAT, 10);
|
|
|
73b847 |
+ }
|
|
|
73b847 |
+ else
|
|
|
73b847 |
+ {
|
|
|
73b847 |
+ fpi_ssm_next_state_delayed (ssm, 10);
|
|
|
73b847 |
+ }
|
|
|
73b847 |
break;
|
|
|
73b847 |
|
|
|
73b847 |
case POWERUP_CHALLENGE_RESPONSE:
|
|
|
73b847 |
diff --git a/libfprint/drivers/vfs0050.c b/libfprint/drivers/vfs0050.c
|
|
|
73b847 |
index af70db5..22e9ae9 100644
|
|
|
73b847 |
--- a/libfprint/drivers/vfs0050.c
|
|
|
73b847 |
+++ b/libfprint/drivers/vfs0050.c
|
|
|
73b847 |
@@ -479,16 +479,6 @@ receive_callback (FpiUsbTransfer *transfer, FpDevice *device,
|
|
|
73b847 |
}
|
|
|
73b847 |
}
|
|
|
73b847 |
|
|
|
73b847 |
-/* SSM stub to prepare device to another scan after orange light was on */
|
|
|
73b847 |
-static void
|
|
|
73b847 |
-another_scan (FpDevice *dev,
|
|
|
73b847 |
- void *data)
|
|
|
73b847 |
-{
|
|
|
73b847 |
- FpiSsm *ssm = data;
|
|
|
73b847 |
-
|
|
|
73b847 |
- fpi_ssm_jump_to_state (ssm, SSM_TURN_ON);
|
|
|
73b847 |
-}
|
|
|
73b847 |
-
|
|
|
73b847 |
/* Main SSM loop */
|
|
|
73b847 |
static void
|
|
|
73b847 |
activate_ssm (FpiSsm *ssm, FpDevice *dev)
|
|
|
73b847 |
@@ -637,8 +627,7 @@ activate_ssm (FpiSsm *ssm, FpDevice *dev)
|
|
|
73b847 |
|
|
|
73b847 |
case SSM_WAIT_ANOTHER_SCAN:
|
|
|
73b847 |
/* Orange light is on now */
|
|
|
73b847 |
- fpi_device_add_timeout (dev, VFS_SSM_ORANGE_TIMEOUT,
|
|
|
73b847 |
- another_scan, ssm, NULL);
|
|
|
73b847 |
+ fpi_ssm_jump_to_state_delayed (ssm, SSM_TURN_ON, VFS_SSM_ORANGE_TIMEOUT);
|
|
|
73b847 |
break;
|
|
|
73b847 |
|
|
|
73b847 |
default:
|
|
|
73b847 |
diff --git a/libfprint/fpi-ssm.c b/libfprint/fpi-ssm.c
|
|
|
73b847 |
index e2cb48a..19712ef 100644
|
|
|
73b847 |
--- a/libfprint/fpi-ssm.c
|
|
|
73b847 |
+++ b/libfprint/fpi-ssm.c
|
|
|
73b847 |
@@ -168,6 +168,8 @@ fpi_ssm_free (FpiSsm *machine)
|
|
|
73b847 |
if (!machine)
|
|
|
73b847 |
return;
|
|
|
73b847 |
|
|
|
73b847 |
+ BUG_ON (machine->timeout != NULL);
|
|
|
73b847 |
+
|
|
|
73b847 |
if (machine->ssm_data_destroy)
|
|
|
73b847 |
g_clear_pointer (&machine->ssm_data, machine->ssm_data_destroy);
|
|
|
73b847 |
g_clear_pointer (&machine->error, g_error_free);
|
|
|
73b847 |
@@ -250,7 +252,6 @@ void
|
|
|
73b847 |
fpi_ssm_mark_completed (FpiSsm *machine)
|
|
|
73b847 |
{
|
|
|
73b847 |
BUG_ON (machine->completed);
|
|
|
73b847 |
- BUG_ON (machine->timeout);
|
|
|
73b847 |
BUG_ON (machine->timeout != NULL);
|
|
|
73b847 |
|
|
|
73b847 |
g_clear_pointer (&machine->timeout, g_source_destroy);
|
|
|
73b847 |
--
|
|
|
73b847 |
2.24.1
|
|
|
73b847 |
|