before using User lib

This commit is contained in:
Jean Jacques Avril 2021-10-01 13:16:18 +02:00
parent 06a1750719
commit a46725cf03
6 changed files with 109 additions and 19 deletions

33
.vscode/settings.json vendored
View File

@ -49,7 +49,38 @@
"stdexcept": "cpp", "stdexcept": "cpp",
"streambuf": "cpp", "streambuf": "cpp",
"cinttypes": "cpp", "cinttypes": "cpp",
"typeinfo": "cpp" "typeinfo": "cpp",
"any": "cpp",
"bitset": "cpp",
"cfenv": "cpp",
"charconv": "cpp",
"chrono": "cpp",
"codecvt": "cpp",
"complex": "cpp",
"condition_variable": "cpp",
"coroutine": "cpp",
"csetjmp": "cpp",
"csignal": "cpp",
"ctime": "cpp",
"cuchar": "cpp",
"forward_list": "cpp",
"unordered_set": "cpp",
"ratio": "cpp",
"regex": "cpp",
"fstream": "cpp",
"future": "cpp",
"iomanip": "cpp",
"iostream": "cpp",
"mutex": "cpp",
"numbers": "cpp",
"scoped_allocator": "cpp",
"shared_mutex": "cpp",
"span": "cpp",
"stop_token": "cpp",
"thread": "cpp",
"typeindex": "cpp",
"valarray": "cpp",
"variant": "cpp"
}, },
"C_Cpp.errorSquiggles": "Disabled" "C_Cpp.errorSquiggles": "Disabled"
} }

View File

@ -16,3 +16,5 @@ lib_deps =
xreef/PCF8574 library@^2.2.1 xreef/PCF8574 library@^2.2.1
marcoschwartz/LiquidCrystal_I2C@^1.1.4 marcoschwartz/LiquidCrystal_I2C@^1.1.4
miguelbalboa/MFRC522@^1.4.9 miguelbalboa/MFRC522@^1.4.9
me-no-dev/ESP Async WebServer@^1.2.3
bblanchon/ArduinoJson@^6.18.5

View File

@ -92,7 +92,7 @@ void Interface::render()
this->_lcd.clear(); this->_lcd.clear();
this->_lcd.print("Please enter Pin"); this->_lcd.print("Please enter Pin");
this->_lcd.setCursor(0, 1); this->_lcd.setCursor(0, 1);
this->_pin_number.concat(this->_keyboard->getString()); this->_pin_number = this->_keyboard->getString();
this->_lcd.print("Pin: " + _pin_number); this->_lcd.print("Pin: " + _pin_number);
this->_display_state = 2; this->_display_state = 2;
this->_displayUpdate = false; this->_displayUpdate = false;

24
src/Users.cpp Normal file
View File

@ -0,0 +1,24 @@
#include "Users.h"
Users::Users(/* args */)
{
this->userdb.insert(user_account{.uid = 012345, .first_name = "John", .last_name = "Doe", .rfid_uid = "8C 75 6C 17", .user_pin = "2424"});
this->userdb.insert(user_account{.uid = 010202, .first_name = "Max", .last_name = "Mustermann and Sons", .rfid_uid = "D3 4E 03 0B", .user_pin = "1212"});
}
Users::~Users()
{
}
bool Users::checkPin(String pin_code, std::vector<Users::User> *logon_users)
{
std::copy_if(this->userdb.begin(), this->userdb.end(), inserter(*logon_users,logon_users->end()), [=](user_account user)
{ return pin_code == user.user_pin; });
return (logon_users->size()>0);
}
bool Users::checkRfid(String rfid_code, std::vector<Users::User> *logon_users)
{
std::copy_if(this->userdb.begin(), this->userdb.end(), inserter(*logon_users,logon_users->end()), [=](user_account user)
{ return rfid_code == user.rfid_uid; });
return (logon_users->size()>0);
}

27
src/Users.h Normal file
View File

@ -0,0 +1,27 @@
#pragma once
#include <Arduino.h>
#include <set>
#include <vector>
class Users
{
typedef struct User
{
unsigned long uid;
String first_name;
String last_name;
String rfid_uid;
String user_pin;
bool operator < (const User &o) const { return uid <o.uid; }
bool operator == (const User &o) const { return uid ==o.uid; }
} user_account;
private:
std::set<User> userdb;
/* data */
public:
Users(/* args */);
~Users();
bool checkRfid(String rfid_code, std::vector<Users::User> *logon_users);
bool checkPin(String pin_code, std::vector<Users::User> *logon_users);
};

View File

@ -4,8 +4,9 @@
#include "Keyboard.h" #include "Keyboard.h"
#include "Rfid.h" #include "Rfid.h"
#include "Interface.h" #include "Interface.h"
#include <ESP8266WiFi.h>
#include <vector> #include <vector>
#include "Users.h"
// Rfid // Rfid
Rfid rfid; Rfid rfid;
// i2C Bus // i2C Bus
@ -14,6 +15,10 @@ Rfid rfid;
Keyboard keyboard(200); Keyboard keyboard(200);
Interface iface; 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 // User DB
@ -30,7 +35,9 @@ void setup()
{ {
Serial.begin(9600); Serial.begin(9600);
Serial.print("Starting"); Serial.print("Starting");
delay(500); Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
Serial.println(WiFi.softAP("Doorlock") ? "Ready" : "Failed!");
//delay(500);
keyboard.begin(&Wire); keyboard.begin(&Wire);
rfid.begin(); rfid.begin();
iface.begin(&keyboard); iface.begin(&keyboard);
@ -42,28 +49,27 @@ void loop()
{ {
keyboard.scanAsync(); keyboard.scanAsync();
rfid.scan(); rfid.scan();
std::vector<user_account> logon_users;
if (iface.pinAvailable()) if (iface.pinAvailable())
{ {
String entered_pin = iface.getPin(); String entered_pin = iface.getPin();
std::for_each(userdb.begin(), userdb.end(), [=](user_account user) std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user)
{ { return entered_pin == user.user_pin; });
if (entered_pin == user.user_pin) if (logon_users.size() == 0)
{ iface.showMessage("Login failed!", "-> Pin incorrect",3000);
iface.greetUser(user.first_name + " " + user.last_name);
} }
});
}
std::cop
else if (rfid.available()) else if (rfid.available())
{ {
String rfid_card_uid = rfid.getID(); String rfid_card_uid = rfid.getID();
std::for_each(userdb.begin(), userdb.end(), [=](user_account user) std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user)
{ { return rfid_card_uid == user.rfid_uid; });
if (rfid_card_uid == user.rfid_uid) if (logon_users.size() == 0)
{ iface.showMessage("Login failed!", "-> Unkown Card",3000);
iface.greetUser(user.first_name + " " + user.last_name);
} }
}); if (logon_users.size() > 0)
{
iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name);
logon_users.clear();
} }
iface.render(); iface.render();
} }