Files
esp32-fingerprint-safe/app/main.h
2025-12-12 15:06:20 +01:00

89 lines
2.2 KiB
C++

#ifndef MAIN_H
#define MAIN_H
#define FINGER_DETECT_PIN 4
#define FINGER_ENABLE_PIN 5
#define SAFELOCK_DATA_PIN 12
#define SAFELOCK_DETECT_PIN 14
#define DOOR_DETECT_PIN 13
#include <ArduinoJson.h>
#include "Settings.h"
#include "FingerPrint.h"
#include "FingerLogic.h"
class CMain
{
public:
CMain();
void Init(HardwareSerial &serial);
void CheckSleep();
void EnterLightSleep();
void OnStationGotIP(IpAddress ip, IpAddress mask, IpAddress gateway);
void OnStationDisconnect(const String& ssid, MacAddress bssid, WifiDisconnectReason reason);
int MqttOnConnect(MqttClient& client, mqtt_message_t* message);
void MqttOnDisconnect(TcpClient& client, bool flag);
void OnFinger(bool finger);
void OnLock(bool unlocked);
void OnDoor(bool opened);
void FingerPower(bool enable);
void LockUnlock();
void EnrollMessage(const char *msg, bool error=false);
void OnFingerVerified(uint16_t fingerNum, uint8_t digest[SHA256_SIZE]);
void OnFingerEnrolled(uint16_t fingerNum, uint8_t digest[SHA256_SIZE]);
CSettings &Settings() { return m_Settings; }
CFingerPrint &FingerPrint() { return m_FingerPrint; }
CFingerLogic &FingerLogic() { return m_FingerLogic; }
private:
bool HttpAuthorized(HttpRequest &request, HttpResponse &response);
void HttpOnApi(HttpRequest &request, HttpResponse &response);
void HttpOnFile(HttpRequest &request, HttpResponse &response);
int HttpOnUpload(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response);
HttpStatus HandleApi(HttpMethod method, String endpoint, JsonDocument &req, JsonDocument &resp);
void StartMqttClient();
void MqttSendDescription();
void MqttSendMessage(const char *topic, const char *msg);
private:
void LockSendBytes(uint8_t *pBytes, uint8_t len);
void LockSendCode(uint8_t code[8]);
CSettings m_Settings;
CFingerPrint m_FingerPrint;
CFingerLogic m_FingerLogic;
FtpServer m_FTP;
HttpServer m_HttpServer;
MqttClient m_Mqtt;
Timer m_MqttTimer;
Timer m_LightSleepTimer;
String m_EnrollMessage;
String m_EnrollLabel;
CSettings::CFingerPrint m_EnrolledFinger;
bool m_Enrolling;
bool m_Enrolled;
bool m_StationConnected;
bool m_FingerPlaced;
bool m_LockUnlocked;
bool m_DoorOpened;
};
extern CMain g_Main;
extern HardwareSerial Serial1;
#endif