[fprint] [PATCH] imgdev: add support for FP_IMGDRV_NEEDS_REACTIVATION_BETWEEN_ENROLLS flag
Vasily Khoruzhick
anarsoul at gmail.com
Fri Feb 16 19:07:49 UTC 2018
On Thu, Feb 15, 2018 at 5:56 PM, Marco Trevisan (TreviƱo)
<mail at 3v1n0.net> wrote:
> When a device has this flag set, it has to be re-activated at
> each enroll step, without performing any other cleanup.
>
> This allows to solve this such case in a cleaner way inside
> drivers.
What's the purpose of this change?
> ---
> libfprint/fp_internal.h | 1 +
> libfprint/imgdev.c | 30 +++++++++++++++++++++++++++---
> 2 files changed, 28 insertions(+), 3 deletions(-)
>
> diff --git a/libfprint/fp_internal.h b/libfprint/fp_internal.h
> index 74c5f7f..ea46b1e 100644
> --- a/libfprint/fp_internal.h
> +++ b/libfprint/fp_internal.h
> @@ -232,6 +232,7 @@ enum fp_print_data_type
> fpi_driver_get_data_type(struct fp_driver *drv);
> /* flags for fp_img_driver.flags */
> #define FP_IMGDRV_SUPPORTS_UNCONDITIONAL_CAPTURE (1 << 0)
> +#define FP_IMGDRV_NEEDS_REACTIVATION_BETWEEN_ENROLLS (1 << 1)
> struct fp_img_driver {
> struct fp_driver driver;
> diff --git a/libfprint/imgdev.c b/libfprint/imgdev.c
> index 4408c23..20a1559 100644
> --- a/libfprint/imgdev.c
> +++ b/libfprint/imgdev.c
> @@ -27,6 +27,9 @@
> #define BOZORTH3_DEFAULT_THRESHOLD 40
> #define IMG_ENROLL_STAGES 5
> +static int dev_activate(struct fp_img_dev *imgdev, enum
> fp_imgdev_state state);
> +static void dev_deactivate(struct fp_img_dev *imgdev);
> +
> static int img_dev_open(struct fp_dev *dev, unsigned long driver_data)
> {
> struct fp_img_dev *imgdev = g_malloc0(sizeof(*imgdev));
> @@ -124,6 +127,7 @@ void fpi_imgdev_report_finger_status(struct
> fp_img_dev *imgdev,
> int r = imgdev->action_result;
> struct fp_print_data *data = imgdev->acquire_data;
> struct fp_img *img = imgdev->acquire_img;
> + struct fp_img_driver *imgdrv = fpi_driver_to_img_driver(imgdev->dev->drv);
> fp_dbg(present ? "finger on sensor" : "finger removed");
> @@ -158,8 +162,14 @@ void fpi_imgdev_report_finger_status(struct
> fp_img_dev *imgdev,
> if (imgdev->action == IMG_ACTION_ENROLL &&
> r > 0 && r != FP_ENROLL_COMPLETE && r != FP_ENROLL_FAIL) {
> imgdev->action_result = 0;
> - imgdev->action_state = IMG_ACQUIRE_STATE_AWAIT_FINGER_ON;
> - dev_change_state(imgdev, IMGDEV_STATE_AWAIT_FINGER_ON);
> +
> + if (imgdrv->flags & FP_IMGDRV_NEEDS_REACTIVATION_BETWEEN_ENROLLS) {
> + imgdev->action_state = IMG_ACQUIRE_STATE_DEACTIVATING;
> + dev_deactivate(imgdev);
> + } else {
> + imgdev->action_state = IMG_ACQUIRE_STATE_AWAIT_FINGER_ON;
> + dev_change_state(imgdev, IMGDEV_STATE_AWAIT_FINGER_ON);
> + }
> }
> break;
> case IMG_ACTION_VERIFY:
> @@ -332,11 +342,16 @@ void fpi_imgdev_session_error(struct fp_img_dev
> *imgdev, int error)
> void fpi_imgdev_activate_complete(struct fp_img_dev *imgdev, int status)
> {
> + struct fp_img_driver *imgdrv = fpi_driver_to_img_driver(imgdev->dev->drv);
> +
> fp_dbg("status %d", status);
> switch (imgdev->action) {
> case IMG_ACTION_ENROLL:
> - fpi_drvcb_enroll_started(imgdev->dev, status);
> + if (!(imgdrv->flags & FP_IMGDRV_NEEDS_REACTIVATION_BETWEEN_ENROLLS) ||
> + imgdev->dev->state != DEV_STATE_ENROLLING) {
> + fpi_drvcb_enroll_started(imgdev->dev, status);
> + }
> break;
> case IMG_ACTION_VERIFY:
> fpi_drvcb_verify_started(imgdev->dev, status);
> @@ -360,10 +375,19 @@ void fpi_imgdev_activate_complete(struct
> fp_img_dev *imgdev, int status)
> void fpi_imgdev_deactivate_complete(struct fp_img_dev *imgdev)
> {
> + struct fp_img_driver *imgdrv = fpi_driver_to_img_driver(imgdev->dev->drv);
> +
> fp_dbg("");
> switch (imgdev->action) {
> case IMG_ACTION_ENROLL:
> + if ((imgdrv->flags & FP_IMGDRV_NEEDS_REACTIVATION_BETWEEN_ENROLLS) &&
> + imgdev->dev->state == DEV_STATE_ENROLLING) {
> + imgdev->action_state = IMG_ACQUIRE_STATE_ACTIVATING;
> + dev_activate(imgdev, IMGDEV_STATE_AWAIT_FINGER_ON);
> + return;
> + }
> +
> fpi_drvcb_enroll_stopped(imgdev->dev);
> break;
> case IMG_ACTION_VERIFY:
> --
> 2.7.4
>
> _______________________________________________
> fprint mailing list
> fprint at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/fprint
More information about the fprint
mailing list