From a671973979b86e1bc19d2d3adc69c691ff96255f Mon Sep 17 00:00:00 2001 From: Nicolas Haller Date: Fri, 22 May 2009 02:20:13 +0200 Subject: * digital/src/io: - fix on cylinder_cb.c - protection against *_nb_puck < 0 --- digital/io/src/cylinder.c | 3 +++ digital/io/src/cylinder_cb.c | 11 ++++++----- digital/io/src/filterbridge_cb.c | 5 ++++- digital/io/src/main.c | 5 +++++ digital/io/src/top_cb.c | 3 +++ 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; -- cgit v1.2.3