summaryrefslogtreecommitdiff
path: root/digital/io/src
diff options
context:
space:
mode:
authorNicolas Haller2009-05-22 02:20:13 +0200
committerNicolas Haller2009-05-22 02:20:13 +0200
commita671973979b86e1bc19d2d3adc69c691ff96255f (patch)
treeca9977670af9ef7964237cce0f5a44d1b0dc3192 /digital/io/src
parent817e598cabbb14f5487f6afe3ad0dd0b22faf0af (diff)
* digital/src/io:
- fix on cylinder_cb.c - protection against *_nb_puck < 0
Diffstat (limited to 'digital/io/src')
-rw-r--r--digital/io/src/cylinder.c3
-rw-r--r--digital/io/src/cylinder_cb.c11
-rw-r--r--digital/io/src/filterbridge_cb.c5
-rw-r--r--digital/io/src/main.c5
-rw-r--r--digital/io/src/top_cb.c3
5 files changed, 21 insertions, 6 deletions
diff --git a/digital/io/src/cylinder.c b/digital/io/src/cylinder.c
index af78f144..cceb4013 100644
--- a/digital/io/src/cylinder.c
+++ b/digital/io/src/cylinder.c
@@ -41,4 +41,7 @@ uint8_t cylinder_flush_order = 0;
/* distributor fucked */
uint8_t cylinder_distributor_fucked = 0;
+/* distributor empty */
+uint8_t cylinder_distributor_empty = 0;
+
/* cylinder order */
diff --git a/digital/io/src/cylinder_cb.c b/digital/io/src/cylinder_cb.c
index 6ea2ec76..e29b09e2 100644
--- a/digital/io/src/cylinder_cb.c
+++ b/digital/io/src/cylinder_cb.c
@@ -103,8 +103,9 @@ cylinder__WAIT_A_PUCK__new_puck (void)
fsm_branch_t
cylinder__WAIT_A_PUCK__close_order (void)
{
- asserv_move_arm(-1*60*ASSERV_ARM_STEP_BY_DEGREE,
+ asserv_move_arm(1*60*ASSERV_ARM_STEP_BY_DEGREE,
ASSERV_ARM_SPEED_DEFAULT);
+ /*TODO check new puck */
return cylinder_next (WAIT_A_PUCK, close_order);
}
@@ -157,7 +158,7 @@ cylinder__TURN_PLUS_1_AND_OFO__move_done (void)
/* we verify if we drop a puck to the bridge */
if(puck_on_cylinder)
{
- --cylinder_nb_puck;
+ if(cylinder_nb_puck) --cylinder_nb_puck;
++fb_nb_puck;
}
/* We probe the OF to see if we have a new puck */
@@ -308,7 +309,7 @@ cylinder__TURN_PLUS_3_FLUSH__move_done (void)
cylinder_flush_order = 0;
if(puck_on_cylinder)
{
- --cylinder_nb_puck;
+ if(cylinder_nb_puck) --cylinder_nb_puck;
++fb_nb_puck;
puck_on_cylinder = 0;
}
@@ -325,7 +326,7 @@ cylinder__TURN_PLUS_1_CLOSE__move_done (void)
{
if(puck_on_cylinder)
{
- --cylinder_nb_puck;
+ if(cylinder_nb_puck) --cylinder_nb_puck;
++fb_nb_puck;
puck_on_cylinder = 0;
}
@@ -356,7 +357,7 @@ cylinder__TURN_PLUS_1_AND_OFO_DISTRIB__move_done (void)
{
if(puck_on_cylinder)
{
- --cylinder_nb_puck;
+ if(cylinder_nb_puck) --cylinder_nb_puck;
++fb_nb_puck;
puck_on_cylinder = 0;
}
diff --git a/digital/io/src/filterbridge_cb.c b/digital/io/src/filterbridge_cb.c
index 9393a702..a94260a1 100644
--- a/digital/io/src/filterbridge_cb.c
+++ b/digital/io/src/filterbridge_cb.c
@@ -29,6 +29,8 @@
#include "servo_pos.h"
#include "aquajim.h"
#include "filterbridge.h"
+#include "top.h"
+#include "cylinder.h"
/*
* IDLE =start=>
@@ -128,7 +130,8 @@ fsm_branch_t
filterbridge__TEMPO_ELVETATOR_COMMUNICATION__state_timeout (void)
{
++elvt_nb_puck;
- --fb_nb_puck;
+ if(fb_nb_puck) --fb_nb_puck;
+ top_puck_inside_bot = cylinder_nb_puck + fb_nb_puck + elvt_nb_puck;
elvt_new_puck = 1;
servo_pos_move_to(SERVO_FINGER_ID, SERVO_FINGER_IDLE);
servo_pos_move_to(SERVO_DOOR_ID, SERVO_DOOR_CLOSE);
diff --git a/digital/io/src/main.c b/digital/io/src/main.c
index 6c7d7c7c..869d124e 100644
--- a/digital/io/src/main.c
+++ b/digital/io/src/main.c
@@ -268,6 +268,11 @@ main_event_to_fsm (void)
FSM_HANDLE_EVENT (&cylinder_fsm,
CYLINDER_EVENT_flush_order);
+ /* Generate the cylinder empty distributor. */
+ if (cylinder_distributor_empty)
+ FSM_HANDLE_EVENT (&top_fsm,
+ TOP_EVENT_empty_distributor);
+
/* Jack */
if(switch_get_jack())
{
diff --git a/digital/io/src/top_cb.c b/digital/io/src/top_cb.c
index f349dfa7..84ae020f 100644
--- a/digital/io/src/top_cb.c
+++ b/digital/io/src/top_cb.c
@@ -501,6 +501,7 @@ fsm_branch_t
top__FUCK_THE_DISTRIBUTOR__bot_move_succeed (void)
{
/* TODO: tell it to cylinder. */
+ cylinder_distributor_fucked = 1;
return top_next (FUCK_THE_DISTRIBUTOR, bot_move_succeed);
}
@@ -569,6 +570,8 @@ top__WAIT_FOR_PUCKS__bot_is_full_of_pucks (void)
fsm_branch_t
top__WAIT_FOR_PUCKS__empty_distributor (void)
{
+ /* Rest empty distributor. */
+ cylinder_distributor_empty = 0;
if (!top_puck_inside_bot || chrono_remaining_time () > TOP_TIME_LIMIT)
{
remember_distributor = 1;