diff --git a/src/Keyboard.cpp b/src/Keyboard.cpp index e0d114c..d4aa4fa 100644 --- a/src/Keyboard.cpp +++ b/src/Keyboard.cpp @@ -1,6 +1,6 @@ #include "Keyboard.h" -#define DEBUG +//#define DEBUG #define PIN_WIRE_SDA D3 #define PIN_WIRE_SCL D4 Keyboard::Keyboard(uint8_t _debounce) @@ -32,12 +32,10 @@ void Keyboard::begin(TwoWire *databus) else pcf8574->pinMode(i, OUTPUT); } - - Serial.print("Init pcf8574..."); if (pcf8574->begin()) - Serial.println("OK"); + Serial.println("Keyboard connected"); else - Serial.println("KO"); + Serial.println("Keyboard missing"); pcf8574->digitalWrite(1, HIGH); for (int i = 5; i < 8; i++) diff --git a/src/Users.cpp b/src/Users.cpp index bb42b79..8bf9783 100644 --- a/src/Users.cpp +++ b/src/Users.cpp @@ -2,8 +2,8 @@ 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"}); + this->_userdb.insert(user_account{.uid = 1, .first_name = "John", .last_name = "Doe", .rfid_uid = "8C 75 6C 17", .user_pin = "2424"}); + this->_userdb.insert(user_account{.uid = 2, .first_name = "Max", .last_name = "Mustermann and Sons", .rfid_uid = "D3 4E 03 0B", .user_pin = "1212"}); } Users::~Users() @@ -11,14 +11,55 @@ 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) + 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); + 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) + 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 + return (logon_users->size() > 0); +} + +unsigned long Users::addUser(String first_name, String last_name, String rifd_uid, String user_pin) +{ + unsigned long new_id = this->_userdb.rbegin()->uid + 1; + this->_userdb.insert(user_account{.uid = new_id, .first_name = first_name, .last_name = last_name, .rfid_uid = rifd_uid, .user_pin = user_pin}); + return new_id; +} + +bool Users::delUser(unsigned long id) +{ + return this->_userdb.erase(user_account{.uid = id})>0; +} + +bool Users::updateUser(unsigned long id, ATTRIBUTES attr, String value) +{ + auto modify = this->_userdb.find(user_account{.uid = id}); + switch (attr) + { + case FIRST_NAME: + modify->first_name = value; + break; + case LAST_NAME: + modify->last_name = value; + break; + case RFID_UID: + modify->rfid_uid = value; + break; + case USER_PIN: + modify->user_pin = value; + break; + + default: + break; + } + return false; +} + +String Users::toString(User *user) +{ + return "UID: " + String(user->uid) + " Name: " + user->first_name + " " + user->last_name; +} \ No newline at end of file diff --git a/src/Users.h b/src/Users.h index 99652dc..0f31179 100644 --- a/src/Users.h +++ b/src/Users.h @@ -13,13 +13,15 @@ public: }; typedef struct User { + //User(unsigned long new_uid): uid(new_uid){} unsigned long uid; - String first_name; - String last_name; - String rfid_uid; - String user_pin; + mutable String first_name; + mutable String last_name; + mutable String rfid_uid; + mutable String user_pin; bool operator < (const User &o) const { return uid *logon_users); bool checkPin(String pin_code, std::vector *logon_users); - bool addUser(unsingend long id, String first_name, String last_name, String rifd_uid, String user_pin); - bool delUser(unsingend long id); - bool updateUser(unsingend long id, ATTRIBUTES attr, String value); + unsigned long addUser(String first_name, String last_name, String rifd_uid, String user_pin); + bool delUser(unsigned long id); + bool updateUser(unsigned long id, ATTRIBUTES attr, String value); + String toString(User *user); }; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 4fa2019..3c153f9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -33,7 +33,7 @@ void setup() keyboard.begin(&Wire); rfid.begin(); iface.begin(&keyboard); - + users.addUser("Harry","Potter","","1234"); } void loop() @@ -44,10 +44,11 @@ void loop() if (iface.pinAvailable() && !users.checkPin(iface.getPin(), &logon_users)) iface.showMessage("Login failed!", "-> Pin incorrect", 3000); else if (rfid.available() && !users.checkRfid(rfid.getID(), &logon_users)) - iface.showMessage("Login failed!", "-> Unkown Card",3000); + iface.showMessage("Login failed!", "-> Unkown Card", 3000); else if (logon_users.size() > 0) { iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name); + Serial.print(users.toString(&logon_users[0])); logon_users.clear(); } iface.render();