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>;
111 virtual bool begin()
override;
183 return MINIMUM_USER_ID;
191 return MAXIMUM_USER_ID;
261 bool readUser(uint8_t& permission,
const uint16_t user_id);
282 bool findAvailableUserID(uint16_t& user_id,
const uint16_t low = 0,
const uint16_t high = 0);
306 bool registerFinger(
const uint16_t user_id,
const uint8_t permission,
const uint8_t step = 4);
336 inline virtual bool captureImage(std::vector<uint8_t>& img,
const bool raw =
false)
338 return capture_image(img, raw);
347 bool registerCharacteristic(
const uint16_t user_id,
const uint8_t permission,
const uint8_t characteristic[193]);
355 bool verifyCharacteristic(
bool& match,
const uint16_t user_id,
const uint8_t characteristic[193]);
393 inline bool is_valid_user_id(
const uint16_t user_id)
const
397 bool transceive_command(Frame& res,
const uint8_t cmd,
const uint8_t p1 = 0,
const uint8_t p2 = 0,
398 const uint8_t p3 = 0);
399 bool capture_image(std::vector<uint8_t>& img,
const bool full =
false);
417 static constexpr uint16_t RESOLUTION_WIDTH{160};
418 static constexpr uint16_t RESOLUTION_HEIGHT{160};
419 static constexpr uint16_t MINIMUM_USER_ID{1};
420 static constexpr uint16_t MAXIMUM_USER_ID{150};
431 virtual bool begin()
override;
435 return this->RESOLUTION_WIDTH;
439 return this->RESOLUTION_HEIGHT;
443 return MINIMUM_USER_ID;
447 return MAXIMUM_USER_ID;
455constexpr uint8_t CMD_REGISTER_FINGER_FIRST{0x01};
456constexpr uint8_t CMD_REGISTER_FINGER_STEP{0x02};
457constexpr uint8_t CMD_REGISTER_FINGER_LAST{0x03};
458constexpr uint8_t CMD_VERIFY_FINGER{0x0B};
459constexpr uint8_t CMD_IDENTIFY_FINGER{0x0C};
461constexpr uint8_t CMD_DELETE_USER{0x04};
462constexpr uint8_t CMD_DELETE_ALL_USERS{0x05};
463constexpr uint8_t CMD_READ_REGISTERED_USER_COUNT{0x09};
464constexpr uint8_t CMD_READ_USER_PERMISSION{0x0A};
465constexpr uint8_t CMD_READ_ALL_USER_DATA{0x2B};
466constexpr uint8_t CMD_FIND_UNREGISTERED_USER_ID{0x47};
468constexpr uint8_t CMD_BAUD_RATE{0x21};
469constexpr uint8_t CMD_READ_VERSION{0x26};
470constexpr uint8_t CMD_COMPARISON_LEVEL{0x28};
471constexpr uint8_t CMD_REGISTRATION_MODE{0x2D};
472constexpr uint8_t CMD_TIMEOUT{0x2E};
473constexpr uint8_t CMD_READ_SERIAL_NO{0x2A};
475constexpr uint8_t CMD_SLEEP{0x2C};
477constexpr uint8_t CMD_CAPTURE_IMAGE{0x24};
479constexpr uint8_t CMD_SCAN_CHARACTERISTIC{0x23};
480constexpr uint8_t CMD_READ_USER_CHARACTERISTIC{0x31};
481constexpr uint8_t CMD_REGISTER_CHARACTERISTIC{0x41};
482constexpr uint8_t CMD_VERIFY_CHARACTERISTIC{0x42};
483constexpr uint8_t CMD_IDENTIFY_CHARACTERISTIC{0x43};
484constexpr uint8_t CMD_COMPARE_CHARACTERISTIC{0x44};
491using Frame = UnitFPC1XXX::Frame;
493constexpr uint8_t MARKER{0xF5};
496uint8_t xorSum(
const uint8_t* data,
const uint16_t len);
498bool is_valid_sum(
const Frame& response,
const bool check_marker =
true);
500bool is_valid_payload(
const uint8_t* data,
const uint16_t len);
For FPC1020A.
Definition unit_FPC1xxx.hpp:413
virtual uint16_t maximumUserID() const override
Get the maximum user ID.
Definition unit_FPC1xxx.hpp:445
virtual bool begin() override
Begin communication with the unit.
Definition unit_FPC1xxx.cpp:707
virtual uint16_t minimumUserID() const override
Get the minimum user ID.
Definition unit_FPC1xxx.hpp:441
virtual uint16_t resolutionWidth() const override
Gets the width of resolution.
Definition unit_FPC1xxx.hpp:433
virtual uint16_t resolutionHeight() const override
Gets the height of resolution.
Definition unit_FPC1xxx.hpp:437
Base class for FPC1xxx family.
Definition unit_FPC1xxx.hpp:86
bool readVersion(char str[9])
Read the version string.
Definition unit_FPC1xxx.cpp:658
bool readRegisteredUserCount(uint16_t &count)
Read the number of registered users.
Definition unit_FPC1xxx.cpp:266
bool identifyFinger(uint16_t &user_id, uint8_t &permission)
Identify finger (1:N)
Definition unit_FPC1xxx.cpp:465
bool deleteUser(const uint16_t user_id)
Delete user data.
Definition unit_FPC1xxx.cpp:388
bool verifyCharacteristic(bool &match, const uint16_t user_id, const uint8_t characteristic[193])
Verify specific user characteristic (1:1)
Definition unit_FPC1xxx.cpp:567
virtual uint16_t minimumUserID() const
Get the minimum user ID.
Definition unit_FPC1xxx.hpp:181
virtual uint16_t resolutionHeight() const
Gets the height of resolution.
Definition unit_FPC1xxx.hpp:155
bool compareCharacteristic(bool &match, const uint8_t characteristic[193])
Compare characteristic.
Definition unit_FPC1xxx.cpp:620
uint16_t imageWidth(const bool raw) const
Get the image width.
Definition unit_FPC1xxx.hpp:164
bool readUserCharacteristic(uint8_t characteristic[193], const uint16_t user_id)
Read the user characteristic data.
Definition unit_FPC1xxx.cpp:328
config_t config() const
Gets the configuration.
Definition unit_FPC1xxx.hpp:127
uint16_t imageHeight(const bool raw) const
Get the image height.
Definition unit_FPC1xxx.hpp:173
bool deleteAllUsers()
Delete all user data.
Definition unit_FPC1xxx.cpp:399
virtual bool captureImage(std::vector< uint8_t > &img, const bool raw=false)
Capture finger image.
Definition unit_FPC1xxx.hpp:336
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:208
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:364
bool readSerialNumber(uint32_t &no)
Read the serial number (24 bits)
Definition unit_FPC1xxx.cpp:643
bool identifyCharacteristic(uint16_t &user_id, const uint8_t characteristic[193])
Identify characteristic (1:N)
Definition unit_FPC1xxx.cpp:597
bool writeBaudRate(const fpc1xxx::BaudRate baud)
Write the baud rate.
Definition unit_FPC1xxx.cpp:237
bool verifyFinger(bool &match, const uint16_t user_id)
Verify specific user finger (1:1)
Definition unit_FPC1xxx.cpp:448
bool sleep(void)
Go to deep sleep.
Definition unit_FPC1xxx.cpp:682
bool readUser(uint8_t &permission, const uint16_t user_id)
Read the user permission.
Definition unit_FPC1xxx.cpp:279
bool registerFinger(const uint16_t user_id, const uint8_t permission, const uint8_t step=4)
Register finger.
Definition unit_FPC1xxx.cpp:405
bool registerCharacteristic(const uint16_t user_id, const uint8_t permission, const uint8_t characteristic[193])
Register characteristic.
Definition unit_FPC1xxx.cpp:533
virtual uint16_t maximumUserID() const
Get the maximum user ID.
Definition unit_FPC1xxx.hpp:189
bool writeComparisonLevel(const uint8_t lv)
Write the comparison level.
Definition unit_FPC1xxx.cpp:227
bool readTimeout(uint8_t &timeout)
Read the timeout.
Definition unit_FPC1xxx.cpp:248
void config(const config_t &cfg)
Set the configuration.
Definition unit_FPC1xxx.hpp:135
bool scanCharacteristic(uint8_t characteristic[193])
Scan characteristic.
Definition unit_FPC1xxx.cpp:480
bool readAllUser(std::vector< fpc1xxx::User > &v)
Get the all user data.
Definition unit_FPC1xxx.cpp:297
virtual uint16_t resolutionWidth() const
Gets the width of resolution.
Definition unit_FPC1xxx.hpp:147
bool writeTimeout(const uint8_t timeout)
Write the timeout.
Definition unit_FPC1xxx.cpp:260
bool readRegistrationMode(fpc1xxx::Mode &mode)
Read the registration mode.
Definition unit_FPC1xxx.cpp:191
bool readComparisonLevel(uint8_t &lv)
Read the comparison level.
Definition unit_FPC1xxx.cpp:215
Top level namespace of M5Stack.
Settings for begin.
Definition unit_FPC1xxx.hpp:117
uint32_t timeout_ms
Serial I/O timeout (ms)
Definition unit_FPC1xxx.hpp:118
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)