summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOthmar Gsenger <otti@wirdorange.org>2013-02-06 23:33:00 +0000
committerOthmar Gsenger <otti@wirdorange.org>2013-02-06 23:33:00 +0000
commit2eb83acc3f51b4a41baa3f4b6e26f2f5e00c6efc (patch)
tree03bc3a1844e40463018b1ddf69b4cf1e7665179e
parentfixed checkin (diff)
needs other limit none
git-svn-id: https://svn.spreadspace.org/avr/trunk@152 aa12f405-d877-488e-9caf-2d797e2a1cc7
-rw-r--r--usb-i2c-sl018/statemachine.c44
1 files changed, 37 insertions, 7 deletions
diff --git a/usb-i2c-sl018/statemachine.c b/usb-i2c-sl018/statemachine.c
index 5f5ea47..bb12e83 100644
--- a/usb-i2c-sl018/statemachine.c
+++ b/usb-i2c-sl018/statemachine.c
@@ -25,23 +25,23 @@
#include "statemachine.h"
#include "stepper.h"
#include "eventqueue.h"
+#include "limits.h"
+#include <stdio.h>
-typedef enum state_enum {reset, closed, closing, open, opening, timeout_after_open, timeout_after_close, error, manual_movement} state_t;
+typedef enum state_enum {reset, closed, closing, opened, opening, timeout_after_open, timeout_after_close, error, manual_movement} state_t;
state_t state = reset;
-void statemachine_task(void)
-{
-
-}
-
void change_state(state_t new_state)
{
+ if (new_state == state)
+ return;
+ printf("state: %d\n\r",new_state);
switch(new_state) {
case reset:
break;
case closed:
case closing:
- case open:
+ case opened:
case opening:
case timeout_after_open:
case timeout_after_close:
@@ -51,3 +51,33 @@ void change_state(state_t new_state)
}
state = new_state;
}
+
+void statemachine_task(void)
+{
+ limits_t limits = limits_get();
+ if (limits == both)
+ return change_state(error);
+
+ switch(state) {
+ case reset:
+ switch(limits) {
+ case open:
+ return change_state(opened);
+ case close:
+ return change_state(closed);
+ default:
+ return change_state(closing);
+ }
+ case closed:
+ case closing:
+ case opened:
+ case opening:
+ case timeout_after_open:
+ case timeout_after_close:
+ case error:
+ case manual_movement:
+ break;
+ }
+
+}
+