An access controller for man doors at our facility. It receives Wiegand signals from a keypad/card reader and activates a relay to open the door. Access codes are stored in EEPROM. The active code list is updated from TFTP on a local server.
Dependencies: 24LCxx_I2C CardReader USBHOST
Diff: CodeMemory.h
- Revision:
- 0:a56239ae90c2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CodeMemory.h Mon Sep 25 19:02:40 2017 +0000 @@ -0,0 +1,64 @@ + +#ifndef CODE_MEMORY_H_ +#define CODE_MEMORY_H_ + +#include <algorithm> +#include "24LCxx_I2C/24LCxx_I2C.h" + +#define EEPROM_LENGTH 1024 +#define CODE_TABLE_SIZE 200 // bytes (codes * 2) +#define SPECIAL_CODE_TABLE_SIZE 20 // bytes (codes * 2) + +#define EVENT_LOG_POINTER_SIZE 2 // bytes +#define EVENT_LOG_TIME_BASE_SIZE 4 // bytes +#define EVENT_SIZE 7 // bytes per event |1:event type|2:event value|4:ms timestamp| + +// Event Types +#define EVENT_CARD_ACCESS_DENIED 1 +#define EVENT_CARD_ACCESS_GRANTED 2 +#define EVENT_KEYPAD_ACCESS_DENIED 3 +#define EVENT_KEYPAD_ACCESS_GRANTED 4 +#define EVENT_SPECIAL_CODE 5 +#define EVENT_SPECIAL_CHANGE 6 +#define EVENT_GATE_STATE_CHANGED 7 // 0 = Open, 1 = Closed +#define EVENT_ALARM_ACTIVE 8 // (Bit Array) 1:Power On, 2:East Tamper, 4:West Tamper, 8:Comms Loss +#define EVENT_ALARM_RESET 9 + +class CodeMemory +{ +private: + C24LCXX_I2C* _eeprom; + + int LogPointerAddress(); + int FirstEventLogAddress(); + int EventLogEndAddress(); + void PrintEvent(unsigned short eventAddress); + int GetLatestEventAddress(); + int GetNextEventAddress(); + int GetNextEventAddress(unsigned short startAddress); + int GetPreviousEventAddress(unsigned short startAddress); + +public: + CodeMemory(){_eeprom = new C24LCXX_I2C(D14, D15, 0, NC, 1000000);} + ~CodeMemory(){delete _eeprom;} + void EEPROMClear(); + unsigned short ReadAccessCode(unsigned short address); + void WriteAccessCode(unsigned short address, unsigned short value); + unsigned int ReadEEPROMULong(unsigned short address); + void WriteEEPROMULong(unsigned short address, unsigned int value); + int FindAccessCode(unsigned short code); + int FindAccessCode(unsigned short code, unsigned short startAddress, unsigned short stopAddress); + int ActivateAccessCode(unsigned short value); + int DeactivateAccessCode(unsigned short value); + void PrintAllAccessCodes(); + void SyncAccessCodes(unsigned short* codeList, unsigned short codeCount); + bool IsSpecialCode(unsigned short specialCodeIndex, unsigned short code, unsigned short defaultCode); + bool SetSpecialCode(unsigned short specialCodeIndex, unsigned short code); + + void WriteEvent(unsigned char eventType, unsigned short eventValue); + void PrintEventLog(); + void PrintRecentEvents(); + void PrintRecentEvents(unsigned short numEvents); +}; + +#endif \ No newline at end of file