5 namespace fingerprint_grow {
7 static const char *
const TAG =
"fingerprint_grow";
19 ESP_LOGV(TAG,
"No touch sensing");
27 ESP_LOGD(TAG,
"Finger removed");
52 ESP_LOGCONFIG(TAG,
"Setting up Grow Fingerprint Reader...");
66 ESP_LOGI(TAG,
"Starting enrollment in slot %d", finger_id);
87 ESP_LOGI(TAG,
"Finished enrollment");
92 ESP_LOGD(TAG,
"Scan and match");
94 ESP_LOGV(TAG,
"Scan and match");
101 ESP_LOGD(TAG,
"Fingerprint matched");
102 uint16_t finger_id = ((uint16_t) this->
data_[1] << 8) | this->
data_[2];
103 uint16_t confidence = ((uint16_t) this->
data_[3] << 8) | this->
data_[4];
114 ESP_LOGD(TAG,
"Fingerprint not matched to any saved slots");
123 ESP_LOGD(TAG,
"Getting image %d", buffer);
125 ESP_LOGV(TAG,
"Getting image %d", buffer);
133 ESP_LOGD(TAG,
"No finger");
135 ESP_LOGV(TAG,
"No finger");
137 return this->
data_[0];
139 ESP_LOGE(TAG,
"Imaging error");
141 return this->
data_[0];
144 ESP_LOGD(TAG,
"Processing image %d", buffer);
148 ESP_LOGI(TAG,
"Processed image %d", buffer);
151 ESP_LOGE(TAG,
"Image too messy");
155 ESP_LOGE(TAG,
"Could not find fingerprint features");
158 return this->
data_[0];
162 ESP_LOGI(TAG,
"Creating model");
168 ESP_LOGE(TAG,
"Scans do not match");
170 return this->
data_[0];
173 ESP_LOGI(TAG,
"Storing model");
177 ESP_LOGI(TAG,
"Stored model");
180 ESP_LOGE(TAG,
"Invalid slot");
183 ESP_LOGE(TAG,
"Error writing to flash");
186 return this->
data_[0];
190 ESP_LOGD(TAG,
"Checking password");
195 ESP_LOGD(TAG,
"Password verified");
198 ESP_LOGE(TAG,
"Wrong password");
205 ESP_LOGI(TAG,
"Setting new password: %d", this->
new_password_);
209 ESP_LOGI(TAG,
"New password successfully set");
210 ESP_LOGI(TAG,
"Define the new password in your configuration and reflash now");
211 ESP_LOGW(TAG,
"!!!Forgetting the password will render your device unusable!!!");
218 ESP_LOGD(TAG,
"Getting parameters");
221 ESP_LOGD(TAG,
"Got parameters");
242 ESP_LOGD(TAG,
"Getting fingerprint count");
245 ESP_LOGD(TAG,
"Got fingerprint count");
252 ESP_LOGI(TAG,
"Deleting fingerprint in slot %d", finger_id);
253 this->
data_ = {
DELETE, (uint8_t)(finger_id >> 8), (uint8_t)(finger_id & 0xFF), 0x00, 0x01};
256 ESP_LOGI(TAG,
"Deleted fingerprint");
260 ESP_LOGE(TAG,
"Reader failed to delete fingerprint");
266 ESP_LOGI(TAG,
"Deleting all stored fingerprints");
270 ESP_LOGI(TAG,
"Deleted all fingerprints");
274 ESP_LOGE(TAG,
"Reader failed to clear fingerprint library");
280 ESP_LOGD(TAG,
"Setting LED");
288 ESP_LOGD(TAG,
"LED set");
294 ESP_LOGE(TAG,
"Try aura_led_control instead");
300 const uint32_t now =
millis();
303 delay(this->last_aura_led_duration_ - elapsed);
305 ESP_LOGD(TAG,
"Setting Aura LED");
309 ESP_LOGD(TAG,
"Aura LED set");
310 this->last_aura_led_control_ =
millis();
311 this->last_aura_led_duration_ = 10 * speed * count;
317 ESP_LOGE(TAG,
"Try led_control instead");
323 this->
write((uint8_t)(START_CODE >> 8));
324 this->
write((uint8_t)(START_CODE & 0xFF));
331 uint16_t wire_length = this->
data_.size() + 2;
332 this->
write((uint8_t)(wire_length >> 8));
333 this->
write((uint8_t)(wire_length & 0xFF));
335 uint16_t sum = ((wire_length) >> 8) + ((wire_length) &0xFF) +
COMMAND;
336 for (
auto data : this->
data_) {
341 this->
write((uint8_t)(sum >> 8));
342 this->
write((uint8_t)(sum & 0xFF));
347 uint16_t idx = 0, length = 0;
349 for (uint16_t timer = 0; timer < 1000; timer++) {
357 if (byte != (uint8_t)(START_CODE >> 8))
361 if (byte != (uint8_t)(START_CODE & 0xFF)) {
370 if (byte != this->
address_[idx - 2]) {
382 length = (uint16_t) byte << 8;
388 this->data_.push_back(byte);
389 if ((idx - 8) == length) {
390 switch (this->data_[0]) {
407 ESP_LOGE(TAG,
"Reader failed to process request");
410 ESP_LOGE(TAG,
"Unknown response received from reader: %d", this->data_[0]);
413 return this->data_[0];
419 ESP_LOGE(TAG,
"No response received from reader");
425 ESP_LOGCONFIG(TAG,
"GROW_FINGERPRINT_READER:");
426 LOG_UPDATE_INTERVAL(
this);
CallbackManager< void(uint16_t, uint16_t)> finger_scan_matched_callback_
void finish_enrollment(uint8_t result)
CallbackManager< void(uint8_t, uint16_t)> enrollment_scan_callback_
uint16_t last_aura_led_duration_
std::vector< uint8_t > data_
void delete_all_fingerprints()
uint8_t scan_image_(uint8_t buffer)
uint32_t IRAM_ATTR HOT millis()
uint8_t save_fingerprint_()
void get_fingerprint_count_()
void delete_fingerprint(uint16_t finger_id)
sensor::Sensor * fingerprint_count_sensor_
sensor::Sensor * status_sensor_
void publish_state(float state)
Publish a new state to the front-end.
sensor::Sensor * last_finger_id_sensor_
sensor::Sensor * security_level_sensor_
uint8_t enrollment_image_
void publish_state(bool state)
Publish a new state to the front-end.
void enroll_fingerprint(uint16_t finger_id, uint8_t num_buffers)
CallbackManager< void(uint16_t)> enrollment_failed_callback_
sensor::Sensor * last_confidence_sensor_
CallbackManager< void()> finger_scan_unmatched_callback_
virtual bool digital_read()=0
binary_sensor::BinarySensor * enrolling_binary_sensor_
void led_control(bool state)
sensor::Sensor * capacity_sensor_
uint8_t enrollment_buffers_
virtual void mark_failed()
Mark this component as failed.
CallbackManager< void(uint16_t)> enrollment_done_callback_
uint16_t enrollment_slot_
void aura_led_control(uint8_t state, uint8_t speed, uint8_t color, uint8_t count)
size_t write(uint8_t data)
uint32_t last_aura_led_control_
void IRAM_ATTR HOT delay(uint32_t ms)
void dump_config() override