goodixmoc: support finger status report

there is no specific API for report finger status,
finger needed status is set when captrue sample cmd send, once cmd receive correct,
finger is pressing on sensor.
This commit is contained in:
boger 2021-01-04 15:37:52 +08:00 committed by Benjamin Berg
parent 943c64d96f
commit 8254b9e99e
2 changed files with 20 additions and 2 deletions

View file

@ -331,7 +331,9 @@ fp_verify_capture_cb (FpiDeviceGoodixMoc *self,
fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL)); fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL));
return; return;
} }
fpi_device_report_finger_status_changes (FP_DEVICE (self),
FP_FINGER_STATUS_PRESENT,
FP_FINGER_STATUS_NONE);
if (resp->capture_data_resp.img_quality == 0) if (resp->capture_data_resp.img_quality == 0)
{ {
fpi_ssm_mark_failed (self->task_ssm, fpi_ssm_mark_failed (self->task_ssm,
@ -435,6 +437,9 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case FP_VERIFY_CAPTURE: case FP_VERIFY_CAPTURE:
fpi_device_report_finger_status_changes (device,
FP_FINGER_STATUS_NEEDED,
FP_FINGER_STATUS_NONE);
goodix_sensor_cmd (self, MOC_CMD0_CAPTURE_DATA, MOC_CMD1_DEFAULT, goodix_sensor_cmd (self, MOC_CMD0_CAPTURE_DATA, MOC_CMD1_DEFAULT,
true, true,
(const guint8 *) &param, (const guint8 *) &param,
@ -629,7 +634,9 @@ fp_enroll_capture_cb (FpiDeviceGoodixMoc *self,
fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE);
return; return;
} }
fpi_device_report_finger_status_changes (FP_DEVICE (self),
FP_FINGER_STATUS_PRESENT,
FP_FINGER_STATUS_NONE);
if ((resp->capture_data_resp.img_quality < self->sensorcfg->config[4]) || if ((resp->capture_data_resp.img_quality < self->sensorcfg->config[4]) ||
(resp->capture_data_resp.img_coverage < self->sensorcfg->config[5])) (resp->capture_data_resp.img_coverage < self->sensorcfg->config[5]))
{ {
@ -764,6 +771,9 @@ fp_finger_mode_cb (FpiDeviceGoodixMoc *self,
"Switch finger mode failed")); "Switch finger mode failed"));
return; return;
} }
fpi_device_report_finger_status_changes (FP_DEVICE (self),
FP_FINGER_STATUS_NONE,
FP_FINGER_STATUS_PRESENT);
if (self->enroll_stage < self->max_enroll_stage) if (self->enroll_stage < self->max_enroll_stage)
{ {
fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE);
@ -826,6 +836,9 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
break; break;
case FP_ENROLL_CAPTURE: case FP_ENROLL_CAPTURE:
fpi_device_report_finger_status_changes (device,
FP_FINGER_STATUS_NEEDED,
FP_FINGER_STATUS_NONE);
goodix_sensor_cmd (self, MOC_CMD0_CAPTURE_DATA, MOC_CMD1_DEFAULT, goodix_sensor_cmd (self, MOC_CMD0_CAPTURE_DATA, MOC_CMD1_DEFAULT,
true, true,
(const guint8 *) &dummy, (const guint8 *) &dummy,

View file

@ -20,6 +20,7 @@ d.open_sync()
template = FPrint.Print.new(d) template = FPrint.Print.new(d)
def enroll_progress(*args): def enroll_progress(*args):
assert d.get_finger_status() == FPrint.FingerStatusFlags.NEEDED
print('enroll progress: ' + str(args)) print('enroll progress: ' + str(args))
def identify_done(dev, res): def identify_done(dev, res):
@ -31,7 +32,9 @@ def identify_done(dev, res):
# List, enroll, list, verify, identify, delete # List, enroll, list, verify, identify, delete
print("enrolling") print("enrolling")
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
p = d.enroll_sync(template, None, enroll_progress, None) p = d.enroll_sync(template, None, enroll_progress, None)
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
print("enroll done") print("enroll done")
print("listing") print("listing")
@ -40,7 +43,9 @@ print("listing done")
assert len(stored) == 1 assert len(stored) == 1
assert stored[0].equal(p) assert stored[0].equal(p)
print("verifying") print("verifying")
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
verify_res, verify_print = d.verify_sync(p) verify_res, verify_print = d.verify_sync(p)
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
print("verify done") print("verify done")
del p del p
assert verify_res == True assert verify_res == True