summaryrefslogtreecommitdiff
path: root/usb-i2c-sl018/statemachine.c
diff options
context:
space:
mode:
Diffstat (limited to 'usb-i2c-sl018/statemachine.c')
-rw-r--r--usb-i2c-sl018/statemachine.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/usb-i2c-sl018/statemachine.c b/usb-i2c-sl018/statemachine.c
index bb12e83..659749d 100644
--- a/usb-i2c-sl018/statemachine.c
+++ b/usb-i2c-sl018/statemachine.c
@@ -52,7 +52,7 @@ void change_state(state_t new_state)
state = new_state;
}
-void statemachine_task(void)
+void statemachine_task_limits(void)
{
limits_t limits = limits_get();
if (limits == both)
@@ -69,15 +69,42 @@ void statemachine_task(void)
return change_state(closing);
}
case closed:
- case closing:
case opened:
- case opening:
+ switch(limits) {
+ case open:
+ return change_state(opened);
+ case close:
+ return change_state(closed);
+ default:
+ return change_state(manual_movement);
+ }
+ case manual_movement:
case timeout_after_open:
case timeout_after_close:
+ case closing:
+ case opening:
+ switch(limits) {
+ case open:
+ return change_state(opened);
+ case close:
+ return change_state(closed);
+ default:
+ return;
+ }
case error:
- case manual_movement:
break;
}
+}
+
+void statemachine_task_cmd(void)
+{
+ event_t event = eventqueue_pop();
}
+void statemachine_task(void)
+{
+ statemachine_task_limits();
+ statemachine_task_cmd();
+}
+