summaryrefslogtreecommitdiff
path: root/usb-i2c-sl018
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2013-02-07 00:51:15 +0000
committerChristian Pointner <equinox@spreadspace.org>2013-02-07 00:51:15 +0000
commit048e16a12bf926cc122899dd96f1ba34fb5d7912 (patch)
tree71e813720cd8df16e84be3267eb1a80e85d1cd97 /usb-i2c-sl018
parentstepper respects limits now (diff)
fixed state machine
git-svn-id: https://svn.spreadspace.org/avr/trunk@163 aa12f405-d877-488e-9caf-2d797e2a1cc7
Diffstat (limited to 'usb-i2c-sl018')
-rw-r--r--usb-i2c-sl018/eventqueue.h2
-rw-r--r--usb-i2c-sl018/statemachine.c22
-rw-r--r--usb-i2c-sl018/statemachine.dot4
-rw-r--r--usb-i2c-sl018/stepper.c8
4 files changed, 25 insertions, 11 deletions
diff --git a/usb-i2c-sl018/eventqueue.h b/usb-i2c-sl018/eventqueue.h
index bfa2c62..fa2929b 100644
--- a/usb-i2c-sl018/eventqueue.h
+++ b/usb-i2c-sl018/eventqueue.h
@@ -24,7 +24,7 @@
#ifndef R3TUER_eventqueue_h_INCLUDED
#define R3TUER_eventqueue_h_INCLUDED
-typedef enum { none, cmd_open, cmd_close, cmd_toggle, btn_toggle, card, move_timeout } event_t;
+typedef enum { none, cmd_open, cmd_close, cmd_toggle, btn_toggle, card, close_fin, open_fin, move_timeout } event_t;
void init_eventqueue(void);
event_t eventqueue_pop(void);
diff --git a/usb-i2c-sl018/statemachine.c b/usb-i2c-sl018/statemachine.c
index 9a43385..77fb9cd 100644
--- a/usb-i2c-sl018/statemachine.c
+++ b/usb-i2c-sl018/statemachine.c
@@ -98,12 +98,8 @@ void statemachine_task_limits(void)
return;
}
case closing:
- if(limits == close)
- return change_state(closed);
break;
case opening:
- if(limits == open)
- return change_state(opened);
break;
}
}
@@ -117,9 +113,16 @@ void statemachine_task_event(void)
switch(state) {
case closing:
case opening:
- if(event==move_timeout)
- {
- return change_state(state==opening?timeout_after_open:timeout_after_close);
+ switch(event) {
+ case open_fin:
+ return change_state(opened);
+ case close_fin:
+ return change_state(closed);
+ case move_timeout:
+ return change_state(state==opening?timeout_after_open:timeout_after_close);
+ default:
+ printf("Error: event %d not allowed in state %d\n\r", event, state);
+ return;
}
case reset:
case error:
@@ -144,6 +147,11 @@ void statemachine_task_event(void)
(state==closed || state == timeout_after_close) ?
opening:
closing);
+ case open_fin:
+ case close_fin:
+ case move_timeout:
+ printf("Error: event %d not allowed in state %d\n\r", event, state);
+ return;
}
}
diff --git a/usb-i2c-sl018/statemachine.dot b/usb-i2c-sl018/statemachine.dot
index cff0df1..d581de8 100644
--- a/usb-i2c-sl018/statemachine.dot
+++ b/usb-i2c-sl018/statemachine.dot
@@ -29,8 +29,8 @@ digraph G {
opened -> closing [label="toggle"];
closed -> opening [label="cmd_open"];
closed -> opening [label="toggle"];
- opening -> opened [label="limit_open"];
- closing -> closed [label="limit_close"];
+ opening -> opened [label="open_fin"];
+ closing -> closed [label="close_fin"];
closing -> timeout_after_close [label="timeout"];
opening -> timeout_after_open [label="timeout"];
timeout_after_open -> closing [label="cmd_close"];
diff --git a/usb-i2c-sl018/stepper.c b/usb-i2c-sl018/stepper.c
index 7501feb..d555889 100644
--- a/usb-i2c-sl018/stepper.c
+++ b/usb-i2c-sl018/stepper.c
@@ -77,8 +77,14 @@ inline uint8_t handle_step(void)
STEPPER_PORT = (STEPPER_PORT & STEPPER_OUTPUT_BITMASK ) | stepper_output;
step_cnt++;
- if(step_cnt >= STEP_CNT_OFF)
+ if(step_cnt >= STEP_CNT_OFF) {
+ if(step_direction == dir_open)
+ eventqueue_push(open_fin);
+ else
+ eventqueue_push(close_fin);
+
return 0;
+ }
return 1;
}