summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-05 17:00:09 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-06 08:47:02 +0100
commit920a43e6392dfe60ad8bf4bcce73fd1c97d6aa5a (patch)
tree1b4757300bc435e408078ff0588a8d2e73fe76ae
parentscore: _CPU_Context_switch_to_first_task_smp() (diff)
downloadrtems-920a43e6392dfe60ad8bf4bcce73fd1c97d6aa5a.tar.bz2
rtems: Add rtems_status_code_description()
-rw-r--r--cpukit/rtems/Makefile.am1
-rw-r--r--cpukit/rtems/include/rtems/rtems/status.h10
-rw-r--r--cpukit/rtems/src/statusdesc.c69
-rw-r--r--doc/user/Makefile.am11
-rw-r--r--doc/user/dirstat.t (renamed from doc/user/dirstat.texi)29
-rw-r--r--doc/user/example.texi2
-rw-r--r--testsuites/sptests/spinternalerror02/init.c21
-rw-r--r--testsuites/sptests/spinternalerror02/spinternalerror02.scn31
8 files changed, 167 insertions, 7 deletions
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
+ * <rtems@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 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.texi b/doc/user/dirstat.t
index 17a7edd90e..adb675d613 100644
--- a/doc/user/dirstat.texi
+++ b/doc/user/dirstat.t
@@ -3,8 +3,10 @@
@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
+
+@section Introduction
+
@table @b
@item @code{@value{RPREFIX}SUCCESSFUL} - successful completion
@item @code{@value{RPREFIX}TASK_EXITTED} - returned from a task
@@ -35,3 +37,28 @@
@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/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
* <rtems@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 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 ***