blob: 4b61bed5fb236785498a9317c6e51aa6a5cf77f0 [file] [log] [blame]
/* Copyright 2019 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef __CROS_EC_FPC_BIO_ALGORITHM_H
#define __CROS_EC_FPC_BIO_ALGORITHM_H
#include "common.h"
#include <stdint.h>
/*
* An opaque pointer representing an image (scan).
*/
typedef void *bio_image_t;
/*
* An opaque pointer representing/uniquely identifying an (serialized) enrolled
* template.
*/
typedef void *bio_template_t;
/*
* An opaque pointer representing/uniquely identifying enrollment attempt.
*/
typedef void *bio_enrollment_t;
/*
* An opaque struct representing algorithm.
*/
typedef struct fpc_bep_algorithm fpc_bep_algorithm_t;
/*
* Struct with biometric algorithm information.
*/
typedef struct {
const fpc_bep_algorithm_t *algorithm;
uint32_t template_size;
} fpc_bio_info_t;
/*
* Initializes biometric algorithm library. Should be the very first function
* to be invoked by the biometric daemon.
*
* Returns 0 on success, negative error code (such as -ENOMEM) on failure.
*/
__staticlib int bio_algorithm_init(void);
/*
* Instructs the biometric library to release all resources in preparation
* for the process termination (or unloading the library). Regardless of
* the returned error code the action is considered unrecoverable.
*
* Returns 0 on success, negative error code (such as -ENOMEM) on failure.
*/
__staticlib int bio_algorithm_exit(void);
/*
* Compares given biometric image against a list of enrolled template(s).
* In case the image match a template the match_index will indicate which
* template in the list that matched.
* The algorithm library can update templates with additional biometric data
* from the image, if it chooses to do so. The updated template(s) will be
* indicated by the out parameter 'updated_templates', a bit-field where
* updated template(s) indicated by the corresponding bit being set
* Returns:
* - negative value on error
* - BIO_TEMPLATE_NO_MATCH on non-match
* - BIO_TEMPLATE_MATCH for match when template was not updated with new data
* - BIO_TEMPLATE_MATCH_UPDATED for match when template was updated
* - BIO_TEMPLATE_MATCH_UPDATE_FAILED match, but update failed (do not save)
* - BIO_TEMPLATE_LOW_QUALITY when matching could not be performed due to low
* image quality
* - BIO_TEMPLATE_LOW_COVERAGE when matching could not be performed due to
* finger covering too little area of the sensor
*/
#define BIO_TEMPLATE_NO_MATCH 0
#define BIO_TEMPLATE_MATCH 1
#define BIO_TEMPLATE_MATCH_UPDATED 3
#define BIO_TEMPLATE_MATCH_UPDATE_FAILED 5
#define BIO_TEMPLATE_LOW_QUALITY 2
#define BIO_TEMPLATE_LOW_COVERAGE 4
__staticlib int bio_template_image_match_list(bio_template_t templ,
uint32_t num_templ,
bio_image_t image,
int32_t *match_index,
uint32_t *updated_templ);
/*
* Initiates biometric data enrollment process. Algorithm library returns
* 'enrollment handle' that is used for all subsequent enrollment operations.
*
* Returns 0 on success, negative error code (such as -ENOMEM) on failure.
*/
__staticlib int bio_enrollment_begin(bio_enrollment_t *enrollment);
/*
* Adds fingerprint image to an enrollment.
*
* The library should expect to copy any relevant data from the “image”
* as it is likely to be destroyed (via bio_image_destroy() call) shortly after
* this call completes.
*
* Returns:
* - negative value on error
* - BIO_ENROLLMENT_OK when image was successfully enrolled
* - BIO_ENROLLMENT_LOW_QUALITY when image could not be used due to low
* image quality
* - BIO_ENROLLMENT_IMMOBILE when image added, but user should be advised
* to move finger
* - BIO_ENROLLMENT_LOW_COVERAGE when image could not be used due to
* finger covering too little area of the sensor
* - BIO_ENROLLMENT_INTERNAL_ERROR when an internal error occurred
*/
#define BIO_ENROLLMENT_OK 0
#define BIO_ENROLLMENT_LOW_QUALITY 1
#define BIO_ENROLLMENT_IMMOBILE 2
#define BIO_ENROLLMENT_LOW_COVERAGE 3
#define BIO_ENROLLMENT_INTERNAL_ERROR 5
/* Can be used to detect if image was usable for enrollment or not. */
#define BIO_ENROLLMENT_PROBLEM_MASK 1
__staticlib int bio_enrollment_add_image(bio_enrollment_t enrollment,
bio_image_t image);
/*
* Returns percent of coverage accumulated during enrollment process.
* Optional method. Regardless of value returned by this call user should call
* bio_enrollment_is_complete() to check if algorithm library accumulated enough
* data to create a template.
*
* Returns value in the range 0..100, or negative error (such as -EINVAL);
*/
__staticlib int
bio_enrollment_get_percent_complete(bio_enrollment_t enrollment);
/*
* Indicates that given enrollment process is complete, and algorithm library
* should generate an active template that can be used in subsequent calls
* to bio_image_match() and bio_template_serialize() from enrollment data.
* After the template is created the library should release all resources
* associated with this enrollment.
*
* Argument 'templ' is optional and can be set to NULL if caller wishes to
* abort enrollment process.
*
* Returns 0 on success, negative error code (such as -EINVAL) on failure.
*/
__staticlib int bio_enrollment_finish(bio_enrollment_t enrollment,
bio_template_t *templ);
#endif /* __CROS_EC_FPC_BIO_ALGORITHM_H */