Fixing issue #5 where door would remain unlocked when user presents a card. Also fixed #6 where F2 was logged unnecessarily.

This commit is contained in:
Will Bradley 2013-03-21 08:21:37 -07:00
parent 8e989ce4a2
commit 055754b484
2 changed files with 38 additions and 28 deletions

View File

@ -1,7 +1,7 @@
/*
* Open Source RFID Access Controller - Ethernet Branch
*
* 3/11/2013 v0.04 (branch based on upstream 4/3/2011 v1.32)
* 3/21/2013 v0.05 (branch based on upstream 4/3/2011 v1.32)
* Will Bradley - will@heatsynclabs.org
* Short Tie - tie.short@gmail.com
*
@ -100,8 +100,7 @@
#include <PCATTACH.h> // Pcint.h implementation, allows for >2 software interupts.
/* Static user List - Implemented as an array for testing and access override
*/
//-------- begin user config section --------
#define DEBUG 2 // Set to 2 for display of raw tag numbers in log files, 1 for only denied, 0 for never.
@ -112,6 +111,13 @@ const long superUserList[] = { adam, bob, carl}; // Super user table (cannot b
#define PRIVPASSWORD 0x1234 // Console "priveleged mode" password
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
//-------- end user config section --------
#define DOORDELAY 5000 // How long to open door lock once access is granted. (2500 = 2.5s)
#define SENSORTHRESHOLD 100 // Analog sensor change that will trigger an alarm (0..255)
#define NUM_SENSORS 4 // The number of sensors
@ -193,7 +199,7 @@ unsigned long alarmSirenTimer=0; // Keep track of how long alarm h
unsigned long consolefailTimer=0; // Console password timer for failed logins
byte consoleFail=0;
#define numUsers (sizeof(superUserList)/sizeof(long)) //User access array size (used in later loops/etc)
#define NUMDOORS (sizeof(doorPin)/sizeof(byte))
#define NUMDOORS (sizeof(doorPin)/sizeof(byte)) //TODO: NUMDOORS isn't used and doorPin isn't defined... remove?
#define numAlarmPins (sizeof(analogsensorPins)/sizeof(byte))
//Other global variables
@ -229,12 +235,6 @@ char logKeys[40]={0};
int logData[40]={0};
int logCursor=0;
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
@ -339,9 +339,8 @@ void loop() // Main branch, runs over and ov
PROGMEMprintln(client,title);
PROGMEMprintln(client,help);
}
else{
int queryStart = readString.indexOf("?");
else {
if(readString.indexOf("?e=") > 0 || readString.indexOf("&e=") > 0) { // login
int offset = readString.indexOf("e=");
char pass[5] = {readString[offset+2],readString[offset+3],readString[offset+4],readString[offset+5],'\0'};
@ -351,12 +350,13 @@ void loop() // Main branch, runs over and ov
}
else {
client.println("authfail");
break; // we don't need extra errors below; we already know about the authfail.
}
}
if(privmodeEnabled==true) {
switch(readString[queryStart +1]){
switch(readString[readString.indexOf("?")+1]){
case 's': { // show user
int offset = readString.indexOf("?s");
@ -1067,8 +1067,17 @@ int processTagAccess(long reader, int doorNum) {
log(LOG_ACCESS_GRANTED,reader, doorNum); // Log and unlock door
alarmState(0);
armAlarm(0); // Deactivate Alarm
door2locktimer=millis();
doorUnlock(doorNum); // Unlock the door.
switch(doorNum){
case 1:
door1locktimer=millis();
doorUnlock(doorNum);
break;
case 2:
door2locktimer=millis();
doorUnlock(doorNum);
break;
}
keypadGranted=1;
break;
}
@ -1081,9 +1090,17 @@ int processTagAccess(long reader, int doorNum) {
log(LOG_ACCESS_GRANTED,reader, doorNum); // Log and unlock door 2
alarmState(0);
armAlarm(0); // Deactivate Alarm
chirpAlarm(1);
door1locktimer=millis();
doorUnlock(doorNum); // Unlock the door.
chirpAlarm(1);
switch(doorNum){
case 1:
door1locktimer=millis();
doorUnlock(doorNum);
break;
case 2:
door2locktimer=millis();
doorUnlock(doorNum);
break;
}
keypadGranted=1;
}
else{
@ -1318,7 +1335,7 @@ void log(byte Action, long LongInfo, byte ShortInfo)
break;
}
case LOG_PRIVELEDGE_FAILED: {
addToLog('F',2);
addToLog('F',ShortInfo);
break;
}
case LOG_CLEAR_USERS: {
@ -1558,7 +1575,7 @@ boolean login(long input) {
return true;
}
else {
log(LOG_LOGIN_FAIL,0,0);
//log(LOG_LOGIN_FAIL,0,0);
privmodeEnabled=false;
if(consoleFail==0) { // Set the timeout for failed logins
consolefailTimer=millis();

View File

@ -15,13 +15,6 @@ https://github.com/zyphlar/Open_Access_Control_Ethernet
For the latest version of the UPSTREAM software, visit:
http://code.google.com/p/open-access-control/
Features in Ethernet branch v0.01:
-Extremely rudimentary logging via HTTP using Arduino Ethernet
New features in v1.32:
-Serial console password with bad attempts lockout
-Fixed minor bugs, remove some unused functions
Note: Unpack the libraries (WIEGAND26, DS1307, PCATTACH) into your arduino
libraries directory. This is usually: