[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