From a46725cf033c05860bd8a2c1ac9bb2eb9cb8c9fe Mon Sep 17 00:00:00 2001 From: Jean Jacques Avril Date: Fri, 1 Oct 2021 13:16:18 +0200 Subject: [PATCH] before using User lib --- .vscode/settings.json | 33 ++++++++++++++++++++++++++++++++- platformio.ini | 2 ++ src/Interface.cpp | 2 +- src/Users.cpp | 24 ++++++++++++++++++++++++ src/Users.h | 27 +++++++++++++++++++++++++++ src/main.cpp | 40 +++++++++++++++++++++++----------------- 6 files changed, 109 insertions(+), 19 deletions(-) create mode 100644 src/Users.cpp create mode 100644 src/Users.h diff --git a/.vscode/settings.json b/.vscode/settings.json index 67112e1..e4fdda8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -49,7 +49,38 @@ "stdexcept": "cpp", "streambuf": "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" } \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 4e99892..e949725 100644 --- a/platformio.ini +++ b/platformio.ini @@ -16,3 +16,5 @@ lib_deps = xreef/PCF8574 library@^2.2.1 marcoschwartz/LiquidCrystal_I2C@^1.1.4 miguelbalboa/MFRC522@^1.4.9 + me-no-dev/ESP Async WebServer@^1.2.3 + bblanchon/ArduinoJson@^6.18.5 diff --git a/src/Interface.cpp b/src/Interface.cpp index 60ae1e4..e3816cd 100644 --- a/src/Interface.cpp +++ b/src/Interface.cpp @@ -92,7 +92,7 @@ void Interface::render() this->_lcd.clear(); this->_lcd.print("Please enter Pin"); 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->_display_state = 2; this->_displayUpdate = false; diff --git a/src/Users.cpp b/src/Users.cpp new file mode 100644 index 0000000..0c6bace --- /dev/null +++ b/src/Users.cpp @@ -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 *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 *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); +} \ No newline at end of file diff --git a/src/Users.h b/src/Users.h new file mode 100644 index 0000000..51b3c31 --- /dev/null +++ b/src/Users.h @@ -0,0 +1,27 @@ +#pragma once +#include +#include +#include +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 userdb; + + /* data */ +public: + Users(/* args */); + ~Users(); + bool checkRfid(String rfid_code, std::vector *logon_users); + bool checkPin(String pin_code, std::vector *logon_users); +}; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index f32bf1c..c90a7a6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,8 +4,9 @@ #include "Keyboard.h" #include "Rfid.h" #include "Interface.h" +#include #include - +#include "Users.h" // Rfid Rfid rfid; // i2C Bus @@ -14,6 +15,10 @@ Rfid rfid; 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 @@ -30,7 +35,9 @@ void setup() { Serial.begin(9600); 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); rfid.begin(); iface.begin(&keyboard); @@ -42,28 +49,27 @@ void loop() { keyboard.scanAsync(); rfid.scan(); + std::vector logon_users; if (iface.pinAvailable()) { String entered_pin = iface.getPin(); - std::for_each(userdb.begin(), userdb.end(), [=](user_account user) - { - if (entered_pin == user.user_pin) - { - iface.greetUser(user.first_name + " " + user.last_name); - } - }); + std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user) + { return entered_pin == user.user_pin; }); + if (logon_users.size() == 0) + iface.showMessage("Login failed!", "-> Pin incorrect",3000); } - std::cop else if (rfid.available()) { String rfid_card_uid = rfid.getID(); - std::for_each(userdb.begin(), userdb.end(), [=](user_account user) - { - if (rfid_card_uid == user.rfid_uid) - { - iface.greetUser(user.first_name + " " + user.last_name); - } - }); + std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user) + { return rfid_card_uid == user.rfid_uid; }); + if (logon_users.size() == 0) + iface.showMessage("Login failed!", "-> Unkown Card",3000); + } + if (logon_users.size() > 0) + { + iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name); + logon_users.clear(); } iface.render(); } \ No newline at end of file