From 90bb1981a6367d276d564f8a4625b81b8646fe21 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Thu, 17 May 2012 06:17:37 +0200 Subject: digital/io-hub/src/guybrush: give up on catastrophic failure --- digital/io-hub/src/guybrush/strat.c | 12 ++++++++++++ digital/io-hub/src/guybrush/strat.h | 4 ++++ digital/io-hub/src/guybrush/top.c | 6 +++--- 3 files changed, 19 insertions(+), 3 deletions(-) (limited to 'digital') diff --git a/digital/io-hub/src/guybrush/strat.c b/digital/io-hub/src/guybrush/strat.c index 257e9b5a..d4742d4c 100644 --- a/digital/io-hub/src/guybrush/strat.c +++ b/digital/io-hub/src/guybrush/strat.c @@ -240,3 +240,15 @@ strat_failure (void) } } +void +strat_giveup (void) +{ + switch (strat.last_decision) + { + default: + strat.place[strat.last_place].valid = 0; + break; + case STRAT_DECISION_UNLOAD: + assert (0); + } +} diff --git a/digital/io-hub/src/guybrush/strat.h b/digital/io-hub/src/guybrush/strat.h index 36bed598..7dd24e1d 100644 --- a/digital/io-hub/src/guybrush/strat.h +++ b/digital/io-hub/src/guybrush/strat.h @@ -57,4 +57,8 @@ strat_success (void); void strat_failure (void); +/** Report a failure of last decision, never try again. */ +void +strat_giveup (void); + #endif /* strat_h */ diff --git a/digital/io-hub/src/guybrush/top.c b/digital/io-hub/src/guybrush/top.c index 8f80e174..75d157d9 100644 --- a/digital/io-hub/src/guybrush/top.c +++ b/digital/io-hub/src/guybrush/top.c @@ -351,7 +351,7 @@ FSM_TRANS (TOP_TOTEM_GOING, move_failure, TOP_DECISION) FSM_TRANS (TOP_TOTEM_APPROACHING, robot_move_failure, TOP_TOTEM_ERROR_GOING_BACK) { - strat_failure (); + strat_giveup (); move_start_noangle (top.decision_pos, ASSERV_BACKWARD, 0); return FSM_NEXT (TOP_TOTEM_APPROACHING, robot_move_failure); } @@ -359,14 +359,14 @@ FSM_TRANS (TOP_TOTEM_APPROACHING, robot_move_failure, FSM_TRANS (TOP_TOTEM_PUSHING, robot_move_failure, TOP_TOTEM_ERROR_GOING_BACK) { - strat_failure (); + strat_giveup (); move_start_noangle (top.decision_pos, ASSERV_BACKWARD, 0); return FSM_NEXT (TOP_TOTEM_PUSHING, robot_move_failure); } FSM_TRANS (TOP_TOTEM_GOING_BACK, move_failure, TOP_TOTEM_ERROR_RELEASE) { - strat_failure (); + strat_giveup (); FSM_HANDLE (AI, stop_tree_approach); return FSM_NEXT (TOP_TOTEM_GOING_BACK, move_failure); } -- cgit v1.2.3