Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
biometrics.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025 Siratul Islam <email@sirat.me>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_BIOMETRICS_H_
14#define ZEPHYR_INCLUDE_DRIVERS_BIOMETRICS_H_
15
24
25#include <zephyr/device.h>
26#include <zephyr/kernel.h>
27#include <errno.h>
28#include <stddef.h>
29#include <zephyr/types.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
44
52
56#define BIOMETRIC_STORAGE_DEVICE BIT(0)
57#define BIOMETRIC_STORAGE_HOST BIT(1)
58
68
99
115
127
141
147
153typedef int (*biometric_api_get_capabilities)(const struct device *dev,
154 struct biometric_capabilities *caps);
155
161typedef int (*biometric_api_attr_set)(const struct device *dev, enum biometric_attribute attr,
162 int32_t val);
163
169typedef int (*biometric_api_attr_get)(const struct device *dev, enum biometric_attribute attr,
170 int32_t *val);
171
177typedef int (*biometric_api_enroll_start)(const struct device *dev, uint16_t template_id);
178
184typedef int (*biometric_api_enroll_capture)(const struct device *dev, k_timeout_t timeout,
185 struct biometric_capture_result *result);
186
192typedef int (*biometric_api_enroll_finalize)(const struct device *dev);
193
199typedef int (*biometric_api_enroll_abort)(const struct device *dev);
200
206typedef int (*biometric_api_template_store)(const struct device *dev, uint16_t id,
207 const uint8_t *data, size_t size);
208
214typedef int (*biometric_api_template_read)(const struct device *dev, uint16_t id, uint8_t *data,
215 size_t size);
216
222typedef int (*biometric_api_template_delete)(const struct device *dev, uint16_t id);
223
229typedef int (*biometric_api_template_delete_all)(const struct device *dev);
230
236typedef int (*biometric_api_template_list)(const struct device *dev, uint16_t *ids,
237 size_t max_count, size_t *actual_count);
238
244typedef int (*biometric_api_match)(const struct device *dev, enum biometric_match_mode mode,
245 uint16_t template_id, k_timeout_t timeout,
246 struct biometric_match_result *result);
247
253typedef int (*biometric_api_led_control)(const struct device *dev, enum biometric_led_state state);
254
258__subsystem struct biometric_driver_api {
259 biometric_api_get_capabilities get_capabilities;
260 biometric_api_attr_set attr_set;
261 biometric_api_attr_get attr_get;
262 biometric_api_enroll_start enroll_start;
263 biometric_api_enroll_capture enroll_capture;
264 biometric_api_enroll_finalize enroll_finalize;
265 biometric_api_enroll_abort enroll_abort;
266 biometric_api_template_store template_store;
267 biometric_api_template_read template_read;
268 biometric_api_template_delete template_delete;
269 biometric_api_template_delete_all template_delete_all;
270 biometric_api_template_list template_list;
271 biometric_api_match match;
272 biometric_api_led_control led_control;
273};
274
278
288__syscall int biometric_get_capabilities(const struct device *dev,
289 struct biometric_capabilities *caps);
290
291static inline int z_impl_biometric_get_capabilities(const struct device *dev,
292 struct biometric_capabilities *caps)
293{
294 const struct biometric_driver_api *api;
295
296 __ASSERT_NO_MSG(dev != NULL);
297 __ASSERT_NO_MSG(caps != NULL);
298
299 api = (const struct biometric_driver_api *)dev->api;
300
301 return api->get_capabilities(dev, caps);
302}
303
316__syscall int biometric_attr_set(const struct device *dev, enum biometric_attribute attr,
317 int32_t val);
318
319static inline int z_impl_biometric_attr_set(const struct device *dev, enum biometric_attribute attr,
320 int32_t val)
321{
322 const struct biometric_driver_api *api;
323
324 __ASSERT_NO_MSG(dev != NULL);
325
326 api = (const struct biometric_driver_api *)dev->api;
327
328 if (api->attr_set == NULL) {
329 return -ENOSYS;
330 }
331
332 return api->attr_set(dev, attr, val);
333}
334
347__syscall int biometric_attr_get(const struct device *dev, enum biometric_attribute attr,
348 int32_t *val);
349
350static inline int z_impl_biometric_attr_get(const struct device *dev, enum biometric_attribute attr,
351 int32_t *val)
352{
353 const struct biometric_driver_api *api;
354
355 __ASSERT_NO_MSG(dev != NULL);
356 __ASSERT_NO_MSG(val != NULL);
357
358 api = (const struct biometric_driver_api *)dev->api;
359
360 if (api->attr_get == NULL) {
361 return -ENOSYS;
362 }
363
364 return api->attr_get(dev, attr, val);
365}
366
382__syscall int biometric_enroll_start(const struct device *dev, uint16_t template_id);
383
384static inline int z_impl_biometric_enroll_start(const struct device *dev, uint16_t template_id)
385{
386 const struct biometric_driver_api *api;
387
388 __ASSERT_NO_MSG(dev != NULL);
389
390 api = (const struct biometric_driver_api *)dev->api;
391
392 return api->enroll_start(dev, template_id);
393}
394
412__syscall int biometric_enroll_capture(const struct device *dev, k_timeout_t timeout,
413 struct biometric_capture_result *result);
414
415static inline int z_impl_biometric_enroll_capture(const struct device *dev, k_timeout_t timeout,
416 struct biometric_capture_result *result)
417{
418 const struct biometric_driver_api *api;
419
420 __ASSERT_NO_MSG(dev != NULL);
421
422 api = (const struct biometric_driver_api *)dev->api;
423
424 return api->enroll_capture(dev, timeout, result);
425}
426
439__syscall int biometric_enroll_finalize(const struct device *dev);
440
441static inline int z_impl_biometric_enroll_finalize(const struct device *dev)
442{
443 const struct biometric_driver_api *api;
444
445 __ASSERT_NO_MSG(dev != NULL);
446
447 api = (const struct biometric_driver_api *)dev->api;
448
449 return api->enroll_finalize(dev);
450}
451
463__syscall int biometric_enroll_abort(const struct device *dev);
464
465static inline int z_impl_biometric_enroll_abort(const struct device *dev)
466{
467 const struct biometric_driver_api *api;
468
469 __ASSERT_NO_MSG(dev != NULL);
470
471 api = (const struct biometric_driver_api *)dev->api;
472
473 if (api->enroll_abort == NULL) {
474 return -ENOSYS;
475 }
476
477 return api->enroll_abort(dev);
478}
479
497__syscall int biometric_template_store(const struct device *dev, uint16_t id, const uint8_t *data,
498 size_t size);
499
500static inline int z_impl_biometric_template_store(const struct device *dev, uint16_t id,
501 const uint8_t *data, size_t size)
502{
503 const struct biometric_driver_api *api;
504
505 __ASSERT_NO_MSG(dev != NULL);
506 __ASSERT_NO_MSG(data != NULL);
507
508 api = (const struct biometric_driver_api *)dev->api;
509
510 if (api->template_store == NULL) {
511 return -ENOSYS;
512 }
513
514 return api->template_store(dev, id, data, size);
515}
516
534__syscall int biometric_template_read(const struct device *dev, uint16_t id, uint8_t *data,
535 size_t size);
536
537static inline int z_impl_biometric_template_read(const struct device *dev, uint16_t id,
538 uint8_t *data, size_t size)
539{
540 const struct biometric_driver_api *api;
541
542 __ASSERT_NO_MSG(dev != NULL);
543 __ASSERT_NO_MSG(data != NULL);
544
545 api = (const struct biometric_driver_api *)dev->api;
546
547 if (api->template_read == NULL) {
548 return -ENOSYS;
549 }
550
551 return api->template_read(dev, id, data, size);
552}
553
565__syscall int biometric_template_delete(const struct device *dev, uint16_t id);
566
567static inline int z_impl_biometric_template_delete(const struct device *dev, uint16_t id)
568{
569 const struct biometric_driver_api *api;
570
571 __ASSERT_NO_MSG(dev != NULL);
572
573 api = (const struct biometric_driver_api *)dev->api;
574
575 return api->template_delete(dev, id);
576}
577
586__syscall int biometric_template_delete_all(const struct device *dev);
587
588static inline int z_impl_biometric_template_delete_all(const struct device *dev)
589{
590 const struct biometric_driver_api *api;
591
592 __ASSERT_NO_MSG(dev != NULL);
593
594 api = (const struct biometric_driver_api *)dev->api;
595
596 if (api->template_delete_all == NULL) {
597 return -ENOSYS;
598 }
599
600 return api->template_delete_all(dev);
601}
602
615__syscall int biometric_template_list(const struct device *dev, uint16_t *ids, size_t max_count,
616 size_t *actual_count);
617
618static inline int z_impl_biometric_template_list(const struct device *dev, uint16_t *ids,
619 size_t max_count, size_t *actual_count)
620{
621 const struct biometric_driver_api *api;
622
623 __ASSERT_NO_MSG(dev != NULL);
624 __ASSERT_NO_MSG(ids != NULL);
625 __ASSERT_NO_MSG(actual_count != NULL);
626
627 api = (const struct biometric_driver_api *)dev->api;
628
629 if (api->template_list == NULL) {
630 return -ENOSYS;
631 }
632
633 return api->template_list(dev, ids, max_count, actual_count);
634}
635
655__syscall int biometric_match(const struct device *dev, enum biometric_match_mode mode,
656 uint16_t template_id, k_timeout_t timeout,
657 struct biometric_match_result *result);
658
659static inline int z_impl_biometric_match(const struct device *dev, enum biometric_match_mode mode,
660 uint16_t template_id, k_timeout_t timeout,
661 struct biometric_match_result *result)
662{
663 const struct biometric_driver_api *api;
664
665 __ASSERT_NO_MSG(dev != NULL);
666
667 api = (const struct biometric_driver_api *)dev->api;
668
669 return api->match(dev, mode, template_id, timeout, result);
670}
671
685__syscall int biometric_led_control(const struct device *dev, enum biometric_led_state state);
686
687static inline int z_impl_biometric_led_control(const struct device *dev,
689{
690 const struct biometric_driver_api *api;
691
692 __ASSERT_NO_MSG(dev != NULL);
693
694 api = (const struct biometric_driver_api *)dev->api;
695
696 if (api->led_control == NULL) {
697 return -ENOSYS;
698 }
699
700 return api->led_control(dev, state);
701}
702
703#ifdef __cplusplus
704}
705#endif
706
710
711#include <zephyr/syscalls/biometrics.h>
712
713#endif /* ZEPHYR_INCLUDE_DRIVERS_BIOMETRICS_H_ */
System error numbers.
int biometric_template_delete(const struct device *dev, uint16_t id)
Delete biometric template.
int biometric_attr_get(const struct device *dev, enum biometric_attribute attr, int32_t *val)
Get a biometric sensor attribute.
int biometric_enroll_capture(const struct device *dev, k_timeout_t timeout, struct biometric_capture_result *result)
Capture enrollment samples.
int biometric_enroll_abort(const struct device *dev)
Abort enrollment.
int biometric_attr_set(const struct device *dev, enum biometric_attribute attr, int32_t val)
Set a biometric sensor attribute.
int biometric_match(const struct device *dev, enum biometric_match_mode mode, uint16_t template_id, k_timeout_t timeout, struct biometric_match_result *result)
Perform biometric matching.
int biometric_enroll_start(const struct device *dev, uint16_t template_id)
Start biometric enrollment.
biometric_led_state
Biometric LED states.
Definition biometrics.h:62
int biometric_template_read(const struct device *dev, uint16_t id, uint8_t *data, size_t size)
Read biometric template.
biometric_sensor_type
Biometrics sensor types.
Definition biometrics.h:38
int biometric_template_list(const struct device *dev, uint16_t *ids, size_t max_count, size_t *actual_count)
List stored template IDs.
int biometric_get_capabilities(const struct device *dev, struct biometric_capabilities *caps)
Get biometric sensor capabilities.
int biometric_template_delete_all(const struct device *dev)
Delete all biometric templates.
int biometric_led_control(const struct device *dev, enum biometric_led_state state)
Control biometric sensor LED.
biometric_match_mode
Biometric matching modes.
Definition biometrics.h:48
int biometric_template_store(const struct device *dev, uint16_t id, const uint8_t *data, size_t size)
Store biometric template.
int biometric_enroll_finalize(const struct device *dev)
Finalize enrollment.
biometric_attribute
Biometric attribute types.
Definition biometrics.h:72
@ BIOMETRIC_LED_BREATHE
LED breathing effect.
Definition biometrics.h:66
@ BIOMETRIC_LED_ON
LED on continuously.
Definition biometrics.h:64
@ BIOMETRIC_LED_BLINK
LED blinking.
Definition biometrics.h:65
@ BIOMETRIC_LED_OFF
LED off.
Definition biometrics.h:63
@ BIOMETRIC_TYPE_FACE
Face recognition.
Definition biometrics.h:41
@ BIOMETRIC_TYPE_IRIS
Iris scanner.
Definition biometrics.h:40
@ BIOMETRIC_TYPE_VOICE
Voice recognition.
Definition biometrics.h:42
@ BIOMETRIC_TYPE_FINGERPRINT
Fingerprint sensor.
Definition biometrics.h:39
@ BIOMETRIC_MATCH_IDENTIFY
Search entire database.
Definition biometrics.h:50
@ BIOMETRIC_MATCH_VERIFY
Verify against specific template.
Definition biometrics.h:49
@ BIOMETRIC_ATTR_COMMON_COUNT
Number of all common biometric attributes.
Definition biometrics.h:88
@ BIOMETRIC_ATTR_MAX
Maximum value describing a biometric attribute type.
Definition biometrics.h:97
@ BIOMETRIC_ATTR_SECURITY_LEVEL
Security level (1-10), higher values reduce false accepts.
Definition biometrics.h:78
@ BIOMETRIC_ATTR_MATCH_THRESHOLD
Minimum confidence score for match acceptance (sensor-specific range).
Definition biometrics.h:74
@ BIOMETRIC_ATTR_ENROLLMENT_QUALITY
Minimum quality score for enrollment acceptance (sensor-specific range).
Definition biometrics.h:76
@ BIOMETRIC_ATTR_IMAGE_QUALITY
Last captured image quality score (sensor-specific range), read-only.
Definition biometrics.h:84
@ BIOMETRIC_ATTR_ANTI_SPOOF_LEVEL
Anti-spoofing detection sensitivity (1-10).
Definition biometrics.h:82
@ BIOMETRIC_ATTR_TIMEOUT_MS
Default operation timeout in milliseconds.
Definition biometrics.h:80
@ BIOMETRIC_ATTR_PRIV_START
This and higher values are sensor specific.
Definition biometrics.h:93
#define ENOSYS
Function not implemented.
Definition errno.h:82
#define NULL
Definition iar_missing_defs.h:20
Public kernel APIs.
state
Definition parser_state.h:29
__INT32_TYPE__ int32_t
Definition stdint.h:74
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
#define INT16_MAX
Definition stdint.h:17
Biometric sensor capabilities.
Definition biometrics.h:103
uint8_t enrollment_samples_required
Number of samples needed for enrollment.
Definition biometrics.h:113
uint16_t template_size
Size of each template in bytes.
Definition biometrics.h:109
uint8_t storage_modes
Bitmask of supported storage modes.
Definition biometrics.h:111
uint16_t max_templates
Maximum templates device can store.
Definition biometrics.h:107
enum biometric_sensor_type type
Biometric sensor type.
Definition biometrics.h:105
Result from an enrollment capture operation.
Definition biometrics.h:133
uint8_t samples_required
Total number of samples required for enrollment.
Definition biometrics.h:137
uint8_t quality
Quality score of the captured sample (0-100).
Definition biometrics.h:139
uint8_t samples_captured
Number of samples captured so far.
Definition biometrics.h:135
Result from a biometric match operation.
Definition biometrics.h:119
int32_t confidence
Confidence/match score (sensor-specific scale, higher is better).
Definition biometrics.h:121
uint8_t image_quality
Quality score of the captured sample used for matching (0-100).
Definition biometrics.h:125
uint16_t template_id
Matched template ID (for IDENTIFY mode, or verified ID for VERIFY mode).
Definition biometrics.h:123
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
void * data
Address of the device instance private data.
Definition device.h:523
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
Kernel timeout type.
Definition clock.h:65