diff --git a/rcl_action/include/rcl_action/types.h b/rcl_action/include/rcl_action/types.h index 783165b..dee4c23 100644 --- a/rcl_action/include/rcl_action/types.h +++ b/rcl_action/include/rcl_action/types.h @@ -93,6 +93,11 @@ typedef int8_t rcl_action_goal_state_t; #define GOAL_STATE_ABORTED action_msgs__msg__GoalStatus__STATUS_ABORTED #define GOAL_STATE_NUM_STATES 7 +/// User friendly error messages for invalid trasntions +// Description variables in types.c should be changed if enum values change +extern const char * goal_state_descriptions[]; +extern const char * goal_event_descriptions[]; + /// Goal state transition events typedef enum rcl_action_goal_event_t { diff --git a/rcl_action/src/rcl_action/goal_handle.c b/rcl_action/src/rcl_action/goal_handle.c index e456042..f86f96c 100644 --- a/rcl_action/src/rcl_action/goal_handle.c +++ b/rcl_action/src/rcl_action/goal_handle.c @@ -89,9 +89,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; diff --git a/rcl_action/src/rcl_action/types.c b/rcl_action/src/rcl_action/types.c index 4e6ce33..03c9cbe 100644 --- a/rcl_action/src/rcl_action/types.c +++ b/rcl_action/src/rcl_action/types.c @@ -132,6 +132,13 @@ rcl_action_cancel_response_fini(rcl_action_cancel_response_t * cancel_response) return RCL_RET_OK; } +/// Values should be changed if enum values change +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"}; + #ifdef __cplusplus } #endif