Skip to content

Commit

Permalink
user friendly error messages for invalid transitions
Browse files Browse the repository at this point in the history
  • Loading branch information
skucheria committed May 21, 2019
1 parent 0736f93 commit bcabfa5
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 3 deletions.
4 changes: 4 additions & 0 deletions rcl_action/include/rcl_action/goal_handle.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ extern "C"
/// Internal rcl action goal implementation struct.
struct rcl_action_goal_handle_impl_t;

/// User friendly error messages for invalid trasntions
extern const char * goal_state_descriptions[];
extern const char * goal_event_descriptions[];

/// Goal handle for an action.
typedef struct rcl_action_goal_handle_t
{
Expand Down
1 change: 1 addition & 0 deletions rcl_action/include/rcl_action/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ typedef int8_t rcl_action_goal_state_t;
#define GOAL_STATE_ABORTED action_msgs__msg__GoalStatus__STATUS_ABORTED
#define GOAL_STATE_NUM_STATES 7


/// Goal state transition events
typedef enum rcl_action_goal_event_t
{
Expand Down
13 changes: 10 additions & 3 deletions rcl_action/src/rcl_action/goal_handle.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ extern "C"
#include "rcl/rcl.h"
#include "rcl/error_handling.h"

const char * goal_state_descriptions[] =
{"UNKNOWN", "ACCEPTED", "EXECUTING", "CANCELING", "SUCCEEDED", "CANCELED", "ABORTED"};

const char * goal_event_descriptions[] =
{"EXECUTE", "CANCEL_GOAL", "SUCCEED", "ABORT", "CANCELED", "NUM_EVENTS"};


typedef struct rcl_action_goal_handle_impl_t
{
rcl_action_goal_info_t info;
Expand Down Expand Up @@ -89,9 +96,9 @@ rcl_action_update_goal_state(
goal_handle->impl->state, goal_event);
if (GOAL_STATE_UNKNOWN == new_state) {
RCL_SET_ERROR_MSG_WITH_FORMAT_STRING(
"goal_handle attempted invalid transition from state %d with event %d",
goal_handle->impl->state,
goal_event);
"goal_handle attempted invalid transition from state %s with event %s",
goal_state_descriptions[goal_handle->impl->state],
goal_event_descriptions[goal_event]);
return RCL_RET_ACTION_GOAL_EVENT_INVALID;
}
goal_handle->impl->state = new_state;
Expand Down

0 comments on commit bcabfa5

Please sign in to comment.