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