From 2eb83acc3f51b4a41baa3f4b6e26f2f5e00c6efc Mon Sep 17 00:00:00 2001 From: Othmar Gsenger Date: Wed, 6 Feb 2013 23:33:00 +0000 Subject: needs other limit none git-svn-id: https://svn.spreadspace.org/avr/trunk@152 aa12f405-d877-488e-9caf-2d797e2a1cc7 --- usb-i2c-sl018/statemachine.c | 44 +++++++++++++++++++++++++++++++++++++------- 1 file 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 -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; + } + +} + -- cgit v1.2.3