79 lines
1.9 KiB
C++
79 lines
1.9 KiB
C++
#include <SmingCore.h>
|
|
#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);
|
|
}
|