summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1997-07-31 22:13:29 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1997-07-31 22:13:29 +0000
commit0074691a67f857c9b3f880fb581e0af1d5673337 (patch)
treef80fd23129ad62236ee4f64eeaf537f53bbaa0b8 /testsuites
parentMerged very large and much appreciated patch from Chris Johns (diff)
downloadrtems-0074691a67f857c9b3f880fb581e0af1d5673337.tar.bz2
Merged very large and much appreciated patch from Chris Johns
<cjohns@plessey.com.au>. This patch includes the ods68302 bsp, the RTEMS++ class library, and the rtems++ test.
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/libtests/rtems++/Init.cc73
-rw-r--r--testsuites/libtests/rtems++/System.h126
-rw-r--r--testsuites/libtests/rtems++/Task1.cc657
-rw-r--r--testsuites/libtests/rtems++/Task2.cc81
-rw-r--r--testsuites/libtests/rtems++/Task3.cc81
-rw-r--r--testsuites/libtests/rtems++/rtems++.doc29
-rw-r--r--testsuites/libtests/rtems++/rtems++.scn161
7 files changed, 1208 insertions, 0 deletions
diff --git a/testsuites/libtests/rtems++/Init.cc b/testsuites/libtests/rtems++/Init.cc
new file mode 100644
index 0000000000..c995a3de10
--- /dev/null
+++ b/testsuites/libtests/rtems++/Init.cc
@@ -0,0 +1,73 @@
+/* Init
+ *
+ * This routine is the initialization task for this test program.
+ *
+ * Input parameters:
+ * argument - task argument
+ *
+ * Output parameters: NONE
+ *
+ * COPYRIGHT (c) 1997
+ * Objective Design Systems Ltd Pty (ODS)
+ * All rights reserved (R) Objective Design Systems Ltd Pty
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "System.h"
+
+rtems_task Init(rtems_task_argument )
+{
+ puts( "\n\n*** RTEMS++ TEST ***" );
+
+ rtemsEvent end_me("INIT");
+ Task1 task_1;
+
+ task_1.set_end_event(end_me);
+
+ printf( "INIT - Task.create() - " );
+ task_1.create("TA1 ", 0, RTEMS_MINIMUM_STACK_SIZE);
+ printf("%s\n", task_1.last_status_string());
+
+ printf( "INIT - Task.create() - " );
+ task_1.create("TA1 ", 10, RTEMS_MINIMUM_STACK_SIZE * 6);
+ printf("%s\n", task_1.last_status_string());
+
+ printf( "INIT - Task.create() - " );
+ task_1.create("TA1 ", 10, RTEMS_MINIMUM_STACK_SIZE * 6);
+ printf("%s\n", task_1.last_status_string());
+
+ printf( "INIT - Task.restart() - " );
+ task_1.restart(0);
+ printf("%s\n", task_1.last_status_string());
+
+ printf( "INIT - Task.start(0xDEADDEAD) - " );
+ task_1.start(0xDEADDEAD);
+ printf("%s\n", task_1.last_status_string());
+
+ // block waiting for any event
+ rtems_event_set out;
+
+ // wait for task1 to tell me to finish
+ end_me.receive(RTEMS_SIGNAL_0, out);
+
+ task_1.destroy();
+
+ printf("*** END OF RTEMS++ TEST ***");
+
+ // needs to be in C, no C++ object owns the Init task
+ rtems_status_code status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+
+
diff --git a/testsuites/libtests/rtems++/System.h b/testsuites/libtests/rtems++/System.h
new file mode 100644
index 0000000000..5e11e59238
--- /dev/null
+++ b/testsuites/libtests/rtems++/System.h
@@ -0,0 +1,126 @@
+/* system.h
+ *
+ * This include file contains information that is included in every
+ * function in the test set.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <tmacros.h>
+#include <rtems++/rtemsEvent.h>
+#include <rtems++/rtemsMessageQueue.h>
+#include <rtems++/rtemsTask.h>
+#include <rtems++/rtemsTaskMode.h>
+
+/* functions */
+
+extern "C"
+{
+ rtems_task Init(
+ rtems_task_argument argument
+ );
+}
+
+rtems_timer_service_routine Delayed_routine(
+ rtems_id ignored_id,
+ void *ignored_address
+);
+
+class Task1
+ : public rtemsTask
+{
+ rtemsEvent end_init;
+
+ void print_mode(rtems_mode mode, rtems_mode mask);
+
+ void screen1(void);
+ void screen2(void);
+ void screen3(void);
+ void screen4(void);
+ void screen5(void);
+ void screen6(void);
+
+protected:
+ virtual void body(rtems_task_argument argument);
+
+public:
+ void set_end_event(rtemsEvent& end_event) { end_init = end_event; }
+};
+
+class Task2
+ : public rtemsTask
+{
+ void screen4(void);
+
+protected:
+ virtual void body(rtems_task_argument argument);
+
+public:
+ Task2(const char* name,
+ const rtems_task_priority initial_priority,
+ const rtems_unsigned32 stack_size);
+};
+
+class Task3
+ : public rtemsTask
+{
+ void screen6(void);
+
+protected:
+ virtual void body(rtems_task_argument argument);
+
+public:
+ Task3(const char* name,
+ const rtems_task_priority initial_priority,
+ const rtems_unsigned32 stack_size);
+};
+
+#ifdef 0
+
+//
+// Not sure this can be tested in a generic manner, any ideas anyone !!
+//
+
+class Service_routine
+ : public rtemsInterrupt
+{
+};
+
+class Io_during_interrupt
+ : pubic rtemsTimer
+{
+
+};
+
+#endif
+
+/* configuration information */
+
+#define CONFIGURE_SPTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_TIMERS 1
+#define CONFIGURE_MAXIMUM_SEMAPHORES 2
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_MAXIMUM_PARTITIONS 1
+#define CONFIGURE_MAXIMUM_REGIONS 1
+#define CONFIGURE_MAXIMUM_PERIODS 1
+#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 0
+#define CONFIGURE_TICKS_PER_TIMESLICE 100
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+#define CONFIGURE_INIT_TASK_STACK_SIZE 0x2000
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/libtests/rtems++/Task1.cc b/testsuites/libtests/rtems++/Task1.cc
new file mode 100644
index 0000000000..c6212c8c26
--- /dev/null
+++ b/testsuites/libtests/rtems++/Task1.cc
@@ -0,0 +1,657 @@
+/* Task1
+ *
+ * This task is the main line for the test. It creates other
+ * tasks which can create
+ *
+ * Input parameters:
+ * argument - task argument
+ *
+ * Output parameters: NONE
+ *
+ * COPYRIGHT (c) 1997
+ * Objective Design Systems Ltd Pty (ODS)
+ * All rights reserved (R) Objective Design Systems Ltd Pty
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <string.h>
+#include "System.h"
+
+void Task1::body(rtems_task_argument argument)
+{
+ rtems_test_pause_and_screen_number(1);
+
+ printf(" * START Task Class test *\n");
+
+ printf("%s - test argument - ", name_string());
+ if (argument != 0xDEADDEAD)
+ printf("argument is not 0xDEADDEAD\n");
+ else
+ printf("argument matched\n");
+
+ screen1();
+ rtems_test_pause_and_screen_number(2);
+
+ screen2();
+ rtems_test_pause_and_screen_number(3);
+
+ screen3();
+ rtems_test_pause_and_screen_number(4);
+
+ screen4();
+ rtems_test_pause_and_screen_number(5);
+
+ screen5();
+ rtems_test_pause_and_screen_number(6);
+
+ screen6();
+ rtems_test_pause_and_screen_number(7);
+
+ // causes init to delete me and itself
+ end_init.send(RTEMS_SIGNAL_0);
+}
+
+void Task1::screen1(void)
+{
+ // create two local task objects to connect to this task
+ rtemsTask local_task_1 = *this;
+ rtemsTask local_task_2;
+
+ local_task_2 = *this;
+
+ // check the copy constructor works
+ printf("%s - copy constructor - ", name_string());
+ if (local_task_1.id_is() == id_is())
+ printf("local and this id's match\n");
+ else
+ printf("local and this id's do not match\n");
+
+ printf("%s - copy constructor - ", name_string());
+ if (local_task_1.name_is() == name_is())
+ printf("local and this name's match\n");
+ else
+ printf("local and this name's do not match\n");
+
+ // check the copy operator works
+ printf("%s - copy operator - ", name_string());
+ if (local_task_2.id_is() == id_is())
+ printf("local and this id's match\n");
+ else
+ printf("local and this id's do not match\n");
+ printf("%s - copy operator - ", name_string());
+ if (local_task_2.name_is() == name_is())
+ printf("local and this name's match\n");
+ else
+ printf("local and this name's do not match\n");
+
+ // check that the owner of the id cannot delete this task
+ printf("%s - not owner destroy's task - ", local_task_1.name_string());
+ local_task_1.destroy();
+ printf("%s\n", local_task_1.last_status_string());
+
+ // connect to a valid task
+ printf("%s - connect to a local valid task name - ", local_task_2.name_string());
+ local_task_2.connect("TA1 ", RTEMS_SEARCH_ALL_NODES);
+ printf("%s\n", local_task_2.last_status_string());
+
+ // connect to an invalid task
+ printf("%s - connect to an invalid task name - ", local_task_2.name_string());
+ local_task_2.connect("BADT", RTEMS_SEARCH_ALL_NODES);
+ printf("%s\n", local_task_2.last_status_string());
+
+ // connect to a task an invalid node
+ printf("%s - connect to a task on an invalid node - ", local_task_2.name_string());
+ local_task_2.connect("BADT", 10);
+ printf("%s\n", local_task_2.last_status_string());
+
+ // restart this task
+ printf("%s - restart from a non-owner - ", name_string());
+ local_task_1.restart(0);
+ printf("%s\n", local_task_1.last_status_string());
+}
+
+void Task1::screen2(void)
+{
+ // wake after using this object
+
+ printf("%s - wake after 0 secs - ", name_string());
+ wake_after(0);
+ printf("%s\n", last_status_string());
+
+ printf("%s - wake after 500 msecs - ", name_string());
+ wake_after(500000);
+ printf("%s\n", last_status_string());
+
+ printf("%s - wake after 5 secs - ", name_string());
+ wake_after(5000000);
+ printf("%s\n", last_status_string());
+
+ printf("%s - wake when - to do\n", name_string());
+
+ rtemsTask task_1 = *this;
+
+ // wake after using a connected object
+
+ printf("%s - connected object wake after 0 secs - ", task_1.name_string());
+ task_1.wake_after(0);
+ printf("%s\n", task_1.last_status_string());
+
+ printf("%s - connected object wake after 500 msecs - ", task_1.name_string());
+ task_1.wake_after(500000);
+ printf("%s\n", task_1.last_status_string());
+
+ printf("%s - connected object wake after 5 secs - ", task_1.name_string());
+ task_1.wake_after(5000000);
+ printf("%s\n", task_1.last_status_string());
+
+ printf("%s - connected object wake when - to do\n", task_1.name_string());
+
+ rtemsTask task_2;
+
+ // wake after using a self object
+
+ printf("%s - self object wake after 0 secs - ", task_2.name_string());
+ task_2.wake_after(0);
+ printf("%s\n", task_2.last_status_string());
+
+ printf("%s - self object wake after 500 msecs - ", task_2.name_string());
+ task_2.wake_after(500000);
+ printf("%s\n", task_2.last_status_string());
+
+ printf("%s - self object wake after 5 secs - ", task_2.name_string());
+ task_2.wake_after(5000000);
+ printf("%s\n", task_2.last_status_string());
+
+ printf("%s - self object wake when - to do\n", task_2.name_string());
+
+ rtems_task_priority current_priority;
+ rtems_task_priority priority;
+
+ // priorities with this object
+
+ printf("%s - get priority - ", name_string());
+ get_priority(current_priority);
+ printf("%s, priority is %i\n", last_status_string(), current_priority);
+
+ printf("%s - set priority to 512 - ", name_string());
+ set_priority(512);
+ printf("%s\n", last_status_string());
+
+ printf("%s - set priority to 25 - ", name_string());
+ set_priority(25);
+ printf("%s\n", last_status_string());
+
+ printf("%s - set priority to original - ", name_string());
+ set_priority(current_priority, priority);
+ printf("%s, priority was %i\n", last_status_string(), priority);
+
+ // priorities with connected object
+
+ printf("%s - connected object get priority - ", task_1.name_string());
+ task_1.get_priority(current_priority);
+ printf("%s, priority is %i\n", task_1.last_status_string(), current_priority);
+
+ printf("%s - connected object set priority to 512 - ", task_1.name_string());
+ task_1.set_priority(512);
+ printf("%s\n", task_1.last_status_string());
+
+ printf("%s - connected object set priority to 25 - ", task_1.name_string());
+ task_1.set_priority(25);
+ printf("%s\n", task_1.last_status_string());
+
+ printf("%s - connected object set priority to original - ", task_1.name_string());
+ task_1.set_priority(current_priority, priority);
+ printf("%s, priority was %i\n", task_1.last_status_string(), priority);
+
+ // priorities with self object
+
+ printf("%s - self object get priority - ", task_2.name_string());
+ task_2.get_priority(current_priority);
+ printf("%s, priority is %i\n", task_2.last_status_string(), current_priority);
+
+ printf("%s - self object set priority to 512 - ", task_2.name_string());
+ task_2.set_priority(512);
+ printf("%s\n", task_2.last_status_string());
+
+ printf("%s - self object set priority to 25 - ", task_2.name_string());
+ task_2.set_priority(25);
+ printf("%s\n", task_2.last_status_string());
+
+ printf("%s - self object set priority to original - ", task_2.name_string());
+ task_2.set_priority(current_priority, priority);
+ printf("%s, priority was %i\n", task_2.last_status_string(), priority);
+
+ rtems_unsigned32 current_note;
+ rtems_unsigned32 note;
+
+ // notepad registers for this object
+
+ printf("%s - get note - ", name_string());
+ get_note(0, current_note);
+ printf("%s, note is %i\n", last_status_string(), current_note);
+
+ printf("%s - get with bad notepad number - ", name_string());
+ get_note(100, current_note);
+ printf("%s, note is %i\n", last_status_string(), current_note);
+
+ printf("%s - set note to 0xDEADBEEF - ", name_string());
+ set_note(0, 0xDEADBEEF);
+ printf("%s\n", last_status_string());
+
+ printf("%s - get note - ", name_string());
+ get_note(0, note);
+ printf("%s, note is 0x%08X\n", last_status_string(), note);
+
+ printf("%s - set note to original value - ", name_string());
+ set_note(0, current_note);
+ printf("%s\n", last_status_string());
+
+ // notepad registers for connected object
+
+ printf("%s - connected object get note - ", task_1.name_string());
+ task_1.get_note(0, current_note);
+ printf("%s, notepad is %i\n", task_1.last_status_string(), current_note);
+
+ printf("%s - connected object get with bad notepad number - ", task_1.name_string());
+ task_1.get_note(100, current_note);
+ printf("%s, note is %i\n", task_1.last_status_string(), current_note);
+
+ printf("%s - connected object set note to 0xDEADBEEF - ", task_1.name_string());
+ task_1.set_note(0, 0xDEADBEEF);
+ printf("%s\n", task_1.last_status_string());
+
+ printf("%s - connected object get note - ", task_1.name_string());
+ task_1.get_note(0, note);
+ printf("%s, note is 0x%08X\n", task_1.last_status_string(), note);
+
+ printf("%s - connected object set note to original value - ", task_1.name_string());
+ task_1.set_note(0, current_note);
+ printf("%s\n", task_1.last_status_string());
+
+ // notepad registers for self object
+
+ printf("%s - self object get note - ", task_2.name_string());
+ task_2.get_note(0, current_note);
+ printf("%s, note is %i\n", task_2.last_status_string(), current_note);
+
+ printf("%s - self object get with bad notepad number - ", task_2.name_string());
+ task_2.get_note(100, current_note);
+ printf("%s, note is %i\n", task_2.last_status_string(), current_note);
+
+ printf("%s - self object set note to 0xDEADBEEF - ", task_2.name_string());
+ task_2.set_note(0, 0xDEADBEEF);
+ printf("%s\n", task_2.last_status_string());
+
+ printf("%s - self object get note - ", task_2.name_string());
+ task_2.get_note(0, note);
+ printf("%s, notepad is 0x%08X\n", task_2.last_status_string(), note);
+
+ printf("%s - self object set note to original value - ", task_2.name_string());
+ task_2.set_note(0, current_note);
+ printf("%s\n", task_2.last_status_string());
+
+ printf(" * END Task Class test *\n");
+}
+
+#define RTEMS_ALL_MODES (RTEMS_PREEMPT_MASK | \
+ RTEMS_TIMESLICE_MASK | \
+ RTEMS_ASR_MASK | \
+ RTEMS_INTERRUPT_MASK)
+
+void Task1::screen3(void)
+{
+ printf(" * START TaskMode Class test *\n");
+
+ rtemsTask self;
+ rtemsTaskMode task_mode;
+ rtems_mode current_mode;
+ rtems_mode mode;
+
+ printf("%s - get mode - ", self.name_string());
+ task_mode.get_mode(current_mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), current_mode);
+ print_mode(current_mode, RTEMS_ALL_MODES);
+ printf("\n");
+
+ // PREEMPTION mode control
+
+ printf("%s - get preemption state - ", self.name_string());
+ task_mode.get_preemption_state(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_PREEMPT_MASK);
+ printf("\n");
+
+ printf("%s - set preemption state to RTEMS_PREEMPT - ", self.name_string());
+ task_mode.set_preemption_state(RTEMS_PREEMPT);
+ task_mode.get_mode(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_ALL_MODES);
+ printf("\n");
+
+ printf("%s - set preemption state to RTEMS_NO_PREEMPT - ", self.name_string());
+ task_mode.set_preemption_state(RTEMS_NO_PREEMPT);
+ task_mode.get_mode(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_ALL_MODES);
+ printf("\n");
+
+ // TIMESLICE mode control
+
+ printf("%s - get timeslice state - ", self.name_string());
+ task_mode.get_timeslice_state(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_TIMESLICE_MASK);
+ printf("\n");
+
+ printf("%s - set timeslice state to RTEMS_TIMESLICE - ", self.name_string());
+ task_mode.set_timeslice_state(RTEMS_TIMESLICE);
+ task_mode.get_mode(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_ALL_MODES);
+ printf("\n");
+
+ printf("%s - set timeslice state to RTEMS_NO_TIMESLICE - ", self.name_string());
+ task_mode.set_timeslice_state(RTEMS_NO_TIMESLICE);
+ task_mode.get_mode(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_ALL_MODES);
+ printf("\n");
+
+ // ASR mode control
+
+ printf("%s - get asr state - ", self.name_string());
+ task_mode.get_asr_state(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_ASR_MASK);
+ printf("\n");
+
+ printf("%s - set asr state to RTEMS_ASR - ", self.name_string());
+ task_mode.set_asr_state(RTEMS_ASR);
+ task_mode.get_mode(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_ALL_MODES);
+ printf("\n");
+
+ printf("%s - set asr state to RTEMS_NO_ASR - ", self.name_string());
+ task_mode.set_asr_state(RTEMS_NO_ASR);
+ task_mode.get_mode(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_ALL_MODES);
+ printf("\n");
+
+ // interrupt level control
+
+ rtems_interrupt_level current_level;
+ rtems_interrupt_level level;
+
+ printf("%s - get current interrupt level - ", self.name_string());
+ task_mode.get_interrupt_level(current_level);
+ printf("%s, level is %i\n", task_mode.last_status_string(), current_level);
+
+ printf("%s - set interrupt level to 102 - ", self.name_string());
+ task_mode.set_interrupt_level(102);
+ printf("%s\n", task_mode.last_status_string());
+
+ printf("%s - set interrupt level to original level - ", self.name_string());
+ task_mode.set_interrupt_level(current_level, level);
+ printf("%s, level was %i\n", task_mode.last_status_string(), level);
+
+ printf("%s - set mode to original mode - ", self.name_string());
+ task_mode.set_mode(current_mode,
+ RTEMS_PREEMPT_MASK | RTEMS_TIMESLICE_MASK |
+ RTEMS_ASR_MASK | RTEMS_INTERRUPT_MASK);
+ task_mode.get_mode(mode);
+ printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode);
+ print_mode(mode, RTEMS_ALL_MODES);
+ printf("\n");
+
+ printf(" * END TaskMode Class test *\n");
+}
+
+void Task1::screen4(void)
+{
+ printf(" * START Event Class test *\n");
+
+ printf("%s - create task 2 - ", name_string());
+ Task2 task_2("TA2", (rtems_task_priority) 9, RTEMS_MINIMUM_STACK_SIZE * 6);
+ printf("%s\n", task_2.last_status_string());
+
+ printf("%s - start task 2 - ", name_string());
+ task_2.start(0);
+ printf("%s\n", task_2.last_status_string());
+
+ printf("%s - construct event connecting to task 2 - ", name_string());
+ rtemsEvent event_2("TA2 ");
+ printf("%s\n", event_2.last_status_string());
+
+ // wait for task 2 to complete its timeout tests
+ wake_after(7000000);
+
+ printf("%s - send event signal 0 using the task id - ", name_string());
+ event_2.send(task_2.id_is(), RTEMS_SIGNAL_0);
+ printf("%s\n", event_2.last_status_string());
+
+ wake_after(1000000);
+
+ printf("%s - send event signal 0 using the task object reference - ", name_string());
+ event_2.send(task_2, RTEMS_SIGNAL_0);
+ printf("%s\n", event_2.last_status_string());
+
+ wake_after(1000000);
+
+ printf("%s - send event signal 31 using connected id - ", name_string());
+ event_2.send(RTEMS_SIGNAL_31);
+ printf("%s\n", event_2.last_status_string());
+
+ wake_after(1000000);
+
+ rtemsEvent event_2_2;
+
+ event_2_2.connect("TA2");
+
+ printf("%s - send event signal 0 and 31 - ", name_string());
+ event_2_2.send(task_2, RTEMS_SIGNAL_0 | RTEMS_SIGNAL_31);
+ printf("%s\n", event_2_2.last_status_string());
+
+ printf("%s - waiting 5 secs for TA2 to finish\n", name_string());
+ wake_after(500000);
+
+ printf(" * END Event Class test *\n");
+}
+
+void Task1::screen5(void)
+{
+ printf(" * START Interrupt Class test *\n");
+
+ printf(" do not know a portable BSP type interrupt test\n");
+
+ printf(" * END Interrupt Class test *\n");
+}
+
+void Task1::screen6(void)
+{
+ printf(" * START MessageQueue Class test *\n");
+
+ printf("%s - construct message queue 1 with no memory error - ", name_string());
+ rtemsMessageQueue mq_1("MQ1", 1000000, 1000);
+ printf("%s\n", mq_1.last_status_string());
+
+ printf("%s - construct/create message queue 2 - ", name_string());
+ rtemsMessageQueue mq_2("MQ2", 4, 50);
+ printf("%s\n", mq_2.last_status_string());
+
+ char *u1 = "normal send";
+ char *u2 = "urgent send";
+ char in[100];
+ rtems_unsigned32 size;
+
+ printf("%s - send u1 to mq_2 - ", name_string());
+ mq_2.send(u1, strlen(u1) + 1);
+ printf("%s\n", mq_2.last_status_string());
+
+ printf("%s - urgent send u2 to mq_2 - ", name_string());
+ mq_2.urgent(u2, strlen(u2) + 1);
+ printf("%s\n", mq_2.last_status_string());
+
+ printf("%s - create task 3_1 - ", name_string());
+ Task3 task_3_1("TA31", 9, RTEMS_MINIMUM_STACK_SIZE * 6);
+ printf("%s\n", task_3_1.last_status_string());
+
+ printf("%s - start task 3_1 - ", name_string());
+ task_3_1.start(0);
+ printf("%s\n", task_3_1.last_status_string());
+
+ printf("%s - create task 3_2 - ", name_string());
+ Task3 task_3_2("TA32", 9, RTEMS_MINIMUM_STACK_SIZE * 6);
+ printf("%s\n", task_3_2.last_status_string());
+
+ printf("%s - start task 3_2 - ", name_string());
+ task_3_2.start(0);
+ printf("%s\n", task_3_1.last_status_string());
+
+ wake_after(1000000);
+
+ printf("%s - receive u2 on mq_2 ...\n", name_string()); fflush(stdout);
+ mq_2.receive(in, size, 5000000);
+ printf("%s - %s\n", name_string(), mq_2.last_status_string());
+
+ if (size == (strlen(u2) + 5))
+ {
+ if ((strncmp(in, task_3_1.name_string(), 4) == 0) &&
+ (strcmp(in + 4, u2) == 0))
+ {
+ printf("%s - message u2 received correctly\n", name_string());
+ }
+ else
+ {
+ printf("%s - message u2 received incorrectly, message='%s', size=%i\n",
+ name_string(), in, size);
+ }
+ }
+ else
+ printf("%s - message u2 size incorrect, size=%i\n", name_string(), size);
+
+ printf("%s - receive u1 on mq_2 ...\n", name_string()); fflush(stdout);
+ mq_2.receive(in, size, 5000000);
+ printf("%s - %s\n", name_string(), mq_2.last_status_string());
+
+ if (size == (strlen(u1) + 5))
+ {
+ if ((strncmp(in, task_3_2.name_string(), 4) == 0) &&
+ (strcmp(in + 4, u1) == 0))
+ {
+ printf("%s - message u1 received correctly\n", name_string());
+ }
+ else
+ {
+ printf("%s - message u1 received incorrectly, message='%s', size=%i\n",
+ name_string(), in, size);
+ }
+ }
+ else
+ printf("%s - message u1 size incorrect, size=%i\n", name_string(), size);
+
+ wake_after(3000000);
+
+ char *b1 = "broadcast message";
+ rtems_unsigned32 count;
+
+ printf("%s - broadcast send b1 ...\n", name_string());
+ mq_2.broadcast(b1, strlen(b1) + 1, count);
+ printf("%s - mq_2 broadcast send - %s, count=%i\n",
+ name_string(), mq_2.last_status_string(), count);
+
+ wake_after(1000000);
+
+ printf("%s - receive message b1 on mq_2 from %s...\n",
+ name_string(), task_3_1.name_string()); fflush(stdout);
+ mq_2.receive(in, size, 5000000);
+ printf("%s - %s\n", name_string(), mq_2.last_status_string());
+
+ if (size == (strlen(b1) + 5))
+ {
+ if ((strncmp(in, task_3_1.name_string(), 4) == 0) &&
+ (strcmp(in + 4, b1) == 0))
+ {
+ printf("%s - message b1 received correctly\n", name_string());
+ }
+ else
+ {
+ printf("%s - message b1 received incorrectly, message='%s'\n",
+ name_string(), in);
+ }
+ }
+ else
+ printf("%s - message b1 size incorrect, size=%i\n", name_string(), size);
+
+ printf("%s - receive message b1 on mq_2 from %s...\n",
+ name_string(), task_3_1.name_string()); fflush(stdout);
+ mq_2.receive(in, size, 5000000);
+ printf("%s - %s\n", name_string(), mq_2.last_status_string());
+
+ if (size == (strlen(b1) + 5))
+ {
+ if ((strncmp(in, task_3_2.name_string(), 4) == 0) &&
+ (strcmp(in + 4, b1) == 0))
+ {
+ printf("%s - message b1 received correctly\n", name_string());
+ }
+ else
+ {
+ printf("%s - message b1 received incorrectly, message='%s', size=%i\n",
+ name_string(), in, size);
+ }
+ }
+ else
+ printf("%s - message b1 size incorrect, size=%i\n", name_string(), size);
+
+ // wait for task 3_1, and 3_2 to complete their timeout tests, will start these after
+ // getting the broadcast message
+ wake_after(7000000);
+
+ char *f1 = "flush message";
+
+ printf("%s - send f1 to mq_2 - ", name_string());
+ mq_2.send(f1, strlen(f1) + 1);
+ printf("%s\n", mq_2.last_status_string());
+
+ printf("%s - send f1 to mq_2 - ", name_string());
+ mq_2.send(f1, strlen(f1) + 1);
+ printf("%s\n", mq_2.last_status_string());
+
+ printf("%s - send f1 to mq_2 - ", name_string());
+ mq_2.send(f1, strlen(f1) + 1);
+ printf("%s\n", mq_2.last_status_string());
+
+ printf("%s - flush mq_2 - ", name_string());
+ mq_2.flush(size);
+ printf("%s, flushed=%i\n", mq_2.last_status_string(), size);
+
+ printf(" * END MessageQueue Class test *\n");
+}
+
+void Task1::print_mode(rtems_mode mode, rtems_mode mask)
+{
+ rtemsTaskMode task_mode;
+ if (mask & RTEMS_PREEMPT_MASK)
+ printf("RTEMS_%sPREEMPT ",
+ task_mode.preemption_set(mode) ? "" : "NO_");
+ if (mask & RTEMS_TIMESLICE_MASK)
+ printf("RTEMS_%sTIMESLICE ",
+ task_mode.preemption_set(mode) ? "" : "NO_");
+ if (mask & RTEMS_ASR_MASK)
+ printf("RTEMS_%sASR ",
+ task_mode.asr_set(mode) ? "" : "NO_");
+ if (mask & RTEMS_INTERRUPT_MASK)
+ printf("INTMASK=%i",
+ mode & RTEMS_INTERRUPT_MASK);
+}
diff --git a/testsuites/libtests/rtems++/Task2.cc b/testsuites/libtests/rtems++/Task2.cc
new file mode 100644
index 0000000000..ab8c3cb78e
--- /dev/null
+++ b/testsuites/libtests/rtems++/Task2.cc
@@ -0,0 +1,81 @@
+/* Task_2
+ *
+ * This routine serves as a test task. Its only purpose is to generate the
+ * error where a semaphore is deleted while a task is waiting for it.
+ *
+ * Input parameters:
+ * argument - task argument
+ *
+ * Output parameters: NONE
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include "System.h"
+
+Task2::Task2(const char* name,
+ const rtems_task_priority initial_priority,
+ const rtems_unsigned32 stack_size)
+ : rtemsTask(name, initial_priority, stack_size, RTEMS_NO_PREEMPT)
+{
+}
+
+void Task2::body(rtems_task_argument )
+{
+ screen4();
+
+ printf("%s - destory itself\n", name_string());
+ destroy();
+}
+
+void Task2::screen4()
+{
+ rtemsEvent event;
+
+ // block waiting for any event
+ rtems_event_set out;
+
+ printf("%s - event no wait - ", name_string());
+ event.receive(RTEMS_SIGNAL_0, out, 0, rtemsEvent::no_wait);
+ printf("%s\n", event.last_status_string());
+
+ printf("%s - event 5 secs timeout - ", name_string()); fflush(stdout);
+ event.receive(RTEMS_SIGNAL_0, out, 5000000);
+ printf("%s\n", event.last_status_string());
+
+ // send using task id
+ printf("%s - event wait forever for signal 0 from TA1 ....\n", name_string());
+ event.receive(RTEMS_SIGNAL_0, out);
+ printf("%s - %s, signals out are 0x%08X\n", name_string(), event.last_status_string(), out);
+
+ // send using task object reference
+ printf("%s - event wait forever for signal 0 from TA1 ....\n", name_string());
+ event.receive(RTEMS_SIGNAL_0, out);
+ printf("%s - %s, signals out are 0x%08X\n", name_string(), event.last_status_string(), out);
+
+ printf("%s - event wait forever for signal 31 from TA1 ....\n", name_string());
+ event.receive(RTEMS_SIGNAL_31, out);
+ printf("%s - %s, signals out are 0x%08X\n", name_string(), event.last_status_string(), out);
+
+ printf("%s - event wait forever for signal 0 and 31 from TA1 ....\n", name_string());
+ event.receive(RTEMS_SIGNAL_0 | RTEMS_SIGNAL_31, out, 0, rtemsEvent::wait, rtemsEvent::all);
+ printf("%s - %s, signals out are 0x%08X\n", name_string(), event.last_status_string(), out);
+
+ printf("%s - send event signal 1 - ", name_string());
+ event.send(RTEMS_SIGNAL_1);
+ printf("%s\n", event.last_status_string());
+
+ printf("%s - event wait forever for signal 1 from TA2 - ", name_string());
+ event.receive(RTEMS_SIGNAL_1, out, 0, rtemsEvent::wait, rtemsEvent::all);
+ printf("%s, signals out are 0x%08X\n", event.last_status_string(), out);
+}
+
+
diff --git a/testsuites/libtests/rtems++/Task3.cc b/testsuites/libtests/rtems++/Task3.cc
new file mode 100644
index 0000000000..3d3060d398
--- /dev/null
+++ b/testsuites/libtests/rtems++/Task3.cc
@@ -0,0 +1,81 @@
+/* Task_3
+ *
+ * This routine serves as a test task. Loopback the messages and test
+ * timeouts
+ *
+ * Input parameters:
+ * argument - task argument
+ *
+ * Output parameters: NONE
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include "System.h"
+
+Task3::Task3(const char* name,
+ const rtems_task_priority initial_priority,
+ const rtems_unsigned32 stack_size)
+ : rtemsTask(name, initial_priority, stack_size, RTEMS_NO_PREEMPT)
+{
+}
+
+void Task3::body(rtems_task_argument )
+{
+ screen6();
+
+ printf("%s - destory itself\n", name_string());
+ destroy();
+}
+
+void Task3::screen6()
+{
+ rtemsMessageQueue mq_2("MQ2");
+ printf("%s - construction connect mq_2 - %s\n", name_string(), mq_2.last_status_string());
+
+ if (mq_2.successful())
+ {
+ char in[100];
+ char out[100];
+ rtems_unsigned32 size;
+ bool loopback = true;
+
+ while (loopback)
+ {
+ printf("%s - loopback from mq_2 to mq_2 ...\n", name_string()); fflush(stdout);
+
+ mq_2.receive(in, size);
+ printf("%s - mq_2 receive - %s, size=%i, message string size=%i\n",
+ name_string(), mq_2.last_status_string(), size, (int) strlen(in));
+ if (mq_2.successful())
+ {
+ if (size > (100 - 5))
+ printf("%s - size to large\n", name_string());
+ else
+ {
+ strcpy(out, name_string());
+ strcpy(out + 4, in);
+
+ printf("%s - loopback to mq_2 - ", name_string());
+ mq_2.send(out, strlen(out) + 1);
+ printf("%s\n", mq_2.last_status_string());
+ }
+
+ if (strcmp(in, "broadcast message") == 0)
+ loopback = false;
+ else
+ wake_after(1500000);
+ }
+ }
+ }
+}
+
+
diff --git a/testsuites/libtests/rtems++/rtems++.doc b/testsuites/libtests/rtems++/rtems++.doc
new file mode 100644
index 0000000000..5834b4077d
--- /dev/null
+++ b/testsuites/libtests/rtems++/rtems++.doc
@@ -0,0 +1,29 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1997
+# Objective Design Systems Ltd Pty (ODS)
+# All rights reserved (R) Objective Design Systems Ltd Pty
+#
+# The license and distribution terms for this file may be found in the
+# file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+The file describes the directives and concepts tested by this test set.
+
+test set name: rtems++
+
+classes:
+ rtemsTask, rtemsTaskMode, rtemsEvent, rtemsMessageQueue
+
+concepts:
+
+ a. Verify each class tested can be constructed using each of the constructors.
+
+ b. Verify each class can be an owner of an object id if capable.
+
+ c. Verify each class can connect to an existing object id if capable.
+
+ d. Verify the operation of each method of each class.
+
diff --git a/testsuites/libtests/rtems++/rtems++.scn b/testsuites/libtests/rtems++/rtems++.scn
new file mode 100644
index 0000000000..2b3682d6b6
--- /dev/null
+++ b/testsuites/libtests/rtems++/rtems++.scn
@@ -0,0 +1,161 @@
+*** RTEMS++ TEST ***
+INIT - Task.create() - RTEMS[19] invalid thread priority
+INIT - Task.create() - RTEMS[00] successful completion
+INIT - Task.create() - RTEMS[16] illegal on calling thread
+INIT - Task.restart() - RTEMS[14] thread is in wrong state
+INIT - Task.start(0xDEADDEAD) - RTEMS[00] successful completion
+<pause - screen 1>
+ * START Task Class test *
+TA1 - test argument - argument matched
+TA1 - copy constructor - local and this id's match
+TA1 - copy constructor - local and this name's match
+TA1 - copy operator - local and this id's match
+TA1 - copy operator - local and this name's match
+TA1 - not owner destroy's task - RTEMS[23] not owner of resource
+TA1 - connect to a local valid task name - RTEMS[00] successful completion
+TA1 - connect to an invalid task name - RTEMS[03] invalid object name
+SELF - connect to a task on an invalid node - RTEMS[21] invalid node id
+TA1 - restart from a non-owner - RTEMS[23] not owner of resource
+<pause - screen 2>
+TA1 - wake after 0 secs - RTEMS[00] successful completion
+TA1 - wake after 500 msecs - RTEMS[00] successful completion
+TA1 - wake after 5 secs - RTEMS[00] successful completion
+TA1 - wake when - to do
+TA1 - connected object wake after 0 secs - RTEMS[00] successful completion
+TA1 - connected object wake after 500 msecs - RTEMS[00] successful completion
+TA1 - connected object wake after 5 secs - RTEMS[00] successful completion
+TA1 - connected object wake when - to do
+SELF - self object wake after 0 secs - RTEMS[00] successful completion
+SELF - self object wake after 500 msecs - RTEMS[00] successful completion
+SELF - self object wake after 5 secs - RTEMS[00] successful completion
+SELF - self object wake when - to do
+TA1 - get priority - RTEMS[00] successful completion, priority is 10
+TA1 - set priority to 512 - RTEMS[19] invalid thread priority
+TA1 - set priority to 25 - RTEMS[00] successful completion
+TA1 - set priority to original - RTEMS[00] successful completion, priority was 25
+TA1 - connected object get priority - RTEMS[00] successful completion, priority is 10
+TA1 - connected object set priority to 512 - RTEMS[19] invalid thread priority
+TA1 - connected object set priority to 25 - RTEMS[00] successful completion
+TA1 - connected object set priority to original - RTEMS[00] successful completion, priority was 25
+SELF - self object get priority - RTEMS[00] successful completion, priority is 10
+SELF - self object set priority to 512 - RTEMS[19] invalid thread priority
+SELF - self object set priority to 25 - RTEMS[00] successful completion
+SELF - self object set priority to original - RTEMS[00] successful completion, priority was 25
+TA1 - get note - RTEMS[00] successful completion, note is 0
+TA1 - get with bad notepad number - RTEMS[10] number was invalid, note is 0
+TA1 - set note to 0xDEADBEEF - RTEMS[00] successful completion
+TA1 - get note - RTEMS[00] successful completion, note is 0xDEADBEEF
+TA1 - set note to original value - RTEMS[00] successful completion
+TA1 - connected object get note - RTEMS[00] successful completion, notepad is 0
+TA1 - connected object get with bad notepad number - RTEMS[10] number was invalid, note is 0
+TA1 - connected object set note to 0xDEADBEEF - RTEMS[00] successful completion
+TA1 - connected object get note - RTEMS[00] successful completion, note is 0xDEADBEEF
+TA1 - connected object set note to original value - RTEMS[00] successful completion
+SELF - self object get note - RTEMS[00] successful completion, note is 0
+SELF - self object get with bad notepad number - RTEMS[10] number was invalid, note is 0
+SELF - self object set note to 0xDEADBEEF - RTEMS[00] successful completion
+SELF - self object get note - RTEMS[00] successful completion, notepad is 0xDEADBEEF
+SELF - self object set note to original value - RTEMS[00] successful completion
+ * END Task Class test *
+<pause - screen 3>
+ * START TaskMode Class test *
+SELF - get mode - RTEMS[00] successful completion,
+ mode is 0x00000100, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_NO_ASR INTMASK=0
+SELF - get preemption state - RTEMS[00] successful completion,
+ mode is 0x00000100, RTEMS_NO_PREEMPT
+SELF - set preemption state to RTEMS_PREEMPT - RTEMS[00] successful completion,
+ mode is 0x00000000, RTEMS_PREEMPT RTEMS_TIMESLICE RTEMS_NO_ASR INTMASK=0
+SELF - set preemption state to RTEMS_NO_PREEMPT - RTEMS[00] successful completion,
+ mode is 0x00000100, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_NO_ASR INTMASK=0
+SELF - get timeslice state - RTEMS[00] successful completion,
+ mode is 0x00000000, RTEMS_TIMESLICE
+SELF - set timeslice state to RTEMS_TIMESLICE - RTEMS[00] successful completion,
+ mode is 0x00000300, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_NO_ASR INTMASK=0
+SELF - set timeslice state to RTEMS_NO_TIMESLICE - RTEMS[00] successful completion,
+ mode is 0x00000100, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_NO_ASR INTMASK=0
+SELF - get asr state - RTEMS[00] successful completion,
+ mode is 0x00000000, RTEMS_NO_ASR
+SELF - set asr state to RTEMS_ASR - RTEMS[00] successful completion,
+ mode is 0x00000100, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_NO_ASR INTMASK=0
+SELF - set asr state to RTEMS_NO_ASR - RTEMS[00] successful completion,
+ mode is 0x00000500, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_ASR INTMASK=0
+SELF - get current interrupt level - RTEMS[00] successful completion, level is 0
+SELF - set interrupt level to 102 - RTEMS[00] successful completion
+SELF - set interrupt level to original level - RTEMS[00] successful completion, level was 0
+SELF - set mode to original mode - RTEMS[00] successful completion,
+ mode is 0x00000100, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_NO_ASR INTMASK=0
+ * END TaskMode Class test *
+<pause - screen 4>
+ * START Event Class test *
+TA1 - create task 2 - RTEMS[00] successful completion
+TA1 - start task 2 - RTEMS[00] successful completion
+TA1 - construct event connecting to task 2 - RTEMS[00] successful completion
+TA2 - event no wait - RTEMS[13] request not satisfied
+TA2 - event 5 secs timeout - RTEMS[06] timed out waiting
+TA2 - event wait forever for signal 0 from TA1 ....
+TA1 - send event signal 0 using the task id - RTEMS[00] successful completion
+TA2 - RTEMS[00] successful completion, signals out are 0x00000001
+TA2 - event wait forever for signal 0 from TA1 ....
+TA1 - send event signal 0 using the task object reference - RTEMS[00] successful completion
+TA2 - RTEMS[00] successful completion, signals out are 0x00000001
+TA2 - event wait forever for signal 31 from TA1 ....
+TA1 - send event signal 31 using connected id - RTEMS[00] successful completion
+TA2 - RTEMS[00] successful completion, signals out are 0x80000000
+TA2 - event wait forever for signal 0 and 31 from TA1 ....
+TA1 - send event signal 0 and 31 - RTEMS[00] successful completion
+TA1 - waiting 5 secs for TA2 to finish
+TA2 - RTEMS[00] successful completion, signals out are 0x80000001
+TA2 - send event signal 1 - RTEMS[00] successful completion
+TA2 - event wait forever for signal 1 from TA2 - RTEMS[00] successful completion, signals out are 0x00000002
+TA2 - destory itself
+ * END Event Class test *
+<pause - screen 5>
+ * START Interrupt Class test *
+ do not know a portable BSP type interrupt test
+ * END Interrupt Class test *
+<pause - screen 6>
+ * START MessageQueue Class test *
+TA1 - construct message queue 1 with no memory error - RTEMS[05] too many
+TA1 - construct/create message queue 2 - RTEMS[00] successful completion
+TA1 - send u1 to mq_2 - RTEMS[00] successful completion
+TA1 - urgent send u2 to mq_2 - RTEMS[00] successful completion
+TA1 - create task 3_1 - RTEMS[00] successful completion
+TA1 - start task 3_1 - RTEMS[00] successful completion
+TA1 - create task 3_2 - RTEMS[00] successful completion
+TA1 - start task 3_2 - RTEMS[00] successful completion
+TA31 - construction connect mq_2 - RTEMS[00] successful completion
+TA31 - loopback from mq_2 to mq_2 ...
+TA31 - mq_2 receive - RTEMS[00] successful completion, size=12, message string size=11
+TA31 - loopback to mq_2 - RTEMS[00] successful completion
+TA32 - construction connect mq_2 - RTEMS[00] successful completion
+TA32 - loopback from mq_2 to mq_2 ...
+TA32 - mq_2 receive - RTEMS[00] successful completion, size=12, message string size=11
+TA32 - loopback to mq_2 - RTEMS[00] successful completion
+TA1 - receive u2 on mq_2 ...
+TA1 - RTEMS[00] successful completion
+TA1 - message u2 received correctly
+TA1 - receive u1 on mq_2 ...
+TA1 - RTEMS[00] successful completion
+TA1 - message u1 received correctly
+TA31 - loopback from mq_2 to mq_2 ...
+TA32 - loopback from mq_2 to mq_2 ...
+TA1 - broadcast send b1 ...
+TA1 - mq_2 broadcast send - RTEMS[00] successful completion, count=2
+TA31 - mq_2 receive - RTEMS[00] successful completion, size=18, message string size=17
+TA31 - loopback to mq_2 - RTEMS[00] successful completion
+TA31 - destory itself
+TA32 - mq_2 receive - RTEMS[00] successful completion, size=18, message string size=17
+TA32 - loopback to mq_2 - RTEMS[00] successful completion
+TA32 - destory itself
+TA1 - receive message b1 on mq_2 from TA31...
+TA1 - RTEMS[00] successful completion
+TA1 - message b1 received correctly
+TA1 - receive message b1 on mq_2 from TA31...
+TA1 - RTEMS[00] successful completion
+TA1 - message b1 received correctly
+TA1 - send f1 to mq_2 - RTEMS[00] successful completion
+TA1 - send f1 to mq_2 - RTEMS[00] successful completion
+TA1 - send f1 to mq_2 - RTEMS[00] successful completion
+TA1 - flush mq_2 - RTEMS[00] successful completion, flushed=3
+ * END MessageQueue Class test *
+<pause - screen 7>