diff --git a/libfprint/drivers/upektc_img.c b/libfprint/drivers/upektc_img.c index fc5bfe78..7d15cc42 100644 --- a/libfprint/drivers/upektc_img.c +++ b/libfprint/drivers/upektc_img.c @@ -246,12 +246,25 @@ capture_read_data_cb (FpiUsbTransfer *transfer, FpDevice *device, CAPTURE_ACK_00_28); break; + case 0x13: + /* finger is present keep your finger on reader */ + fpi_ssm_jump_to_state (transfer->ssm, + self->area_sensor ? + CAPTURE_ACK_00_28 : CAPTURE_ACK_00_28_TERM); + break; + case 0x00: /* finger is present! */ fpi_ssm_jump_to_state (transfer->ssm, CAPTURE_ACK_00_28); break; + case 0x01: + /* no finger! */ + fpi_ssm_jump_to_state (transfer->ssm, + CAPTURE_ACK_00_28); + break; + case 0x1e: /* short scan */ fp_err ("short scan, aborting"); @@ -260,18 +273,20 @@ capture_read_data_cb (FpiUsbTransfer *transfer, FpDevice *device, fpi_image_device_report_finger_status (dev, FALSE); fpi_ssm_jump_to_state (transfer->ssm, - CAPTURE_ACK_00_28_TERM); + self->area_sensor ? + CAPTURE_ACK_00_28 : CAPTURE_ACK_00_28_TERM); break; case 0x1d: - /* too much horisontal movement */ - fp_err ("too much horisontal movement, aborting"); + /* too much horizontal movement */ + fp_err ("too much horizontal movement, aborting"); fpi_image_device_retry_scan (dev, FP_DEVICE_RETRY_CENTER_FINGER); fpi_image_device_report_finger_status (dev, FALSE); fpi_ssm_jump_to_state (transfer->ssm, - CAPTURE_ACK_00_28_TERM); + self->area_sensor ? + CAPTURE_ACK_00_28 : CAPTURE_ACK_00_28_TERM); break; default: @@ -282,7 +297,8 @@ capture_read_data_cb (FpiUsbTransfer *transfer, FpDevice *device, fpi_image_device_report_finger_status (dev, FALSE); fpi_ssm_jump_to_state (transfer->ssm, - CAPTURE_ACK_00_28_TERM); + self->area_sensor ? + CAPTURE_ACK_00_28 : CAPTURE_ACK_00_28_TERM); break; } break; @@ -345,8 +361,12 @@ capture_run_state (FpiSsm *ssm, FpDevice *_dev) switch (fpi_ssm_get_cur_state (ssm)) { case CAPTURE_INIT_CAPTURE: - upektc_img_submit_req (ssm, dev, upek2020_init_capture, sizeof (upek2020_init_capture), - self->seq, capture_reqs_cb); + if (self->area_sensor) + upektc_img_submit_req (ssm, dev, upek2020_init_capture_press, sizeof (upek2020_init_capture_press), + self->seq, capture_reqs_cb); + else + upektc_img_submit_req (ssm, dev, upek2020_init_capture, sizeof (upek2020_init_capture), + self->seq, capture_reqs_cb); self->seq++; break; diff --git a/libfprint/drivers/upektc_img.h b/libfprint/drivers/upektc_img.h index 4af8ebf0..1c3a6949 100644 --- a/libfprint/drivers/upektc_img.h +++ b/libfprint/drivers/upektc_img.h @@ -78,6 +78,22 @@ static const unsigned char upek2020_init_capture[] = { 0x25, 0xa9 /* CRC */ }; +static const unsigned char upek2020_init_capture_press[] = { + 'C', 'i', 'a', 'o', + 0x00, + 0x00, 0x0e, /* Seq = 7, len = 0x00e */ + 0x28, /* CMD = 0x28 */ + 0x0b, 0x00, /* Inner len = 0x000b */ + 0x00, 0x00, + 0x0e, /* SUBCMD = 0x0e */ + 0x02, + 0xfe, 0xff, 0xff, 0xff, /* timeout = -2 = 0xfffffffe = infinite time */ + 0x02, + 0x01, /* Wait for finger */ + 0x02, + 0x14, 0x9a /* CRC */ +}; + #if 0 static const unsigned char finger_status[] = { 'C', 'i', 'a', 'o',