SparkFun Fingerprint Sensor - FPC2534 Pro  v0.9.9-3-g5d0d172
Library for the SparkFun Fingerprint Sensor - FPC2534 Pro
Loading...
Searching...
No Matches
fpc_api.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Fingerprint Cards AB
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License")
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
24#ifndef FPC_API_H_
25#define FPC_API_H_
26
27#include <stdint.h>
28
29/* -----------------------------------------------------------------------------
30 Result Codes
31------------------------------------------------------------------------------*/
32
33typedef uint16_t fpc_result_t;
34
35/* Results 0 - 10 is information */
36#define FPC_RESULT_OK 0
37#define FPC_PENDING_OPERATION 1
38#define FPC_RESULT_DATA_NOT_SET 2
39#define FPC_RESULT_CMD_ID_NOT_SUPPORTED 3
40
41/* Errors */
42#define FPC_RESULT_FAILURE 11
43#define FPC_RESULT_INVALID_PARAM 12
44#define FPC_RESULT_WRONG_STATE 13
45#define FPC_RESULT_OUT_OF_MEMORY 14
46#define FPC_RESULT_TIMEOUT 15
47#define FPC_RESULT_NOT_SUPPORTED 16
48
49/* Template and Users ID Errors */
50#define FPC_RESULT_USER_ID_EXISTS 20
51#define FPC_RESULT_USER_ID_NOT_FOUND 21
52#define FPC_RESULT_STORAGE_IS_FULL 22
53#define FPC_RESULT_FLASH_ERROR 23
54#define FPC_RESULT_IDENTIFY_LOCKOUT 24
55#define FPC_RESULT_STORAGE_IS_EMPTY 25
56
57/* IO Errors */
58#define FPC_RESULT_IO_BUSY 31
59#define FPC_RESULT_IO_RUNTIME_FAILURE 32
60#define FPC_RESULT_IO_BAD_DATA 33
61#define FPC_RESULT_IO_NOT_SUPPORTED 34
62#define FPC_RESULT_IO_NO_DATA 35
63
64/* Image Capture Errors */
65#define FPC_RESULT_COULD_NOT_ARM 40
66#define FPC_RESULT_CAPTURE_FAILED 41
67#define FPC_RESULT_BAD_IMAGE_QUALITY 42
68#define FPC_RESULT_NO_IMAGE 43
69
70/* Other Errors */
71#define FPC_RESULT_SENSOR_ERROR 50
72#define FPC_RESULT_PROTOCOL_VERSION_ERROR 70
73#define FPC_STARTUP_FAILURE 101
74
75/* -----------------------------------------------------------------------------
76 Frame Defines and Structs
77------------------------------------------------------------------------------*/
78
82#define FPC_FRAME_PROTOCOL_VERSION 0x0004
83
87#define FPC_FRAME_TYPE_CMD_REQUEST 0x11
88#define FPC_FRAME_TYPE_CMD_RESPONSE 0x12
89#define FPC_FRAME_TYPE_CMD_EVENT 0x13
90
94#define FPC_FRAME_FLAG_SECURE 0x0001
95#define FPC_FRAME_FLAG_SENDER_HOST 0x0010
96#define FPC_FRAME_FLAG_SENDER_FW_BL 0x0020
97#define FPC_FRAME_FLAG_SENDER_FW_APP 0x0040
98
99#define MAX_HOST_PACKET_SIZE_DEFAULT (2 * 1024)
100
104typedef struct
105{
107 uint16_t version;
109 uint16_t type;
111 uint16_t flags;
113 uint16_t payload_size;
115 // uint8_t *payload; // KDB - moved to pointer - flex arrays break with inclusion with other structs
116 // uint8_t payload[];
118
122typedef struct
123{
125 uint16_t cmd_id;
127 uint16_t type;
129 // uint8_t payload[];
130 // uint8_t *payload;
132
133#define FPC_AES_GCM_IV_SIZE 12
134#define FPC_AES_GCM_TAG_SIZE 16
135
139typedef struct
140{
144 uint8_t gmac_tag[FPC_AES_GCM_TAG_SIZE];
146 uint8_t ciphertext[];
148
149/* -----------------------------------------------------------------------------
150 Command Defines
151------------------------------------------------------------------------------*/
152
156#define CMD_STATUS 0x0040
157#define CMD_VERSION 0x0041
158#define CMD_BIST 0x0044
159#define CMD_CAPTURE 0x0050
160#define CMD_ABORT 0x0052
161#define CMD_IMAGE_DATA 0x0053
162#define CMD_ENROLL 0x0054
163#define CMD_IDENTIFY 0x0055
164#define CMD_LIST_TEMPLATES 0x0060
165#define CMD_DELETE_TEMPLATE 0x0061
166#define CMD_GET_TEMPLATE_DATA 0x0062
167#define CMD_PUT_TEMPLATE_DATA 0x0063
168#define CMD_GET_SYSTEM_CONFIG 0x006A
169#define CMD_SET_SYSTEM_CONFIG 0x006B
170#define CMD_RESET 0x0072
171#define CMD_SET_CRYPTO_KEY 0x0083
172#define CMD_SET_DBG_LOG_LEVEL 0x00B0
173#define CMD_FACTORY_RESET 0x00FA
174#define CMD_DATA_GET 0x0101
175#define CMD_DATA_PUT 0x0102
176#define CMD_NAVIGATION 0x0200
177#define CMD_NAVIGATION_PS 0x0201
178#define CMD_GPIO_CONTROL 0x0300
179
183#define EVENT_NONE 0
184#define EVENT_IDLE 1
185#define EVENT_FINGER_DETECT 3
186#define EVENT_FINGER_LOST 4
187#define EVENT_IMAGE_READY 5
188#define EVENT_CMD_FAILED 6
189
193#define STATE_APP_FW_READY 0x0001
194#define STATE_SECURE_INTERFACE 0x0002
195#define STATE_CAPTURE 0x0004
196#define STATE_IMAGE_AVAILABLE 0x0010
197#define STATE_DATA_TRANSFER 0x0040
198#define STATE_FINGER_DOWN 0x0080
199#define STATE_SYS_ERROR 0x0400
200#define STATE_ENROLL 0x1000
201#define STATE_IDENTIFY 0x2000
202#define STATE_NAVIGATION 0x4000
203
204/* -----------------------------------------------------------------------------
205 Command Payload Definitions - Core
206------------------------------------------------------------------------------*/
207
211typedef struct
212{
216 uint16_t event;
218 uint16_t state;
222 int16_t reserved;
224
228typedef struct
229{
233 uint32_t mcu_unique_id[3];
235 uint8_t fw_id;
241 char version_str[];
243
253typedef struct
254{
257 uint8_t key_size;
259 uint8_t key[];
261
262/* -----------------------------------------------------------------------------
263 Command Payload Definitions - Biometric
264------------------------------------------------------------------------------*/
265
269#define ENROLL_FEEDBACK_DONE 1
270#define ENROLL_FEEDBACK_PROGRESS 2
271#define ENROLL_FEEDBACK_REJECT_LOW_QUALITY 3
272#define ENROLL_FEEDBACK_REJECT_LOW_COVERAGE 4
273#define ENROLL_FEEDBACK_REJECT_LOW_MOBILITY 5
274#define ENROLL_FEEDBACK_REJECT_OTHER 6
275#define ENROLL_FEEDBACK_PROGRESS_IMMOBILE 7
276
280#define IDENTIFY_RESULT_MATCH 0x61EC
281#define IDENTIFY_RESULT_NO_MATCH 0xBAAD
282
286#define CMD_IMAGE_REQUEST_TYPE_INFO_RAW 0
287#define CMD_IMAGE_REQUEST_TYPE_INFO_FMI 1
288#define CMD_IMAGE_REQUEST_TYPE_GET_RAW 2
289#define CMD_IMAGE_REQUEST_TYPE_GET_FMI 3
290
294#define CMD_NAV_EVENT_NONE 0
295#define CMD_NAV_EVENT_UP 1
296#define CMD_NAV_EVENT_DOWN 2
297#define CMD_NAV_EVENT_RIGHT 3
298#define CMD_NAV_EVENT_LEFT 4
299#define CMD_NAV_EVENT_PRESS 5
300#define CMD_NAV_EVENT_LONG_PRESS 6
301
305#define CMD_NAV_CFG_ORIENTATION_0 0x00000000
306#define CMD_NAV_CFG_ORIENTATION_90 0x00000001
307#define CMD_NAV_CFG_ORIENTATION_180 0x00000002
308#define CMD_NAV_CFG_ORIENTATION_270 0x00000003
309#define CMD_NAV_CFG_ORIENTATION_MASK 0x00000003
310#define CMD_NAV_CFG_SKIP_FINGER_STABLE 0x00000004
311#define CMD_NAV_CFG_SEND_SAMPLE_DATA 0x00000008
312
318#define ID_TYPE_NONE 0x1012
319
326#define ID_TYPE_ALL 0x2023
327
335#define ID_TYPE_SPECIFIED 0x3034
336
342#define ID_TYPE_GENERATE_NEW 0x4045
343
347typedef struct
348{
350 uint16_t type;
352 uint16_t id;
354
358typedef struct
359{
363
370typedef struct
371{
377
381typedef struct
382{
386 uint16_t id;
388 uint8_t feedback;
392
399typedef struct
400{
406 uint16_t tag;
408
412typedef struct
413{
417 uint16_t match;
421 uint16_t tag;
423
427typedef struct
428{
434
440typedef struct
441{
447 uint16_t template_id_list[];
449
453typedef struct
454{
458 uint16_t id;
460 uint16_t total_size;
462
466typedef struct
467{
471 uint16_t id;
475 uint16_t total_size;
477
481typedef struct
482{
486 uint16_t type;
488 uint16_t total_size;
490
494typedef struct
495{
499 uint32_t image_size;
501 uint16_t image_width;
503 uint16_t image_height;
505 uint16_t type;
509
513typedef struct
514{
517 /* Navigation orientation. One of CMD_NAV_CFG_* */
518 uint32_t config;
520
524typedef struct
525{
528 /* Navigation gesture. One of CMD_NAV_EVENT_* */
529 uint16_t gesture;
530 uint16_t n_samples;
531 uint16_t samples[];
533
537typedef struct
538{
541 /* Navigation impulses. */
542 int32_t v_impulse;
543 int32_t h_impulse;
544 uint32_t c_coverage;
545 /* Used for for click. */
546 uint16_t gesture;
548
549typedef enum
550{
555
559typedef struct
560{
566 uint32_t data_size;
568 uint8_t data[];
570
574typedef struct
575{
581
585typedef struct
586{
590 uint32_t request_size;
592
596typedef struct
597{
603 uint32_t data_size;
605 uint8_t data[];
607
608/* -----------------------------------------------------------------------------
609 Command Payload Definitions - System Configuration
610------------------------------------------------------------------------------*/
611
613#define CFG_VERSION 2
614
619#define CFG_SYS_FLAG_STATUS_EVT_AT_BOOT 0x00000001
624#define CFG_SYS_FLAG_UART_IN_STOP_MODE 0x00000010
629#define CFG_SYS_FLAG_UART_IRQ_BEFORE_TX 0x00000020
634#define CFG_SYS_FLAG_ALLOW_FACTORY_RESET 0x00000100
635
639#define CFG_UART_BAUDRATE_9600 1
640#define CFG_UART_BAUDRATE_19200 2
641#define CFG_UART_BAUDRATE_57600 3
642#define CFG_UART_BAUDRATE_115200 4
643#define CFG_UART_BAUDRATE_921600 5
644
648typedef struct
649{
651 uint16_t version;
656 uint32_t sys_flags;
676 uint16_t i2c_address;
678
679#define FPC_SYS_CFG_TYPE_DEFAULT 0
680#define FPC_SYS_CFG_TYPE_CUSTOM 1
681
685typedef struct
686{
690 uint16_t config_type;
692
696typedef struct
697{
701 uint16_t config_type;
705
711typedef struct
712{
718
719/* -----------------------------------------------------------------------------
720 Command Payload Definitions - GPIO Pin Control
721------------------------------------------------------------------------------*/
722
723#define GPIO_CONTROL_SUB_CMD_GET 0
724#define GPIO_CONTROL_SUB_CMD_SET 1
725
726#define GPIO_CONTROL_MODE_NOT_USED 0
727#define GPIO_CONTROL_MODE_OUTPUT_PP 1
728#define GPIO_CONTROL_MODE_OUTPUT_OD 2
729#define GPIO_CONTROL_MODE_INPUT_PULL_NONE 3
730#define GPIO_CONTROL_MODE_INPUT_PULL_UP 4
731#define GPIO_CONTROL_MODE_INPUT_PULL_DOWN 5
732
733#define GPIO_CONTROL_STATE_RESET 0
734#define GPIO_CONTROL_STATE_SET 1
735
739typedef struct
740{
744 uint8_t sub_cmd;
746 uint8_t pin;
748 uint8_t mode;
750 uint8_t state;
752
758typedef struct
759{
763 uint8_t state;
765
766/* -----------------------------------------------------------------------------
767 Command Payload Definitions - BIST
768------------------------------------------------------------------------------*/
769
770typedef struct
771{
777 uint16_t test_verdict;
779
780#endif /* FPC_API_H_ */
#define FPC_AES_GCM_TAG_SIZE
Definition: fpc_api.h:134
#define FPC_AES_GCM_IV_SIZE
Definition: fpc_api.h:133
fpc_cmd_data_type_t
Definition: fpc_api.h:550
@ FPC_CMD_DATA_TYPE_FILE
Definition: fpc_api.h:553
@ FPC_CMD_DATA_TYPE_RAM
Definition: fpc_api.h:552
@ FPC_CMD_DATA_TYPE_NONE
Definition: fpc_api.h:551
uint16_t fpc_result_t
Definition: fpc_api.h:33
Definition: fpc_api.h:771
uint16_t sensor_test_result
Definition: fpc_api.h:775
uint16_t test_verdict
Definition: fpc_api.h:777
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:773
Payload definition of the CMD_CAPTURE Request command.
Definition: fpc_api.h:359
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:361
Payload for CMD_DATA_GET request.
Definition: fpc_api.h:586
uint32_t request_size
Definition: fpc_api.h:590
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:588
Payload for CMD_DATA_GET response.
Definition: fpc_api.h:597
uint32_t data_size
Definition: fpc_api.h:603
uint32_t remaining_size
Definition: fpc_api.h:601
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:599
Payload for CMD_DATA_PUT request.
Definition: fpc_api.h:560
uint32_t data_size
Definition: fpc_api.h:566
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:562
uint32_t remaining_size
Definition: fpc_api.h:564
Payload for CMD_DATA_PUT response.
Definition: fpc_api.h:575
uint32_t total_received
Definition: fpc_api.h:579
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:577
Payload definition of the CMD_ENROLL Request.
Definition: fpc_api.h:371
fpc_id_type_t tpl_id
Definition: fpc_api.h:375
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:373
Payload definition of the CMD_ENROLL Status Event.
Definition: fpc_api.h:382
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:384
uint8_t feedback
Definition: fpc_api.h:388
uint8_t samples_remaining
Definition: fpc_api.h:390
uint16_t id
Definition: fpc_api.h:386
Payload definition of the CMD_GET_SYSTEM_CONFIG Request.
Definition: fpc_api.h:686
uint16_t config_type
Definition: fpc_api.h:690
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:688
Payload definition of the CMD_GET_SYSTEM_CONFIG Response.
Definition: fpc_api.h:697
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:699
uint16_t config_type
Definition: fpc_api.h:701
fpc_system_config_t cfg
Definition: fpc_api.h:703
Command Header.
Definition: fpc_api.h:123
uint16_t type
Definition: fpc_api.h:127
uint16_t cmd_id
Definition: fpc_api.h:125
Payload definition of the CMD_IDENTIFY Request.
Definition: fpc_api.h:400
uint16_t tag
Definition: fpc_api.h:406
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:402
fpc_id_type_t tpl_id
Definition: fpc_api.h:404
Payload definition of the CMD_IDENTIFY Event.
Definition: fpc_api.h:413
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:415
fpc_id_type_t tpl_id
Definition: fpc_api.h:419
uint16_t match
Definition: fpc_api.h:417
uint16_t tag
Definition: fpc_api.h:421
Payload definition of the Image request command.
Definition: fpc_api.h:482
uint16_t total_size
Definition: fpc_api.h:488
uint16_t type
Definition: fpc_api.h:486
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:484
Payload definition of the Image response command.
Definition: fpc_api.h:495
uint32_t image_size
Definition: fpc_api.h:499
uint16_t type
Definition: fpc_api.h:505
uint16_t max_chunk_size
Definition: fpc_api.h:507
uint16_t image_height
Definition: fpc_api.h:503
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:497
uint16_t image_width
Definition: fpc_api.h:501
Payload definition of the CMD_NAVIGATION_PS Event.
Definition: fpc_api.h:538
int32_t v_impulse
Definition: fpc_api.h:542
uint16_t gesture
Definition: fpc_api.h:546
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:540
int32_t h_impulse
Definition: fpc_api.h:543
uint32_t c_coverage
Definition: fpc_api.h:544
Payload definition of the CMD_NAVIGATION Request.
Definition: fpc_api.h:514
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:516
uint32_t config
Definition: fpc_api.h:518
Payload definition of the CMD_NAVIGATION Event.
Definition: fpc_api.h:525
uint16_t n_samples
Definition: fpc_api.h:530
uint16_t gesture
Definition: fpc_api.h:529
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:527
Payload definition of the CMD_GPIO_CONTROL Request.
Definition: fpc_api.h:740
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:742
uint8_t pin
Definition: fpc_api.h:746
uint8_t sub_cmd
Definition: fpc_api.h:744
uint8_t state
Definition: fpc_api.h:750
uint8_t mode
Definition: fpc_api.h:748
Payload definition of the CMD_GPIO_CONTROL Response.
Definition: fpc_api.h:759
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:761
uint8_t state
Definition: fpc_api.h:763
Payload definition of the CMD_SET_SYSTEM_CONFIG Request.
Definition: fpc_api.h:712
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:714
fpc_system_config_t cfg
Definition: fpc_api.h:716
Payload definition AES Key Provisioning CMD_SET_CRYPTO_KEY Request.
Definition: fpc_api.h:254
uint8_t key_size
Definition: fpc_api.h:257
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:255
Payload definition of the CMD_STATUS Response / Event.
Definition: fpc_api.h:212
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:214
int16_t reserved
Definition: fpc_api.h:222
uint16_t state
Definition: fpc_api.h:218
uint16_t app_fail_code
Definition: fpc_api.h:220
uint16_t event
Definition: fpc_api.h:216
Payload definition of the Template Data (GET & PUT) Request.
Definition: fpc_api.h:454
uint16_t id
Definition: fpc_api.h:458
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:456
uint16_t total_size
Definition: fpc_api.h:460
Payload definition of the Template Data Response.
Definition: fpc_api.h:467
uint16_t max_chunk_size
Definition: fpc_api.h:473
uint16_t id
Definition: fpc_api.h:471
uint16_t total_size
Definition: fpc_api.h:475
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:469
Payload definition of the CMD_DELETE_TEMPLATE Request.
Definition: fpc_api.h:428
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:430
fpc_id_type_t tpl_id
Definition: fpc_api.h:432
Payload definition of the CMD_LIST_TEMPLATES Response.
Definition: fpc_api.h:441
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:443
uint16_t number_of_templates
Definition: fpc_api.h:445
Payload definition of the CMD_VERSION Response.
Definition: fpc_api.h:229
uint8_t fw_fuse_level
Definition: fpc_api.h:237
fpc_cmd_hdr_t cmd
Definition: fpc_api.h:231
uint16_t version_str_len
Definition: fpc_api.h:239
uint8_t fw_id
Definition: fpc_api.h:235
Frame Header Addon for secure Protocol.
Definition: fpc_api.h:140
Frame Header.
Definition: fpc_api.h:105
uint16_t flags
Definition: fpc_api.h:111
uint16_t payload_size
Definition: fpc_api.h:113
uint16_t version
Definition: fpc_api.h:107
uint16_t type
Definition: fpc_api.h:109
Template ID specifier payload.
Definition: fpc_api.h:348
uint16_t type
Definition: fpc_api.h:350
uint16_t id
Definition: fpc_api.h:352
System Configuration parameters.
Definition: fpc_api.h:649
uint16_t i2c_address
Definition: fpc_api.h:676
uint8_t idfy_max_consecutive_fails
Definition: fpc_api.h:662
uint8_t idfy_lockout_time_s
Definition: fpc_api.h:664
uint16_t version
Definition: fpc_api.h:651
uint32_t sys_flags
Definition: fpc_api.h:656
uint8_t uart_delay_before_irq_ms
Definition: fpc_api.h:658
uint16_t idle_time_before_sleep_ms
Definition: fpc_api.h:666
uint8_t enroll_touches
Definition: fpc_api.h:668
uint16_t finger_scan_interval_ms
Definition: fpc_api.h:654
uint8_t enroll_immobile_touches
Definition: fpc_api.h:674
uint8_t uart_baudrate
Definition: fpc_api.h:660