diff options
Diffstat (limited to 'usb-i2c-sl018')
-rw-r--r-- | usb-i2c-sl018/statemachine.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/usb-i2c-sl018/statemachine.c b/usb-i2c-sl018/statemachine.c index 26fbb8e..5a6b9c8 100644 --- a/usb-i2c-sl018/statemachine.c +++ b/usb-i2c-sl018/statemachine.c @@ -96,15 +96,46 @@ void statemachine_task_limits(void) } } -void statemachine_task_cmd(void) +void statemachine_task_event(void) { + if (state == closing || state == opening) + return; //waiting for action to finish event_t event = eventqueue_pop(); + switch(state) { + case closing: + case opening: + //Not possibe, fuck gcc + case reset: + case error: + printf("Error: Not accepting commands in state %d\n\r",state); + break; // Not accepting commands + case manual_movement: + case timeout_after_open: + case timeout_after_close: + case closed: + case opened: + switch(event) { + case none: + return; + case cmd_open: + return change_state(opening); + case cmd_close: + return change_state(closing); + case cmd_toggle: + case btn_toggle: + case card: + return change_state( + (state==closed || state == timeout_after_close) ? + opening: + closing); + } + } } void statemachine_task(void) { statemachine_task_limits(); - statemachine_task_cmd(); + statemachine_task_event(); } |