93 lines
2.3 KiB
C++
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();
|
|
} |