aes2550: Harden against low finger pressure
Stop scan only after 3rd heartbeat message https://bugs.freedesktop.org/show_bug.cgi?id=56782
This commit is contained in:
parent
9e92d4cf2c
commit
39902374ce
1 changed files with 14 additions and 4 deletions
|
@ -59,6 +59,7 @@ struct aes2550_dev {
|
||||||
GSList *strips;
|
GSList *strips;
|
||||||
size_t strips_len;
|
size_t strips_len;
|
||||||
gboolean deactivating;
|
gboolean deactivating;
|
||||||
|
int heartbeat_cnt;
|
||||||
};
|
};
|
||||||
|
|
||||||
/****** IMAGE PROCESSING ******/
|
/****** IMAGE PROCESSING ******/
|
||||||
|
@ -369,6 +370,7 @@ static void capture_set_idle_reqs_cb(struct libusb_transfer *transfer)
|
||||||
static void capture_read_data_cb(struct libusb_transfer *transfer)
|
static void capture_read_data_cb(struct libusb_transfer *transfer)
|
||||||
{
|
{
|
||||||
struct fpi_ssm *ssm = transfer->user_data;
|
struct fpi_ssm *ssm = transfer->user_data;
|
||||||
|
struct aes2550_dev *aesdev = ssm->priv;
|
||||||
unsigned char *data = transfer->buffer;
|
unsigned char *data = transfer->buffer;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -390,14 +392,21 @@ static void capture_read_data_cb(struct libusb_transfer *transfer)
|
||||||
fpi_ssm_mark_aborted(ssm, -EPROTO);
|
fpi_ssm_mark_aborted(ssm, -EPROTO);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
aesdev->heartbeat_cnt = 0;
|
||||||
fpi_ssm_jump_to_state(ssm, CAPTURE_READ_DATA);
|
fpi_ssm_jump_to_state(ssm, CAPTURE_READ_DATA);
|
||||||
break;
|
break;
|
||||||
case AES2550_HEARTBEAT_SIZE:
|
case AES2550_HEARTBEAT_SIZE:
|
||||||
if (data[0] == AES2550_HEARTBEAT_MAGIC) {
|
if (data[0] == AES2550_HEARTBEAT_MAGIC) {
|
||||||
/* No data for a long time, looks like finger was removed (or no movement) */
|
/* No data for a long time => finger was removed or there's no movement */
|
||||||
/* assemble image and submit it to library */
|
aesdev->heartbeat_cnt++;
|
||||||
fp_dbg("Got heartbeat => last frame");
|
if (aesdev->heartbeat_cnt == 3) {
|
||||||
fpi_ssm_next_state(ssm);
|
/* Got 3 heartbeat message, that's enough to consider that finger was removed,
|
||||||
|
* assemble image and submit it to the library */
|
||||||
|
fp_dbg("Got 3 heartbeats => finger removed");
|
||||||
|
fpi_ssm_next_state(ssm);
|
||||||
|
} else {
|
||||||
|
fpi_ssm_jump_to_state(ssm, CAPTURE_READ_DATA);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -498,6 +507,7 @@ static void start_capture(struct fp_img_dev *dev)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aesdev->heartbeat_cnt = 0;
|
||||||
ssm = fpi_ssm_new(dev->dev, capture_run_state, CAPTURE_NUM_STATES);
|
ssm = fpi_ssm_new(dev->dev, capture_run_state, CAPTURE_NUM_STATES);
|
||||||
fp_dbg("");
|
fp_dbg("");
|
||||||
ssm->priv = dev;
|
ssm->priv = dev;
|
||||||
|
|
Loading…
Add table
Reference in a new issue