AdafruitFingerprint library from v2.0.4 to v2.1.0

AdafruitFingerprint library from v2.0.4 to v2.1.0 (#18163)
This commit is contained in:
Theo Arends 2023-05-22 11:48:03 +02:00
parent 7c92a2186b
commit 80afc8793f
26 changed files with 111244 additions and 47 deletions

View File

@ -15,6 +15,7 @@ All notable changes to this project will be documented in this file.
### Changed
- InfluxDb resolves DNS name before request (#18015)
- Shutter sliders in WEBGUI automatically appear and disappear during configuration and update during movement (#18701)
- AdafruitFingerprint library from v2.0.4 to v2.1.0
### Fixed
- ESP32 InfluxDb initial connection delays using HTTPClient (#18015)

View File

@ -133,6 +133,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- Change command ``FileUpload`` index binary data detection from >199 to >299
### Changed
- AdafruitFingerprint library from v2.0.4 to v2.1.0
- IRremoteESP8266 library from v2.8.4 to v2.8.5
- ESP32 Framework (Core) from v2.0.7 to v2.0.9
- InfluxDb resolves DNS name before request [#18015](https://github.com/arendst/Tasmota/issues/18015)

View File

@ -5,6 +5,10 @@ on: [pull_request, push, repository_dispatch]
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
arduino-platform: ["uno", "leonardo", "mega2560", "zero", "esp8266", "esp32", "metro_m4", "trinket_m0"]
steps:
- uses: actions/setup-python@v1
@ -20,7 +24,7 @@ jobs:
run: bash ci/actions_install.sh
- name: test platforms
run: python3 ci/build_platform.py main_platforms
run: python3 ci/build_platform.py ${{ matrix.arduino-platform }}
- name: clang
run: python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r .

View File

@ -64,6 +64,7 @@
/**************************************************************************/
//Adafruit_Fingerprint::Adafruit_Fingerprint(SoftwareSerial *ss,
Adafruit_Fingerprint::Adafruit_Fingerprint(TasmotaSerial *ss,
uint32_t password) {
thePassword = password;
theAddress = 0xFFFFFFFF;
@ -413,10 +414,64 @@ uint8_t Adafruit_Fingerprint::getTemplateCount(void) {
*/
/**************************************************************************/
uint8_t Adafruit_Fingerprint::setPassword(uint32_t password) {
SEND_CMD_PACKET(FINGERPRINT_SETPASSWORD, (uint8_t)(password >> 24), (uint8_t)(password >> 16),
(uint8_t)(password >> 8), (uint8_t)password);
SEND_CMD_PACKET(FINGERPRINT_SETPASSWORD, (uint8_t)(password >> 24),
(uint8_t)(password >> 16), (uint8_t)(password >> 8),
(uint8_t)(password & 0xFF));
}
/**************************************************************************/
/*!
@brief Writing module registers
@param regAdd 8-bit address of register
@param value 8-bit value will write to register
@returns <code>FINGERPRINT_OK</code> on success
@returns <code>FINGERPRINT_PACKETRECIEVEERR</code> on communication error
@returns <code>FINGERPRINT_ADDRESS_ERROR</code> on register address error
*/
/**************************************************************************/
uint8_t Adafruit_Fingerprint::writeRegister(uint8_t regAdd, uint8_t value) {
SEND_CMD_PACKET(FINGERPRINT_WRITE_REG, regAdd, value);
}
/**************************************************************************/
/*!
@brief Change UART baudrate
@param baudrate 8-bit Uart baudrate
@returns <code>FINGERPRINT_OK</code> on success
@returns <code>FINGERPRINT_PACKETRECIEVEERR</code> on communication error
*/
/**************************************************************************/
uint8_t Adafruit_Fingerprint::setBaudRate(uint8_t baudrate) {
return (writeRegister(FINGERPRINT_BAUD_REG_ADDR, baud_rate));
}
/**************************************************************************/
/*!
@brief Change security level
@param level 8-bit security level
@returns <code>FINGERPRINT_OK</code> on success
@returns <code>FINGERPRINT_PACKETRECIEVEERR</code> on communication error
*/
/**************************************************************************/
uint8_t Adafruit_Fingerprint::setSecurityLevel(uint8_t level) {
return (writeRegister(FINGERPRINT_SECURITY_REG_ADDR, level));
}
/**************************************************************************/
/*!
@brief Change packet size
@param size 8-bit packet size
@returns <code>FINGERPRINT_OK</code> on success
@returns <code>FINGERPRINT_PACKETRECIEVEERR</code> on communication error
*/
/**************************************************************************/
uint8_t Adafruit_Fingerprint::setPacketSize(uint8_t size) {
return (writeRegister(FINGERPRINT_PACKET_REG_ADDR, size));
}
/**************************************************************************/
/*!
@brief Helper function to process a packet and send it over UART to the
@ -559,6 +614,9 @@ Adafruit_Fingerprint::getStructuredPacket(Adafruit_Fingerprint_Packet *packet,
break;
}
idx++;
if ((idx + 9) >= sizeof(packet->data)) {
return FINGERPRINT_BADPACKET;
}
}
// Shouldn't get here so...
return FINGERPRINT_BADPACKET;

View File

@ -87,7 +87,40 @@
#define FINGERPRINT_LED_GRADUAL_OFF 0x06 //!< Gradually off
#define FINGERPRINT_LED_RED 0x01 //!< Red LED
#define FINGERPRINT_LED_BLUE 0x02 //!< Blue LED
#define FINGERPRINT_LED_PURPLE 0x03 //!< Purple LED
#define FINGERPRINT_LED_PURPLE 0x03 //!< Purple LEDpassword
#define FINGERPRINT_REG_ADDR_ERROR 0x1A //!< shows register address error
#define FINGERPRINT_WRITE_REG 0x0E //!< Write system register instruction
#define FINGERPRINT_BAUD_REG_ADDR 0x4 //!< BAUDRATE register address
#define FINGERPRINT_BAUDRATE_9600 0x1 //!< UART baud 9600
#define FINGERPRINT_BAUDRATE_19200 0x2 //!< UART baud 19200
#define FINGERPRINT_BAUDRATE_28800 0x3 //!< UART baud 28800
#define FINGERPRINT_BAUDRATE_38400 0x4 //!< UART baud 38400
#define FINGERPRINT_BAUDRATE_48000 0x5 //!< UART baud 48000
#define FINGERPRINT_BAUDRATE_57600 0x6 //!< UART baud 57600
#define FINGERPRINT_BAUDRATE_67200 0x7 //!< UART baud 67200
#define FINGERPRINT_BAUDRATE_76800 0x8 //!< UART baud 76800
#define FINGERPRINT_BAUDRATE_86400 0x9 //!< UART baud 86400
#define FINGERPRINT_BAUDRATE_96000 0xA //!< UART baud 96000
#define FINGERPRINT_BAUDRATE_105600 0xB //!< UART baud 105600
#define FINGERPRINT_BAUDRATE_115200 0xC //!< UART baud 115200
#define FINGERPRINT_SECURITY_REG_ADDR 0x5 //!< Security level register address
// The safety level is 1 The highest rate of false recognition , The rejection
// rate is the lowest . The safety level is 5 The lowest tate of false
// recognition, The rejection rate is the highest .
#define FINGERPRINT_SECURITY_LEVEL_1 0X1 //!< Security level 1
#define FINGERPRINT_SECURITY_LEVEL_2 0X2 //!< Security level 2
#define FINGERPRINT_SECURITY_LEVEL_3 0X3 //!< Security level 3
#define FINGERPRINT_SECURITY_LEVEL_4 0X4 //!< Security level 4
#define FINGERPRINT_SECURITY_LEVEL_5 0X5 //!< Security level 5
#define FINGERPRINT_PACKET_REG_ADDR 0x6 //!< Packet size register address
#define FINGERPRINT_PACKET_SIZE_32 0X0 //!< Packet size is 32 Byte
#define FINGERPRINT_PACKET_SIZE_64 0X1 //!< Packet size is 64 Byte
#define FINGERPRINT_PACKET_SIZE_128 0X2 //!< Packet size is 128 Byte
#define FINGERPRINT_PACKET_SIZE_256 0X3 //!< Packet size is 256 Byte
//#define FINGERPRINT_DEBUG
@ -158,6 +191,10 @@ public:
uint8_t LEDcontrol(uint8_t control, uint8_t speed, uint8_t coloridx,
uint8_t count = 0);
uint8_t setBaudRate(uint8_t baudrate);
uint8_t setSecurityLevel(uint8_t level);
uint8_t setPacketSize(uint8_t size);
void writeStructuredPacket(const Adafruit_Fingerprint_Packet &p);
uint8_t getStructuredPacket(Adafruit_Fingerprint_Packet *p,
uint16_t timeout = DEFAULTTIMEOUT);
@ -181,6 +218,7 @@ public:
private:
uint8_t checkPassword(void);
uint8_t writeRegister(uint8_t regAdd, uint8_t value);
uint32_t thePassword;
uint32_t theAddress;
uint8_t recvPacket[20];

View File

@ -86,15 +86,13 @@ uint8_t deleteFingerprint(uint8_t id) {
Serial.println("Deleted!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Could not delete in that location");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error writing to flash");
return p;
} else {
Serial.print("Unknown error: 0x"); Serial.println(p, HEX);
return p;
}
return p;
}

View File

@ -33,7 +33,7 @@ int getFingerprintIDez();
void setup()
{
while(!Serial);
while (!Serial);
Serial.begin(9600);
Serial.println("Fingerprint template extractor");
@ -102,16 +102,13 @@ uint8_t downloadFingerprintTemplate(uint16_t id)
// filtering only the data packets
int uindx = 9, index = 0;
while (index < 534) {
while (index < uindx) ++index;
uindx += 256;
while (index < uindx) {
fingerTemplate[index++] = bytesReceived[index];
}
uindx += 2;
while (index < uindx) ++index;
uindx = index + 9;
}
memcpy(fingerTemplate + index, bytesReceived + uindx, 256); // first 256 bytes
uindx += 256; // skip data
uindx += 2; // skip checksum
uindx += 9; // skip next header
index += 256; // advance pointer
memcpy(fingerTemplate + index, bytesReceived + uindx, 256); // second 256 bytes
for (int i = 0; i < 512; ++i) {
//Serial.print("0x");
printHex(fingerTemplate[i], 2);
@ -119,6 +116,8 @@ uint8_t downloadFingerprintTemplate(uint16_t id)
}
Serial.println("\ndone.");
return p;
/*
uint8_t templateBuffer[256];
memset(templateBuffer, 0xff, 256); //zero out template buffer
@ -163,4 +162,3 @@ void printHex(int num, int precision) {
void loop()
{}

View File

@ -1,5 +1,5 @@
name=Adafruit Fingerprint Sensor Library
version=2.0.4
version=2.1.0
author=Adafruit
maintainer=Adafruit <info@adafruit.com>
sentence=Arduino library for interfacing to the fingerprint sensor in the Adafruit shop

View File

@ -32,6 +32,10 @@
//#define USE_AS608_MESSAGES
#ifndef AS608_DUPLICATE
#define AS608_DUPLICATE 4 // Number of 0.25Sec to disable detection
#endif
#define D_JSON_FPRINT "FPrint"
#define D_PRFX_FP "Fp"
@ -62,9 +66,12 @@ Adafruit_Fingerprint *As608Finger;
TasmotaSerial *As608Serial;
struct AS608 {
uint16_t finger_id;
uint16_t confidence;
bool selected = false;
uint8_t enroll_step = 0;
uint8_t model_number = 0;
uint8_t duplicate;
} As608;
char* As608Message(char* response, uint32_t index) {
@ -131,6 +138,13 @@ void As608Loop(void) {
uint32_t p = 0;
if (!As608.enroll_step) {
if (As608.duplicate) {
As608.duplicate--;
}
if (!As608.duplicate) {
As608Finger->LEDcontrol(FINGERPRINT_LED_OFF, 0, FINGERPRINT_LED_PURPLE);
}
// Search for Finger
// As608Finger->LEDcontrol(FINGERPRINT_LED_OFF, 0, FINGERPRINT_LED_RED);
@ -152,7 +166,15 @@ void As608Loop(void) {
}
// Found a match
Response_P(PSTR("{\"" D_JSON_FPRINT "\":{\"" D_JSON_ID "\":%d,\"" D_JSON_CONFIDENCE "\":%d}}"), As608Finger->fingerID, As608Finger->confidence);
if (As608.duplicate && (As608.finger_id == As608Finger->fingerID)) {
return; // Skip duplicate during AS608_DUPLICATE * 0.25 second
}
As608.duplicate = AS608_DUPLICATE; // AS608_DUPLICATE * 250mS
As608Finger->LEDcontrol(FINGERPRINT_LED_ON, 0, FINGERPRINT_LED_PURPLE);
As608.finger_id = As608Finger->fingerID;
As608.confidence = As608Finger->confidence;
Response_P(PSTR("{\"" D_JSON_FPRINT "\":{\"" D_JSON_ID "\":%d,\"" D_JSON_CONFIDENCE "\":%d}}"), As608.finger_id, As608.confidence);
MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_STAT, PSTR(D_JSON_FPRINT));
return;
} else {
@ -305,6 +327,11 @@ bool Xsns79(uint32_t function) {
case FUNC_EVERY_250_MSECOND:
As608Loop();
break;
#ifdef USE_WEBSERVER
case FUNC_WEB_SENSOR:
WSContentSend_PD(PSTR("{s}AS608{m}%d-%d{e}"), As608.finger_id, As608.confidence);
break;
#endif // USE_WEBSERVER
case FUNC_COMMAND:
result = DecodeCommand(kAs608Commands, As608Commands);
break;