Просмотр исходного кода

Merge branch 'master' of omi-gitlab.e-technik.uni-ulm.de:students/CoffeePi

Sebastian Vendt 7 лет назад
Родитель
Сommit
e69c718a55
100 измененных файлов с 20499 добавлено и 97 удалено
  1. 3 3
      CoffeeCode/README.md
  2. 15 3
      CoffeeCode/Release/subdir.mk
  3. 1 1
      CoffeeCode/buildno
  4. 357 0
      CoffeeCode/coffee.cpp
  5. 43 0
      CoffeeCode/coffee.h
  6. 2 35
      CoffeeCode/database.cpp
  7. 3 9
      CoffeeCode/database.h
  8. 272 0
      CoffeeCode/display.cpp
  9. 115 0
      CoffeeCode/display.h
  10. 2 2
      CoffeeCode/doxy.cfg
  11. 187 0
      CoffeeCode/events.cpp
  12. 27 0
      CoffeeCode/events.h
  13. 8 5
      CoffeeCode/global.h
  14. 265 34
      CoffeeCode/hal.cpp
  15. 52 5
      CoffeeCode/hal.h
  16. 96 0
      CoffeeCode/html/README_8md.html
  17. 104 0
      CoffeeCode/html/annotated.html
  18. BIN
      CoffeeCode/html/arrowdown.png
  19. BIN
      CoffeeCode/html/arrowright.png
  20. BIN
      CoffeeCode/html/bc_s.png
  21. BIN
      CoffeeCode/html/bdwn.png
  22. 108 0
      CoffeeCode/html/classes.html
  23. 312 0
      CoffeeCode/html/classtimer.html
  24. BIN
      CoffeeCode/html/closed.png
  25. 483 0
      CoffeeCode/html/coffee_8cpp.html
  26. 538 0
      CoffeeCode/html/coffee_8h.html
  27. 149 0
      CoffeeCode/html/coffee_8h_source.html
  28. 266 0
      CoffeeCode/html/crc_8cpp.html
  29. 343 0
      CoffeeCode/html/crc_8h.html
  30. 177 0
      CoffeeCode/html/crc_8h_source.html
  31. 501 0
      CoffeeCode/html/database_8cpp.html
  32. 456 0
      CoffeeCode/html/database_8h.html
  33. 153 0
      CoffeeCode/html/database_8h_source.html
  34. 503 0
      CoffeeCode/html/display_8cpp.html
  35. 455 0
      CoffeeCode/html/display_8h.html
  36. 223 0
      CoffeeCode/html/display_8h_source.html
  37. BIN
      CoffeeCode/html/doc.png
  38. 1454 0
      CoffeeCode/html/doxygen.css
  39. BIN
      CoffeeCode/html/doxygen.png
  40. 97 0
      CoffeeCode/html/dynsections.js
  41. 122 0
      CoffeeCode/html/files.html
  42. BIN
      CoffeeCode/html/folderclosed.png
  43. BIN
      CoffeeCode/html/folderopen.png
  44. 138 0
      CoffeeCode/html/functions.html
  45. 123 0
      CoffeeCode/html/functions_func.html
  46. 117 0
      CoffeeCode/html/functions_vars.html
  47. 350 0
      CoffeeCode/html/global_8h.html
  48. 142 0
      CoffeeCode/html/global_8h_source.html
  49. 138 0
      CoffeeCode/html/globals.html
  50. 145 0
      CoffeeCode/html/globals_b.html
  51. 227 0
      CoffeeCode/html/globals_c.html
  52. 197 0
      CoffeeCode/html/globals_d.html
  53. 474 0
      CoffeeCode/html/globals_defs.html
  54. 144 0
      CoffeeCode/html/globals_e.html
  55. 126 0
      CoffeeCode/html/globals_enum.html
  56. 264 0
      CoffeeCode/html/globals_eval.html
  57. 154 0
      CoffeeCode/html/globals_f.html
  58. 128 0
      CoffeeCode/html/globals_func.html
  59. 168 0
      CoffeeCode/html/globals_func_c.html
  60. 165 0
      CoffeeCode/html/globals_func_d.html
  61. 132 0
      CoffeeCode/html/globals_func_g.html
  62. 211 0
      CoffeeCode/html/globals_func_h.html
  63. 140 0
      CoffeeCode/html/globals_func_i.html
  64. 128 0
      CoffeeCode/html/globals_func_k.html
  65. 191 0
      CoffeeCode/html/globals_func_l.html
  66. 130 0
      CoffeeCode/html/globals_func_m.html
  67. 128 0
      CoffeeCode/html/globals_func_n.html
  68. 262 0
      CoffeeCode/html/globals_func_s.html
  69. 130 0
      CoffeeCode/html/globals_func_t.html
  70. 127 0
      CoffeeCode/html/globals_func_u.html
  71. 140 0
      CoffeeCode/html/globals_g.html
  72. 225 0
      CoffeeCode/html/globals_h.html
  73. 163 0
      CoffeeCode/html/globals_i.html
  74. 163 0
      CoffeeCode/html/globals_k.html
  75. 304 0
      CoffeeCode/html/globals_l.html
  76. 145 0
      CoffeeCode/html/globals_m.html
  77. 136 0
      CoffeeCode/html/globals_n.html
  78. 144 0
      CoffeeCode/html/globals_o.html
  79. 150 0
      CoffeeCode/html/globals_p.html
  80. 152 0
      CoffeeCode/html/globals_r.html
  81. 423 0
      CoffeeCode/html/globals_s.html
  82. 191 0
      CoffeeCode/html/globals_t.html
  83. 108 0
      CoffeeCode/html/globals_type.html
  84. 138 0
      CoffeeCode/html/globals_u.html
  85. 157 0
      CoffeeCode/html/globals_v.html
  86. 304 0
      CoffeeCode/html/globals_vars.html
  87. 135 0
      CoffeeCode/html/globals_w.html
  88. 695 0
      CoffeeCode/html/hal_8cpp.html
  89. 791 0
      CoffeeCode/html/hal_8h.html
  90. 208 0
      CoffeeCode/html/hal_8h_source.html
  91. 105 0
      CoffeeCode/html/index.html
  92. 15 0
      CoffeeCode/html/jquery.js
  93. 770 0
      CoffeeCode/html/lcd_8cpp.html
  94. 536 0
      CoffeeCode/html/lcd_8h.html
  95. 157 0
      CoffeeCode/html/lcd_8h_source.html
  96. 307 0
      CoffeeCode/html/logger_8cpp.html
  97. 499 0
      CoffeeCode/html/logger_8h.html
  98. 182 0
      CoffeeCode/html/logger_8h_source.html
  99. 385 0
      CoffeeCode/html/main_8cpp.html
  100. BIN
      CoffeeCode/html/nav_f.png

+ 3 - 3
CoffeeCode/README.md

@@ -6,10 +6,10 @@ Requirements: wiringpi pthread
 
 Debug levels:
  1. Basic debugging, process informations
- 2. CAN messages
- 3. CAN speedchanges
+ 2. Brewing informations
+ 3. HAL messages
  4. SQL querys
- 5. CAN error states
+ 5. LED stripe debugging
  6. SPI communication
 
 ## Sourcecode ##

+ 15 - 3
CoffeeCode/Release/subdir.mk

@@ -11,7 +11,11 @@ CPP_SRCS += \
 ../logger.cpp \
 ../main.cpp \
 ../spi.cpp \
-../timer.cpp 
+../stripe.cpp \
+../timer.cpp  \
+../display.cpp  \
+../events.cpp  \
+../server.cpp 
 
 OBJS += \
 ./crc.o \
@@ -21,7 +25,11 @@ OBJS += \
 ./logger.o \
 ./main.o \
 ./spi.o \
-./timer.o 
+./stripe.o \
+./timer.o  \
+./display.o  \
+./events.o  \
+./server.o 
 
 CPP_DEPS += \
 ./crc.d \
@@ -31,7 +39,11 @@ CPP_DEPS += \
 ./logger.d \
 ./main.d \
 ./spi.d \
-./timer.d 
+./stripe.d \
+./timer.d  \
+./display.d  \
+./events.d  \
+./server.d
 
 
 # Each subdirectory must supply rules for building sources it contributes

+ 1 - 1
CoffeeCode/buildno

@@ -1 +1 @@
-21
+181

+ 357 - 0
CoffeeCode/coffee.cpp

@@ -0,0 +1,357 @@
+/*
+ * coffee.cpp
+ *
+ *  Created on: Sep 25, 2017
+ *      Author: sebastian
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <stdint.h>
+#include <wiringPi.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <iostream>
+#include <csignal>
+#include <time.h>
+#include <ctime>
+#include "coffee.h"
+#include "hal.h"
+#include "logger.h"
+#include "timer.h"
+#include "database.h"
+#include "events.h"
+
+coffee_status_t state;
+int sigValue;
+int brewTime; //Brew time in ms
+timer brewTimer(&brewTimeHandler);
+
+
+const char* StateName[] = {"OFF", "HEATING", "INITHEAT", "IDLE", "BREW", "BREWMAN", "CLEAN", "ERROR"};
+
+/**
+ * Thread for the finite state machine
+ * It represents the current state of the machine and handles signals coming from
+ * the pressure control, buttons, the brew switch and the proximity sensor
+ * @param threadid the ID of the thread
+ */
+
+void *coffeeThread(void *threadid) {
+	logger(V_BASIC, "Initializing coffee thread...\n");
+
+	//installing new Signal handler for coffeethread
+	struct sigaction action;
+	sigemptyset(&action.sa_mask);
+	action.sa_flags = SA_SIGINFO;
+	action.sa_sigaction = coffeeHandler;
+	sigaction(SIGUSR2, &action, NULL);
+
+	brewTimer.setDivider(4);
+	brewTimer.stop();
+	brewTime = 0;
+
+	logger(V_BREW, "Determining inital state\n");
+	//determine inital state
+	if (halGetRelaisState(RELAIS_POWER) && halGetRelaisState(RELAIS_HEAT)
+			&& !halGetRelaisState(RELAIS_PUMP)) {
+		//wait for heat relais to switch
+		sleep(1);
+		if (halIsHeating()) { //Heating is on
+			changeState(STATE_INITALHEATING);
+		} else {
+			changeState(STATE_IDLE);
+		}
+	} else if (halGetRelaisState(RELAIS_PUMP)) {
+		logger_error("Whoops, why is the pump running...\n");
+		changeState(STATE_ERROR);
+	} else {
+		changeState(STATE_OFF);
+	}
+
+	logger(V_BREW, "Starting Coffee FSM\n");
+	//begin FSM
+	while (1) {
+		switch (state) {
+		/*
+		 *
+		 */
+		case STATE_OFF:
+			if (SigValueEmpty())
+				pause();
+			if (getSigValue() == SigInt0Rls) {
+				if (halProxSensorCovered()) { //Check Waterlevel
+					//turn machine on
+					halMachineOn();
+					sleep(1);
+					if (halIsHeating()) { //check if System starts to heat when turned on
+						changeState(STATE_INITALHEATING);
+					} else {
+						changeState(STATE_IDLE);
+					}
+				} else {
+					changeState(STATE_ERROR);
+				}
+				break;
+			}
+			break;
+
+			/*
+			 *
+			 */
+		case STATE_INITALHEATING:
+			if (SigValueEmpty())
+				pause();
+			switch (getSigValue()) {
+			case SigInt1RlsLong:
+				//Turn machine off again
+				halMachineOff();
+				coffeeIncreaseHeatingTime(halgetHeatingTime());
+				changeState(STATE_OFF);
+				break;
+			case SigPressOpn:
+				//Inital heating finished
+				coffeeIncreaseHeatingTime(halgetHeatingTime());
+				changeState(STATE_IDLE);
+				break;
+			}
+			break;
+
+			/*
+			 *
+			 */
+		case STATE_HEATING:
+			if (SigValueEmpty())
+				pause();
+			switch (getSigValue()) {
+			case SigInt1RlsLong:
+				//Turn machine off again
+				halMachineOff();
+				coffeeIncreaseHeatingTime(halgetHeatingTime());
+				changeState(STATE_OFF);
+				break;
+			case SigPressOpn:
+				coffeeIncreaseHeatingTime(halgetHeatingTime());
+				changeState(STATE_IDLE);
+				break;
+			case SigInt0Psh:
+				//start to brew a delicious coffee
+				changeState(STATE_BREW);
+				break;
+			case SigBrewOn:
+				//someone brews manually
+				changeState(STATE_BREWMANUAL);
+				break;
+			}
+			break;
+			/*
+			 *
+			 */
+		case STATE_IDLE:
+			if (SigValueEmpty())
+				pause();
+			switch (getSigValue()) {
+			case SigInt1RlsLong:
+				//Turn machine off again
+				halMachineOff();
+				changeState(STATE_OFF);
+				break;
+			case SigPressCls:
+				changeState(STATE_HEATING);
+				break;
+			case SigInt0Psh:
+				//start to brew a delicious coffee
+				changeState(STATE_BREW);
+				break;
+			case SigBrewOn:
+				//someone brews manually
+				changeState(STATE_BREWMANUAL);
+				break;
+			}
+			break;
+			/*
+			 *
+			 */
+		case STATE_BREW:
+			coffeeBrew();
+			logger(V_BREW, "Finishing brewing\n");
+			changeState(STATE_IDLE);
+			break;
+
+			/*
+			 *
+			 */
+		case STATE_BREWMANUAL:
+			if (SigValueEmpty())
+				pause();
+			break;
+
+			/*
+			 *
+			 */
+		case STATE_CLEANING:
+			if (SigValueEmpty())
+				pause();
+			break;
+
+			/*
+			 *
+			 */
+		case STATE_ERROR:
+			if (SigValueEmpty())
+				pause();
+			break;
+		}
+	}
+	pthread_exit(EXIT_SUCCESS);
+}
+/**
+ * Handler for the Signal send to this thread
+ * It saves the type of signal received and tracks the time between a push and release event of up to 4 signals
+ * The time is stored in the HalEvent variable when a release event is received
+ * @param signum
+ * @param siginfo
+ * @param context
+ */
+void coffeeHandler(int signum, siginfo_t *siginfo, void *context) {
+	sigval_t sigVal = (siginfo->si_value);
+	sigValue = sigVal.sival_int;
+	logger(V_BREW, "CoffeeHandler called with %d\n", sigValue);
+}
+
+/**
+ * returns the Signal value from the last received Signal and clears the variable
+ * @return value sent with the last signal
+ */
+int getSigValue(void) {
+	int tmp = sigValue;
+	sigValue = 0;
+	return tmp;
+}
+
+bool SigValueEmpty(void) {
+	if (sigValue == 0)
+		return true;
+	else
+		return false;
+}
+
+/**
+ * Changes the state of the machine to newState
+ * prints the change to the logger
+ * @param newState
+ */
+void changeState(coffee_status_t newState) {
+	logger(V_BREW, "Changing state to %s\n", StateName[newState]);
+	state = newState;
+
+	event_trigger("statechange", &state, sizeof(state));
+}
+
+/**
+ * Returns the current state of the FSM
+ */
+coffee_status_t getState(void) {
+	return state;
+}
+
+/**
+ * Counter for the brew time
+ * refresh every 200ms
+ */
+void brewTimeHandler(void) {
+	brewTime += 200;
+}
+
+/**
+ * handles program termination
+ */
+void coffeeTerminate(void) {
+	logger_error("Coffee thread terminated");
+	//stop brewing
+	halRelaisOff(RELAIS_PUMP);
+	brewTimer.stop();
+}
+
+/**
+ * Brewing process
+ */
+void coffeeBrew(void) {
+	coffeeIncreaseBrewCounter();
+
+	/*
+	 * Preinfusion
+	 */
+	logger(V_BREW, "Starting preinfusion...\n");
+	halResetFlow();
+	halRelaisOn(RELAIS_PUMP);
+	brewTime = 0;
+	brewTimer.start();
+	while (halGetFlow() < AMOUNT_PREINFUSION) {
+		usleep(50000);
+		if (getSigValue() == SigInt1Psh)
+			return;
+	}
+	brewTimer.stop();
+	brewTime = 0;
+	halRelaisOff(RELAIS_PUMP);
+
+	/*
+	 * Wait for coffee to soak in infused water
+	 */
+	brewTimer.start();
+	while (brewTime < TIME_SOAK) {
+		usleep(100000);
+		if (getSigValue() == SigInt1Psh)
+			return;
+	}
+	brewTimer.stop();
+	brewTime = 0;
+	halResetFlow();
+
+	/*
+	 * Brewing the actual espresso
+	 */
+	logger(V_BREW, "Starting infusion...\n");
+	halRelaisOn(RELAIS_PUMP);
+	brewTimer.start();
+	while (brewTime < TIME_INFUSION && halGetFlow() < AMOUNT_DBLESPRESSO) {
+		usleep(100000);
+		if (getSigValue() == SigInt1Psh)
+			return;
+	}
+	halRelaisOff(RELAIS_PUMP);
+	halResetFlow();
+	brewTimer.stop();
+	brewTime = 0;
+	changeState(STATE_IDLE);
+	return;
+}
+
+/**
+ *
+ */
+void coffeeIncreaseBrewCounter(void) {
+	uint64_t brewcounter = sqlGetConf(CFGbrewcounter);
+	if (sqlSetConf(CFGbrewcounter, ++brewcounter)) {
+		logger_error("Couldn't write brewcounter to database");
+	}
+}
+/**
+ *
+ */
+void coffeeIncreaseHeatingTime(clock_t begin, clock_t end){
+
+}
+
+/**
+ *
+ */
+void coffeeIncreaseHeatingTime(uint64_t heatingTime) {
+	uint64_t totalHeatingTime = sqlGetConf(CFGHeatingTime);
+	if (sqlSetConf(CFGHeatingTime, (totalHeatingTime + heatingTime))) {
+		logger_error("Couldn't write heating time to database");
+	}
+}

+ 43 - 0
CoffeeCode/coffee.h

@@ -0,0 +1,43 @@
+/*
+ * coffee.h
+ *
+ *  Created on: Sep 25, 2017
+ *      Author: Sebastian
+ */
+
+#ifndef COFFEE_H_
+#define COFFEE_H_
+#include <csignal>
+
+//define status
+typedef enum {
+	STATE_OFF,
+	STATE_HEATING,
+	STATE_INITALHEATING,
+	STATE_IDLE,
+	STATE_BREW,
+	STATE_BREWMANUAL,
+	STATE_CLEANING,
+	STATE_ERROR
+} coffee_status_t;
+
+extern const char* StateName[];
+
+#define AMOUNT_PREINFUSION	25 //Preinfusion amount in ml
+#define TIME_SOAK			5000 //Time between preinfusion and infusion in ms
+#define TIME_INFUSION 		25000	//Infusion time in ms
+#define AMOUNT_DBLESPRESSO	59.0	//Size of a double espresso in ml
+void *coffeeThread(void *threadid);
+
+void coffeeHandler(int signum, siginfo_t *siginfo, void *context);
+int getSigValue(void);
+bool SigValueEmpty(void);
+void changeState(coffee_status_t newState);
+coffee_status_t getState(void);
+void brewTimeHandler(void);
+void coffeeTerminate(void);
+void coffeeBrew(void);
+void coffeeIncreaseBrewCounter(void);
+void coffeeIncreaseHeatingTime(uint64_t heatingTime);
+
+#endif /* COFFEE_H_ */

+ 2 - 35
CoffeeCode/database.cpp

@@ -105,7 +105,7 @@ int sqlExecute(string query) {
 	int rc;
 	struct timeval tv1, tv2;
 
-	pthread_mutex_lock(&mutex);
+	//pthread_mutex_lock(&mutex);
 
 	logger(V_SQL, "Executing SQL Query: %s\n", query.c_str());
 
@@ -118,7 +118,7 @@ int sqlExecute(string query) {
 				(double) (tv2.tv_usec - tv1.tv_usec) / 1000000
 						+ (double) (tv2.tv_sec - tv1.tv_sec));
 
-	pthread_mutex_unlock(&mutex);
+	//pthread_mutex_unlock(&mutex);
 	if (rc != SQLITE_OK) {
 		logger_error("SQL error (%d): %s\n", rc, zErrMsg);
 		sqlite3_free(zErrMsg);
@@ -148,42 +148,9 @@ int sqlExecute2(char *query) {
  */
 
 int sqlSetup() {
-	sqlExecute("CREATE TABLE IF NOT EXISTS nodes "
-			"(id INTEGER PRIMARY KEY ASC AUTOINCREMENT, "
-			"guid INTEGER UNIQUE, "
-			"term INTEGER, "
-			"terminal NUMERIC, "
-			"devclass INTEGER, "
-			"devtype INTEGER, "
-			"hw INTEGER, "
-			"fwmajor INTEGER, "
-			"fwminor INTEGER, "
-			"lastseen INTEGER, "
-			"tableversion INTEGER, "
-			"clockspeed INTEGER, "
-			"voltage NUMERIC);");
 	sqlExecute("CREATE TABLE IF NOT EXISTS config "
 			"(id INTEGER PRIMARY KEY, "
 			"value NUMERIC);");
-	sqlExecute("CREATE TABLE IF NOT EXISTS monitorlog "
-			"(id INTEGER PRIMARY KEY ASC AUTOINCREMENT, "
-			"time NUMERIC, "
-			"node INTEGER, "
-			"type INTEGER, "
-			"value NUMERIC, "
-			"weight INTEGER);");
-	sqlExecute("CREATE TABLE IF NOT EXISTS counters "
-			"(id INTEGER PRIMARY KEY ASC, "
-			"por INTEGER, "
-			"wdr INTEGER, "
-			"bodr INTEGER, "
-			"er INTEGER, "
-			"asc INTEGER, "
-			"uptime INTEGER, "
-			"rxerr INTEGER, "
-			"txerr INTEGER, "
-			"rx INTEGER, "
-			"tx INTEGER);");
 	return 0;
 }
 

+ 3 - 9
CoffeeCode/database.h

@@ -19,21 +19,15 @@ using namespace std;
 
 // Config Keys
 typedef enum {
-	CRC = 1,
-	AliveCRC = 2,
-	lastTC1 = 3,
-	lastTC2 = 4,
-	lastTC3 = 5,
-	lastTerm = 6,
-	testSlowCnt = 7,
+	CFGbrewcounter = 1,
+	CFGHeatingTime = 2,
+	CFGdisplaylang = 3
 } config_key_t;
 
 int sqlOpen();
 void sqlClose();
 int sqlSetup();
 int sqlExecute(string query);
-int sqlInsertNode(uint8_t *guid, bool terminal);
-int sqlReadNodes();
 char *inttochar(uint8_t *guid);
 uint8_t *chartoint(const unsigned char *guid);
 uint8_t *int64to8bit(sqlite_int64 guid);

+ 272 - 0
CoffeeCode/display.cpp

@@ -0,0 +1,272 @@
+/*
+ * display.cpp
+ *
+ *  Created on: Sep 26, 2017
+ *      Author: Philipp Hinz
+ */
+#include "display.h"
+
+display_lang_t displayLang;
+timer displayTimer(displayTimerHandler);
+int lcd = 0;
+volatile int timerScaler = 0;
+volatile int elapsedCnt = 0;
+coffee_status_t coffeeState = STATE_OFF;
+
+/**
+ * Prints out the current time in a centered position
+ * @param line Target line in display
+ */
+
+void displayPrintTime(int line) {
+	time_t rawtime;
+	struct tm * timeinfo;
+	if (line > DISPLAY_ROWS)
+		line = 0;
+
+	time(&rawtime);
+	timeinfo = localtime(&rawtime);
+	lcdPosition(lcd, 0, line);
+	lcdPrintf(lcd, "    %.2d:%.2d:%.2d    ", timeinfo->tm_hour,
+			timeinfo->tm_min, timeinfo->tm_sec);
+}
+
+/**
+ * Prints out the total volume flow
+ * @param line Target line in display
+ */
+
+void displayPrintFlow(int line) {
+	float flow = halGetFlow();
+	lcdPosition(lcd, 0, line);
+	lcdPrintf(lcd, "%s: %.0f ml    ", displayGetString(str_flow), flow);
+}
+
+/**
+ * Prints a string to a specific line, optionally centered.
+ * This function also fills out the remaining row of the display with spaces,
+ * to ensure there is no old data left.
+ * @param line Target line in display
+ * @param *str String to print
+ * @param centered Print centered or not
+ */
+
+void displayPrintLn(int line, const char* str, bool centered) {
+	char buf[DISPLAY_COLS + 1];
+	int len = strlen(str);
+	int i = 0;
+	int spaces = 0;
+	if (len > DISPLAY_COLS)
+		len = DISPLAY_COLS;
+	if (line > DISPLAY_ROWS)
+		line = 0;
+	if (centered) {
+		spaces = (DISPLAY_COLS - len) / 2;
+		if (spaces) {
+			for (i = 0; i < spaces; i++) {
+				buf[i] = ' ';
+			}
+		}
+	}
+	for (i = 0; i < len; i++) {
+		buf[spaces + i] = str[i];
+	}
+	if ((len + spaces) < DISPLAY_COLS) { // fill remaining space
+		for (i = i + spaces; i < DISPLAY_COLS; i++) {
+			buf[i] = ' ';
+		}
+	}
+	lcdPosition(lcd, 0, line);
+	buf[DISPLAY_COLS] = '\0';
+	lcdPrintf(lcd, buf);
+	//logger(V_HAL, "Printed out on display: \"%s\"\n", buf);
+}
+
+/**
+ * Updates the display state to the matching coffee state
+ * @param event Event data
+ */
+
+void displayStateUpdated(event_t *event) {
+	if (event->len != sizeof(coffee_status_t)) {
+		logger_error("Invalid use of event %s\n", event->event);
+		return;
+	}
+	coffee_status_t state = *(coffee_status_t*)event->data;
+	if (state != coffeeState) {
+		coffeeState = state;
+		timerScaler--;
+		elapsedCnt = 0;
+		displayTimer.call();
+	}
+}
+
+/**
+ * Handles cleanup before program termination
+ */
+
+void displayTerminate(event_t *e) {
+	displayPrintLn(0, "CoffeePi", true);
+	displayPrintLn(1, displayGetString(str_bye), true);
+}
+
+/**
+ * Main thread to handle display data
+ * @param *threadid Thread ID
+ */
+
+void* displayThread(void* threadid) {
+	sleep(1); // Wait for other components to initialize
+	int tmp = sqlGetConf(CFGdisplaylang);
+	if (!tmp || tmp >= lang_last)
+		tmp = DEFAULT_LANG;
+	displaySetLang((display_lang_t) tmp);
+	displayTimer.start();
+	event_subscribe("statechange", &displayStateUpdated);
+	event_subscribe("terminate", &displayTerminate);
+	while (1) {
+		pause();
+		if (1) {
+			timerScaler--;
+			displayTimer.call();
+		}
+	}
+	pthread_exit(EXIT_SUCCESS);
+}
+
+/**
+ * Timer handler for display update
+ * @param *threadid Thread ID
+ */
+
+void* displayTimerHandler(void* threadid) {
+	int scale1Hz = 0;
+	if (timerScaler++ >= REFRESH_RATE) { // 1s elapsed, reset
+		timerScaler = 0;
+		scale1Hz = 1;
+	}
+	int scale5Hz = (timerScaler == (REFRESH_RATE / 5) ? 0 : 1);
+	if (scale1Hz) {
+		switch (coffeeState) {
+		case STATE_OFF:
+		case STATE_HEATING:
+		case STATE_INITALHEATING:
+		case STATE_IDLE:
+		case STATE_CLEANING:
+		case STATE_ERROR:
+			displayRefresh();
+			break;
+		default:
+			break;
+		}
+	}
+	if (scale5Hz) {
+		switch (coffeeState) {
+		case STATE_BREW:
+		case STATE_BREWMANUAL:
+			displayRefresh();
+			break;
+		default:
+			break;
+		}
+	}
+	if (elapsedCnt < (5 * REFRESH_RATE)) // Don't let it grow too large
+		elapsedCnt++;
+	pthread_exit(EXIT_SUCCESS);
+}
+
+/**
+ * Initializes display
+ */
+
+void displayInit(void) {
+	lcd = lcdInit();
+	if (lcd < 0)
+		logger_error("Error: unable to init LCD (%d)\n", lcd);
+	lcdClear(lcd);
+	lcdHome(lcd);
+	displayPrintLn(0, (char*) "CoffeePi", true);
+	displayPrintLn(1, (char*) "booting...", true);
+	//lcdPrintf(lcd, "    CoffeePi       booting...");
+
+	timerScaler = 0;
+	displayTimer.setDivider((1000000 / TIMER_DELAY_US) / REFRESH_RATE);
+
+	logger(V_BASIC, "Initialized display with a refresh rate of %d Hz\n",
+	REFRESH_RATE);
+}
+
+/**
+ * Sets the language of the display text
+ * @param lang New language
+ */
+
+void displaySetLang(display_lang_t lang) {
+	displayLang = lang;
+}
+
+/**
+ * Refreshed the display content and outputs it
+ */
+
+void displayRefresh(void) {
+	switch (coffeeState) { //coffeeGetState()
+	case STATE_IDLE:
+		displayPrintLn(0, "CoffeePi", true);
+		displayPrintLn(1, displayGetString(str_ready), true);
+		break;
+
+	case STATE_INITALHEATING:
+		displayPrintLn(0, "CoffeePi", true);
+		displayPrintLn(1, displayGetString(str_heating), true);
+		break;
+
+	case STATE_HEATING:
+		displayPrintLn(0, "CoffeePi", true);
+		displayPrintLn(1, displayGetString(str_heatingready), true);
+		break;
+
+	case STATE_BREW:
+		if (elapsedCnt <= 2 * REFRESH_RATE) {
+			displayPrintLn(0, "CoffeePi", true);
+			displayPrintLn(1, displayGetString(str_brewing), true);
+		} else {
+			displayPrintLn(0, displayGetString(str_brewing), true);
+			displayPrintFlow(1);
+		}
+		break;
+
+	case STATE_BREWMANUAL:
+		displayPrintLn(0, displayGetString(str_brewing), true);
+		displayPrintFlow(1);
+		break;
+
+	case STATE_CLEANING:
+		displayPrintLn(0, "CoffeePi", true);
+		displayPrintLn(1, displayGetString(str_cleaning), true);
+		break;
+
+	case STATE_ERROR:
+		displayPrintLn(0, "CoffeePi", true);
+		displayPrintLn(1, displayGetString(str_error), true);
+		break;
+
+	case STATE_OFF:
+	default:
+		displayPrintLn(0, "CoffeePi", true);
+		displayPrintTime(1);
+		break;
+	}
+}
+
+/**
+ * Returns the matching translation of a string
+ * @param string Requested string
+ * @return Translated string
+ */
+
+const char* displayGetString(display_strings_t string) {
+	if (displayLang >= lang_last)
+		displayLang = DEFAULT_LANG;
+	return display_strings[string].text[displayLang];
+}

+ 115 - 0
CoffeeCode/display.h

@@ -0,0 +1,115 @@
+/*
+ * display.h
+ *
+ *  Created on: Sep 26, 2017
+ *      Author: Philipp Hinz
+ */
+
+#ifndef DISPLAY_H_
+#define DISPLAY_H_
+#include <string>
+#include <stdlib.h>
+#include <pthread.h>
+#include <time.h>
+#include <unistd.h>
+#include <string.h>
+#include "global.h"
+#include "logger.h"
+#include "database.h"
+#include "timer.h"
+#include "lcd.h"
+#include "coffee.h"
+#include "hal.h"
+#include "events.h"
+
+typedef enum {
+	lang_de,
+	lang_en,
+	lang_last
+} display_lang_t;
+
+typedef enum {
+	str_heating,
+	str_heatingready,
+	str_ready,
+	str_brewing,
+	str_cleaning,
+	str_error,
+	str_flow,
+	str_bye,
+	str_last
+} display_strings_t;
+
+typedef struct {
+	char const * const text[lang_last];
+} display_string_t;
+
+static const display_string_t display_strings[str_last] =
+{
+		{ // heating
+				{
+						"Heizt auf",
+						"Heating"
+				}
+		},
+		{ // heatingready
+				{
+						"Bereit (Heizt)",
+						"Ready (Heating)"
+				}
+		},
+		{ // ready
+				{
+						"Bereit",
+						"Ready"
+				}
+		},
+		{ // brewing
+				{
+						"Bezug..",
+						"Brewing.."
+				}
+		},
+		{ // cleaning
+				{
+						"Reinigt..",
+						"Cleaning.."
+				}
+		},
+		{ // error
+				{
+						"Fehler",
+						"Error"
+				}
+		},
+		{ // flow
+				{
+						"Menge",
+						"Flow"
+				}
+		},
+		{ // bye
+				{
+						"Auf wiedersehen",
+						"Good bye"
+				}
+		}
+};
+
+#define DEFAULT_LANG 	lang_en /**< Default display language */
+#define REFRESH_RATE	10 /**< Display refresh rate in Hz */
+#define DISPLAY_ROWS	2
+#define DISPLAY_COLS	16
+
+void *displayThread(void *threadid);
+void *displayTimerHandler(void *threadid);
+void displayInit(void);
+void displaySetLang(display_lang_t lang);
+
+void displayPushState(coffee_status_t state);
+
+void displayRefresh(void);
+const char* displayGetString(display_strings_t string);
+
+
+#endif /* DISPLAY_H_ */

+ 2 - 2
CoffeeCode/doxy.cfg

@@ -32,7 +32,7 @@ DOXYFILE_ENCODING      = UTF-8
 # title of most generated pages and in a few other places.
 # The default value is: My Project.
 
-PROJECT_NAME           = "Speedmanager"
+PROJECT_NAME           = "CoffeePi"
 
 # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
 # could be handy for archiving the generated documentation or if some version
@@ -44,7 +44,7 @@ PROJECT_NAME           = "Speedmanager"
 # for a project that appears at the top of each page and should give viewer a
 # quick idea about the purpose of the project. Keep the description short.
 
-PROJECT_BRIEF          = "CAN Speedmanager for Raspberry Pi"
+PROJECT_BRIEF          = "Coffee machine control for Raspberry Pi"
 
 # With the PROJECT_LOGO tag one can specify a logo or an icon that is included
 # in the documentation. The maximum height of the logo should not exceed 55

+ 187 - 0
CoffeeCode/events.cpp

@@ -0,0 +1,187 @@
+/*
+ * events.cpp
+ *
+ *  Created on: Jan 7, 2018
+ *      Author: Philipp Hinz
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "events.h"
+#include "logger.h"
+
+/**
+ * Struct for subscribers, contains the pointer to the handler
+ */
+
+struct subscriber_t {
+	void (*handler)(event_t *);
+	subscriber_t *next = NULL;
+};
+
+/**
+ * Struct for the event list
+ */
+
+struct events_t {
+	char event[EVENT_LENGTH];
+	subscriber_t *subscribers = NULL;
+	events_t *next = NULL;
+};
+
+events_t *firstEvent = NULL; /**< The first element in the event list */
+
+/**
+ * Finds the specific event in the list and returns it
+ * @param event Event name
+ * @return Pointer to event, NULL if not found
+ */
+
+events_t * event_find(char *event) {
+	events_t *tmp = firstEvent;
+
+	while (tmp) {
+		if (!strcmp(tmp->event, event))
+			return tmp;
+		tmp = tmp->next;
+	}
+	return NULL;
+}
+
+/**
+ * Finds the last event in the list and returns it
+ * @return Pointer to event, NULL if no event in list
+ */
+
+events_t * event_findlast() {
+	events_t *tmp = firstEvent;
+
+	while (tmp) {
+		if (!tmp->next)
+			return tmp;
+		tmp = tmp->next;
+	}
+	return NULL;
+}
+
+/**
+ * Adds a subscriber to an event
+ * @param event Target event
+ * @param handler Event handler
+ */
+
+void addSubscriber(events_t *event, void (*handler)(event_t *)) {
+	subscriber_t *newSub = (subscriber_t *) malloc(sizeof(subscriber_t)); // Cast is neccesarry in c++
+	if (!newSub)
+		logger_error("Not enough memory\n");
+	newSub->handler = handler;
+	newSub->next = NULL;
+
+	if (event->subscribers) {
+		subscriber_t *tmp = event->subscribers;
+		while (tmp->next) {
+			tmp = tmp->next;
+		}
+
+		tmp->next = newSub;
+	} else {
+		event->subscribers = newSub;
+	}
+}
+
+/**
+ * Adds a subscriber to an event
+ * @param event Target event name
+ * @param handler Event handler
+ */
+
+void event_subscribe(const char *event, void (*handler)(event_t *)) {
+	//TODO change event name to a typedef enum or similar
+	events_t *newEvent = (events_t *) malloc(sizeof(events_t));
+	if (!newEvent)
+		logger_error("Not enough memory\n");
+	newEvent->next = NULL;
+	newEvent->subscribers = NULL;
+	strcpy(newEvent->event, event);
+	addSubscriber(newEvent, handler);
+	events_t *tmp = event_findlast();
+	if (tmp)
+		tmp->next = newEvent;
+	else
+		firstEvent = newEvent;
+	logger(V_HAL, "New subscriber to event \"%s\"\n", event);
+}
+
+/**
+ * Triggers a specific event
+ * @param event Event data
+ */
+
+void event_trigger(event_t *event) {
+	events_t *tmp = event_find(event->event);
+	if (!tmp) {
+		logger(V_HAL, "No subscribers to event \"%s\"\n", event->event);
+		return;
+	}
+
+	subscriber_t *sub = tmp->subscribers;
+
+	while (sub) {
+		sub->handler(event);
+		sub = sub->next;
+	}
+
+	logger(V_HAL, "Triggered event \"%s\"\n", event->event);
+}
+
+/**
+ * Triggers a specific event
+ * @param event Name of event
+ */
+
+void event_trigger(char *event) {
+	event_t e;
+	e.event = event;
+	event_trigger(&e);
+}
+
+/**
+ * Triggers a specific event
+ * @param event Name of event
+ */
+
+void event_trigger(const char *event) {
+	event_t e;
+	e.event = (char*)event;
+	event_trigger(&e);
+}
+
+/**
+ * Triggers a specific event
+ * @param event Name of event
+ * @param data Pointer to some data
+ * @param len Length of data
+ */
+
+void event_trigger(char *event, void *data, int len) {
+	event_t e;
+	e.event = event;
+	e.data = data;
+	e.len = len;
+	event_trigger(&e);
+}
+
+/**
+ * Triggers a specific event
+ * @param event Name of event
+ * @param data Pointer to some data
+ * @param len Length of data
+ */
+
+void event_trigger(const char *event, void *data, int len) {
+	event_trigger((char *) event, data, len);
+}
+

+ 27 - 0
CoffeeCode/events.h

@@ -0,0 +1,27 @@
+/*
+ * events.h
+ *
+ *  Created on: Jan 5, 2018
+ *      Author: Philipp Hinz
+ */
+
+#ifndef EVENTS_H_
+#define EVENTS_H_
+
+#define EVENT_LENGTH	20 /*< Maximum length of an event */
+
+struct event_t {
+	char *event;
+	void *data = NULL;
+	int len = 0;
+};
+
+void event_subscribe(const char *event, void (*handler)(event_t *));
+void event_trigger(event_t *event);
+void event_trigger(char *event);
+void event_trigger(const char *event);
+void event_trigger(const char *event, void *data, int len);
+void event_trigger(char *event, void *data, int len);
+
+
+#endif /* EVENTS_H_ */

+ 8 - 5
CoffeeCode/global.h

@@ -17,19 +17,22 @@
 #define TIMER_DELAY_US	50000	// Basic timer delay in us
 // SQL config
 
-#define SQL_DATABASE	"nodes.sqlite"
+#define SQL_DATABASE	"coffee.sqlite"
 
 // Global variables
 
+extern int verbose;
 extern bool optDate, optPower;
-extern pthread_mutex_t mutex;
-extern int lcd;
+extern pthread_mutex_t mutex_spi, mutex_i2c, mutex_logger;
+extern pthread_t thread[];
 
 
 // Thread IDs
 #define THREAD_MAIN 	0
-#define THREAD_TEST		1
-#define THREAD_CAN		2
+#define THREAD_STRIPE	1
+#define THREAD_DISPLAY	2
+#define THREAD_COFFEE	3
+#define THREAD_SERVER 	4
 
 
 void killThread(int threadid, int sig);

+ 265 - 34
CoffeeCode/hal.cpp

@@ -2,53 +2,80 @@
  * hal.cpp
  *
  *  Created on: Aug 3, 2016
- *      Author: Philipp Hinz
+ *      Author: Philipp Hinz, Sebastian Vendt
  */
 #include <wiringPi.h>
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
-#include "lcd.h"
+#include <signal.h>
+#include <ctime>
 #include "hal.h"
 #include "global.h"
 #include "logger.h"
+#include "timer.h"
 
-int flowcnt = 0;
+volatile int flowcnt = 0;
 
-/*
+int Int0Time, Int1Time;
+bool flagIgnoreRlsInt0, flagIgnoreRlsInt1;
+
+timer Int0Timer(&halInt0TimerHandler);
+timer Int1Timer(&halInt1TimerHandler);
+
+clock_t heatingCycle[2] = {0, 0};
+
+/**
  * Initializes HAL
  */
+
 void halInit(void) {
-	if (optPower) {
-		halRelaisOn(RELAIS_HEAT);
-		halRelaisOff(RELAIS_PUMP);
-		halRelaisOn(RELAIS_POWER);
-	} else {
-		halRelaisOff(RELAIS_HEAT);
-		halRelaisOff(RELAIS_PUMP);
-		halRelaisOff(RELAIS_POWER);
-	}
 	pinMode(RELAIS_HEAT, OUTPUT);
 	pinMode(RELAIS_PUMP, OUTPUT);
 	pinMode(RELAIS_POWER, OUTPUT);
-	pinMode(HAL_INT0, INPUT);
-	pinMode(HAL_INT1, INPUT);
-	pinMode(HAL_FLOW, INPUT);
-	if (wiringPiISR(HAL_INT0, INT_EDGE_FALLING, &halInt0) < 0) {
+	pinMode(PIN_PRESSURE_CTRL, INPUT);
+	pinMode(PIN_PROXIMITY_SENSOR, INPUT);
+	pinMode(PIN_INT0, INPUT);
+	pinMode(PIN_INT1, INPUT);
+	pinMode(PIN_FLOW, INPUT);
+
+	if (optPower) {
+		halMachineOn();
+	} else {
+		halMachineOff();
+	}
+
+	Int0Timer.setDivider(4); //200ms
+	Int1Timer.setDivider(4);
+	Int0Time = 0;
+	Int1Time = 0;
+
+	flagIgnoreRlsInt0 = false;
+	flagIgnoreRlsInt1 = false;
+
+	if (wiringPiISR(PIN_INT0, INT_EDGE_BOTH, &halInt0) < 0) {
 		logger_error("Unable to setup ISR0: %s\n", strerror(errno));
 		return;
 	}
-	if (wiringPiISR(HAL_INT1, INT_EDGE_FALLING, &halInt1) < 0) {
+	if (wiringPiISR(PIN_INT1, INT_EDGE_BOTH, &halInt1) < 0) {
 		logger_error("Unable to setup ISR1: %s\n", strerror(errno));
 		return;
 	}
-	if (wiringPiISR(HAL_FLOW, INT_EDGE_FALLING, &halIntFlow) < 0) {
+	if (wiringPiISR(PIN_FLOW, INT_EDGE_FALLING, &halIntFlow) < 0) {
 		logger_error("Unable to setup ISRFLOW: %s\n", strerror(errno));
 		return;
 	}
+	if (wiringPiISR(PIN_PRESSURE_CTRL, INT_EDGE_BOTH, &halIntPressure) < 0) {
+		logger_error("Unable to setup ISRPressure: %s\n", strerror(errno));
+		return;
+	}
+	if (wiringPiISR(PIN_PROXIMITY_SENSOR, INT_EDGE_BOTH, &halIntProximity) < 0) {
+		logger_error("Unable to setup ISRProximity: %s\n", strerror(errno));
+		return;
+	}
 }
 
-/*
+/**
  * Switches relais on
  * @param relais Relais ID
  */
@@ -56,7 +83,7 @@ void halRelaisOn(int relais) {
 	halRelaisSet(relais, LOW);
 }
 
-/*
+/**
  * Switches relais off
  * @param relais Relais ID
  */
@@ -64,7 +91,7 @@ void halRelaisOff(int relais) {
 	halRelaisSet(relais, HIGH);
 }
 
-/*
+/**
  * Switches relais to state
  * @param relais Relais ID
  * @param state LOW(0) or HIGH(1)
@@ -81,34 +108,238 @@ void halRelaisSet(int relais, int state) {
 	}
 }
 
+/**
+ * Returns the state of the relais relais
+ * Returns HIGH when Relais is ON
+ * @param relais Relais ID
+ */
+int halGetRelaisState(int relais) {
+	switch (relais) {
+	case RELAIS_POWER:
+	case RELAIS_HEAT:
+	case RELAIS_PUMP:
+		return !digitalRead(relais);
+		break;
+	}
+	return -1;
+}
+
+/**
+ * Interrupt routine for Int0 (Top button)
+ */
 void halInt0(void) {
-	//halRelaisOn(RELAIS_POWER);
-	logger(V_BASIC, "Int0 triggered\n");
-	flowcnt = 0;
-	halRelaisOn(RELAIS_PUMP);
+	if (halGetInt0()) { //released
+		logger(V_HAL, "Int0 released\n");
+		if (flagIgnoreRlsInt0) {
+			flagIgnoreRlsInt0 = false;
+		} else {
+			Int0Time = 0;
+			Int0Timer.stop();
+			halSendSignal(SigInt0Rls);
+		}
+	} else { //pressed
+		logger(V_HAL, "Int0 pushed\n");
+		halSendSignal(SigInt0Psh);
+		Int0Time = 0;
+		Int0Timer.start();
+	}
 }
 
+/**
+ *
+ */
+void halInt0TimerHandler(void) {
+	Int0Time += 200;
+	if (Int0Time >= (TIME_BUTTONLONGPRESS * 1000)) {
+		halSendSignal(SigInt0RlsLong);
+		flagIgnoreRlsInt0 = true;
+		Int0Time = 0;
+		Int0Timer.stop();
+	}
+}
+
+/**
+ * Interrupt routine for Int1 (Bottom button)
+ */
 void halInt1(void) {
-	//halRelaisOff(RELAIS_POWER);
-	logger(V_BASIC, "Int1 triggered\n");
-	flowcnt = 0;
+	if (halGetInt1()) {
+		logger(V_HAL, "Int1 released\n");
+		if (flagIgnoreRlsInt1) {
+			flagIgnoreRlsInt1 = false;
+		} else {
+			Int0Time = 0;
+			Int0Timer.stop();
+			halSendSignal(SigInt1Rls);
+		}
+	} else {
+		logger(V_HAL, "Int1 pushed\n");
+		halSendSignal(SigInt1Psh);
+		Int1Time = 0;
+		Int1Timer.start();
+	}
 }
 
+/*
+ *
+ */
+void halInt1TimerHandler(void) {
+	Int1Time += 200;
+	if (Int1Time >= (TIME_BUTTONLONGPRESS * 1000)) {
+		halSendSignal(SigInt1RlsLong);
+		flagIgnoreRlsInt1 = true;
+		Int1Time = 0;
+		Int1Timer.stop();
+	}
+}
+
+/**
+ * Interrupt routine for the flow sensor
+ * It counts the edgdes and stores the value in flowcnt
+ */
 void halIntFlow(void) {
 	//halRelaisOff(RELAIS_POWER);
-	logger(V_BASIC, "IntFlow triggered #%d total: %.2fml\n", flowcnt, halGetFlow());
-	lcdPosition(lcd, 0, 0);
-	lcdPrintf(lcd, "ml = %.2f   ", halGetFlow());
+	//logger(V_HAL, "IntFlow triggered #%d total: %.2fml\n", flowcnt, halGetFlow());
 	if (flowcnt == 99) {
 		halRelaisOff(RELAIS_PUMP);
 	}
 	flowcnt++;
 }
 
-/*
+/**
+ * Interrupt routine for the pressure control
+ * It captures the time at closing point and opening point
+ * Reading heating time via the getHeatingTime function
+ */
+void halIntPressure(void) {
+	logger(V_HAL, "IntPressure Control triggered\n");
+	if (halIsHeating()) {
+		heatingCycle[0] = clock();
+		halSendSignal(SigPressCls);
+	} else {
+		heatingCycle[1] = clock();
+		halSendSignal(SigPressOpn);
+	}
+}
+
+/**
+ * Function to read the heating time in sec
+ * If called during a heating process, it returns the time elapsed since the heating started
+ * If called after a heating process, it returns the total time elapes during the heating cycle
+ */
+uint64_t halgetHeatingTime(void){
+	if (halIsHeating()) {
+		return (uint64_t)(clock() - heatingCycle[0]) / CLOCKS_PER_SEC;
+	}
+	else {
+		return (uint64_t)(heatingCycle[1] - heatingCycle[0]) / CLOCKS_PER_SEC;
+	}
+}
+
+/**
+ * Method to handle toggle of the proximity sensor
+ */
+void halIntProximity(void) {
+	logger(V_HAL, "IntProximity triggered\n");
+	return;
+	if (halProxSensorCovered()) {
+		halSendSignal(SigProxCvrd);
+	} else {
+		halSendSignal(SigProxOpn);
+	}
+}
+
+/**
  * Returns total flow trough sensor in ml
  */
 float halGetFlow(void) {
-	return flowcnt*FLOW_ML_PULSE;
+	return flowcnt * FLOW_ML_PULSE;
+}
+
+/**
+ * Resets the Flow counter
+ */
+void halResetFlow(void) {
+	logger(V_HAL, "Flow counter reset, amount so far: %.2f ml\n", halGetFlow());
+	flowcnt = 0;
 }
 
+/**
+ * Reads the status of the Pressure Control
+ * @return 1 (true) for closed Pressure Control(heating) and 0 (false) for open
+ */
+bool halIsHeating(void) {
+	if (digitalRead(PIN_PRESSURE_CTRL) == 0) {
+		return true;
+	} else {
+		return false;
+	}
+}
+
+/**
+ * Returns status of the proximity switch
+ * @return 1 if the proximity switch is covered and 0 if uncovered
+ */
+bool halProxSensorCovered(void) {
+	if(digitalRead(PIN_PROXIMITY_SENSOR) == 0){
+	 return false;
+	 } else {
+	 return true;
+	 }
+}
+
+/**
+ * Returns the value of the top button Int0 (low active)
+ * @return LOW or HIGH
+ */
+int halGetInt0(void) {
+	return digitalRead(PIN_INT0);
+}
+
+/**
+ * Returns the value of the bottom button Int1 (low active)
+ * @return LOW or HIGH
+ */
+int halGetInt1(void) {
+	return digitalRead(PIN_INT1);
+}
+
+/**
+ * send Signal to coffee thread
+ * @param val Integer value assigned to signal
+ */
+void halSendSignal(HalSig val) {
+	sigval value = { 0 };
+	value.sival_int = (int) val;
+
+	try {
+		if (pthread_sigqueue(thread[THREAD_COFFEE], SIGUSR2, value)) {
+			logger_error("Failed to queue signal %d %s\n", val,
+					strerror(errno));
+			//No Signals reach the state machine anymore...
+			exit(EXIT_FAILURE);
+		}
+	} catch (int e) {
+		logger_error("Whoops.. %d\n", e);
+	}
+
+}
+
+/**
+ * Turn machine on
+ */
+void halMachineOn(void) {
+	halRelaisOn(RELAIS_HEAT);
+	halRelaisOff(RELAIS_PUMP);
+	halRelaisOn(RELAIS_POWER);
+	logger(V_HAL, "Turning machine on\n");
+}
+
+/**
+ * Turn machine off
+ */
+void halMachineOff(void) {
+	halRelaisOff(RELAIS_HEAT);
+	halRelaisOff(RELAIS_PUMP);
+	halRelaisOff(RELAIS_POWER);
+	logger(V_HAL, "Turning machine off\n");
+}

+ 52 - 5
CoffeeCode/hal.h

@@ -11,21 +11,68 @@
 #define RELAIS_HEAT		29
 #define RELAIS_PUMP		25
 #define RELAIS_POWER	28
+#define PIN_PRESSURE_CTRL	7
+#define PIN_PROXIMITY_SENSOR	6
+#define PIN_INT0		2 // Top button
+#define PIN_INT1		0 // Bottom button
+#define PIN_FLOW		3 // Flow sensor
+#define FLOW_ML_PULSE	(1000.0/990) // Flow sensor: volume (ml) per pulse
 
-#define HAL_INT0		0 // buttom button
-#define HAL_INT1		2 // top button
-#define HAL_FLOW		3 // flow sensor
+#define TIME_BUTTONLONGPRESS	3	//Time in s until a Signal for a long pressed button is sent
+/*
+ * Explanation for the signal levels
+ * SigInt_Psh 			Button is pushed
+ * SigInt_Rls 		Button is released
+ * SigInt_RlsLong	Button is pressed for more than TIME_BUTTONLONGPRESS seconds
+ * SigPressCls 		Pressure control is closed, System is heating
+ * SigPressOpn		Pressure control is open, heating is off
+ * SigProxOpn		Proximity Sensor is uncovered
+ * SigProxCvrd	Proximity Sensor is covered
+ */
 
-#define FLOW_ML_PULSE	(1000.0/990) // Flow sensor: volume (ml) per pulse
+/*
+ * Functions of the buttons, the letter in brackets defines if the event is triggered
+ * on push(P), release(R) or long pressing(RLong) of the button
+ * TOP Button: Turn machine on(R), start brewing(P),
+ *
+ * BOTTOM button: Stop brewing immediately(P), Turn machine off(RLong),
+ */
+enum HalSig {
+	SigInt0Psh = 1,
+	SigInt0Rls = 2,
+	SigInt0RlsLong = 3,
+	SigInt1Psh = 4,
+	SigInt1Rls = 5,
+	SigInt1RlsLong = 6,
+	SigPressCls = 7,
+	SigPressOpn = 8,
+	SigProxOpn = 9,
+	SigProxCvrd = 10,
+	SigBrewOn = 11,
+	SigBrewOff = 12
+};
 
 void halInit(void);
 void halRelaisOn(int relais);
 void halRelaisOff(int relais);
 void halRelaisSet(int relais, int state);
+int halGetRelaisState(int relais);
 void halInt0(void);
 void halInt1(void);
 void halIntFlow(void);
+void halIntPressure(void);
+uint64_t halgetHeatingTime(void);
+void halIntProximity(void);
 float halGetFlow(void);
-
+void halResetFlow(void);
+bool halIsHeating(void);
+bool halProxSensorCovered(void);
+int halGetInt0(void);
+int halGetInt1(void);
+void halSendSignal(HalSig value);
+void halMachineOn(void);
+void halMachineOff(void);
+void halInt0TimerHandler(void);
+void halInt1TimerHandler(void);
 
 #endif /* HAL_H_ */

+ 96 - 0
CoffeeCode/html/README_8md.html

@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: README.md File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">README.md File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 104 - 0
CoffeeCode/html/annotated.html

@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structures</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdisplay__string__t.html" target="_self">display_string_t</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstripe__color.html" target="_self">stripe_color</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtimer.html" target="_self">timer</a></td><td class="desc">Timer Class This class allows the creation of multiple timers that are based by a divider on a single system timer </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

BIN
CoffeeCode/html/arrowdown.png


BIN
CoffeeCode/html/arrowright.png


BIN
CoffeeCode/html/bc_s.png


BIN
CoffeeCode/html/bdwn.png


+ 108 - 0
CoffeeCode/html/classes.html

@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Data Structure Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structure Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a></div>
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;d&#160;&#160;</div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;s&#160;&#160;</div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_t"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;t&#160;&#160;</div></td></tr></table>
+</td><td></td></tr>
+<tr><td></td></tr>
+<tr><td valign="top"><a class="el" href="structdisplay__string__t.html">display_string_t</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structstripe__color.html">stripe_color</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtimer.html">timer</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a></div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 312 - 0
CoffeeCode/html/classtimer.html

@@ -0,0 +1,312 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: timer Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">timer Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Timer Class This class allows the creation of multiple timers that are based by a divider on a single system timer.  
+ <a href="classtimer.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="timer_8h_source.html">timer.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a863dd9a194499a5ebbaf6937969916f2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtimer.html#a863dd9a194499a5ebbaf6937969916f2">timer</a> (void(*handler)(void))</td></tr>
+<tr class="memdesc:a863dd9a194499a5ebbaf6937969916f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timer constructor Depending on the call of the constructor the handler will be called as thread or not.  <a href="#a863dd9a194499a5ebbaf6937969916f2">More...</a><br /></td></tr>
+<tr class="separator:a863dd9a194499a5ebbaf6937969916f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36730b19460d9576fe6d7535f969105a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtimer.html#a36730b19460d9576fe6d7535f969105a">timer</a> (void *(*handler)(void *))</td></tr>
+<tr class="separator:a36730b19460d9576fe6d7535f969105a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a4b48605728320ce7a5a825e34e16f2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtimer.html#a0a4b48605728320ce7a5a825e34e16f2">setDivider</a> (int divider)</td></tr>
+<tr class="memdesc:a0a4b48605728320ce7a5a825e34e16f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">sets the divider for this timer (based on system timer)  <a href="#a0a4b48605728320ce7a5a825e34e16f2">More...</a><br /></td></tr>
+<tr class="separator:a0a4b48605728320ce7a5a825e34e16f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d5386a682a23df5c6a841ce8fc55bd4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtimer.html#a3d5386a682a23df5c6a841ce8fc55bd4">getDivider</a> ()</td></tr>
+<tr class="memdesc:a3d5386a682a23df5c6a841ce8fc55bd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">reads the timer divider  <a href="#a3d5386a682a23df5c6a841ce8fc55bd4">More...</a><br /></td></tr>
+<tr class="separator:a3d5386a682a23df5c6a841ce8fc55bd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d9f6d9f98d51534be127d57f497b345"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtimer.html#a7d9f6d9f98d51534be127d57f497b345">call</a> ()</td></tr>
+<tr class="memdesc:a7d9f6d9f98d51534be127d57f497b345"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calls the timer handler if enabled.  <a href="#a7d9f6d9f98d51534be127d57f497b345">More...</a><br /></td></tr>
+<tr class="separator:a7d9f6d9f98d51534be127d57f497b345"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9aa894a57748b2bdf3adce46f5736794"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtimer.html#a9aa894a57748b2bdf3adce46f5736794">start</a> ()</td></tr>
+<tr class="memdesc:a9aa894a57748b2bdf3adce46f5736794"><td class="mdescLeft">&#160;</td><td class="mdescRight">enables the timer  <a href="#a9aa894a57748b2bdf3adce46f5736794">More...</a><br /></td></tr>
+<tr class="separator:a9aa894a57748b2bdf3adce46f5736794"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3218d61649e284071544b17c8c915ecc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtimer.html#a3218d61649e284071544b17c8c915ecc">stop</a> ()</td></tr>
+<tr class="memdesc:a3218d61649e284071544b17c8c915ecc"><td class="mdescLeft">&#160;</td><td class="mdescRight">disables the timer  <a href="#a3218d61649e284071544b17c8c915ecc">More...</a><br /></td></tr>
+<tr class="separator:a3218d61649e284071544b17c8c915ecc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbb117c0ae32aa48df5df60328e224f9"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtimer.html#abbb117c0ae32aa48df5df60328e224f9">isActive</a> ()</td></tr>
+<tr class="memdesc:abbb117c0ae32aa48df5df60328e224f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the timers active state.  <a href="#abbb117c0ae32aa48df5df60328e224f9">More...</a><br /></td></tr>
+<tr class="separator:abbb117c0ae32aa48df5df60328e224f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a296c5e65582e19eaf61ae0bffa4071dc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtimer.html">timer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtimer.html#a296c5e65582e19eaf61ae0bffa4071dc">next</a></td></tr>
+<tr class="memdesc:a296c5e65582e19eaf61ae0bffa4071dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">contains the pointer on the next timer element of the list  <a href="#a296c5e65582e19eaf61ae0bffa4071dc">More...</a><br /></td></tr>
+<tr class="separator:a296c5e65582e19eaf61ae0bffa4071dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Timer Class This class allows the creation of multiple timers that are based by a divider on a single system timer. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="a863dd9a194499a5ebbaf6937969916f2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">timer::timer </td>
+          <td>(</td>
+          <td class="paramtype">void(*)(void)&#160;</td>
+          <td class="paramname"><em>handler</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Timer constructor Depending on the call of the constructor the handler will be called as thread or not. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*handler</td><td>target pointer to the method </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a36730b19460d9576fe6d7535f969105a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">timer::timer </td>
+          <td>(</td>
+          <td class="paramtype">void *(*)(void *)&#160;</td>
+          <td class="paramname"><em>handler</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a7d9f6d9f98d51534be127d57f497b345"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void timer::call </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Calls the timer handler if enabled. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3d5386a682a23df5c6a841ce8fc55bd4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int timer::getDivider </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>reads the timer divider </p>
+<dl class="section return"><dt>Returns</dt><dd>timer divider </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abbb117c0ae32aa48df5df60328e224f9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool timer::isActive </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the timers active state. </p>
+<dl class="section return"><dt>Returns</dt><dd>true if active </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0a4b48605728320ce7a5a825e34e16f2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void timer::setDivider </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>divider</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>sets the divider for this timer (based on system timer) </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">divider</td><td>integer timer divider </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a9aa894a57748b2bdf3adce46f5736794"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void timer::start </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>enables the timer </p>
+
+</div>
+</div>
+<a class="anchor" id="a3218d61649e284071544b17c8c915ecc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void timer::stop </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>disables the timer </p>
+
+</div>
+</div>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a296c5e65582e19eaf61ae0bffa4071dc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtimer.html">timer</a>* timer::next</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>contains the pointer on the next timer element of the list </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="timer_8h_source.html">timer.h</a></li>
+<li><a class="el" href="timer_8cpp.html">timer.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

BIN
CoffeeCode/html/closed.png


+ 483 - 0
CoffeeCode/html/coffee_8cpp.html

@@ -0,0 +1,483 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: coffee.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">coffee.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br />
+<code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;string.h&gt;</code><br />
+<code>#include &lt;errno.h&gt;</code><br />
+<code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &lt;wiringPi.h&gt;</code><br />
+<code>#include &lt;pthread.h&gt;</code><br />
+<code>#include &lt;unistd.h&gt;</code><br />
+<code>#include &lt;iostream&gt;</code><br />
+<code>#include &lt;csignal&gt;</code><br />
+<code>#include &lt;time.h&gt;</code><br />
+<code>#include &lt;ctime&gt;</code><br />
+<code>#include &quot;<a class="el" href="coffee_8h_source.html">coffee.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="hal_8h_source.html">hal.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="logger_8h_source.html">logger.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="timer_8h_source.html">timer.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="database_8h_source.html">database.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="display_8h_source.html">display.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:afed8c565650f5808745b6c6c7d45462c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#afed8c565650f5808745b6c6c7d45462c">coffeeThread</a> (void *threadid)</td></tr>
+<tr class="memdesc:afed8c565650f5808745b6c6c7d45462c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread for the finite state machine It represents the current state of the machine and handles signals coming from the pressure control, buttons, the brew switch and the proximity sensor.  <a href="#afed8c565650f5808745b6c6c7d45462c">More...</a><br /></td></tr>
+<tr class="separator:afed8c565650f5808745b6c6c7d45462c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44f0ebaec249d2ce6316c1bddff54d79"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a44f0ebaec249d2ce6316c1bddff54d79">coffeeHandler</a> (int signum, siginfo_t *siginfo, void *context)</td></tr>
+<tr class="memdesc:a44f0ebaec249d2ce6316c1bddff54d79"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for the Signal send to this thread It saves the type of signal received and tracks the time between a push and release event of up to 4 signals The time is stored in the HalEvent variable when a release event is received.  <a href="#a44f0ebaec249d2ce6316c1bddff54d79">More...</a><br /></td></tr>
+<tr class="separator:a44f0ebaec249d2ce6316c1bddff54d79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3290268b8fcbba9a6b642b68860a8503"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a3290268b8fcbba9a6b642b68860a8503">getSigValue</a> (void)</td></tr>
+<tr class="memdesc:a3290268b8fcbba9a6b642b68860a8503"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns the Signal value from the last received Signal and clears the variable  <a href="#a3290268b8fcbba9a6b642b68860a8503">More...</a><br /></td></tr>
+<tr class="separator:a3290268b8fcbba9a6b642b68860a8503"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63f25020d1567a2d5e03a9a59e75a0fc"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a63f25020d1567a2d5e03a9a59e75a0fc">SigValueEmpty</a> (void)</td></tr>
+<tr class="separator:a63f25020d1567a2d5e03a9a59e75a0fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4d9681385a3f678dee40458cf55dca0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#ae4d9681385a3f678dee40458cf55dca0">changeState</a> (int newState)</td></tr>
+<tr class="memdesc:ae4d9681385a3f678dee40458cf55dca0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Changes the state of the machine to newState prints the change to the logger.  <a href="#ae4d9681385a3f678dee40458cf55dca0">More...</a><br /></td></tr>
+<tr class="separator:ae4d9681385a3f678dee40458cf55dca0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc0b4325b7cabe49f623d5e44aaa37d7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#afc0b4325b7cabe49f623d5e44aaa37d7">getState</a> (void)</td></tr>
+<tr class="memdesc:afc0b4325b7cabe49f623d5e44aaa37d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current state of the FSM.  <a href="#afc0b4325b7cabe49f623d5e44aaa37d7">More...</a><br /></td></tr>
+<tr class="separator:afc0b4325b7cabe49f623d5e44aaa37d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66d75a676639d0f8e56c0efe76547482"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a66d75a676639d0f8e56c0efe76547482">brewTimeHandler</a> (void)</td></tr>
+<tr class="memdesc:a66d75a676639d0f8e56c0efe76547482"><td class="mdescLeft">&#160;</td><td class="mdescRight">Counter for the brew time refresh every 200ms.  <a href="#a66d75a676639d0f8e56c0efe76547482">More...</a><br /></td></tr>
+<tr class="separator:a66d75a676639d0f8e56c0efe76547482"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c611f1d81caf2f51c8b77b307028e4d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a5c611f1d81caf2f51c8b77b307028e4d">coffeeTerminate</a> (void)</td></tr>
+<tr class="memdesc:a5c611f1d81caf2f51c8b77b307028e4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">handles program termination  <a href="#a5c611f1d81caf2f51c8b77b307028e4d">More...</a><br /></td></tr>
+<tr class="separator:a5c611f1d81caf2f51c8b77b307028e4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a343324d9863aa6eb3d7e2a183aec4a09"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a343324d9863aa6eb3d7e2a183aec4a09">coffeeBrew</a> (void)</td></tr>
+<tr class="memdesc:a343324d9863aa6eb3d7e2a183aec4a09"><td class="mdescLeft">&#160;</td><td class="mdescRight">Brewing process.  <a href="#a343324d9863aa6eb3d7e2a183aec4a09">More...</a><br /></td></tr>
+<tr class="separator:a343324d9863aa6eb3d7e2a183aec4a09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c29bb32c4f3971f78dd515e568042c3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a7c29bb32c4f3971f78dd515e568042c3">coffeeIncreaseBrewCounter</a> (void)</td></tr>
+<tr class="separator:a7c29bb32c4f3971f78dd515e568042c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a11b81e21f5769fc6b0e55ecbac8d3976"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a11b81e21f5769fc6b0e55ecbac8d3976">coffeeIncreaseHeatingTime</a> (uint64_t <a class="el" href="coffee_8cpp.html#ac88c1bf95effb2aeddc71b1c2cf9034b">heatingTime</a>)</td></tr>
+<tr class="separator:a11b81e21f5769fc6b0e55ecbac8d3976"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a89f234133d3efe315836311cbf21c64b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a></td></tr>
+<tr class="separator:a89f234133d3efe315836311cbf21c64b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a959eceab8fe67a33076aa42e877441a5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a959eceab8fe67a33076aa42e877441a5">sigValue</a></td></tr>
+<tr class="separator:a959eceab8fe67a33076aa42e877441a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3756d547bc4c41a306650f4f4bbb930c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a3756d547bc4c41a306650f4f4bbb930c">brewTime</a></td></tr>
+<tr class="separator:a3756d547bc4c41a306650f4f4bbb930c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25ddb2af4585729d37dab1e1b5bb0b06"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtimer.html">timer</a> brewTimer &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a25ddb2af4585729d37dab1e1b5bb0b06">brewTimeHandler</a></td></tr>
+<tr class="separator:a25ddb2af4585729d37dab1e1b5bb0b06"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1426cd37aa49a96e7bcf12d26cde1a0d"><td class="memItemLeft" align="right" valign="top">clock_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a1426cd37aa49a96e7bcf12d26cde1a0d">beginHeating</a></td></tr>
+<tr class="separator:a1426cd37aa49a96e7bcf12d26cde1a0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1aaa11435974ab87937d68b01ee71074"><td class="memItemLeft" align="right" valign="top">clock_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#a1aaa11435974ab87937d68b01ee71074">endHeating</a></td></tr>
+<tr class="separator:a1aaa11435974ab87937d68b01ee71074"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac88c1bf95effb2aeddc71b1c2cf9034b"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8cpp.html#ac88c1bf95effb2aeddc71b1c2cf9034b">heatingTime</a></td></tr>
+<tr class="separator:ac88c1bf95effb2aeddc71b1c2cf9034b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a66d75a676639d0f8e56c0efe76547482"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void brewTimeHandler </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Counter for the brew time refresh every 200ms. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae4d9681385a3f678dee40458cf55dca0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void changeState </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>newState</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Changes the state of the machine to newState prints the change to the logger. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">newState</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a343324d9863aa6eb3d7e2a183aec4a09"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeBrew </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Brewing process. </p>
+
+</div>
+</div>
+<a class="anchor" id="a44f0ebaec249d2ce6316c1bddff54d79"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeHandler </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>signum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">siginfo_t *&#160;</td>
+          <td class="paramname"><em>siginfo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>context</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Handler for the Signal send to this thread It saves the type of signal received and tracks the time between a push and release event of up to 4 signals The time is stored in the HalEvent variable when a release event is received. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">signum</td><td></td></tr>
+    <tr><td class="paramname">siginfo</td><td></td></tr>
+    <tr><td class="paramname">context</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a7c29bb32c4f3971f78dd515e568042c3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeIncreaseBrewCounter </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11b81e21f5769fc6b0e55ecbac8d3976"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeIncreaseHeatingTime </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>heatingTime</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5c611f1d81caf2f51c8b77b307028e4d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeTerminate </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>handles program termination </p>
+
+</div>
+</div>
+<a class="anchor" id="afed8c565650f5808745b6c6c7d45462c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* coffeeThread </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>threadid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Thread for the finite state machine It represents the current state of the machine and handles signals coming from the pressure control, buttons, the brew switch and the proximity sensor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">threadid</td><td>the ID of the thread </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a3290268b8fcbba9a6b642b68860a8503"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int getSigValue </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>returns the Signal value from the last received Signal and clears the variable </p>
+<dl class="section return"><dt>Returns</dt><dd>value sent with the last signal </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="afc0b4325b7cabe49f623d5e44aaa37d7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int getState </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the current state of the FSM. </p>
+
+</div>
+</div>
+<a class="anchor" id="a63f25020d1567a2d5e03a9a59e75a0fc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool SigValueEmpty </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a1426cd37aa49a96e7bcf12d26cde1a0d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">clock_t beginHeating</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3756d547bc4c41a306650f4f4bbb930c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int brewTime</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a25ddb2af4585729d37dab1e1b5bb0b06"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtimer.html">timer</a> brewTimer&amp; brewTimeHandler</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1aaa11435974ab87937d68b01ee71074"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">clock_t endHeating</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac88c1bf95effb2aeddc71b1c2cf9034b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double heatingTime</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a959eceab8fe67a33076aa42e877441a5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sigValue</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a89f234133d3efe315836311cbf21c64b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int state</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 538 - 0
CoffeeCode/html/coffee_8h.html

@@ -0,0 +1,538 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: coffee.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">coffee.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;csignal&gt;</code><br />
+</div>
+<p><a href="coffee_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0cc0d45e13bc83065d45df9d3d1dc887"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a0cc0d45e13bc83065d45df9d3d1dc887">STATE_OFF</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a0cc0d45e13bc83065d45df9d3d1dc887"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab87d7787dc7a2c2afc6d7853353d7003"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#ab87d7787dc7a2c2afc6d7853353d7003">STATE_HEATING</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:ab87d7787dc7a2c2afc6d7853353d7003"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af74b21e82c0f8fbf7f697db071d420a0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#af74b21e82c0f8fbf7f697db071d420a0">STATE_INITALHEATING</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:af74b21e82c0f8fbf7f697db071d420a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafff27c7165f059a969fe60fee51f683"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#aafff27c7165f059a969fe60fee51f683">STATE_IDLE</a>&#160;&#160;&#160;3</td></tr>
+<tr class="separator:aafff27c7165f059a969fe60fee51f683"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7a56332694aec763a9f8028113a07199"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a7a56332694aec763a9f8028113a07199">STATE_BREW</a>&#160;&#160;&#160;4</td></tr>
+<tr class="separator:a7a56332694aec763a9f8028113a07199"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af696741daae3faab28c27755188fd828"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#af696741daae3faab28c27755188fd828">STATE_BREWMANUAL</a>&#160;&#160;&#160;5</td></tr>
+<tr class="separator:af696741daae3faab28c27755188fd828"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3a3e5a95a5ba91345c6a1b6f7e06c737"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a3a3e5a95a5ba91345c6a1b6f7e06c737">STATE_CLEANING</a>&#160;&#160;&#160;6</td></tr>
+<tr class="separator:a3a3e5a95a5ba91345c6a1b6f7e06c737"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7bf0c086c7c41c12cc63324327932d91"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a7bf0c086c7c41c12cc63324327932d91">STATE_ERROR</a>&#160;&#160;&#160;7</td></tr>
+<tr class="separator:a7bf0c086c7c41c12cc63324327932d91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8bfbae67917bc4a69ae336c65b3aba2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#ad8bfbae67917bc4a69ae336c65b3aba2">AMOUNT_PREINFUSION</a>&#160;&#160;&#160;3</td></tr>
+<tr class="separator:ad8bfbae67917bc4a69ae336c65b3aba2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad4b00557d847ecf54b790844b3be2eb0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#ad4b00557d847ecf54b790844b3be2eb0">TIME_SOAK</a>&#160;&#160;&#160;3000</td></tr>
+<tr class="separator:ad4b00557d847ecf54b790844b3be2eb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd34aefc536dfe9b45dbed679cf6afaf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#acd34aefc536dfe9b45dbed679cf6afaf">TIME_INFUSION</a>&#160;&#160;&#160;25000</td></tr>
+<tr class="separator:acd34aefc536dfe9b45dbed679cf6afaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e3abbeb2301b9265ee297ee63e2f4c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a4e3abbeb2301b9265ee297ee63e2f4c8">AMOUNT_DBLESPRESSO</a>&#160;&#160;&#160;25.0</td></tr>
+<tr class="separator:a4e3abbeb2301b9265ee297ee63e2f4c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:afed8c565650f5808745b6c6c7d45462c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#afed8c565650f5808745b6c6c7d45462c">coffeeThread</a> (void *threadid)</td></tr>
+<tr class="memdesc:afed8c565650f5808745b6c6c7d45462c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread for the finite state machine It represents the current state of the machine and handles signals coming from the pressure control, buttons, the brew switch and the proximity sensor.  <a href="#afed8c565650f5808745b6c6c7d45462c">More...</a><br /></td></tr>
+<tr class="separator:afed8c565650f5808745b6c6c7d45462c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44f0ebaec249d2ce6316c1bddff54d79"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a44f0ebaec249d2ce6316c1bddff54d79">coffeeHandler</a> (int signum, siginfo_t *siginfo, void *context)</td></tr>
+<tr class="memdesc:a44f0ebaec249d2ce6316c1bddff54d79"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for the Signal send to this thread It saves the type of signal received and tracks the time between a push and release event of up to 4 signals The time is stored in the HalEvent variable when a release event is received.  <a href="#a44f0ebaec249d2ce6316c1bddff54d79">More...</a><br /></td></tr>
+<tr class="separator:a44f0ebaec249d2ce6316c1bddff54d79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3290268b8fcbba9a6b642b68860a8503"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a3290268b8fcbba9a6b642b68860a8503">getSigValue</a> (void)</td></tr>
+<tr class="memdesc:a3290268b8fcbba9a6b642b68860a8503"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns the Signal value from the last received Signal and clears the variable  <a href="#a3290268b8fcbba9a6b642b68860a8503">More...</a><br /></td></tr>
+<tr class="separator:a3290268b8fcbba9a6b642b68860a8503"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63f25020d1567a2d5e03a9a59e75a0fc"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a63f25020d1567a2d5e03a9a59e75a0fc">SigValueEmpty</a> (void)</td></tr>
+<tr class="separator:a63f25020d1567a2d5e03a9a59e75a0fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4d9681385a3f678dee40458cf55dca0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#ae4d9681385a3f678dee40458cf55dca0">changeState</a> (int newState)</td></tr>
+<tr class="memdesc:ae4d9681385a3f678dee40458cf55dca0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Changes the state of the machine to newState prints the change to the logger.  <a href="#ae4d9681385a3f678dee40458cf55dca0">More...</a><br /></td></tr>
+<tr class="separator:ae4d9681385a3f678dee40458cf55dca0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc0b4325b7cabe49f623d5e44aaa37d7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#afc0b4325b7cabe49f623d5e44aaa37d7">getState</a> (void)</td></tr>
+<tr class="memdesc:afc0b4325b7cabe49f623d5e44aaa37d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current state of the FSM.  <a href="#afc0b4325b7cabe49f623d5e44aaa37d7">More...</a><br /></td></tr>
+<tr class="separator:afc0b4325b7cabe49f623d5e44aaa37d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66d75a676639d0f8e56c0efe76547482"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a66d75a676639d0f8e56c0efe76547482">brewTimeHandler</a> (void)</td></tr>
+<tr class="memdesc:a66d75a676639d0f8e56c0efe76547482"><td class="mdescLeft">&#160;</td><td class="mdescRight">Counter for the brew time refresh every 200ms.  <a href="#a66d75a676639d0f8e56c0efe76547482">More...</a><br /></td></tr>
+<tr class="separator:a66d75a676639d0f8e56c0efe76547482"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c611f1d81caf2f51c8b77b307028e4d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a5c611f1d81caf2f51c8b77b307028e4d">coffeeTerminate</a> (void)</td></tr>
+<tr class="memdesc:a5c611f1d81caf2f51c8b77b307028e4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">handles program termination  <a href="#a5c611f1d81caf2f51c8b77b307028e4d">More...</a><br /></td></tr>
+<tr class="separator:a5c611f1d81caf2f51c8b77b307028e4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a343324d9863aa6eb3d7e2a183aec4a09"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a343324d9863aa6eb3d7e2a183aec4a09">coffeeBrew</a> (void)</td></tr>
+<tr class="memdesc:a343324d9863aa6eb3d7e2a183aec4a09"><td class="mdescLeft">&#160;</td><td class="mdescRight">Brewing process.  <a href="#a343324d9863aa6eb3d7e2a183aec4a09">More...</a><br /></td></tr>
+<tr class="separator:a343324d9863aa6eb3d7e2a183aec4a09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c29bb32c4f3971f78dd515e568042c3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a7c29bb32c4f3971f78dd515e568042c3">coffeeIncreaseBrewCounter</a> (void)</td></tr>
+<tr class="separator:a7c29bb32c4f3971f78dd515e568042c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a11b81e21f5769fc6b0e55ecbac8d3976"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="coffee_8h.html#a11b81e21f5769fc6b0e55ecbac8d3976">coffeeIncreaseHeatingTime</a> (uint64_t <a class="el" href="coffee_8cpp.html#ac88c1bf95effb2aeddc71b1c2cf9034b">heatingTime</a>)</td></tr>
+<tr class="separator:a11b81e21f5769fc6b0e55ecbac8d3976"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a4e3abbeb2301b9265ee297ee63e2f4c8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define AMOUNT_DBLESPRESSO&#160;&#160;&#160;25.0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad8bfbae67917bc4a69ae336c65b3aba2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define AMOUNT_PREINFUSION&#160;&#160;&#160;3</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7a56332694aec763a9f8028113a07199"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define STATE_BREW&#160;&#160;&#160;4</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af696741daae3faab28c27755188fd828"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define STATE_BREWMANUAL&#160;&#160;&#160;5</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3a3e5a95a5ba91345c6a1b6f7e06c737"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define STATE_CLEANING&#160;&#160;&#160;6</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7bf0c086c7c41c12cc63324327932d91"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define STATE_ERROR&#160;&#160;&#160;7</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab87d7787dc7a2c2afc6d7853353d7003"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define STATE_HEATING&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aafff27c7165f059a969fe60fee51f683"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define STATE_IDLE&#160;&#160;&#160;3</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af74b21e82c0f8fbf7f697db071d420a0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define STATE_INITALHEATING&#160;&#160;&#160;2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0cc0d45e13bc83065d45df9d3d1dc887"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define STATE_OFF&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acd34aefc536dfe9b45dbed679cf6afaf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TIME_INFUSION&#160;&#160;&#160;25000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad4b00557d847ecf54b790844b3be2eb0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TIME_SOAK&#160;&#160;&#160;3000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a66d75a676639d0f8e56c0efe76547482"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void brewTimeHandler </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Counter for the brew time refresh every 200ms. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae4d9681385a3f678dee40458cf55dca0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void changeState </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>newState</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Changes the state of the machine to newState prints the change to the logger. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">newState</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a343324d9863aa6eb3d7e2a183aec4a09"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeBrew </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Brewing process. </p>
+
+</div>
+</div>
+<a class="anchor" id="a44f0ebaec249d2ce6316c1bddff54d79"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeHandler </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>signum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">siginfo_t *&#160;</td>
+          <td class="paramname"><em>siginfo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>context</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Handler for the Signal send to this thread It saves the type of signal received and tracks the time between a push and release event of up to 4 signals The time is stored in the HalEvent variable when a release event is received. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">signum</td><td></td></tr>
+    <tr><td class="paramname">siginfo</td><td></td></tr>
+    <tr><td class="paramname">context</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a7c29bb32c4f3971f78dd515e568042c3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeIncreaseBrewCounter </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11b81e21f5769fc6b0e55ecbac8d3976"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeIncreaseHeatingTime </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>heatingTime</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5c611f1d81caf2f51c8b77b307028e4d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coffeeTerminate </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>handles program termination </p>
+
+</div>
+</div>
+<a class="anchor" id="afed8c565650f5808745b6c6c7d45462c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* coffeeThread </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>threadid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Thread for the finite state machine It represents the current state of the machine and handles signals coming from the pressure control, buttons, the brew switch and the proximity sensor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">threadid</td><td>the ID of the thread </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a3290268b8fcbba9a6b642b68860a8503"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int getSigValue </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>returns the Signal value from the last received Signal and clears the variable </p>
+<dl class="section return"><dt>Returns</dt><dd>value sent with the last signal </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="afc0b4325b7cabe49f623d5e44aaa37d7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int getState </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the current state of the FSM. </p>
+
+</div>
+</div>
+<a class="anchor" id="a63f25020d1567a2d5e03a9a59e75a0fc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool SigValueEmpty </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 149 - 0
CoffeeCode/html/coffee_8h_source.html

@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: coffee.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">coffee.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="coffee_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * coffee.h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *  Created on: Sep 25, 2017</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *      Author: sebastian</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#ifndef COFFEE_H_</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#define COFFEE_H_</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;csignal&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;</div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">//define status</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="coffee_8h.html#a0cc0d45e13bc83065d45df9d3d1dc887">   14</a></span>&#160;<span class="preprocessor">#define STATE_OFF   0</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="coffee_8h.html#ab87d7787dc7a2c2afc6d7853353d7003">   15</a></span>&#160;<span class="preprocessor">#define STATE_HEATING   1</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="coffee_8h.html#af74b21e82c0f8fbf7f697db071d420a0">   16</a></span>&#160;<span class="preprocessor">#define STATE_INITALHEATING 2</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="coffee_8h.html#aafff27c7165f059a969fe60fee51f683">   17</a></span>&#160;<span class="preprocessor">#define STATE_IDLE  3</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="coffee_8h.html#a7a56332694aec763a9f8028113a07199">   18</a></span>&#160;<span class="preprocessor">#define STATE_BREW  4</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="coffee_8h.html#af696741daae3faab28c27755188fd828">   19</a></span>&#160;<span class="preprocessor">#define STATE_BREWMANUAL    5</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="coffee_8h.html#a3a3e5a95a5ba91345c6a1b6f7e06c737">   20</a></span>&#160;<span class="preprocessor">#define STATE_CLEANING  6</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="coffee_8h.html#a7bf0c086c7c41c12cc63324327932d91">   21</a></span>&#160;<span class="preprocessor">#define STATE_ERROR 7</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="coffee_8h.html#ad8bfbae67917bc4a69ae336c65b3aba2">   23</a></span>&#160;<span class="preprocessor">#define AMOUNT_PREINFUSION  3 //Preinfusion amount in ml</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="coffee_8h.html#ad4b00557d847ecf54b790844b3be2eb0">   24</a></span>&#160;<span class="preprocessor">#define TIME_SOAK   3000//Time between preinfusion and infusion in ms</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="coffee_8h.html#acd34aefc536dfe9b45dbed679cf6afaf">   25</a></span>&#160;<span class="preprocessor">#define TIME_INFUSION 25000 //Infusion time in ms</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="coffee_8h.html#a4e3abbeb2301b9265ee297ee63e2f4c8">   26</a></span>&#160;<span class="preprocessor">#define AMOUNT_DBLESPRESSO  25.0    //Size of a double espresso in ml</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keywordtype">void</span> *<a class="code" href="coffee_8h.html#afed8c565650f5808745b6c6c7d45462c">coffeeThread</a>(<span class="keywordtype">void</span> *threadid);</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keywordtype">void</span> <a class="code" href="coffee_8h.html#a44f0ebaec249d2ce6316c1bddff54d79">coffeeHandler</a> (<span class="keywordtype">int</span> signum, siginfo_t *siginfo, <span class="keywordtype">void</span> *context);</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keywordtype">int</span> <a class="code" href="coffee_8h.html#a3290268b8fcbba9a6b642b68860a8503">getSigValue</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="coffee_8h.html#a63f25020d1567a2d5e03a9a59e75a0fc">SigValueEmpty</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keywordtype">void</span> <a class="code" href="coffee_8h.html#ae4d9681385a3f678dee40458cf55dca0">changeState</a>(<span class="keywordtype">int</span> newState);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keywordtype">int</span> <a class="code" href="coffee_8h.html#afc0b4325b7cabe49f623d5e44aaa37d7">getState</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keywordtype">void</span> <a class="code" href="coffee_8h.html#a66d75a676639d0f8e56c0efe76547482">brewTimeHandler</a> (<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keywordtype">void</span> <a class="code" href="coffee_8h.html#a5c611f1d81caf2f51c8b77b307028e4d">coffeeTerminate</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keywordtype">void</span> <a class="code" href="coffee_8h.html#a343324d9863aa6eb3d7e2a183aec4a09">coffeeBrew</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keywordtype">void</span> <a class="code" href="coffee_8h.html#a7c29bb32c4f3971f78dd515e568042c3">coffeeIncreaseBrewCounter</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="keywordtype">void</span> <a class="code" href="coffee_8h.html#a11b81e21f5769fc6b0e55ecbac8d3976">coffeeIncreaseHeatingTime</a>(uint64_t <a class="code" href="coffee_8cpp.html#ac88c1bf95effb2aeddc71b1c2cf9034b">heatingTime</a>);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* COFFEE_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="coffee_8h_html_a63f25020d1567a2d5e03a9a59e75a0fc"><div class="ttname"><a href="coffee_8h.html#a63f25020d1567a2d5e03a9a59e75a0fc">SigValueEmpty</a></div><div class="ttdeci">bool SigValueEmpty(void)</div><div class="ttdef"><b>Definition:</b> coffee.cpp:238</div></div>
+<div class="ttc" id="coffee_8h_html_a5c611f1d81caf2f51c8b77b307028e4d"><div class="ttname"><a href="coffee_8h.html#a5c611f1d81caf2f51c8b77b307028e4d">coffeeTerminate</a></div><div class="ttdeci">void coffeeTerminate(void)</div><div class="ttdoc">handles program termination </div><div class="ttdef"><b>Definition:</b> coffee.cpp:275</div></div>
+<div class="ttc" id="coffee_8h_html_a11b81e21f5769fc6b0e55ecbac8d3976"><div class="ttname"><a href="coffee_8h.html#a11b81e21f5769fc6b0e55ecbac8d3976">coffeeIncreaseHeatingTime</a></div><div class="ttdeci">void coffeeIncreaseHeatingTime(uint64_t heatingTime)</div><div class="ttdef"><b>Definition:</b> coffee.cpp:350</div></div>
+<div class="ttc" id="coffee_8h_html_afc0b4325b7cabe49f623d5e44aaa37d7"><div class="ttname"><a href="coffee_8h.html#afc0b4325b7cabe49f623d5e44aaa37d7">getState</a></div><div class="ttdeci">int getState(void)</div><div class="ttdoc">Returns the current state of the FSM. </div><div class="ttdef"><b>Definition:</b> coffee.cpp:260</div></div>
+<div class="ttc" id="coffee_8h_html_a3290268b8fcbba9a6b642b68860a8503"><div class="ttname"><a href="coffee_8h.html#a3290268b8fcbba9a6b642b68860a8503">getSigValue</a></div><div class="ttdeci">int getSigValue(void)</div><div class="ttdoc">returns the Signal value from the last received Signal and clears the variable </div><div class="ttdef"><b>Definition:</b> coffee.cpp:232</div></div>
+<div class="ttc" id="coffee_8h_html_a7c29bb32c4f3971f78dd515e568042c3"><div class="ttname"><a href="coffee_8h.html#a7c29bb32c4f3971f78dd515e568042c3">coffeeIncreaseBrewCounter</a></div><div class="ttdeci">void coffeeIncreaseBrewCounter(void)</div><div class="ttdef"><b>Definition:</b> coffee.cpp:340</div></div>
+<div class="ttc" id="coffee_8h_html_a44f0ebaec249d2ce6316c1bddff54d79"><div class="ttname"><a href="coffee_8h.html#a44f0ebaec249d2ce6316c1bddff54d79">coffeeHandler</a></div><div class="ttdeci">void coffeeHandler(int signum, siginfo_t *siginfo, void *context)</div><div class="ttdoc">Handler for the Signal send to this thread It saves the type of signal received and tracks the time b...</div><div class="ttdef"><b>Definition:</b> coffee.cpp:222</div></div>
+<div class="ttc" id="coffee_8h_html_a343324d9863aa6eb3d7e2a183aec4a09"><div class="ttname"><a href="coffee_8h.html#a343324d9863aa6eb3d7e2a183aec4a09">coffeeBrew</a></div><div class="ttdeci">void coffeeBrew(void)</div><div class="ttdoc">Brewing process. </div><div class="ttdef"><b>Definition:</b> coffee.cpp:285</div></div>
+<div class="ttc" id="coffee_8cpp_html_ac88c1bf95effb2aeddc71b1c2cf9034b"><div class="ttname"><a href="coffee_8cpp.html#ac88c1bf95effb2aeddc71b1c2cf9034b">heatingTime</a></div><div class="ttdeci">double heatingTime</div><div class="ttdef"><b>Definition:</b> coffee.cpp:33</div></div>
+<div class="ttc" id="coffee_8h_html_a66d75a676639d0f8e56c0efe76547482"><div class="ttname"><a href="coffee_8h.html#a66d75a676639d0f8e56c0efe76547482">brewTimeHandler</a></div><div class="ttdeci">void brewTimeHandler(void)</div><div class="ttdoc">Counter for the brew time refresh every 200ms. </div><div class="ttdef"><b>Definition:</b> coffee.cpp:268</div></div>
+<div class="ttc" id="coffee_8h_html_ae4d9681385a3f678dee40458cf55dca0"><div class="ttname"><a href="coffee_8h.html#ae4d9681385a3f678dee40458cf55dca0">changeState</a></div><div class="ttdeci">void changeState(int newState)</div><div class="ttdoc">Changes the state of the machine to newState prints the change to the logger. </div><div class="ttdef"><b>Definition:</b> coffee.cpp:250</div></div>
+<div class="ttc" id="coffee_8h_html_afed8c565650f5808745b6c6c7d45462c"><div class="ttname"><a href="coffee_8h.html#afed8c565650f5808745b6c6c7d45462c">coffeeThread</a></div><div class="ttdeci">void * coffeeThread(void *threadid)</div><div class="ttdoc">Thread for the finite state machine It represents the current state of the machine and handles signal...</div><div class="ttdef"><b>Definition:</b> coffee.cpp:41</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 266 - 0
CoffeeCode/html/crc_8cpp.html

@@ -0,0 +1,266 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: crc.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">crc.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="crc_8h_source.html">crc.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a241aeeb764887ae5e3de58b98f04b16d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8cpp.html#a241aeeb764887ae5e3de58b98f04b16d">WIDTH</a>&#160;&#160;&#160;(8 * sizeof(<a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>))</td></tr>
+<tr class="separator:a241aeeb764887ae5e3de58b98f04b16d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a118ad552670dbefa1df0ba72d147f5e1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8cpp.html#a118ad552670dbefa1df0ba72d147f5e1">TOPBIT</a>&#160;&#160;&#160;(1 &lt;&lt; (<a class="el" href="crc_8cpp.html#a241aeeb764887ae5e3de58b98f04b16d">WIDTH</a> - 1))</td></tr>
+<tr class="separator:a118ad552670dbefa1df0ba72d147f5e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5944d40ab44731450a57acd7f027f6a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8cpp.html#ac5944d40ab44731450a57acd7f027f6a">REFLECT_DATA</a>(X)&#160;&#160;&#160;((unsigned char) reflect((X), 8))</td></tr>
+<tr class="separator:ac5944d40ab44731450a57acd7f027f6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2354513de80cf643198f44d7030b74d7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8cpp.html#a2354513de80cf643198f44d7030b74d7">REFLECT_REMAINDER</a>(X)&#160;&#160;&#160;((<a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>) reflect((X), <a class="el" href="crc_8cpp.html#a241aeeb764887ae5e3de58b98f04b16d">WIDTH</a>))</td></tr>
+<tr class="separator:a2354513de80cf643198f44d7030b74d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a027c2916f24b3daaf662408cc72026b1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8cpp.html#a027c2916f24b3daaf662408cc72026b1">crcSlow</a> (unsigned char const message[], int nBytes)</td></tr>
+<tr class="separator:a027c2916f24b3daaf662408cc72026b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a735798e6972adc694a5428dd7ccaf9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8cpp.html#a5a735798e6972adc694a5428dd7ccaf9">crcInit</a> (void)</td></tr>
+<tr class="separator:a5a735798e6972adc694a5428dd7ccaf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31e9ca3a3979a4c1e5043f5bfa5befaf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8cpp.html#a31e9ca3a3979a4c1e5043f5bfa5befaf">crcFast</a> (unsigned char const message[], int nBytes)</td></tr>
+<tr class="separator:a31e9ca3a3979a4c1e5043f5bfa5befaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:aa0b98c402a809d26602bb9a693083720"><td class="memItemLeft" align="right" valign="top"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8cpp.html#aa0b98c402a809d26602bb9a693083720">crcTable</a> [256]</td></tr>
+<tr class="separator:aa0b98c402a809d26602bb9a693083720"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ac5944d40ab44731450a57acd7f027f6a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REFLECT_DATA</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">X</td><td>)</td>
+          <td>&#160;&#160;&#160;((unsigned char) reflect((X), 8))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2354513de80cf643198f44d7030b74d7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REFLECT_REMAINDER</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">X</td><td>)</td>
+          <td>&#160;&#160;&#160;((<a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>) reflect((X), <a class="el" href="crc_8cpp.html#a241aeeb764887ae5e3de58b98f04b16d">WIDTH</a>))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a118ad552670dbefa1df0ba72d147f5e1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TOPBIT&#160;&#160;&#160;(1 &lt;&lt; (<a class="el" href="crc_8cpp.html#a241aeeb764887ae5e3de58b98f04b16d">WIDTH</a> - 1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a241aeeb764887ae5e3de58b98f04b16d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define WIDTH&#160;&#160;&#160;(8 * sizeof(<a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a31e9ca3a3979a4c1e5043f5bfa5befaf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a> crcFast </td>
+          <td>(</td>
+          <td class="paramtype">unsigned char const&#160;</td>
+          <td class="paramname"><em>message</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>nBytes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a735798e6972adc694a5428dd7ccaf9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void crcInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a027c2916f24b3daaf662408cc72026b1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a> crcSlow </td>
+          <td>(</td>
+          <td class="paramtype">unsigned char const&#160;</td>
+          <td class="paramname"><em>message</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>nBytes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="aa0b98c402a809d26602bb9a693083720"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a> crcTable[256]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 343 - 0
CoffeeCode/html/crc_8h.html

@@ -0,0 +1,343 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: crc.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">crc.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="crc_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:aa93f0eb578d23995850d61f7d61c55c1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:aa93f0eb578d23995850d61f7d61c55c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>&#160;&#160;&#160;!<a class="el" href="lcd_8cpp.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a></td></tr>
+<tr class="separator:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a491e419c18fbc5c7cb4a2cd901e31440"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#a491e419c18fbc5c7cb4a2cd901e31440">CRC32</a></td></tr>
+<tr class="separator:a491e419c18fbc5c7cb4a2cd901e31440"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad679f457b8d23bfed7ccf1b9584e8514"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#ad679f457b8d23bfed7ccf1b9584e8514">CRC_NAME</a>&#160;&#160;&#160;&quot;CRC-32&quot;</td></tr>
+<tr class="separator:ad679f457b8d23bfed7ccf1b9584e8514"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae13d91fe6e514f0aa1caba701ef1ff92"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#ae13d91fe6e514f0aa1caba701ef1ff92">POLYNOMIAL</a>&#160;&#160;&#160;0x04C11DB7</td></tr>
+<tr class="separator:ae13d91fe6e514f0aa1caba701ef1ff92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acce5b79e1a8ad8ffe40fb9f7d63b2fdc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#acce5b79e1a8ad8ffe40fb9f7d63b2fdc">INITIAL_REMAINDER</a>&#160;&#160;&#160;0xFFFFFFFF</td></tr>
+<tr class="separator:acce5b79e1a8ad8ffe40fb9f7d63b2fdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e491822bb6a5bf7114dd453ab48891e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#a5e491822bb6a5bf7114dd453ab48891e">FINAL_XOR_VALUE</a>&#160;&#160;&#160;0xFFFFFFFF</td></tr>
+<tr class="separator:a5e491822bb6a5bf7114dd453ab48891e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6653e78d37b912d592ffc6e96eb7abb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#af6653e78d37b912d592ffc6e96eb7abb">REFLECT_DATA</a>&#160;&#160;&#160;<a class="el" href="lcd_8cpp.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a></td></tr>
+<tr class="separator:af6653e78d37b912d592ffc6e96eb7abb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5aa89bef30ad5bd061deda3eef36e327"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#a5aa89bef30ad5bd061deda3eef36e327">REFLECT_REMAINDER</a>&#160;&#160;&#160;<a class="el" href="lcd_8cpp.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a></td></tr>
+<tr class="separator:a5aa89bef30ad5bd061deda3eef36e327"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee81a10f43f9dc645ba69a7407c151d0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#aee81a10f43f9dc645ba69a7407c151d0">CHECK_VALUE</a>&#160;&#160;&#160;0xCBF43926</td></tr>
+<tr class="separator:aee81a10f43f9dc645ba69a7407c151d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a73364f0434186bc77eaa8e3b03a437be"><td class="memItemLeft" align="right" valign="top">typedef unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a></td></tr>
+<tr class="separator:a73364f0434186bc77eaa8e3b03a437be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5a735798e6972adc694a5428dd7ccaf9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#a5a735798e6972adc694a5428dd7ccaf9">crcInit</a> (void)</td></tr>
+<tr class="separator:a5a735798e6972adc694a5428dd7ccaf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a027c2916f24b3daaf662408cc72026b1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#a027c2916f24b3daaf662408cc72026b1">crcSlow</a> (unsigned char const message[], int nBytes)</td></tr>
+<tr class="separator:a027c2916f24b3daaf662408cc72026b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31e9ca3a3979a4c1e5043f5bfa5befaf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crc_8h.html#a31e9ca3a3979a4c1e5043f5bfa5befaf">crcFast</a> (unsigned char const message[], int nBytes)</td></tr>
+<tr class="separator:a31e9ca3a3979a4c1e5043f5bfa5befaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="aee81a10f43f9dc645ba69a7407c151d0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CHECK_VALUE&#160;&#160;&#160;0xCBF43926</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a491e419c18fbc5c7cb4a2cd901e31440"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CRC32</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad679f457b8d23bfed7ccf1b9584e8514"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CRC_NAME&#160;&#160;&#160;&quot;CRC-32&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa93f0eb578d23995850d61f7d61c55c1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FALSE&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5e491822bb6a5bf7114dd453ab48891e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FINAL_XOR_VALUE&#160;&#160;&#160;0xFFFFFFFF</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acce5b79e1a8ad8ffe40fb9f7d63b2fdc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define INITIAL_REMAINDER&#160;&#160;&#160;0xFFFFFFFF</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae13d91fe6e514f0aa1caba701ef1ff92"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define POLYNOMIAL&#160;&#160;&#160;0x04C11DB7</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af6653e78d37b912d592ffc6e96eb7abb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REFLECT_DATA&#160;&#160;&#160;<a class="el" href="lcd_8cpp.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5aa89bef30ad5bd061deda3eef36e327"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REFLECT_REMAINDER&#160;&#160;&#160;<a class="el" href="lcd_8cpp.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa8cecfc5c5c054d2875c03e77b7be15d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TRUE&#160;&#160;&#160;!<a class="el" href="lcd_8cpp.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="a73364f0434186bc77eaa8e3b03a437be"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef unsigned long <a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a31e9ca3a3979a4c1e5043f5bfa5befaf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a> crcFast </td>
+          <td>(</td>
+          <td class="paramtype">unsigned char const&#160;</td>
+          <td class="paramname"><em>message</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>nBytes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a735798e6972adc694a5428dd7ccaf9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void crcInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a027c2916f24b3daaf662408cc72026b1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a> crcSlow </td>
+          <td>(</td>
+          <td class="paramtype">unsigned char const&#160;</td>
+          <td class="paramname"><em>message</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>nBytes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 177 - 0
CoffeeCode/html/crc_8h_source.html

@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: crc.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">crc.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="crc_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Filename:    crc.h</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * </span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Description: A header file describing the various CRC standards.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * Notes:       </span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * </span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Copyright (c) 2000 by Michael Barr.  This software is placed into</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * the public domain and may be used for any purpose.  However, this</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * notice must not be changed or removed and no warranty is either</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * expressed or implied by its publication or distribution.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> **********************************************************************/</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#ifndef _crc_h</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#define _crc_h</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="crc_8h.html#aa93f0eb578d23995850d61f7d61c55c1">   20</a></span>&#160;<span class="preprocessor">#define FALSE   0</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="crc_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">   21</a></span>&#160;<span class="preprocessor">#define TRUE    !FALSE</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * Select the CRC standard from the list that follows.</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="crc_8h.html#a491e419c18fbc5c7cb4a2cd901e31440">   26</a></span>&#160;<span class="preprocessor">#define CRC32</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#if defined(CRC_CCITT)</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>  <a class="code" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#define CRC_NAME            &quot;CRC-CCITT&quot;</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#define POLYNOMIAL          0x1021</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#define INITIAL_REMAINDER   0xFFFF</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#define FINAL_XOR_VALUE     0x0000</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#define REFLECT_DATA        FALSE</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#define REFLECT_REMAINDER   FALSE</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#define CHECK_VALUE         0x29B1</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#elif defined(CRC16)</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>  <a class="code" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#define CRC_NAME            &quot;CRC-16&quot;</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#define POLYNOMIAL          0x8005</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#define INITIAL_REMAINDER   0x0000</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#define FINAL_XOR_VALUE     0x0000</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#define REFLECT_DATA        TRUE</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#define REFLECT_REMAINDER   TRUE</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#define CHECK_VALUE         0xBB3D</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#elif defined(CRC32)</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">   55</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  <a class="code" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="crc_8h.html#ad679f457b8d23bfed7ccf1b9584e8514">   57</a></span>&#160;<span class="preprocessor">#define CRC_NAME            &quot;CRC-32&quot;</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="crc_8h.html#ae13d91fe6e514f0aa1caba701ef1ff92">   58</a></span>&#160;<span class="preprocessor">#define POLYNOMIAL          0x04C11DB7</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="crc_8h.html#acce5b79e1a8ad8ffe40fb9f7d63b2fdc">   59</a></span>&#160;<span class="preprocessor">#define INITIAL_REMAINDER   0xFFFFFFFF</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="crc_8h.html#a5e491822bb6a5bf7114dd453ab48891e">   60</a></span>&#160;<span class="preprocessor">#define FINAL_XOR_VALUE     0xFFFFFFFF</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="crc_8h.html#af6653e78d37b912d592ffc6e96eb7abb">   61</a></span>&#160;<span class="preprocessor">#define REFLECT_DATA        TRUE</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="crc_8h.html#a5aa89bef30ad5bd061deda3eef36e327">   62</a></span>&#160;<span class="preprocessor">#define REFLECT_REMAINDER   TRUE</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="crc_8h.html#aee81a10f43f9dc645ba69a7407c151d0">   63</a></span>&#160;<span class="preprocessor">#define CHECK_VALUE         0xCBF43926</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="preprocessor">#error &quot;One of CRC_CCITT, CRC16, or CRC32 must be #define&#39;d.&quot;</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keywordtype">void</span>  <a class="code" href="crc_8h.html#a5a735798e6972adc694a5428dd7ccaf9">crcInit</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<a class="code" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>   <a class="code" href="crc_8h.html#a027c2916f24b3daaf662408cc72026b1">crcSlow</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="keyword">const</span> message[], <span class="keywordtype">int</span> nBytes);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<a class="code" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a>   <a class="code" href="crc_8h.html#a31e9ca3a3979a4c1e5043f5bfa5befaf">crcFast</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="keyword">const</span> message[], <span class="keywordtype">int</span> nBytes);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _crc_h */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="crc_8h_html_a73364f0434186bc77eaa8e3b03a437be"><div class="ttname"><a href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc</a></div><div class="ttdeci">unsigned long crc</div><div class="ttdef"><b>Definition:</b> crc.h:55</div></div>
+<div class="ttc" id="crc_8h_html_a027c2916f24b3daaf662408cc72026b1"><div class="ttname"><a href="crc_8h.html#a027c2916f24b3daaf662408cc72026b1">crcSlow</a></div><div class="ttdeci">crc crcSlow(unsigned char const message[], int nBytes)</div><div class="ttdef"><b>Definition:</b> crc.cpp:95</div></div>
+<div class="ttc" id="crc_8h_html_a31e9ca3a3979a4c1e5043f5bfa5befaf"><div class="ttname"><a href="crc_8h.html#a31e9ca3a3979a4c1e5043f5bfa5befaf">crcFast</a></div><div class="ttdeci">crc crcFast(unsigned char const message[], int nBytes)</div><div class="ttdef"><b>Definition:</b> crc.cpp:212</div></div>
+<div class="ttc" id="crc_8h_html_a5a735798e6972adc694a5428dd7ccaf9"><div class="ttname"><a href="crc_8h.html#a5a735798e6972adc694a5428dd7ccaf9">crcInit</a></div><div class="ttdeci">void crcInit(void)</div><div class="ttdef"><b>Definition:</b> crc.cpp:156</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 501 - 0
CoffeeCode/html/database_8cpp.html

@@ -0,0 +1,501 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: database.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">database.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;cstdio&gt;</code><br />
+<code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;inttypes.h&gt;</code><br />
+<code>#include &lt;cstdarg&gt;</code><br />
+<code>#include &lt;cstring&gt;</code><br />
+<code>#include &lt;string&gt;</code><br />
+<code>#include &lt;stdexcept&gt;</code><br />
+<code>#include &lt;pthread.h&gt;</code><br />
+<code>#include &lt;sys/time.h&gt;</code><br />
+<code>#include &quot;sqlite/sqlite3.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="global_8h_source.html">global.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="database_8h_source.html">database.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="logger_8h_source.html">logger.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac240bb02efe882b4e82da48676301d89"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#ac240bb02efe882b4e82da48676301d89">string_vsprintf</a> (const char *format, std::va_list args)</td></tr>
+<tr class="memdesc:ac240bb02efe882b4e82da48676301d89"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper function to allow the use of vsprintf() with a string See: <a href="http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output">http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output</a>.  <a href="#ac240bb02efe882b4e82da48676301d89">More...</a><br /></td></tr>
+<tr class="separator:ac240bb02efe882b4e82da48676301d89"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd0eb5a18168fa3c37fab8ed0958c043"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#acd0eb5a18168fa3c37fab8ed0958c043">string_sprintf</a> (const char *format,...) __attribute__((format(printf</td></tr>
+<tr class="memdesc:acd0eb5a18168fa3c37fab8ed0958c043"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allows the format of printf but returns a string Source: <a href="http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output">http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output</a>.  <a href="#acd0eb5a18168fa3c37fab8ed0958c043">More...</a><br /></td></tr>
+<tr class="separator:acd0eb5a18168fa3c37fab8ed0958c043"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1885a74e6af3ee510f30f98e60372e3e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#a1885a74e6af3ee510f30f98e60372e3e">sqlOpen</a> ()</td></tr>
+<tr class="memdesc:a1885a74e6af3ee510f30f98e60372e3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Opens and initializes a sqlite3 database connection.  <a href="#a1885a74e6af3ee510f30f98e60372e3e">More...</a><br /></td></tr>
+<tr class="separator:a1885a74e6af3ee510f30f98e60372e3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7264f51f982e908b32635e91e6dc0062"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#a7264f51f982e908b32635e91e6dc0062">sqlClose</a> ()</td></tr>
+<tr class="memdesc:a7264f51f982e908b32635e91e6dc0062"><td class="mdescLeft">&#160;</td><td class="mdescRight">Closes the database connection.  <a href="#a7264f51f982e908b32635e91e6dc0062">More...</a><br /></td></tr>
+<tr class="separator:a7264f51f982e908b32635e91e6dc0062"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afd88a963f835215b8dad9ee9e49866dc"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#afd88a963f835215b8dad9ee9e49866dc">sqlExecute</a> (string query)</td></tr>
+<tr class="memdesc:afd88a963f835215b8dad9ee9e49866dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Executes a SQL statement.  <a href="#afd88a963f835215b8dad9ee9e49866dc">More...</a><br /></td></tr>
+<tr class="separator:afd88a963f835215b8dad9ee9e49866dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a53458fb936962d23efec505a545a9cb8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#a53458fb936962d23efec505a545a9cb8">sqlExecute2</a> (char *query)</td></tr>
+<tr class="separator:a53458fb936962d23efec505a545a9cb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaed3fb776c9dc76d262df026803d3b8c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#aaed3fb776c9dc76d262df026803d3b8c">sqlSetup</a> ()</td></tr>
+<tr class="memdesc:aaed3fb776c9dc76d262df026803d3b8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets up the database and creates the needed structure.  <a href="#aaed3fb776c9dc76d262df026803d3b8c">More...</a><br /></td></tr>
+<tr class="separator:aaed3fb776c9dc76d262df026803d3b8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad0e803eda7a440a6063a447cfeca0cd"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#aad0e803eda7a440a6063a447cfeca0cd">sqlGetConf</a> (<a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a> id)</td></tr>
+<tr class="memdesc:aad0e803eda7a440a6063a447cfeca0cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads a configuration key from the database.  <a href="#aad0e803eda7a440a6063a447cfeca0cd">More...</a><br /></td></tr>
+<tr class="separator:aad0e803eda7a440a6063a447cfeca0cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ce0ac0c58916c138a92d3282f569784"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#a1ce0ac0c58916c138a92d3282f569784">sqlSetConf</a> (<a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a> id, uint64_t value)</td></tr>
+<tr class="memdesc:a1ce0ac0c58916c138a92d3282f569784"><td class="mdescLeft">&#160;</td><td class="mdescRight">Saves a configuration key to the database.  <a href="#a1ce0ac0c58916c138a92d3282f569784">More...</a><br /></td></tr>
+<tr class="separator:a1ce0ac0c58916c138a92d3282f569784"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a437086982a7400d7205f3ab6600e6dcf"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#a437086982a7400d7205f3ab6600e6dcf">inttochar</a> (uint8_t *guid)</td></tr>
+<tr class="memdesc:a437086982a7400d7205f3ab6600e6dcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts the GUID from int to char array.  <a href="#a437086982a7400d7205f3ab6600e6dcf">More...</a><br /></td></tr>
+<tr class="separator:a437086982a7400d7205f3ab6600e6dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2d2a73c367513b8b71aff5546276a3c"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#ad2d2a73c367513b8b71aff5546276a3c">chartoint</a> (const unsigned char *guid)</td></tr>
+<tr class="memdesc:ad2d2a73c367513b8b71aff5546276a3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts the GUID from char to int array.  <a href="#ad2d2a73c367513b8b71aff5546276a3c">More...</a><br /></td></tr>
+<tr class="separator:ad2d2a73c367513b8b71aff5546276a3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a28dbbb9e24e2035535645629105aea46"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#a28dbbb9e24e2035535645629105aea46">int64to8bit</a> (sqlite_int64 guid)</td></tr>
+<tr class="memdesc:a28dbbb9e24e2035535645629105aea46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts the GUID from int64 to int8 array.  <a href="#a28dbbb9e24e2035535645629105aea46">More...</a><br /></td></tr>
+<tr class="separator:a28dbbb9e24e2035535645629105aea46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99cc529fd785c752cd4b73ea7989521d"><td class="memItemLeft" align="right" valign="top">sqlite_int64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#a99cc529fd785c752cd4b73ea7989521d">int8to64bit</a> (uint8_t *guid)</td></tr>
+<tr class="separator:a99cc529fd785c752cd4b73ea7989521d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d0363e5d886e2c3e4bb5ca46d265ba7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#a5d0363e5d886e2c3e4bb5ca46d265ba7">sqltest</a> ()</td></tr>
+<tr class="separator:a5d0363e5d886e2c3e4bb5ca46d265ba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ad6e663497d2c934364b3bcf07496b30b"><td class="memItemLeft" align="right" valign="top">sqlite3 *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8cpp.html#ad6e663497d2c934364b3bcf07496b30b">db</a></td></tr>
+<tr class="memdesc:ad6e663497d2c934364b3bcf07496b30b"><td class="mdescLeft">&#160;</td><td class="mdescRight">The database connector.  <a href="#ad6e663497d2c934364b3bcf07496b30b">More...</a><br /></td></tr>
+<tr class="separator:ad6e663497d2c934364b3bcf07496b30b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad2d2a73c367513b8b71aff5546276a3c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t* chartoint </td>
+          <td>(</td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>guid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Converts the GUID from char to int array. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*guid</td><td>Pointer to the char GUID </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>pointer to the converted int array </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a28dbbb9e24e2035535645629105aea46"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t* int64to8bit </td>
+          <td>(</td>
+          <td class="paramtype">sqlite_int64&#160;</td>
+          <td class="paramname"><em>guid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Converts the GUID from int64 to int8 array. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">guid</td><td>64bit GUID </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>pointer to the converted int array </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a99cc529fd785c752cd4b73ea7989521d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">sqlite_int64 int8to64bit </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>guid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a437086982a7400d7205f3ab6600e6dcf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* inttochar </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>guid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Converts the GUID from int to char array. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*guid</td><td>Pointer to the uint8_t GUID </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>pointer to the converted string </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a7264f51f982e908b32635e91e6dc0062"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sqlClose </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Closes the database connection. </p>
+
+</div>
+</div>
+<a class="anchor" id="afd88a963f835215b8dad9ee9e49866dc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sqlExecute </td>
+          <td>(</td>
+          <td class="paramtype">string&#160;</td>
+          <td class="paramname"><em>query</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Executes a SQL statement. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*query</td><td>SQL query string </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 on success </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a53458fb936962d23efec505a545a9cb8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sqlExecute2 </td>
+          <td>(</td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>query</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aad0e803eda7a440a6063a447cfeca0cd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t sqlGetConf </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a>&#160;</td>
+          <td class="paramname"><em>id</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Reads a configuration key from the database. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">id</td><td>Config ID key </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>value as integer (up to 64bit), 0 for not found </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1885a74e6af3ee510f30f98e60372e3e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sqlOpen </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Opens and initializes a sqlite3 database connection. </p>
+<dl class="section return"><dt>Returns</dt><dd>0 on success </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1ce0ac0c58916c138a92d3282f569784"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sqlSetConf </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a>&#160;</td>
+          <td class="paramname"><em>id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Saves a configuration key to the database. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">id</td><td>Config ID key </td></tr>
+    <tr><td class="paramname">value</td><td>Integer value </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 on success </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aaed3fb776c9dc76d262df026803d3b8c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sqlSetup </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets up the database and creates the needed structure. </p>
+<dl class="section return"><dt>Returns</dt><dd>0 on success </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5d0363e5d886e2c3e4bb5ca46d265ba7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sqltest </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acd0eb5a18168fa3c37fab8ed0958c043"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::string std::string string_sprintf </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allows the format of printf but returns a string Source: <a href="http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output">http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output</a>. </p>
+<dl class="section return"><dt>Returns</dt><dd>printf formatted string </dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">format</td><td>input string as char array </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ac240bb02efe882b4e82da48676301d89"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::string string_vsprintf </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">std::va_list&#160;</td>
+          <td class="paramname"><em>args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Helper function to allow the use of vsprintf() with a string See: <a href="http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output">http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ad6e663497d2c934364b3bcf07496b30b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">sqlite3* db</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The database connector. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 456 - 0
CoffeeCode/html/database_8h.html

@@ -0,0 +1,456 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: database.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">database.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;string&gt;</code><br />
+<code>#include &lt;stdexcept&gt;</code><br />
+<code>#include &lt;cstdio&gt;</code><br />
+<code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;inttypes.h&gt;</code><br />
+<code>#include &lt;cstdarg&gt;</code><br />
+<code>#include &quot;sqlite/sqlite3.h&quot;</code><br />
+</div>
+<p><a href="database_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ae1822373f950fb4881633b7ec843f4df"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a> { <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa4be4c7f723934d3333a26575662e916e">CFGbrewcounter</a> = 1, 
+<a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa3c1d629019edc36dce2a7852d3d65968">CFGHeatingTime</a> = 2, 
+<a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfab9f0f19359d390e5602d46e39949ede4">CFGdisplaylang</a> = 3
+ }<tr class="separator:ae1822373f950fb4881633b7ec843f4df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1885a74e6af3ee510f30f98e60372e3e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#a1885a74e6af3ee510f30f98e60372e3e">sqlOpen</a> ()</td></tr>
+<tr class="memdesc:a1885a74e6af3ee510f30f98e60372e3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Opens and initializes a sqlite3 database connection.  <a href="#a1885a74e6af3ee510f30f98e60372e3e">More...</a><br /></td></tr>
+<tr class="separator:a1885a74e6af3ee510f30f98e60372e3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7264f51f982e908b32635e91e6dc0062"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#a7264f51f982e908b32635e91e6dc0062">sqlClose</a> ()</td></tr>
+<tr class="memdesc:a7264f51f982e908b32635e91e6dc0062"><td class="mdescLeft">&#160;</td><td class="mdescRight">Closes the database connection.  <a href="#a7264f51f982e908b32635e91e6dc0062">More...</a><br /></td></tr>
+<tr class="separator:a7264f51f982e908b32635e91e6dc0062"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaed3fb776c9dc76d262df026803d3b8c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#aaed3fb776c9dc76d262df026803d3b8c">sqlSetup</a> ()</td></tr>
+<tr class="memdesc:aaed3fb776c9dc76d262df026803d3b8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets up the database and creates the needed structure.  <a href="#aaed3fb776c9dc76d262df026803d3b8c">More...</a><br /></td></tr>
+<tr class="separator:aaed3fb776c9dc76d262df026803d3b8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afd88a963f835215b8dad9ee9e49866dc"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#afd88a963f835215b8dad9ee9e49866dc">sqlExecute</a> (string query)</td></tr>
+<tr class="memdesc:afd88a963f835215b8dad9ee9e49866dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Executes a SQL statement.  <a href="#afd88a963f835215b8dad9ee9e49866dc">More...</a><br /></td></tr>
+<tr class="separator:afd88a963f835215b8dad9ee9e49866dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a437086982a7400d7205f3ab6600e6dcf"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#a437086982a7400d7205f3ab6600e6dcf">inttochar</a> (uint8_t *guid)</td></tr>
+<tr class="memdesc:a437086982a7400d7205f3ab6600e6dcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts the GUID from int to char array.  <a href="#a437086982a7400d7205f3ab6600e6dcf">More...</a><br /></td></tr>
+<tr class="separator:a437086982a7400d7205f3ab6600e6dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2d2a73c367513b8b71aff5546276a3c"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#ad2d2a73c367513b8b71aff5546276a3c">chartoint</a> (const unsigned char *guid)</td></tr>
+<tr class="memdesc:ad2d2a73c367513b8b71aff5546276a3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts the GUID from char to int array.  <a href="#ad2d2a73c367513b8b71aff5546276a3c">More...</a><br /></td></tr>
+<tr class="separator:ad2d2a73c367513b8b71aff5546276a3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a28dbbb9e24e2035535645629105aea46"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#a28dbbb9e24e2035535645629105aea46">int64to8bit</a> (sqlite_int64 guid)</td></tr>
+<tr class="memdesc:a28dbbb9e24e2035535645629105aea46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts the GUID from int64 to int8 array.  <a href="#a28dbbb9e24e2035535645629105aea46">More...</a><br /></td></tr>
+<tr class="separator:a28dbbb9e24e2035535645629105aea46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99cc529fd785c752cd4b73ea7989521d"><td class="memItemLeft" align="right" valign="top">sqlite_int64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#a99cc529fd785c752cd4b73ea7989521d">int8to64bit</a> (uint8_t *guid)</td></tr>
+<tr class="separator:a99cc529fd785c752cd4b73ea7989521d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d0363e5d886e2c3e4bb5ca46d265ba7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#a5d0363e5d886e2c3e4bb5ca46d265ba7">sqltest</a> ()</td></tr>
+<tr class="separator:a5d0363e5d886e2c3e4bb5ca46d265ba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c0bc3256310fd400a26243d8a8f1652"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#a6c0bc3256310fd400a26243d8a8f1652">string_sprintf</a> (const char *format,...)</td></tr>
+<tr class="memdesc:a6c0bc3256310fd400a26243d8a8f1652"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allows the format of printf but returns a string Source: <a href="http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output">http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output</a>.  <a href="#a6c0bc3256310fd400a26243d8a8f1652">More...</a><br /></td></tr>
+<tr class="separator:a6c0bc3256310fd400a26243d8a8f1652"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad0e803eda7a440a6063a447cfeca0cd"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#aad0e803eda7a440a6063a447cfeca0cd">sqlGetConf</a> (<a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a> id)</td></tr>
+<tr class="memdesc:aad0e803eda7a440a6063a447cfeca0cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads a configuration key from the database.  <a href="#aad0e803eda7a440a6063a447cfeca0cd">More...</a><br /></td></tr>
+<tr class="separator:aad0e803eda7a440a6063a447cfeca0cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ce0ac0c58916c138a92d3282f569784"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="database_8h.html#a1ce0ac0c58916c138a92d3282f569784">sqlSetConf</a> (<a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a> id, uint64_t value)</td></tr>
+<tr class="memdesc:a1ce0ac0c58916c138a92d3282f569784"><td class="mdescLeft">&#160;</td><td class="mdescRight">Saves a configuration key to the database.  <a href="#a1ce0ac0c58916c138a92d3282f569784">More...</a><br /></td></tr>
+<tr class="separator:a1ce0ac0c58916c138a92d3282f569784"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="ae1822373f950fb4881633b7ec843f4df"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="ae1822373f950fb4881633b7ec843f4dfa4be4c7f723934d3333a26575662e916e"></a>CFGbrewcounter&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="ae1822373f950fb4881633b7ec843f4dfa3c1d629019edc36dce2a7852d3d65968"></a>CFGHeatingTime&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="ae1822373f950fb4881633b7ec843f4dfab9f0f19359d390e5602d46e39949ede4"></a>CFGdisplaylang&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad2d2a73c367513b8b71aff5546276a3c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t* chartoint </td>
+          <td>(</td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>guid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Converts the GUID from char to int array. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*guid</td><td>Pointer to the char GUID </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>pointer to the converted int array </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a28dbbb9e24e2035535645629105aea46"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t* int64to8bit </td>
+          <td>(</td>
+          <td class="paramtype">sqlite_int64&#160;</td>
+          <td class="paramname"><em>guid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Converts the GUID from int64 to int8 array. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">guid</td><td>64bit GUID </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>pointer to the converted int array </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a99cc529fd785c752cd4b73ea7989521d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">sqlite_int64 int8to64bit </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>guid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a437086982a7400d7205f3ab6600e6dcf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* inttochar </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>guid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Converts the GUID from int to char array. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*guid</td><td>Pointer to the uint8_t GUID </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>pointer to the converted string </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a7264f51f982e908b32635e91e6dc0062"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sqlClose </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Closes the database connection. </p>
+
+</div>
+</div>
+<a class="anchor" id="afd88a963f835215b8dad9ee9e49866dc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sqlExecute </td>
+          <td>(</td>
+          <td class="paramtype">string&#160;</td>
+          <td class="paramname"><em>query</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Executes a SQL statement. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*query</td><td>SQL query string </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 on success </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aad0e803eda7a440a6063a447cfeca0cd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t sqlGetConf </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a>&#160;</td>
+          <td class="paramname"><em>id</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Reads a configuration key from the database. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">id</td><td>Config ID key </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>value as integer (up to 64bit), 0 for not found </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1885a74e6af3ee510f30f98e60372e3e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sqlOpen </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Opens and initializes a sqlite3 database connection. </p>
+<dl class="section return"><dt>Returns</dt><dd>0 on success </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1ce0ac0c58916c138a92d3282f569784"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sqlSetConf </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a>&#160;</td>
+          <td class="paramname"><em>id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Saves a configuration key to the database. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">id</td><td>Config ID key </td></tr>
+    <tr><td class="paramname">value</td><td>Integer value </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 on success </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aaed3fb776c9dc76d262df026803d3b8c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int sqlSetup </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets up the database and creates the needed structure. </p>
+<dl class="section return"><dt>Returns</dt><dd>0 on success </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5d0363e5d886e2c3e4bb5ca46d265ba7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sqltest </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6c0bc3256310fd400a26243d8a8f1652"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::string string_sprintf </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allows the format of printf but returns a string Source: <a href="http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output">http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output</a>. </p>
+<dl class="section return"><dt>Returns</dt><dd>printf formatted string </dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">format</td><td>input string as char array </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 153 - 0
CoffeeCode/html/database_8h_source.html

@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: database.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">database.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="database_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * database.h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *  Created on: Dec 4, 2015</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *      Author: Philipp Hinz</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#ifndef DATABASE_H_</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#define DATABASE_H_</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;cstdio&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;cstdarg&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;sqlite/sqlite3.h&quot;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment">// Config Keys</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">   21</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa4be4c7f723934d3333a26575662e916e">   22</a></span>&#160;    <a class="code" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa4be4c7f723934d3333a26575662e916e">CFGbrewcounter</a> = 1,</div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa3c1d629019edc36dce2a7852d3d65968">   23</a></span>&#160;    <a class="code" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa3c1d629019edc36dce2a7852d3d65968">CFGHeatingTime</a> = 2,</div>
+<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfab9f0f19359d390e5602d46e39949ede4">   24</a></span>&#160;    <a class="code" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfab9f0f19359d390e5602d46e39949ede4">CFGdisplaylang</a> = 3</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;} <a class="code" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a>;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keywordtype">int</span> <a class="code" href="database_8h.html#a1885a74e6af3ee510f30f98e60372e3e">sqlOpen</a>();</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keywordtype">void</span> <a class="code" href="database_8h.html#a7264f51f982e908b32635e91e6dc0062">sqlClose</a>();</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keywordtype">int</span> <a class="code" href="database_8h.html#aaed3fb776c9dc76d262df026803d3b8c">sqlSetup</a>();</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keywordtype">int</span> <a class="code" href="database_8h.html#afd88a963f835215b8dad9ee9e49866dc">sqlExecute</a>(<span class="keywordtype">string</span> query);</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keywordtype">char</span> *<a class="code" href="database_8h.html#a437086982a7400d7205f3ab6600e6dcf">inttochar</a>(uint8_t *guid);</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;uint8_t *<a class="code" href="database_8h.html#ad2d2a73c367513b8b71aff5546276a3c">chartoint</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *guid);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;uint8_t *<a class="code" href="database_8h.html#a28dbbb9e24e2035535645629105aea46">int64to8bit</a>(sqlite_int64 guid);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;sqlite_int64 <a class="code" href="database_8h.html#a99cc529fd785c752cd4b73ea7989521d">int8to64bit</a>(uint8_t *guid);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keywordtype">void</span> <a class="code" href="database_8h.html#a5d0363e5d886e2c3e4bb5ca46d265ba7">sqltest</a>();</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;std::string <a class="code" href="database_8h.html#a6c0bc3256310fd400a26243d8a8f1652">string_sprintf</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* format, ...);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;uint64_t <a class="code" href="database_8h.html#aad0e803eda7a440a6063a447cfeca0cd">sqlGetConf</a>(<a class="code" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a> <span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keywordtype">int</span> <a class="code" href="database_8h.html#a1ce0ac0c58916c138a92d3282f569784">sqlSetConf</a>(<a class="code" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a> <span class="keywordtype">id</span>, uint64_t value);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* DATABASE_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="database_8h_html_a1ce0ac0c58916c138a92d3282f569784"><div class="ttname"><a href="database_8h.html#a1ce0ac0c58916c138a92d3282f569784">sqlSetConf</a></div><div class="ttdeci">int sqlSetConf(config_key_t id, uint64_t value)</div><div class="ttdoc">Saves a configuration key to the database. </div><div class="ttdef"><b>Definition:</b> database.cpp:198</div></div>
+<div class="ttc" id="database_8h_html_a6c0bc3256310fd400a26243d8a8f1652"><div class="ttname"><a href="database_8h.html#a6c0bc3256310fd400a26243d8a8f1652">string_sprintf</a></div><div class="ttdeci">std::string string_sprintf(const char *format,...)</div><div class="ttdoc">Allows the format of printf but returns a string Source: http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output. </div><div class="ttdef"><b>Definition:</b> database.cpp:54</div></div>
+<div class="ttc" id="database_8h_html_ae1822373f950fb4881633b7ec843f4df"><div class="ttname"><a href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">config_key_t</a></div><div class="ttdeci">config_key_t</div><div class="ttdef"><b>Definition:</b> database.h:21</div></div>
+<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
+<div class="ttc" id="database_8h_html_ad2d2a73c367513b8b71aff5546276a3c"><div class="ttname"><a href="database_8h.html#ad2d2a73c367513b8b71aff5546276a3c">chartoint</a></div><div class="ttdeci">uint8_t * chartoint(const unsigned char *guid)</div><div class="ttdoc">Converts the GUID from char to int array. </div><div class="ttdef"><b>Definition:</b> database.cpp:227</div></div>
+<div class="ttc" id="database_8h_html_a1885a74e6af3ee510f30f98e60372e3e"><div class="ttname"><a href="database_8h.html#a1885a74e6af3ee510f30f98e60372e3e">sqlOpen</a></div><div class="ttdeci">int sqlOpen()</div><div class="ttdoc">Opens and initializes a sqlite3 database connection. </div><div class="ttdef"><b>Definition:</b> database.cpp:76</div></div>
+<div class="ttc" id="database_8h_html_afd88a963f835215b8dad9ee9e49866dc"><div class="ttname"><a href="database_8h.html#afd88a963f835215b8dad9ee9e49866dc">sqlExecute</a></div><div class="ttdeci">int sqlExecute(string query)</div><div class="ttdoc">Executes a SQL statement. </div><div class="ttdef"><b>Definition:</b> database.cpp:103</div></div>
+<div class="ttc" id="database_8h_html_a7264f51f982e908b32635e91e6dc0062"><div class="ttname"><a href="database_8h.html#a7264f51f982e908b32635e91e6dc0062">sqlClose</a></div><div class="ttdeci">void sqlClose()</div><div class="ttdoc">Closes the database connection. </div><div class="ttdef"><b>Definition:</b> database.cpp:92</div></div>
+<div class="ttc" id="database_8h_html_a437086982a7400d7205f3ab6600e6dcf"><div class="ttname"><a href="database_8h.html#a437086982a7400d7205f3ab6600e6dcf">inttochar</a></div><div class="ttdeci">char * inttochar(uint8_t *guid)</div><div class="ttdoc">Converts the GUID from int to char array. </div><div class="ttdef"><b>Definition:</b> database.cpp:212</div></div>
+<div class="ttc" id="database_8h_html_a5d0363e5d886e2c3e4bb5ca46d265ba7"><div class="ttname"><a href="database_8h.html#a5d0363e5d886e2c3e4bb5ca46d265ba7">sqltest</a></div><div class="ttdeci">void sqltest()</div><div class="ttdef"><b>Definition:</b> database.cpp:258</div></div>
+<div class="ttc" id="database_8h_html_aaed3fb776c9dc76d262df026803d3b8c"><div class="ttname"><a href="database_8h.html#aaed3fb776c9dc76d262df026803d3b8c">sqlSetup</a></div><div class="ttdeci">int sqlSetup()</div><div class="ttdoc">Sets up the database and creates the needed structure. </div><div class="ttdef"><b>Definition:</b> database.cpp:150</div></div>
+<div class="ttc" id="database_8h_html_ae1822373f950fb4881633b7ec843f4dfab9f0f19359d390e5602d46e39949ede4"><div class="ttname"><a href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfab9f0f19359d390e5602d46e39949ede4">CFGdisplaylang</a></div><div class="ttdef"><b>Definition:</b> database.h:24</div></div>
+<div class="ttc" id="database_8h_html_aad0e803eda7a440a6063a447cfeca0cd"><div class="ttname"><a href="database_8h.html#aad0e803eda7a440a6063a447cfeca0cd">sqlGetConf</a></div><div class="ttdeci">uint64_t sqlGetConf(config_key_t id)</div><div class="ttdoc">Reads a configuration key from the database. </div><div class="ttdef"><b>Definition:</b> database.cpp:163</div></div>
+<div class="ttc" id="database_8h_html_a99cc529fd785c752cd4b73ea7989521d"><div class="ttname"><a href="database_8h.html#a99cc529fd785c752cd4b73ea7989521d">int8to64bit</a></div><div class="ttdeci">sqlite_int64 int8to64bit(uint8_t *guid)</div><div class="ttdef"><b>Definition:</b> database.cpp:250</div></div>
+<div class="ttc" id="database_8h_html_ae1822373f950fb4881633b7ec843f4dfa4be4c7f723934d3333a26575662e916e"><div class="ttname"><a href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa4be4c7f723934d3333a26575662e916e">CFGbrewcounter</a></div><div class="ttdef"><b>Definition:</b> database.h:22</div></div>
+<div class="ttc" id="database_8h_html_ae1822373f950fb4881633b7ec843f4dfa3c1d629019edc36dce2a7852d3d65968"><div class="ttname"><a href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa3c1d629019edc36dce2a7852d3d65968">CFGHeatingTime</a></div><div class="ttdef"><b>Definition:</b> database.h:23</div></div>
+<div class="ttc" id="database_8h_html_a28dbbb9e24e2035535645629105aea46"><div class="ttname"><a href="database_8h.html#a28dbbb9e24e2035535645629105aea46">int64to8bit</a></div><div class="ttdeci">uint8_t * int64to8bit(sqlite_int64 guid)</div><div class="ttdoc">Converts the GUID from int64 to int8 array. </div><div class="ttdef"><b>Definition:</b> database.cpp:241</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 503 - 0
CoffeeCode/html/display_8cpp.html

@@ -0,0 +1,503 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: display.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">display.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;pthread.h&gt;</code><br />
+<code>#include &lt;time.h&gt;</code><br />
+<code>#include &lt;unistd.h&gt;</code><br />
+<code>#include &lt;string.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="global_8h_source.html">global.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="display_8h_source.html">display.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="logger_8h_source.html">logger.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="database_8h_source.html">database.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="timer_8h_source.html">timer.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="lcd_8h_source.html">lcd.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="coffee_8h_source.html">coffee.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="hal_8h_source.html">hal.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aad3b4a291f0ad570bb1035a133ec46aa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#aad3b4a291f0ad570bb1035a133ec46aa">displayPrintTime</a> (int line)</td></tr>
+<tr class="memdesc:aad3b4a291f0ad570bb1035a133ec46aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints out the current time in a centered position.  <a href="#aad3b4a291f0ad570bb1035a133ec46aa">More...</a><br /></td></tr>
+<tr class="separator:aad3b4a291f0ad570bb1035a133ec46aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae552c34299838e4f57e3516553ed566f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#ae552c34299838e4f57e3516553ed566f">displayPrintFlow</a> (int line)</td></tr>
+<tr class="memdesc:ae552c34299838e4f57e3516553ed566f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints out the total volume flow.  <a href="#ae552c34299838e4f57e3516553ed566f">More...</a><br /></td></tr>
+<tr class="separator:ae552c34299838e4f57e3516553ed566f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e4f853ea431989d2adc2aeb7a8e46b5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#a2e4f853ea431989d2adc2aeb7a8e46b5">displayPrintLn</a> (int line, const char *str, bool centered)</td></tr>
+<tr class="memdesc:a2e4f853ea431989d2adc2aeb7a8e46b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a string to a specific line, optionally centered.  <a href="#a2e4f853ea431989d2adc2aeb7a8e46b5">More...</a><br /></td></tr>
+<tr class="separator:a2e4f853ea431989d2adc2aeb7a8e46b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2db422e214d76776b8a375787d1384c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#ab2db422e214d76776b8a375787d1384c">displayThread</a> (void *threadid)</td></tr>
+<tr class="memdesc:ab2db422e214d76776b8a375787d1384c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main thread to handle display data.  <a href="#ab2db422e214d76776b8a375787d1384c">More...</a><br /></td></tr>
+<tr class="separator:ab2db422e214d76776b8a375787d1384c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5eb6b80aca0f751332c47c410d06a2a"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#ab5eb6b80aca0f751332c47c410d06a2a">displayTimerHandler</a> (void *threadid)</td></tr>
+<tr class="memdesc:ab5eb6b80aca0f751332c47c410d06a2a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timer handler for display update.  <a href="#ab5eb6b80aca0f751332c47c410d06a2a">More...</a><br /></td></tr>
+<tr class="separator:ab5eb6b80aca0f751332c47c410d06a2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c548751802c5960b3092be28cc56d9f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#a8c548751802c5960b3092be28cc56d9f">displayInit</a> (void)</td></tr>
+<tr class="memdesc:a8c548751802c5960b3092be28cc56d9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes display.  <a href="#a8c548751802c5960b3092be28cc56d9f">More...</a><br /></td></tr>
+<tr class="separator:a8c548751802c5960b3092be28cc56d9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfd367c63541be192cdc63d6e8b38a79"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#abfd367c63541be192cdc63d6e8b38a79">displayTerminate</a> (void)</td></tr>
+<tr class="memdesc:abfd367c63541be192cdc63d6e8b38a79"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles cleanup before program termination.  <a href="#abfd367c63541be192cdc63d6e8b38a79">More...</a><br /></td></tr>
+<tr class="separator:abfd367c63541be192cdc63d6e8b38a79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b10d2d49414256ef745f7e910748fee"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#a9b10d2d49414256ef745f7e910748fee">displaySetLang</a> (<a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a> lang)</td></tr>
+<tr class="memdesc:a9b10d2d49414256ef745f7e910748fee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the language of the display text.  <a href="#a9b10d2d49414256ef745f7e910748fee">More...</a><br /></td></tr>
+<tr class="separator:a9b10d2d49414256ef745f7e910748fee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac750de2337343c08e5fd88d08316adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#ac750de2337343c08e5fd88d08316adb2">displayRefresh</a> (void)</td></tr>
+<tr class="memdesc:ac750de2337343c08e5fd88d08316adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Refreshed the display content and outputs it.  <a href="#ac750de2337343c08e5fd88d08316adb2">More...</a><br /></td></tr>
+<tr class="separator:ac750de2337343c08e5fd88d08316adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2661cdbd686f7d3389a3d9c2cf98f47"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#ab2661cdbd686f7d3389a3d9c2cf98f47">displayGetString</a> (<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display_strings_t</a> string)</td></tr>
+<tr class="memdesc:ab2661cdbd686f7d3389a3d9c2cf98f47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the matching translation of a string.  <a href="#ab2661cdbd686f7d3389a3d9c2cf98f47">More...</a><br /></td></tr>
+<tr class="separator:ab2661cdbd686f7d3389a3d9c2cf98f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf85c9537e38ffe3f1ee356a4638880e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#adf85c9537e38ffe3f1ee356a4638880e">displayPushState</a> (int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="memdesc:adf85c9537e38ffe3f1ee356a4638880e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Updates the display state to the matching coffee state.  <a href="#adf85c9537e38ffe3f1ee356a4638880e">More...</a><br /></td></tr>
+<tr class="separator:adf85c9537e38ffe3f1ee356a4638880e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ae110c5cc57190b02aaa0d543a80cdc20"><td class="memItemLeft" align="right" valign="top"><a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#ae110c5cc57190b02aaa0d543a80cdc20">displayLang</a></td></tr>
+<tr class="separator:ae110c5cc57190b02aaa0d543a80cdc20"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afebf5c16da7043af9cbd74ef9f489ea7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtimer.html">timer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#afebf5c16da7043af9cbd74ef9f489ea7">displayTimer</a> (<a class="el" href="display_8h.html#ab5eb6b80aca0f751332c47c410d06a2a">displayTimerHandler</a>)</td></tr>
+<tr class="separator:afebf5c16da7043af9cbd74ef9f489ea7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9d1129916cfa4cbd7489638ce470c3a4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#a9d1129916cfa4cbd7489638ce470c3a4">lcd</a> = 0</td></tr>
+<tr class="separator:a9d1129916cfa4cbd7489638ce470c3a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf977b563dc485f1d1c4e601a9b31b68"><td class="memItemLeft" align="right" valign="top">volatile int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#adf977b563dc485f1d1c4e601a9b31b68">timerScaler</a> = 0</td></tr>
+<tr class="separator:adf977b563dc485f1d1c4e601a9b31b68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01cd2b69770b3c4cd7adc6e27d48c28a"><td class="memItemLeft" align="right" valign="top">volatile int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#a01cd2b69770b3c4cd7adc6e27d48c28a">elapsedCnt</a> = 0</td></tr>
+<tr class="separator:a01cd2b69770b3c4cd7adc6e27d48c28a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f3437c133bc4d1be650cbbc5128f1a8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8cpp.html#a8f3437c133bc4d1be650cbbc5128f1a8">coffeeState</a> = <a class="el" href="coffee_8h.html#a0cc0d45e13bc83065d45df9d3d1dc887">STATE_OFF</a></td></tr>
+<tr class="separator:a8f3437c133bc4d1be650cbbc5128f1a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab2661cdbd686f7d3389a3d9c2cf98f47"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char* displayGetString </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display_strings_t</a>&#160;</td>
+          <td class="paramname"><em>string</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the matching translation of a string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">string</td><td>Requested string </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Translated string </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8c548751802c5960b3092be28cc56d9f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initializes display. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae552c34299838e4f57e3516553ed566f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayPrintFlow </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>line</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Prints out the total volume flow. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">line</td><td>Target line in display </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a2e4f853ea431989d2adc2aeb7a8e46b5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayPrintLn </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>line</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>str</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>centered</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Prints a string to a specific line, optionally centered. </p>
+<p>This function also fills out the remaining row of the display with spaces, to ensure there is no old data left. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">line</td><td>Target line in display </td></tr>
+    <tr><td class="paramname">*str</td><td>String to print </td></tr>
+    <tr><td class="paramname">centered</td><td>Print centered or not </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aad3b4a291f0ad570bb1035a133ec46aa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayPrintTime </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>line</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Prints out the current time in a centered position. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">line</td><td>Target line in display </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="adf85c9537e38ffe3f1ee356a4638880e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayPushState </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Updates the display state to the matching coffee state. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">state</td><td>New state </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ac750de2337343c08e5fd88d08316adb2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayRefresh </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Refreshed the display content and outputs it. </p>
+
+</div>
+</div>
+<a class="anchor" id="a9b10d2d49414256ef745f7e910748fee"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displaySetLang </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a>&#160;</td>
+          <td class="paramname"><em>lang</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the language of the display text. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">lang</td><td>New language </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="abfd367c63541be192cdc63d6e8b38a79"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayTerminate </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Handles cleanup before program termination. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab2db422e214d76776b8a375787d1384c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* displayThread </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>threadid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Main thread to handle display data. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*threadid</td><td>Thread ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab5eb6b80aca0f751332c47c410d06a2a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* displayTimerHandler </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>threadid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Timer handler for display update. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*threadid</td><td>Thread ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a8f3437c133bc4d1be650cbbc5128f1a8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int coffeeState = <a class="el" href="coffee_8h.html#a0cc0d45e13bc83065d45df9d3d1dc887">STATE_OFF</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae110c5cc57190b02aaa0d543a80cdc20"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a> displayLang</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afebf5c16da7043af9cbd74ef9f489ea7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtimer.html">timer</a> displayTimer(<a class="el" href="display_8h.html#ab5eb6b80aca0f751332c47c410d06a2a">displayTimerHandler</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a01cd2b69770b3c4cd7adc6e27d48c28a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">volatile int elapsedCnt = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9d1129916cfa4cbd7489638ce470c3a4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int lcd = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adf977b563dc485f1d1c4e601a9b31b68"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">volatile int timerScaler = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 455 - 0
CoffeeCode/html/display_8h.html

@@ -0,0 +1,455 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: display.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">display.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;string&gt;</code><br />
+</div>
+<p><a href="display_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdisplay__string__t.html">display_string_t</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:aa0b13de112401f9608d402bfc5a14d0d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#aa0b13de112401f9608d402bfc5a14d0d">DEFAULT_LANG</a>&#160;&#160;&#160;<a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30">lang_de</a></td></tr>
+<tr class="memdesc:aa0b13de112401f9608d402bfc5a14d0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default display language.  <a href="#aa0b13de112401f9608d402bfc5a14d0d">More...</a><br /></td></tr>
+<tr class="separator:aa0b13de112401f9608d402bfc5a14d0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc2b684fcc127e93aee54a3a45e25a7c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#abc2b684fcc127e93aee54a3a45e25a7c">REFRESH_RATE</a>&#160;&#160;&#160;10</td></tr>
+<tr class="memdesc:abc2b684fcc127e93aee54a3a45e25a7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display refresh rate in Hz.  <a href="#abc2b684fcc127e93aee54a3a45e25a7c">More...</a><br /></td></tr>
+<tr class="separator:abc2b684fcc127e93aee54a3a45e25a7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abdc19d7f30976562c2d3efce365ef8f4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#abdc19d7f30976562c2d3efce365ef8f4">DISPLAY_ROWS</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:abdc19d7f30976562c2d3efce365ef8f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad01ecf7f4d29cece64f84d890e414570"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#ad01ecf7f4d29cece64f84d890e414570">DISPLAY_COLS</a>&#160;&#160;&#160;16</td></tr>
+<tr class="separator:ad01ecf7f4d29cece64f84d890e414570"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a681b0c0e7b9408f4c70f8e76da34d080"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a> { <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30">lang_de</a>, 
+<a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080af59ab6af8bf5947a70c77afafccac15b">lang_en</a>, 
+<a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080a8222fe4f6d1104084bbf5a691f4ce644">lang_last</a>
+ }<tr class="separator:a681b0c0e7b9408f4c70f8e76da34d080"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</td></tr>
+<tr class="memitem:a4984755f821d9f0c49acdcac62f4c907"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display_strings_t</a> { <br />
+&#160;&#160;<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a9eb4c3532bbada27013a4cff3dc8a624">str_heating</a>, 
+<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8aaa4383254e4327e846e45befac54d0">str_heatingready</a>, 
+<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907af200a74535586cc849fc6f5f38c85171">str_ready</a>, 
+<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8e3b0fbb0f42de5df8434e44e0b85272">str_brewing</a>, 
+<br />
+&#160;&#160;<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a2bb69120919321c90fe0862abc8a247c">str_cleaning</a>, 
+<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aeaed0d27362049f28692626f30566890">str_error</a>, 
+<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aadf50a104ff26cf8b575c0b68e52a572">str_flow</a>, 
+<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907ab88ed9e2db4f34884981000ac617defb">str_bye</a>, 
+<br />
+&#160;&#160;<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aa22549c4ff533e248b5fad404f80c6d9">str_last</a>
+<br />
+ }<tr class="separator:a4984755f821d9f0c49acdcac62f4c907"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab2db422e214d76776b8a375787d1384c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#ab2db422e214d76776b8a375787d1384c">displayThread</a> (void *threadid)</td></tr>
+<tr class="memdesc:ab2db422e214d76776b8a375787d1384c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main thread to handle display data.  <a href="#ab2db422e214d76776b8a375787d1384c">More...</a><br /></td></tr>
+<tr class="separator:ab2db422e214d76776b8a375787d1384c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5eb6b80aca0f751332c47c410d06a2a"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#ab5eb6b80aca0f751332c47c410d06a2a">displayTimerHandler</a> (void *threadid)</td></tr>
+<tr class="memdesc:ab5eb6b80aca0f751332c47c410d06a2a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timer handler for display update.  <a href="#ab5eb6b80aca0f751332c47c410d06a2a">More...</a><br /></td></tr>
+<tr class="separator:ab5eb6b80aca0f751332c47c410d06a2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c548751802c5960b3092be28cc56d9f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#a8c548751802c5960b3092be28cc56d9f">displayInit</a> (void)</td></tr>
+<tr class="memdesc:a8c548751802c5960b3092be28cc56d9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes display.  <a href="#a8c548751802c5960b3092be28cc56d9f">More...</a><br /></td></tr>
+<tr class="separator:a8c548751802c5960b3092be28cc56d9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfd367c63541be192cdc63d6e8b38a79"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#abfd367c63541be192cdc63d6e8b38a79">displayTerminate</a> (void)</td></tr>
+<tr class="memdesc:abfd367c63541be192cdc63d6e8b38a79"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles cleanup before program termination.  <a href="#abfd367c63541be192cdc63d6e8b38a79">More...</a><br /></td></tr>
+<tr class="separator:abfd367c63541be192cdc63d6e8b38a79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b10d2d49414256ef745f7e910748fee"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#a9b10d2d49414256ef745f7e910748fee">displaySetLang</a> (<a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a> lang)</td></tr>
+<tr class="memdesc:a9b10d2d49414256ef745f7e910748fee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the language of the display text.  <a href="#a9b10d2d49414256ef745f7e910748fee">More...</a><br /></td></tr>
+<tr class="separator:a9b10d2d49414256ef745f7e910748fee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf85c9537e38ffe3f1ee356a4638880e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#adf85c9537e38ffe3f1ee356a4638880e">displayPushState</a> (int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="memdesc:adf85c9537e38ffe3f1ee356a4638880e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Updates the display state to the matching coffee state.  <a href="#adf85c9537e38ffe3f1ee356a4638880e">More...</a><br /></td></tr>
+<tr class="separator:adf85c9537e38ffe3f1ee356a4638880e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac750de2337343c08e5fd88d08316adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#ac750de2337343c08e5fd88d08316adb2">displayRefresh</a> (void)</td></tr>
+<tr class="memdesc:ac750de2337343c08e5fd88d08316adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Refreshed the display content and outputs it.  <a href="#ac750de2337343c08e5fd88d08316adb2">More...</a><br /></td></tr>
+<tr class="separator:ac750de2337343c08e5fd88d08316adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2661cdbd686f7d3389a3d9c2cf98f47"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="display_8h.html#ab2661cdbd686f7d3389a3d9c2cf98f47">displayGetString</a> (<a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display_strings_t</a> string)</td></tr>
+<tr class="memdesc:ab2661cdbd686f7d3389a3d9c2cf98f47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the matching translation of a string.  <a href="#ab2661cdbd686f7d3389a3d9c2cf98f47">More...</a><br /></td></tr>
+<tr class="separator:ab2661cdbd686f7d3389a3d9c2cf98f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="aa0b13de112401f9608d402bfc5a14d0d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEFAULT_LANG&#160;&#160;&#160;<a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30">lang_de</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Default display language. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad01ecf7f4d29cece64f84d890e414570"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DISPLAY_COLS&#160;&#160;&#160;16</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abdc19d7f30976562c2d3efce365ef8f4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DISPLAY_ROWS&#160;&#160;&#160;2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abc2b684fcc127e93aee54a3a45e25a7c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REFRESH_RATE&#160;&#160;&#160;10</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Display refresh rate in Hz. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="a681b0c0e7b9408f4c70f8e76da34d080"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30"></a>lang_de&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a681b0c0e7b9408f4c70f8e76da34d080af59ab6af8bf5947a70c77afafccac15b"></a>lang_en&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a681b0c0e7b9408f4c70f8e76da34d080a8222fe4f6d1104084bbf5a691f4ce644"></a>lang_last&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display_strings_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907a9eb4c3532bbada27013a4cff3dc8a624"></a>str_heating&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907a8aaa4383254e4327e846e45befac54d0"></a>str_heatingready&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907af200a74535586cc849fc6f5f38c85171"></a>str_ready&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907a8e3b0fbb0f42de5df8434e44e0b85272"></a>str_brewing&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907a2bb69120919321c90fe0862abc8a247c"></a>str_cleaning&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907aeaed0d27362049f28692626f30566890"></a>str_error&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907aadf50a104ff26cf8b575c0b68e52a572"></a>str_flow&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907ab88ed9e2db4f34884981000ac617defb"></a>str_bye&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4984755f821d9f0c49acdcac62f4c907aa22549c4ff533e248b5fad404f80c6d9"></a>str_last&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab2661cdbd686f7d3389a3d9c2cf98f47"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char* displayGetString </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display_strings_t</a>&#160;</td>
+          <td class="paramname"><em>string</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the matching translation of a string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">string</td><td>Requested string </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Translated string </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8c548751802c5960b3092be28cc56d9f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initializes display. </p>
+
+</div>
+</div>
+<a class="anchor" id="adf85c9537e38ffe3f1ee356a4638880e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayPushState </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Updates the display state to the matching coffee state. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">state</td><td>New state </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ac750de2337343c08e5fd88d08316adb2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayRefresh </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Refreshed the display content and outputs it. </p>
+
+</div>
+</div>
+<a class="anchor" id="a9b10d2d49414256ef745f7e910748fee"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displaySetLang </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a>&#160;</td>
+          <td class="paramname"><em>lang</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the language of the display text. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">lang</td><td>New language </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="abfd367c63541be192cdc63d6e8b38a79"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void displayTerminate </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Handles cleanup before program termination. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab2db422e214d76776b8a375787d1384c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* displayThread </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>threadid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Main thread to handle display data. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*threadid</td><td>Thread ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab5eb6b80aca0f751332c47c410d06a2a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* displayTimerHandler </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>threadid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Timer handler for display update. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">*threadid</td><td>Thread ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 223 - 0
CoffeeCode/html/display_8h_source.html

@@ -0,0 +1,223 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: display.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">display.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="display_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * display.h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *  Created on: Sep 26, 2017</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *      Author: Philipp Hinz</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#ifndef DISPLAY_H_</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#define DISPLAY_H_</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;</div>
+<div class="line"><a name="l00012"></a><span class="lineno"><a class="line" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">   12</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30">   13</a></span>&#160;    <a class="code" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30">lang_de</a>,</div>
+<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080af59ab6af8bf5947a70c77afafccac15b">   14</a></span>&#160;    <a class="code" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080af59ab6af8bf5947a70c77afafccac15b">lang_en</a>,</div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080a8222fe4f6d1104084bbf5a691f4ce644">   15</a></span>&#160;    <a class="code" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080a8222fe4f6d1104084bbf5a691f4ce644">lang_last</a></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;} <a class="code" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a>;</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">   18</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a9eb4c3532bbada27013a4cff3dc8a624">   19</a></span>&#160;    <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a9eb4c3532bbada27013a4cff3dc8a624">str_heating</a>,</div>
+<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8aaa4383254e4327e846e45befac54d0">   20</a></span>&#160;    <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8aaa4383254e4327e846e45befac54d0">str_heatingready</a>,</div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907af200a74535586cc849fc6f5f38c85171">   21</a></span>&#160;    <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907af200a74535586cc849fc6f5f38c85171">str_ready</a>,</div>
+<div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8e3b0fbb0f42de5df8434e44e0b85272">   22</a></span>&#160;    <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8e3b0fbb0f42de5df8434e44e0b85272">str_brewing</a>,</div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a2bb69120919321c90fe0862abc8a247c">   23</a></span>&#160;    <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a2bb69120919321c90fe0862abc8a247c">str_cleaning</a>,</div>
+<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aeaed0d27362049f28692626f30566890">   24</a></span>&#160;    <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aeaed0d27362049f28692626f30566890">str_error</a>,</div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aadf50a104ff26cf8b575c0b68e52a572">   25</a></span>&#160;    <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aadf50a104ff26cf8b575c0b68e52a572">str_flow</a>,</div>
+<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907ab88ed9e2db4f34884981000ac617defb">   26</a></span>&#160;    <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907ab88ed9e2db4f34884981000ac617defb">str_bye</a>,</div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aa22549c4ff533e248b5fad404f80c6d9">   27</a></span>&#160;    <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aa22549c4ff533e248b5fad404f80c6d9">str_last</a></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;} <a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display_strings_t</a>;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="structdisplay__string__t.html">   30</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="structdisplay__string__t.html#ab9601397e04cf6055529648402146924">   31</a></span>&#160;    <span class="keywordtype">char</span> <span class="keyword">const</span> * <span class="keyword">const</span> text[<a class="code" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080a8222fe4f6d1104084bbf5a691f4ce644">lang_last</a>];</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;} <a class="code" href="structdisplay__string__t.html">display_string_t</a>;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structdisplay__string__t.html">display_string_t</a> display_strings[<a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aa22549c4ff533e248b5fad404f80c6d9">str_last</a>] =</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;{</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        { <span class="comment">// heating</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;                {</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;                        <span class="stringliteral">&quot;Heizt auf&quot;</span>,</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;                        <span class="stringliteral">&quot;Heating&quot;</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;                }</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;        },</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;        { <span class="comment">// heatingready</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;                {</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;                        <span class="stringliteral">&quot;Bereit (Heizt)&quot;</span>,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;                        <span class="stringliteral">&quot;Ready (Heating)&quot;</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;                }</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;        },</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;        { <span class="comment">// ready</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;                {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;                        <span class="stringliteral">&quot;Bereit&quot;</span>,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;                        <span class="stringliteral">&quot;Ready&quot;</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;                }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        },</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;        { <span class="comment">// brewing</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;                {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;                        <span class="stringliteral">&quot;Bezug..&quot;</span>,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;                        <span class="stringliteral">&quot;Brewing..&quot;</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;                }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        },</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        { <span class="comment">// cleaning</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;                {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;                        <span class="stringliteral">&quot;Reinigt..&quot;</span>,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;                        <span class="stringliteral">&quot;Cleaning..&quot;</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;                }</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        },</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        { <span class="comment">// error</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;                {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;                        <span class="stringliteral">&quot;Fehler&quot;</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;                        <span class="stringliteral">&quot;Error&quot;</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;                }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        },</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;        { <span class="comment">// flow</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;                {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;                        <span class="stringliteral">&quot;Menge&quot;</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;                        <span class="stringliteral">&quot;Flow&quot;</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;                }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        },</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        { <span class="comment">// bye</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;                {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;                        <span class="stringliteral">&quot;Auf wiedersehen&quot;</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;                        <span class="stringliteral">&quot;Good bye&quot;</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;                }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;};</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="display_8h.html#aa0b13de112401f9608d402bfc5a14d0d">   86</a></span>&#160;<span class="preprocessor">#define DEFAULT_LANG    lang_de </span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="display_8h.html#abc2b684fcc127e93aee54a3a45e25a7c">   87</a></span>&#160;<span class="preprocessor">#define REFRESH_RATE    10 </span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="display_8h.html#abdc19d7f30976562c2d3efce365ef8f4">   88</a></span>&#160;<span class="preprocessor">#define DISPLAY_ROWS    2</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="display_8h.html#ad01ecf7f4d29cece64f84d890e414570">   89</a></span>&#160;<span class="preprocessor">#define DISPLAY_COLS    16</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="keywordtype">void</span> *<a class="code" href="display_8h.html#ab2db422e214d76776b8a375787d1384c">displayThread</a>(<span class="keywordtype">void</span> *threadid);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="keywordtype">void</span> *<a class="code" href="display_8h.html#ab5eb6b80aca0f751332c47c410d06a2a">displayTimerHandler</a>(<span class="keywordtype">void</span> *threadid);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="keywordtype">void</span> <a class="code" href="display_8h.html#a8c548751802c5960b3092be28cc56d9f">displayInit</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="keywordtype">void</span> <a class="code" href="display_8h.html#abfd367c63541be192cdc63d6e8b38a79">displayTerminate</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="keywordtype">void</span> <a class="code" href="display_8h.html#a9b10d2d49414256ef745f7e910748fee">displaySetLang</a>(<a class="code" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a> lang);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="keywordtype">void</span> <a class="code" href="display_8h.html#adf85c9537e38ffe3f1ee356a4638880e">displayPushState</a>(<span class="keywordtype">int</span> <a class="code" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="keywordtype">void</span> <a class="code" href="display_8h.html#ac750de2337343c08e5fd88d08316adb2">displayRefresh</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="display_8h.html#ab2661cdbd686f7d3389a3d9c2cf98f47">displayGetString</a>(<a class="code" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display_strings_t</a> <span class="keywordtype">string</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* DISPLAY_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="display_8h_html_ac750de2337343c08e5fd88d08316adb2"><div class="ttname"><a href="display_8h.html#ac750de2337343c08e5fd88d08316adb2">displayRefresh</a></div><div class="ttdeci">void displayRefresh(void)</div><div class="ttdoc">Refreshed the display content and outputs it. </div><div class="ttdef"><b>Definition:</b> display.cpp:198</div></div>
+<div class="ttc" id="structdisplay__string__t_html"><div class="ttname"><a href="structdisplay__string__t.html">display_string_t</a></div><div class="ttdef"><b>Definition:</b> display.h:30</div></div>
+<div class="ttc" id="display_8h_html_ab2db422e214d76776b8a375787d1384c"><div class="ttname"><a href="display_8h.html#ab2db422e214d76776b8a375787d1384c">displayThread</a></div><div class="ttdeci">void * displayThread(void *threadid)</div><div class="ttdoc">Main thread to handle display data. </div><div class="ttdef"><b>Definition:</b> display.cpp:103</div></div>
+<div class="ttc" id="display_8h_html_a681b0c0e7b9408f4c70f8e76da34d080af59ab6af8bf5947a70c77afafccac15b"><div class="ttname"><a href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080af59ab6af8bf5947a70c77afafccac15b">lang_en</a></div><div class="ttdef"><b>Definition:</b> display.h:14</div></div>
+<div class="ttc" id="display_8h_html_adf85c9537e38ffe3f1ee356a4638880e"><div class="ttname"><a href="display_8h.html#adf85c9537e38ffe3f1ee356a4638880e">displayPushState</a></div><div class="ttdeci">void displayPushState(int state)</div><div class="ttdoc">Updates the display state to the matching coffee state. </div><div class="ttdef"><b>Definition:</b> display.cpp:263</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907aadf50a104ff26cf8b575c0b68e52a572"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aadf50a104ff26cf8b575c0b68e52a572">str_flow</a></div><div class="ttdef"><b>Definition:</b> display.h:25</div></div>
+<div class="ttc" id="display_8h_html_a681b0c0e7b9408f4c70f8e76da34d080"><div class="ttname"><a href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display_lang_t</a></div><div class="ttdeci">display_lang_t</div><div class="ttdef"><b>Definition:</b> display.h:12</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907ab88ed9e2db4f34884981000ac617defb"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907ab88ed9e2db4f34884981000ac617defb">str_bye</a></div><div class="ttdef"><b>Definition:</b> display.h:26</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907a8e3b0fbb0f42de5df8434e44e0b85272"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8e3b0fbb0f42de5df8434e44e0b85272">str_brewing</a></div><div class="ttdef"><b>Definition:</b> display.h:22</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display_strings_t</a></div><div class="ttdeci">display_strings_t</div><div class="ttdef"><b>Definition:</b> display.h:18</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907a2bb69120919321c90fe0862abc8a247c"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a2bb69120919321c90fe0862abc8a247c">str_cleaning</a></div><div class="ttdef"><b>Definition:</b> display.h:23</div></div>
+<div class="ttc" id="display_8h_html_a8c548751802c5960b3092be28cc56d9f"><div class="ttname"><a href="display_8h.html#a8c548751802c5960b3092be28cc56d9f">displayInit</a></div><div class="ttdeci">void displayInit(void)</div><div class="ttdoc">Initializes display. </div><div class="ttdef"><b>Definition:</b> display.cpp:159</div></div>
+<div class="ttc" id="display_8h_html_a9b10d2d49414256ef745f7e910748fee"><div class="ttname"><a href="display_8h.html#a9b10d2d49414256ef745f7e910748fee">displaySetLang</a></div><div class="ttdeci">void displaySetLang(display_lang_t lang)</div><div class="ttdoc">Sets the language of the display text. </div><div class="ttdef"><b>Definition:</b> display.cpp:190</div></div>
+<div class="ttc" id="display_8h_html_ab5eb6b80aca0f751332c47c410d06a2a"><div class="ttname"><a href="display_8h.html#ab5eb6b80aca0f751332c47c410d06a2a">displayTimerHandler</a></div><div class="ttdeci">void * displayTimerHandler(void *threadid)</div><div class="ttdoc">Timer handler for display update. </div><div class="ttdef"><b>Definition:</b> display.cpp:125</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907af200a74535586cc849fc6f5f38c85171"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907af200a74535586cc849fc6f5f38c85171">str_ready</a></div><div class="ttdef"><b>Definition:</b> display.h:21</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907aa22549c4ff533e248b5fad404f80c6d9"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aa22549c4ff533e248b5fad404f80c6d9">str_last</a></div><div class="ttdef"><b>Definition:</b> display.h:27</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907a8aaa4383254e4327e846e45befac54d0"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8aaa4383254e4327e846e45befac54d0">str_heatingready</a></div><div class="ttdef"><b>Definition:</b> display.h:20</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907a9eb4c3532bbada27013a4cff3dc8a624"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a9eb4c3532bbada27013a4cff3dc8a624">str_heating</a></div><div class="ttdef"><b>Definition:</b> display.h:19</div></div>
+<div class="ttc" id="display_8h_html_ab2661cdbd686f7d3389a3d9c2cf98f47"><div class="ttname"><a href="display_8h.html#ab2661cdbd686f7d3389a3d9c2cf98f47">displayGetString</a></div><div class="ttdeci">const char * displayGetString(display_strings_t string)</div><div class="ttdoc">Returns the matching translation of a string. </div><div class="ttdef"><b>Definition:</b> display.cpp:252</div></div>
+<div class="ttc" id="display_8h_html_a4984755f821d9f0c49acdcac62f4c907aeaed0d27362049f28692626f30566890"><div class="ttname"><a href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aeaed0d27362049f28692626f30566890">str_error</a></div><div class="ttdef"><b>Definition:</b> display.h:24</div></div>
+<div class="ttc" id="display_8h_html_abfd367c63541be192cdc63d6e8b38a79"><div class="ttname"><a href="display_8h.html#abfd367c63541be192cdc63d6e8b38a79">displayTerminate</a></div><div class="ttdeci">void displayTerminate(void)</div><div class="ttdoc">Handles cleanup before program termination. </div><div class="ttdef"><b>Definition:</b> display.cpp:180</div></div>
+<div class="ttc" id="display_8h_html_a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30"><div class="ttname"><a href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30">lang_de</a></div><div class="ttdef"><b>Definition:</b> display.h:13</div></div>
+<div class="ttc" id="display_8h_html_a681b0c0e7b9408f4c70f8e76da34d080a8222fe4f6d1104084bbf5a691f4ce644"><div class="ttname"><a href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080a8222fe4f6d1104084bbf5a691f4ce644">lang_last</a></div><div class="ttdef"><b>Definition:</b> display.h:15</div></div>
+<div class="ttc" id="coffee_8cpp_html_a89f234133d3efe315836311cbf21c64b"><div class="ttname"><a href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a></div><div class="ttdeci">int state</div><div class="ttdef"><b>Definition:</b> coffee.cpp:27</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

BIN
CoffeeCode/html/doc.png


+ 1454 - 0
CoffeeCode/html/doxygen.css

@@ -0,0 +1,1454 @@
+/* The standard CSS for doxygen 1.8.10 */
+
+body, table, div, p, dl {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+.title {
+	font: 400 14px/28px Roboto,sans-serif;
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid #879ECB;
+	color: #354C7B;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #3D578C;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #4665A2;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #9CAFD4;
+	color: #ffffff;
+	border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+	color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+	background-color: #FBFCFD;
+	border: 1px solid #C4CFE5;
+}
+
+div.line {
+	font-family: monospace, fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
+}
+
+div.ah, span.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background-color: white;
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+td.indexkey {
+	background-color: #EBEFF6;
+	font-weight: bold;
+	border: 1px solid #C4CFE5;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+	background-color: #EBEFF6;
+	border: 1px solid #C4CFE5;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+	background: #EBEFF6;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #F9FAFC;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: #4665A2;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+	font-size: 80%;
+	color: #4665A2;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.memnav {
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: bold;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        -moz-border-radius-topleft: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+        -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+	text-shadow: none;
+	color: white;
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #9CAFD4;
+        border-bottom: 1px solid #9CAFD4;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+	padding-top: 3px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: #F7F8FB;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: #3D578C;
+}
+
+.arrow {
+    color: #9CAFD4;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: pointer;
+    font-size: 80%;
+    display: inline-block;
+    width: 16px;
+    height: 22px;
+}
+
+.icon {
+    font-family: Arial, Helvetica;
+    font-weight: bold;
+    font-size: 12px;
+    height: 14px;
+    width: 16px;
+    display: inline-block;
+    background-color: #728DC1;
+    color: white;
+    text-align: center;
+    border-radius: 4px;
+    margin-left: 2px;
+    margin-right: 2px;
+}
+
+.icona {
+    width: 24px;
+    height: 22px;
+    display: inline-block;
+}
+
+.iconfopen {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderopen.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.iconfclosed {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderclosed.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.icondoc {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('doc.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+table.directory {
+    font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: #2A3D61;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 0px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	background-position: 0 -5px;
+	height:30px;
+	line-height:30px;
+	color:#8AA0CC;
+	border:solid 1px #C2CDE4;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+	color: #283A5D;
+	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+	text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+	color:#6884BD;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#364D7C;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: #F9FAFC;
+	margin:  0px;
+	border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+        padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.note
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00D000;
+}
+
+dl.deprecated
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #505050;
+}
+
+dl.todo
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00C0E0;
+}
+
+dl.test
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #3030E0;
+}
+
+dl.bug
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectalign
+{
+        vertical-align: middle;
+}
+
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.diagraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 20px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+        position: absolute;
+        display: none;
+}
+
+#powerTip {
+	cursor: default;
+	white-space: nowrap;
+	background-color: white;
+	border: 1px solid gray;
+	border-radius: 4px 4px 4px 4px;
+	box-shadow: 1px 1px 7px gray;
+	display: none;
+	font-size: smaller;
+	max-width: 80%;
+	opacity: 0.9;
+	padding: 1ex 1em 1em;
+	position: absolute;
+	z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+        color: grey;
+	font-style: italic;
+}
+
+#powerTip div.ttname a {
+        font-weight: bold;
+}
+
+#powerTip div.ttname {
+        font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+        color: #006318;
+}
+
+#powerTip div {
+        margin: 0px;
+        padding: 0px;
+        font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+	content: "";
+	position: absolute;
+	margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	border: solid transparent;
+	content: " ";
+	height: 0;
+	width: 0;
+	position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+	border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+	border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+	top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+	border-top-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+#powerTip.n:before {
+	border-top-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+	left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+	right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+	left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+	border-bottom-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+	border-bottom-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+	left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+	right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+	left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+	left: 100%;
+}
+#powerTip.e:after {
+	border-left-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.e:before {
+	border-left-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+	right: 100%;
+}
+#powerTip.w:after {
+	border-right-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.w:before {
+	border-right-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+

BIN
CoffeeCode/html/doxygen.png


+ 97 - 0
CoffeeCode/html/dynsections.js

@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function() {
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+      a.html('&#9660;');
+      $(this).show();
+    } else if (l==level+1) {
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+      a.html('&#9658;');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  // the clicked row
+  var currentRow = $('#row_'+id);
+
+  // all rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+  // only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() { return this.id.match(re); });
+
+  // first row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    // replace down arrow by right arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    currentRowSpans.filter(".arrow").html('&#9658;');
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+  } else { // we are SHOWING
+    // replace right arrow by down arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+    currentRowSpans.filter(".arrow").html('&#9660;');
+    // replace down arrows by right arrows for child rows
+    var childRowsSpans = childRows.find("span");
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+

+ 122 - 0
CoffeeCode/html/files.html

@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">File List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="coffee_8cpp.html" target="_self">coffee.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="coffee_8h_source.html"><span class="icondoc"></span></a><a class="el" href="coffee_8h.html" target="_self">coffee.h</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="crc_8cpp.html" target="_self">crc.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="crc_8h_source.html"><span class="icondoc"></span></a><a class="el" href="crc_8h.html" target="_self">crc.h</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="database_8cpp.html" target="_self">database.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="database_8h.html" target="_self">database.h</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="display_8cpp.html" target="_self">display.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="display_8h_source.html"><span class="icondoc"></span></a><a class="el" href="display_8h.html" target="_self">display.h</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="global_8h_source.html"><span class="icondoc"></span></a><a class="el" href="global_8h.html" target="_self">global.h</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="hal_8cpp.html" target="_self">hal.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="hal_8h_source.html"><span class="icondoc"></span></a><a class="el" href="hal_8h.html" target="_self">hal.h</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="lcd_8cpp.html" target="_self">lcd.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="lcd_8h_source.html"><span class="icondoc"></span></a><a class="el" href="lcd_8h.html" target="_self">lcd.h</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="logger_8cpp.html" target="_self">logger.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="logger_8h_source.html"><span class="icondoc"></span></a><a class="el" href="logger_8h.html" target="_self">logger.h</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="main_8cpp.html" target="_self">main.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="spi_8cpp.html" target="_self">spi.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="spi_8h_source.html"><span class="icondoc"></span></a><a class="el" href="spi_8h.html" target="_self">spi.h</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="stripe_8cpp.html" target="_self">stripe.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="stripe_8h_source.html"><span class="icondoc"></span></a><a class="el" href="stripe_8h.html" target="_self">stripe.h</a></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="timer_8cpp.html" target="_self">timer.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="timer_8h_source.html"><span class="icondoc"></span></a><a class="el" href="timer_8h.html" target="_self">timer.h</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

BIN
CoffeeCode/html/folderclosed.png


BIN
CoffeeCode/html/folderopen.png


+ 138 - 0
CoffeeCode/html/functions.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div><ul>
+<li>blue
+: <a class="el" href="structstripe__color.html#a2de85b974fc4ec0bcea12d6a270e53a9">stripe_color</a>
+</li>
+<li>call()
+: <a class="el" href="classtimer.html#a7d9f6d9f98d51534be127d57f497b345">timer</a>
+</li>
+<li>getDivider()
+: <a class="el" href="classtimer.html#a3d5386a682a23df5c6a841ce8fc55bd4">timer</a>
+</li>
+<li>green
+: <a class="el" href="structstripe__color.html#ab650b31353bfddd30e9ea11f8adb870f">stripe_color</a>
+</li>
+<li>isActive()
+: <a class="el" href="classtimer.html#abbb117c0ae32aa48df5df60328e224f9">timer</a>
+</li>
+<li>next
+: <a class="el" href="classtimer.html#a296c5e65582e19eaf61ae0bffa4071dc">timer</a>
+</li>
+<li>red
+: <a class="el" href="structstripe__color.html#a784aa14cb8856664e9533883d8add33b">stripe_color</a>
+</li>
+<li>setDivider()
+: <a class="el" href="classtimer.html#a0a4b48605728320ce7a5a825e34e16f2">timer</a>
+</li>
+<li>start()
+: <a class="el" href="classtimer.html#a9aa894a57748b2bdf3adce46f5736794">timer</a>
+</li>
+<li>stop()
+: <a class="el" href="classtimer.html#a3218d61649e284071544b17c8c915ecc">timer</a>
+</li>
+<li>text
+: <a class="el" href="structdisplay__string__t.html#ab9601397e04cf6055529648402146924">display_string_t</a>
+</li>
+<li>timer()
+: <a class="el" href="classtimer.html#a863dd9a194499a5ebbaf6937969916f2">timer</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 123 - 0
CoffeeCode/html/functions_func.html

@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Data Fields - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>call()
+: <a class="el" href="classtimer.html#a7d9f6d9f98d51534be127d57f497b345">timer</a>
+</li>
+<li>getDivider()
+: <a class="el" href="classtimer.html#a3d5386a682a23df5c6a841ce8fc55bd4">timer</a>
+</li>
+<li>isActive()
+: <a class="el" href="classtimer.html#abbb117c0ae32aa48df5df60328e224f9">timer</a>
+</li>
+<li>setDivider()
+: <a class="el" href="classtimer.html#a0a4b48605728320ce7a5a825e34e16f2">timer</a>
+</li>
+<li>start()
+: <a class="el" href="classtimer.html#a9aa894a57748b2bdf3adce46f5736794">timer</a>
+</li>
+<li>stop()
+: <a class="el" href="classtimer.html#a3218d61649e284071544b17c8c915ecc">timer</a>
+</li>
+<li>timer()
+: <a class="el" href="classtimer.html#a863dd9a194499a5ebbaf6937969916f2">timer</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 117 - 0
CoffeeCode/html/functions_vars.html

@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>blue
+: <a class="el" href="structstripe__color.html#a2de85b974fc4ec0bcea12d6a270e53a9">stripe_color</a>
+</li>
+<li>green
+: <a class="el" href="structstripe__color.html#ab650b31353bfddd30e9ea11f8adb870f">stripe_color</a>
+</li>
+<li>next
+: <a class="el" href="classtimer.html#a296c5e65582e19eaf61ae0bffa4071dc">timer</a>
+</li>
+<li>red
+: <a class="el" href="structstripe__color.html#a784aa14cb8856664e9533883d8add33b">stripe_color</a>
+</li>
+<li>text
+: <a class="el" href="structdisplay__string__t.html#ab9601397e04cf6055529648402146924">display_string_t</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 350 - 0
CoffeeCode/html/global_8h.html

@@ -0,0 +1,350 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: global.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">global.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;pthread.h&gt;</code><br />
+</div>
+<p><a href="global_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:aa8cbb3355883e35c18820bfa63c4ce3a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#aa8cbb3355883e35c18820bfa63c4ce3a">SPI_CHANNEL</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:aa8cbb3355883e35c18820bfa63c4ce3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0056b7fdd0f81fad9cd38e9fd389a4b6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a0056b7fdd0f81fad9cd38e9fd389a4b6">SPI_SPEED</a>&#160;&#160;&#160;200000</td></tr>
+<tr class="separator:a0056b7fdd0f81fad9cd38e9fd389a4b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91dee3a4ce745234c8a4998388d6c645"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a91dee3a4ce745234c8a4998388d6c645">TIMER_DELAY_US</a>&#160;&#160;&#160;50000</td></tr>
+<tr class="separator:a91dee3a4ce745234c8a4998388d6c645"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad55c274bf698014e01dbc9afde3fc610"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#ad55c274bf698014e01dbc9afde3fc610">SQL_DATABASE</a>&#160;&#160;&#160;&quot;coffee.sqlite&quot;</td></tr>
+<tr class="separator:ad55c274bf698014e01dbc9afde3fc610"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a67a7c5f1e4a75f1508395d450895990d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a67a7c5f1e4a75f1508395d450895990d">THREAD_MAIN</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a67a7c5f1e4a75f1508395d450895990d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77f390a98c0e73ae38abd20f467d6cce"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a77f390a98c0e73ae38abd20f467d6cce">THREAD_STRIPE</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a77f390a98c0e73ae38abd20f467d6cce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a843e1fa4b4de70b9f31d42a41a896c1c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a843e1fa4b4de70b9f31d42a41a896c1c">THREAD_DISPLAY</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:a843e1fa4b4de70b9f31d42a41a896c1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f697926bb7bcc4722a9e650a1acdb6a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a5f697926bb7bcc4722a9e650a1acdb6a">THREAD_COFFEE</a>&#160;&#160;&#160;3</td></tr>
+<tr class="separator:a5f697926bb7bcc4722a9e650a1acdb6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab6e46b0071bb3330546b7f2b601d0a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#ab6e46b0071bb3330546b7f2b601d0a6c">killThread</a> (int threadid, int sig)</td></tr>
+<tr class="memdesc:ab6e46b0071bb3330546b7f2b601d0a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sends a signal to a thread.  <a href="#ab6e46b0071bb3330546b7f2b601d0a6c">More...</a><br /></td></tr>
+<tr class="separator:ab6e46b0071bb3330546b7f2b601d0a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a0b2caeb4b6f130be43e5a2f0267dd453"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a0b2caeb4b6f130be43e5a2f0267dd453">verbose</a></td></tr>
+<tr class="separator:a0b2caeb4b6f130be43e5a2f0267dd453"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae88c926fe2a10f736eb01b1d1e899a1c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#ae88c926fe2a10f736eb01b1d1e899a1c">optDate</a></td></tr>
+<tr class="separator:ae88c926fe2a10f736eb01b1d1e899a1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7bfeade3d2f19e8baecdcddd7f9162fa"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a7bfeade3d2f19e8baecdcddd7f9162fa">optPower</a></td></tr>
+<tr class="separator:a7bfeade3d2f19e8baecdcddd7f9162fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a24ab7c0142e353c9ce9ca1ee1210bb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a2a24ab7c0142e353c9ce9ca1ee1210bb">optCold</a></td></tr>
+<tr class="separator:a2a24ab7c0142e353c9ce9ca1ee1210bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4acff8232e4aec9cd5c6dc200ac55ef3"><td class="memItemLeft" align="right" valign="top">pthread_mutex_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a></td></tr>
+<tr class="separator:a4acff8232e4aec9cd5c6dc200ac55ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e61240888e929e526f41e19b6c0bd46"><td class="memItemLeft" align="right" valign="top">pthread_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="global_8h.html#a5e61240888e929e526f41e19b6c0bd46">thread</a> []</td></tr>
+<tr class="separator:a5e61240888e929e526f41e19b6c0bd46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="aa8cbb3355883e35c18820bfa63c4ce3a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SPI_CHANNEL&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0056b7fdd0f81fad9cd38e9fd389a4b6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SPI_SPEED&#160;&#160;&#160;200000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad55c274bf698014e01dbc9afde3fc610"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SQL_DATABASE&#160;&#160;&#160;&quot;coffee.sqlite&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5f697926bb7bcc4722a9e650a1acdb6a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define THREAD_COFFEE&#160;&#160;&#160;3</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a843e1fa4b4de70b9f31d42a41a896c1c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define THREAD_DISPLAY&#160;&#160;&#160;2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a67a7c5f1e4a75f1508395d450895990d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define THREAD_MAIN&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a77f390a98c0e73ae38abd20f467d6cce"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define THREAD_STRIPE&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a91dee3a4ce745234c8a4998388d6c645"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TIMER_DELAY_US&#160;&#160;&#160;50000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab6e46b0071bb3330546b7f2b601d0a6c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void killThread </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>threadid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>sig</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sends a signal to a thread. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">threadid</td><td>ID of the thread </td></tr>
+    <tr><td class="paramname">sig</td><td>Signal to send </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a4acff8232e4aec9cd5c6dc200ac55ef3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">pthread_mutex_t mutex</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2a24ab7c0142e353c9ce9ca1ee1210bb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool optCold</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae88c926fe2a10f736eb01b1d1e899a1c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool optDate</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7bfeade3d2f19e8baecdcddd7f9162fa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool optPower</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5e61240888e929e526f41e19b6c0bd46"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">pthread_t thread[]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0b2caeb4b6f130be43e5a2f0267dd453"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int verbose</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 142 - 0
CoffeeCode/html/global_8h_source.html

@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: global.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">global.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="global_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/**********************************************************************</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> Universitaet Ulm</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> Abteilung Organisation und Management von Informationssystemen</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> Author: Philipp Hinz</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> **********************************************************************/</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;</div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#ifndef _GLOBAL_H_</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#define _GLOBAL_H_</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;</div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;pthread.h&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;</div>
+<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="global_8h.html#aa8cbb3355883e35c18820bfa63c4ce3a">   14</a></span>&#160;<span class="preprocessor">#define SPI_CHANNEL     1       // 0 or 1 on Raspberry Pi</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="global_8h.html#a0056b7fdd0f81fad9cd38e9fd389a4b6">   15</a></span>&#160;<span class="preprocessor">#define SPI_SPEED       200000  // SPI clock speed in Hz</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="global_8h.html#a91dee3a4ce745234c8a4998388d6c645">   17</a></span>&#160;<span class="preprocessor">#define TIMER_DELAY_US  50000   // Basic timer delay in us</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">// SQL config</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="global_8h.html#ad55c274bf698014e01dbc9afde3fc610">   20</a></span>&#160;<span class="preprocessor">#define SQL_DATABASE    &quot;coffee.sqlite&quot;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment">// Global variables</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="global_8h.html#a0b2caeb4b6f130be43e5a2f0267dd453">verbose</a>;</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">bool</span> <a class="code" href="global_8h.html#ae88c926fe2a10f736eb01b1d1e899a1c">optDate</a>, <a class="code" href="global_8h.html#a7bfeade3d2f19e8baecdcddd7f9162fa">optPower</a>, <a class="code" href="global_8h.html#a2a24ab7c0142e353c9ce9ca1ee1210bb">optCold</a>;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">extern</span> pthread_mutex_t <a class="code" href="global_8h.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">extern</span> pthread_t <a class="code" href="global_8h.html#a5e61240888e929e526f41e19b6c0bd46">thread</a>[];</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">// Thread IDs</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="global_8h.html#a67a7c5f1e4a75f1508395d450895990d">   31</a></span>&#160;<span class="preprocessor">#define THREAD_MAIN     0</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="global_8h.html#a77f390a98c0e73ae38abd20f467d6cce">   32</a></span>&#160;<span class="preprocessor">#define THREAD_STRIPE   1</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="global_8h.html#a843e1fa4b4de70b9f31d42a41a896c1c">   33</a></span>&#160;<span class="preprocessor">#define THREAD_DISPLAY  2</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="global_8h.html#a5f697926bb7bcc4722a9e650a1acdb6a">   34</a></span>&#160;<span class="preprocessor">#define THREAD_COFFEE   3</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keywordtype">void</span> <a class="code" href="global_8h.html#ab6e46b0071bb3330546b7f2b601d0a6c">killThread</a>(<span class="keywordtype">int</span> threadid, <span class="keywordtype">int</span> sig);</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="global_8h_html_ab6e46b0071bb3330546b7f2b601d0a6c"><div class="ttname"><a href="global_8h.html#ab6e46b0071bb3330546b7f2b601d0a6c">killThread</a></div><div class="ttdeci">void killThread(int threadid, int sig)</div><div class="ttdoc">Sends a signal to a thread. </div><div class="ttdef"><b>Definition:</b> main.cpp:216</div></div>
+<div class="ttc" id="global_8h_html_ae88c926fe2a10f736eb01b1d1e899a1c"><div class="ttname"><a href="global_8h.html#ae88c926fe2a10f736eb01b1d1e899a1c">optDate</a></div><div class="ttdeci">bool optDate</div><div class="ttdef"><b>Definition:</b> main.cpp:33</div></div>
+<div class="ttc" id="global_8h_html_a5e61240888e929e526f41e19b6c0bd46"><div class="ttname"><a href="global_8h.html#a5e61240888e929e526f41e19b6c0bd46">thread</a></div><div class="ttdeci">pthread_t thread[]</div><div class="ttdef"><b>Definition:</b> main.cpp:41</div></div>
+<div class="ttc" id="global_8h_html_a4acff8232e4aec9cd5c6dc200ac55ef3"><div class="ttname"><a href="global_8h.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a></div><div class="ttdeci">pthread_mutex_t mutex</div><div class="ttdef"><b>Definition:</b> main.cpp:42</div></div>
+<div class="ttc" id="global_8h_html_a0b2caeb4b6f130be43e5a2f0267dd453"><div class="ttname"><a href="global_8h.html#a0b2caeb4b6f130be43e5a2f0267dd453">verbose</a></div><div class="ttdeci">int verbose</div><div class="ttdef"><b>Definition:</b> main.cpp:32</div></div>
+<div class="ttc" id="global_8h_html_a2a24ab7c0142e353c9ce9ca1ee1210bb"><div class="ttname"><a href="global_8h.html#a2a24ab7c0142e353c9ce9ca1ee1210bb">optCold</a></div><div class="ttdeci">bool optCold</div><div class="ttdef"><b>Definition:</b> main.cpp:35</div></div>
+<div class="ttc" id="global_8h_html_a7bfeade3d2f19e8baecdcddd7f9162fa"><div class="ttname"><a href="global_8h.html#a7bfeade3d2f19e8baecdcddd7f9162fa">optPower</a></div><div class="ttdeci">bool optPower</div><div class="ttdef"><b>Definition:</b> main.cpp:34</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 138 - 0
CoffeeCode/html/globals.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>AMOUNT_DBLESPRESSO
+: <a class="el" href="coffee_8h.html#a4e3abbeb2301b9265ee297ee63e2f4c8">coffee.h</a>
+</li>
+<li>AMOUNT_PREINFUSION
+: <a class="el" href="coffee_8h.html#ad8bfbae67917bc4a69ae336c65b3aba2">coffee.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 145 - 0
CoffeeCode/html/globals_b.html

@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li class="current"><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>beginHeating
+: <a class="el" href="coffee_8cpp.html#a1426cd37aa49a96e7bcf12d26cde1a0d">coffee.cpp</a>
+</li>
+<li>brewTime
+: <a class="el" href="coffee_8cpp.html#a3756d547bc4c41a306650f4f4bbb930c">coffee.cpp</a>
+</li>
+<li>brewTimeHandler()
+: <a class="el" href="coffee_8h.html#a66d75a676639d0f8e56c0efe76547482">coffee.h</a>
+, <a class="el" href="coffee_8cpp.html#a66d75a676639d0f8e56c0efe76547482">coffee.cpp</a>
+</li>
+<li>buildno
+: <a class="el" href="main_8cpp.html#ac70430026dcf56f46e5426e1d01d7e89">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 227 - 0
CoffeeCode/html/globals_c.html

@@ -0,0 +1,227 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>CFGbrewcounter
+: <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa4be4c7f723934d3333a26575662e916e">database.h</a>
+</li>
+<li>CFGdisplaylang
+: <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfab9f0f19359d390e5602d46e39949ede4">database.h</a>
+</li>
+<li>CFGHeatingTime
+: <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa3c1d629019edc36dce2a7852d3d65968">database.h</a>
+</li>
+<li>changeState()
+: <a class="el" href="coffee_8cpp.html#ae4d9681385a3f678dee40458cf55dca0">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#ae4d9681385a3f678dee40458cf55dca0">coffee.h</a>
+</li>
+<li>chartoint()
+: <a class="el" href="database_8cpp.html#ad2d2a73c367513b8b71aff5546276a3c">database.cpp</a>
+, <a class="el" href="database_8h.html#ad2d2a73c367513b8b71aff5546276a3c">database.h</a>
+</li>
+<li>CHECK_VALUE
+: <a class="el" href="crc_8h.html#aee81a10f43f9dc645ba69a7407c151d0">crc.h</a>
+</li>
+<li>CLEARLINE
+: <a class="el" href="logger_8h.html#ae39a97a19b2e372929dabdc0e3822910">logger.h</a>
+</li>
+<li>CLOCKID
+: <a class="el" href="timer_8h.html#a2694a39dfd1fa087ca6f9f391c91dae7">timer.h</a>
+</li>
+<li>coffeeBrew()
+: <a class="el" href="coffee_8cpp.html#a343324d9863aa6eb3d7e2a183aec4a09">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a343324d9863aa6eb3d7e2a183aec4a09">coffee.h</a>
+</li>
+<li>coffeeHandler()
+: <a class="el" href="coffee_8cpp.html#a44f0ebaec249d2ce6316c1bddff54d79">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a44f0ebaec249d2ce6316c1bddff54d79">coffee.h</a>
+</li>
+<li>coffeeIncreaseBrewCounter()
+: <a class="el" href="coffee_8h.html#a7c29bb32c4f3971f78dd515e568042c3">coffee.h</a>
+, <a class="el" href="coffee_8cpp.html#a7c29bb32c4f3971f78dd515e568042c3">coffee.cpp</a>
+</li>
+<li>coffeeIncreaseHeatingTime()
+: <a class="el" href="coffee_8cpp.html#a11b81e21f5769fc6b0e55ecbac8d3976">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a11b81e21f5769fc6b0e55ecbac8d3976">coffee.h</a>
+</li>
+<li>coffeeState
+: <a class="el" href="display_8cpp.html#a8f3437c133bc4d1be650cbbc5128f1a8">display.cpp</a>
+</li>
+<li>coffeeTerminate()
+: <a class="el" href="coffee_8cpp.html#a5c611f1d81caf2f51c8b77b307028e4d">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a5c611f1d81caf2f51c8b77b307028e4d">coffee.h</a>
+</li>
+<li>coffeeThread()
+: <a class="el" href="coffee_8h.html#afed8c565650f5808745b6c6c7d45462c">coffee.h</a>
+, <a class="el" href="coffee_8cpp.html#afed8c565650f5808745b6c6c7d45462c">coffee.cpp</a>
+</li>
+<li>config_key_t
+: <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">database.h</a>
+</li>
+<li>counter
+: <a class="el" href="timer_8cpp.html#a617a47c70795bcff659815ad0efd2266">timer.cpp</a>
+</li>
+<li>crc
+: <a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc.h</a>
+</li>
+<li>CRC32
+: <a class="el" href="crc_8h.html#a491e419c18fbc5c7cb4a2cd901e31440">crc.h</a>
+</li>
+<li>CRC_NAME
+: <a class="el" href="crc_8h.html#ad679f457b8d23bfed7ccf1b9584e8514">crc.h</a>
+</li>
+<li>crcFast()
+: <a class="el" href="crc_8h.html#a31e9ca3a3979a4c1e5043f5bfa5befaf">crc.h</a>
+, <a class="el" href="crc_8cpp.html#a31e9ca3a3979a4c1e5043f5bfa5befaf">crc.cpp</a>
+</li>
+<li>crcInit()
+: <a class="el" href="crc_8h.html#a5a735798e6972adc694a5428dd7ccaf9">crc.h</a>
+, <a class="el" href="crc_8cpp.html#a5a735798e6972adc694a5428dd7ccaf9">crc.cpp</a>
+</li>
+<li>crcSlow()
+: <a class="el" href="crc_8h.html#a027c2916f24b3daaf662408cc72026b1">crc.h</a>
+, <a class="el" href="crc_8cpp.html#a027c2916f24b3daaf662408cc72026b1">crc.cpp</a>
+</li>
+<li>crcTable
+: <a class="el" href="crc_8cpp.html#aa0b98c402a809d26602bb9a693083720">crc.cpp</a>
+</li>
+<li>currentColor
+: <a class="el" href="stripe_8cpp.html#af149226ff674cac78ce47ce7261cb2dc">stripe.cpp</a>
+</li>
+<li>currentDim
+: <a class="el" href="stripe_8cpp.html#a5a820ae4564b095447dffb1f75fbb930">stripe.cpp</a>
+</li>
+<li>currentTransient
+: <a class="el" href="stripe_8cpp.html#a601572ab87622859faa74bd5d948e672">stripe.cpp</a>
+</li>
+<li>currentWhite
+: <a class="el" href="stripe_8cpp.html#aeb79ac3025329db68dba76aa2e830532">stripe.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 197 - 0
CoffeeCode/html/globals_d.html

@@ -0,0 +1,197 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li class="current"><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>db
+: <a class="el" href="database_8cpp.html#ad6e663497d2c934364b3bcf07496b30b">database.cpp</a>
+</li>
+<li>DEFAULT_LANG
+: <a class="el" href="display_8h.html#aa0b13de112401f9608d402bfc5a14d0d">display.h</a>
+</li>
+<li>DISPLAY_COLS
+: <a class="el" href="display_8h.html#ad01ecf7f4d29cece64f84d890e414570">display.h</a>
+</li>
+<li>display_lang_t
+: <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display.h</a>
+</li>
+<li>DISPLAY_ROWS
+: <a class="el" href="display_8h.html#abdc19d7f30976562c2d3efce365ef8f4">display.h</a>
+</li>
+<li>display_strings_t
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display.h</a>
+</li>
+<li>displayGetString()
+: <a class="el" href="display_8h.html#ab2661cdbd686f7d3389a3d9c2cf98f47">display.h</a>
+, <a class="el" href="display_8cpp.html#ab2661cdbd686f7d3389a3d9c2cf98f47">display.cpp</a>
+</li>
+<li>displayInit()
+: <a class="el" href="display_8cpp.html#a8c548751802c5960b3092be28cc56d9f">display.cpp</a>
+, <a class="el" href="display_8h.html#a8c548751802c5960b3092be28cc56d9f">display.h</a>
+</li>
+<li>displayLang
+: <a class="el" href="display_8cpp.html#ae110c5cc57190b02aaa0d543a80cdc20">display.cpp</a>
+</li>
+<li>displayPrintFlow()
+: <a class="el" href="display_8cpp.html#ae552c34299838e4f57e3516553ed566f">display.cpp</a>
+</li>
+<li>displayPrintLn()
+: <a class="el" href="display_8cpp.html#a2e4f853ea431989d2adc2aeb7a8e46b5">display.cpp</a>
+</li>
+<li>displayPrintTime()
+: <a class="el" href="display_8cpp.html#aad3b4a291f0ad570bb1035a133ec46aa">display.cpp</a>
+</li>
+<li>displayPushState()
+: <a class="el" href="display_8h.html#adf85c9537e38ffe3f1ee356a4638880e">display.h</a>
+, <a class="el" href="display_8cpp.html#adf85c9537e38ffe3f1ee356a4638880e">display.cpp</a>
+</li>
+<li>displayRefresh()
+: <a class="el" href="display_8cpp.html#ac750de2337343c08e5fd88d08316adb2">display.cpp</a>
+, <a class="el" href="display_8h.html#ac750de2337343c08e5fd88d08316adb2">display.h</a>
+</li>
+<li>displaySetLang()
+: <a class="el" href="display_8cpp.html#a9b10d2d49414256ef745f7e910748fee">display.cpp</a>
+, <a class="el" href="display_8h.html#a9b10d2d49414256ef745f7e910748fee">display.h</a>
+</li>
+<li>displayTerminate()
+: <a class="el" href="display_8h.html#abfd367c63541be192cdc63d6e8b38a79">display.h</a>
+, <a class="el" href="display_8cpp.html#abfd367c63541be192cdc63d6e8b38a79">display.cpp</a>
+</li>
+<li>displayThread()
+: <a class="el" href="display_8h.html#ab2db422e214d76776b8a375787d1384c">display.h</a>
+, <a class="el" href="display_8cpp.html#ab2db422e214d76776b8a375787d1384c">display.cpp</a>
+</li>
+<li>displayTimer
+: <a class="el" href="display_8cpp.html#afebf5c16da7043af9cbd74ef9f489ea7">display.cpp</a>
+</li>
+<li>displayTimerHandler()
+: <a class="el" href="display_8cpp.html#ab5eb6b80aca0f751332c47c410d06a2a">display.cpp</a>
+, <a class="el" href="display_8h.html#ab5eb6b80aca0f751332c47c410d06a2a">display.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 474 - 0
CoffeeCode/html/globals_defs.html

@@ -0,0 +1,474 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li class="current"><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_a"><span>a</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_d"><span>d</span></a></li>
+      <li><a href="#index_e"><span>e</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_k"><span>k</span></a></li>
+      <li><a href="#index_l"><span>l</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li><a href="#index_r"><span>r</span></a></li>
+      <li><a href="#index_s"><span>s</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li><a href="#index_u"><span>u</span></a></li>
+      <li class="current"><a href="#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>AMOUNT_DBLESPRESSO
+: <a class="el" href="coffee_8h.html#a4e3abbeb2301b9265ee297ee63e2f4c8">coffee.h</a>
+</li>
+<li>AMOUNT_PREINFUSION
+: <a class="el" href="coffee_8h.html#ad8bfbae67917bc4a69ae336c65b3aba2">coffee.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>CHECK_VALUE
+: <a class="el" href="crc_8h.html#aee81a10f43f9dc645ba69a7407c151d0">crc.h</a>
+</li>
+<li>CLEARLINE
+: <a class="el" href="logger_8h.html#ae39a97a19b2e372929dabdc0e3822910">logger.h</a>
+</li>
+<li>CLOCKID
+: <a class="el" href="timer_8h.html#a2694a39dfd1fa087ca6f9f391c91dae7">timer.h</a>
+</li>
+<li>CRC32
+: <a class="el" href="crc_8h.html#a491e419c18fbc5c7cb4a2cd901e31440">crc.h</a>
+</li>
+<li>CRC_NAME
+: <a class="el" href="crc_8h.html#ad679f457b8d23bfed7ccf1b9584e8514">crc.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>DEFAULT_LANG
+: <a class="el" href="display_8h.html#aa0b13de112401f9608d402bfc5a14d0d">display.h</a>
+</li>
+<li>DISPLAY_COLS
+: <a class="el" href="display_8h.html#ad01ecf7f4d29cece64f84d890e414570">display.h</a>
+</li>
+<li>DISPLAY_ROWS
+: <a class="el" href="display_8h.html#abdc19d7f30976562c2d3efce365ef8f4">display.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>errExit
+: <a class="el" href="timer_8h.html#af3ec03c16ee82e8578cfd8fd133d7a6f">timer.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>FALSE
+: <a class="el" href="crc_8h.html#aa93f0eb578d23995850d61f7d61c55c1">crc.h</a>
+, <a class="el" href="lcd_8cpp.html#aa93f0eb578d23995850d61f7d61c55c1">lcd.cpp</a>
+</li>
+<li>FINAL_XOR_VALUE
+: <a class="el" href="crc_8h.html#a5e491822bb6a5bf7114dd453ab48891e">crc.h</a>
+</li>
+<li>FLOW_ML_PULSE
+: <a class="el" href="hal_8h.html#a957d80982673bb087a5d29380720f59d">hal.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>I2C_ADDRESS_STRIPE
+: <a class="el" href="stripe_8h.html#a52f9fc93ce25c487d4f72b9f2f400545">stripe.h</a>
+</li>
+<li>INITIAL_REMAINDER
+: <a class="el" href="crc_8h.html#acce5b79e1a8ad8ffe40fb9f7d63b2fdc">crc.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>KBLU
+: <a class="el" href="logger_8h.html#a3f838f2fc3a9a3b434be606fc908964b">logger.h</a>
+</li>
+<li>KBOLD
+: <a class="el" href="logger_8h.html#a815022697da1d2d7744ff178e940078c">logger.h</a>
+</li>
+<li>KCYN
+: <a class="el" href="logger_8h.html#a32036c94dbb166a3f874b7efc169841f">logger.h</a>
+</li>
+<li>KGRN
+: <a class="el" href="logger_8h.html#ac081c83b067273757f7a2e54a5957d41">logger.h</a>
+</li>
+<li>KMAG
+: <a class="el" href="logger_8h.html#a6825f05d3b9d619d91d79d0ef18bb8b2">logger.h</a>
+</li>
+<li>KNRM
+: <a class="el" href="logger_8h.html#a137aa83ec74421d226a90c92ec032ac9">logger.h</a>
+</li>
+<li>KRED
+: <a class="el" href="logger_8h.html#a66290957baed5df3930ada4cb8caccf1">logger.h</a>
+</li>
+<li>KWHT
+: <a class="el" href="logger_8h.html#af0036c8022c9980079ab17e5c87fd478">logger.h</a>
+</li>
+<li>KYEL
+: <a class="el" href="logger_8h.html#a897b10d246533c95ba86cb79f92e465a">logger.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>LCD_BLINK_CTRL
+: <a class="el" href="lcd_8cpp.html#aa52bab70fab9c117f20d71442de77452">lcd.cpp</a>
+</li>
+<li>LCD_CDSHIFT
+: <a class="el" href="lcd_8cpp.html#a93e4bb4b824f5b8f5d572d9b4a943ad2">lcd.cpp</a>
+</li>
+<li>LCD_CDSHIFT_RL
+: <a class="el" href="lcd_8cpp.html#afb0c5015365d7e200edec8967d32195c">lcd.cpp</a>
+</li>
+<li>LCD_CGRAM
+: <a class="el" href="lcd_8cpp.html#a3b38de74c362be1781fef1136aa9684c">lcd.cpp</a>
+</li>
+<li>LCD_CLEAR
+: <a class="el" href="lcd_8cpp.html#a6aa8aa2057294b7d06088e834299b369">lcd.cpp</a>
+</li>
+<li>LCD_CTRL
+: <a class="el" href="lcd_8cpp.html#a8e945df7ca614325cafa08258e82a63c">lcd.cpp</a>
+</li>
+<li>LCD_CURSOR_CTRL
+: <a class="el" href="lcd_8cpp.html#a3da48db16c1e7844567542273a5578c7">lcd.cpp</a>
+</li>
+<li>LCD_DGRAM
+: <a class="el" href="lcd_8cpp.html#a9f40873eaf6a8f0a93971b3e0ab3fd12">lcd.cpp</a>
+</li>
+<li>LCD_DISPLAY_CTRL
+: <a class="el" href="lcd_8cpp.html#a1a166a796cbaf4cdd6a3af584ec067d5">lcd.cpp</a>
+</li>
+<li>LCD_EN
+: <a class="el" href="lcd_8h.html#a1640ffbc0d8ec0f7edb04a2b93918072">lcd.h</a>
+</li>
+<li>LCD_ENTRY
+: <a class="el" href="lcd_8cpp.html#a28d2c8d621da114a0fe438db2e58507a">lcd.cpp</a>
+</li>
+<li>LCD_ENTRY_ID
+: <a class="el" href="lcd_8cpp.html#a58e84458e964afcac51877bd13e7703f">lcd.cpp</a>
+</li>
+<li>LCD_ENTRY_SH
+: <a class="el" href="lcd_8cpp.html#aff5b4fcb87ea2eef9bb3af0234b14f53">lcd.cpp</a>
+</li>
+<li>LCD_FUNC
+: <a class="el" href="lcd_8cpp.html#a387bfe42ea7284ba0f154f00df579cad">lcd.cpp</a>
+</li>
+<li>LCD_FUNC_DL
+: <a class="el" href="lcd_8cpp.html#ae4b9a3bcb0dc315afc03412237c5a3ea">lcd.cpp</a>
+</li>
+<li>LCD_FUNC_F
+: <a class="el" href="lcd_8cpp.html#a5ea7976aa137e8d043d3dfab474cf0b4">lcd.cpp</a>
+</li>
+<li>LCD_FUNC_N
+: <a class="el" href="lcd_8cpp.html#a0741cad05d62ff28d92a05ea11aa6fdc">lcd.cpp</a>
+</li>
+<li>LCD_HOME
+: <a class="el" href="lcd_8cpp.html#ae0e309ccad89222eb3457f2da9f2bb8d">lcd.cpp</a>
+</li>
+<li>LCD_RS
+: <a class="el" href="lcd_8h.html#a4781e073871c6f27f89b9463ad3a4ed1">lcd.h</a>
+</li>
+<li>LCD_RW
+: <a class="el" href="lcd_8h.html#a26089a10ddd59a0dc7283c19ccc02533">lcd.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>MAX_LCDS
+: <a class="el" href="lcd_8h.html#a6bfe3f4a880b075a72d2a8318bd10f8e">lcd.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PIN_FLOW
+: <a class="el" href="hal_8h.html#a1b7f077d2a81a295f0f9b0fbf09356ba">hal.h</a>
+</li>
+<li>PIN_INT0
+: <a class="el" href="hal_8h.html#acab09879ef6267b9482f7627c82346bc">hal.h</a>
+</li>
+<li>PIN_INT1
+: <a class="el" href="hal_8h.html#a987362f14d4ff58584140f09c24a4308">hal.h</a>
+</li>
+<li>PIN_PRESSURE_CTRL
+: <a class="el" href="hal_8h.html#a95d660a5e62442d33d7cc9d93ffb57b9">hal.h</a>
+</li>
+<li>PIN_PROXIMITY_SENSOR
+: <a class="el" href="hal_8h.html#a4b6bff93c300c970e912b45284fa1d7d">hal.h</a>
+</li>
+<li>POLYNOMIAL
+: <a class="el" href="crc_8h.html#ae13d91fe6e514f0aa1caba701ef1ff92">crc.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>REFLECT_DATA
+: <a class="el" href="crc_8cpp.html#ac5944d40ab44731450a57acd7f027f6a">crc.cpp</a>
+, <a class="el" href="crc_8h.html#af6653e78d37b912d592ffc6e96eb7abb">crc.h</a>
+</li>
+<li>REFLECT_REMAINDER
+: <a class="el" href="crc_8h.html#a5aa89bef30ad5bd061deda3eef36e327">crc.h</a>
+, <a class="el" href="crc_8cpp.html#a2354513de80cf643198f44d7030b74d7">crc.cpp</a>
+</li>
+<li>REFRESH_RATE
+: <a class="el" href="display_8h.html#abc2b684fcc127e93aee54a3a45e25a7c">display.h</a>
+</li>
+<li>RELAIS_HEAT
+: <a class="el" href="hal_8h.html#a9b57e326c17e793a2c70b909256734ab">hal.h</a>
+</li>
+<li>RELAIS_POWER
+: <a class="el" href="hal_8h.html#a56489df9a2d1844419f2b0c104516657">hal.h</a>
+</li>
+<li>RELAIS_PUMP
+: <a class="el" href="hal_8h.html#a9723c5da9e57e2b3a1c3ec7b635cee53">hal.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SHIFT_G
+: <a class="el" href="spi_8h.html#aa846752b3dc2a7a280e1c97191c1e378">spi.h</a>
+</li>
+<li>SHIFT_RCK
+: <a class="el" href="spi_8h.html#aed6e9b64896ee902a2f02b1e49e65a11">spi.h</a>
+</li>
+<li>SHIFT_SCLR
+: <a class="el" href="spi_8h.html#aa9f52b418d31ac71ce93f2d7846ded90">spi.h</a>
+</li>
+<li>SIG
+: <a class="el" href="timer_8h.html#ad6f1d374549d22100d676d5fcac0a7e5">timer.h</a>
+</li>
+<li>SPI_CHANNEL
+: <a class="el" href="global_8h.html#aa8cbb3355883e35c18820bfa63c4ce3a">global.h</a>
+</li>
+<li>SPI_SPEED
+: <a class="el" href="global_8h.html#a0056b7fdd0f81fad9cd38e9fd389a4b6">global.h</a>
+</li>
+<li>SQL_DATABASE
+: <a class="el" href="global_8h.html#ad55c274bf698014e01dbc9afde3fc610">global.h</a>
+</li>
+<li>STATE_BREW
+: <a class="el" href="coffee_8h.html#a7a56332694aec763a9f8028113a07199">coffee.h</a>
+</li>
+<li>STATE_BREWMANUAL
+: <a class="el" href="coffee_8h.html#af696741daae3faab28c27755188fd828">coffee.h</a>
+</li>
+<li>STATE_CLEANING
+: <a class="el" href="coffee_8h.html#a3a3e5a95a5ba91345c6a1b6f7e06c737">coffee.h</a>
+</li>
+<li>STATE_ERROR
+: <a class="el" href="coffee_8h.html#a7bf0c086c7c41c12cc63324327932d91">coffee.h</a>
+</li>
+<li>STATE_HEATING
+: <a class="el" href="coffee_8h.html#ab87d7787dc7a2c2afc6d7853353d7003">coffee.h</a>
+</li>
+<li>STATE_IDLE
+: <a class="el" href="coffee_8h.html#aafff27c7165f059a969fe60fee51f683">coffee.h</a>
+</li>
+<li>STATE_INITALHEATING
+: <a class="el" href="coffee_8h.html#af74b21e82c0f8fbf7f697db071d420a0">coffee.h</a>
+</li>
+<li>STATE_OFF
+: <a class="el" href="coffee_8h.html#a0cc0d45e13bc83065d45df9d3d1dc887">coffee.h</a>
+</li>
+<li>STRIPE_CMD_FADEOUT
+: <a class="el" href="stripe_8h.html#a14287ccb3789c724603c28910512a0b3">stripe.h</a>
+</li>
+<li>STRIPE_CMD_FADESTOP
+: <a class="el" href="stripe_8h.html#a2e4a6f31f6823ec2592e9216a51232f2">stripe.h</a>
+</li>
+<li>STRIPE_CMD_FADETO
+: <a class="el" href="stripe_8h.html#a80ccf336e21703504faf1b3acba2c98b">stripe.h</a>
+</li>
+<li>STRIPE_CMD_RESET
+: <a class="el" href="stripe_8h.html#a0a2c9ea1a805ca03af6c43c107c98e8e">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SET
+: <a class="el" href="stripe_8h.html#ab495a56c339e141ecbecfd9872f81fbb">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SET2
+: <a class="el" href="stripe_8h.html#aead1e6fe1bdc60cade5b071a293864cc">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETB
+: <a class="el" href="stripe_8h.html#a25c93d4301c3ad1064adfb9eff952211">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETDIM
+: <a class="el" href="stripe_8h.html#aedb99f1c6b67c005f5a2cd6dea06c6b7">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETG
+: <a class="el" href="stripe_8h.html#ac62893e9f8f3793a3f6de3338a9a93ff">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETR
+: <a class="el" href="stripe_8h.html#ad06bb775e1f72bc21a5f17a19eb62e80">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETW
+: <a class="el" href="stripe_8h.html#a3c5fd782e0479daf6bb272d5197c8877">stripe.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>THREAD_COFFEE
+: <a class="el" href="global_8h.html#a5f697926bb7bcc4722a9e650a1acdb6a">global.h</a>
+</li>
+<li>THREAD_DISPLAY
+: <a class="el" href="global_8h.html#a843e1fa4b4de70b9f31d42a41a896c1c">global.h</a>
+</li>
+<li>THREAD_MAIN
+: <a class="el" href="global_8h.html#a67a7c5f1e4a75f1508395d450895990d">global.h</a>
+</li>
+<li>THREAD_STRIPE
+: <a class="el" href="global_8h.html#a77f390a98c0e73ae38abd20f467d6cce">global.h</a>
+</li>
+<li>TIME_BUTTONLONGPRESS
+: <a class="el" href="hal_8h.html#a39a999d4c82a1021ee63072abe804946">hal.h</a>
+</li>
+<li>TIME_INFUSION
+: <a class="el" href="coffee_8h.html#acd34aefc536dfe9b45dbed679cf6afaf">coffee.h</a>
+</li>
+<li>TIME_SOAK
+: <a class="el" href="coffee_8h.html#ad4b00557d847ecf54b790844b3be2eb0">coffee.h</a>
+</li>
+<li>TIMER_DELAY_US
+: <a class="el" href="global_8h.html#a91dee3a4ce745234c8a4998388d6c645">global.h</a>
+</li>
+<li>TOPBIT
+: <a class="el" href="crc_8cpp.html#a118ad552670dbefa1df0ba72d147f5e1">crc.cpp</a>
+</li>
+<li>TRUE
+: <a class="el" href="crc_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">crc.h</a>
+, <a class="el" href="lcd_8cpp.html#aa8cecfc5c5c054d2875c03e77b7be15d">lcd.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>USE_COLORS
+: <a class="el" href="logger_8h.html#acdbdbd1e0c5422f3d1f7aa3960957e0a">logger.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>WIDTH
+: <a class="el" href="crc_8cpp.html#a241aeeb764887ae5e3de58b98f04b16d">crc.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 144 - 0
CoffeeCode/html/globals_e.html

@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>effectColor
+: <a class="el" href="stripe_8cpp.html#a8b61b922f1ae5a0c5854e3a318b74421">stripe.cpp</a>
+</li>
+<li>elapsedCnt
+: <a class="el" href="display_8cpp.html#a01cd2b69770b3c4cd7adc6e27d48c28a">display.cpp</a>
+</li>
+<li>endHeating
+: <a class="el" href="coffee_8cpp.html#a1aaa11435974ab87937d68b01ee71074">coffee.cpp</a>
+</li>
+<li>errExit
+: <a class="el" href="timer_8h.html#af3ec03c16ee82e8578cfd8fd133d7a6f">timer.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 126 - 0
CoffeeCode/html/globals_enum.html

@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>config_key_t
+: <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4df">database.h</a>
+</li>
+<li>display_lang_t
+: <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080">display.h</a>
+</li>
+<li>display_strings_t
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907">display.h</a>
+</li>
+<li>HalSig
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68">hal.h</a>
+</li>
+<li>logger_type_t
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger.h</a>
+</li>
+<li>logger_verbose_t
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger.h</a>
+</li>
+<li>stripe_transient_t
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9">stripe.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 264 - 0
CoffeeCode/html/globals_eval.html

@@ -0,0 +1,264 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li class="current"><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_l"><span>l</span></a></li>
+      <li><a href="#index_s"><span>s</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li class="current"><a href="#index_v"><span>v</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>CFGbrewcounter
+: <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa4be4c7f723934d3333a26575662e916e">database.h</a>
+</li>
+<li>CFGdisplaylang
+: <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfab9f0f19359d390e5602d46e39949ede4">database.h</a>
+</li>
+<li>CFGHeatingTime
+: <a class="el" href="database_8h.html#ae1822373f950fb4881633b7ec843f4dfa3c1d629019edc36dce2a7852d3d65968">database.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lang_de
+: <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30">display.h</a>
+</li>
+<li>lang_en
+: <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080af59ab6af8bf5947a70c77afafccac15b">display.h</a>
+</li>
+<li>lang_last
+: <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080a8222fe4f6d1104084bbf5a691f4ce644">display.h</a>
+</li>
+<li>LOG_CAN
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a854a22c1c382f9b7a93bf8e556191c5f">logger.h</a>
+</li>
+<li>LOG_ERROR
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a230506cce5c68c3bac5a821c42ed3473">logger.h</a>
+</li>
+<li>LOG_ERRORC
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a1ee7c46e5fb6cad577d81e275a4f8218">logger.h</a>
+</li>
+<li>LOG_INFO
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a6e98ff471e3ce6c4ef2d75c37ee51837">logger.h</a>
+</li>
+<li>LOG_OK
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a746c53b13e16f15d1d885f75efaf58b1">logger.h</a>
+</li>
+<li>LOG_WARN
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823ac8041ffa22bc823d4726701cdb13fc13">logger.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SigBrewOff
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a6d3fe49429343ea09a007c2236db9382">hal.h</a>
+</li>
+<li>SigBrewOn
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f8316fcd4daf8fdee99ad3414c00857">hal.h</a>
+</li>
+<li>SigInt0Psh
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f6585385aaee8e6a336fb31e8713751">hal.h</a>
+</li>
+<li>SigInt0Rls
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae70d75d9c016f72d315ce0f375425ae3">hal.h</a>
+</li>
+<li>SigInt0RlsLong
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae12ff99a3219da47e0c3c2ebb690906e">hal.h</a>
+</li>
+<li>SigInt1Psh
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a5fd8970919f375d9f3baaaa053865ce2">hal.h</a>
+</li>
+<li>SigInt1Rls
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68aa85940fc659570c5b7ec2d8e0ed3eeae">hal.h</a>
+</li>
+<li>SigInt1RlsLong
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a1a7c6bd95f0ccdf91bc363cc8a638b73">hal.h</a>
+</li>
+<li>SigPressCls
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68abdd48e173224114754f253d764540ec9">hal.h</a>
+</li>
+<li>SigPressOpn
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a683f7a77d5c63e835b2a72ab1c540fe4">hal.h</a>
+</li>
+<li>SigProxCvrd
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ac53b2d92b9e3b1652f173e29db5b523d">hal.h</a>
+</li>
+<li>SigProxOpn
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a7f18f13ecf372adaf681e706ad051fd3">hal.h</a>
+</li>
+<li>str_brewing
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8e3b0fbb0f42de5df8434e44e0b85272">display.h</a>
+</li>
+<li>str_bye
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907ab88ed9e2db4f34884981000ac617defb">display.h</a>
+</li>
+<li>str_cleaning
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a2bb69120919321c90fe0862abc8a247c">display.h</a>
+</li>
+<li>str_error
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aeaed0d27362049f28692626f30566890">display.h</a>
+</li>
+<li>str_flow
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aadf50a104ff26cf8b575c0b68e52a572">display.h</a>
+</li>
+<li>str_heating
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a9eb4c3532bbada27013a4cff3dc8a624">display.h</a>
+</li>
+<li>str_heatingready
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8aaa4383254e4327e846e45befac54d0">display.h</a>
+</li>
+<li>str_last
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aa22549c4ff533e248b5fad404f80c6d9">display.h</a>
+</li>
+<li>str_ready
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907af200a74535586cc849fc6f5f38c85171">display.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>TRANS_DIRECT
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9ad41450786f0c8b404231dfaff4c14931">stripe.h</a>
+</li>
+<li>TRANS_FAST
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9a37991877080c17224eaa0268947a545c">stripe.h</a>
+</li>
+<li>TRANS_MEDIUM
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9a26be047607e612751d1979597dd21185">stripe.h</a>
+</li>
+<li>TRANS_SLOW
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9ad1105b7089df16f505a8c28ef4e31f04">stripe.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>V_BASIC
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a8470d917f387c308f571d2f370c238a3">logger.h</a>
+</li>
+<li>V_BREW
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131ac26291e5906a8e13146ec8dc56a0869a">logger.h</a>
+</li>
+<li>V_HAL
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a9a36496e8d624d5ea70b3f86bc2c0bed">logger.h</a>
+</li>
+<li>V_NONE
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131afa973d27e66919a26910ccef33a3606a">logger.h</a>
+</li>
+<li>V_SPI
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a86acf22e226ebf319ce306ea1af2d95a">logger.h</a>
+</li>
+<li>V_SQL
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131acf3ff5c46ec466c2d7438651b46cc17c">logger.h</a>
+</li>
+<li>V_STRIPE
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a6af331195d8ce87720090a3eece459e4">logger.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 154 - 0
CoffeeCode/html/globals_f.html

@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li class="current"><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>FALSE
+: <a class="el" href="crc_8h.html#aa93f0eb578d23995850d61f7d61c55c1">crc.h</a>
+, <a class="el" href="lcd_8cpp.html#aa93f0eb578d23995850d61f7d61c55c1">lcd.cpp</a>
+</li>
+<li>FINAL_XOR_VALUE
+: <a class="el" href="crc_8h.html#a5e491822bb6a5bf7114dd453ab48891e">crc.h</a>
+</li>
+<li>firstTimer
+: <a class="el" href="timer_8cpp.html#acb6f6b56b317d16d17fd2f6df17547c3">timer.cpp</a>
+</li>
+<li>flagIgnoreRlsInt0
+: <a class="el" href="hal_8cpp.html#a9f94cedad944b6df4483a76b0a4d2b0a">hal.cpp</a>
+</li>
+<li>flagIgnoreRlsInt1
+: <a class="el" href="hal_8cpp.html#a8980baab65c90a16ef8189ed5b1ab7fe">hal.cpp</a>
+</li>
+<li>FLOW_ML_PULSE
+: <a class="el" href="hal_8h.html#a957d80982673bb087a5d29380720f59d">hal.h</a>
+</li>
+<li>flowcnt
+: <a class="el" href="hal_8cpp.html#ae5ae572f06dd4838027976f9ab3fdc62">hal.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 128 - 0
CoffeeCode/html/globals_func.html

@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>brewTimeHandler()
+: <a class="el" href="coffee_8cpp.html#a66d75a676639d0f8e56c0efe76547482">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a66d75a676639d0f8e56c0efe76547482">coffee.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 168 - 0
CoffeeCode/html/globals_func_c.html

@@ -0,0 +1,168 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>changeState()
+: <a class="el" href="coffee_8cpp.html#ae4d9681385a3f678dee40458cf55dca0">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#ae4d9681385a3f678dee40458cf55dca0">coffee.h</a>
+</li>
+<li>chartoint()
+: <a class="el" href="database_8h.html#ad2d2a73c367513b8b71aff5546276a3c">database.h</a>
+, <a class="el" href="database_8cpp.html#ad2d2a73c367513b8b71aff5546276a3c">database.cpp</a>
+</li>
+<li>coffeeBrew()
+: <a class="el" href="coffee_8cpp.html#a343324d9863aa6eb3d7e2a183aec4a09">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a343324d9863aa6eb3d7e2a183aec4a09">coffee.h</a>
+</li>
+<li>coffeeHandler()
+: <a class="el" href="coffee_8h.html#a44f0ebaec249d2ce6316c1bddff54d79">coffee.h</a>
+, <a class="el" href="coffee_8cpp.html#a44f0ebaec249d2ce6316c1bddff54d79">coffee.cpp</a>
+</li>
+<li>coffeeIncreaseBrewCounter()
+: <a class="el" href="coffee_8cpp.html#a7c29bb32c4f3971f78dd515e568042c3">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a7c29bb32c4f3971f78dd515e568042c3">coffee.h</a>
+</li>
+<li>coffeeIncreaseHeatingTime()
+: <a class="el" href="coffee_8cpp.html#a11b81e21f5769fc6b0e55ecbac8d3976">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a11b81e21f5769fc6b0e55ecbac8d3976">coffee.h</a>
+</li>
+<li>coffeeTerminate()
+: <a class="el" href="coffee_8cpp.html#a5c611f1d81caf2f51c8b77b307028e4d">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a5c611f1d81caf2f51c8b77b307028e4d">coffee.h</a>
+</li>
+<li>coffeeThread()
+: <a class="el" href="coffee_8h.html#afed8c565650f5808745b6c6c7d45462c">coffee.h</a>
+, <a class="el" href="coffee_8cpp.html#afed8c565650f5808745b6c6c7d45462c">coffee.cpp</a>
+</li>
+<li>crcFast()
+: <a class="el" href="crc_8cpp.html#a31e9ca3a3979a4c1e5043f5bfa5befaf">crc.cpp</a>
+, <a class="el" href="crc_8h.html#a31e9ca3a3979a4c1e5043f5bfa5befaf">crc.h</a>
+</li>
+<li>crcInit()
+: <a class="el" href="crc_8cpp.html#a5a735798e6972adc694a5428dd7ccaf9">crc.cpp</a>
+, <a class="el" href="crc_8h.html#a5a735798e6972adc694a5428dd7ccaf9">crc.h</a>
+</li>
+<li>crcSlow()
+: <a class="el" href="crc_8h.html#a027c2916f24b3daaf662408cc72026b1">crc.h</a>
+, <a class="el" href="crc_8cpp.html#a027c2916f24b3daaf662408cc72026b1">crc.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 165 - 0
CoffeeCode/html/globals_func_d.html

@@ -0,0 +1,165 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li class="current"><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>displayGetString()
+: <a class="el" href="display_8cpp.html#ab2661cdbd686f7d3389a3d9c2cf98f47">display.cpp</a>
+, <a class="el" href="display_8h.html#ab2661cdbd686f7d3389a3d9c2cf98f47">display.h</a>
+</li>
+<li>displayInit()
+: <a class="el" href="display_8h.html#a8c548751802c5960b3092be28cc56d9f">display.h</a>
+, <a class="el" href="display_8cpp.html#a8c548751802c5960b3092be28cc56d9f">display.cpp</a>
+</li>
+<li>displayPrintFlow()
+: <a class="el" href="display_8cpp.html#ae552c34299838e4f57e3516553ed566f">display.cpp</a>
+</li>
+<li>displayPrintLn()
+: <a class="el" href="display_8cpp.html#a2e4f853ea431989d2adc2aeb7a8e46b5">display.cpp</a>
+</li>
+<li>displayPrintTime()
+: <a class="el" href="display_8cpp.html#aad3b4a291f0ad570bb1035a133ec46aa">display.cpp</a>
+</li>
+<li>displayPushState()
+: <a class="el" href="display_8cpp.html#adf85c9537e38ffe3f1ee356a4638880e">display.cpp</a>
+, <a class="el" href="display_8h.html#adf85c9537e38ffe3f1ee356a4638880e">display.h</a>
+</li>
+<li>displayRefresh()
+: <a class="el" href="display_8cpp.html#ac750de2337343c08e5fd88d08316adb2">display.cpp</a>
+, <a class="el" href="display_8h.html#ac750de2337343c08e5fd88d08316adb2">display.h</a>
+</li>
+<li>displaySetLang()
+: <a class="el" href="display_8cpp.html#a9b10d2d49414256ef745f7e910748fee">display.cpp</a>
+, <a class="el" href="display_8h.html#a9b10d2d49414256ef745f7e910748fee">display.h</a>
+</li>
+<li>displayTerminate()
+: <a class="el" href="display_8cpp.html#abfd367c63541be192cdc63d6e8b38a79">display.cpp</a>
+, <a class="el" href="display_8h.html#abfd367c63541be192cdc63d6e8b38a79">display.h</a>
+</li>
+<li>displayThread()
+: <a class="el" href="display_8h.html#ab2db422e214d76776b8a375787d1384c">display.h</a>
+, <a class="el" href="display_8cpp.html#ab2db422e214d76776b8a375787d1384c">display.cpp</a>
+</li>
+<li>displayTimerHandler()
+: <a class="el" href="display_8h.html#ab5eb6b80aca0f751332c47c410d06a2a">display.h</a>
+, <a class="el" href="display_8cpp.html#ab5eb6b80aca0f751332c47c410d06a2a">display.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 132 - 0
CoffeeCode/html/globals_func_g.html

@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>getSigValue()
+: <a class="el" href="coffee_8cpp.html#a3290268b8fcbba9a6b642b68860a8503">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a3290268b8fcbba9a6b642b68860a8503">coffee.h</a>
+</li>
+<li>getState()
+: <a class="el" href="coffee_8cpp.html#afc0b4325b7cabe49f623d5e44aaa37d7">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#afc0b4325b7cabe49f623d5e44aaa37d7">coffee.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 211 - 0
CoffeeCode/html/globals_func_h.html

@@ -0,0 +1,211 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li class="current"><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>halGetFlow()
+: <a class="el" href="hal_8cpp.html#a1a0d534518ff19bf5b023dfe64d141db">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a1a0d534518ff19bf5b023dfe64d141db">hal.h</a>
+</li>
+<li>halGetInt0()
+: <a class="el" href="hal_8h.html#af5609d1b9c9b6bde787cdca47b3b0a4f">hal.h</a>
+, <a class="el" href="hal_8cpp.html#af5609d1b9c9b6bde787cdca47b3b0a4f">hal.cpp</a>
+</li>
+<li>halGetInt1()
+: <a class="el" href="hal_8cpp.html#afe1e8d0d1237d0f128d50a5b146002a2">hal.cpp</a>
+, <a class="el" href="hal_8h.html#afe1e8d0d1237d0f128d50a5b146002a2">hal.h</a>
+</li>
+<li>halGetRelaisState()
+: <a class="el" href="hal_8h.html#a1d22d01f1a6a6789f2816e27bbcb0504">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a1d22d01f1a6a6789f2816e27bbcb0504">hal.cpp</a>
+</li>
+<li>halInit()
+: <a class="el" href="hal_8cpp.html#afd89c1650df524d95aef39b8bc38170d">hal.cpp</a>
+, <a class="el" href="hal_8h.html#afd89c1650df524d95aef39b8bc38170d">hal.h</a>
+</li>
+<li>halInt0()
+: <a class="el" href="hal_8cpp.html#a597258a80a0bb18db649d01b0893c99f">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a597258a80a0bb18db649d01b0893c99f">hal.h</a>
+</li>
+<li>halInt0TimerHandler()
+: <a class="el" href="hal_8cpp.html#aa52d1bfb2ca68e499ad83d9b0d1ba275">hal.cpp</a>
+, <a class="el" href="hal_8h.html#aa52d1bfb2ca68e499ad83d9b0d1ba275">hal.h</a>
+</li>
+<li>halInt1()
+: <a class="el" href="hal_8h.html#a603aaa9c0c3cfef8b185df5c7f4921c3">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a603aaa9c0c3cfef8b185df5c7f4921c3">hal.cpp</a>
+</li>
+<li>halInt1TimerHandler()
+: <a class="el" href="hal_8cpp.html#ad56f6e1b04c236040717eadfd806c244">hal.cpp</a>
+, <a class="el" href="hal_8h.html#ad56f6e1b04c236040717eadfd806c244">hal.h</a>
+</li>
+<li>halIntFlow()
+: <a class="el" href="hal_8cpp.html#ace9ace8c7e0012157569f446d4cb8c52">hal.cpp</a>
+, <a class="el" href="hal_8h.html#ace9ace8c7e0012157569f446d4cb8c52">hal.h</a>
+</li>
+<li>halIntPressure()
+: <a class="el" href="hal_8cpp.html#a73067106de2bbcf98bcc3a06cbf3b000">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a73067106de2bbcf98bcc3a06cbf3b000">hal.h</a>
+</li>
+<li>halIntProximity()
+: <a class="el" href="hal_8cpp.html#a0622583e0c8453a6d6963964ad7e7122">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a0622583e0c8453a6d6963964ad7e7122">hal.h</a>
+</li>
+<li>halIsHeating()
+: <a class="el" href="hal_8cpp.html#a01f43f0666520e8d8af65e94fd82a5eb">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a01f43f0666520e8d8af65e94fd82a5eb">hal.h</a>
+</li>
+<li>halMachineOff()
+: <a class="el" href="hal_8cpp.html#a8cefe61db8caf1cbdbc35f680744a3eb">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a8cefe61db8caf1cbdbc35f680744a3eb">hal.h</a>
+</li>
+<li>halMachineOn()
+: <a class="el" href="hal_8cpp.html#a80e05d7e336073450da3168992d58754">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a80e05d7e336073450da3168992d58754">hal.h</a>
+</li>
+<li>halProxSensorCovered()
+: <a class="el" href="hal_8h.html#a52c001b5136b02e19bd00282a137631d">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a52c001b5136b02e19bd00282a137631d">hal.cpp</a>
+</li>
+<li>halRelaisOff()
+: <a class="el" href="hal_8cpp.html#a25c63f62c18555fc1b9b50bcd29f1c7d">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a25c63f62c18555fc1b9b50bcd29f1c7d">hal.h</a>
+</li>
+<li>halRelaisOn()
+: <a class="el" href="hal_8h.html#a33e09a3806bdcd5c711e557178335763">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a33e09a3806bdcd5c711e557178335763">hal.cpp</a>
+</li>
+<li>halRelaisSet()
+: <a class="el" href="hal_8h.html#a9b67b274703f0c42834f4b447d5c04a2">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a9b67b274703f0c42834f4b447d5c04a2">hal.cpp</a>
+</li>
+<li>halResetFlow()
+: <a class="el" href="hal_8cpp.html#a99d0fb6a80635b679cf4cd1fa90b483d">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a99d0fb6a80635b679cf4cd1fa90b483d">hal.h</a>
+</li>
+<li>halSendSignal()
+: <a class="el" href="hal_8h.html#a4fa1c41f2dd3c24e13feaa6be70ad426">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a252f49661ac23a045bb0d9d20997dfa4">hal.cpp</a>
+</li>
+<li>hupHandler()
+: <a class="el" href="main_8cpp.html#aa5f8eab61a77d6d566215bcf12144422">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 140 - 0
CoffeeCode/html/globals_func_i.html

@@ -0,0 +1,140 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li class="current"><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>initTimers()
+: <a class="el" href="timer_8cpp.html#a9e737e3249388fb2e50d868bad69c688">timer.cpp</a>
+, <a class="el" href="timer_8h.html#a9e737e3249388fb2e50d868bad69c688">timer.h</a>
+</li>
+<li>int64to8bit()
+: <a class="el" href="database_8h.html#a28dbbb9e24e2035535645629105aea46">database.h</a>
+, <a class="el" href="database_8cpp.html#a28dbbb9e24e2035535645629105aea46">database.cpp</a>
+</li>
+<li>int8to64bit()
+: <a class="el" href="database_8cpp.html#a99cc529fd785c752cd4b73ea7989521d">database.cpp</a>
+, <a class="el" href="database_8h.html#a99cc529fd785c752cd4b73ea7989521d">database.h</a>
+</li>
+<li>inttochar()
+: <a class="el" href="database_8h.html#a437086982a7400d7205f3ab6600e6dcf">database.h</a>
+, <a class="el" href="database_8cpp.html#a437086982a7400d7205f3ab6600e6dcf">database.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 128 - 0
CoffeeCode/html/globals_func_k.html

@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li class="current"><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>killThread()
+: <a class="el" href="global_8h.html#ab6e46b0071bb3330546b7f2b601d0a6c">global.h</a>
+, <a class="el" href="main_8cpp.html#ab6e46b0071bb3330546b7f2b601d0a6c">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 191 - 0
CoffeeCode/html/globals_func_l.html

@@ -0,0 +1,191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li class="current"><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lcdCharDef()
+: <a class="el" href="lcd_8cpp.html#a74d902393394e4d3cebdcf0d81bbaeeb">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a74d902393394e4d3cebdcf0d81bbaeeb">lcd.h</a>
+</li>
+<li>lcdClear()
+: <a class="el" href="lcd_8h.html#ae1b4dfd9571742b5ca0aba92882b57a6">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#ae1b4dfd9571742b5ca0aba92882b57a6">lcd.cpp</a>
+</li>
+<li>lcdCursor()
+: <a class="el" href="lcd_8cpp.html#a8aa13c894973d52eeed51d10bf869df2">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a8aa13c894973d52eeed51d10bf869df2">lcd.h</a>
+</li>
+<li>lcdCursorBlink()
+: <a class="el" href="lcd_8h.html#af39d67df7e36291184f69691bb97285b">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#af39d67df7e36291184f69691bb97285b">lcd.cpp</a>
+</li>
+<li>lcdDisplay()
+: <a class="el" href="lcd_8cpp.html#af08385cd21eea125d63d6919ecfbea4a">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#af08385cd21eea125d63d6919ecfbea4a">lcd.h</a>
+</li>
+<li>lcdHome()
+: <a class="el" href="lcd_8cpp.html#a688913764edb3a241c26da5e51d70ac2">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a688913764edb3a241c26da5e51d70ac2">lcd.h</a>
+</li>
+<li>lcdInit()
+: <a class="el" href="lcd_8cpp.html#a88d70347308e92cb29eb45b505cad39e">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a88d70347308e92cb29eb45b505cad39e">lcd.h</a>
+</li>
+<li>lcdInitI()
+: <a class="el" href="lcd_8h.html#a47f05b4cef2cf066cf1cbb1beb7ceb31">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#a47f05b4cef2cf066cf1cbb1beb7ceb31">lcd.cpp</a>
+</li>
+<li>lcdPosition()
+: <a class="el" href="lcd_8cpp.html#a5d09137f6373e95a692c4b3403729254">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a5d09137f6373e95a692c4b3403729254">lcd.h</a>
+</li>
+<li>lcdPrintf()
+: <a class="el" href="lcd_8cpp.html#a49c322ad29410ea292f8d976baf6deb9">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a49c322ad29410ea292f8d976baf6deb9">lcd.h</a>
+</li>
+<li>lcdPutchar()
+: <a class="el" href="lcd_8cpp.html#a21c60441ee22710add0c9bda1310ed66">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a21c60441ee22710add0c9bda1310ed66">lcd.h</a>
+</li>
+<li>lcdPuts()
+: <a class="el" href="lcd_8h.html#a805efc4a96cca29544672151a9594c20">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#a805efc4a96cca29544672151a9594c20">lcd.cpp</a>
+</li>
+<li>lcdSendCommand()
+: <a class="el" href="lcd_8h.html#abb6341df42d0e652db66e51fbf0ba486">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#abb6341df42d0e652db66e51fbf0ba486">lcd.cpp</a>
+</li>
+<li>logger()
+: <a class="el" href="logger_8h.html#a1f2dbdf600d66c1c1bcc820d0282d132">logger.h</a>
+, <a class="el" href="logger_8cpp.html#a1f2dbdf600d66c1c1bcc820d0282d132">logger.cpp</a>
+</li>
+<li>logger_error()
+: <a class="el" href="logger_8cpp.html#ab5a2104bf520b79d590c6ef11cdeeb02">logger.cpp</a>
+, <a class="el" href="logger_8h.html#ab5a2104bf520b79d590c6ef11cdeeb02">logger.h</a>
+</li>
+<li>logger_print_time()
+: <a class="el" href="logger_8cpp.html#aeb33ace0bb24787befc4a34c561634b4">logger.cpp</a>
+</li>
+<li>logger_reset()
+: <a class="el" href="logger_8h.html#abd01f221b7a194e67bb39d88822c9772">logger.h</a>
+, <a class="el" href="logger_8cpp.html#abd01f221b7a194e67bb39d88822c9772">logger.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 130 - 0
CoffeeCode/html/globals_func_m.html

@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li class="current"><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>main()
+: <a class="el" href="main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main.cpp</a>
+</li>
+<li>mainLoop()
+: <a class="el" href="main_8cpp.html#a9a66b873229b4d46cb9f39dddfc1bddb">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 128 - 0
CoffeeCode/html/globals_func_n.html

@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>nullThread()
+: <a class="el" href="timer_8cpp.html#ae9859727c0e51a70b4ff5f47d2527a77">timer.cpp</a>
+, <a class="el" href="timer_8h.html#ae9859727c0e51a70b4ff5f47d2527a77">timer.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 262 - 0
CoffeeCode/html/globals_func_s.html

@@ -0,0 +1,262 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>shift_data()
+: <a class="el" href="spi_8cpp.html#aec7140cda479ce5f88361739e86ccecd">spi.cpp</a>
+, <a class="el" href="spi_8h.html#aec7140cda479ce5f88361739e86ccecd">spi.h</a>
+</li>
+<li>shift_init()
+: <a class="el" href="spi_8h.html#ac7600504b8cf1ac90ce331a5ed23c3db">spi.h</a>
+, <a class="el" href="spi_8cpp.html#ac7600504b8cf1ac90ce331a5ed23c3db">spi.cpp</a>
+</li>
+<li>SigValueEmpty()
+: <a class="el" href="coffee_8cpp.html#a63f25020d1567a2d5e03a9a59e75a0fc">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a63f25020d1567a2d5e03a9a59e75a0fc">coffee.h</a>
+</li>
+<li>spi_init()
+: <a class="el" href="spi_8h.html#ae909944aa85ae98323073c628be541aa">spi.h</a>
+, <a class="el" href="spi_8cpp.html#ae909944aa85ae98323073c628be541aa">spi.cpp</a>
+</li>
+<li>spi_readwrite()
+: <a class="el" href="spi_8cpp.html#a7402e4a56146a9e3df480b206a3f7e7e">spi.cpp</a>
+, <a class="el" href="spi_8h.html#a7402e4a56146a9e3df480b206a3f7e7e">spi.h</a>
+</li>
+<li>sqlClose()
+: <a class="el" href="database_8cpp.html#a7264f51f982e908b32635e91e6dc0062">database.cpp</a>
+, <a class="el" href="database_8h.html#a7264f51f982e908b32635e91e6dc0062">database.h</a>
+</li>
+<li>sqlExecute()
+: <a class="el" href="database_8cpp.html#afd88a963f835215b8dad9ee9e49866dc">database.cpp</a>
+, <a class="el" href="database_8h.html#afd88a963f835215b8dad9ee9e49866dc">database.h</a>
+</li>
+<li>sqlExecute2()
+: <a class="el" href="database_8cpp.html#a53458fb936962d23efec505a545a9cb8">database.cpp</a>
+</li>
+<li>sqlGetConf()
+: <a class="el" href="database_8cpp.html#aad0e803eda7a440a6063a447cfeca0cd">database.cpp</a>
+, <a class="el" href="database_8h.html#aad0e803eda7a440a6063a447cfeca0cd">database.h</a>
+</li>
+<li>sqlOpen()
+: <a class="el" href="database_8cpp.html#a1885a74e6af3ee510f30f98e60372e3e">database.cpp</a>
+, <a class="el" href="database_8h.html#a1885a74e6af3ee510f30f98e60372e3e">database.h</a>
+</li>
+<li>sqlSetConf()
+: <a class="el" href="database_8cpp.html#a1ce0ac0c58916c138a92d3282f569784">database.cpp</a>
+, <a class="el" href="database_8h.html#a1ce0ac0c58916c138a92d3282f569784">database.h</a>
+</li>
+<li>sqlSetup()
+: <a class="el" href="database_8cpp.html#aaed3fb776c9dc76d262df026803d3b8c">database.cpp</a>
+, <a class="el" href="database_8h.html#aaed3fb776c9dc76d262df026803d3b8c">database.h</a>
+</li>
+<li>sqltest()
+: <a class="el" href="database_8cpp.html#a5d0363e5d886e2c3e4bb5ca46d265ba7">database.cpp</a>
+, <a class="el" href="database_8h.html#a5d0363e5d886e2c3e4bb5ca46d265ba7">database.h</a>
+</li>
+<li>stopTimers()
+: <a class="el" href="timer_8cpp.html#a43ed436d8c1803ced3029a909320a841">timer.cpp</a>
+, <a class="el" href="timer_8h.html#a43ed436d8c1803ced3029a909320a841">timer.h</a>
+</li>
+<li>string_sprintf()
+: <a class="el" href="database_8cpp.html#acd0eb5a18168fa3c37fab8ed0958c043">database.cpp</a>
+, <a class="el" href="database_8h.html#a6c0bc3256310fd400a26243d8a8f1652">database.h</a>
+</li>
+<li>string_vsprintf()
+: <a class="el" href="database_8cpp.html#ac240bb02efe882b4e82da48676301d89">database.cpp</a>
+</li>
+<li>stripeCommand()
+: <a class="el" href="stripe_8h.html#ab58f9b853bd6c2deb11f6b64e6275cd7">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#ab58f9b853bd6c2deb11f6b64e6275cd7">stripe.cpp</a>
+</li>
+<li>stripeEffectDisable()
+: <a class="el" href="stripe_8cpp.html#a40cca6b9cc8aeca2f28442126528163b">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a40cca6b9cc8aeca2f28442126528163b">stripe.h</a>
+</li>
+<li>stripeEffectHeating()
+: <a class="el" href="stripe_8cpp.html#a97c35798100bbf3208fd15cc5615cd97">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a97c35798100bbf3208fd15cc5615cd97">stripe.h</a>
+</li>
+<li>stripeEffectPulse()
+: <a class="el" href="stripe_8cpp.html#aea3ed8a6a2d07ed7f8f2ff59f6fa3a01">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#aea3ed8a6a2d07ed7f8f2ff59f6fa3a01">stripe.h</a>
+</li>
+<li>stripeGetDim()
+: <a class="el" href="stripe_8cpp.html#ab479c1db854476cf80b86d1fe33a908e">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#ab479c1db854476cf80b86d1fe33a908e">stripe.h</a>
+</li>
+<li>stripeGetRGB()
+: <a class="el" href="stripe_8cpp.html#ac5379b3ade62c829d19654c22efd90de">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#ac5379b3ade62c829d19654c22efd90de">stripe.h</a>
+</li>
+<li>stripeGetWhite()
+: <a class="el" href="stripe_8h.html#aa67941dfd018cc2e0ba62a76a3d9136d">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#aa67941dfd018cc2e0ba62a76a3d9136d">stripe.cpp</a>
+</li>
+<li>stripeInit()
+: <a class="el" href="stripe_8cpp.html#aec214522cff28dc1b0f20c2ec2870189">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#aec214522cff28dc1b0f20c2ec2870189">stripe.h</a>
+</li>
+<li>stripeOff()
+: <a class="el" href="stripe_8cpp.html#a40d444a306464fa8547feea96737ae0d">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a40d444a306464fa8547feea96737ae0d">stripe.h</a>
+</li>
+<li>stripeOn()
+: <a class="el" href="stripe_8cpp.html#a9130dbeb208c1b9e5519834f7de6a530">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a9130dbeb208c1b9e5519834f7de6a530">stripe.h</a>
+</li>
+<li>stripeSetColor()
+: <a class="el" href="stripe_8cpp.html#a32197a6a1a75aaf54a2a19dbc31be4e0">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a32197a6a1a75aaf54a2a19dbc31be4e0">stripe.h</a>
+</li>
+<li>stripeSetDim()
+: <a class="el" href="stripe_8cpp.html#ade9bc3e5b3fabc99922d78df6ae96434">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#ade9bc3e5b3fabc99922d78df6ae96434">stripe.h</a>
+</li>
+<li>stripeSetRGB()
+: <a class="el" href="stripe_8cpp.html#a405699059b25eae6001d1e989a1da5d6">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a405699059b25eae6001d1e989a1da5d6">stripe.h</a>
+</li>
+<li>stripeSetTransient()
+: <a class="el" href="stripe_8h.html#a26524f75c9d72587489d20bba6c61da6">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#a26524f75c9d72587489d20bba6c61da6">stripe.cpp</a>
+</li>
+<li>stripeSetWhite()
+: <a class="el" href="stripe_8cpp.html#a2ae73653f2098fdae40bb0916949e77e">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a2ae73653f2098fdae40bb0916949e77e">stripe.h</a>
+</li>
+<li>stripeThread()
+: <a class="el" href="stripe_8h.html#a914baf734bc672a910769802c1e882c8">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#a914baf734bc672a910769802c1e882c8">stripe.cpp</a>
+</li>
+<li>stripeTimerHandler()
+: <a class="el" href="stripe_8h.html#a630b80b8bd1e8a0f535b21a720de76b8">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#a630b80b8bd1e8a0f535b21a720de76b8">stripe.cpp</a>
+</li>
+<li>stripeUpdate()
+: <a class="el" href="stripe_8cpp.html#a79a7d75b45ddbb2b3324ec450658136c">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a79a7d75b45ddbb2b3324ec450658136c">stripe.h</a>
+</li>
+<li>stripeUpdateDim()
+: <a class="el" href="stripe_8cpp.html#a849e5953dbdb82fb8405b1ab43067eed">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a849e5953dbdb82fb8405b1ab43067eed">stripe.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 130 - 0
CoffeeCode/html/globals_func_t.html

@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>terminationHandler()
+: <a class="el" href="main_8cpp.html#acd303e48c6d5b8d8bbf55db887f1e7e8">main.cpp</a>
+</li>
+<li>timer_handler()
+: <a class="el" href="timer_8cpp.html#a69a9ecb245422cbf03f28336a3cde462">timer.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 127 - 0
CoffeeCode/html/globals_func_u.html

@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_func_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>usr1Handler()
+: <a class="el" href="main_8cpp.html#a6b9ec8ce27cbec14222dfd2db55e8bad">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 140 - 0
CoffeeCode/html/globals_g.html

@@ -0,0 +1,140 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li class="current"><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>getSigValue()
+: <a class="el" href="coffee_8cpp.html#a3290268b8fcbba9a6b642b68860a8503">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a3290268b8fcbba9a6b642b68860a8503">coffee.h</a>
+</li>
+<li>getState()
+: <a class="el" href="coffee_8cpp.html#afc0b4325b7cabe49f623d5e44aaa37d7">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#afc0b4325b7cabe49f623d5e44aaa37d7">coffee.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 225 - 0
CoffeeCode/html/globals_h.html

@@ -0,0 +1,225 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li class="current"><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>halGetFlow()
+: <a class="el" href="hal_8cpp.html#a1a0d534518ff19bf5b023dfe64d141db">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a1a0d534518ff19bf5b023dfe64d141db">hal.h</a>
+</li>
+<li>halGetInt0()
+: <a class="el" href="hal_8h.html#af5609d1b9c9b6bde787cdca47b3b0a4f">hal.h</a>
+, <a class="el" href="hal_8cpp.html#af5609d1b9c9b6bde787cdca47b3b0a4f">hal.cpp</a>
+</li>
+<li>halGetInt1()
+: <a class="el" href="hal_8cpp.html#afe1e8d0d1237d0f128d50a5b146002a2">hal.cpp</a>
+, <a class="el" href="hal_8h.html#afe1e8d0d1237d0f128d50a5b146002a2">hal.h</a>
+</li>
+<li>halGetRelaisState()
+: <a class="el" href="hal_8h.html#a1d22d01f1a6a6789f2816e27bbcb0504">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a1d22d01f1a6a6789f2816e27bbcb0504">hal.cpp</a>
+</li>
+<li>halInit()
+: <a class="el" href="hal_8cpp.html#afd89c1650df524d95aef39b8bc38170d">hal.cpp</a>
+, <a class="el" href="hal_8h.html#afd89c1650df524d95aef39b8bc38170d">hal.h</a>
+</li>
+<li>halInt0()
+: <a class="el" href="hal_8cpp.html#a597258a80a0bb18db649d01b0893c99f">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a597258a80a0bb18db649d01b0893c99f">hal.h</a>
+</li>
+<li>halInt0TimerHandler
+: <a class="el" href="hal_8cpp.html#ae52d2e251c46b1fa1f9369cf115dc5b2">hal.cpp</a>
+, <a class="el" href="hal_8h.html#aa52d1bfb2ca68e499ad83d9b0d1ba275">hal.h</a>
+</li>
+<li>halInt1()
+: <a class="el" href="hal_8cpp.html#a603aaa9c0c3cfef8b185df5c7f4921c3">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a603aaa9c0c3cfef8b185df5c7f4921c3">hal.h</a>
+</li>
+<li>halInt1TimerHandler
+: <a class="el" href="hal_8cpp.html#af4bfd5892199d0ffad5ba51c44d4295e">hal.cpp</a>
+, <a class="el" href="hal_8h.html#ad56f6e1b04c236040717eadfd806c244">hal.h</a>
+</li>
+<li>halIntFlow()
+: <a class="el" href="hal_8cpp.html#ace9ace8c7e0012157569f446d4cb8c52">hal.cpp</a>
+, <a class="el" href="hal_8h.html#ace9ace8c7e0012157569f446d4cb8c52">hal.h</a>
+</li>
+<li>halIntPressure()
+: <a class="el" href="hal_8cpp.html#a73067106de2bbcf98bcc3a06cbf3b000">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a73067106de2bbcf98bcc3a06cbf3b000">hal.h</a>
+</li>
+<li>halIntProximity()
+: <a class="el" href="hal_8cpp.html#a0622583e0c8453a6d6963964ad7e7122">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a0622583e0c8453a6d6963964ad7e7122">hal.h</a>
+</li>
+<li>halIsHeating()
+: <a class="el" href="hal_8cpp.html#a01f43f0666520e8d8af65e94fd82a5eb">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a01f43f0666520e8d8af65e94fd82a5eb">hal.h</a>
+</li>
+<li>halMachineOff()
+: <a class="el" href="hal_8cpp.html#a8cefe61db8caf1cbdbc35f680744a3eb">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a8cefe61db8caf1cbdbc35f680744a3eb">hal.h</a>
+</li>
+<li>halMachineOn()
+: <a class="el" href="hal_8cpp.html#a80e05d7e336073450da3168992d58754">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a80e05d7e336073450da3168992d58754">hal.h</a>
+</li>
+<li>halProxSensorCovered()
+: <a class="el" href="hal_8cpp.html#a52c001b5136b02e19bd00282a137631d">hal.cpp</a>
+, <a class="el" href="hal_8h.html#a52c001b5136b02e19bd00282a137631d">hal.h</a>
+</li>
+<li>halRelaisOff()
+: <a class="el" href="hal_8h.html#a25c63f62c18555fc1b9b50bcd29f1c7d">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a25c63f62c18555fc1b9b50bcd29f1c7d">hal.cpp</a>
+</li>
+<li>halRelaisOn()
+: <a class="el" href="hal_8h.html#a33e09a3806bdcd5c711e557178335763">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a33e09a3806bdcd5c711e557178335763">hal.cpp</a>
+</li>
+<li>halRelaisSet()
+: <a class="el" href="hal_8h.html#a9b67b274703f0c42834f4b447d5c04a2">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a9b67b274703f0c42834f4b447d5c04a2">hal.cpp</a>
+</li>
+<li>halResetFlow()
+: <a class="el" href="hal_8h.html#a99d0fb6a80635b679cf4cd1fa90b483d">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a99d0fb6a80635b679cf4cd1fa90b483d">hal.cpp</a>
+</li>
+<li>halSendSignal()
+: <a class="el" href="hal_8h.html#a4fa1c41f2dd3c24e13feaa6be70ad426">hal.h</a>
+, <a class="el" href="hal_8cpp.html#a252f49661ac23a045bb0d9d20997dfa4">hal.cpp</a>
+</li>
+<li>HalSig
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68">hal.h</a>
+</li>
+<li>heatingTime
+: <a class="el" href="coffee_8cpp.html#ac88c1bf95effb2aeddc71b1c2cf9034b">coffee.cpp</a>
+</li>
+<li>hupHandler()
+: <a class="el" href="main_8cpp.html#aa5f8eab61a77d6d566215bcf12144422">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 163 - 0
CoffeeCode/html/globals_i.html

@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li class="current"><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>I2C_ADDRESS_STRIPE
+: <a class="el" href="stripe_8h.html#a52f9fc93ce25c487d4f72b9f2f400545">stripe.h</a>
+</li>
+<li>i2cfd
+: <a class="el" href="stripe_8cpp.html#ad82fe3818283681900e35187390d4b84">stripe.cpp</a>
+</li>
+<li>INITIAL_REMAINDER
+: <a class="el" href="crc_8h.html#acce5b79e1a8ad8ffe40fb9f7d63b2fdc">crc.h</a>
+</li>
+<li>initTimers()
+: <a class="el" href="timer_8cpp.html#a9e737e3249388fb2e50d868bad69c688">timer.cpp</a>
+, <a class="el" href="timer_8h.html#a9e737e3249388fb2e50d868bad69c688">timer.h</a>
+</li>
+<li>Int0Time
+: <a class="el" href="hal_8cpp.html#a3aca866b54d36fe04db7c5ab8275de1e">hal.cpp</a>
+</li>
+<li>Int1Time
+: <a class="el" href="hal_8cpp.html#a343efe067e2fa2affd5f15ef3447aaa1">hal.cpp</a>
+</li>
+<li>int64to8bit()
+: <a class="el" href="database_8cpp.html#a28dbbb9e24e2035535645629105aea46">database.cpp</a>
+, <a class="el" href="database_8h.html#a28dbbb9e24e2035535645629105aea46">database.h</a>
+</li>
+<li>int8to64bit()
+: <a class="el" href="database_8h.html#a99cc529fd785c752cd4b73ea7989521d">database.h</a>
+, <a class="el" href="database_8cpp.html#a99cc529fd785c752cd4b73ea7989521d">database.cpp</a>
+</li>
+<li>inttochar()
+: <a class="el" href="database_8h.html#a437086982a7400d7205f3ab6600e6dcf">database.h</a>
+, <a class="el" href="database_8cpp.html#a437086982a7400d7205f3ab6600e6dcf">database.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 163 - 0
CoffeeCode/html/globals_k.html

@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li class="current"><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>KBLU
+: <a class="el" href="logger_8h.html#a3f838f2fc3a9a3b434be606fc908964b">logger.h</a>
+</li>
+<li>KBOLD
+: <a class="el" href="logger_8h.html#a815022697da1d2d7744ff178e940078c">logger.h</a>
+</li>
+<li>KCYN
+: <a class="el" href="logger_8h.html#a32036c94dbb166a3f874b7efc169841f">logger.h</a>
+</li>
+<li>KGRN
+: <a class="el" href="logger_8h.html#ac081c83b067273757f7a2e54a5957d41">logger.h</a>
+</li>
+<li>killThread()
+: <a class="el" href="global_8h.html#ab6e46b0071bb3330546b7f2b601d0a6c">global.h</a>
+, <a class="el" href="main_8cpp.html#ab6e46b0071bb3330546b7f2b601d0a6c">main.cpp</a>
+</li>
+<li>KMAG
+: <a class="el" href="logger_8h.html#a6825f05d3b9d619d91d79d0ef18bb8b2">logger.h</a>
+</li>
+<li>KNRM
+: <a class="el" href="logger_8h.html#a137aa83ec74421d226a90c92ec032ac9">logger.h</a>
+</li>
+<li>KRED
+: <a class="el" href="logger_8h.html#a66290957baed5df3930ada4cb8caccf1">logger.h</a>
+</li>
+<li>KWHT
+: <a class="el" href="logger_8h.html#af0036c8022c9980079ab17e5c87fd478">logger.h</a>
+</li>
+<li>KYEL
+: <a class="el" href="logger_8h.html#a897b10d246533c95ba86cb79f92e465a">logger.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 304 - 0
CoffeeCode/html/globals_l.html

@@ -0,0 +1,304 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li class="current"><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lang_de
+: <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080ae89ac8a244131d461364a7638daf0a30">display.h</a>
+</li>
+<li>lang_en
+: <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080af59ab6af8bf5947a70c77afafccac15b">display.h</a>
+</li>
+<li>lang_last
+: <a class="el" href="display_8h.html#a681b0c0e7b9408f4c70f8e76da34d080a8222fe4f6d1104084bbf5a691f4ce644">display.h</a>
+</li>
+<li>lastlog
+: <a class="el" href="logger_8cpp.html#a05db4cbb4a1c322f0adebb466081c99e">logger.cpp</a>
+</li>
+<li>lastTimer
+: <a class="el" href="timer_8cpp.html#a16ed619aa4eb3fda56a001d0d7a8975d">timer.cpp</a>
+</li>
+<li>lcd
+: <a class="el" href="display_8cpp.html#a9d1129916cfa4cbd7489638ce470c3a4">display.cpp</a>
+</li>
+<li>LCD_BLINK_CTRL
+: <a class="el" href="lcd_8cpp.html#aa52bab70fab9c117f20d71442de77452">lcd.cpp</a>
+</li>
+<li>LCD_CDSHIFT
+: <a class="el" href="lcd_8cpp.html#a93e4bb4b824f5b8f5d572d9b4a943ad2">lcd.cpp</a>
+</li>
+<li>LCD_CDSHIFT_RL
+: <a class="el" href="lcd_8cpp.html#afb0c5015365d7e200edec8967d32195c">lcd.cpp</a>
+</li>
+<li>LCD_CGRAM
+: <a class="el" href="lcd_8cpp.html#a3b38de74c362be1781fef1136aa9684c">lcd.cpp</a>
+</li>
+<li>LCD_CLEAR
+: <a class="el" href="lcd_8cpp.html#a6aa8aa2057294b7d06088e834299b369">lcd.cpp</a>
+</li>
+<li>LCD_CTRL
+: <a class="el" href="lcd_8cpp.html#a8e945df7ca614325cafa08258e82a63c">lcd.cpp</a>
+</li>
+<li>LCD_CURSOR_CTRL
+: <a class="el" href="lcd_8cpp.html#a3da48db16c1e7844567542273a5578c7">lcd.cpp</a>
+</li>
+<li>LCD_DGRAM
+: <a class="el" href="lcd_8cpp.html#a9f40873eaf6a8f0a93971b3e0ab3fd12">lcd.cpp</a>
+</li>
+<li>LCD_DISPLAY_CTRL
+: <a class="el" href="lcd_8cpp.html#a1a166a796cbaf4cdd6a3af584ec067d5">lcd.cpp</a>
+</li>
+<li>LCD_EN
+: <a class="el" href="lcd_8h.html#a1640ffbc0d8ec0f7edb04a2b93918072">lcd.h</a>
+</li>
+<li>LCD_ENTRY
+: <a class="el" href="lcd_8cpp.html#a28d2c8d621da114a0fe438db2e58507a">lcd.cpp</a>
+</li>
+<li>LCD_ENTRY_ID
+: <a class="el" href="lcd_8cpp.html#a58e84458e964afcac51877bd13e7703f">lcd.cpp</a>
+</li>
+<li>LCD_ENTRY_SH
+: <a class="el" href="lcd_8cpp.html#aff5b4fcb87ea2eef9bb3af0234b14f53">lcd.cpp</a>
+</li>
+<li>LCD_FUNC
+: <a class="el" href="lcd_8cpp.html#a387bfe42ea7284ba0f154f00df579cad">lcd.cpp</a>
+</li>
+<li>LCD_FUNC_DL
+: <a class="el" href="lcd_8cpp.html#ae4b9a3bcb0dc315afc03412237c5a3ea">lcd.cpp</a>
+</li>
+<li>LCD_FUNC_F
+: <a class="el" href="lcd_8cpp.html#a5ea7976aa137e8d043d3dfab474cf0b4">lcd.cpp</a>
+</li>
+<li>LCD_FUNC_N
+: <a class="el" href="lcd_8cpp.html#a0741cad05d62ff28d92a05ea11aa6fdc">lcd.cpp</a>
+</li>
+<li>LCD_HOME
+: <a class="el" href="lcd_8cpp.html#ae0e309ccad89222eb3457f2da9f2bb8d">lcd.cpp</a>
+</li>
+<li>LCD_RS
+: <a class="el" href="lcd_8h.html#a4781e073871c6f27f89b9463ad3a4ed1">lcd.h</a>
+</li>
+<li>LCD_RW
+: <a class="el" href="lcd_8h.html#a26089a10ddd59a0dc7283c19ccc02533">lcd.h</a>
+</li>
+<li>lcdCharDef()
+: <a class="el" href="lcd_8cpp.html#a74d902393394e4d3cebdcf0d81bbaeeb">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a74d902393394e4d3cebdcf0d81bbaeeb">lcd.h</a>
+</li>
+<li>lcdClear()
+: <a class="el" href="lcd_8cpp.html#ae1b4dfd9571742b5ca0aba92882b57a6">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#ae1b4dfd9571742b5ca0aba92882b57a6">lcd.h</a>
+</li>
+<li>lcdCursor()
+: <a class="el" href="lcd_8h.html#a8aa13c894973d52eeed51d10bf869df2">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#a8aa13c894973d52eeed51d10bf869df2">lcd.cpp</a>
+</li>
+<li>lcdCursorBlink()
+: <a class="el" href="lcd_8cpp.html#af39d67df7e36291184f69691bb97285b">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#af39d67df7e36291184f69691bb97285b">lcd.h</a>
+</li>
+<li>lcdDisplay()
+: <a class="el" href="lcd_8cpp.html#af08385cd21eea125d63d6919ecfbea4a">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#af08385cd21eea125d63d6919ecfbea4a">lcd.h</a>
+</li>
+<li>lcdHome()
+: <a class="el" href="lcd_8cpp.html#a688913764edb3a241c26da5e51d70ac2">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a688913764edb3a241c26da5e51d70ac2">lcd.h</a>
+</li>
+<li>lcdInit()
+: <a class="el" href="lcd_8cpp.html#a88d70347308e92cb29eb45b505cad39e">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a88d70347308e92cb29eb45b505cad39e">lcd.h</a>
+</li>
+<li>lcdInitI()
+: <a class="el" href="lcd_8cpp.html#a47f05b4cef2cf066cf1cbb1beb7ceb31">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a47f05b4cef2cf066cf1cbb1beb7ceb31">lcd.h</a>
+</li>
+<li>lcdPosition()
+: <a class="el" href="lcd_8h.html#a5d09137f6373e95a692c4b3403729254">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#a5d09137f6373e95a692c4b3403729254">lcd.cpp</a>
+</li>
+<li>lcdPrintf()
+: <a class="el" href="lcd_8cpp.html#a49c322ad29410ea292f8d976baf6deb9">lcd.cpp</a>
+, <a class="el" href="lcd_8h.html#a49c322ad29410ea292f8d976baf6deb9">lcd.h</a>
+</li>
+<li>lcdPutchar()
+: <a class="el" href="lcd_8h.html#a21c60441ee22710add0c9bda1310ed66">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#a21c60441ee22710add0c9bda1310ed66">lcd.cpp</a>
+</li>
+<li>lcdPuts()
+: <a class="el" href="lcd_8h.html#a805efc4a96cca29544672151a9594c20">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#a805efc4a96cca29544672151a9594c20">lcd.cpp</a>
+</li>
+<li>lcds
+: <a class="el" href="lcd_8cpp.html#a6e3994c5175d8609dee2cc8d3bcd66e9">lcd.cpp</a>
+</li>
+<li>lcdSendCommand()
+: <a class="el" href="lcd_8h.html#abb6341df42d0e652db66e51fbf0ba486">lcd.h</a>
+, <a class="el" href="lcd_8cpp.html#abb6341df42d0e652db66e51fbf0ba486">lcd.cpp</a>
+</li>
+<li>LOG_CAN
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a854a22c1c382f9b7a93bf8e556191c5f">logger.h</a>
+</li>
+<li>LOG_ERROR
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a230506cce5c68c3bac5a821c42ed3473">logger.h</a>
+</li>
+<li>LOG_ERRORC
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a1ee7c46e5fb6cad577d81e275a4f8218">logger.h</a>
+</li>
+<li>LOG_INFO
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a6e98ff471e3ce6c4ef2d75c37ee51837">logger.h</a>
+</li>
+<li>LOG_OK
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a746c53b13e16f15d1d885f75efaf58b1">logger.h</a>
+</li>
+<li>LOG_WARN
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823ac8041ffa22bc823d4726701cdb13fc13">logger.h</a>
+</li>
+<li>logger()
+: <a class="el" href="logger_8cpp.html#a1f2dbdf600d66c1c1bcc820d0282d132">logger.cpp</a>
+, <a class="el" href="logger_8h.html#ad6ed0024f33524ff5e96b473a18b44fd">logger.h</a>
+</li>
+<li>logger_error()
+: <a class="el" href="logger_8cpp.html#ab5a2104bf520b79d590c6ef11cdeeb02">logger.cpp</a>
+, <a class="el" href="logger_8h.html#ab5a2104bf520b79d590c6ef11cdeeb02">logger.h</a>
+</li>
+<li>logger_print_time()
+: <a class="el" href="logger_8cpp.html#aeb33ace0bb24787befc4a34c561634b4">logger.cpp</a>
+</li>
+<li>logger_reset()
+: <a class="el" href="logger_8cpp.html#abd01f221b7a194e67bb39d88822c9772">logger.cpp</a>
+, <a class="el" href="logger_8h.html#abd01f221b7a194e67bb39d88822c9772">logger.h</a>
+</li>
+<li>logger_type_t
+: <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger.h</a>
+</li>
+<li>logger_verbose_t
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 145 - 0
CoffeeCode/html/globals_m.html

@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li class="current"><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>main()
+: <a class="el" href="main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main.cpp</a>
+</li>
+<li>mainLoop()
+: <a class="el" href="main_8cpp.html#a9a66b873229b4d46cb9f39dddfc1bddb">main.cpp</a>
+</li>
+<li>MAX_LCDS
+: <a class="el" href="lcd_8h.html#a6bfe3f4a880b075a72d2a8318bd10f8e">lcd.h</a>
+</li>
+<li>mutex
+: <a class="el" href="global_8h.html#a4acff8232e4aec9cd5c6dc200ac55ef3">global.h</a>
+, <a class="el" href="main_8cpp.html#a4acff8232e4aec9cd5c6dc200ac55ef3">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 136 - 0
CoffeeCode/html/globals_n.html

@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>nullThread()
+: <a class="el" href="timer_8cpp.html#ae9859727c0e51a70b4ff5f47d2527a77">timer.cpp</a>
+, <a class="el" href="timer_8h.html#ae9859727c0e51a70b4ff5f47d2527a77">timer.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 144 - 0
CoffeeCode/html/globals_o.html

@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>optCold
+: <a class="el" href="global_8h.html#a2a24ab7c0142e353c9ce9ca1ee1210bb">global.h</a>
+, <a class="el" href="main_8cpp.html#a2a24ab7c0142e353c9ce9ca1ee1210bb">main.cpp</a>
+</li>
+<li>optDate
+: <a class="el" href="main_8cpp.html#ae88c926fe2a10f736eb01b1d1e899a1c">main.cpp</a>
+, <a class="el" href="global_8h.html#ae88c926fe2a10f736eb01b1d1e899a1c">global.h</a>
+</li>
+<li>optPower
+: <a class="el" href="main_8cpp.html#a7bfeade3d2f19e8baecdcddd7f9162fa">main.cpp</a>
+, <a class="el" href="global_8h.html#a7bfeade3d2f19e8baecdcddd7f9162fa">global.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 150 - 0
CoffeeCode/html/globals_p.html

@@ -0,0 +1,150 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li class="current"><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PIN_FLOW
+: <a class="el" href="hal_8h.html#a1b7f077d2a81a295f0f9b0fbf09356ba">hal.h</a>
+</li>
+<li>PIN_INT0
+: <a class="el" href="hal_8h.html#acab09879ef6267b9482f7627c82346bc">hal.h</a>
+</li>
+<li>PIN_INT1
+: <a class="el" href="hal_8h.html#a987362f14d4ff58584140f09c24a4308">hal.h</a>
+</li>
+<li>PIN_PRESSURE_CTRL
+: <a class="el" href="hal_8h.html#a95d660a5e62442d33d7cc9d93ffb57b9">hal.h</a>
+</li>
+<li>PIN_PROXIMITY_SENSOR
+: <a class="el" href="hal_8h.html#a4b6bff93c300c970e912b45284fa1d7d">hal.h</a>
+</li>
+<li>POLYNOMIAL
+: <a class="el" href="crc_8h.html#ae13d91fe6e514f0aa1caba701ef1ff92">crc.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 152 - 0
CoffeeCode/html/globals_r.html

@@ -0,0 +1,152 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li class="current"><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>REFLECT_DATA
+: <a class="el" href="crc_8cpp.html#ac5944d40ab44731450a57acd7f027f6a">crc.cpp</a>
+, <a class="el" href="crc_8h.html#af6653e78d37b912d592ffc6e96eb7abb">crc.h</a>
+</li>
+<li>REFLECT_REMAINDER
+: <a class="el" href="crc_8h.html#a5aa89bef30ad5bd061deda3eef36e327">crc.h</a>
+, <a class="el" href="crc_8cpp.html#a2354513de80cf643198f44d7030b74d7">crc.cpp</a>
+</li>
+<li>REFRESH_RATE
+: <a class="el" href="display_8h.html#abc2b684fcc127e93aee54a3a45e25a7c">display.h</a>
+</li>
+<li>RELAIS_HEAT
+: <a class="el" href="hal_8h.html#a9b57e326c17e793a2c70b909256734ab">hal.h</a>
+</li>
+<li>RELAIS_POWER
+: <a class="el" href="hal_8h.html#a56489df9a2d1844419f2b0c104516657">hal.h</a>
+</li>
+<li>RELAIS_PUMP
+: <a class="el" href="hal_8h.html#a9723c5da9e57e2b3a1c3ec7b635cee53">hal.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 423 - 0
CoffeeCode/html/globals_s.html

@@ -0,0 +1,423 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li class="current"><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>shift_data()
+: <a class="el" href="spi_8cpp.html#aec7140cda479ce5f88361739e86ccecd">spi.cpp</a>
+, <a class="el" href="spi_8h.html#aec7140cda479ce5f88361739e86ccecd">spi.h</a>
+</li>
+<li>SHIFT_G
+: <a class="el" href="spi_8h.html#aa846752b3dc2a7a280e1c97191c1e378">spi.h</a>
+</li>
+<li>shift_init()
+: <a class="el" href="spi_8cpp.html#ac7600504b8cf1ac90ce331a5ed23c3db">spi.cpp</a>
+, <a class="el" href="spi_8h.html#ac7600504b8cf1ac90ce331a5ed23c3db">spi.h</a>
+</li>
+<li>SHIFT_RCK
+: <a class="el" href="spi_8h.html#aed6e9b64896ee902a2f02b1e49e65a11">spi.h</a>
+</li>
+<li>SHIFT_SCLR
+: <a class="el" href="spi_8h.html#aa9f52b418d31ac71ce93f2d7846ded90">spi.h</a>
+</li>
+<li>SIG
+: <a class="el" href="timer_8h.html#ad6f1d374549d22100d676d5fcac0a7e5">timer.h</a>
+</li>
+<li>SigBrewOff
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a6d3fe49429343ea09a007c2236db9382">hal.h</a>
+</li>
+<li>SigBrewOn
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f8316fcd4daf8fdee99ad3414c00857">hal.h</a>
+</li>
+<li>SigInt0Psh
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f6585385aaee8e6a336fb31e8713751">hal.h</a>
+</li>
+<li>SigInt0Rls
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae70d75d9c016f72d315ce0f375425ae3">hal.h</a>
+</li>
+<li>SigInt0RlsLong
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae12ff99a3219da47e0c3c2ebb690906e">hal.h</a>
+</li>
+<li>SigInt1Psh
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a5fd8970919f375d9f3baaaa053865ce2">hal.h</a>
+</li>
+<li>SigInt1Rls
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68aa85940fc659570c5b7ec2d8e0ed3eeae">hal.h</a>
+</li>
+<li>SigInt1RlsLong
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a1a7c6bd95f0ccdf91bc363cc8a638b73">hal.h</a>
+</li>
+<li>SigPressCls
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68abdd48e173224114754f253d764540ec9">hal.h</a>
+</li>
+<li>SigPressOpn
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a683f7a77d5c63e835b2a72ab1c540fe4">hal.h</a>
+</li>
+<li>SigProxCvrd
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ac53b2d92b9e3b1652f173e29db5b523d">hal.h</a>
+</li>
+<li>SigProxOpn
+: <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a7f18f13ecf372adaf681e706ad051fd3">hal.h</a>
+</li>
+<li>sigValue
+: <a class="el" href="coffee_8cpp.html#a959eceab8fe67a33076aa42e877441a5">coffee.cpp</a>
+</li>
+<li>SigValueEmpty()
+: <a class="el" href="coffee_8cpp.html#a63f25020d1567a2d5e03a9a59e75a0fc">coffee.cpp</a>
+, <a class="el" href="coffee_8h.html#a63f25020d1567a2d5e03a9a59e75a0fc">coffee.h</a>
+</li>
+<li>SPI_CHANNEL
+: <a class="el" href="global_8h.html#aa8cbb3355883e35c18820bfa63c4ce3a">global.h</a>
+</li>
+<li>spi_init()
+: <a class="el" href="spi_8cpp.html#ae909944aa85ae98323073c628be541aa">spi.cpp</a>
+, <a class="el" href="spi_8h.html#ae909944aa85ae98323073c628be541aa">spi.h</a>
+</li>
+<li>spi_readwrite()
+: <a class="el" href="spi_8cpp.html#a7402e4a56146a9e3df480b206a3f7e7e">spi.cpp</a>
+, <a class="el" href="spi_8h.html#a7402e4a56146a9e3df480b206a3f7e7e">spi.h</a>
+</li>
+<li>SPI_SPEED
+: <a class="el" href="global_8h.html#a0056b7fdd0f81fad9cd38e9fd389a4b6">global.h</a>
+</li>
+<li>SQL_DATABASE
+: <a class="el" href="global_8h.html#ad55c274bf698014e01dbc9afde3fc610">global.h</a>
+</li>
+<li>sqlClose()
+: <a class="el" href="database_8h.html#a7264f51f982e908b32635e91e6dc0062">database.h</a>
+, <a class="el" href="database_8cpp.html#a7264f51f982e908b32635e91e6dc0062">database.cpp</a>
+</li>
+<li>sqlExecute()
+: <a class="el" href="database_8cpp.html#afd88a963f835215b8dad9ee9e49866dc">database.cpp</a>
+, <a class="el" href="database_8h.html#afd88a963f835215b8dad9ee9e49866dc">database.h</a>
+</li>
+<li>sqlExecute2()
+: <a class="el" href="database_8cpp.html#a53458fb936962d23efec505a545a9cb8">database.cpp</a>
+</li>
+<li>sqlGetConf()
+: <a class="el" href="database_8cpp.html#aad0e803eda7a440a6063a447cfeca0cd">database.cpp</a>
+, <a class="el" href="database_8h.html#aad0e803eda7a440a6063a447cfeca0cd">database.h</a>
+</li>
+<li>sqlOpen()
+: <a class="el" href="database_8cpp.html#a1885a74e6af3ee510f30f98e60372e3e">database.cpp</a>
+, <a class="el" href="database_8h.html#a1885a74e6af3ee510f30f98e60372e3e">database.h</a>
+</li>
+<li>sqlSetConf()
+: <a class="el" href="database_8cpp.html#a1ce0ac0c58916c138a92d3282f569784">database.cpp</a>
+, <a class="el" href="database_8h.html#a1ce0ac0c58916c138a92d3282f569784">database.h</a>
+</li>
+<li>sqlSetup()
+: <a class="el" href="database_8cpp.html#aaed3fb776c9dc76d262df026803d3b8c">database.cpp</a>
+, <a class="el" href="database_8h.html#aaed3fb776c9dc76d262df026803d3b8c">database.h</a>
+</li>
+<li>sqltest()
+: <a class="el" href="database_8cpp.html#a5d0363e5d886e2c3e4bb5ca46d265ba7">database.cpp</a>
+, <a class="el" href="database_8h.html#a5d0363e5d886e2c3e4bb5ca46d265ba7">database.h</a>
+</li>
+<li>state
+: <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">coffee.cpp</a>
+</li>
+<li>STATE_BREW
+: <a class="el" href="coffee_8h.html#a7a56332694aec763a9f8028113a07199">coffee.h</a>
+</li>
+<li>STATE_BREWMANUAL
+: <a class="el" href="coffee_8h.html#af696741daae3faab28c27755188fd828">coffee.h</a>
+</li>
+<li>STATE_CLEANING
+: <a class="el" href="coffee_8h.html#a3a3e5a95a5ba91345c6a1b6f7e06c737">coffee.h</a>
+</li>
+<li>STATE_ERROR
+: <a class="el" href="coffee_8h.html#a7bf0c086c7c41c12cc63324327932d91">coffee.h</a>
+</li>
+<li>STATE_HEATING
+: <a class="el" href="coffee_8h.html#ab87d7787dc7a2c2afc6d7853353d7003">coffee.h</a>
+</li>
+<li>STATE_IDLE
+: <a class="el" href="coffee_8h.html#aafff27c7165f059a969fe60fee51f683">coffee.h</a>
+</li>
+<li>STATE_INITALHEATING
+: <a class="el" href="coffee_8h.html#af74b21e82c0f8fbf7f697db071d420a0">coffee.h</a>
+</li>
+<li>STATE_OFF
+: <a class="el" href="coffee_8h.html#a0cc0d45e13bc83065d45df9d3d1dc887">coffee.h</a>
+</li>
+<li>stopTimers()
+: <a class="el" href="timer_8cpp.html#a43ed436d8c1803ced3029a909320a841">timer.cpp</a>
+, <a class="el" href="timer_8h.html#a43ed436d8c1803ced3029a909320a841">timer.h</a>
+</li>
+<li>str_brewing
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8e3b0fbb0f42de5df8434e44e0b85272">display.h</a>
+</li>
+<li>str_bye
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907ab88ed9e2db4f34884981000ac617defb">display.h</a>
+</li>
+<li>str_cleaning
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a2bb69120919321c90fe0862abc8a247c">display.h</a>
+</li>
+<li>str_error
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aeaed0d27362049f28692626f30566890">display.h</a>
+</li>
+<li>str_flow
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aadf50a104ff26cf8b575c0b68e52a572">display.h</a>
+</li>
+<li>str_heating
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a9eb4c3532bbada27013a4cff3dc8a624">display.h</a>
+</li>
+<li>str_heatingready
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907a8aaa4383254e4327e846e45befac54d0">display.h</a>
+</li>
+<li>str_last
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907aa22549c4ff533e248b5fad404f80c6d9">display.h</a>
+</li>
+<li>str_ready
+: <a class="el" href="display_8h.html#a4984755f821d9f0c49acdcac62f4c907af200a74535586cc849fc6f5f38c85171">display.h</a>
+</li>
+<li>string_sprintf()
+: <a class="el" href="database_8cpp.html#acd0eb5a18168fa3c37fab8ed0958c043">database.cpp</a>
+, <a class="el" href="database_8h.html#a6c0bc3256310fd400a26243d8a8f1652">database.h</a>
+</li>
+<li>string_vsprintf()
+: <a class="el" href="database_8cpp.html#ac240bb02efe882b4e82da48676301d89">database.cpp</a>
+</li>
+<li>STRIPE_CMD_FADEOUT
+: <a class="el" href="stripe_8h.html#a14287ccb3789c724603c28910512a0b3">stripe.h</a>
+</li>
+<li>STRIPE_CMD_FADESTOP
+: <a class="el" href="stripe_8h.html#a2e4a6f31f6823ec2592e9216a51232f2">stripe.h</a>
+</li>
+<li>STRIPE_CMD_FADETO
+: <a class="el" href="stripe_8h.html#a80ccf336e21703504faf1b3acba2c98b">stripe.h</a>
+</li>
+<li>STRIPE_CMD_RESET
+: <a class="el" href="stripe_8h.html#a0a2c9ea1a805ca03af6c43c107c98e8e">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SET
+: <a class="el" href="stripe_8h.html#ab495a56c339e141ecbecfd9872f81fbb">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SET2
+: <a class="el" href="stripe_8h.html#aead1e6fe1bdc60cade5b071a293864cc">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETB
+: <a class="el" href="stripe_8h.html#a25c93d4301c3ad1064adfb9eff952211">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETDIM
+: <a class="el" href="stripe_8h.html#aedb99f1c6b67c005f5a2cd6dea06c6b7">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETG
+: <a class="el" href="stripe_8h.html#ac62893e9f8f3793a3f6de3338a9a93ff">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETR
+: <a class="el" href="stripe_8h.html#ad06bb775e1f72bc21a5f17a19eb62e80">stripe.h</a>
+</li>
+<li>STRIPE_CMD_SETW
+: <a class="el" href="stripe_8h.html#a3c5fd782e0479daf6bb272d5197c8877">stripe.h</a>
+</li>
+<li>stripe_transient_t
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9">stripe.h</a>
+</li>
+<li>stripeCommand()
+: <a class="el" href="stripe_8cpp.html#ab58f9b853bd6c2deb11f6b64e6275cd7">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#ab58f9b853bd6c2deb11f6b64e6275cd7">stripe.h</a>
+</li>
+<li>stripeEffectDisable()
+: <a class="el" href="stripe_8cpp.html#a40cca6b9cc8aeca2f28442126528163b">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a40cca6b9cc8aeca2f28442126528163b">stripe.h</a>
+</li>
+<li>stripeEffectHeating()
+: <a class="el" href="stripe_8h.html#a97c35798100bbf3208fd15cc5615cd97">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#a97c35798100bbf3208fd15cc5615cd97">stripe.cpp</a>
+</li>
+<li>stripeEffectPulse()
+: <a class="el" href="stripe_8cpp.html#aea3ed8a6a2d07ed7f8f2ff59f6fa3a01">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#aea3ed8a6a2d07ed7f8f2ff59f6fa3a01">stripe.h</a>
+</li>
+<li>stripeGetDim()
+: <a class="el" href="stripe_8h.html#ab479c1db854476cf80b86d1fe33a908e">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#ab479c1db854476cf80b86d1fe33a908e">stripe.cpp</a>
+</li>
+<li>stripeGetRGB()
+: <a class="el" href="stripe_8h.html#ac5379b3ade62c829d19654c22efd90de">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#ac5379b3ade62c829d19654c22efd90de">stripe.cpp</a>
+</li>
+<li>stripeGetWhite()
+: <a class="el" href="stripe_8h.html#aa67941dfd018cc2e0ba62a76a3d9136d">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#aa67941dfd018cc2e0ba62a76a3d9136d">stripe.cpp</a>
+</li>
+<li>stripeInit()
+: <a class="el" href="stripe_8cpp.html#aec214522cff28dc1b0f20c2ec2870189">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#aec214522cff28dc1b0f20c2ec2870189">stripe.h</a>
+</li>
+<li>stripeOff()
+: <a class="el" href="stripe_8h.html#a40d444a306464fa8547feea96737ae0d">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#a40d444a306464fa8547feea96737ae0d">stripe.cpp</a>
+</li>
+<li>stripeOn()
+: <a class="el" href="stripe_8cpp.html#a9130dbeb208c1b9e5519834f7de6a530">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a9130dbeb208c1b9e5519834f7de6a530">stripe.h</a>
+</li>
+<li>stripeSetColor()
+: <a class="el" href="stripe_8cpp.html#a32197a6a1a75aaf54a2a19dbc31be4e0">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a32197a6a1a75aaf54a2a19dbc31be4e0">stripe.h</a>
+</li>
+<li>stripeSetDim()
+: <a class="el" href="stripe_8cpp.html#ade9bc3e5b3fabc99922d78df6ae96434">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#ade9bc3e5b3fabc99922d78df6ae96434">stripe.h</a>
+</li>
+<li>stripeSetRGB()
+: <a class="el" href="stripe_8cpp.html#a405699059b25eae6001d1e989a1da5d6">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a405699059b25eae6001d1e989a1da5d6">stripe.h</a>
+</li>
+<li>stripeSetTransient()
+: <a class="el" href="stripe_8cpp.html#a26524f75c9d72587489d20bba6c61da6">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a26524f75c9d72587489d20bba6c61da6">stripe.h</a>
+</li>
+<li>stripeSetWhite()
+: <a class="el" href="stripe_8cpp.html#a2ae73653f2098fdae40bb0916949e77e">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a2ae73653f2098fdae40bb0916949e77e">stripe.h</a>
+</li>
+<li>stripeThread()
+: <a class="el" href="stripe_8cpp.html#a914baf734bc672a910769802c1e882c8">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a914baf734bc672a910769802c1e882c8">stripe.h</a>
+</li>
+<li>stripeTimer
+: <a class="el" href="stripe_8cpp.html#abfdd13da6d6e41a44deb095184750c8e">stripe.cpp</a>
+</li>
+<li>stripeTimerHandler()
+: <a class="el" href="stripe_8cpp.html#a630b80b8bd1e8a0f535b21a720de76b8">stripe.cpp</a>
+, <a class="el" href="stripe_8h.html#a630b80b8bd1e8a0f535b21a720de76b8">stripe.h</a>
+</li>
+<li>stripeUpdate()
+: <a class="el" href="stripe_8h.html#a79a7d75b45ddbb2b3324ec450658136c">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#a79a7d75b45ddbb2b3324ec450658136c">stripe.cpp</a>
+</li>
+<li>stripeUpdateDim()
+: <a class="el" href="stripe_8h.html#a849e5953dbdb82fb8405b1ab43067eed">stripe.h</a>
+, <a class="el" href="stripe_8cpp.html#a849e5953dbdb82fb8405b1ab43067eed">stripe.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 191 - 0
CoffeeCode/html/globals_t.html

@@ -0,0 +1,191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>terminationHandler()
+: <a class="el" href="main_8cpp.html#acd303e48c6d5b8d8bbf55db887f1e7e8">main.cpp</a>
+</li>
+<li>thread
+: <a class="el" href="global_8h.html#a5e61240888e929e526f41e19b6c0bd46">global.h</a>
+, <a class="el" href="main_8cpp.html#ad1c21fd320f05c652f120ad167628c14">main.cpp</a>
+</li>
+<li>THREAD_COFFEE
+: <a class="el" href="global_8h.html#a5f697926bb7bcc4722a9e650a1acdb6a">global.h</a>
+</li>
+<li>THREAD_DISPLAY
+: <a class="el" href="global_8h.html#a843e1fa4b4de70b9f31d42a41a896c1c">global.h</a>
+</li>
+<li>THREAD_MAIN
+: <a class="el" href="global_8h.html#a67a7c5f1e4a75f1508395d450895990d">global.h</a>
+</li>
+<li>THREAD_STRIPE
+: <a class="el" href="global_8h.html#a77f390a98c0e73ae38abd20f467d6cce">global.h</a>
+</li>
+<li>TIME_BUTTONLONGPRESS
+: <a class="el" href="hal_8h.html#a39a999d4c82a1021ee63072abe804946">hal.h</a>
+</li>
+<li>TIME_INFUSION
+: <a class="el" href="coffee_8h.html#acd34aefc536dfe9b45dbed679cf6afaf">coffee.h</a>
+</li>
+<li>TIME_SOAK
+: <a class="el" href="coffee_8h.html#ad4b00557d847ecf54b790844b3be2eb0">coffee.h</a>
+</li>
+<li>TIMER_DELAY_US
+: <a class="el" href="global_8h.html#a91dee3a4ce745234c8a4998388d6c645">global.h</a>
+</li>
+<li>timer_handler()
+: <a class="el" href="timer_8cpp.html#a69a9ecb245422cbf03f28336a3cde462">timer.cpp</a>
+</li>
+<li>timercnt
+: <a class="el" href="timer_8cpp.html#a0f94d5829b547df53531ff4c3ec325c0">timer.cpp</a>
+</li>
+<li>timerScaler
+: <a class="el" href="display_8cpp.html#adf977b563dc485f1d1c4e601a9b31b68">display.cpp</a>
+</li>
+<li>TOPBIT
+: <a class="el" href="crc_8cpp.html#a118ad552670dbefa1df0ba72d147f5e1">crc.cpp</a>
+</li>
+<li>TRANS_DIRECT
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9ad41450786f0c8b404231dfaff4c14931">stripe.h</a>
+</li>
+<li>TRANS_FAST
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9a37991877080c17224eaa0268947a545c">stripe.h</a>
+</li>
+<li>TRANS_MEDIUM
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9a26be047607e612751d1979597dd21185">stripe.h</a>
+</li>
+<li>TRANS_SLOW
+: <a class="el" href="stripe_8h.html#aa761062faf633557e537e07a781965e9ad1105b7089df16f505a8c28ef4e31f04">stripe.h</a>
+</li>
+<li>TRUE
+: <a class="el" href="lcd_8cpp.html#aa8cecfc5c5c054d2875c03e77b7be15d">lcd.cpp</a>
+, <a class="el" href="crc_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">crc.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 108 - 0
CoffeeCode/html/globals_type.html

@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>crc
+: <a class="el" href="crc_8h.html#a73364f0434186bc77eaa8e3b03a437be">crc.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 138 - 0
CoffeeCode/html/globals_u.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>USE_COLORS
+: <a class="el" href="logger_8h.html#acdbdbd1e0c5422f3d1f7aa3960957e0a">logger.h</a>
+</li>
+<li>usr1Handler()
+: <a class="el" href="main_8cpp.html#a6b9ec8ce27cbec14222dfd2db55e8bad">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 157 - 0
CoffeeCode/html/globals_v.html

@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li class="current"><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>V_BASIC
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a8470d917f387c308f571d2f370c238a3">logger.h</a>
+</li>
+<li>V_BREW
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131ac26291e5906a8e13146ec8dc56a0869a">logger.h</a>
+</li>
+<li>V_HAL
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a9a36496e8d624d5ea70b3f86bc2c0bed">logger.h</a>
+</li>
+<li>V_NONE
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131afa973d27e66919a26910ccef33a3606a">logger.h</a>
+</li>
+<li>V_SPI
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a86acf22e226ebf319ce306ea1af2d95a">logger.h</a>
+</li>
+<li>V_SQL
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131acf3ff5c46ec466c2d7438651b46cc17c">logger.h</a>
+</li>
+<li>V_STRIPE
+: <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a6af331195d8ce87720090a3eece459e4">logger.h</a>
+</li>
+<li>verbose
+: <a class="el" href="global_8h.html#a0b2caeb4b6f130be43e5a2f0267dd453">global.h</a>
+, <a class="el" href="main_8cpp.html#a0b2caeb4b6f130be43e5a2f0267dd453">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 304 - 0
CoffeeCode/html/globals_vars.html

@@ -0,0 +1,304 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_b"><span>b</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_d"><span>d</span></a></li>
+      <li><a href="#index_e"><span>e</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_h"><span>h</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_l"><span>l</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_o"><span>o</span></a></li>
+      <li><a href="#index_s"><span>s</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li class="current"><a href="#index_v"><span>v</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>beginHeating
+: <a class="el" href="coffee_8cpp.html#a1426cd37aa49a96e7bcf12d26cde1a0d">coffee.cpp</a>
+</li>
+<li>brewTime
+: <a class="el" href="coffee_8cpp.html#a3756d547bc4c41a306650f4f4bbb930c">coffee.cpp</a>
+</li>
+<li>brewTimeHandler
+: <a class="el" href="coffee_8cpp.html#a25ddb2af4585729d37dab1e1b5bb0b06">coffee.cpp</a>
+</li>
+<li>buildno
+: <a class="el" href="main_8cpp.html#ac70430026dcf56f46e5426e1d01d7e89">main.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>coffeeState
+: <a class="el" href="display_8cpp.html#a8f3437c133bc4d1be650cbbc5128f1a8">display.cpp</a>
+</li>
+<li>counter
+: <a class="el" href="timer_8cpp.html#a617a47c70795bcff659815ad0efd2266">timer.cpp</a>
+</li>
+<li>crcTable
+: <a class="el" href="crc_8cpp.html#aa0b98c402a809d26602bb9a693083720">crc.cpp</a>
+</li>
+<li>currentColor
+: <a class="el" href="stripe_8cpp.html#af149226ff674cac78ce47ce7261cb2dc">stripe.cpp</a>
+</li>
+<li>currentDim
+: <a class="el" href="stripe_8cpp.html#a5a820ae4564b095447dffb1f75fbb930">stripe.cpp</a>
+</li>
+<li>currentTransient
+: <a class="el" href="stripe_8cpp.html#a601572ab87622859faa74bd5d948e672">stripe.cpp</a>
+</li>
+<li>currentWhite
+: <a class="el" href="stripe_8cpp.html#aeb79ac3025329db68dba76aa2e830532">stripe.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>db
+: <a class="el" href="database_8cpp.html#ad6e663497d2c934364b3bcf07496b30b">database.cpp</a>
+</li>
+<li>displayLang
+: <a class="el" href="display_8cpp.html#ae110c5cc57190b02aaa0d543a80cdc20">display.cpp</a>
+</li>
+<li>displayTimer
+: <a class="el" href="display_8cpp.html#afebf5c16da7043af9cbd74ef9f489ea7">display.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>effectColor
+: <a class="el" href="stripe_8cpp.html#a8b61b922f1ae5a0c5854e3a318b74421">stripe.cpp</a>
+</li>
+<li>elapsedCnt
+: <a class="el" href="display_8cpp.html#a01cd2b69770b3c4cd7adc6e27d48c28a">display.cpp</a>
+</li>
+<li>endHeating
+: <a class="el" href="coffee_8cpp.html#a1aaa11435974ab87937d68b01ee71074">coffee.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>firstTimer
+: <a class="el" href="timer_8cpp.html#acb6f6b56b317d16d17fd2f6df17547c3">timer.cpp</a>
+</li>
+<li>flagIgnoreRlsInt0
+: <a class="el" href="hal_8cpp.html#a9f94cedad944b6df4483a76b0a4d2b0a">hal.cpp</a>
+</li>
+<li>flagIgnoreRlsInt1
+: <a class="el" href="hal_8cpp.html#a8980baab65c90a16ef8189ed5b1ab7fe">hal.cpp</a>
+</li>
+<li>flowcnt
+: <a class="el" href="hal_8cpp.html#ae5ae572f06dd4838027976f9ab3fdc62">hal.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>halInt0TimerHandler
+: <a class="el" href="hal_8cpp.html#ae52d2e251c46b1fa1f9369cf115dc5b2">hal.cpp</a>
+</li>
+<li>halInt1TimerHandler
+: <a class="el" href="hal_8cpp.html#af4bfd5892199d0ffad5ba51c44d4295e">hal.cpp</a>
+</li>
+<li>heatingTime
+: <a class="el" href="coffee_8cpp.html#ac88c1bf95effb2aeddc71b1c2cf9034b">coffee.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>i2cfd
+: <a class="el" href="stripe_8cpp.html#ad82fe3818283681900e35187390d4b84">stripe.cpp</a>
+</li>
+<li>Int0Time
+: <a class="el" href="hal_8cpp.html#a3aca866b54d36fe04db7c5ab8275de1e">hal.cpp</a>
+</li>
+<li>Int1Time
+: <a class="el" href="hal_8cpp.html#a343efe067e2fa2affd5f15ef3447aaa1">hal.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lastlog
+: <a class="el" href="logger_8cpp.html#a05db4cbb4a1c322f0adebb466081c99e">logger.cpp</a>
+</li>
+<li>lastTimer
+: <a class="el" href="timer_8cpp.html#a16ed619aa4eb3fda56a001d0d7a8975d">timer.cpp</a>
+</li>
+<li>lcd
+: <a class="el" href="display_8cpp.html#a9d1129916cfa4cbd7489638ce470c3a4">display.cpp</a>
+</li>
+<li>lcds
+: <a class="el" href="lcd_8cpp.html#a6e3994c5175d8609dee2cc8d3bcd66e9">lcd.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>mutex
+: <a class="el" href="global_8h.html#a4acff8232e4aec9cd5c6dc200ac55ef3">global.h</a>
+, <a class="el" href="main_8cpp.html#a4acff8232e4aec9cd5c6dc200ac55ef3">main.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>optCold
+: <a class="el" href="global_8h.html#a2a24ab7c0142e353c9ce9ca1ee1210bb">global.h</a>
+, <a class="el" href="main_8cpp.html#a2a24ab7c0142e353c9ce9ca1ee1210bb">main.cpp</a>
+</li>
+<li>optDate
+: <a class="el" href="main_8cpp.html#ae88c926fe2a10f736eb01b1d1e899a1c">main.cpp</a>
+, <a class="el" href="global_8h.html#ae88c926fe2a10f736eb01b1d1e899a1c">global.h</a>
+</li>
+<li>optPower
+: <a class="el" href="main_8cpp.html#a7bfeade3d2f19e8baecdcddd7f9162fa">main.cpp</a>
+, <a class="el" href="global_8h.html#a7bfeade3d2f19e8baecdcddd7f9162fa">global.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>sigValue
+: <a class="el" href="coffee_8cpp.html#a959eceab8fe67a33076aa42e877441a5">coffee.cpp</a>
+</li>
+<li>state
+: <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">coffee.cpp</a>
+</li>
+<li>stripeTimer
+: <a class="el" href="stripe_8cpp.html#abfdd13da6d6e41a44deb095184750c8e">stripe.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>thread
+: <a class="el" href="global_8h.html#a5e61240888e929e526f41e19b6c0bd46">global.h</a>
+, <a class="el" href="main_8cpp.html#ad1c21fd320f05c652f120ad167628c14">main.cpp</a>
+</li>
+<li>timercnt
+: <a class="el" href="timer_8cpp.html#a0f94d5829b547df53531ff4c3ec325c0">timer.cpp</a>
+</li>
+<li>timerScaler
+: <a class="el" href="display_8cpp.html#adf977b563dc485f1d1c4e601a9b31b68">display.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>verbose
+: <a class="el" href="global_8h.html#a0b2caeb4b6f130be43e5a2f0267dd453">global.h</a>
+, <a class="el" href="main_8cpp.html#a0b2caeb4b6f130be43e5a2f0267dd453">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 135 - 0
CoffeeCode/html/globals_w.html

@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li class="current"><a href="globals_w.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>WIDTH
+: <a class="el" href="crc_8cpp.html#a241aeeb764887ae5e3de58b98f04b16d">crc.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 695 - 0
CoffeeCode/html/hal_8cpp.html

@@ -0,0 +1,695 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: hal.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">hal.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;wiringPi.h&gt;</code><br />
+<code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;errno.h&gt;</code><br />
+<code>#include &lt;string.h&gt;</code><br />
+<code>#include &lt;signal.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="hal_8h_source.html">hal.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="global_8h_source.html">global.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="logger_8h_source.html">logger.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="timer_8h_source.html">timer.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:afd89c1650df524d95aef39b8bc38170d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#afd89c1650df524d95aef39b8bc38170d">halInit</a> (void)</td></tr>
+<tr class="memdesc:afd89c1650df524d95aef39b8bc38170d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes HAL.  <a href="#afd89c1650df524d95aef39b8bc38170d">More...</a><br /></td></tr>
+<tr class="separator:afd89c1650df524d95aef39b8bc38170d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33e09a3806bdcd5c711e557178335763"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a33e09a3806bdcd5c711e557178335763">halRelaisOn</a> (int relais)</td></tr>
+<tr class="memdesc:a33e09a3806bdcd5c711e557178335763"><td class="mdescLeft">&#160;</td><td class="mdescRight">Switches relais on.  <a href="#a33e09a3806bdcd5c711e557178335763">More...</a><br /></td></tr>
+<tr class="separator:a33e09a3806bdcd5c711e557178335763"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25c63f62c18555fc1b9b50bcd29f1c7d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a25c63f62c18555fc1b9b50bcd29f1c7d">halRelaisOff</a> (int relais)</td></tr>
+<tr class="memdesc:a25c63f62c18555fc1b9b50bcd29f1c7d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Switches relais off.  <a href="#a25c63f62c18555fc1b9b50bcd29f1c7d">More...</a><br /></td></tr>
+<tr class="separator:a25c63f62c18555fc1b9b50bcd29f1c7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b67b274703f0c42834f4b447d5c04a2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a9b67b274703f0c42834f4b447d5c04a2">halRelaisSet</a> (int relais, int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="memdesc:a9b67b274703f0c42834f4b447d5c04a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Switches relais to state.  <a href="#a9b67b274703f0c42834f4b447d5c04a2">More...</a><br /></td></tr>
+<tr class="separator:a9b67b274703f0c42834f4b447d5c04a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d22d01f1a6a6789f2816e27bbcb0504"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a1d22d01f1a6a6789f2816e27bbcb0504">halGetRelaisState</a> (int relais)</td></tr>
+<tr class="memdesc:a1d22d01f1a6a6789f2816e27bbcb0504"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the state of the relais relais Returns HIGH when Relais is ON.  <a href="#a1d22d01f1a6a6789f2816e27bbcb0504">More...</a><br /></td></tr>
+<tr class="separator:a1d22d01f1a6a6789f2816e27bbcb0504"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a597258a80a0bb18db649d01b0893c99f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a597258a80a0bb18db649d01b0893c99f">halInt0</a> (void)</td></tr>
+<tr class="memdesc:a597258a80a0bb18db649d01b0893c99f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt routine for Int0 (Top button)  <a href="#a597258a80a0bb18db649d01b0893c99f">More...</a><br /></td></tr>
+<tr class="separator:a597258a80a0bb18db649d01b0893c99f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa52d1bfb2ca68e499ad83d9b0d1ba275"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#aa52d1bfb2ca68e499ad83d9b0d1ba275">halInt0TimerHandler</a> (void)</td></tr>
+<tr class="separator:aa52d1bfb2ca68e499ad83d9b0d1ba275"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a603aaa9c0c3cfef8b185df5c7f4921c3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a603aaa9c0c3cfef8b185df5c7f4921c3">halInt1</a> (void)</td></tr>
+<tr class="memdesc:a603aaa9c0c3cfef8b185df5c7f4921c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt routine for Int1 (Bottom button)  <a href="#a603aaa9c0c3cfef8b185df5c7f4921c3">More...</a><br /></td></tr>
+<tr class="separator:a603aaa9c0c3cfef8b185df5c7f4921c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad56f6e1b04c236040717eadfd806c244"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#ad56f6e1b04c236040717eadfd806c244">halInt1TimerHandler</a> (void)</td></tr>
+<tr class="separator:ad56f6e1b04c236040717eadfd806c244"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ace9ace8c7e0012157569f446d4cb8c52"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#ace9ace8c7e0012157569f446d4cb8c52">halIntFlow</a> (void)</td></tr>
+<tr class="memdesc:ace9ace8c7e0012157569f446d4cb8c52"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt routine for the flow sensor It counts the edgdes and stores the value in flowcnt.  <a href="#ace9ace8c7e0012157569f446d4cb8c52">More...</a><br /></td></tr>
+<tr class="separator:ace9ace8c7e0012157569f446d4cb8c52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73067106de2bbcf98bcc3a06cbf3b000"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a73067106de2bbcf98bcc3a06cbf3b000">halIntPressure</a> (void)</td></tr>
+<tr class="memdesc:a73067106de2bbcf98bcc3a06cbf3b000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt routine for the pressure control.  <a href="#a73067106de2bbcf98bcc3a06cbf3b000">More...</a><br /></td></tr>
+<tr class="separator:a73067106de2bbcf98bcc3a06cbf3b000"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0622583e0c8453a6d6963964ad7e7122"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a0622583e0c8453a6d6963964ad7e7122">halIntProximity</a> (void)</td></tr>
+<tr class="memdesc:a0622583e0c8453a6d6963964ad7e7122"><td class="mdescLeft">&#160;</td><td class="mdescRight">Method to handle toggle of the proximity sensor.  <a href="#a0622583e0c8453a6d6963964ad7e7122">More...</a><br /></td></tr>
+<tr class="separator:a0622583e0c8453a6d6963964ad7e7122"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a0d534518ff19bf5b023dfe64d141db"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a1a0d534518ff19bf5b023dfe64d141db">halGetFlow</a> (void)</td></tr>
+<tr class="memdesc:a1a0d534518ff19bf5b023dfe64d141db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns total flow trough sensor in ml.  <a href="#a1a0d534518ff19bf5b023dfe64d141db">More...</a><br /></td></tr>
+<tr class="separator:a1a0d534518ff19bf5b023dfe64d141db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99d0fb6a80635b679cf4cd1fa90b483d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a99d0fb6a80635b679cf4cd1fa90b483d">halResetFlow</a> (void)</td></tr>
+<tr class="memdesc:a99d0fb6a80635b679cf4cd1fa90b483d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the Flow counter.  <a href="#a99d0fb6a80635b679cf4cd1fa90b483d">More...</a><br /></td></tr>
+<tr class="separator:a99d0fb6a80635b679cf4cd1fa90b483d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01f43f0666520e8d8af65e94fd82a5eb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a01f43f0666520e8d8af65e94fd82a5eb">halIsHeating</a> (void)</td></tr>
+<tr class="memdesc:a01f43f0666520e8d8af65e94fd82a5eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads the status of the Pressure Control.  <a href="#a01f43f0666520e8d8af65e94fd82a5eb">More...</a><br /></td></tr>
+<tr class="separator:a01f43f0666520e8d8af65e94fd82a5eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52c001b5136b02e19bd00282a137631d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a52c001b5136b02e19bd00282a137631d">halProxSensorCovered</a> (void)</td></tr>
+<tr class="memdesc:a52c001b5136b02e19bd00282a137631d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns status of the proximity switch.  <a href="#a52c001b5136b02e19bd00282a137631d">More...</a><br /></td></tr>
+<tr class="separator:a52c001b5136b02e19bd00282a137631d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5609d1b9c9b6bde787cdca47b3b0a4f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#af5609d1b9c9b6bde787cdca47b3b0a4f">halGetInt0</a> (void)</td></tr>
+<tr class="memdesc:af5609d1b9c9b6bde787cdca47b3b0a4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the top button Int0 (low active)  <a href="#af5609d1b9c9b6bde787cdca47b3b0a4f">More...</a><br /></td></tr>
+<tr class="separator:af5609d1b9c9b6bde787cdca47b3b0a4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe1e8d0d1237d0f128d50a5b146002a2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#afe1e8d0d1237d0f128d50a5b146002a2">halGetInt1</a> (void)</td></tr>
+<tr class="memdesc:afe1e8d0d1237d0f128d50a5b146002a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the bottom button Int1 (low active)  <a href="#afe1e8d0d1237d0f128d50a5b146002a2">More...</a><br /></td></tr>
+<tr class="separator:afe1e8d0d1237d0f128d50a5b146002a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a252f49661ac23a045bb0d9d20997dfa4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a252f49661ac23a045bb0d9d20997dfa4">halSendSignal</a> (int val)</td></tr>
+<tr class="memdesc:a252f49661ac23a045bb0d9d20997dfa4"><td class="mdescLeft">&#160;</td><td class="mdescRight">send Signal to coffee thread  <a href="#a252f49661ac23a045bb0d9d20997dfa4">More...</a><br /></td></tr>
+<tr class="separator:a252f49661ac23a045bb0d9d20997dfa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80e05d7e336073450da3168992d58754"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a80e05d7e336073450da3168992d58754">halMachineOn</a> (void)</td></tr>
+<tr class="memdesc:a80e05d7e336073450da3168992d58754"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn machine on.  <a href="#a80e05d7e336073450da3168992d58754">More...</a><br /></td></tr>
+<tr class="separator:a80e05d7e336073450da3168992d58754"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8cefe61db8caf1cbdbc35f680744a3eb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a8cefe61db8caf1cbdbc35f680744a3eb">halMachineOff</a> (void)</td></tr>
+<tr class="memdesc:a8cefe61db8caf1cbdbc35f680744a3eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn machine off.  <a href="#a8cefe61db8caf1cbdbc35f680744a3eb">More...</a><br /></td></tr>
+<tr class="separator:a8cefe61db8caf1cbdbc35f680744a3eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ae5ae572f06dd4838027976f9ab3fdc62"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#ae5ae572f06dd4838027976f9ab3fdc62">flowcnt</a> = 0</td></tr>
+<tr class="separator:ae5ae572f06dd4838027976f9ab3fdc62"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3aca866b54d36fe04db7c5ab8275de1e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a3aca866b54d36fe04db7c5ab8275de1e">Int0Time</a></td></tr>
+<tr class="separator:a3aca866b54d36fe04db7c5ab8275de1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a343efe067e2fa2affd5f15ef3447aaa1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a343efe067e2fa2affd5f15ef3447aaa1">Int1Time</a></td></tr>
+<tr class="separator:a343efe067e2fa2affd5f15ef3447aaa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9f94cedad944b6df4483a76b0a4d2b0a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a9f94cedad944b6df4483a76b0a4d2b0a">flagIgnoreRlsInt0</a></td></tr>
+<tr class="separator:a9f94cedad944b6df4483a76b0a4d2b0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8980baab65c90a16ef8189ed5b1ab7fe"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#a8980baab65c90a16ef8189ed5b1ab7fe">flagIgnoreRlsInt1</a></td></tr>
+<tr class="separator:a8980baab65c90a16ef8189ed5b1ab7fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae52d2e251c46b1fa1f9369cf115dc5b2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtimer.html">timer</a> Int0Timer &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#ae52d2e251c46b1fa1f9369cf115dc5b2">halInt0TimerHandler</a></td></tr>
+<tr class="separator:ae52d2e251c46b1fa1f9369cf115dc5b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4bfd5892199d0ffad5ba51c44d4295e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtimer.html">timer</a> Int1Timer &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8cpp.html#af4bfd5892199d0ffad5ba51c44d4295e">halInt1TimerHandler</a></td></tr>
+<tr class="separator:af4bfd5892199d0ffad5ba51c44d4295e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1a0d534518ff19bf5b023dfe64d141db"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float halGetFlow </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns total flow trough sensor in ml. </p>
+
+</div>
+</div>
+<a class="anchor" id="af5609d1b9c9b6bde787cdca47b3b0a4f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int halGetInt0 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the value of the top button Int0 (low active) </p>
+<dl class="section return"><dt>Returns</dt><dd>LOW or HIGH </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="afe1e8d0d1237d0f128d50a5b146002a2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int halGetInt1 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the value of the bottom button Int1 (low active) </p>
+<dl class="section return"><dt>Returns</dt><dd>LOW or HIGH </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1d22d01f1a6a6789f2816e27bbcb0504"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int halGetRelaisState </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>relais</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the state of the relais relais Returns HIGH when Relais is ON. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">relais</td><td>Relais ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="afd89c1650df524d95aef39b8bc38170d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initializes HAL. </p>
+
+</div>
+</div>
+<a class="anchor" id="a597258a80a0bb18db649d01b0893c99f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInt0 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Interrupt routine for Int0 (Top button) </p>
+
+</div>
+</div>
+<a class="anchor" id="aa52d1bfb2ca68e499ad83d9b0d1ba275"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInt0TimerHandler </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a603aaa9c0c3cfef8b185df5c7f4921c3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInt1 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Interrupt routine for Int1 (Bottom button) </p>
+
+</div>
+</div>
+<a class="anchor" id="ad56f6e1b04c236040717eadfd806c244"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInt1TimerHandler </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ace9ace8c7e0012157569f446d4cb8c52"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halIntFlow </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Interrupt routine for the flow sensor It counts the edgdes and stores the value in flowcnt. </p>
+
+</div>
+</div>
+<a class="anchor" id="a73067106de2bbcf98bcc3a06cbf3b000"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halIntPressure </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Interrupt routine for the pressure control. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0622583e0c8453a6d6963964ad7e7122"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halIntProximity </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Method to handle toggle of the proximity sensor. </p>
+
+</div>
+</div>
+<a class="anchor" id="a01f43f0666520e8d8af65e94fd82a5eb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool halIsHeating </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Reads the status of the Pressure Control. </p>
+<dl class="section return"><dt>Returns</dt><dd>0 for closed Pressure Control(heating) and 1 for open </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8cefe61db8caf1cbdbc35f680744a3eb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halMachineOff </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Turn machine off. </p>
+
+</div>
+</div>
+<a class="anchor" id="a80e05d7e336073450da3168992d58754"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halMachineOn </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Turn machine on. </p>
+
+</div>
+</div>
+<a class="anchor" id="a52c001b5136b02e19bd00282a137631d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool halProxSensorCovered </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns status of the proximity switch. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if the proximity switch is covered and 0 if uncovered </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a25c63f62c18555fc1b9b50bcd29f1c7d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halRelaisOff </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>relais</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Switches relais off. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">relais</td><td>Relais ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a33e09a3806bdcd5c711e557178335763"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halRelaisOn </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>relais</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Switches relais on. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">relais</td><td>Relais ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a9b67b274703f0c42834f4b447d5c04a2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halRelaisSet </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>relais</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Switches relais to state. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">relais</td><td>Relais ID </td></tr>
+    <tr><td class="paramname">state</td><td>LOW(0) or HIGH(1) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a99d0fb6a80635b679cf4cd1fa90b483d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halResetFlow </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Resets the Flow counter. </p>
+
+</div>
+</div>
+<a class="anchor" id="a252f49661ac23a045bb0d9d20997dfa4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halSendSignal </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>val</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>send Signal to coffee thread </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">val</td><td>Integer value assigned to signal </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a9f94cedad944b6df4483a76b0a4d2b0a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool flagIgnoreRlsInt0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8980baab65c90a16ef8189ed5b1ab7fe"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool flagIgnoreRlsInt1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae5ae572f06dd4838027976f9ab3fdc62"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int flowcnt = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae52d2e251c46b1fa1f9369cf115dc5b2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtimer.html">timer</a> Int0Timer&amp; halInt0TimerHandler</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af4bfd5892199d0ffad5ba51c44d4295e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtimer.html">timer</a> Int1Timer&amp; halInt1TimerHandler</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3aca866b54d36fe04db7c5ab8275de1e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int Int0Time</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a343efe067e2fa2affd5f15ef3447aaa1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int Int1Time</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 791 - 0
CoffeeCode/html/hal_8h.html

@@ -0,0 +1,791 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: hal.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">hal.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="hal_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a9b57e326c17e793a2c70b909256734ab"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a9b57e326c17e793a2c70b909256734ab">RELAIS_HEAT</a>&#160;&#160;&#160;29</td></tr>
+<tr class="separator:a9b57e326c17e793a2c70b909256734ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9723c5da9e57e2b3a1c3ec7b635cee53"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a9723c5da9e57e2b3a1c3ec7b635cee53">RELAIS_PUMP</a>&#160;&#160;&#160;25</td></tr>
+<tr class="separator:a9723c5da9e57e2b3a1c3ec7b635cee53"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56489df9a2d1844419f2b0c104516657"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a56489df9a2d1844419f2b0c104516657">RELAIS_POWER</a>&#160;&#160;&#160;28</td></tr>
+<tr class="separator:a56489df9a2d1844419f2b0c104516657"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95d660a5e62442d33d7cc9d93ffb57b9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a95d660a5e62442d33d7cc9d93ffb57b9">PIN_PRESSURE_CTRL</a>&#160;&#160;&#160;7</td></tr>
+<tr class="separator:a95d660a5e62442d33d7cc9d93ffb57b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b6bff93c300c970e912b45284fa1d7d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a4b6bff93c300c970e912b45284fa1d7d">PIN_PROXIMITY_SENSOR</a>&#160;&#160;&#160;6</td></tr>
+<tr class="separator:a4b6bff93c300c970e912b45284fa1d7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acab09879ef6267b9482f7627c82346bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#acab09879ef6267b9482f7627c82346bc">PIN_INT0</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:acab09879ef6267b9482f7627c82346bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a987362f14d4ff58584140f09c24a4308"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a987362f14d4ff58584140f09c24a4308">PIN_INT1</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a987362f14d4ff58584140f09c24a4308"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b7f077d2a81a295f0f9b0fbf09356ba"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a1b7f077d2a81a295f0f9b0fbf09356ba">PIN_FLOW</a>&#160;&#160;&#160;3</td></tr>
+<tr class="separator:a1b7f077d2a81a295f0f9b0fbf09356ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a957d80982673bb087a5d29380720f59d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a957d80982673bb087a5d29380720f59d">FLOW_ML_PULSE</a>&#160;&#160;&#160;(1000.0/990)</td></tr>
+<tr class="separator:a957d80982673bb087a5d29380720f59d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39a999d4c82a1021ee63072abe804946"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a39a999d4c82a1021ee63072abe804946">TIME_BUTTONLONGPRESS</a>&#160;&#160;&#160;3</td></tr>
+<tr class="separator:a39a999d4c82a1021ee63072abe804946"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:aa51a8c9f6b926aa9e9c5dd38249d3f68"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68">HalSig</a> { <br />
+&#160;&#160;<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f6585385aaee8e6a336fb31e8713751">SigInt0Psh</a> = 1, 
+<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae70d75d9c016f72d315ce0f375425ae3">SigInt0Rls</a> = 2, 
+<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae12ff99a3219da47e0c3c2ebb690906e">SigInt0RlsLong</a> = 3, 
+<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a5fd8970919f375d9f3baaaa053865ce2">SigInt1Psh</a> = 4, 
+<br />
+&#160;&#160;<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68aa85940fc659570c5b7ec2d8e0ed3eeae">SigInt1Rls</a> = 5, 
+<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a1a7c6bd95f0ccdf91bc363cc8a638b73">SigInt1RlsLong</a> = 6, 
+<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68abdd48e173224114754f253d764540ec9">SigPressCls</a> = 7, 
+<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a683f7a77d5c63e835b2a72ab1c540fe4">SigPressOpn</a> = 8, 
+<br />
+&#160;&#160;<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a7f18f13ecf372adaf681e706ad051fd3">SigProxOpn</a> = 9, 
+<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ac53b2d92b9e3b1652f173e29db5b523d">SigProxCvrd</a> = 10, 
+<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f8316fcd4daf8fdee99ad3414c00857">SigBrewOn</a> = 11, 
+<a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a6d3fe49429343ea09a007c2236db9382">SigBrewOff</a> = 12
+<br />
+ }<tr class="separator:aa51a8c9f6b926aa9e9c5dd38249d3f68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:afd89c1650df524d95aef39b8bc38170d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#afd89c1650df524d95aef39b8bc38170d">halInit</a> (void)</td></tr>
+<tr class="memdesc:afd89c1650df524d95aef39b8bc38170d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes HAL.  <a href="#afd89c1650df524d95aef39b8bc38170d">More...</a><br /></td></tr>
+<tr class="separator:afd89c1650df524d95aef39b8bc38170d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33e09a3806bdcd5c711e557178335763"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a33e09a3806bdcd5c711e557178335763">halRelaisOn</a> (int relais)</td></tr>
+<tr class="memdesc:a33e09a3806bdcd5c711e557178335763"><td class="mdescLeft">&#160;</td><td class="mdescRight">Switches relais on.  <a href="#a33e09a3806bdcd5c711e557178335763">More...</a><br /></td></tr>
+<tr class="separator:a33e09a3806bdcd5c711e557178335763"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25c63f62c18555fc1b9b50bcd29f1c7d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a25c63f62c18555fc1b9b50bcd29f1c7d">halRelaisOff</a> (int relais)</td></tr>
+<tr class="memdesc:a25c63f62c18555fc1b9b50bcd29f1c7d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Switches relais off.  <a href="#a25c63f62c18555fc1b9b50bcd29f1c7d">More...</a><br /></td></tr>
+<tr class="separator:a25c63f62c18555fc1b9b50bcd29f1c7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b67b274703f0c42834f4b447d5c04a2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a9b67b274703f0c42834f4b447d5c04a2">halRelaisSet</a> (int relais, int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="memdesc:a9b67b274703f0c42834f4b447d5c04a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Switches relais to state.  <a href="#a9b67b274703f0c42834f4b447d5c04a2">More...</a><br /></td></tr>
+<tr class="separator:a9b67b274703f0c42834f4b447d5c04a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d22d01f1a6a6789f2816e27bbcb0504"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a1d22d01f1a6a6789f2816e27bbcb0504">halGetRelaisState</a> (int relais)</td></tr>
+<tr class="memdesc:a1d22d01f1a6a6789f2816e27bbcb0504"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the state of the relais relais Returns HIGH when Relais is ON.  <a href="#a1d22d01f1a6a6789f2816e27bbcb0504">More...</a><br /></td></tr>
+<tr class="separator:a1d22d01f1a6a6789f2816e27bbcb0504"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a597258a80a0bb18db649d01b0893c99f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a597258a80a0bb18db649d01b0893c99f">halInt0</a> (void)</td></tr>
+<tr class="memdesc:a597258a80a0bb18db649d01b0893c99f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt routine for Int0 (Top button)  <a href="#a597258a80a0bb18db649d01b0893c99f">More...</a><br /></td></tr>
+<tr class="separator:a597258a80a0bb18db649d01b0893c99f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a603aaa9c0c3cfef8b185df5c7f4921c3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a603aaa9c0c3cfef8b185df5c7f4921c3">halInt1</a> (void)</td></tr>
+<tr class="memdesc:a603aaa9c0c3cfef8b185df5c7f4921c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt routine for Int1 (Bottom button)  <a href="#a603aaa9c0c3cfef8b185df5c7f4921c3">More...</a><br /></td></tr>
+<tr class="separator:a603aaa9c0c3cfef8b185df5c7f4921c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ace9ace8c7e0012157569f446d4cb8c52"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#ace9ace8c7e0012157569f446d4cb8c52">halIntFlow</a> (void)</td></tr>
+<tr class="memdesc:ace9ace8c7e0012157569f446d4cb8c52"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt routine for the flow sensor It counts the edgdes and stores the value in flowcnt.  <a href="#ace9ace8c7e0012157569f446d4cb8c52">More...</a><br /></td></tr>
+<tr class="separator:ace9ace8c7e0012157569f446d4cb8c52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73067106de2bbcf98bcc3a06cbf3b000"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a73067106de2bbcf98bcc3a06cbf3b000">halIntPressure</a> (void)</td></tr>
+<tr class="memdesc:a73067106de2bbcf98bcc3a06cbf3b000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt routine for the pressure control.  <a href="#a73067106de2bbcf98bcc3a06cbf3b000">More...</a><br /></td></tr>
+<tr class="separator:a73067106de2bbcf98bcc3a06cbf3b000"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0622583e0c8453a6d6963964ad7e7122"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a0622583e0c8453a6d6963964ad7e7122">halIntProximity</a> (void)</td></tr>
+<tr class="memdesc:a0622583e0c8453a6d6963964ad7e7122"><td class="mdescLeft">&#160;</td><td class="mdescRight">Method to handle toggle of the proximity sensor.  <a href="#a0622583e0c8453a6d6963964ad7e7122">More...</a><br /></td></tr>
+<tr class="separator:a0622583e0c8453a6d6963964ad7e7122"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a0d534518ff19bf5b023dfe64d141db"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a1a0d534518ff19bf5b023dfe64d141db">halGetFlow</a> (void)</td></tr>
+<tr class="memdesc:a1a0d534518ff19bf5b023dfe64d141db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns total flow trough sensor in ml.  <a href="#a1a0d534518ff19bf5b023dfe64d141db">More...</a><br /></td></tr>
+<tr class="separator:a1a0d534518ff19bf5b023dfe64d141db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99d0fb6a80635b679cf4cd1fa90b483d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a99d0fb6a80635b679cf4cd1fa90b483d">halResetFlow</a> (void)</td></tr>
+<tr class="memdesc:a99d0fb6a80635b679cf4cd1fa90b483d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the Flow counter.  <a href="#a99d0fb6a80635b679cf4cd1fa90b483d">More...</a><br /></td></tr>
+<tr class="separator:a99d0fb6a80635b679cf4cd1fa90b483d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01f43f0666520e8d8af65e94fd82a5eb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a01f43f0666520e8d8af65e94fd82a5eb">halIsHeating</a> (void)</td></tr>
+<tr class="memdesc:a01f43f0666520e8d8af65e94fd82a5eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads the status of the Pressure Control.  <a href="#a01f43f0666520e8d8af65e94fd82a5eb">More...</a><br /></td></tr>
+<tr class="separator:a01f43f0666520e8d8af65e94fd82a5eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52c001b5136b02e19bd00282a137631d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a52c001b5136b02e19bd00282a137631d">halProxSensorCovered</a> (void)</td></tr>
+<tr class="memdesc:a52c001b5136b02e19bd00282a137631d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns status of the proximity switch.  <a href="#a52c001b5136b02e19bd00282a137631d">More...</a><br /></td></tr>
+<tr class="separator:a52c001b5136b02e19bd00282a137631d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5609d1b9c9b6bde787cdca47b3b0a4f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#af5609d1b9c9b6bde787cdca47b3b0a4f">halGetInt0</a> (void)</td></tr>
+<tr class="memdesc:af5609d1b9c9b6bde787cdca47b3b0a4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the top button Int0 (low active)  <a href="#af5609d1b9c9b6bde787cdca47b3b0a4f">More...</a><br /></td></tr>
+<tr class="separator:af5609d1b9c9b6bde787cdca47b3b0a4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe1e8d0d1237d0f128d50a5b146002a2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#afe1e8d0d1237d0f128d50a5b146002a2">halGetInt1</a> (void)</td></tr>
+<tr class="memdesc:afe1e8d0d1237d0f128d50a5b146002a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the bottom button Int1 (low active)  <a href="#afe1e8d0d1237d0f128d50a5b146002a2">More...</a><br /></td></tr>
+<tr class="separator:afe1e8d0d1237d0f128d50a5b146002a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4fa1c41f2dd3c24e13feaa6be70ad426"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a4fa1c41f2dd3c24e13feaa6be70ad426">halSendSignal</a> (int value)</td></tr>
+<tr class="memdesc:a4fa1c41f2dd3c24e13feaa6be70ad426"><td class="mdescLeft">&#160;</td><td class="mdescRight">send Signal to coffee thread  <a href="#a4fa1c41f2dd3c24e13feaa6be70ad426">More...</a><br /></td></tr>
+<tr class="separator:a4fa1c41f2dd3c24e13feaa6be70ad426"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80e05d7e336073450da3168992d58754"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a80e05d7e336073450da3168992d58754">halMachineOn</a> (void)</td></tr>
+<tr class="memdesc:a80e05d7e336073450da3168992d58754"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn machine on.  <a href="#a80e05d7e336073450da3168992d58754">More...</a><br /></td></tr>
+<tr class="separator:a80e05d7e336073450da3168992d58754"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8cefe61db8caf1cbdbc35f680744a3eb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#a8cefe61db8caf1cbdbc35f680744a3eb">halMachineOff</a> (void)</td></tr>
+<tr class="memdesc:a8cefe61db8caf1cbdbc35f680744a3eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn machine off.  <a href="#a8cefe61db8caf1cbdbc35f680744a3eb">More...</a><br /></td></tr>
+<tr class="separator:a8cefe61db8caf1cbdbc35f680744a3eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa52d1bfb2ca68e499ad83d9b0d1ba275"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#aa52d1bfb2ca68e499ad83d9b0d1ba275">halInt0TimerHandler</a> (void)</td></tr>
+<tr class="separator:aa52d1bfb2ca68e499ad83d9b0d1ba275"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad56f6e1b04c236040717eadfd806c244"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hal_8h.html#ad56f6e1b04c236040717eadfd806c244">halInt1TimerHandler</a> (void)</td></tr>
+<tr class="separator:ad56f6e1b04c236040717eadfd806c244"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a957d80982673bb087a5d29380720f59d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FLOW_ML_PULSE&#160;&#160;&#160;(1000.0/990)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1b7f077d2a81a295f0f9b0fbf09356ba"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PIN_FLOW&#160;&#160;&#160;3</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acab09879ef6267b9482f7627c82346bc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PIN_INT0&#160;&#160;&#160;2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a987362f14d4ff58584140f09c24a4308"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PIN_INT1&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a95d660a5e62442d33d7cc9d93ffb57b9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PIN_PRESSURE_CTRL&#160;&#160;&#160;7</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4b6bff93c300c970e912b45284fa1d7d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PIN_PROXIMITY_SENSOR&#160;&#160;&#160;6</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9b57e326c17e793a2c70b909256734ab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define RELAIS_HEAT&#160;&#160;&#160;29</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a56489df9a2d1844419f2b0c104516657"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define RELAIS_POWER&#160;&#160;&#160;28</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9723c5da9e57e2b3a1c3ec7b635cee53"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define RELAIS_PUMP&#160;&#160;&#160;25</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a39a999d4c82a1021ee63072abe804946"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TIME_BUTTONLONGPRESS&#160;&#160;&#160;3</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68">HalSig</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68a4f6585385aaee8e6a336fb31e8713751"></a>SigInt0Psh&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68ae70d75d9c016f72d315ce0f375425ae3"></a>SigInt0Rls&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68ae12ff99a3219da47e0c3c2ebb690906e"></a>SigInt0RlsLong&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68a5fd8970919f375d9f3baaaa053865ce2"></a>SigInt1Psh&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68aa85940fc659570c5b7ec2d8e0ed3eeae"></a>SigInt1Rls&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68a1a7c6bd95f0ccdf91bc363cc8a638b73"></a>SigInt1RlsLong&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68abdd48e173224114754f253d764540ec9"></a>SigPressCls&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68a683f7a77d5c63e835b2a72ab1c540fe4"></a>SigPressOpn&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68a7f18f13ecf372adaf681e706ad051fd3"></a>SigProxOpn&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68ac53b2d92b9e3b1652f173e29db5b523d"></a>SigProxCvrd&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68a4f8316fcd4daf8fdee99ad3414c00857"></a>SigBrewOn&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aa51a8c9f6b926aa9e9c5dd38249d3f68a6d3fe49429343ea09a007c2236db9382"></a>SigBrewOff&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1a0d534518ff19bf5b023dfe64d141db"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float halGetFlow </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns total flow trough sensor in ml. </p>
+
+</div>
+</div>
+<a class="anchor" id="af5609d1b9c9b6bde787cdca47b3b0a4f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int halGetInt0 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the value of the top button Int0 (low active) </p>
+<dl class="section return"><dt>Returns</dt><dd>LOW or HIGH </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="afe1e8d0d1237d0f128d50a5b146002a2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int halGetInt1 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the value of the bottom button Int1 (low active) </p>
+<dl class="section return"><dt>Returns</dt><dd>LOW or HIGH </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1d22d01f1a6a6789f2816e27bbcb0504"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int halGetRelaisState </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>relais</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the state of the relais relais Returns HIGH when Relais is ON. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">relais</td><td>Relais ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="afd89c1650df524d95aef39b8bc38170d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initializes HAL. </p>
+
+</div>
+</div>
+<a class="anchor" id="a597258a80a0bb18db649d01b0893c99f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInt0 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Interrupt routine for Int0 (Top button) </p>
+
+</div>
+</div>
+<a class="anchor" id="aa52d1bfb2ca68e499ad83d9b0d1ba275"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInt0TimerHandler </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a603aaa9c0c3cfef8b185df5c7f4921c3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInt1 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Interrupt routine for Int1 (Bottom button) </p>
+
+</div>
+</div>
+<a class="anchor" id="ad56f6e1b04c236040717eadfd806c244"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halInt1TimerHandler </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ace9ace8c7e0012157569f446d4cb8c52"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halIntFlow </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Interrupt routine for the flow sensor It counts the edgdes and stores the value in flowcnt. </p>
+
+</div>
+</div>
+<a class="anchor" id="a73067106de2bbcf98bcc3a06cbf3b000"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halIntPressure </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Interrupt routine for the pressure control. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0622583e0c8453a6d6963964ad7e7122"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halIntProximity </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Method to handle toggle of the proximity sensor. </p>
+
+</div>
+</div>
+<a class="anchor" id="a01f43f0666520e8d8af65e94fd82a5eb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool halIsHeating </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Reads the status of the Pressure Control. </p>
+<dl class="section return"><dt>Returns</dt><dd>0 for closed Pressure Control(heating) and 1 for open </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8cefe61db8caf1cbdbc35f680744a3eb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halMachineOff </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Turn machine off. </p>
+
+</div>
+</div>
+<a class="anchor" id="a80e05d7e336073450da3168992d58754"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halMachineOn </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Turn machine on. </p>
+
+</div>
+</div>
+<a class="anchor" id="a52c001b5136b02e19bd00282a137631d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool halProxSensorCovered </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns status of the proximity switch. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if the proximity switch is covered and 0 if uncovered </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a25c63f62c18555fc1b9b50bcd29f1c7d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halRelaisOff </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>relais</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Switches relais off. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">relais</td><td>Relais ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a33e09a3806bdcd5c711e557178335763"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halRelaisOn </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>relais</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Switches relais on. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">relais</td><td>Relais ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a9b67b274703f0c42834f4b447d5c04a2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halRelaisSet </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>relais</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Switches relais to state. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">relais</td><td>Relais ID </td></tr>
+    <tr><td class="paramname">state</td><td>LOW(0) or HIGH(1) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a99d0fb6a80635b679cf4cd1fa90b483d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halResetFlow </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Resets the Flow counter. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4fa1c41f2dd3c24e13feaa6be70ad426"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void halSendSignal </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>val</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>send Signal to coffee thread </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">val</td><td>Integer value assigned to signal </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 208 - 0
CoffeeCode/html/hal_8h_source.html

@@ -0,0 +1,208 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: hal.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">hal.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="hal_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * hal.h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *  Created on: Aug 3, 2016</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *      Author: sebastian</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#ifndef HAL_H_</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#define HAL_H_</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"><a class="line" href="hal_8h.html#a9b57e326c17e793a2c70b909256734ab">   11</a></span>&#160;<span class="preprocessor">#define RELAIS_HEAT     29</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"><a class="line" href="hal_8h.html#a9723c5da9e57e2b3a1c3ec7b635cee53">   12</a></span>&#160;<span class="preprocessor">#define RELAIS_PUMP     25</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="hal_8h.html#a56489df9a2d1844419f2b0c104516657">   13</a></span>&#160;<span class="preprocessor">#define RELAIS_POWER    28</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="hal_8h.html#a95d660a5e62442d33d7cc9d93ffb57b9">   14</a></span>&#160;<span class="preprocessor">#define PIN_PRESSURE_CTRL   7</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="hal_8h.html#a4b6bff93c300c970e912b45284fa1d7d">   15</a></span>&#160;<span class="preprocessor">#define PIN_PROXIMITY_SENSOR    6</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="hal_8h.html#acab09879ef6267b9482f7627c82346bc">   16</a></span>&#160;<span class="preprocessor">#define PIN_INT0        2 // Top button</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="hal_8h.html#a987362f14d4ff58584140f09c24a4308">   17</a></span>&#160;<span class="preprocessor">#define PIN_INT1        0 // Bottom button</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="hal_8h.html#a1b7f077d2a81a295f0f9b0fbf09356ba">   18</a></span>&#160;<span class="preprocessor">#define PIN_FLOW        3 // Flow sensor</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="hal_8h.html#a957d80982673bb087a5d29380720f59d">   19</a></span>&#160;<span class="preprocessor">#define FLOW_ML_PULSE   (1000.0/990) // Flow sensor: volume (ml) per pulse</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="hal_8h.html#a39a999d4c82a1021ee63072abe804946">   21</a></span>&#160;<span class="preprocessor">#define TIME_BUTTONLONGPRESS    3   //Time in s until a Signal for a long pressed button is sent</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> * Explanation for the signal levels</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * SigInt_Psh           Button is pushed</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> * SigInt_Rls       Button is released</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> * SigInt_RlsLong   Button is pressed for more than TIME_BUTTONLONGPRESS seconds</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> * SigPressCls      Pressure control is closed, System is heating</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> * SigPressOpn      Pressure control is open, heating is off</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> * SigProxOpn       Proximity Sensor is uncovered</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> * SigProxCvrd  Proximity Sensor is covered</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> * Functions of the buttons, the letter in brackets defines if the event is triggered</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> * on push(P), release(R) or long pressing(RLong) of the button</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> * TOP Button: Turn machine on(R), start brewing(P),</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment"> * BOTTOM button: Stop brewing immediately(P), Turn machine off(RLong),</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68">   40</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68">HalSig</a> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f6585385aaee8e6a336fb31e8713751">   41</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f6585385aaee8e6a336fb31e8713751">SigInt0Psh</a> = 1,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae70d75d9c016f72d315ce0f375425ae3">   42</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae70d75d9c016f72d315ce0f375425ae3">SigInt0Rls</a> = 2,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae12ff99a3219da47e0c3c2ebb690906e">   43</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae12ff99a3219da47e0c3c2ebb690906e">SigInt0RlsLong</a> = 3,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a5fd8970919f375d9f3baaaa053865ce2">   44</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a5fd8970919f375d9f3baaaa053865ce2">SigInt1Psh</a> = 4,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68aa85940fc659570c5b7ec2d8e0ed3eeae">   45</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68aa85940fc659570c5b7ec2d8e0ed3eeae">SigInt1Rls</a> = 5,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a1a7c6bd95f0ccdf91bc363cc8a638b73">   46</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a1a7c6bd95f0ccdf91bc363cc8a638b73">SigInt1RlsLong</a> = 6,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68abdd48e173224114754f253d764540ec9">   47</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68abdd48e173224114754f253d764540ec9">SigPressCls</a> = 7,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a683f7a77d5c63e835b2a72ab1c540fe4">   48</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a683f7a77d5c63e835b2a72ab1c540fe4">SigPressOpn</a> = 8,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a7f18f13ecf372adaf681e706ad051fd3">   49</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a7f18f13ecf372adaf681e706ad051fd3">SigProxOpn</a> = 9,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ac53b2d92b9e3b1652f173e29db5b523d">   50</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ac53b2d92b9e3b1652f173e29db5b523d">SigProxCvrd</a> = 10,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f8316fcd4daf8fdee99ad3414c00857">   51</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f8316fcd4daf8fdee99ad3414c00857">SigBrewOn</a> = 11,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a6d3fe49429343ea09a007c2236db9382">   52</a></span>&#160;    <a class="code" href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a6d3fe49429343ea09a007c2236db9382">SigBrewOff</a> = 12</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;};</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#afd89c1650df524d95aef39b8bc38170d">halInit</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a33e09a3806bdcd5c711e557178335763">halRelaisOn</a>(<span class="keywordtype">int</span> relais);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a25c63f62c18555fc1b9b50bcd29f1c7d">halRelaisOff</a>(<span class="keywordtype">int</span> relais);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a9b67b274703f0c42834f4b447d5c04a2">halRelaisSet</a>(<span class="keywordtype">int</span> relais, <span class="keywordtype">int</span> <a class="code" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="keywordtype">int</span> <a class="code" href="hal_8h.html#a1d22d01f1a6a6789f2816e27bbcb0504">halGetRelaisState</a>(<span class="keywordtype">int</span> relais);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a597258a80a0bb18db649d01b0893c99f">halInt0</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a603aaa9c0c3cfef8b185df5c7f4921c3">halInt1</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#ace9ace8c7e0012157569f446d4cb8c52">halIntFlow</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a73067106de2bbcf98bcc3a06cbf3b000">halIntPressure</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a0622583e0c8453a6d6963964ad7e7122">halIntProximity</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="keywordtype">float</span> <a class="code" href="hal_8h.html#a1a0d534518ff19bf5b023dfe64d141db">halGetFlow</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a99d0fb6a80635b679cf4cd1fa90b483d">halResetFlow</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="hal_8h.html#a01f43f0666520e8d8af65e94fd82a5eb">halIsHeating</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="hal_8h.html#a52c001b5136b02e19bd00282a137631d">halProxSensorCovered</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="keywordtype">int</span> <a class="code" href="hal_8h.html#af5609d1b9c9b6bde787cdca47b3b0a4f">halGetInt0</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="keywordtype">int</span> <a class="code" href="hal_8h.html#afe1e8d0d1237d0f128d50a5b146002a2">halGetInt1</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a4fa1c41f2dd3c24e13feaa6be70ad426">halSendSignal</a>(<span class="keywordtype">int</span> value);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a80e05d7e336073450da3168992d58754">halMachineOn</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#a8cefe61db8caf1cbdbc35f680744a3eb">halMachineOff</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#aa52d1bfb2ca68e499ad83d9b0d1ba275">halInt0TimerHandler</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="keywordtype">void</span> <a class="code" href="hal_8h.html#ad56f6e1b04c236040717eadfd806c244">halInt1TimerHandler</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HAL_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="hal_8h_html_a33e09a3806bdcd5c711e557178335763"><div class="ttname"><a href="hal_8h.html#a33e09a3806bdcd5c711e557178335763">halRelaisOn</a></div><div class="ttdeci">void halRelaisOn(int relais)</div><div class="ttdoc">Switches relais on. </div><div class="ttdef"><b>Definition:</b> hal.cpp:80</div></div>
+<div class="ttc" id="hal_8h_html_a99d0fb6a80635b679cf4cd1fa90b483d"><div class="ttname"><a href="hal_8h.html#a99d0fb6a80635b679cf4cd1fa90b483d">halResetFlow</a></div><div class="ttdeci">void halResetFlow(void)</div><div class="ttdoc">Resets the Flow counter. </div><div class="ttdef"><b>Definition:</b> hal.cpp:240</div></div>
+<div class="ttc" id="hal_8h_html_a9b67b274703f0c42834f4b447d5c04a2"><div class="ttname"><a href="hal_8h.html#a9b67b274703f0c42834f4b447d5c04a2">halRelaisSet</a></div><div class="ttdeci">void halRelaisSet(int relais, int state)</div><div class="ttdoc">Switches relais to state. </div><div class="ttdef"><b>Definition:</b> hal.cpp:97</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68ae12ff99a3219da47e0c3c2ebb690906e"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae12ff99a3219da47e0c3c2ebb690906e">SigInt0RlsLong</a></div><div class="ttdef"><b>Definition:</b> hal.h:43</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68a1a7c6bd95f0ccdf91bc363cc8a638b73"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a1a7c6bd95f0ccdf91bc363cc8a638b73">SigInt1RlsLong</a></div><div class="ttdef"><b>Definition:</b> hal.h:46</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68a5fd8970919f375d9f3baaaa053865ce2"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a5fd8970919f375d9f3baaaa053865ce2">SigInt1Psh</a></div><div class="ttdef"><b>Definition:</b> hal.h:44</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68aa85940fc659570c5b7ec2d8e0ed3eeae"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68aa85940fc659570c5b7ec2d8e0ed3eeae">SigInt1Rls</a></div><div class="ttdef"><b>Definition:</b> hal.h:45</div></div>
+<div class="ttc" id="hal_8h_html_a52c001b5136b02e19bd00282a137631d"><div class="ttname"><a href="hal_8h.html#a52c001b5136b02e19bd00282a137631d">halProxSensorCovered</a></div><div class="ttdeci">bool halProxSensorCovered(void)</div><div class="ttdoc">Returns status of the proximity switch. </div><div class="ttdef"><b>Definition:</b> hal.cpp:260</div></div>
+<div class="ttc" id="hal_8h_html_a8cefe61db8caf1cbdbc35f680744a3eb"><div class="ttname"><a href="hal_8h.html#a8cefe61db8caf1cbdbc35f680744a3eb">halMachineOff</a></div><div class="ttdeci">void halMachineOff(void)</div><div class="ttdoc">Turn machine off. </div><div class="ttdef"><b>Definition:</b> hal.cpp:314</div></div>
+<div class="ttc" id="hal_8h_html_a25c63f62c18555fc1b9b50bcd29f1c7d"><div class="ttname"><a href="hal_8h.html#a25c63f62c18555fc1b9b50bcd29f1c7d">halRelaisOff</a></div><div class="ttdeci">void halRelaisOff(int relais)</div><div class="ttdoc">Switches relais off. </div><div class="ttdef"><b>Definition:</b> hal.cpp:88</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68">HalSig</a></div><div class="ttdeci">HalSig</div><div class="ttdef"><b>Definition:</b> hal.h:40</div></div>
+<div class="ttc" id="hal_8h_html_a80e05d7e336073450da3168992d58754"><div class="ttname"><a href="hal_8h.html#a80e05d7e336073450da3168992d58754">halMachineOn</a></div><div class="ttdeci">void halMachineOn(void)</div><div class="ttdoc">Turn machine on. </div><div class="ttdef"><b>Definition:</b> hal.cpp:304</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68a6d3fe49429343ea09a007c2236db9382"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a6d3fe49429343ea09a007c2236db9382">SigBrewOff</a></div><div class="ttdef"><b>Definition:</b> hal.h:52</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68a4f6585385aaee8e6a336fb31e8713751"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f6585385aaee8e6a336fb31e8713751">SigInt0Psh</a></div><div class="ttdef"><b>Definition:</b> hal.h:41</div></div>
+<div class="ttc" id="hal_8h_html_a1a0d534518ff19bf5b023dfe64d141db"><div class="ttname"><a href="hal_8h.html#a1a0d534518ff19bf5b023dfe64d141db">halGetFlow</a></div><div class="ttdeci">float halGetFlow(void)</div><div class="ttdoc">Returns total flow trough sensor in ml. </div><div class="ttdef"><b>Definition:</b> hal.cpp:233</div></div>
+<div class="ttc" id="hal_8h_html_a597258a80a0bb18db649d01b0893c99f"><div class="ttname"><a href="hal_8h.html#a597258a80a0bb18db649d01b0893c99f">halInt0</a></div><div class="ttdeci">void halInt0(void)</div><div class="ttdoc">Interrupt routine for Int0 (Top button) </div><div class="ttdef"><b>Definition:</b> hal.cpp:133</div></div>
+<div class="ttc" id="hal_8h_html_a1d22d01f1a6a6789f2816e27bbcb0504"><div class="ttname"><a href="hal_8h.html#a1d22d01f1a6a6789f2816e27bbcb0504">halGetRelaisState</a></div><div class="ttdeci">int halGetRelaisState(int relais)</div><div class="ttdoc">Returns the state of the relais relais Returns HIGH when Relais is ON. </div><div class="ttdef"><b>Definition:</b> hal.cpp:119</div></div>
+<div class="ttc" id="hal_8h_html_af5609d1b9c9b6bde787cdca47b3b0a4f"><div class="ttname"><a href="hal_8h.html#af5609d1b9c9b6bde787cdca47b3b0a4f">halGetInt0</a></div><div class="ttdeci">int halGetInt0(void)</div><div class="ttdoc">Returns the value of the top button Int0 (low active) </div><div class="ttdef"><b>Definition:</b> hal.cpp:274</div></div>
+<div class="ttc" id="hal_8h_html_a01f43f0666520e8d8af65e94fd82a5eb"><div class="ttname"><a href="hal_8h.html#a01f43f0666520e8d8af65e94fd82a5eb">halIsHeating</a></div><div class="ttdeci">bool halIsHeating(void)</div><div class="ttdoc">Reads the status of the Pressure Control. </div><div class="ttdef"><b>Definition:</b> hal.cpp:248</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68abdd48e173224114754f253d764540ec9"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68abdd48e173224114754f253d764540ec9">SigPressCls</a></div><div class="ttdef"><b>Definition:</b> hal.h:47</div></div>
+<div class="ttc" id="hal_8h_html_a603aaa9c0c3cfef8b185df5c7f4921c3"><div class="ttname"><a href="hal_8h.html#a603aaa9c0c3cfef8b185df5c7f4921c3">halInt1</a></div><div class="ttdeci">void halInt1(void)</div><div class="ttdoc">Interrupt routine for Int1 (Bottom button) </div><div class="ttdef"><b>Definition:</b> hal.cpp:164</div></div>
+<div class="ttc" id="hal_8h_html_ace9ace8c7e0012157569f446d4cb8c52"><div class="ttname"><a href="hal_8h.html#ace9ace8c7e0012157569f446d4cb8c52">halIntFlow</a></div><div class="ttdeci">void halIntFlow(void)</div><div class="ttdoc">Interrupt routine for the flow sensor It counts the edgdes and stores the value in flowcnt...</div><div class="ttdef"><b>Definition:</b> hal.cpp:196</div></div>
+<div class="ttc" id="hal_8h_html_afe1e8d0d1237d0f128d50a5b146002a2"><div class="ttname"><a href="hal_8h.html#afe1e8d0d1237d0f128d50a5b146002a2">halGetInt1</a></div><div class="ttdeci">int halGetInt1(void)</div><div class="ttdoc">Returns the value of the bottom button Int1 (low active) </div><div class="ttdef"><b>Definition:</b> hal.cpp:282</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68ae70d75d9c016f72d315ce0f375425ae3"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ae70d75d9c016f72d315ce0f375425ae3">SigInt0Rls</a></div><div class="ttdef"><b>Definition:</b> hal.h:42</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68a683f7a77d5c63e835b2a72ab1c540fe4"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a683f7a77d5c63e835b2a72ab1c540fe4">SigPressOpn</a></div><div class="ttdef"><b>Definition:</b> hal.h:48</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68a7f18f13ecf372adaf681e706ad051fd3"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a7f18f13ecf372adaf681e706ad051fd3">SigProxOpn</a></div><div class="ttdef"><b>Definition:</b> hal.h:49</div></div>
+<div class="ttc" id="hal_8h_html_ad56f6e1b04c236040717eadfd806c244"><div class="ttname"><a href="hal_8h.html#ad56f6e1b04c236040717eadfd806c244">halInt1TimerHandler</a></div><div class="ttdeci">void halInt1TimerHandler(void)</div><div class="ttdef"><b>Definition:</b> hal.cpp:182</div></div>
+<div class="ttc" id="hal_8h_html_afd89c1650df524d95aef39b8bc38170d"><div class="ttname"><a href="hal_8h.html#afd89c1650df524d95aef39b8bc38170d">halInit</a></div><div class="ttdeci">void halInit(void)</div><div class="ttdoc">Initializes HAL. </div><div class="ttdef"><b>Definition:</b> hal.cpp:30</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68ac53b2d92b9e3b1652f173e29db5b523d"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68ac53b2d92b9e3b1652f173e29db5b523d">SigProxCvrd</a></div><div class="ttdef"><b>Definition:</b> hal.h:50</div></div>
+<div class="ttc" id="hal_8h_html_a0622583e0c8453a6d6963964ad7e7122"><div class="ttname"><a href="hal_8h.html#a0622583e0c8453a6d6963964ad7e7122">halIntProximity</a></div><div class="ttdeci">void halIntProximity(void)</div><div class="ttdoc">Method to handle toggle of the proximity sensor. </div><div class="ttdef"><b>Definition:</b> hal.cpp:221</div></div>
+<div class="ttc" id="coffee_8cpp_html_a89f234133d3efe315836311cbf21c64b"><div class="ttname"><a href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a></div><div class="ttdeci">int state</div><div class="ttdef"><b>Definition:</b> coffee.cpp:27</div></div>
+<div class="ttc" id="hal_8h_html_a4fa1c41f2dd3c24e13feaa6be70ad426"><div class="ttname"><a href="hal_8h.html#a4fa1c41f2dd3c24e13feaa6be70ad426">halSendSignal</a></div><div class="ttdeci">void halSendSignal(int value)</div><div class="ttdoc">send Signal to coffee thread </div><div class="ttdef"><b>Definition:</b> hal.cpp:290</div></div>
+<div class="ttc" id="hal_8h_html_a73067106de2bbcf98bcc3a06cbf3b000"><div class="ttname"><a href="hal_8h.html#a73067106de2bbcf98bcc3a06cbf3b000">halIntPressure</a></div><div class="ttdeci">void halIntPressure(void)</div><div class="ttdoc">Interrupt routine for the pressure control. </div><div class="ttdef"><b>Definition:</b> hal.cpp:209</div></div>
+<div class="ttc" id="hal_8h_html_aa51a8c9f6b926aa9e9c5dd38249d3f68a4f8316fcd4daf8fdee99ad3414c00857"><div class="ttname"><a href="hal_8h.html#aa51a8c9f6b926aa9e9c5dd38249d3f68a4f8316fcd4daf8fdee99ad3414c00857">SigBrewOn</a></div><div class="ttdef"><b>Definition:</b> hal.h:51</div></div>
+<div class="ttc" id="hal_8h_html_aa52d1bfb2ca68e499ad83d9b0d1ba275"><div class="ttname"><a href="hal_8h.html#aa52d1bfb2ca68e499ad83d9b0d1ba275">halInt0TimerHandler</a></div><div class="ttdeci">void halInt0TimerHandler(void)</div><div class="ttdef"><b>Definition:</b> hal.cpp:151</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 105 - 0
CoffeeCode/html/index.html

@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">CoffeePi Documentation</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>Requirements: wiringpi pthread </p><h2>Usage CoffeePi</h2>
+<pre class="fragment">~$ ./coffecode -h
+</pre><p>Debug levels:</p><ol type="1">
+<li>Basic debugging, process informations</li>
+<li>Brewing informations</li>
+<li>HAL messages</li>
+<li>SQL querys</li>
+<li>LED stripe debugging</li>
+<li>SPI communication</li>
+</ol>
+<h2>Sourcecode</h2>
+<p>The program source is distributed between multiple files. Please refer to the documentation of the files for their content. The project is written in C++11 in Ecplise under a cross compiler environment. See Makefiles in Debug/ for cross compiler makefiles. See Release/ for Makefiles for Raspberry Pi.</p>
+<p>For compiling on Raspberry Pi 2: </p><pre class="fragment">cd Release
+make all -j 4
+</pre><p>(-j 4 runs make with up to 4 threads) </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

Разница между файлами не показана из-за своего большого размера
+ 15 - 0
CoffeeCode/html/jquery.js


+ 770 - 0
CoffeeCode/html/lcd_8cpp.html

@@ -0,0 +1,770 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: lcd.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">lcd.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br />
+<code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;stdarg.h&gt;</code><br />
+<code>#include &lt;wiringPi.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="spi_8h_source.html">spi.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="lcd_8h_source.html">lcd.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="global_8h_source.html">global.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>&#160;&#160;&#160;(1==1)</td></tr>
+<tr class="separator:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa93f0eb578d23995850d61f7d61c55c1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>&#160;&#160;&#160;(1==2)</td></tr>
+<tr class="separator:aa93f0eb578d23995850d61f7d61c55c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6aa8aa2057294b7d06088e834299b369"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a6aa8aa2057294b7d06088e834299b369">LCD_CLEAR</a>&#160;&#160;&#160;0x01</td></tr>
+<tr class="separator:a6aa8aa2057294b7d06088e834299b369"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae0e309ccad89222eb3457f2da9f2bb8d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#ae0e309ccad89222eb3457f2da9f2bb8d">LCD_HOME</a>&#160;&#160;&#160;0x02</td></tr>
+<tr class="separator:ae0e309ccad89222eb3457f2da9f2bb8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a28d2c8d621da114a0fe438db2e58507a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a28d2c8d621da114a0fe438db2e58507a">LCD_ENTRY</a>&#160;&#160;&#160;0x04</td></tr>
+<tr class="separator:a28d2c8d621da114a0fe438db2e58507a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e945df7ca614325cafa08258e82a63c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a8e945df7ca614325cafa08258e82a63c">LCD_CTRL</a>&#160;&#160;&#160;0x08</td></tr>
+<tr class="separator:a8e945df7ca614325cafa08258e82a63c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93e4bb4b824f5b8f5d572d9b4a943ad2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a93e4bb4b824f5b8f5d572d9b4a943ad2">LCD_CDSHIFT</a>&#160;&#160;&#160;0x10</td></tr>
+<tr class="separator:a93e4bb4b824f5b8f5d572d9b4a943ad2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a387bfe42ea7284ba0f154f00df579cad"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a387bfe42ea7284ba0f154f00df579cad">LCD_FUNC</a>&#160;&#160;&#160;0x20</td></tr>
+<tr class="separator:a387bfe42ea7284ba0f154f00df579cad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b38de74c362be1781fef1136aa9684c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a3b38de74c362be1781fef1136aa9684c">LCD_CGRAM</a>&#160;&#160;&#160;0x40</td></tr>
+<tr class="separator:a3b38de74c362be1781fef1136aa9684c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9f40873eaf6a8f0a93971b3e0ab3fd12"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a9f40873eaf6a8f0a93971b3e0ab3fd12">LCD_DGRAM</a>&#160;&#160;&#160;0x80</td></tr>
+<tr class="separator:a9f40873eaf6a8f0a93971b3e0ab3fd12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff5b4fcb87ea2eef9bb3af0234b14f53"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#aff5b4fcb87ea2eef9bb3af0234b14f53">LCD_ENTRY_SH</a>&#160;&#160;&#160;0x01</td></tr>
+<tr class="separator:aff5b4fcb87ea2eef9bb3af0234b14f53"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58e84458e964afcac51877bd13e7703f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a58e84458e964afcac51877bd13e7703f">LCD_ENTRY_ID</a>&#160;&#160;&#160;0x02</td></tr>
+<tr class="separator:a58e84458e964afcac51877bd13e7703f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa52bab70fab9c117f20d71442de77452"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#aa52bab70fab9c117f20d71442de77452">LCD_BLINK_CTRL</a>&#160;&#160;&#160;0x01</td></tr>
+<tr class="separator:aa52bab70fab9c117f20d71442de77452"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3da48db16c1e7844567542273a5578c7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a3da48db16c1e7844567542273a5578c7">LCD_CURSOR_CTRL</a>&#160;&#160;&#160;0x02</td></tr>
+<tr class="separator:a3da48db16c1e7844567542273a5578c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a166a796cbaf4cdd6a3af584ec067d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a1a166a796cbaf4cdd6a3af584ec067d5">LCD_DISPLAY_CTRL</a>&#160;&#160;&#160;0x04</td></tr>
+<tr class="separator:a1a166a796cbaf4cdd6a3af584ec067d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ea7976aa137e8d043d3dfab474cf0b4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a5ea7976aa137e8d043d3dfab474cf0b4">LCD_FUNC_F</a>&#160;&#160;&#160;0x04</td></tr>
+<tr class="separator:a5ea7976aa137e8d043d3dfab474cf0b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0741cad05d62ff28d92a05ea11aa6fdc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a0741cad05d62ff28d92a05ea11aa6fdc">LCD_FUNC_N</a>&#160;&#160;&#160;0x08</td></tr>
+<tr class="separator:a0741cad05d62ff28d92a05ea11aa6fdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4b9a3bcb0dc315afc03412237c5a3ea"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#ae4b9a3bcb0dc315afc03412237c5a3ea">LCD_FUNC_DL</a>&#160;&#160;&#160;0x10</td></tr>
+<tr class="separator:ae4b9a3bcb0dc315afc03412237c5a3ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb0c5015365d7e200edec8967d32195c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#afb0c5015365d7e200edec8967d32195c">LCD_CDSHIFT_RL</a>&#160;&#160;&#160;0x04</td></tr>
+<tr class="separator:afb0c5015365d7e200edec8967d32195c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a688913764edb3a241c26da5e51d70ac2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a688913764edb3a241c26da5e51d70ac2">lcdHome</a> (const int fd)</td></tr>
+<tr class="separator:a688913764edb3a241c26da5e51d70ac2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae1b4dfd9571742b5ca0aba92882b57a6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#ae1b4dfd9571742b5ca0aba92882b57a6">lcdClear</a> (const int fd)</td></tr>
+<tr class="separator:ae1b4dfd9571742b5ca0aba92882b57a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af08385cd21eea125d63d6919ecfbea4a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#af08385cd21eea125d63d6919ecfbea4a">lcdDisplay</a> (const int fd, int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="separator:af08385cd21eea125d63d6919ecfbea4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8aa13c894973d52eeed51d10bf869df2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a8aa13c894973d52eeed51d10bf869df2">lcdCursor</a> (const int fd, int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="separator:a8aa13c894973d52eeed51d10bf869df2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af39d67df7e36291184f69691bb97285b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#af39d67df7e36291184f69691bb97285b">lcdCursorBlink</a> (const int fd, int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="separator:af39d67df7e36291184f69691bb97285b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb6341df42d0e652db66e51fbf0ba486"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#abb6341df42d0e652db66e51fbf0ba486">lcdSendCommand</a> (const int fd, unsigned char command)</td></tr>
+<tr class="separator:abb6341df42d0e652db66e51fbf0ba486"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d09137f6373e95a692c4b3403729254"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a5d09137f6373e95a692c4b3403729254">lcdPosition</a> (const int fd, int x, int y)</td></tr>
+<tr class="separator:a5d09137f6373e95a692c4b3403729254"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74d902393394e4d3cebdcf0d81bbaeeb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a74d902393394e4d3cebdcf0d81bbaeeb">lcdCharDef</a> (const int fd, int index, unsigned char data[8])</td></tr>
+<tr class="separator:a74d902393394e4d3cebdcf0d81bbaeeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21c60441ee22710add0c9bda1310ed66"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a21c60441ee22710add0c9bda1310ed66">lcdPutchar</a> (const int fd, unsigned char data)</td></tr>
+<tr class="separator:a21c60441ee22710add0c9bda1310ed66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a805efc4a96cca29544672151a9594c20"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a805efc4a96cca29544672151a9594c20">lcdPuts</a> (const int fd, const char *string)</td></tr>
+<tr class="separator:a805efc4a96cca29544672151a9594c20"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49c322ad29410ea292f8d976baf6deb9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a49c322ad29410ea292f8d976baf6deb9">lcdPrintf</a> (const int fd, const char *message,...)</td></tr>
+<tr class="separator:a49c322ad29410ea292f8d976baf6deb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88d70347308e92cb29eb45b505cad39e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a88d70347308e92cb29eb45b505cad39e">lcdInit</a> (void)</td></tr>
+<tr class="separator:a88d70347308e92cb29eb45b505cad39e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47f05b4cef2cf066cf1cbb1beb7ceb31"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a47f05b4cef2cf066cf1cbb1beb7ceb31">lcdInitI</a> (const int rows, const int cols, const int bits, const int rs, const int strb)</td></tr>
+<tr class="separator:a47f05b4cef2cf066cf1cbb1beb7ceb31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a6e3994c5175d8609dee2cc8d3bcd66e9"><td class="memItemLeft" align="right" valign="top">struct lcdDataStruct *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8cpp.html#a6e3994c5175d8609dee2cc8d3bcd66e9">lcds</a> [<a class="el" href="lcd_8h.html#a6bfe3f4a880b075a72d2a8318bd10f8e">MAX_LCDS</a>]</td></tr>
+<tr class="separator:a6e3994c5175d8609dee2cc8d3bcd66e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="aa93f0eb578d23995850d61f7d61c55c1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FALSE&#160;&#160;&#160;(1==2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa52bab70fab9c117f20d71442de77452"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_BLINK_CTRL&#160;&#160;&#160;0x01</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a93e4bb4b824f5b8f5d572d9b4a943ad2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_CDSHIFT&#160;&#160;&#160;0x10</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afb0c5015365d7e200edec8967d32195c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_CDSHIFT_RL&#160;&#160;&#160;0x04</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3b38de74c362be1781fef1136aa9684c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_CGRAM&#160;&#160;&#160;0x40</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6aa8aa2057294b7d06088e834299b369"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_CLEAR&#160;&#160;&#160;0x01</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8e945df7ca614325cafa08258e82a63c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_CTRL&#160;&#160;&#160;0x08</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3da48db16c1e7844567542273a5578c7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_CURSOR_CTRL&#160;&#160;&#160;0x02</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9f40873eaf6a8f0a93971b3e0ab3fd12"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_DGRAM&#160;&#160;&#160;0x80</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1a166a796cbaf4cdd6a3af584ec067d5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_DISPLAY_CTRL&#160;&#160;&#160;0x04</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a28d2c8d621da114a0fe438db2e58507a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_ENTRY&#160;&#160;&#160;0x04</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58e84458e964afcac51877bd13e7703f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_ENTRY_ID&#160;&#160;&#160;0x02</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aff5b4fcb87ea2eef9bb3af0234b14f53"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_ENTRY_SH&#160;&#160;&#160;0x01</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a387bfe42ea7284ba0f154f00df579cad"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_FUNC&#160;&#160;&#160;0x20</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae4b9a3bcb0dc315afc03412237c5a3ea"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_FUNC_DL&#160;&#160;&#160;0x10</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5ea7976aa137e8d043d3dfab474cf0b4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_FUNC_F&#160;&#160;&#160;0x04</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0741cad05d62ff28d92a05ea11aa6fdc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_FUNC_N&#160;&#160;&#160;0x08</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae0e309ccad89222eb3457f2da9f2bb8d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_HOME&#160;&#160;&#160;0x02</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa8cecfc5c5c054d2875c03e77b7be15d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TRUE&#160;&#160;&#160;(1==1)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a74d902393394e4d3cebdcf0d81bbaeeb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdCharDef </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char&#160;</td>
+          <td class="paramname"><em>data</em>[8]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae1b4dfd9571742b5ca0aba92882b57a6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdClear </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8aa13c894973d52eeed51d10bf869df2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdCursor </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af39d67df7e36291184f69691bb97285b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdCursorBlink </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af08385cd21eea125d63d6919ecfbea4a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdDisplay </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a688913764edb3a241c26da5e51d70ac2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdHome </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a88d70347308e92cb29eb45b505cad39e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int lcdInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a47f05b4cef2cf066cf1cbb1beb7ceb31"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int lcdInitI </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>rows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>bits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>rs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>strb</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5d09137f6373e95a692c4b3403729254"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdPosition </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a49c322ad29410ea292f8d976baf6deb9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdPrintf </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>message</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a21c60441ee22710add0c9bda1310ed66"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdPutchar </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char&#160;</td>
+          <td class="paramname"><em>data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a805efc4a96cca29544672151a9594c20"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdPuts </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>string</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abb6341df42d0e652db66e51fbf0ba486"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdSendCommand </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char&#160;</td>
+          <td class="paramname"><em>command</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a6e3994c5175d8609dee2cc8d3bcd66e9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct lcdDataStruct* lcds[<a class="el" href="lcd_8h.html#a6bfe3f4a880b075a72d2a8318bd10f8e">MAX_LCDS</a>]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 536 - 0
CoffeeCode/html/lcd_8h.html

@@ -0,0 +1,536 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: lcd.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">lcd.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="lcd_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a6bfe3f4a880b075a72d2a8318bd10f8e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a6bfe3f4a880b075a72d2a8318bd10f8e">MAX_LCDS</a>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:a6bfe3f4a880b075a72d2a8318bd10f8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26089a10ddd59a0dc7283c19ccc02533"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a26089a10ddd59a0dc7283c19ccc02533">LCD_RW</a>&#160;&#160;&#160;24</td></tr>
+<tr class="separator:a26089a10ddd59a0dc7283c19ccc02533"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4781e073871c6f27f89b9463ad3a4ed1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a4781e073871c6f27f89b9463ad3a4ed1">LCD_RS</a>&#160;&#160;&#160;27</td></tr>
+<tr class="separator:a4781e073871c6f27f89b9463ad3a4ed1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1640ffbc0d8ec0f7edb04a2b93918072"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a1640ffbc0d8ec0f7edb04a2b93918072">LCD_EN</a>&#160;&#160;&#160;23</td></tr>
+<tr class="separator:a1640ffbc0d8ec0f7edb04a2b93918072"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a688913764edb3a241c26da5e51d70ac2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a688913764edb3a241c26da5e51d70ac2">lcdHome</a> (const int fd)</td></tr>
+<tr class="separator:a688913764edb3a241c26da5e51d70ac2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae1b4dfd9571742b5ca0aba92882b57a6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#ae1b4dfd9571742b5ca0aba92882b57a6">lcdClear</a> (const int fd)</td></tr>
+<tr class="separator:ae1b4dfd9571742b5ca0aba92882b57a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af08385cd21eea125d63d6919ecfbea4a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#af08385cd21eea125d63d6919ecfbea4a">lcdDisplay</a> (const int fd, int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="separator:af08385cd21eea125d63d6919ecfbea4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8aa13c894973d52eeed51d10bf869df2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a8aa13c894973d52eeed51d10bf869df2">lcdCursor</a> (const int fd, int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="separator:a8aa13c894973d52eeed51d10bf869df2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af39d67df7e36291184f69691bb97285b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#af39d67df7e36291184f69691bb97285b">lcdCursorBlink</a> (const int fd, int <a class="el" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>)</td></tr>
+<tr class="separator:af39d67df7e36291184f69691bb97285b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb6341df42d0e652db66e51fbf0ba486"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#abb6341df42d0e652db66e51fbf0ba486">lcdSendCommand</a> (const int fd, unsigned char command)</td></tr>
+<tr class="separator:abb6341df42d0e652db66e51fbf0ba486"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d09137f6373e95a692c4b3403729254"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a5d09137f6373e95a692c4b3403729254">lcdPosition</a> (const int fd, int x, int y)</td></tr>
+<tr class="separator:a5d09137f6373e95a692c4b3403729254"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74d902393394e4d3cebdcf0d81bbaeeb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a74d902393394e4d3cebdcf0d81bbaeeb">lcdCharDef</a> (const int fd, int index, unsigned char data[8])</td></tr>
+<tr class="separator:a74d902393394e4d3cebdcf0d81bbaeeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21c60441ee22710add0c9bda1310ed66"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a21c60441ee22710add0c9bda1310ed66">lcdPutchar</a> (const int fd, unsigned char data)</td></tr>
+<tr class="separator:a21c60441ee22710add0c9bda1310ed66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a805efc4a96cca29544672151a9594c20"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a805efc4a96cca29544672151a9594c20">lcdPuts</a> (const int fd, const char *string)</td></tr>
+<tr class="separator:a805efc4a96cca29544672151a9594c20"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49c322ad29410ea292f8d976baf6deb9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a49c322ad29410ea292f8d976baf6deb9">lcdPrintf</a> (const int fd, const char *message,...)</td></tr>
+<tr class="separator:a49c322ad29410ea292f8d976baf6deb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47f05b4cef2cf066cf1cbb1beb7ceb31"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a47f05b4cef2cf066cf1cbb1beb7ceb31">lcdInitI</a> (const int rows, const int cols, const int bits, const int rs, const int strb)</td></tr>
+<tr class="separator:a47f05b4cef2cf066cf1cbb1beb7ceb31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88d70347308e92cb29eb45b505cad39e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lcd_8h.html#a88d70347308e92cb29eb45b505cad39e">lcdInit</a> (void)</td></tr>
+<tr class="separator:a88d70347308e92cb29eb45b505cad39e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a1640ffbc0d8ec0f7edb04a2b93918072"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_EN&#160;&#160;&#160;23</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4781e073871c6f27f89b9463ad3a4ed1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_RS&#160;&#160;&#160;27</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a26089a10ddd59a0dc7283c19ccc02533"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LCD_RW&#160;&#160;&#160;24</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6bfe3f4a880b075a72d2a8318bd10f8e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MAX_LCDS&#160;&#160;&#160;8</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a74d902393394e4d3cebdcf0d81bbaeeb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdCharDef </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char&#160;</td>
+          <td class="paramname"><em>data</em>[8]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae1b4dfd9571742b5ca0aba92882b57a6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdClear </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8aa13c894973d52eeed51d10bf869df2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdCursor </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af39d67df7e36291184f69691bb97285b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdCursorBlink </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af08385cd21eea125d63d6919ecfbea4a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdDisplay </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a688913764edb3a241c26da5e51d70ac2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdHome </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a88d70347308e92cb29eb45b505cad39e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int lcdInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a47f05b4cef2cf066cf1cbb1beb7ceb31"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int lcdInitI </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>rows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>bits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>rs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>strb</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5d09137f6373e95a692c4b3403729254"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdPosition </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a49c322ad29410ea292f8d976baf6deb9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdPrintf </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>message</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a21c60441ee22710add0c9bda1310ed66"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdPutchar </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char&#160;</td>
+          <td class="paramname"><em>data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a805efc4a96cca29544672151a9594c20"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdPuts </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>string</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abb6341df42d0e652db66e51fbf0ba486"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void lcdSendCommand </td>
+          <td>(</td>
+          <td class="paramtype">const int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char&#160;</td>
+          <td class="paramname"><em>command</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 157 - 0
CoffeeCode/html/lcd_8h_source.html

@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: lcd.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">lcd.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="lcd_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * lcd.h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *  Created on: Aug 3, 2016</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *      Author: sebastian</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#ifndef LCD_H_</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#define LCD_H_</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"><a class="line" href="lcd_8h.html#a6bfe3f4a880b075a72d2a8318bd10f8e">   11</a></span>&#160;<span class="preprocessor">#define MAX_LCDS        8</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#a688913764edb3a241c26da5e51d70ac2">lcdHome</a>        (<span class="keyword">const</span> <span class="keywordtype">int</span> fd) ;</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#ae1b4dfd9571742b5ca0aba92882b57a6">lcdClear</a>       (<span class="keyword">const</span> <span class="keywordtype">int</span> fd) ;</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#af08385cd21eea125d63d6919ecfbea4a">lcdDisplay</a>     (<span class="keyword">const</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> <a class="code" href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a>) ;</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#a8aa13c894973d52eeed51d10bf869df2">lcdCursor</a>      (<span class="keyword">const</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> state) ;</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#af39d67df7e36291184f69691bb97285b">lcdCursorBlink</a> (<span class="keyword">const</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> state) ;</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#abb6341df42d0e652db66e51fbf0ba486">lcdSendCommand</a> (<span class="keyword">const</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> command) ;</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#a5d09137f6373e95a692c4b3403729254">lcdPosition</a>    (<span class="keyword">const</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) ;</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#a74d902393394e4d3cebdcf0d81bbaeeb">lcdCharDef</a>     (<span class="keyword">const</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> data [8]) ;</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#a21c60441ee22710add0c9bda1310ed66">lcdPutchar</a>     (<span class="keyword">const</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> data) ;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#a805efc4a96cca29544672151a9594c20">lcdPuts</a>        (<span class="keyword">const</span> <span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>) ;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lcd_8h.html#a49c322ad29410ea292f8d976baf6deb9">lcdPrintf</a>      (<span class="keyword">const</span> <span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">char</span> *message, ...) ;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="lcd_8h.html#a47f05b4cef2cf066cf1cbb1beb7ceb31">lcdInitI</a> (<span class="keyword">const</span> <span class="keywordtype">int</span> rows, <span class="keyword">const</span> <span class="keywordtype">int</span> cols, <span class="keyword">const</span> <span class="keywordtype">int</span> bits,</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">int</span> rs, <span class="keyword">const</span> <span class="keywordtype">int</span> strb) ;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="lcd_8h.html#a88d70347308e92cb29eb45b505cad39e">lcdInit</a> (<span class="keywordtype">void</span>) ;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;}</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">// Pinbelegung für das LCD, an verwendete Pins anpassen</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="lcd_8h.html#a26089a10ddd59a0dc7283c19ccc02533">   40</a></span>&#160;<span class="preprocessor">#define LCD_RW      24</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="lcd_8h.html#a4781e073871c6f27f89b9463ad3a4ed1">   41</a></span>&#160;<span class="preprocessor">#define LCD_RS      27</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="lcd_8h.html#a1640ffbc0d8ec0f7edb04a2b93918072">   42</a></span>&#160;<span class="preprocessor">#define LCD_EN      23</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LCD_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="lcd_8h_html_a49c322ad29410ea292f8d976baf6deb9"><div class="ttname"><a href="lcd_8h.html#a49c322ad29410ea292f8d976baf6deb9">lcdPrintf</a></div><div class="ttdeci">void lcdPrintf(const int fd, const char *message,...)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:307</div></div>
+<div class="ttc" id="lcd_8h_html_a5d09137f6373e95a692c4b3403729254"><div class="ttname"><a href="lcd_8h.html#a5d09137f6373e95a692c4b3403729254">lcdPosition</a></div><div class="ttdeci">void lcdPosition(const int fd, int x, int y)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:233</div></div>
+<div class="ttc" id="lcd_8h_html_a74d902393394e4d3cebdcf0d81bbaeeb"><div class="ttname"><a href="lcd_8h.html#a74d902393394e4d3cebdcf0d81bbaeeb">lcdCharDef</a></div><div class="ttdeci">void lcdCharDef(const int fd, int index, unsigned char data[8])</div><div class="ttdef"><b>Definition:</b> lcd.cpp:255</div></div>
+<div class="ttc" id="lcd_8h_html_af39d67df7e36291184f69691bb97285b"><div class="ttname"><a href="lcd_8h.html#af39d67df7e36291184f69691bb97285b">lcdCursorBlink</a></div><div class="ttdeci">void lcdCursorBlink(const int fd, int state)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:204</div></div>
+<div class="ttc" id="lcd_8h_html_ae1b4dfd9571742b5ca0aba92882b57a6"><div class="ttname"><a href="lcd_8h.html#ae1b4dfd9571742b5ca0aba92882b57a6">lcdClear</a></div><div class="ttdeci">void lcdClear(const int fd)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:167</div></div>
+<div class="ttc" id="lcd_8h_html_a688913764edb3a241c26da5e51d70ac2"><div class="ttname"><a href="lcd_8h.html#a688913764edb3a241c26da5e51d70ac2">lcdHome</a></div><div class="ttdeci">void lcdHome(const int fd)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:159</div></div>
+<div class="ttc" id="lcd_8h_html_a805efc4a96cca29544672151a9594c20"><div class="ttname"><a href="lcd_8h.html#a805efc4a96cca29544672151a9594c20">lcdPuts</a></div><div class="ttdeci">void lcdPuts(const int fd, const char *string)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:296</div></div>
+<div class="ttc" id="lcd_8h_html_a88d70347308e92cb29eb45b505cad39e"><div class="ttname"><a href="lcd_8h.html#a88d70347308e92cb29eb45b505cad39e">lcdInit</a></div><div class="ttdeci">int lcdInit(void)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:324</div></div>
+<div class="ttc" id="lcd_8h_html_a8aa13c894973d52eeed51d10bf869df2"><div class="ttname"><a href="lcd_8h.html#a8aa13c894973d52eeed51d10bf869df2">lcdCursor</a></div><div class="ttdeci">void lcdCursor(const int fd, int state)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:193</div></div>
+<div class="ttc" id="lcd_8h_html_af08385cd21eea125d63d6919ecfbea4a"><div class="ttname"><a href="lcd_8h.html#af08385cd21eea125d63d6919ecfbea4a">lcdDisplay</a></div><div class="ttdeci">void lcdDisplay(const int fd, int state)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:182</div></div>
+<div class="ttc" id="lcd_8h_html_abb6341df42d0e652db66e51fbf0ba486"><div class="ttname"><a href="lcd_8h.html#abb6341df42d0e652db66e51fbf0ba486">lcdSendCommand</a></div><div class="ttdeci">void lcdSendCommand(const int fd, unsigned char command)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:221</div></div>
+<div class="ttc" id="lcd_8h_html_a47f05b4cef2cf066cf1cbb1beb7ceb31"><div class="ttname"><a href="lcd_8h.html#a47f05b4cef2cf066cf1cbb1beb7ceb31">lcdInitI</a></div><div class="ttdeci">int lcdInitI(const int rows, const int cols, const int bits, const int rs, const int strb)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:339</div></div>
+<div class="ttc" id="lcd_8h_html_a21c60441ee22710add0c9bda1310ed66"><div class="ttname"><a href="lcd_8h.html#a21c60441ee22710add0c9bda1310ed66">lcdPutchar</a></div><div class="ttdeci">void lcdPutchar(const int fd, unsigned char data)</div><div class="ttdef"><b>Definition:</b> lcd.cpp:273</div></div>
+<div class="ttc" id="coffee_8cpp_html_a89f234133d3efe315836311cbf21c64b"><div class="ttname"><a href="coffee_8cpp.html#a89f234133d3efe315836311cbf21c64b">state</a></div><div class="ttdeci">int state</div><div class="ttdef"><b>Definition:</b> coffee.cpp:27</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 307 - 0
CoffeeCode/html/logger_8cpp.html

@@ -0,0 +1,307 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: logger.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">logger.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br />
+<code>#include &lt;stdarg.h&gt;</code><br />
+<code>#include &lt;time.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="global_8h_source.html">global.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="logger_8h_source.html">logger.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aeb33ace0bb24787befc4a34c561634b4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8cpp.html#aeb33ace0bb24787befc4a34c561634b4">logger_print_time</a> (_IO_FILE *stream)</td></tr>
+<tr class="memdesc:aeb33ace0bb24787befc4a34c561634b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a timestamp.  <a href="#aeb33ace0bb24787befc4a34c561634b4">More...</a><br /></td></tr>
+<tr class="separator:aeb33ace0bb24787befc4a34c561634b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5a2104bf520b79d590c6ef11cdeeb02"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8cpp.html#ab5a2104bf520b79d590c6ef11cdeeb02">logger_error</a> (const char *format,...)</td></tr>
+<tr class="memdesc:ab5a2104bf520b79d590c6ef11cdeeb02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Outputs the printf like formatted message to stderr and colorizes it.  <a href="#ab5a2104bf520b79d590c6ef11cdeeb02">More...</a><br /></td></tr>
+<tr class="separator:ab5a2104bf520b79d590c6ef11cdeeb02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd01f221b7a194e67bb39d88822c9772"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8cpp.html#abd01f221b7a194e67bb39d88822c9772">logger_reset</a> ()</td></tr>
+<tr class="memdesc:abd01f221b7a194e67bb39d88822c9772"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the logger to prevent the previous line being overdrawn.  <a href="#abd01f221b7a194e67bb39d88822c9772">More...</a><br /></td></tr>
+<tr class="separator:abd01f221b7a194e67bb39d88822c9772"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f2dbdf600d66c1c1bcc820d0282d132"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8cpp.html#a1f2dbdf600d66c1c1bcc820d0282d132">logger</a> (<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a> verboselevel, <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger_type_t</a> logtype, const char *format,...)</td></tr>
+<tr class="memdesc:a1f2dbdf600d66c1c1bcc820d0282d132"><td class="mdescLeft">&#160;</td><td class="mdescRight">prints the message to stdout and formats it  <a href="#a1f2dbdf600d66c1c1bcc820d0282d132">More...</a><br /></td></tr>
+<tr class="separator:a1f2dbdf600d66c1c1bcc820d0282d132"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6ed0024f33524ff5e96b473a18b44fd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8cpp.html#ad6ed0024f33524ff5e96b473a18b44fd">logger</a> (<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a> verboselevel, const char *format,...)</td></tr>
+<tr class="memdesc:ad6ed0024f33524ff5e96b473a18b44fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">prints the message to stdout  <a href="#ad6ed0024f33524ff5e96b473a18b44fd">More...</a><br /></td></tr>
+<tr class="separator:ad6ed0024f33524ff5e96b473a18b44fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a05db4cbb4a1c322f0adebb466081c99e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8cpp.html#a05db4cbb4a1c322f0adebb466081c99e">lastlog</a> = 0</td></tr>
+<tr class="separator:a05db4cbb4a1c322f0adebb466081c99e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1f2dbdf600d66c1c1bcc820d0282d132"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logger </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a>&#160;</td>
+          <td class="paramname"><em>verboselevel</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger_type_t</a>&#160;</td>
+          <td class="paramname"><em>logtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>prints the message to stdout and formats it </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">verboselevel</td><td>minimum verbose level for output </td></tr>
+    <tr><td class="paramname">logtype</td><td>type of logmessage for coloring </td></tr>
+    <tr><td class="paramname">format</td><td>printf formatted string </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad6ed0024f33524ff5e96b473a18b44fd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logger </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a>&#160;</td>
+          <td class="paramname"><em>verboselevel</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>prints the message to stdout </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">verboselevel</td><td>minimum verbose level for output </td></tr>
+    <tr><td class="paramname">format</td><td>printf formatted string </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab5a2104bf520b79d590c6ef11cdeeb02"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logger_error </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Outputs the printf like formatted message to stderr and colorizes it. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">format</td><td>printf formatted string </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aeb33ace0bb24787befc4a34c561634b4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logger_print_time </td>
+          <td>(</td>
+          <td class="paramtype">_IO_FILE *&#160;</td>
+          <td class="paramname"><em>stream</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Prints a timestamp. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">stream</td><td>target stream (stdout, stderr) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="abd01f221b7a194e67bb39d88822c9772"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logger_reset </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Resets the logger to prevent the previous line being overdrawn. </p>
+<p>Call after custom printf </p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a05db4cbb4a1c322f0adebb466081c99e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int lastlog = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 499 - 0
CoffeeCode/html/logger_8h.html

@@ -0,0 +1,499 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: logger.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">logger.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="logger_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:acdbdbd1e0c5422f3d1f7aa3960957e0a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#acdbdbd1e0c5422f3d1f7aa3960957e0a">USE_COLORS</a></td></tr>
+<tr class="separator:acdbdbd1e0c5422f3d1f7aa3960957e0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a137aa83ec74421d226a90c92ec032ac9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a137aa83ec74421d226a90c92ec032ac9">KNRM</a>&#160;&#160;&#160;&quot;\x1B[0m&quot;</td></tr>
+<tr class="separator:a137aa83ec74421d226a90c92ec032ac9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66290957baed5df3930ada4cb8caccf1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a66290957baed5df3930ada4cb8caccf1">KRED</a>&#160;&#160;&#160;&quot;\x1B[31m&quot;</td></tr>
+<tr class="separator:a66290957baed5df3930ada4cb8caccf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac081c83b067273757f7a2e54a5957d41"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#ac081c83b067273757f7a2e54a5957d41">KGRN</a>&#160;&#160;&#160;&quot;\x1B[32m&quot;</td></tr>
+<tr class="separator:ac081c83b067273757f7a2e54a5957d41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a897b10d246533c95ba86cb79f92e465a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a897b10d246533c95ba86cb79f92e465a">KYEL</a>&#160;&#160;&#160;&quot;\x1B[33m&quot;</td></tr>
+<tr class="separator:a897b10d246533c95ba86cb79f92e465a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f838f2fc3a9a3b434be606fc908964b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a3f838f2fc3a9a3b434be606fc908964b">KBLU</a>&#160;&#160;&#160;&quot;\x1B[34m&quot;</td></tr>
+<tr class="separator:a3f838f2fc3a9a3b434be606fc908964b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6825f05d3b9d619d91d79d0ef18bb8b2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a6825f05d3b9d619d91d79d0ef18bb8b2">KMAG</a>&#160;&#160;&#160;&quot;\x1B[35m&quot;</td></tr>
+<tr class="separator:a6825f05d3b9d619d91d79d0ef18bb8b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32036c94dbb166a3f874b7efc169841f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a32036c94dbb166a3f874b7efc169841f">KCYN</a>&#160;&#160;&#160;&quot;\x1B[36m&quot;</td></tr>
+<tr class="separator:a32036c94dbb166a3f874b7efc169841f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af0036c8022c9980079ab17e5c87fd478"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#af0036c8022c9980079ab17e5c87fd478">KWHT</a>&#160;&#160;&#160;&quot;\x1B[37m&quot;</td></tr>
+<tr class="separator:af0036c8022c9980079ab17e5c87fd478"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae39a97a19b2e372929dabdc0e3822910"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#ae39a97a19b2e372929dabdc0e3822910">CLEARLINE</a>&#160;&#160;&#160;&quot;\x1B[100D\x1B[1A\x1B[K&quot;</td></tr>
+<tr class="separator:ae39a97a19b2e372929dabdc0e3822910"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a815022697da1d2d7744ff178e940078c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a815022697da1d2d7744ff178e940078c">KBOLD</a>&#160;&#160;&#160;&quot;\x1B[1m&quot;</td></tr>
+<tr class="separator:a815022697da1d2d7744ff178e940078c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a60cbc432422370d29ed1b783be884823"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger_type_t</a> { <br />
+&#160;&#160;<a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a6e98ff471e3ce6c4ef2d75c37ee51837">LOG_INFO</a> = 0, 
+<a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a854a22c1c382f9b7a93bf8e556191c5f">LOG_CAN</a> = 1, 
+<a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a746c53b13e16f15d1d885f75efaf58b1">LOG_OK</a> = 2, 
+<a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823ac8041ffa22bc823d4726701cdb13fc13">LOG_WARN</a> = 3, 
+<br />
+&#160;&#160;<a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a230506cce5c68c3bac5a821c42ed3473">LOG_ERROR</a> = 4, 
+<a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a1ee7c46e5fb6cad577d81e275a4f8218">LOG_ERRORC</a> = 5
+<br />
+ }<tr class="separator:a60cbc432422370d29ed1b783be884823"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</td></tr>
+<tr class="memitem:a1cfb4eb1363ea2e4d18f9052a7a98131"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a> { <br />
+&#160;&#160;<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131afa973d27e66919a26910ccef33a3606a">V_NONE</a> = 0, 
+<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a8470d917f387c308f571d2f370c238a3">V_BASIC</a> = 1, 
+<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131ac26291e5906a8e13146ec8dc56a0869a">V_BREW</a> = 2, 
+<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a9a36496e8d624d5ea70b3f86bc2c0bed">V_HAL</a> = 3, 
+<br />
+&#160;&#160;<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131acf3ff5c46ec466c2d7438651b46cc17c">V_SQL</a> = 4, 
+<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a6af331195d8ce87720090a3eece459e4">V_STRIPE</a> = 5, 
+<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a86acf22e226ebf319ce306ea1af2d95a">V_SPI</a> = 6
+<br />
+ }<tr class="separator:a1cfb4eb1363ea2e4d18f9052a7a98131"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab5a2104bf520b79d590c6ef11cdeeb02"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#ab5a2104bf520b79d590c6ef11cdeeb02">logger_error</a> (const char *format,...)</td></tr>
+<tr class="memdesc:ab5a2104bf520b79d590c6ef11cdeeb02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Outputs the printf like formatted message to stderr and colorizes it.  <a href="#ab5a2104bf520b79d590c6ef11cdeeb02">More...</a><br /></td></tr>
+<tr class="separator:ab5a2104bf520b79d590c6ef11cdeeb02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd01f221b7a194e67bb39d88822c9772"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#abd01f221b7a194e67bb39d88822c9772">logger_reset</a> ()</td></tr>
+<tr class="memdesc:abd01f221b7a194e67bb39d88822c9772"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the logger to prevent the previous line being overdrawn.  <a href="#abd01f221b7a194e67bb39d88822c9772">More...</a><br /></td></tr>
+<tr class="separator:abd01f221b7a194e67bb39d88822c9772"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f2dbdf600d66c1c1bcc820d0282d132"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#a1f2dbdf600d66c1c1bcc820d0282d132">logger</a> (<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a> verboselevel, <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger_type_t</a> logtype, const char *format,...)</td></tr>
+<tr class="memdesc:a1f2dbdf600d66c1c1bcc820d0282d132"><td class="mdescLeft">&#160;</td><td class="mdescRight">prints the message to stdout and formats it  <a href="#a1f2dbdf600d66c1c1bcc820d0282d132">More...</a><br /></td></tr>
+<tr class="separator:a1f2dbdf600d66c1c1bcc820d0282d132"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6ed0024f33524ff5e96b473a18b44fd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logger_8h.html#ad6ed0024f33524ff5e96b473a18b44fd">logger</a> (<a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a> verboselevel, const char *format,...)</td></tr>
+<tr class="memdesc:ad6ed0024f33524ff5e96b473a18b44fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">prints the message to stdout  <a href="#ad6ed0024f33524ff5e96b473a18b44fd">More...</a><br /></td></tr>
+<tr class="separator:ad6ed0024f33524ff5e96b473a18b44fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ae39a97a19b2e372929dabdc0e3822910"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CLEARLINE&#160;&#160;&#160;&quot;\x1B[100D\x1B[1A\x1B[K&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3f838f2fc3a9a3b434be606fc908964b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KBLU&#160;&#160;&#160;&quot;\x1B[34m&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a815022697da1d2d7744ff178e940078c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KBOLD&#160;&#160;&#160;&quot;\x1B[1m&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a32036c94dbb166a3f874b7efc169841f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KCYN&#160;&#160;&#160;&quot;\x1B[36m&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac081c83b067273757f7a2e54a5957d41"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KGRN&#160;&#160;&#160;&quot;\x1B[32m&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6825f05d3b9d619d91d79d0ef18bb8b2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KMAG&#160;&#160;&#160;&quot;\x1B[35m&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a137aa83ec74421d226a90c92ec032ac9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KNRM&#160;&#160;&#160;&quot;\x1B[0m&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a66290957baed5df3930ada4cb8caccf1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KRED&#160;&#160;&#160;&quot;\x1B[31m&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af0036c8022c9980079ab17e5c87fd478"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KWHT&#160;&#160;&#160;&quot;\x1B[37m&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a897b10d246533c95ba86cb79f92e465a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KYEL&#160;&#160;&#160;&quot;\x1B[33m&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acdbdbd1e0c5422f3d1f7aa3960957e0a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define USE_COLORS</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="a60cbc432422370d29ed1b783be884823"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger_type_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a60cbc432422370d29ed1b783be884823a6e98ff471e3ce6c4ef2d75c37ee51837"></a>LOG_INFO&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a60cbc432422370d29ed1b783be884823a854a22c1c382f9b7a93bf8e556191c5f"></a>LOG_CAN&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a60cbc432422370d29ed1b783be884823a746c53b13e16f15d1d885f75efaf58b1"></a>LOG_OK&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a60cbc432422370d29ed1b783be884823ac8041ffa22bc823d4726701cdb13fc13"></a>LOG_WARN&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a60cbc432422370d29ed1b783be884823a230506cce5c68c3bac5a821c42ed3473"></a>LOG_ERROR&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a60cbc432422370d29ed1b783be884823a1ee7c46e5fb6cad577d81e275a4f8218"></a>LOG_ERRORC&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a1cfb4eb1363ea2e4d18f9052a7a98131"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a1cfb4eb1363ea2e4d18f9052a7a98131afa973d27e66919a26910ccef33a3606a"></a>V_NONE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1cfb4eb1363ea2e4d18f9052a7a98131a8470d917f387c308f571d2f370c238a3"></a>V_BASIC&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1cfb4eb1363ea2e4d18f9052a7a98131ac26291e5906a8e13146ec8dc56a0869a"></a>V_BREW&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1cfb4eb1363ea2e4d18f9052a7a98131a9a36496e8d624d5ea70b3f86bc2c0bed"></a>V_HAL&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1cfb4eb1363ea2e4d18f9052a7a98131acf3ff5c46ec466c2d7438651b46cc17c"></a>V_SQL&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1cfb4eb1363ea2e4d18f9052a7a98131a6af331195d8ce87720090a3eece459e4"></a>V_STRIPE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1cfb4eb1363ea2e4d18f9052a7a98131a86acf22e226ebf319ce306ea1af2d95a"></a>V_SPI&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1f2dbdf600d66c1c1bcc820d0282d132"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logger </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a>&#160;</td>
+          <td class="paramname"><em>verboselevel</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger_type_t</a>&#160;</td>
+          <td class="paramname"><em>logtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>prints the message to stdout and formats it </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">verboselevel</td><td>minimum verbose level for output </td></tr>
+    <tr><td class="paramname">logtype</td><td>type of logmessage for coloring </td></tr>
+    <tr><td class="paramname">format</td><td>printf formatted string </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad6ed0024f33524ff5e96b473a18b44fd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logger </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a>&#160;</td>
+          <td class="paramname"><em>verboselevel</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>prints the message to stdout </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">verboselevel</td><td>minimum verbose level for output </td></tr>
+    <tr><td class="paramname">format</td><td>printf formatted string </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab5a2104bf520b79d590c6ef11cdeeb02"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logger_error </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Outputs the printf like formatted message to stderr and colorizes it. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">format</td><td>printf formatted string </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="abd01f221b7a194e67bb39d88822c9772"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logger_reset </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Resets the logger to prevent the previous line being overdrawn. </p>
+<p>Call after custom printf </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 182 - 0
CoffeeCode/html/logger_8h_source.html

@@ -0,0 +1,182 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: logger.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">logger.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="logger_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * logger.h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *  Created on: Feb 3, 2016</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *      Author: Philipp Hinz</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#ifndef LOGGER_H_</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#define LOGGER_H_</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// Logtypes for coloring</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">   13</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a6e98ff471e3ce6c4ef2d75c37ee51837">   14</a></span>&#160;    <a class="code" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a6e98ff471e3ce6c4ef2d75c37ee51837">LOG_INFO</a> = 0,</div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a854a22c1c382f9b7a93bf8e556191c5f">   15</a></span>&#160;    <a class="code" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a854a22c1c382f9b7a93bf8e556191c5f">LOG_CAN</a> = 1,</div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a746c53b13e16f15d1d885f75efaf58b1">   16</a></span>&#160;    <a class="code" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a746c53b13e16f15d1d885f75efaf58b1">LOG_OK</a> = 2,</div>
+<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="logger_8h.html#a60cbc432422370d29ed1b783be884823ac8041ffa22bc823d4726701cdb13fc13">   17</a></span>&#160;    <a class="code" href="logger_8h.html#a60cbc432422370d29ed1b783be884823ac8041ffa22bc823d4726701cdb13fc13">LOG_WARN</a> = 3,</div>
+<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a230506cce5c68c3bac5a821c42ed3473">   18</a></span>&#160;    <a class="code" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a230506cce5c68c3bac5a821c42ed3473">LOG_ERROR</a> = 4,</div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a1ee7c46e5fb6cad577d81e275a4f8218">   19</a></span>&#160;    <a class="code" href="logger_8h.html#a60cbc432422370d29ed1b783be884823a1ee7c46e5fb6cad577d81e275a4f8218">LOG_ERRORC</a> = 5,</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;} <a class="code" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger_type_t</a>;</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment">// verbosity levels</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">   24</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131afa973d27e66919a26910ccef33a3606a">   25</a></span>&#160;    <a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131afa973d27e66919a26910ccef33a3606a">V_NONE</a> = 0,</div>
+<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a8470d917f387c308f571d2f370c238a3">   26</a></span>&#160;    <a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a8470d917f387c308f571d2f370c238a3">V_BASIC</a> = 1,</div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131ac26291e5906a8e13146ec8dc56a0869a">   27</a></span>&#160;    <a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131ac26291e5906a8e13146ec8dc56a0869a">V_BREW</a> = 2,</div>
+<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a9a36496e8d624d5ea70b3f86bc2c0bed">   28</a></span>&#160;    <a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a9a36496e8d624d5ea70b3f86bc2c0bed">V_HAL</a> = 3,</div>
+<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131acf3ff5c46ec466c2d7438651b46cc17c">   29</a></span>&#160;    <a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131acf3ff5c46ec466c2d7438651b46cc17c">V_SQL</a> = 4,</div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a6af331195d8ce87720090a3eece459e4">   30</a></span>&#160;    <a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a6af331195d8ce87720090a3eece459e4">V_STRIPE</a> = 5,</div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a86acf22e226ebf319ce306ea1af2d95a">   31</a></span>&#160;    <a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a86acf22e226ebf319ce306ea1af2d95a">V_SPI</a> = 6,</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;} <a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a>;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">// Colors \o/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="logger_8h.html#acdbdbd1e0c5422f3d1f7aa3960957e0a">   36</a></span>&#160;<span class="preprocessor">#define USE_COLORS</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">// List of escape sequences http://ascii-table.com/ansi-escape-sequences.php</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#ifdef USE_COLORS</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="logger_8h.html#a137aa83ec74421d226a90c92ec032ac9">   41</a></span>&#160;<span class="preprocessor">#define KNRM  &quot;\x1B[0m&quot;</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="logger_8h.html#a66290957baed5df3930ada4cb8caccf1">   42</a></span>&#160;<span class="preprocessor">#define KRED  &quot;\x1B[31m&quot;</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="logger_8h.html#ac081c83b067273757f7a2e54a5957d41">   43</a></span>&#160;<span class="preprocessor">#define KGRN  &quot;\x1B[32m&quot;</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="logger_8h.html#a897b10d246533c95ba86cb79f92e465a">   44</a></span>&#160;<span class="preprocessor">#define KYEL  &quot;\x1B[33m&quot;</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="logger_8h.html#a3f838f2fc3a9a3b434be606fc908964b">   45</a></span>&#160;<span class="preprocessor">#define KBLU  &quot;\x1B[34m&quot;</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="logger_8h.html#a6825f05d3b9d619d91d79d0ef18bb8b2">   46</a></span>&#160;<span class="preprocessor">#define KMAG  &quot;\x1B[35m&quot;</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="logger_8h.html#a32036c94dbb166a3f874b7efc169841f">   47</a></span>&#160;<span class="preprocessor">#define KCYN  &quot;\x1B[36m&quot;</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="logger_8h.html#af0036c8022c9980079ab17e5c87fd478">   48</a></span>&#160;<span class="preprocessor">#define KWHT  &quot;\x1B[37m&quot;</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#define KNRM</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#define KRED</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#define KGRN</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#define KYEL</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#define KBLU</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#define KMAG</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">#define KCYN</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#define KWHT</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="logger_8h.html#ae39a97a19b2e372929dabdc0e3822910">   60</a></span>&#160;<span class="preprocessor">#define CLEARLINE &quot;\x1B[100D\x1B[1A\x1B[K&quot;</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="logger_8h.html#a815022697da1d2d7744ff178e940078c">   61</a></span>&#160;<span class="preprocessor">#define KBOLD  &quot;\x1B[1m&quot;</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="keywordtype">void</span> <a class="code" href="logger_8h.html#ab5a2104bf520b79d590c6ef11cdeeb02">logger_error</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="keywordtype">void</span> <a class="code" href="logger_8h.html#abd01f221b7a194e67bb39d88822c9772">logger_reset</a>();</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="keywordtype">void</span> <a class="code" href="logger_8h.html#a1f2dbdf600d66c1c1bcc820d0282d132">logger</a>(<a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a> verboselevel, <a class="code" href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger_type_t</a> logtype, <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keywordtype">void</span> <a class="code" href="logger_8h.html#a1f2dbdf600d66c1c1bcc820d0282d132">logger</a>(<a class="code" href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a> verboselevel, <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LOGGER_H_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="logger_8h_html_a1cfb4eb1363ea2e4d18f9052a7a98131afa973d27e66919a26910ccef33a3606a"><div class="ttname"><a href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131afa973d27e66919a26910ccef33a3606a">V_NONE</a></div><div class="ttdef"><b>Definition:</b> logger.h:25</div></div>
+<div class="ttc" id="logger_8h_html_a1cfb4eb1363ea2e4d18f9052a7a98131a6af331195d8ce87720090a3eece459e4"><div class="ttname"><a href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a6af331195d8ce87720090a3eece459e4">V_STRIPE</a></div><div class="ttdef"><b>Definition:</b> logger.h:30</div></div>
+<div class="ttc" id="logger_8h_html_a60cbc432422370d29ed1b783be884823a1ee7c46e5fb6cad577d81e275a4f8218"><div class="ttname"><a href="logger_8h.html#a60cbc432422370d29ed1b783be884823a1ee7c46e5fb6cad577d81e275a4f8218">LOG_ERRORC</a></div><div class="ttdef"><b>Definition:</b> logger.h:19</div></div>
+<div class="ttc" id="logger_8h_html_a60cbc432422370d29ed1b783be884823a746c53b13e16f15d1d885f75efaf58b1"><div class="ttname"><a href="logger_8h.html#a60cbc432422370d29ed1b783be884823a746c53b13e16f15d1d885f75efaf58b1">LOG_OK</a></div><div class="ttdef"><b>Definition:</b> logger.h:16</div></div>
+<div class="ttc" id="logger_8h_html_a60cbc432422370d29ed1b783be884823"><div class="ttname"><a href="logger_8h.html#a60cbc432422370d29ed1b783be884823">logger_type_t</a></div><div class="ttdeci">logger_type_t</div><div class="ttdef"><b>Definition:</b> logger.h:13</div></div>
+<div class="ttc" id="logger_8h_html_a1cfb4eb1363ea2e4d18f9052a7a98131a8470d917f387c308f571d2f370c238a3"><div class="ttname"><a href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a8470d917f387c308f571d2f370c238a3">V_BASIC</a></div><div class="ttdef"><b>Definition:</b> logger.h:26</div></div>
+<div class="ttc" id="logger_8h_html_a60cbc432422370d29ed1b783be884823a854a22c1c382f9b7a93bf8e556191c5f"><div class="ttname"><a href="logger_8h.html#a60cbc432422370d29ed1b783be884823a854a22c1c382f9b7a93bf8e556191c5f">LOG_CAN</a></div><div class="ttdef"><b>Definition:</b> logger.h:15</div></div>
+<div class="ttc" id="logger_8h_html_a1cfb4eb1363ea2e4d18f9052a7a98131acf3ff5c46ec466c2d7438651b46cc17c"><div class="ttname"><a href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131acf3ff5c46ec466c2d7438651b46cc17c">V_SQL</a></div><div class="ttdef"><b>Definition:</b> logger.h:29</div></div>
+<div class="ttc" id="logger_8h_html_a1cfb4eb1363ea2e4d18f9052a7a98131ac26291e5906a8e13146ec8dc56a0869a"><div class="ttname"><a href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131ac26291e5906a8e13146ec8dc56a0869a">V_BREW</a></div><div class="ttdef"><b>Definition:</b> logger.h:27</div></div>
+<div class="ttc" id="logger_8h_html_a1cfb4eb1363ea2e4d18f9052a7a98131"><div class="ttname"><a href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131">logger_verbose_t</a></div><div class="ttdeci">logger_verbose_t</div><div class="ttdef"><b>Definition:</b> logger.h:24</div></div>
+<div class="ttc" id="logger_8h_html_a1f2dbdf600d66c1c1bcc820d0282d132"><div class="ttname"><a href="logger_8h.html#a1f2dbdf600d66c1c1bcc820d0282d132">logger</a></div><div class="ttdeci">void logger(logger_verbose_t verboselevel, logger_type_t logtype, const char *format,...)</div><div class="ttdoc">prints the message to stdout and formats it </div><div class="ttdef"><b>Definition:</b> logger.cpp:69</div></div>
+<div class="ttc" id="logger_8h_html_a1cfb4eb1363ea2e4d18f9052a7a98131a86acf22e226ebf319ce306ea1af2d95a"><div class="ttname"><a href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a86acf22e226ebf319ce306ea1af2d95a">V_SPI</a></div><div class="ttdef"><b>Definition:</b> logger.h:31</div></div>
+<div class="ttc" id="logger_8h_html_ab5a2104bf520b79d590c6ef11cdeeb02"><div class="ttname"><a href="logger_8h.html#ab5a2104bf520b79d590c6ef11cdeeb02">logger_error</a></div><div class="ttdeci">void logger_error(const char *format,...)</div><div class="ttdoc">Outputs the printf like formatted message to stderr and colorizes it. </div><div class="ttdef"><b>Definition:</b> logger.cpp:38</div></div>
+<div class="ttc" id="logger_8h_html_a60cbc432422370d29ed1b783be884823a6e98ff471e3ce6c4ef2d75c37ee51837"><div class="ttname"><a href="logger_8h.html#a60cbc432422370d29ed1b783be884823a6e98ff471e3ce6c4ef2d75c37ee51837">LOG_INFO</a></div><div class="ttdef"><b>Definition:</b> logger.h:14</div></div>
+<div class="ttc" id="logger_8h_html_a60cbc432422370d29ed1b783be884823ac8041ffa22bc823d4726701cdb13fc13"><div class="ttname"><a href="logger_8h.html#a60cbc432422370d29ed1b783be884823ac8041ffa22bc823d4726701cdb13fc13">LOG_WARN</a></div><div class="ttdef"><b>Definition:</b> logger.h:17</div></div>
+<div class="ttc" id="logger_8h_html_abd01f221b7a194e67bb39d88822c9772"><div class="ttname"><a href="logger_8h.html#abd01f221b7a194e67bb39d88822c9772">logger_reset</a></div><div class="ttdeci">void logger_reset()</div><div class="ttdoc">Resets the logger to prevent the previous line being overdrawn. </div><div class="ttdef"><b>Definition:</b> logger.cpp:58</div></div>
+<div class="ttc" id="logger_8h_html_a60cbc432422370d29ed1b783be884823a230506cce5c68c3bac5a821c42ed3473"><div class="ttname"><a href="logger_8h.html#a60cbc432422370d29ed1b783be884823a230506cce5c68c3bac5a821c42ed3473">LOG_ERROR</a></div><div class="ttdef"><b>Definition:</b> logger.h:18</div></div>
+<div class="ttc" id="logger_8h_html_a1cfb4eb1363ea2e4d18f9052a7a98131a9a36496e8d624d5ea70b3f86bc2c0bed"><div class="ttname"><a href="logger_8h.html#a1cfb4eb1363ea2e4d18f9052a7a98131a9a36496e8d624d5ea70b3f86bc2c0bed">V_HAL</a></div><div class="ttdef"><b>Definition:</b> logger.h:28</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

+ 385 - 0
CoffeeCode/html/main_8cpp.html

@@ -0,0 +1,385 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>CoffeePi: main.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">CoffeePi
+   </div>
+   <div id="projectbrief">Coffee machine control for Raspberry Pi</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">main.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br />
+<code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;string.h&gt;</code><br />
+<code>#include &lt;errno.h&gt;</code><br />
+<code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &lt;wiringPi.h&gt;</code><br />
+<code>#include &lt;pthread.h&gt;</code><br />
+<code>#include &lt;unistd.h&gt;</code><br />
+<code>#include &lt;iostream&gt;</code><br />
+<code>#include &lt;csignal&gt;</code><br />
+<code>#include &quot;<a class="el" href="global_8h_source.html">global.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="timer_8h_source.html">timer.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="database_8h_source.html">database.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="logger_8h_source.html">logger.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="lcd_8h_source.html">lcd.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="hal_8h_source.html">hal.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="stripe_8h_source.html">stripe.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="coffee_8h_source.html">coffee.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="display_8h_source.html">display.h</a>&quot;</code><br />
+<code>#include &quot;buildno&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9a66b873229b4d46cb9f39dddfc1bddb"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a9a66b873229b4d46cb9f39dddfc1bddb">mainLoop</a> (void *threadid)</td></tr>
+<tr class="memdesc:a9a66b873229b4d46cb9f39dddfc1bddb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main Thread, used for some initializations and error detection.  <a href="#a9a66b873229b4d46cb9f39dddfc1bddb">More...</a><br /></td></tr>
+<tr class="separator:a9a66b873229b4d46cb9f39dddfc1bddb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd303e48c6d5b8d8bbf55db887f1e7e8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#acd303e48c6d5b8d8bbf55db887f1e7e8">terminationHandler</a> (int signum)</td></tr>
+<tr class="memdesc:acd303e48c6d5b8d8bbf55db887f1e7e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for program termination caught via signal.  <a href="#acd303e48c6d5b8d8bbf55db887f1e7e8">More...</a><br /></td></tr>
+<tr class="separator:acd303e48c6d5b8d8bbf55db887f1e7e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b9ec8ce27cbec14222dfd2db55e8bad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a6b9ec8ce27cbec14222dfd2db55e8bad">usr1Handler</a> (int signum)</td></tr>
+<tr class="memdesc:a6b9ec8ce27cbec14222dfd2db55e8bad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles the signal USR2.  <a href="#a6b9ec8ce27cbec14222dfd2db55e8bad">More...</a><br /></td></tr>
+<tr class="separator:a6b9ec8ce27cbec14222dfd2db55e8bad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5f8eab61a77d6d566215bcf12144422"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#aa5f8eab61a77d6d566215bcf12144422">hupHandler</a> (int signum)</td></tr>
+<tr class="memdesc:aa5f8eab61a77d6d566215bcf12144422"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles the signal HUP and starts a speed test.  <a href="#aa5f8eab61a77d6d566215bcf12144422">More...</a><br /></td></tr>
+<tr class="separator:aa5f8eab61a77d6d566215bcf12144422"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6e46b0071bb3330546b7f2b601d0a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#ab6e46b0071bb3330546b7f2b601d0a6c">killThread</a> (int threadid, int sig)</td></tr>
+<tr class="memdesc:ab6e46b0071bb3330546b7f2b601d0a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sends a signal to a thread.  <a href="#ab6e46b0071bb3330546b7f2b601d0a6c">More...</a><br /></td></tr>
+<tr class="separator:ab6e46b0071bb3330546b7f2b601d0a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ac70430026dcf56f46e5426e1d01d7e89"><td class="memItemLeft" align="right" valign="top">const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#ac70430026dcf56f46e5426e1d01d7e89">buildno</a></td></tr>
+<tr class="separator:ac70430026dcf56f46e5426e1d01d7e89"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b2caeb4b6f130be43e5a2f0267dd453"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a0b2caeb4b6f130be43e5a2f0267dd453">verbose</a> = 0</td></tr>
+<tr class="separator:a0b2caeb4b6f130be43e5a2f0267dd453"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae88c926fe2a10f736eb01b1d1e899a1c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#ae88c926fe2a10f736eb01b1d1e899a1c">optDate</a> = false</td></tr>
+<tr class="separator:ae88c926fe2a10f736eb01b1d1e899a1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7bfeade3d2f19e8baecdcddd7f9162fa"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a7bfeade3d2f19e8baecdcddd7f9162fa">optPower</a> = false</td></tr>
+<tr class="separator:a7bfeade3d2f19e8baecdcddd7f9162fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a24ab7c0142e353c9ce9ca1ee1210bb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a2a24ab7c0142e353c9ce9ca1ee1210bb">optCold</a> = false</td></tr>
+<tr class="separator:a2a24ab7c0142e353c9ce9ca1ee1210bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1c21fd320f05c652f120ad167628c14"><td class="memItemLeft" align="right" valign="top">pthread_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#ad1c21fd320f05c652f120ad167628c14">thread</a> [4]</td></tr>
+<tr class="separator:ad1c21fd320f05c652f120ad167628c14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4acff8232e4aec9cd5c6dc200ac55ef3"><td class="memItemLeft" align="right" valign="top">pthread_mutex_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a></td></tr>
+<tr class="separator:a4acff8232e4aec9cd5c6dc200ac55ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aa5f8eab61a77d6d566215bcf12144422"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hupHandler </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>signum</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Handles the signal HUP and starts a speed test. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab6e46b0071bb3330546b7f2b601d0a6c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void killThread </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>threadid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>sig</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sends a signal to a thread. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">threadid</td><td>ID of the thread </td></tr>
+    <tr><td class="paramname">sig</td><td>Signal to send </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>argv</em>[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9a66b873229b4d46cb9f39dddfc1bddb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * mainLoop </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>threadid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Main Thread, used for some initializations and error detection. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">threadid</td><td>Thread ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="acd303e48c6d5b8d8bbf55db887f1e7e8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void terminationHandler </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>signum</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Handler for program termination caught via signal. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6b9ec8ce27cbec14222dfd2db55e8bad"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void usr1Handler </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>signum</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Handles the signal USR2. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ac70430026dcf56f46e5426e1d01d7e89"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const int buildno</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">= (1+(int)(</div>
+<div class="line"># 29 <span class="stringliteral">&quot;/home/sebastian/CoffeePi/CoffeeCode/main.cpp&quot;</span> 2</div>
+<div class="line">        ))</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a4acff8232e4aec9cd5c6dc200ac55ef3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">pthread_mutex_t mutex</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2a24ab7c0142e353c9ce9ca1ee1210bb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool optCold = false</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae88c926fe2a10f736eb01b1d1e899a1c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool optDate = false</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7bfeade3d2f19e8baecdcddd7f9162fa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool optPower = false</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad1c21fd320f05c652f120ad167628c14"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">pthread_t thread[4]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0b2caeb4b6f130be43e5a2f0267dd453"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int verbose = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>

BIN
CoffeeCode/html/nav_f.png


Некоторые файлы не были показаны из-за большого количества измененных файлов