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

Dependents:   R503_fingerprint_HelloWorldV4

Committer:
cdupaty
Date:
Tue Mar 16 16:31:41 2021 +0000
Revision:
0:35cd316e4b41
Child:
2:6f273d942c43
Version 0.1 with a lot of bugs

Who changed what in which revision?

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