summaryrefslogtreecommitdiffhomepage
path: root/digital/io/src/elevator.c
diff options
context:
space:
mode:
authorNicolas Haller2009-05-22 13:33:28 +0200
committerNicolas Haller2009-05-22 13:33:28 +0200
commit4ae03c6e14b75e62b9a8b446e6d7ae64c7d0b969 (patch)
treebb6d1cf088487a09a4168317aaefd2dbd9c421e7 /digital/io/src/elevator.c
parentd6647a90f4bfe59968cf0f94443335f2673a32f3 (diff)
* digital/io/src:
- split elevator order into 3 functions
Diffstat (limited to 'digital/io/src/elevator.c')
-rw-r--r--digital/io/src/elevator.c71
1 files changed, 70 insertions, 1 deletions
diff --git a/digital/io/src/elevator.c b/digital/io/src/elevator.c
index 6319501f..1843fb42 100644
--- a/digital/io/src/elevator.c
+++ b/digital/io/src/elevator.c
@@ -43,7 +43,76 @@ uint8_t elvt_new_puck = 0;
/**
* elevator orders
*/
-uint8_t elvt_order = 0;
+elvt_order_e elvt_order_position = CLOSE;
+uint8_t elvt_order_in_progress = 0;
+uint8_t elvt_degraded_mode = 0;
+uint8_t elvt_position_required = 0;
+
+/**
+ * We prepare the elevator
+*/
+void
+elvt_prepare(uint8_t pos)
+{
+ if(elvt_order_position == CLOSE)
+ {
+ elvt_order_in_progress = 1;
+ elvt_order_position = PREPARE;
+ elvt_position_required = pos;
+ }
+ else /* if we are already prepared, just say it's done */
+ elvt_order_in_progress = 0;
+}
+
+/**
+ * We open the elevator
+*/
+void
+elvt_open(uint8_t pos)
+{
+ if(elvt_order_position == PREPARE)
+ {
+ elvt_order_in_progress = 1;
+ elvt_order_position = OPEN;
+ elvt_position_required = pos;
+ elvt_degraded_mode = 0;
+ }
+ else /* We are already open, just say it's done and whistle */
+ elvt_order_in_progress = 0;
+}
+
+/**
+ * We open the elevator in degradad mode
+*/
+void
+elvt_open_degraded(uint8_t pos)
+{
+ if(elvt_order_position == PREPARE)
+ {
+ elvt_order_in_progress = 1;
+ elvt_order_position = OPEN;
+ elvt_position_required = pos;
+ elvt_degraded_mode = 1;
+ }
+ else /* We are already open, just say it's done and whistle */
+ elvt_order_in_progress = 0;
+}
+
+
+/**
+ * We close the elevator and go away
+*/
+void
+elvt_close(void)
+{
+ if(elvt_order_position == OPEN)
+ {
+ elvt_order_in_progress = 1;
+ elvt_order_position = CLOSE;
+ }
+ else /* We are already close, just say it's done and play maracas */
+ elvt_order_in_progress = 0;
+}
/* +AutoDec */
/* -AutoDec */