|
@@ -33,7 +33,7 @@ uint64_t totalHeatingTime; //local copies of the corresponding database entries
|
|
|
uint16_t brewCounter;
|
|
|
|
|
|
|
|
|
-const char* StateName[] = {"OFF", "HEATING", "INITHEAT", "IDLE", "BREW", "BREWMAN", "CLEAN", "ERROR"};
|
|
|
+const char* StateName[] = {"OFF", "HEATING", "INITHEAT", "IDLE", "BREW", "BREWMAN", "CLEAN", "ERROR", "WAITOFF"};
|
|
|
|
|
|
/**
|
|
|
* Thread for the finite state machine
|
|
@@ -112,7 +112,26 @@ void *coffeeThread(void *threadid) {
|
|
|
break;
|
|
|
}
|
|
|
break;
|
|
|
+ /*
|
|
|
+ *
|
|
|
+ */
|
|
|
+ case STATE_WAIT_OFF:
|
|
|
+ if (SigValueEmpty())
|
|
|
+ pause();
|
|
|
+ switch (getSigValue()) {
|
|
|
+ case SigPressOpn:
|
|
|
+ halMachineOff();
|
|
|
+ coffeeIncreaseHeatingTime(halgetHeatingTime());
|
|
|
+ writeBackCache();
|
|
|
+ changeState(STATE_OFF);
|
|
|
+ break;
|
|
|
|
|
|
+ case SigInt0Psh:
|
|
|
+ case SigInt1Psh:
|
|
|
+ changeState(STATE_INITALHEATING);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
/*
|
|
|
*
|
|
|
*/
|
|
@@ -127,6 +146,11 @@ void *coffeeThread(void *threadid) {
|
|
|
writeBackCache();
|
|
|
changeState(STATE_OFF);
|
|
|
break;
|
|
|
+
|
|
|
+ case SigInt1Rls:
|
|
|
+ changeState(STATE_WAIT_OFF);
|
|
|
+ break;
|
|
|
+
|
|
|
case SigPressOpn:
|
|
|
//Inital heating finished
|
|
|
coffeeIncreaseHeatingTime(halgetHeatingTime());
|
|
@@ -143,20 +167,28 @@ void *coffeeThread(void *threadid) {
|
|
|
pause();
|
|
|
switch (getSigValue()) {
|
|
|
case SigInt1RlsLong:
|
|
|
- //Turn machine off again
|
|
|
+ //Turn machine _immediately_ off again
|
|
|
halMachineOff();
|
|
|
coffeeIncreaseHeatingTime(halgetHeatingTime());
|
|
|
writeBackCache();
|
|
|
changeState(STATE_OFF);
|
|
|
break;
|
|
|
+
|
|
|
+ case SigInt1Rls:
|
|
|
+ //turn machine off when heating is finished
|
|
|
+ changeState(STATE_WAIT_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);
|
|
@@ -171,18 +203,21 @@ void *coffeeThread(void *threadid) {
|
|
|
pause();
|
|
|
switch (getSigValue()) {
|
|
|
case SigInt1RlsLong:
|
|
|
- //Turn machine off again
|
|
|
+ //turn machine _immediately_ off
|
|
|
halMachineOff();
|
|
|
writeBackCache();
|
|
|
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);
|
|
@@ -291,7 +326,7 @@ void coffeeTerminate(event_t *event) {
|
|
|
logger_error("Invalid use of event %s\n", event->event);
|
|
|
return;
|
|
|
}
|
|
|
- logger(V_BREW, "Coffee.cpp thread terminating");
|
|
|
+ logger(V_BREW, "Coffee.cpp: Thread terminating");
|
|
|
//stop brewing
|
|
|
halRelaisOff(RELAIS_PUMP);
|
|
|
brewTimer.stop();
|