[PATCH] rtems: Add rtems_status_code_description()

Joel Sherrill joel.sherrill at OARcorp.com
Wed Feb 5 16:34:51 UTC 2014


This is redundant with rtems_status_text() which has been in the tree for
years.  Chris wrote this years ago cpukit/libcsupport/src/error.c

It does not appear to be in the user's guide but I have included it in the
class for as long as I can remember.

It is referenced in 36 files in the source tree.

--joel

On 2/5/2014 10:25 AM, Sebastian Huber wrote:
> ---
>  cpukit/rtems/Makefile.am                           |    1 +
>  cpukit/rtems/include/rtems/rtems/status.h          |   10 +++
>  cpukit/rtems/src/statusdesc.c                      |   69 ++++++++++++++++++++
>  doc/user/Makefile.am                               |   11 ++-
>  doc/user/dirstat.t                                 |   64 ++++++++++++++++++
>  doc/user/dirstat.texi                              |   37 -----------
>  doc/user/example.texi                              |    2 +-
>  testsuites/sptests/spinternalerror02/init.c        |   21 ++++++-
>  .../spinternalerror02/spinternalerror02.scn        |   31 +++++++++
>  9 files changed, 203 insertions(+), 43 deletions(-)
>  create mode 100644 cpukit/rtems/src/statusdesc.c
>  create mode 100644 doc/user/dirstat.t
>  delete mode 100644 doc/user/dirstat.texi
>
> diff --git a/cpukit/rtems/Makefile.am b/cpukit/rtems/Makefile.am
> index fd5af5a..f219db8 100644
> --- a/cpukit/rtems/Makefile.am
> +++ b/cpukit/rtems/Makefile.am
> @@ -255,6 +255,7 @@ librtems_a_SOURCES += src/workspacegreedy.c
>  librtems_a_SOURCES += src/modes.c
>
>  librtems_a_SOURCES += src/status.c
> +librtems_a_SOURCES += src/statusdesc.c
>
>  if HAS_MP
>  # We only build multiprocessing related files if HAS_MP was defined
> diff --git a/cpukit/rtems/include/rtems/rtems/status.h b/cpukit/rtems/include/rtems/rtems/status.h
> index 8904288..19df500 100644
> --- a/cpukit/rtems/include/rtems/rtems/status.h
> +++ b/cpukit/rtems/include/rtems/rtems/status.h
> @@ -241,6 +241,16 @@ RTEMS_INLINE_ROUTINE bool rtems_are_statuses_equal(
>   */
>  int rtems_status_code_to_errno(rtems_status_code sc);
>
> +/**
> + * @brief Returns a description for a status code.
> + *
> + * @param[in] code The status code.
> + *
> + * @retval description The status code description.
> + * @retval ? The passed status code is invalid.
> + */
> +const char *rtems_status_code_description( rtems_status_code code );
> +
>  /**@}*/
>
>  #ifdef __cplusplus
> diff --git a/cpukit/rtems/src/statusdesc.c b/cpukit/rtems/src/statusdesc.c
> new file mode 100644
> index 0000000..4cc426d
> --- /dev/null
> +++ b/cpukit/rtems/src/statusdesc.c
> @@ -0,0 +1,69 @@
> +/**
> + * @file
> + *
> + * @ingroup ClassicStatus
> + */
> +
> +/*
> + * Copyright (c) 2014 embedded brains GmbH.  All rights reserved.
> + *
> + *  embedded brains GmbH
> + *  Dornierstr. 4
> + *  82178 Puchheim
> + *  Germany
> + *  <rtems at embedded-brains.de>
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.com/license/LICENSE.
> + */
> +
> +#if HAVE_CONFIG_H
> +  #include "config.h"
> +#endif
> +
> +#include <rtems.h>
> +
> +static const char *const status_code_desc[] = {
> +  "RTEMS_SUCCESSFUL",
> +  "RTEMS_TASK_EXITTED",
> +  "RTEMS_MP_NOT_CONFIGURED",
> +  "RTEMS_INVALID_NAME",
> +  "RTEMS_INVALID_ID",
> +  "RTEMS_TOO_MANY",
> +  "RTEMS_TIMEOUT",
> +  "RTEMS_OBJECT_WAS_DELETED",
> +  "RTEMS_INVALID_SIZE",
> +  "RTEMS_INVALID_ADDRESS",
> +  "RTEMS_INVALID_NUMBER",
> +  "RTEMS_NOT_DEFINED",
> +  "RTEMS_RESOURCE_IN_USE",
> +  "RTEMS_UNSATISFIED",
> +  "RTEMS_INCORRECT_STATE",
> +  "RTEMS_ALREADY_SUSPENDED",
> +  "RTEMS_ILLEGAL_ON_SELF",
> +  "RTEMS_ILLEGAL_ON_REMOTE_OBJECT",
> +  "RTEMS_CALLED_FROM_ISR",
> +  "RTEMS_INVALID_PRIORITY",
> +  "RTEMS_INVALID_CLOCK",
> +  "RTEMS_INVALID_NODE",
> +  "RTEMS_NOT_CONFIGURED",
> +  "RTEMS_NOT_OWNER_OF_RESOURCE",
> +  "RTEMS_NOT_IMPLEMENTED",
> +  "RTEMS_INTERNAL_ERROR",
> +  "RTEMS_NO_MEMORY",
> +  "RTEMS_IO_ERROR",
> +  "RTEMS_PROXY_BLOCKING"
> +};
> +
> +const char *rtems_status_code_description( rtems_status_code code )
> +{
> +  size_t i = code;
> +  const char *desc = "?";
> +
> +  if ( i < RTEMS_ARRAY_SIZE( status_code_desc ) ) {
> +    desc = status_code_desc [i];
> +  }
> +
> +  return desc;
> +}
> diff --git a/doc/user/Makefile.am b/doc/user/Makefile.am
> index 7992b29..1b6ddcb 100644
> --- a/doc/user/Makefile.am
> +++ b/doc/user/Makefile.am
> @@ -8,14 +8,14 @@ PROJECT = c_user
>  include $(top_srcdir)/project.am
>  include $(top_srcdir)/main.am
>
> -FILES = bsp.texi dirstat.texi example.texi glossary.texi preface.texi
> +FILES = bsp.texi example.texi glossary.texi preface.texi
>
>  GENERATED_FILES = overview.texi concepts.texi datatypes.texi init.texi \
>      task.texi intr.texi clock.texi timer.texi sem.texi msg.texi event.texi \
>      signal.texi part.texi region.texi dpmem.texi io.texi fatal.texi \
>      schedule.texi rtmon.texi barrier.texi bsp.texi userext.texi conf.texi \
>      mp.texi stackchk.texi cpuuse.texi object.texi chains.texi timespec.texi \
> -    cbs.texi
> +    cbs.texi dirstat.texi
>
>  COMMON_FILES += $(top_srcdir)/common/cpright.texi
>
> @@ -193,10 +193,15 @@ cbs.texi: cbs.t
>             -u "Top" \
>             -n "Directive Status Codes" < $< > $@
>
> +dirstat.texi: dirstat.t
> +       $(BMENU2) -p "Constant Bandwidth Server Scheduler API CBS_GET_APPROVED_BUDGET - Get scheduler approved execution time" \
> +           -u "Top" \
> +           -n "Example Application" < $< > $@
> +
>  EXTRA_DIST = bsp.t cbs.t clock.t chains.t concepts.t cpuuse.t datatypes.t conf.t \
>      dpmem.t event.t fatal.t init.t intr.t io.t mp.t msg.t overview.t \
>      part.t region.t rtmon.t sem.t schedule.t signal.t stackchk.t \
> -    task.t timer.t userext.t $(TXT_FILES) $(PNG_FILES) $(EPS_IMAGES) \
> +    task.t timer.t userext.t dirstat.t $(TXT_FILES) $(PNG_FILES) $(EPS_IMAGES) \
>      $(noinst_DATA)
>
>  CLEANFILES += c_user.info c_user.info-? c_user.info-??
> diff --git a/doc/user/dirstat.t b/doc/user/dirstat.t
> new file mode 100644
> index 0000000..adb675d
> --- /dev/null
> +++ b/doc/user/dirstat.t
> @@ -0,0 +1,64 @@
> + at c
> + at c  COPYRIGHT (c) 1989-2011.
> + at c  On-Line Applications Research Corporation (OAR).
> + at c  All rights reserved.
> +
> + at chapter Directive Status Codes
> +
> + at section Introduction
> +
> + at table @b
> + at item @code{@value{RPREFIX}SUCCESSFUL} - successful completion
> + at item @code{@value{RPREFIX}TASK_EXITTED} - returned from a task
> + at item @code{@value{RPREFIX}MP_NOT_CONFIGURED} - multiprocessing not configured
> + at item @code{@value{RPREFIX}INVALID_NAME} - invalid object name
> + at item @code{@value{RPREFIX}INVALID_ID} - invalid object id
> + at item @code{@value{RPREFIX}TOO_MANY} - too many
> + at item @code{@value{RPREFIX}TIMEOUT} - timed out waiting
> + at item @code{@value{RPREFIX}OBJECT_WAS_DELETED} - object was deleted while waiting
> + at item @code{@value{RPREFIX}INVALID_SIZE} - invalid specified size
> + at item @code{@value{RPREFIX}INVALID_ADDRESS} - invalid address specified
> + at item @code{@value{RPREFIX}INVALID_NUMBER} - number was invalid
> + at item @code{@value{RPREFIX}NOT_DEFINED} - item not initialized
> + at item @code{@value{RPREFIX}RESOURCE_IN_USE} - resources outstanding
> + at item @code{@value{RPREFIX}UNSATISFIED} - request not satisfied
> + at item @code{@value{RPREFIX}INCORRECT_STATE} - task is in wrong state
> + at item @code{@value{RPREFIX}ALREADY_SUSPENDED} - task already in state
> + at item @code{@value{RPREFIX}ILLEGAL_ON_SELF} - illegal for calling task
> + at item @code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - illegal for remote object
> + at item @code{@value{RPREFIX}CALLED_FROM_ISR} - invalid environment
> + at item @code{@value{RPREFIX}INVALID_PRIORITY} - invalid task priority
> + at item @code{@value{RPREFIX}INVALID_CLOCK} - invalid time buffer
> + at item @code{@value{RPREFIX}INVALID_NODE} - invalid node id
> + at item @code{@value{RPREFIX}NOT_CONFIGURED} - directive not configured
> + at item @code{@value{RPREFIX}NOT_OWNER_OF_RESOURCE} - not owner of resource
> + at item @code{@value{RPREFIX}NOT_IMPLEMENTED} - directive not implemented
> + at item @code{@value{RPREFIX}INTERNAL_ERROR} - RTEMS inconsistency detected
> + at item @code{@value{RPREFIX}NO_MEMORY} - could not get enough memory
> + at end table
> +
> + at section Directives
> +
> + at page
> + at subsection STATUS_CODE_DESCRIPTION - Returns a description for a status code
> +
> + at cindex fatal error
> +
> + at subheading CALLING SEQUENCE:
> +
> + at ifset is-C
> + at findex rtems_status_code_description
> + at example
> +const char *rtems_status_code_description(
> +  rtems_status_code code
> +);
> + at end example
> + at end ifset
> +
> + at subheading DIRECTIVE STATUS CODES
> +
> +The status code description or "?" in case the passed status code is invalid.
> +
> + at subheading DESCRIPTION:
> +
> +Returns a description for a status code.
> diff --git a/doc/user/dirstat.texi b/doc/user/dirstat.texi
> deleted file mode 100644
> index 17a7edd..0000000
> --- a/doc/user/dirstat.texi
> +++ /dev/null
> @@ -1,37 +0,0 @@
> - at c
> - at c  COPYRIGHT (c) 1989-2011.
> - at c  On-Line Applications Research Corporation (OAR).
> - at c  All rights reserved.
> -
> - at node Directive Status Codes, Example Application, Constant Bandwidth Server Scheduler API CBS_GET_APPROVED_BUDGET - Get scheduler approved execution time, Top
> - at chapter Directive Status Codes
> - at table @b
> - at item @code{@value{RPREFIX}SUCCESSFUL} - successful completion
> - at item @code{@value{RPREFIX}TASK_EXITTED} - returned from a task
> - at item @code{@value{RPREFIX}MP_NOT_CONFIGURED} - multiprocessing not configured
> - at item @code{@value{RPREFIX}INVALID_NAME} - invalid object name
> - at item @code{@value{RPREFIX}INVALID_ID} - invalid object id
> - at item @code{@value{RPREFIX}TOO_MANY} - too many
> - at item @code{@value{RPREFIX}TIMEOUT} - timed out waiting
> - at item @code{@value{RPREFIX}OBJECT_WAS_DELETED} - object was deleted while waiting
> - at item @code{@value{RPREFIX}INVALID_SIZE} - invalid specified size
> - at item @code{@value{RPREFIX}INVALID_ADDRESS} - invalid address specified
> - at item @code{@value{RPREFIX}INVALID_NUMBER} - number was invalid
> - at item @code{@value{RPREFIX}NOT_DEFINED} - item not initialized
> - at item @code{@value{RPREFIX}RESOURCE_IN_USE} - resources outstanding
> - at item @code{@value{RPREFIX}UNSATISFIED} - request not satisfied
> - at item @code{@value{RPREFIX}INCORRECT_STATE} - task is in wrong state
> - at item @code{@value{RPREFIX}ALREADY_SUSPENDED} - task already in state
> - at item @code{@value{RPREFIX}ILLEGAL_ON_SELF} - illegal for calling task
> - at item @code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - illegal for remote object
> - at item @code{@value{RPREFIX}CALLED_FROM_ISR} - invalid environment
> - at item @code{@value{RPREFIX}INVALID_PRIORITY} - invalid task priority
> - at item @code{@value{RPREFIX}INVALID_CLOCK} - invalid time buffer
> - at item @code{@value{RPREFIX}INVALID_NODE} - invalid node id
> - at item @code{@value{RPREFIX}NOT_CONFIGURED} - directive not configured
> - at item @code{@value{RPREFIX}NOT_OWNER_OF_RESOURCE} - not owner of resource
> - at item @code{@value{RPREFIX}NOT_IMPLEMENTED} - directive not implemented
> - at item @code{@value{RPREFIX}INTERNAL_ERROR} - RTEMS inconsistency detected
> - at item @code{@value{RPREFIX}NO_MEMORY} - could not get enough memory
> - at end table
> -
> diff --git a/doc/user/example.texi b/doc/user/example.texi
> index f95868e..71a71ab 100644
> --- a/doc/user/example.texi
> +++ b/doc/user/example.texi
> @@ -3,7 +3,7 @@
>  @c  On-Line Applications Research Corporation (OAR).
>  @c  All rights reserved.
>
> - at node Example Application, Glossary, Directive Status Codes, Top
> + at node Example Application, Glossary, Directive Status Codes STATUS_CODE_DESCRIPTION - Returns a description for a status code, Top
>  @chapter Example Application
>
>  @example
> diff --git a/testsuites/sptests/spinternalerror02/init.c b/testsuites/sptests/spinternalerror02/init.c
> index 4b89e6c..b08a7d4 100644
> --- a/testsuites/sptests/spinternalerror02/init.c
> +++ b/testsuites/sptests/spinternalerror02/init.c
> @@ -1,8 +1,8 @@
>  /*
> - * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
> + * Copyright (c) 2012-2014 embedded brains GmbH.  All rights reserved.
>   *
>   *  embedded brains GmbH
> - *  Obere Lagerstr. 30
> + *  Donierstr. 4
>   *  82178 Puchheim
>   *  Germany
>   *  <rtems at embedded-brains.de>
> @@ -52,12 +52,29 @@ static void test_fatal_source_description(void)
>    rtems_test_assert( source - 3 == RTEMS_FATAL_SOURCE_EXCEPTION );
>  }
>
> +static void test_status_code_description(void)
> +{
> +  rtems_status_code code = 0;
> +  const char *desc = NULL;
> +  const char *desc_last;
> +
> +  do {
> +    desc_last = desc;
> +    desc = rtems_status_code_description( code );
> +    ++code;
> +    puts( desc );
> +  } while ( desc != desc_last );
> +
> +  rtems_test_assert( code - 3 == RTEMS_PROXY_BLOCKING );
> +}
> +
>  static void Init(rtems_task_argument arg)
>  {
>    puts("\n\n*** TEST SPINTERNALERROR 2 ***");
>
>    test_internal_error_description();
>    test_fatal_source_description();
> +  test_status_code_description();
>
>    puts("*** END OF TEST SPINTERNALERROR 2 ***");
>
> diff --git a/testsuites/sptests/spinternalerror02/spinternalerror02.scn b/testsuites/sptests/spinternalerror02/spinternalerror02.scn
> index 9d7a722..65fd425 100644
> --- a/testsuites/sptests/spinternalerror02/spinternalerror02.scn
> +++ b/testsuites/sptests/spinternalerror02/spinternalerror02.scn
> @@ -39,4 +39,35 @@ RTEMS_FATAL_SOURCE_STACK_CHECKER
>  RTEMS_FATAL_SOURCE_EXCEPTION
>  ?
>  ?
> +RTEMS_SUCCESSFUL
> +RTEMS_TASK_EXITTED
> +RTEMS_MP_NOT_CONFIGURED
> +RTEMS_INVALID_NAME
> +RTEMS_INVALID_ID
> +RTEMS_TOO_MANY
> +RTEMS_TIMEOUT
> +RTEMS_OBJECT_WAS_DELETED
> +RTEMS_INVALID_SIZE
> +RTEMS_INVALID_ADDRESS
> +RTEMS_INVALID_NUMBER
> +RTEMS_NOT_DEFINED
> +RTEMS_RESOURCE_IN_USE
> +RTEMS_UNSATISFIED
> +RTEMS_INCORRECT_STATE
> +RTEMS_ALREADY_SUSPENDED
> +RTEMS_ILLEGAL_ON_SELF
> +RTEMS_ILLEGAL_ON_REMOTE_OBJECT
> +RTEMS_CALLED_FROM_ISR
> +RTEMS_INVALID_PRIORITY
> +RTEMS_INVALID_CLOCK
> +RTEMS_INVALID_NODE
> +RTEMS_NOT_CONFIGURED
> +RTEMS_NOT_OWNER_OF_RESOURCE
> +RTEMS_NOT_IMPLEMENTED
> +RTEMS_INTERNAL_ERROR
> +RTEMS_NO_MEMORY
> +RTEMS_IO_ERROR
> +RTEMS_PROXY_BLOCKING
> +?
> +?
>  *** END OF TEST SPINTERNALERROR 2 ***
> --
> 1.7.7
>
> _______________________________________________
> rtems-devel mailing list
> rtems-devel at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-devel

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985




More information about the devel mailing list