added Users lib featuresv - CRUD
This commit is contained in:
parent
f06bfe2030
commit
304844daef
@ -1,6 +1,6 @@
|
|||||||
#include "Keyboard.h"
|
#include "Keyboard.h"
|
||||||
|
|
||||||
#define DEBUG
|
//#define DEBUG
|
||||||
#define PIN_WIRE_SDA D3
|
#define PIN_WIRE_SDA D3
|
||||||
#define PIN_WIRE_SCL D4
|
#define PIN_WIRE_SCL D4
|
||||||
Keyboard::Keyboard(uint8_t _debounce)
|
Keyboard::Keyboard(uint8_t _debounce)
|
||||||
@ -32,12 +32,10 @@ void Keyboard::begin(TwoWire *databus)
|
|||||||
else
|
else
|
||||||
pcf8574->pinMode(i, OUTPUT);
|
pcf8574->pinMode(i, OUTPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
Serial.print("Init pcf8574...");
|
|
||||||
if (pcf8574->begin())
|
if (pcf8574->begin())
|
||||||
Serial.println("OK");
|
Serial.println("Keyboard connected");
|
||||||
else
|
else
|
||||||
Serial.println("KO");
|
Serial.println("Keyboard missing");
|
||||||
|
|
||||||
pcf8574->digitalWrite(1, HIGH);
|
pcf8574->digitalWrite(1, HIGH);
|
||||||
for (int i = 5; i < 8; i++)
|
for (int i = 5; i < 8; i++)
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
Users::Users(/* args */)
|
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 = 1, .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 = 2, .first_name = "Max", .last_name = "Mustermann and Sons", .rfid_uid = "D3 4E 03 0B", .user_pin = "1212"});
|
||||||
}
|
}
|
||||||
|
|
||||||
Users::~Users()
|
Users::~Users()
|
||||||
@ -11,14 +11,55 @@ Users::~Users()
|
|||||||
}
|
}
|
||||||
bool Users::checkPin(String pin_code, std::vector<Users::User> *logon_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)
|
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 pin_code == user.user_pin; });
|
||||||
return (logon_users->size()>0);
|
return (logon_users->size() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Users::checkRfid(String rfid_code, std::vector<Users::User> *logon_users)
|
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)
|
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 rfid_code == user.rfid_uid; });
|
||||||
return (logon_users->size()>0);
|
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;
|
||||||
}
|
}
|
17
src/Users.h
17
src/Users.h
@ -13,13 +13,15 @@ public:
|
|||||||
};
|
};
|
||||||
typedef struct User
|
typedef struct User
|
||||||
{
|
{
|
||||||
|
//User(unsigned long new_uid): uid(new_uid){}
|
||||||
unsigned long uid;
|
unsigned long uid;
|
||||||
String first_name;
|
mutable String first_name;
|
||||||
String last_name;
|
mutable String last_name;
|
||||||
String rfid_uid;
|
mutable String rfid_uid;
|
||||||
String user_pin;
|
mutable String user_pin;
|
||||||
bool operator < (const User &o) const { return uid <o.uid; }
|
bool operator < (const User &o) const { return uid <o.uid; }
|
||||||
bool operator == (const User &o) const { return uid ==o.uid; }
|
bool operator == (const User &o) const { return uid ==o.uid; }
|
||||||
|
|
||||||
} user_account;
|
} user_account;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -31,7 +33,8 @@ public:
|
|||||||
~Users();
|
~Users();
|
||||||
bool checkRfid(String rfid_code, std::vector<Users::User> *logon_users);
|
bool checkRfid(String rfid_code, std::vector<Users::User> *logon_users);
|
||||||
bool checkPin(String pin_code, std::vector<Users::User> *logon_users);
|
bool checkPin(String pin_code, std::vector<Users::User> *logon_users);
|
||||||
bool addUser(unsingend long id, String first_name, String last_name, String rifd_uid, String user_pin);
|
unsigned long addUser(String first_name, String last_name, String rifd_uid, String user_pin);
|
||||||
bool delUser(unsingend long id);
|
bool delUser(unsigned long id);
|
||||||
bool updateUser(unsingend long id, ATTRIBUTES attr, String value);
|
bool updateUser(unsigned long id, ATTRIBUTES attr, String value);
|
||||||
|
String toString(User *user);
|
||||||
};
|
};
|
@ -33,7 +33,7 @@ void setup()
|
|||||||
keyboard.begin(&Wire);
|
keyboard.begin(&Wire);
|
||||||
rfid.begin();
|
rfid.begin();
|
||||||
iface.begin(&keyboard);
|
iface.begin(&keyboard);
|
||||||
|
users.addUser("Harry","Potter","","1234");
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
@ -44,10 +44,11 @@ void loop()
|
|||||||
if (iface.pinAvailable() && !users.checkPin(iface.getPin(), &logon_users))
|
if (iface.pinAvailable() && !users.checkPin(iface.getPin(), &logon_users))
|
||||||
iface.showMessage("Login failed!", "-> Pin incorrect", 3000);
|
iface.showMessage("Login failed!", "-> Pin incorrect", 3000);
|
||||||
else if (rfid.available() && !users.checkRfid(rfid.getID(), &logon_users))
|
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)
|
else if (logon_users.size() > 0)
|
||||||
{
|
{
|
||||||
iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name);
|
iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name);
|
||||||
|
Serial.print(users.toString(&logon_users[0]));
|
||||||
logon_users.clear();
|
logon_users.clear();
|
||||||
}
|
}
|
||||||
iface.render();
|
iface.render();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user