Fingerprint and demo library for ARM-STM32 made from the Arduino library for R503
Dependents: R503_fingerprint_HelloWorldV4
Fingerprint.h@0:35cd316e4b41, 2021-03-16 (annotated)
- 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?
User | Revision | Line number | New 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 |