summaryrefslogtreecommitdiffhomepage
path: root/digital
diff options
context:
space:
mode:
authorNicolas Schodet2011-05-22 22:03:17 +0200
committerNicolas Schodet2011-05-22 22:03:17 +0200
commit4d89714a05aeb17126d206e6003bf922a37966ab (patch)
treeb495e55c6ab80cbe577d5a02d45b08a74b569509 /digital
parent976a1f968ddf6b1c635813aeadc76d4536fbe18f (diff)
digital/io-hub: add door/clamp command
Diffstat (limited to 'digital')
-rw-r--r--digital/io-hub/src/robospierre/clamp.c19
-rw-r--r--digital/io-hub/src/robospierre/clamp.h4
-rw-r--r--digital/io-hub/src/robospierre/main.c6
3 files changed, 29 insertions, 0 deletions
diff --git a/digital/io-hub/src/robospierre/clamp.c b/digital/io-hub/src/robospierre/clamp.c
index 0172d891..b32549d2 100644
--- a/digital/io-hub/src/robospierre/clamp.c
+++ b/digital/io-hub/src/robospierre/clamp.c
@@ -221,6 +221,25 @@ clamp_drop_clear (void)
FSM_HANDLE (AI, clamp_drop_clear);
}
+void
+clamp_door (uint8_t pos, uint8_t open)
+{
+ if (pos == 0xff)
+ {
+ if (open)
+ pwm_set_timed (BOT_PWM_CLAMP, BOT_PWM_CLAMP_OPEN);
+ else
+ pwm_set_timed (BOT_PWM_CLAMP, BOT_PWM_CLAMP_CLOSE);
+ }
+ else if (clamp_slot_door[pos] != 0xff)
+ {
+ if (open)
+ pwm_set_timed (clamp_slot_door[pos], BOT_PWM_DOOR_OPEN);
+ else
+ pwm_set_timed (clamp_slot_door[pos], BOT_PWM_DOOR_CLOSE (pos));
+ }
+}
+
uint8_t
clamp_handle_event (void)
{
diff --git a/digital/io-hub/src/robospierre/clamp.h b/digital/io-hub/src/robospierre/clamp.h
index 7471ceac..231c3a84 100644
--- a/digital/io-hub/src/robospierre/clamp.h
+++ b/digital/io-hub/src/robospierre/clamp.h
@@ -81,6 +81,10 @@ clamp_drop (uint8_t drop_direction);
void
clamp_drop_clear (void);
+/** Open/close door (pos = slot) or clamp (pos = 0xff). */
+void
+clamp_door (uint8_t pos, uint8_t open);
+
/** Examine sensors to generate new events, return non zero if an event was
* generated. */
uint8_t
diff --git a/digital/io-hub/src/robospierre/main.c b/digital/io-hub/src/robospierre/main.c
index 7d962f47..4e75a92e 100644
--- a/digital/io-hub/src/robospierre/main.c
+++ b/digital/io-hub/src/robospierre/main.c
@@ -253,6 +253,12 @@ proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
else
clamp_drop (args[0]);
break;
+ case c ('d', 2):
+ /* Open or close door or clamp.
+ * - 1b: pos, or 0xff for clamp.
+ * - 1b: non zero to open. */
+ clamp_door (args[0], args[1]);
+ break;
/* Stats commands.
* - b: interval between stats. */
case c ('A', 1):