Fingerprint and demo library for ARM-STM32 made from the Arduino library for R503

Dependents:   R503_fingerprint_HelloWorldV4

Committer:
cdupaty
Date:
Wed May 26 12:47:44 2021 +0000
Revision:
5:6fff11306a66
Parent:
4:91de7e11861b
Update May 26, 2021

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cdupaty 2:6f273d942c43 1 // STM32 adaptation by Christian Dupaty 03/2021
cdupaty 2:6f273d942c43 2
cdupaty 4:91de7e11861b 3 #ifndef FINGERPRINT_H
cdupaty 0:35cd316e4b41 4 #define FINGERPRINT_H
cdupaty 0:35cd316e4b41 5
cdupaty 0:35cd316e4b41 6 /*!
cdupaty 0:35cd316e4b41 7 * @file Fingerprint.h
cdupaty 0:35cd316e4b41 8 */
cdupaty 0:35cd316e4b41 9 #include "mbed.h"
cdupaty 0:35cd316e4b41 10 #include <string.h>
cdupaty 0:35cd316e4b41 11
cdupaty 0:35cd316e4b41 12 typedef unsigned char uint8_t ;
cdupaty 0:35cd316e4b41 13 //typedef unsigned int uint16_t;
cdupaty 0:35cd316e4b41 14 //typedef unsigned long uint32_t;
cdupaty 0:35cd316e4b41 15
cdupaty 0:35cd316e4b41 16 #define FINGERPRINT_OK 0x00 //!< Command execution is complete
cdupaty 0:35cd316e4b41 17 #define FINGERPRINT_PACKETRECIEVEERR 0x01 //!< Error when receiving data package
cdupaty 0:35cd316e4b41 18 #define FINGERPRINT_NOFINGER 0x02 //!< No finger on the sensor
cdupaty 0:35cd316e4b41 19 #define FINGERPRINT_IMAGEFAIL 0x03 //!< Failed to enroll the finger
cdupaty 0:35cd316e4b41 20 #define FINGERPRINT_IMAGEMESS \
cdupaty 0:35cd316e4b41 21 0x06 //!< Failed to generate character file due to overly disorderly
cdupaty 0:35cd316e4b41 22 //!< fingerprint image
cdupaty 0:35cd316e4b41 23 #define FINGERPRINT_FEATUREFAIL \
cdupaty 0:35cd316e4b41 24 0x07 //!< Failed to generate character file due to the lack of character point
cdupaty 0:35cd316e4b41 25 //!< or small fingerprint image
cdupaty 0:35cd316e4b41 26 #define FINGERPRINT_NOMATCH 0x08 //!< Finger doesn't match
cdupaty 0:35cd316e4b41 27 #define FINGERPRINT_NOTFOUND 0x09 //!< Failed to find matching finger
cdupaty 0:35cd316e4b41 28 #define FINGERPRINT_ENROLLMISMATCH \
cdupaty 0:35cd316e4b41 29 0x0A //!< Failed to combine the character files
cdupaty 0:35cd316e4b41 30 #define FINGERPRINT_BADLOCATION \
cdupaty 0:35cd316e4b41 31 0x0B //!< Addressed PageID is beyond the finger library
cdupaty 0:35cd316e4b41 32 #define FINGERPRINT_DBRANGEFAIL \
cdupaty 0:35cd316e4b41 33 0x0C //!< Error when reading template from library or invalid template
cdupaty 0:35cd316e4b41 34 #define FINGERPRINT_UPLOADFEATUREFAIL 0x0D //!< Error when uploading template
cdupaty 0:35cd316e4b41 35 #define FINGERPRINT_PACKETRESPONSEFAIL \
cdupaty 0:35cd316e4b41 36 0x0E //!< Module failed to receive the following data packages
cdupaty 0:35cd316e4b41 37 #define FINGERPRINT_UPLOADFAIL 0x0F //!< Error when uploading image
cdupaty 0:35cd316e4b41 38 #define FINGERPRINT_DELETEFAIL 0x10 //!< Failed to delete the template
cdupaty 0:35cd316e4b41 39 #define FINGERPRINT_DBCLEARFAIL 0x11 //!< Failed to clear finger library
cdupaty 0:35cd316e4b41 40 #define FINGERPRINT_PASSFAIL \
cdupaty 0:35cd316e4b41 41 0x13 //!< Find whether the fingerprint passed or failed
cdupaty 0:35cd316e4b41 42 #define FINGERPRINT_INVALIDIMAGE \
cdupaty 0:35cd316e4b41 43 0x15 //!< Failed to generate image because of lac of valid primary image
cdupaty 0:35cd316e4b41 44 #define FINGERPRINT_FLASHERR 0x18 //!< Error when writing flash
cdupaty 0:35cd316e4b41 45 #define FINGERPRINT_INVALIDREG 0x1A //!< Invalid register number
cdupaty 0:35cd316e4b41 46 #define FINGERPRINT_ADDRCODE 0x20 //!< Address code
cdupaty 0:35cd316e4b41 47 #define FINGERPRINT_PASSVERIFY 0x21 //!< Verify the fingerprint passed
cdupaty 2:6f273d942c43 48 #define FINGERPRINT_STARTCODE \
cdupaty 0:35cd316e4b41 49 0xEF01 //!< Fixed falue of EF01H; High byte transferred first
cdupaty 0:35cd316e4b41 50
cdupaty 0:35cd316e4b41 51 #define FINGERPRINT_COMMANDPACKET 0x1 //!< Command packet
cdupaty 0:35cd316e4b41 52 #define FINGERPRINT_DATAPACKET \
cdupaty 0:35cd316e4b41 53 0x2 //!< Data packet, must follow command packet or acknowledge packet
cdupaty 0:35cd316e4b41 54 #define FINGERPRINT_ACKPACKET 0x7 //!< Acknowledge packet
cdupaty 0:35cd316e4b41 55 #define FINGERPRINT_ENDDATAPACKET 0x8 //!< End of data packet
cdupaty 0:35cd316e4b41 56
cdupaty 0:35cd316e4b41 57 #define FINGERPRINT_TIMEOUT 0xFF //!< Timeout was reached
cdupaty 0:35cd316e4b41 58 #define FINGERPRINT_BADPACKET 0xFE //!< Bad packet was sent
cdupaty 0:35cd316e4b41 59
cdupaty 0:35cd316e4b41 60 #define FINGERPRINT_GETIMAGE 0x01 //!< Collect finger image
cdupaty 0:35cd316e4b41 61 #define FINGERPRINT_IMAGE2TZ 0x02 //!< Generate character file from image
cdupaty 0:35cd316e4b41 62 #define FINGERPRINT_SEARCH 0x04 //!< Search for fingerprint in slot
cdupaty 0:35cd316e4b41 63 #define FINGERPRINT_REGMODEL \
cdupaty 0:35cd316e4b41 64 0x05 //!< Combine character files and generate template
cdupaty 0:35cd316e4b41 65 #define FINGERPRINT_STORE 0x06 //!< Store template
cdupaty 0:35cd316e4b41 66 #define FINGERPRINT_LOAD 0x07 //!< Read/load template
cdupaty 0:35cd316e4b41 67 #define FINGERPRINT_UPLOAD 0x08 //!< Upload template
cdupaty 0:35cd316e4b41 68 #define FINGERPRINT_DELETE 0x0C //!< Delete templates
cdupaty 0:35cd316e4b41 69 #define FINGERPRINT_EMPTY 0x0D //!< Empty library
cdupaty 0:35cd316e4b41 70 #define FINGERPRINT_READSYSPARAM 0x0F //!< Read system parameters
cdupaty 0:35cd316e4b41 71 #define FINGERPRINT_SETPASSWORD 0x12 //!< Sets passwords
cdupaty 0:35cd316e4b41 72 #define FINGERPRINT_VERIFYPASSWORD 0x13 //!< Verifies the password
cdupaty 0:35cd316e4b41 73 #define FINGERPRINT_HISPEEDSEARCH \
cdupaty 0:35cd316e4b41 74 0x1B //!< Asks the sensor to search for a matching fingerprint template to the
cdupaty 0:35cd316e4b41 75 //!< last model generated
cdupaty 0:35cd316e4b41 76 #define FINGERPRINT_TEMPLATECOUNT 0x1D //!< Read finger template numbers
cdupaty 0:35cd316e4b41 77 #define FINGERPRINT_AURALEDCONFIG 0x35 //!< Aura LED control
cdupaty 0:35cd316e4b41 78 #define FINGERPRINT_LEDON 0x50 //!< Turn on the onboard LED
cdupaty 0:35cd316e4b41 79 #define FINGERPRINT_LEDOFF 0x51 //!< Turn off the onboard LED
cdupaty 0:35cd316e4b41 80
cdupaty 0:35cd316e4b41 81 #define FINGERPRINT_LED_BREATHING 0x01 //!< Breathing light
cdupaty 0:35cd316e4b41 82 #define FINGERPRINT_LED_FLASHING 0x02 //!< Flashing light
cdupaty 0:35cd316e4b41 83 #define FINGERPRINT_LED_ON 0x03 //!< Always on
cdupaty 0:35cd316e4b41 84 #define FINGERPRINT_LED_OFF 0x04 //!< Always off
cdupaty 0:35cd316e4b41 85 #define FINGERPRINT_LED_GRADUAL_ON 0x05 //!< Gradually on
cdupaty 0:35cd316e4b41 86 #define FINGERPRINT_LED_GRADUAL_OFF 0x06 //!< Gradually off
cdupaty 0:35cd316e4b41 87 #define FINGERPRINT_LED_RED 0x01 //!< Red LED
cdupaty 0:35cd316e4b41 88 #define FINGERPRINT_LED_BLUE 0x02 //!< Blue LED
cdupaty 0:35cd316e4b41 89 #define FINGERPRINT_LED_PURPLE 0x03 //!< Purple LED
cdupaty 0:35cd316e4b41 90
cdupaty 2:6f273d942c43 91 /////////////////////////////////////////////////
cdupaty 2:6f273d942c43 92 // For debug uncomment this line
cdupaty 3:394a5735eea0 93 #define FINGERPRINT_DEBUG
cdupaty 2:6f273d942c43 94 /////////////////////////////////////////////////
cdupaty 0:35cd316e4b41 95
cdupaty 0:35cd316e4b41 96 #define DEFAULTTIMEOUT 1000 //!< UART reading timeout in milliseconds
cdupaty 0:35cd316e4b41 97
cdupaty 0:35cd316e4b41 98 ///! Helper class to craft UART packets
cdupaty 0:35cd316e4b41 99 struct Fingerprint_Packet
cdupaty 0:35cd316e4b41 100 {
cdupaty 0:35cd316e4b41 101 /**************************************************************************/
cdupaty 0:35cd316e4b41 102 /*!
cdupaty 0:35cd316e4b41 103 @brief Create a new UART-borne packet
cdupaty 0:35cd316e4b41 104 @param type Command, data, ack type packet
cdupaty 0:35cd316e4b41 105 @param length Size of payload
cdupaty 0:35cd316e4b41 106 @param data Pointer to bytes of size length we will memcopy into the
cdupaty 0:35cd316e4b41 107 internal buffer
cdupaty 0:35cd316e4b41 108 */
cdupaty 0:35cd316e4b41 109 /**************************************************************************/
cdupaty 0:35cd316e4b41 110
cdupaty 0:35cd316e4b41 111 Fingerprint_Packet(uint8_t type, uint16_t length, uint8_t *data)
cdupaty 0:35cd316e4b41 112 {
cdupaty 0:35cd316e4b41 113 this->start_code = FINGERPRINT_STARTCODE;
cdupaty 0:35cd316e4b41 114 this->type = type;
cdupaty 0:35cd316e4b41 115 this->length = length;
cdupaty 0:35cd316e4b41 116 address[0] = 0xFF;
cdupaty 0:35cd316e4b41 117 address[1] = 0xFF;
cdupaty 0:35cd316e4b41 118 address[2] = 0xFF;
cdupaty 0:35cd316e4b41 119 address[3] = 0xFF;
cdupaty 0:35cd316e4b41 120 if (length < 64)
cdupaty 0:35cd316e4b41 121 memcpy(this->data, data, length);
cdupaty 0:35cd316e4b41 122 else
cdupaty 0:35cd316e4b41 123 memcpy(this->data, data, 64);
cdupaty 0:35cd316e4b41 124 }
cdupaty 0:35cd316e4b41 125 uint16_t start_code; ///< "Wakeup" code for packet detection
cdupaty 0:35cd316e4b41 126 uint8_t address[4]; ///< 32-bit Fingerprint sensor address
cdupaty 0:35cd316e4b41 127 uint8_t type; ///< Type of packet
cdupaty 0:35cd316e4b41 128 uint16_t length; ///< Length of packet
cdupaty 0:35cd316e4b41 129 uint8_t data[64]; ///< The raw buffer for packet payload
cdupaty 0:35cd316e4b41 130 };
cdupaty 0:35cd316e4b41 131
cdupaty 0:35cd316e4b41 132 ///! Helper class to communicate with and keep state for fingerprint sensors
cdupaty 0:35cd316e4b41 133 class Fingerprint {
cdupaty 0:35cd316e4b41 134 public:
cdupaty 0:35cd316e4b41 135
cdupaty 2:6f273d942c43 136 Fingerprint(PinName serialTX, PinName serialRX, uint32_t password );
cdupaty 0:35cd316e4b41 137
cdupaty 0:35cd316e4b41 138 void begin(uint32_t baud);
cdupaty 0:35cd316e4b41 139
cdupaty 0:35cd316e4b41 140 bool verifyPassword(void);
cdupaty 0:35cd316e4b41 141 uint8_t getParameters(void);
cdupaty 0:35cd316e4b41 142
cdupaty 0:35cd316e4b41 143 uint8_t getImage(void);
cdupaty 0:35cd316e4b41 144 uint8_t image2Tz(uint8_t slot = 1);
cdupaty 0:35cd316e4b41 145 uint8_t createModel(void);
cdupaty 0:35cd316e4b41 146
cdupaty 0:35cd316e4b41 147 uint8_t emptyDatabase(void);
cdupaty 0:35cd316e4b41 148 uint8_t storeModel(uint16_t id);
cdupaty 0:35cd316e4b41 149 uint8_t loadModel(uint16_t id);
cdupaty 0:35cd316e4b41 150 uint8_t getModel(void);
cdupaty 0:35cd316e4b41 151 uint8_t deleteModel(uint16_t id);
cdupaty 0:35cd316e4b41 152 uint8_t fingerFastSearch(void);
cdupaty 0:35cd316e4b41 153 uint8_t fingerSearch(uint8_t slot = 1);
cdupaty 0:35cd316e4b41 154 uint8_t getTemplateCount(void);
cdupaty 0:35cd316e4b41 155 uint8_t setPassword(uint32_t password);
cdupaty 0:35cd316e4b41 156 uint8_t LEDcontrol(bool on);
cdupaty 0:35cd316e4b41 157 uint8_t LEDcontrol(uint8_t control, uint8_t speed, uint8_t coloridx, uint8_t count = 0);
cdupaty 0:35cd316e4b41 158
cdupaty 0:35cd316e4b41 159 void writeStructuredPacket(const Fingerprint_Packet &p);
cdupaty 0:35cd316e4b41 160 uint8_t getStructuredPacket(Fingerprint_Packet *p,
cdupaty 0:35cd316e4b41 161 uint16_t timeout = DEFAULTTIMEOUT);
cdupaty 0:35cd316e4b41 162
cdupaty 0:35cd316e4b41 163 /// The matching location that is set by fingerFastSearch()
cdupaty 0:35cd316e4b41 164 uint16_t fingerID;
cdupaty 0:35cd316e4b41 165 /// The confidence of the fingerFastSearch() match, higher numbers are more
cdupaty 0:35cd316e4b41 166 /// confidents
cdupaty 0:35cd316e4b41 167 uint16_t confidence;
cdupaty 0:35cd316e4b41 168 /// The number of stored templates in the sensor, set by getTemplateCount()
cdupaty 0:35cd316e4b41 169 uint16_t templateCount;
cdupaty 0:35cd316e4b41 170
cdupaty 0:35cd316e4b41 171 uint16_t status_reg; ///< The status register (set by getParameters)
cdupaty 0:35cd316e4b41 172 uint16_t system_id; ///< The system identifier (set by getParameters)
cdupaty 0:35cd316e4b41 173 uint16_t capacity; ///< The fingerprint capacity (set by getParameters)
cdupaty 0:35cd316e4b41 174 uint16_t security_level; ///< The security level (set by getParameters)
cdupaty 0:35cd316e4b41 175 uint32_t device_addr; ///< The device address (set by getParameters)
cdupaty 0:35cd316e4b41 176 uint16_t packet_len; ///< The max packet length (set by getParameters)
cdupaty 0:35cd316e4b41 177 uint16_t baud_rate; ///< The UART baud rate (set by getParameters)
cdupaty 0:35cd316e4b41 178
cdupaty 0:35cd316e4b41 179 private:
cdupaty 0:35cd316e4b41 180 uint8_t checkPassword(void);
cdupaty 0:35cd316e4b41 181 uint32_t thePassword;
cdupaty 0:35cd316e4b41 182 uint32_t theAddress;
cdupaty 0:35cd316e4b41 183 uint8_t recvPacket[20];
cdupaty 2:6f273d942c43 184 uint8_t *pe; // pointeur ecriture buffer reception UART
cdupaty 2:6f273d942c43 185 uint8_t *pl; // pointeur lecture buffer reception UART
cdupaty 2:6f273d942c43 186 uint8_t buffUART[50]; // tampon reception UART
cdupaty 2:6f273d942c43 187 void receiveUART(void); // recoit et stocke data dans buffUART
cdupaty 2:6f273d942c43 188 uint8_t readUARTbuff(void); // retourne data de buffUART
cdupaty 0:35cd316e4b41 189
cdupaty 0:35cd316e4b41 190 protected:
cdupaty 2:6f273d942c43 191 RawSerial R503Serial;
cdupaty 0:35cd316e4b41 192 };
cdupaty 0:35cd316e4b41 193
cdupaty 0:35cd316e4b41 194 #endif