#include "all-headers.h"

// Bit operation references
const uint32_t bufferEmpty(0);
const uint32_t bufferFull(~ bufferEmpty);

// Button variables
uint32_t antiBlinkBuffer[5];
bool buttonReleased[5];
bool actionDone[5];
DigitalPort LED[5];
DigitalPort BUTTON[5];

// Counter
uint32_t counter(0);

void setup (USER_MODE) {
	// Start
	digitalWrite(L0_LED, true);

	// Init buttons and LEDs
	BUTTON[0] = P0_PUSH_BUTTON;
	BUTTON[1] = P1_PUSH_BUTTON;
	BUTTON[2] = P2_PUSH_BUTTON;
	BUTTON[3] = P3_PUSH_BUTTON;
	BUTTON[4] = P4_PUSH_BUTTON;

	LED[0] = L0_LED;
	LED[1] = L1_LED;
	LED[2] = L2_LED;
	LED[3] = L3_LED;
	LED[4] = L4_LED;

	for (unsigned int i(0); i < 5; i++) {
		antiBlinkBuffer[i] = 0;
		buttonReleased[i] = digitalRead(BUTTON[i]);
		actionDone[i] = false;
	}

	// Init LCD
	printString(MODE_ "Wake up in ");
	printUnsigned(MODE_ millis(MODE));
	printString(MODE_ "ms");

	gotoLineColumn(MODE_ 1, 0);
}

void loop (USER_MODE) {
	busyWaitDuring(MODE_ 1000);
	gotoLineColumn(MODE_ 1, 0);
	printString(MODE_ "Date:");
	printUnsigned(MODE_ millis(MODE));
}