|
|
|
@ -18,6 +18,8 @@ char cardBuffer[CARD_BUFFER_LENGTH]; |
|
|
|
|
|
|
|
|
|
#define CARD_DATA_LENGTH 10 |
|
|
|
|
#define CARD_CHECK_LENGTH 2 |
|
|
|
|
#define CARD_HEAD_BYTE 0x2 |
|
|
|
|
#define CARD_TAIL_BYTE 0x3 |
|
|
|
|
typedef struct __attribute__((packed)) cardData { |
|
|
|
|
char head; |
|
|
|
|
char data[CARD_DATA_LENGTH]; |
|
|
|
@ -48,6 +50,7 @@ typedef struct __attribute__((packed)) cardData { |
|
|
|
|
#define LED_ERROR_BLINK_TIME 50 |
|
|
|
|
|
|
|
|
|
#define EEPROM_SIZE 4095 |
|
|
|
|
#define EEPROM_END_MARKER '$' |
|
|
|
|
|
|
|
|
|
enum wifiStates |
|
|
|
|
{ |
|
|
|
@ -117,7 +120,7 @@ void tickerLoop() |
|
|
|
|
|
|
|
|
|
if (readChar == -1) { |
|
|
|
|
break; |
|
|
|
|
} else if (readChar == 0x2) { |
|
|
|
|
} else if (readChar == CARD_HEAD_BYTE) { |
|
|
|
|
bufPos = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -127,7 +130,7 @@ void tickerLoop() |
|
|
|
|
|
|
|
|
|
cardBuffer[bufPos++] = readChar; |
|
|
|
|
|
|
|
|
|
if (readChar == 0x3 && bufPos == CARD_BUFFER_LENGTH) { |
|
|
|
|
if (readChar == CARD_TAIL_BYTE && bufPos == CARD_BUFFER_LENGTH) { |
|
|
|
|
if (lockState == LOCK_OFF && LEDState == LED_OFF) checkCard(); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -177,7 +180,10 @@ void checkCard() |
|
|
|
|
{ |
|
|
|
|
cardData_t *cardData = (cardData_t *) cardBuffer; |
|
|
|
|
|
|
|
|
|
if (cardData->head == 0x2 && cardData->tail == 0x3 && checksum(cardData)) { |
|
|
|
|
if (cardData->head == CARD_HEAD_BYTE && |
|
|
|
|
cardData->tail == CARD_TAIL_BYTE && |
|
|
|
|
checksum(cardData)) { |
|
|
|
|
|
|
|
|
|
String cardStr = String(); |
|
|
|
|
String authorizedCards = String(); |
|
|
|
|
|
|
|
|
@ -188,7 +194,7 @@ void checkCard() |
|
|
|
|
for (uint16_t i = 0; i < EEPROM_SIZE; i++) { |
|
|
|
|
char tmp = EEPROM.read(i); |
|
|
|
|
authorizedCards += tmp; |
|
|
|
|
if (tmp == '$') break; |
|
|
|
|
if (tmp == EEPROM_END_MARKER) break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (LOGGING) Serial.println("[INFO] Good scan from card: " + cardStr); |
|
|
|
@ -457,7 +463,7 @@ void getCards() |
|
|
|
|
if (cardHTTPCode == HTTP_CODE_OK) { |
|
|
|
|
if (LOGGING) Serial.print("[INFO] Resource found, parsing response: "); |
|
|
|
|
String cardPayload = cardHTTP.getString(); |
|
|
|
|
cardPayload += "$"; // Mark the end
|
|
|
|
|
cardPayload += String(EEPROM_END_MARKER); |
|
|
|
|
if (LOGGING) Serial.println(cardPayload); |
|
|
|
|
|
|
|
|
|
noInterrupts(); // commit() disables interrupts, but we want an atomic EEPROM buffer write
|
|
|
|
|