93 lines
2.3 KiB
C++

//#define DEBUG
#include <Arduino.h>
#include <Wire.h>
#include "Keyboard.h"
#include "Rfid.h"
#include "Interface.h"
#include <ESP8266WiFi.h>
#include "WebConsole.h"
#include "UserDb.h"
#include "Persistence.h"
// File persistence
Persistence persistence;
userdb::UserDb userdatabase("userdb.csv");
webconsole::WebConsole web;
// Rfid
Rfid rfid;
// i2C Bus
#define PIN_WIRE_SDA D3
#define PIN_WIRE_SCL D4
Keyboard keyboard(200);
Interface iface;
// Wifi control
IPAddress local_IP(192, 168, 4, 22);
IPAddress gateway(192, 168, 4, 9);
IPAddress subnet(255, 255, 255, 0);
// User DB
// Users users(persistence);
void setup()
{
Persistence::Configuration config = persistence.loadConfig();
Serial.begin(115200);
Serial.println("Starting System");
Serial.print("\t1. Network config ->");
Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
Serial.print("\t2 AP setup " + String(config.SSID)+ " -> ");
if (strlen(config.PASS) > 0)
Serial.println(WiFi.softAP(config.SSID, config.PASS) ? "Ready" : "Failed!");
else
Serial.println(WiFi.softAP(config.SSID) ? "Ready" : "Failed!");
delay(150);
#ifdef DEBUG
userdatabase.print_to_serial();
#endif
web.init(&userdatabase);
keyboard.begin(&Wire);
rfid.begin();
web.attachRfid(&rfid);
iface.begin(&keyboard);
}
void loop()
{
rfid.scan();
web.serve();
keyboard.scanAsync();
userdb::User login_user;
if(web.isInterceptingRfid()&&iface.getState()==0){
iface.showMessage("WebUI connected", "Awaiting RFID", 3000);
}
else if (iface.pinAvailable())
{
unsigned long delta = millis();
login_user = userdatabase.user_by_pin(iface.getPin());
Serial.println("Query duration: " + String(millis() - delta));
if (login_user.enabled == false)
{
iface.showMessage("Login failed!", "-> Pin incorrect", 3000);
return;
}
}
else if (rfid.available())
{
unsigned long delta = millis();
login_user = userdatabase.user_by_rfid(rfid.getID());
Serial.println("Query duration: " + String(millis() - delta));
if (login_user.enabled == false)
{
iface.showMessage("Login failed!", "-> Unkown Card", 3000);
return;
}
}
if (login_user.enabled == true)
{
iface.greetUser(login_user.first_name + " " + login_user.last_name);
Serial.println("Logon from User " + login_user.toString());
}
iface.render();
}