mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2025-11-15 07:38:12 +00:00
goodixmoc: fetch max_stored_prints from device
During updating configuration, device will send back the max_stored_prints back. The number of max_stored_prints is different among different devices.
This commit is contained in:
committed by
Benjamin Berg
parent
e6712fbcca
commit
2ee0d16784
@@ -53,6 +53,7 @@ struct _FpiDeviceGoodixMoc
|
||||
pgxfp_sensor_cfg_t sensorcfg;
|
||||
gint enroll_stage;
|
||||
gint max_enroll_stage;
|
||||
gint max_stored_prints;
|
||||
GCancellable *cancellable;
|
||||
GPtrArray *list_result;
|
||||
guint8 template_id[TEMPLATE_ID_SIZE];
|
||||
@@ -560,6 +561,13 @@ fp_enroll_enum_cb (FpiDeviceGoodixMoc *self,
|
||||
resp->result));
|
||||
return;
|
||||
}
|
||||
if (resp->finger_list_resp.finger_num >= self->max_stored_prints)
|
||||
{
|
||||
fpi_ssm_mark_failed (self->task_ssm,
|
||||
fpi_device_error_new (FP_DEVICE_ERROR_DATA_FULL));
|
||||
return;
|
||||
}
|
||||
|
||||
fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE);
|
||||
}
|
||||
|
||||
@@ -975,7 +983,7 @@ fp_init_config_cb (FpiDeviceGoodixMoc *self,
|
||||
fpi_ssm_mark_failed (self->task_ssm, error);
|
||||
return;
|
||||
}
|
||||
|
||||
self->max_stored_prints = resp->finger_config.max_stored_prints;
|
||||
fpi_ssm_next_state (self->task_ssm);
|
||||
}
|
||||
|
||||
@@ -1259,6 +1267,8 @@ gx_fp_init (FpDevice *device)
|
||||
GError *error = NULL;
|
||||
int ret = 0;
|
||||
|
||||
self->max_stored_prints = FP_MAX_FINGERNUM;
|
||||
|
||||
self->cancellable = g_cancellable_new ();
|
||||
|
||||
self->sensorcfg = g_new0 (gxfp_sensor_cfg_t, 1);
|
||||
|
||||
@@ -294,6 +294,12 @@ gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint32_t buffer_len, pgxfp_c
|
||||
break;
|
||||
|
||||
case MOC_CMD0_UPDATE_CONFIG:
|
||||
{
|
||||
presp->finger_config.status = buffer[0];
|
||||
presp->finger_config.max_stored_prints = buffer[2];
|
||||
}
|
||||
break;
|
||||
|
||||
case MOC_CMD0_COMMITENROLLMENT:
|
||||
case MOC_CMD0_DELETETEMPLATE:
|
||||
break;
|
||||
@@ -411,7 +417,7 @@ gx_proto_init_sensor_config (pgxfp_sensor_cfg_t pconfig)
|
||||
memset (pconfig, 0, sizeof (*pconfig));
|
||||
|
||||
//NOTICE: Do not change any value!
|
||||
memcpy (&pconfig->config, sensor_config, 26);
|
||||
memcpy (&pconfig->config, sensor_config, G_N_ELEMENTS (sensor_config));
|
||||
pconfig->reserved[0] = 1;
|
||||
|
||||
gx_proto_crc32_calc ((uint8_t *) pconfig, sizeof (*pconfig) - PACKAGE_CRC_SIZE, (uint8_t *) &crc32_calc);
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#define PACKAGE_CRC_SIZE (4)
|
||||
#define PACKAGE_HEADER_SIZE (8)
|
||||
|
||||
#define FP_MAX_FINGERNUM (10)
|
||||
#define FP_MAX_FINGERNUM (20)
|
||||
|
||||
#define TEMPLATE_ID_SIZE (32)
|
||||
|
||||
@@ -167,6 +167,11 @@ typedef struct _fp_finger_status
|
||||
uint8_t status;
|
||||
} fp_finger_status_t, *pfp_finger_status_t;
|
||||
|
||||
typedef struct _fp_finger_config
|
||||
{
|
||||
uint8_t status;
|
||||
uint8_t max_stored_prints;
|
||||
} fp_finger_config_t, *pfp_finger_config_t;
|
||||
|
||||
typedef struct _fp_cmd_response
|
||||
{
|
||||
@@ -183,6 +188,7 @@ typedef struct _fp_cmd_response
|
||||
gxfp_enum_fingerlist_t finger_list_resp;
|
||||
gxfp_version_info_t version_info;
|
||||
fp_finger_status_t finger_status;
|
||||
fp_finger_config_t finger_config;
|
||||
};
|
||||
} gxfp_cmd_response_t, *pgxfp_cmd_response_t;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user