6 namespace fingerprint_grow {
8 static const char *
const TAG =
"fingerprint_grow";
20 ESP_LOGV(TAG,
"No touch sensing");
28 ESP_LOGD(TAG,
"Finger removed");
53 ESP_LOGCONFIG(TAG,
"Setting up Grow Fingerprint Reader...");
67 ESP_LOGI(TAG,
"Starting enrollment in slot %d", finger_id);
90 ESP_LOGI(TAG,
"Finished enrollment");
95 ESP_LOGD(TAG,
"Scan and match");
97 ESP_LOGV(TAG,
"Scan and match");
104 ESP_LOGD(TAG,
"Fingerprint matched");
105 uint16_t finger_id = ((uint16_t) this->
data_[1] << 8) | this->
data_[2];
106 uint16_t confidence = ((uint16_t) this->
data_[3] << 8) | this->
data_[4];
117 ESP_LOGD(TAG,
"Fingerprint not matched to any saved slots");
126 ESP_LOGD(TAG,
"Getting image %d", buffer);
128 ESP_LOGV(TAG,
"Getting image %d", buffer);
136 ESP_LOGD(TAG,
"No finger");
138 ESP_LOGV(TAG,
"No finger");
140 return this->
data_[0];
142 ESP_LOGE(TAG,
"Imaging error");
144 return this->
data_[0];
147 ESP_LOGD(TAG,
"Processing image %d", buffer);
151 ESP_LOGI(TAG,
"Processed image %d", buffer);
154 ESP_LOGE(TAG,
"Image too messy");
158 ESP_LOGE(TAG,
"Could not find fingerprint features");
161 return this->
data_[0];
165 ESP_LOGI(TAG,
"Creating model");
171 ESP_LOGE(TAG,
"Scans do not match");
173 return this->
data_[0];
176 ESP_LOGI(TAG,
"Storing model");
180 ESP_LOGI(TAG,
"Stored model");
183 ESP_LOGE(TAG,
"Invalid slot");
186 ESP_LOGE(TAG,
"Error writing to flash");
189 return this->
data_[0];
193 ESP_LOGD(TAG,
"Checking password");
198 ESP_LOGD(TAG,
"Password verified");
201 ESP_LOGE(TAG,
"Wrong password");
208 ESP_LOGI(TAG,
"Setting new password: %" PRIu32, this->
new_password_);
212 ESP_LOGI(TAG,
"New password successfully set");
213 ESP_LOGI(TAG,
"Define the new password in your configuration and reflash now");
214 ESP_LOGW(TAG,
"!!!Forgetting the password will render your device unusable!!!");
221 ESP_LOGD(TAG,
"Getting parameters");
224 ESP_LOGD(TAG,
"Got parameters");
245 ESP_LOGD(TAG,
"Getting fingerprint count");
248 ESP_LOGD(TAG,
"Got fingerprint count");
255 ESP_LOGI(TAG,
"Deleting fingerprint in slot %d", finger_id);
256 this->
data_ = {
DELETE, (uint8_t) (finger_id >> 8), (uint8_t) (finger_id & 0xFF), 0x00, 0x01};
259 ESP_LOGI(TAG,
"Deleted fingerprint");
263 ESP_LOGE(TAG,
"Reader failed to delete fingerprint");
269 ESP_LOGI(TAG,
"Deleting all stored fingerprints");
273 ESP_LOGI(TAG,
"Deleted all fingerprints");
277 ESP_LOGE(TAG,
"Reader failed to clear fingerprint library");
283 ESP_LOGD(TAG,
"Setting LED");
291 ESP_LOGD(TAG,
"LED set");
297 ESP_LOGE(TAG,
"Try aura_led_control instead");
303 const uint32_t now =
millis();
306 delay(this->last_aura_led_duration_ - elapsed);
308 ESP_LOGD(TAG,
"Setting Aura LED");
312 ESP_LOGD(TAG,
"Aura LED set");
313 this->last_aura_led_control_ =
millis();
314 this->last_aura_led_duration_ = 10 * speed * count;
320 ESP_LOGE(TAG,
"Try led_control instead");
326 this->
write((uint8_t) (START_CODE >> 8));
327 this->
write((uint8_t) (START_CODE & 0xFF));
334 uint16_t wire_length = this->
data_.size() + 2;
335 this->
write((uint8_t) (wire_length >> 8));
336 this->
write((uint8_t) (wire_length & 0xFF));
338 uint16_t sum = ((wire_length) >> 8) + ((wire_length) &0xFF) +
COMMAND;
339 for (
auto data : this->
data_) {
344 this->
write((uint8_t) (sum >> 8));
345 this->
write((uint8_t) (sum & 0xFF));
350 uint16_t idx = 0,
length = 0;
352 for (uint16_t timer = 0; timer < 1000; timer++) {
360 if (byte != (uint8_t) (START_CODE >> 8))
364 if (byte != (uint8_t) (START_CODE & 0xFF)) {
373 if (byte != this->
address_[idx - 2]) {
385 length = (uint16_t) byte << 8;
391 this->data_.push_back(byte);
392 if ((idx - 8) ==
length) {
393 switch (this->data_[0]) {
410 ESP_LOGE(TAG,
"Reader failed to process request");
413 ESP_LOGE(TAG,
"Unknown response received from reader: %d", this->data_[0]);
416 return this->data_[0];
422 ESP_LOGE(TAG,
"No response received from reader");
428 ESP_LOGCONFIG(TAG,
"GROW_FINGERPRINT_READER:");
429 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_
Implementation of SPI Controller mode.
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