10#ifndef M5_UNIT_FINGER_UNIT_FPC1XXX_HPP
11#define M5_UNIT_FINGER_UNIT_FPC1XXX_HPP
13#include <M5UnitComponent.hpp>
25enum class ACK : uint8_t {
91 static constexpr uint16_t RESOLUTION_WIDTH{0};
92 static constexpr uint16_t RESOLUTION_HEIGHT{0};
93 static constexpr uint16_t MINIMUM_USER_ID{0};
94 static constexpr uint16_t MAXIMUM_USER_ID{0};
102 using Frame = std::array<uint8_t, 8>;
103 using VariableFrame = std::vector<uint8_t>;
108 virtual bool begin()
override;
157 return MINIMUM_USER_ID;
162 return MAXIMUM_USER_ID;
232 bool readUser(uint8_t& permission,
const uint16_t user_id);
253 bool findAvailableUserID(uint16_t& user_id,
const uint16_t low = 0,
const uint16_t high = 0);
277 bool registerFinger(
const uint16_t user_id,
const uint8_t permission,
const uint8_t step = 4);
306 inline virtual bool captureImage(std::vector<uint8_t>& img,
const bool raw =
false)
308 return capture_image(img, raw);
317 bool registerCharacteristic(
const uint16_t user_id,
const uint8_t permission,
const uint8_t characteristic[193]);
325 bool verifyCharacteristic(
bool& match,
const uint16_t user_id,
const uint8_t characteristic[193]);
363 inline bool is_valid_user_id(
const uint16_t user_id)
const
367 bool transceive_command(Frame& res,
const uint8_t cmd,
const uint8_t p1 = 0,
const uint8_t p2 = 0,
368 const uint8_t p3 = 0);
369 bool capture_image(std::vector<uint8_t>& img,
const bool full =
false);
387 static constexpr uint16_t RESOLUTION_WIDTH{160};
388 static constexpr uint16_t RESOLUTION_HEIGHT{160};
389 static constexpr uint16_t MINIMUM_USER_ID{1};
390 static constexpr uint16_t MAXIMUM_USER_ID{150};
398 virtual bool begin()
override;
402 return this->RESOLUTION_WIDTH;
406 return this->RESOLUTION_HEIGHT;
410 return MINIMUM_USER_ID;
414 return MAXIMUM_USER_ID;
422constexpr uint8_t CMD_REGISTER_FINGER_FIRST{0x01};
423constexpr uint8_t CMD_REGISTER_FINGER_STEP{0x02};
424constexpr uint8_t CMD_REGISTER_FINGER_LAST{0x03};
425constexpr uint8_t CMD_VERIFY_FINGER{0x0B};
426constexpr uint8_t CMD_IDENTIFY_FINGER{0x0C};
428constexpr uint8_t CMD_DELETE_USER{0x04};
429constexpr uint8_t CMD_DELETE_ALL_USERS{0x05};
430constexpr uint8_t CMD_READ_REGISTERED_USER_COUNT{0x09};
431constexpr uint8_t CMD_READ_USER_PERMISSION{0x0A};
432constexpr uint8_t CMD_READ_ALL_USER_DATA{0x2B};
433constexpr uint8_t CMD_FIND_UNREGISTERD_USER_ID{0x47};
435constexpr uint8_t CMD_BAUD_RATE{0x21};
436constexpr uint8_t CMD_READ_VERSION{0x26};
437constexpr uint8_t CMD_COMPARISON_LEVEL{0x28};
438constexpr uint8_t CMD_REGISTRATION_MODE{0x2D};
439constexpr uint8_t CMD_TIMEOUT{0x2E};
440constexpr uint8_t CMD_READ_SERIAL_NO{0x2A};
442constexpr uint8_t CMD_SLEEP{0x2C};
444constexpr uint8_t CMD_CAPTURE_IMAGE{0x24};
446constexpr uint8_t CMD_SCAN_CHARACTERISTIC{0x23};
447constexpr uint8_t CMD_READ_USER_CHARACTERISTIC{0x31};
448constexpr uint8_t CMD_REGISTER_CHARACTERISTIC{0x41};
449constexpr uint8_t CMD_VERIFY_CHARACTERISTIC{0x42};
450constexpr uint8_t CMD_IDENTIFY_CHARACTERISTIC{0x43};
451constexpr uint8_t CMD_COMPARE_CHARACTERISTIC{0x44};
457using Frame = UnitFPC1XXX::Frame;
459constexpr uint8_t MARKER{0xF5};
462uint8_t xorSum(
const uint8_t* data,
const uint16_t len);
464bool is_valid_sum(
const Frame response,
const bool check_marker =
true);
466bool is_valid_payload(
const uint8_t* data,
const uint16_t len);
For FPC1020A.
Definition unit_FPC1xxx.hpp:383
virtual uint16_t maximumUserID() const override
Get the maximum user ID.
Definition unit_FPC1xxx.hpp:412
virtual bool begin() override
Begin communication with the unit.
Definition unit_FPC1xxx.cpp:662
virtual uint16_t minimumUserID() const override
Get the minimum user ID.
Definition unit_FPC1xxx.hpp:408
virtual uint16_t resolutionWidth() const override
Gets the width of resolution.
Definition unit_FPC1xxx.hpp:400
virtual uint16_t resolutionHeight() const override
Gets the height of resolution.
Definition unit_FPC1xxx.hpp:404
Base class for FPC1xxx family.
Definition unit_FPC1xxx.hpp:86
bool readVersion(char str[9])
Read the version string.
Definition unit_FPC1xxx.cpp:610
bool readRegisteredUserCount(uint16_t &count)
Read the number of registered users.
Definition unit_FPC1xxx.cpp:244
bool identifyFinger(uint16_t &user_id, uint8_t &permission)
Identify finger (1:N)
Definition unit_FPC1xxx.cpp:435
bool deleteUser(const uint16_t user_id)
Delete user data.
Definition unit_FPC1xxx.cpp:358
bool verifyCharacteristic(bool &match, const uint16_t user_id, const uint8_t characteristic[193])
Verify specific user characteristic (1:1)
Definition unit_FPC1xxx.cpp:533
virtual uint16_t minimumUserID() const
Get the minimum user ID.
Definition unit_FPC1xxx.hpp:155
virtual uint16_t resolutionHeight() const
Gets the height of resolution.
Definition unit_FPC1xxx.hpp:140
bool compareCharacteristic(bool &match, const uint8_t characteristic[193])
Compare characteristic.
Definition unit_FPC1xxx.cpp:577
uint16_t imageWidth(const bool raw) const
Get the image width.
Definition unit_FPC1xxx.hpp:145
bool readUserCharacteristic(uint8_t characteristic[193], const uint16_t user_id)
Read the user characteristic data.
Definition unit_FPC1xxx.cpp:302
uint16_t imageHeight(const bool raw) const
Get the resolution height.
Definition unit_FPC1xxx.hpp:150
bool deleteAllUsers()
Delete all user data.
Definition unit_FPC1xxx.cpp:369
virtual bool captureImage(std::vector< uint8_t > &img, const bool raw=false)
Capture finger image.
Definition unit_FPC1xxx.hpp:306
virtual bool begin() override
Begin communication with the unit.
Definition unit_FPC1xxx.cpp:146
bool writeRegistrationMode(const fpc1xxx::Mode mode)
Write the registration mode.
Definition unit_FPC1xxx.cpp:186
bool findAvailableUserID(uint16_t &user_id, const uint16_t low=0, const uint16_t high=0)
Find the unregistered user id in specific range.
Definition unit_FPC1xxx.cpp:334
bool readSerialNumber(uint32_t &no)
Read the serial number (24 bits)
Definition unit_FPC1xxx.cpp:595
bool identifyCharacteristic(uint16_t &user_id, const uint8_t characteristic[193])
Identify characteristic (1:N)
Definition unit_FPC1xxx.cpp:559
bool writeBaudRate(const fpc1xxx::BaudRate baud)
Write the baud rate.
Definition unit_FPC1xxx.cpp:215
bool verifyFinger(bool &match, const uint16_t user_id)
Verify specific user finger (1:1)
Definition unit_FPC1xxx.cpp:418
bool sleep(void)
Go to deep sleep.
Definition unit_FPC1xxx.cpp:633
bool readUser(uint8_t &permission, const uint16_t user_id)
Read the user permission.
Definition unit_FPC1xxx.cpp:257
bool registerFinger(const uint16_t user_id, const uint8_t permission, const uint8_t step=4)
Register finger.
Definition unit_FPC1xxx.cpp:375
bool registerCharacteristic(const uint16_t user_id, const uint8_t permission, const uint8_t characteristic[193])
Register characteristic.
Definition unit_FPC1xxx.cpp:503
config_t config()
Gets the configuration.
Definition unit_FPC1xxx.hpp:121
virtual uint16_t maximumUserID() const
Get the maximum user ID.
Definition unit_FPC1xxx.hpp:160
bool writeComparisonLevel(const uint8_t lv)
Write the comparison level.
Definition unit_FPC1xxx.cpp:205
bool readTimeout(uint8_t &timeout)
Read the timeout.
Definition unit_FPC1xxx.cpp:226
void config(const config_t &cfg)
Set the configuration.
Definition unit_FPC1xxx.hpp:126
bool scanCharacteristic(uint8_t characteristic[193])
Scan characteristic.
Definition unit_FPC1xxx.cpp:450
bool readAllUser(std::vector< fpc1xxx::User > &v)
Get the all user data.
Definition unit_FPC1xxx.cpp:275
virtual uint16_t resolutionWidth() const
Gets the width of resolution.
Definition unit_FPC1xxx.hpp:135
bool writeTimeout(const uint8_t timeout)
Write the timeout.
Definition unit_FPC1xxx.cpp:238
bool readRegistrationMode(fpc1xxx::Mode &mode)
Read the registration mode.
Definition unit_FPC1xxx.cpp:174
bool readComparisonLevel(uint8_t &lv)
Read the comparison level.
Definition unit_FPC1xxx.cpp:193
Top level namespace of M5stack.
Settings for begin.
Definition unit_FPC1xxx.hpp:114
uint32_t timeout_ms
Serial I/O timeout (ms)
Definition unit_FPC1xxx.hpp:115
User data.
Definition unit_FPC1xxx.hpp:61
uint8_t permission
permission (Value can be 1, 2, or 3)
Definition unit_FPC1xxx.hpp:66
Mode
Registration mode.
Definition unit_FPC1xxx.hpp:52
@ ProhibitDuplicate
Characteristic duplication prohibited.
@ AllowDuplicate
Allow duplicate registrations.
ACK
ACK code.
Definition unit_FPC1xxx.hpp:25
BaudRate
Connection baud rate.
Definition unit_FPC1xxx.hpp:39
@ Baud19200
19200 baud (as default)