From 920a43e6392dfe60ad8bf4bcce73fd1c97d6aa5a Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 5 Feb 2014 17:00:09 +0100 Subject: rtems: Add rtems_status_code_description() --- 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 fd5af5aaa1..f219db8d7b 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 89042883fb..19df500497 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 0000000000..4cc426d0a9 --- /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 + * + * + * 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 + +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 7992b29005..1b6ddcb7e4 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 0000000000..adb675d613 --- /dev/null +++ b/doc/user/dirstat.t @@ -0,0 +1,64 @@ +@c +@c COPYRIGHT (c) 1989-2011. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. + +@chapter Directive Status Codes + +@section Introduction + +@table @b +@item @code{@value{RPREFIX}SUCCESSFUL} - successful completion +@item @code{@value{RPREFIX}TASK_EXITTED} - returned from a task +@item @code{@value{RPREFIX}MP_NOT_CONFIGURED} - multiprocessing not configured +@item @code{@value{RPREFIX}INVALID_NAME} - invalid object name +@item @code{@value{RPREFIX}INVALID_ID} - invalid object id +@item @code{@value{RPREFIX}TOO_MANY} - too many +@item @code{@value{RPREFIX}TIMEOUT} - timed out waiting +@item @code{@value{RPREFIX}OBJECT_WAS_DELETED} - object was deleted while waiting +@item @code{@value{RPREFIX}INVALID_SIZE} - invalid specified size +@item @code{@value{RPREFIX}INVALID_ADDRESS} - invalid address specified +@item @code{@value{RPREFIX}INVALID_NUMBER} - number was invalid +@item @code{@value{RPREFIX}NOT_DEFINED} - item not initialized +@item @code{@value{RPREFIX}RESOURCE_IN_USE} - resources outstanding +@item @code{@value{RPREFIX}UNSATISFIED} - request not satisfied +@item @code{@value{RPREFIX}INCORRECT_STATE} - task is in wrong state +@item @code{@value{RPREFIX}ALREADY_SUSPENDED} - task already in state +@item @code{@value{RPREFIX}ILLEGAL_ON_SELF} - illegal for calling task +@item @code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - illegal for remote object +@item @code{@value{RPREFIX}CALLED_FROM_ISR} - invalid environment +@item @code{@value{RPREFIX}INVALID_PRIORITY} - invalid task priority +@item @code{@value{RPREFIX}INVALID_CLOCK} - invalid time buffer +@item @code{@value{RPREFIX}INVALID_NODE} - invalid node id +@item @code{@value{RPREFIX}NOT_CONFIGURED} - directive not configured +@item @code{@value{RPREFIX}NOT_OWNER_OF_RESOURCE} - not owner of resource +@item @code{@value{RPREFIX}NOT_IMPLEMENTED} - directive not implemented +@item @code{@value{RPREFIX}INTERNAL_ERROR} - RTEMS inconsistency detected +@item @code{@value{RPREFIX}NO_MEMORY} - could not get enough memory +@end table + +@section Directives + +@page +@subsection STATUS_CODE_DESCRIPTION - Returns a description for a status code + +@cindex fatal error + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_status_code_description +@example +const char *rtems_status_code_description( + rtems_status_code code +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES + +The status code description or "?" in case the passed status code is invalid. + +@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 17a7edd90e..0000000000 --- a/doc/user/dirstat.texi +++ /dev/null @@ -1,37 +0,0 @@ -@c -@c COPYRIGHT (c) 1989-2011. -@c On-Line Applications Research Corporation (OAR). -@c All rights reserved. - -@node Directive Status Codes, Example Application, Constant Bandwidth Server Scheduler API CBS_GET_APPROVED_BUDGET - Get scheduler approved execution time, Top -@chapter Directive Status Codes -@table @b -@item @code{@value{RPREFIX}SUCCESSFUL} - successful completion -@item @code{@value{RPREFIX}TASK_EXITTED} - returned from a task -@item @code{@value{RPREFIX}MP_NOT_CONFIGURED} - multiprocessing not configured -@item @code{@value{RPREFIX}INVALID_NAME} - invalid object name -@item @code{@value{RPREFIX}INVALID_ID} - invalid object id -@item @code{@value{RPREFIX}TOO_MANY} - too many -@item @code{@value{RPREFIX}TIMEOUT} - timed out waiting -@item @code{@value{RPREFIX}OBJECT_WAS_DELETED} - object was deleted while waiting -@item @code{@value{RPREFIX}INVALID_SIZE} - invalid specified size -@item @code{@value{RPREFIX}INVALID_ADDRESS} - invalid address specified -@item @code{@value{RPREFIX}INVALID_NUMBER} - number was invalid -@item @code{@value{RPREFIX}NOT_DEFINED} - item not initialized -@item @code{@value{RPREFIX}RESOURCE_IN_USE} - resources outstanding -@item @code{@value{RPREFIX}UNSATISFIED} - request not satisfied -@item @code{@value{RPREFIX}INCORRECT_STATE} - task is in wrong state -@item @code{@value{RPREFIX}ALREADY_SUSPENDED} - task already in state -@item @code{@value{RPREFIX}ILLEGAL_ON_SELF} - illegal for calling task -@item @code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - illegal for remote object -@item @code{@value{RPREFIX}CALLED_FROM_ISR} - invalid environment -@item @code{@value{RPREFIX}INVALID_PRIORITY} - invalid task priority -@item @code{@value{RPREFIX}INVALID_CLOCK} - invalid time buffer -@item @code{@value{RPREFIX}INVALID_NODE} - invalid node id -@item @code{@value{RPREFIX}NOT_CONFIGURED} - directive not configured -@item @code{@value{RPREFIX}NOT_OWNER_OF_RESOURCE} - not owner of resource -@item @code{@value{RPREFIX}NOT_IMPLEMENTED} - directive not implemented -@item @code{@value{RPREFIX}INTERNAL_ERROR} - RTEMS inconsistency detected -@item @code{@value{RPREFIX}NO_MEMORY} - could not get enough memory -@end table - diff --git a/doc/user/example.texi b/doc/user/example.texi index f95868e88e..71a71ab015 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. -@node Example Application, Glossary, Directive Status Codes, Top +@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 4b89e6c5f1..b08a7d4e5b 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 * @@ -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 9d7a722751..65fd425ba5 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 *** -- cgit v1.2.3