summaryrefslogtreecommitdiff
path: root/digital/io-hub/src/robospierre/logistic.c
diff options
context:
space:
mode:
authorNicolas Schodet2011-06-02 13:38:25 +0200
committerNicolas Schodet2011-06-03 23:36:53 +0200
commit0ee500d39cf65c776b02d26bd44d7c0e8fcfb8b7 (patch)
treed7083a90d6f64926c8e8e1d6a29df77107f29cbe /digital/io-hub/src/robospierre/logistic.c
parent5c915c07f8440097109763848d4fc0e06ea8078d (diff)
digital/io-hub: handle tower detection
Diffstat (limited to 'digital/io-hub/src/robospierre/logistic.c')
-rw-r--r--digital/io-hub/src/robospierre/logistic.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/digital/io-hub/src/robospierre/logistic.c b/digital/io-hub/src/robospierre/logistic.c
index f9b13427..629ee0c1 100644
--- a/digital/io-hub/src/robospierre/logistic.c
+++ b/digital/io-hub/src/robospierre/logistic.c
@@ -574,12 +574,22 @@ logistic_dump (void)
static uint8_t
logistic_slot_clear (uint8_t slot)
{
- if (CLAMP_IS_SLOT_IN_FRONT_BAY (slot)
- && ctx.slots[CLAMP_SLOT_FRONT_MIDDLE])
- return 0;
- if (CLAMP_IS_SLOT_IN_BACK_BAY (slot)
- && ctx.slots[CLAMP_SLOT_BACK_MIDDLE])
- return 0;
+ if (CLAMP_IS_SLOT_IN_FRONT_BAY (slot))
+ {
+ if (ctx.slots[CLAMP_SLOT_FRONT_MIDDLE])
+ return 0;
+ uint8_t middle_type = ctx.slots[CLAMP_SLOT_FRONT_BOTTOM];
+ if (ELEMENT_IS_HEAD (middle_type) || middle_type == ELEMENT_TOWER)
+ return 0;
+ }
+ else if (CLAMP_IS_SLOT_IN_BACK_BAY (slot))
+ {
+ if (ctx.slots[CLAMP_SLOT_BACK_MIDDLE])
+ return 0;
+ uint8_t middle_type = ctx.slots[CLAMP_SLOT_BACK_BOTTOM];
+ if (ELEMENT_IS_HEAD (middle_type) || middle_type == ELEMENT_TOWER)
+ return 0;
+ }
return 1;
}