diff options
Diffstat (limited to 'usb-i2c-sl018')
-rw-r--r-- | usb-i2c-sl018/statemachine.c | 44 |
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; + } + +} + |