#include #include "FingerPrint.h" #include "main.h" HardwareSerial Serial1(UART_ID_1); NtpClient ntpClient("at.pool.ntp.org", 3600); void IRAM_ATTR OnFingerISR() { detachInterrupt(FINGER_DETECT_PIN); // LOW = FINGER, HIGH = NO FINGER const bool finger = !digitalRead(FINGER_DETECT_PIN); // TODO: disable interrupt and start timer g_Main.OnFinger(finger); } void IRAM_ATTR OnLockISR() { detachInterrupt(SAFELOCK_DETECT_PIN); // LOW = UNLOCKED, HIGH = LOCKED const bool unlocked = !digitalRead(SAFELOCK_DETECT_PIN); g_Main.OnLock(unlocked); } void IRAM_ATTR OnDoorISR() { detachInterrupt(DOOR_DETECT_PIN); // LOW = OPEN, HIGH = CLOSED const bool opened = digitalRead(DOOR_DETECT_PIN); g_Main.OnDoor(opened); } void ready() { debugf("READY!"); gpio_pin_wakeup_enable(GPIO_ID_PIN(FINGER_DETECT_PIN), GPIO_PIN_INTR_LOLEVEL); gpio_pin_wakeup_enable(GPIO_ID_PIN(SAFELOCK_DETECT_PIN), GPIO_PIN_INTR_LOLEVEL); gpio_pin_wakeup_enable(GPIO_ID_PIN(DOOR_DETECT_PIN), GPIO_PIN_INTR_LOLEVEL); g_Main.Init(Serial); attachInterrupt(FINGER_DETECT_PIN, OnFingerISR, CHANGE); attachInterrupt(SAFELOCK_DETECT_PIN, OnLockISR, CHANGE); attachInterrupt(DOOR_DETECT_PIN, OnDoorISR, CHANGE); } void init() { // for fingerprint module Serial.systemDebugOutput(false); Serial.begin(115200, SERIAL_8N1, SERIAL_FULL); Serial.flush(); // TODO: Full flush? // for debug messages Serial1.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY); Serial1.systemDebugOutput(true); // p-channel FET to turn on fingerprint module pinMode(FINGER_ENABLE_PIN, OUTPUT_OPEN_DRAIN); digitalWrite(FINGER_ENABLE_PIN, 1); // communication with safe lock pinMode(SAFELOCK_DATA_PIN, OUTPUT_OPEN_DRAIN); digitalWrite(SAFELOCK_DATA_PIN, 1); pinMode(FINGER_DETECT_PIN, INPUT); pinMode(SAFELOCK_DETECT_PIN, INPUT); pinMode(DOOR_DETECT_PIN, INPUT_PULLUP); // mount spiffs spiffs_mount(); System.onReady(ready); }