From 03c1038edbe9b01a72d4775dcb6ffc1a03193a0c Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Wed, 10 Aug 2016 13:28:50 +1000 Subject: librtems++: Remove from RTEMS. This is old and there are better design patterns for threading and C++. We recommend you use the new C++ standards based support. Closes #2777. --- c/src/configure.ac | 6 - c/src/librtems++/Makefile.am | 23 - c/src/librtems++/README | 262 --------- c/src/librtems++/configure.ac | 35 -- c/src/librtems++/include/rtems++/rtemsEvent.h | 120 ---- c/src/librtems++/include/rtems++/rtemsInterrupt.h | 98 ---- .../librtems++/include/rtems++/rtemsMessageQueue.h | 170 ------ c/src/librtems++/include/rtems++/rtemsSemaphore.h | 144 ----- c/src/librtems++/include/rtems++/rtemsStatusCode.h | 55 -- c/src/librtems++/include/rtems++/rtemsTask.h | 160 ------ c/src/librtems++/include/rtems++/rtemsTaskMode.h | 204 ------- c/src/librtems++/include/rtems++/rtemsTimer.h | 135 ----- c/src/librtems++/preinstall.am | 67 --- c/src/librtems++/src/rtemsEvent.cc | 73 --- c/src/librtems++/src/rtemsInterrupt.cc | 126 ---- c/src/librtems++/src/rtemsMessageQueue.cc | 163 ------ c/src/librtems++/src/rtemsSemaphore.cc | 173 ------ c/src/librtems++/src/rtemsStatusCode.cc | 75 --- c/src/librtems++/src/rtemsTask.cc | 274 --------- c/src/librtems++/src/rtemsTimer.cc | 99 ---- testsuites/libtests/Makefile.am | 2 +- testsuites/libtests/configure.ac | 1 - testsuites/libtests/rtems++/Init.cc | 66 --- testsuites/libtests/rtems++/Makefile.am | 27 - testsuites/libtests/rtems++/System.h | 135 ----- testsuites/libtests/rtems++/Task1.cc | 631 --------------------- testsuites/libtests/rtems++/Task2.cc | 82 --- testsuites/libtests/rtems++/Task3.cc | 82 --- testsuites/libtests/rtems++/rtems++.doc | 26 - testsuites/libtests/rtems++/rtems++.scn | 149 ----- 30 files changed, 1 insertion(+), 3662 deletions(-) delete mode 100644 c/src/librtems++/Makefile.am delete mode 100644 c/src/librtems++/README delete mode 100644 c/src/librtems++/configure.ac delete mode 100644 c/src/librtems++/include/rtems++/rtemsEvent.h delete mode 100644 c/src/librtems++/include/rtems++/rtemsInterrupt.h delete mode 100644 c/src/librtems++/include/rtems++/rtemsMessageQueue.h delete mode 100644 c/src/librtems++/include/rtems++/rtemsSemaphore.h delete mode 100644 c/src/librtems++/include/rtems++/rtemsStatusCode.h delete mode 100644 c/src/librtems++/include/rtems++/rtemsTask.h delete mode 100644 c/src/librtems++/include/rtems++/rtemsTaskMode.h delete mode 100644 c/src/librtems++/include/rtems++/rtemsTimer.h delete mode 100644 c/src/librtems++/preinstall.am delete mode 100644 c/src/librtems++/src/rtemsEvent.cc delete mode 100644 c/src/librtems++/src/rtemsInterrupt.cc delete mode 100644 c/src/librtems++/src/rtemsMessageQueue.cc delete mode 100644 c/src/librtems++/src/rtemsSemaphore.cc delete mode 100644 c/src/librtems++/src/rtemsStatusCode.cc delete mode 100644 c/src/librtems++/src/rtemsTask.cc delete mode 100644 c/src/librtems++/src/rtemsTimer.cc delete mode 100644 testsuites/libtests/rtems++/Init.cc delete mode 100644 testsuites/libtests/rtems++/Makefile.am delete mode 100644 testsuites/libtests/rtems++/System.h delete mode 100644 testsuites/libtests/rtems++/Task1.cc delete mode 100644 testsuites/libtests/rtems++/Task2.cc delete mode 100644 testsuites/libtests/rtems++/Task3.cc delete mode 100644 testsuites/libtests/rtems++/rtems++.doc delete mode 100644 testsuites/libtests/rtems++/rtems++.scn diff --git a/c/src/configure.ac b/c/src/configure.ac index 6b34eb54f4..1543b5dc28 100644 --- a/c/src/configure.ac +++ b/c/src/configure.ac @@ -140,12 +140,6 @@ AC_SUBST(libbsp_cpu_subdir,$RTEMS_CPU) BSP_SUBDIRS="$BSP_SUBDIRS lib" BSP_SUBDIRS="$BSP_SUBDIRS libchip" - -AS_IF([test "$RTEMS_HAS_CPLUSPLUS" = "yes"],[ - AC_CONFIG_SUBDIRS([librtems++]) - BSP_SUBDIRS="$BSP_SUBDIRS librtems++" -]) - BSP_SUBDIRS="$BSP_SUBDIRS support" BSP_SUBDIRS="$BSP_SUBDIRS ada" BSP_SUBDIRS="$BSP_SUBDIRS wrapup" diff --git a/c/src/librtems++/Makefile.am b/c/src/librtems++/Makefile.am deleted file mode 100644 index ffc369ca09..0000000000 --- a/c/src/librtems++/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ -ACLOCAL_AMFLAGS = -I ../aclocal - -include $(top_srcdir)/../automake/compile.am - -if HAS_CXX -include_rtems__dir = $(includedir)/rtems++ - -include_rtems___HEADERS = include/rtems++/rtemsEvent.h \ - include/rtems++/rtemsInterrupt.h include/rtems++/rtemsMessageQueue.h \ - include/rtems++/rtemsSemaphore.h include/rtems++/rtemsStatusCode.h \ - include/rtems++/rtemsTask.h include/rtems++/rtemsTaskMode.h \ - include/rtems++/rtemsTimer.h - -project_lib_LIBRARIES = librtems++.a - -librtems___a_SOURCES = src/rtemsEvent.cc src/rtemsInterrupt.cc \ - src/rtemsMessageQueue.cc src/rtemsSemaphore.cc src/rtemsStatusCode.cc \ - src/rtemsTask.cc src/rtemsTimer.cc -librtems___a_CPPFLAGS = $(AM_CPPFLAGS) -endif - -include $(srcdir)/preinstall.am -include $(top_srcdir)/../automake/local.am diff --git a/c/src/librtems++/README b/c/src/librtems++/README deleted file mode 100644 index 93080d7f33..0000000000 --- a/c/src/librtems++/README +++ /dev/null @@ -1,262 +0,0 @@ -RTEMS C++ Library -================= - -The RTEMS C++ Library or librtems++ is a wrapper for the RTEMS API. -The classes provide as close a match to the RTEMS C API, for -performance, to share the existing C documentation as much as -possible, and to allow easy tracking of any changes to the RTEMS C -API. - -The C++ interface only uses RTEMS API calls. No external references -or internal interfaces are used. This allows the classes to be used -in separately compiled modules or applications which link to the RTEMS -trap interface. - -(This is the goal, which has not quite been reached. The TOD macro for -micro-seconds to ticks is used, and this uses an internal global RTEMS -variable) - -The C++ interface does not deal with RTEMS initialisation or the -device driver interface. The current view is these parts of a system -are best handled in the current manner. This means BSP for -initialisation and the C API for drivers. - -RTEMS C++ Classes -================= - -The classes map to the managers of RTEMS. - -The methods have default values selected which try to fit most cases -or follow the documented RTEMS default values. Moving from left to -right the parameters become less used, allowing the defaults to be -selected. An example is the scope parameter for most classes. This -can be local or global. I assume that most RTEMS objects are local, -therefore it has been made the last parameter. - -Inline methods have been used for methods which are commonly used in -applications. This tries to add the minimum of overhead. For -example, the methods to send or receive events are inline, while all -methods for control of a task are not. - -The RTEMS types, enumerations, and defines are used. If a new type, -enumeration or define is made it will map directly to the RTEMS -equivalent. For example the enumeration Scope is defined for various -classes which can be local or global. The elements of the enumeration -are forced to the same value as the RTEMS values. An enumeration is -used in this case to allow the compiler to type check a little -better. It saves having to check only RTEMS_LOCAL or RTEMS_GLOBAL is -passed as a parameter (I am not convinced this is really needed as the -goal was to not define anything and to only use what RTEMS provided). - -Where possible the various parts of an option bit set, or mode can be -controlled separately or controlled as a group. An example is the -task mode. The RTEMS C API allows a set of modes to be modified at -once. The TaskMode class allows this to occur, while also providing -methods to control a single mode item. - -The name of an object is always passed as a string. The classes turn -the string into a rtems_name variable. The string does not have to be -nul character terminated. - -The RTEMS C API uses 'delete' to remove or kill an RTEMS object. This -is a reserved word in C++, so the word 'destroy' is used instead. - -Calling the classes from interrupts follows the rules of RTEMS. An -exception introduced by the class library is the last status code. -There is only one last status code for each instance of the library's -classes and it is not protected. This needs to be watched for. Maybe -a better solution needs to be found, such as interrupt calls do not set -the last status code. - -RTEMS objects created by the C++ library can be operated on by C code -just as any other RTEMS object. If limitations exist they should be -documented in under the class. - -RTEMS Object Ownership -====================== - -The concept of ownership of an object is not defined as part of the -RTEMS C API. A piece of code executing as part a task can create a -message queue. Another piece of code running as part of a different -task can destroy the message queue. Correct behavior between the code -that creates the message queue and the code which destroy's the -message queue must be provided by the programmer. - -The librtems++ supports the concept of ownership of an RTEMS object. -Only the C++ object that creates the RTEMS object can destroy it. A -C++ object can connect to an existing RTEMS object and control it, -how-ever it can not destroy it. - -Copy constructors and assignment operators are provided to in-force -this rule. - -Ownership only applies to classes that create RTEMS objects. These -classes contain a flag which signals ownership of the id. - -Timeouts -======== - -The timeout value is specified in micro-seconds. The classes turn the -micro-second timeout value into ticks required by the RTEMS C API. - -This causes a problem for timeout values which are less than one tick. -This case is tested for and the timeout value is set to one tick. All -other cases round down to the nearest tick. - -Status Codes -============ - -All classes which form the C++ API are derived from the StatusCode -class. This class provides a common method for handling the status -code returned by RTEMS. - -The last returned status code is held in the StatusCode object. It -can be queried directly, or as a boolean. You can also obtain an -error string for the status code. - -The setting of a status code is restricted to derived classes. - -The last status code attribute of the class is only ever set to an -RTEMS defined status code. - -Event Class -=========== - -The event class allows users to send and receive events to and from -tasks. - -Events objects are by default connected the RTEMS_SELF task. A send -or receive will operate on the task currently executing. - -An Event object can be connected to a task using the connect method. -The name is the name of the task. Connection can also be achieved by -using the copy constructor or assignment operator. - -Events can be sent to a task by specifying an RTEMS task id, or by -passing a reference to a Task object. - -Interrupt Class -=============== - -The interrupt class allows a protected virtual method of a derived -class to be an interrupt handler. - -You derive from this class and provide the handler method. The next -interrupt after the vector is caught will cause the handler method to -be entered. - -You can chain the interrupt by calling the chain method. If the old -handler is not an instance of this class the chain is passed as "void -(*)(void)". If it is an instance of this class, the handler method is -directly called. (Chaining has not been tested) - -This class implements a table of pointers to the last instance to -catch the interrupt. A static method of the class catches the -interrupt and re-directs the interrupt to the instance in the table. -The re-direct adds a additional virtual function call and return to -the overhead of the interrupt. For a i386 type processor this is -about 12 instructions including the function call entry. - -Message Queue Class -=================== - -The MessageQueue class allows message queue's to be created, or -connected too. Only the creator can destroy a message queue. - -The class implements, sending, urgent sending, broadcast, flushing, -and receiving. - -Semaphore Class -=============== - -The Semaphore class allows semaphores to be created, or connected -too. Only the creator can destroy a semaphore. - -All types of semaphores can be created. - -(Not tested in the test code) - -Task Class -========== - -The Task class allows tasks to be created, or connected too. Only the -creator can destroy a task. - -If creating a task, derive from the Task class and provide the body -method. The body method is the entry point for a task. When -connecting to an existing task, no body method is required to be -provided. It is how-ever required if you create a task. This is not -enforced by the compiler, how-ever the default body will be entered, -and it contains no code. The RTEMS default behaviour for a task that -returns occurs. - -The mode of a task is controlled using the TaskMode class. - -The Task class allows you to start, restart, suspend, and resume a -task. You can control the priority, and access the note-pad -registers. The task can also be slept using the wake_after and -wake_when methods. - -Currently the task argument is used to pass the 'this' pointer to the -libraries default task body. The actual argument is held in the class -instance and passed to the virtual body method. This means of passing -the 'this' pointer through RTEMS to the default task body requires the -actual task object to perform a restart call. This is not really the -best solution to the problem. Another solution is to remove a notpad -register, say 31 from the task and use it. This would mean any Task -object could stop and restart a task how-ever a notpad register is -lost. Any other ideas are welcome. - -Task Mode Class -=============== - -The TaskMode class allows you to query or change the mode of a task. -The object only operates on the currently executing task. - -The standard flags defined in RTEMS are used. - -Methods are provided to operate on a group of modes which are required -to be changed in a single operation. The mode and mask is specified -by ORing the required flags as documented in the RTEMS manual. - -Methods are provided for accessing and controlling a specific mode. -The returned value will only contain the requested mode's flags, and -only the that mode will be changed when setting a mode. - -Timer Class -=========== - -The Timer class allows timers to be created. You cannot connect to an -existing timer. - -You derive from the Timer class and provide the trigger method. This -method is called when the timer triggers or times out. - -You can request a single shot timer using the fire_after or fire_when -methods, or a periodic timer by calling the repeat_file_at method. - -You cannot copy timer objects. - -Contact -======= -Send any question to me Chris Johns at cjohns@plessey.com.au, or the RTEMS -mailing list. - -To Do -===== - -1) Develop a complete test suite (under way, cjohns@plessey.com.au). - -2) Complete wrapping the remaining RTEMS C API. - -3) Provide light weight cout/cerr/clog classes based on printf for -embedded systems. - -4) Provide a memory serial class which maps the <> operators onto -raw memory in network byte order independent of CPU byte order. - -5) Fix the Task class so any Task object can restart a task. - -6) Provide some frame work classes which allow actor type objects that -start in an ordered manner. - diff --git a/c/src/librtems++/configure.ac b/c/src/librtems++/configure.ac deleted file mode 100644 index 085bb6a1ad..0000000000 --- a/c/src/librtems++/configure.ac +++ /dev/null @@ -1,35 +0,0 @@ -## Process this file with autoconf to produce a configure script. -## - -AC_PREREQ([2.69]) -AC_INIT([rtems-c-src-librtems++],[_RTEMS_VERSION],[https://devel.rtems.org/newticket],[rtems-c-src-librtems++]) -AC_CONFIG_SRCDIR([include/rtems++]) -RTEMS_TOP(../../..) - -RTEMS_CANONICAL_TARGET_CPU - -AM_INIT_AUTOMAKE([no-define foreign subdir-objects 1.12.2]) -AM_MAINTAINER_MODE - -RTEMS_ENABLE_CXX - -RTEMS_ENV_RTEMSBSP - -RTEMS_CHECK_CXX(RTEMS_BSP) -## check for g++ -RTEMS_PROG_CXX_FOR_TARGET -RTEMS_CANONICALIZE_TOOLS - -AM_CONDITIONAL(HAS_CXX,test "$HAS_CPLUSPLUS" = "yes") - -AC_LANG_PUSH(C++) -AC_CHECK_HEADER([cstring],[],[AC_MSG_ERROR([Required header cstring not found])]) -AC_CHECK_HEADER([cstdlib],[],[AC_MSG_ERROR([Required header cstdlib not found])]) -AC_LANG_POP - -RTEMS_PROJECT_ROOT -RTEMS_AMPOLISH3 - -# Explicitly list all Makefiles here -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT diff --git a/c/src/librtems++/include/rtems++/rtemsEvent.h b/c/src/librtems++/include/rtems++/rtemsEvent.h deleted file mode 100644 index c8f6cd4194..0000000000 --- a/c/src/librtems++/include/rtems++/rtemsEvent.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - rtemsEvent class. - - This class allows the user to send and receive RTEMS events to a task. - - ------------------------------------------------------------------------ */ - -#if !defined(_rtemsEvent_h_) -#define _rtemsEvent_h_ - -#include -#include - -/* ---- - rtemsEvent -*/ - -class rtemsEvent - : public rtemsStatusCode -{ -public: - // attribute a task can have - - enum WaitMode { wait = RTEMS_WAIT, - no_wait = RTEMS_NO_WAIT}; - enum Condition { any = RTEMS_EVENT_ANY, - all = RTEMS_EVENT_ALL}; - - // only the first 4 characters of the name are taken - - // connect to a task - rtemsEvent(const char* name, uint32_t node = RTEMS_SEARCH_ALL_NODES); - - // copy and default constructors - rtemsEvent(const rtemsEvent& event); - rtemsEvent(); - - virtual ~rtemsEvent(); - - // connect to an existing task object, will not be the owner - const rtemsEvent& operator=(const rtemsEvent& event); - virtual const rtems_status_code connect(const char *name, - const uint32_t node = RTEMS_SEARCH_ALL_NODES); - - // send an event - inline const rtems_status_code send(const rtems_id task, - const rtems_event_set events); - inline const rtems_status_code send(const rtemsTask& task, - const rtems_event_set events) ; - inline const rtems_status_code send(const rtems_event_set events); - - // receive an event, can block a task if no events waiting - inline const rtems_status_code receive(const rtems_event_set event_in, - rtems_event_set& event_out, - const rtems_interval micro_secs = 0, - const WaitMode wait = wait, - const Condition condition = any); - - // object id, and name - const rtems_id task_id_is() const { return id; } - const rtems_name task_name_is() const { return name; } - -private: - // task name - rtems_name name; - - // the rtems task id, object handle - rtems_id id; - -}; - -const rtems_status_code rtemsEvent::send(const rtems_id task, - const rtems_event_set events) -{ - set_status_code(rtems_event_send(task, events)); - return last_status_code(); -} - -const rtems_status_code rtemsEvent::send(const rtemsTask& task, - const rtems_event_set events) -{ - set_status_code(rtems_event_send(task.id_is(), events)); - return last_status_code(); -} - -const rtems_status_code rtemsEvent::send(const rtems_event_set events) -{ - set_status_code(rtems_event_send(id, events)); - return last_status_code(); -} - -const rtems_status_code rtemsEvent::receive(const rtems_event_set event_in, - rtems_event_set& event_out, - const rtems_interval micro_secs, - const WaitMode wait, - const Condition condition) -{ - rtems_interval usecs = micro_secs && - (micro_secs < rtems_configuration_get_microseconds_per_tick()) ? - rtems_configuration_get_microseconds_per_tick() : micro_secs; - set_status_code(rtems_event_receive(event_in, - wait | condition, - RTEMS_MICROSECONDS_TO_TICKS(usecs), - &event_out)); - return last_status_code(); -} - -#endif // _rtemsEvent_h_ diff --git a/c/src/librtems++/include/rtems++/rtemsInterrupt.h b/c/src/librtems++/include/rtems++/rtemsInterrupt.h deleted file mode 100644 index 75bc71f14e..0000000000 --- a/c/src/librtems++/include/rtems++/rtemsInterrupt.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - rtemsInterrupt class. - - This class catches an interrupt and passes control to the user's - derived class throught the handler method. - - The interrupt is released back to the previous handler when this - object destructs. - - The old handler can be chained to after the interrupt is - caught. Watch the stack usage! - - More than one instance of this class can catch the same vector. The - application will have to chain to the other objects if required. If - the old handler is not an instance of this class the chain is passed - as "void (*)(void)". If it is an instance of this class, the handler - method is directly called. - - The isr catch extends the documented return codes with : - - RTEMS_RESOURCE_IN_USE = interrupt already caught - - ------------------------------------------------------------------------ */ - -#if !defined(_rtemsInterrupt_h_) -#define _rtemsInterrupt_h_ - -#include - -/* ---- - rtemsInterrupt -*/ - -class rtemsInterrupt - : public rtemsStatusCode -{ -public: - rtemsInterrupt(); - virtual ~rtemsInterrupt(); - - // catch the interrupt - virtual const rtems_status_code isr_catch(const rtems_vector_number vector); - - // release the interrupt back to the previous handle - virtual const rtems_status_code release(); - - // the old handler - const rtems_isr_entry old_isr_handler() const { return old_handler; } - -protected: - - // called after the interrupt is caught and it goes off - virtual void handler() = 0; - - // chain to the previous handler, - inline void chain() const; - -private: - const rtemsInterrupt& operator=(const rtemsInterrupt& ); - rtemsInterrupt(const rtemsInterrupt& ); - - // the vector caught - rtems_vector_number vector; - - // true when the interrupt is caught - bool caught; - - // returned when catching the interrupt - rtems_isr_entry old_handler; - - // old interrupt table entry - rtemsInterrupt *old_interrupt; - - // common handler to redirect the interrupts - static void redirector(rtems_vector_number vector); -}; - -void rtemsInterrupt::chain() const -{ - if (old_interrupt) - old_interrupt->handler(); - else if (old_handler) - ((void(*)()) old_handler)(); -} - -#endif // _rtemsInterrupt_h_ diff --git a/c/src/librtems++/include/rtems++/rtemsMessageQueue.h b/c/src/librtems++/include/rtems++/rtemsMessageQueue.h deleted file mode 100644 index 6fc483e745..0000000000 --- a/c/src/librtems++/include/rtems++/rtemsMessageQueue.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - rtemsMessageQueue class. - - This class allows the user to create a RTEMS message queue, or to - access and manage an already existing message queue. - - The first constructor with the message queue parameters creates a - RTEMS message queue object. The destructor of this object also - deletes the message queue object. The last status code should be - checked after construction to see if the create completed - successfully. - - The second constructor connects to an existing message queue - object. The last status code should be checked after construction to - see if the message queue existed. - - The third constructor is a copy constructor. Connects to an existing - object which is in scope. - - The fourth constructor allows for the message queue to be created - after construction, or to connect to a message queue later. - - ------------------------------------------------------------------------ */ - -#if !defined(_rtemsMessageQueue_h_) -#define _rtemsMessageQueue_h_ - -#include - -/* ---- - rtemsMessageQueue -*/ - -class rtemsMessageQueue - : public rtemsStatusCode -{ -public: - // attribute a message queue can have - enum WaitMode { wait_by_fifo = RTEMS_FIFO, - wait_by_priority = RTEMS_PRIORITY }; - enum Scope { local = RTEMS_LOCAL, - global = RTEMS_GLOBAL }; - - // only the first 4 characters of the name are taken - - // creates a message queue - rtemsMessageQueue(const char* name, - const uint32_t count, - const size_t max_message_size, - const WaitMode wait_mode = wait_by_fifo, - const Scope scope = local); - - // connects to a message queue - rtemsMessageQueue(const char *name, const uint32_t node = RTEMS_SEARCH_ALL_NODES); - - // copy and default constructors - rtemsMessageQueue(const rtemsMessageQueue& message_queue); - rtemsMessageQueue(); - - // only the creator's destructor will delete the actual object - virtual ~rtemsMessageQueue(); - - // create or destroy (delete) the message queue - virtual const rtems_status_code create(const char* name, - const uint32_t count, - const size_t max_message_size, - const WaitMode wait_mode = wait_by_fifo, - const Scope scope = local); - virtual const rtems_status_code destroy(); - - // connect to an existing message queue object, will not be the owner - const rtemsMessageQueue& operator=(const rtemsMessageQueue& message_queue); - virtual const rtems_status_code connect(const char *name, - const uint32_t node = RTEMS_SEARCH_ALL_NODES); - - // send a message of size from the buffer - inline const rtems_status_code send(const void *buffer, - const size_t size); - inline const rtems_status_code urgent(const void *buffer, - const size_t size); - inline const rtems_status_code broadcast(const void *buffer, - const size_t size, - uint32_t& count); - - // receive a message of size, the timeout is in micro-secs - inline const rtems_status_code receive(const void *buffer, - size_t& size, - rtems_interval micro_secs = RTEMS_NO_TIMEOUT, - bool wait = true); - - // flush a message queue, returning the number of messages dropped - inline const rtems_status_code flush(uint32_t& size); - - // object id, and name - const rtems_id id_is() const { return id; } - const rtems_name name_is() const { return name; } - const char *name_string() const { return name_str; } - -private: - - // make this object reference an invalid RTEMS object - void make_invalid(); - - // message queue name - rtems_name name; - char name_str[5]; - - // owner, true if this object owns the message queue - // will delete the message queue when it destructs - bool owner; - - // the rtems id, object handle - rtems_id id; -}; - -const rtems_status_code rtemsMessageQueue::send(const void *buffer, - const size_t size) -{ - return set_status_code(rtems_message_queue_send(id, (void*) buffer, size)); -} - -const rtems_status_code rtemsMessageQueue::urgent(const void *buffer, - const size_t size) -{ - return set_status_code(rtems_message_queue_urgent(id, (void*) buffer, size)); -} - -const rtems_status_code rtemsMessageQueue::broadcast(const void *buffer, - const size_t size, - uint32_t& count) -{ - return set_status_code(rtems_message_queue_broadcast(id, - (void*) buffer, - size, - &count)); -} - -const rtems_status_code rtemsMessageQueue::receive(const void *buffer, - size_t& size, - rtems_interval micro_secs, - bool wait) -{ - rtems_interval usecs = micro_secs && - (micro_secs < rtems_configuration_get_microseconds_per_tick()) ? - rtems_configuration_get_microseconds_per_tick() : micro_secs; - return set_status_code(rtems_message_queue_receive(id, - (void*) buffer, - &size, - wait ? RTEMS_WAIT : RTEMS_NO_WAIT, - RTEMS_MICROSECONDS_TO_TICKS(usecs))); -} - -const rtems_status_code rtemsMessageQueue::flush(uint32_t& count) -{ - return set_status_code(rtems_message_queue_flush(id, &count)); -} - -#endif // _rtemsMessageQueue_h_ diff --git a/c/src/librtems++/include/rtems++/rtemsSemaphore.h b/c/src/librtems++/include/rtems++/rtemsSemaphore.h deleted file mode 100644 index 5ec38a62a7..0000000000 --- a/c/src/librtems++/include/rtems++/rtemsSemaphore.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - rtemsSemaphore class. - - This class allows the user to create a RTEMS semaphore, or to use an - already existing semaphore. The type of semaphore is decitated by - the constructor used. - - The first constructor with the semaphore parameters creates a RTEMS - semaphore object. The destructor of this object also deletes the - semaphore object. The last status code should be checked after - construction to see if the semaphore create was successfull. - - The second constructor connects to an existing. The last status code - should be checked after construction to see if the semaphore - existed. - - The third constructor is a copy constructor. Connects to an existing - object which is in scope. - - ------------------------------------------------------------------------ */ - -#if !defined(_rtemsSemaphore_h_) -#define _rtemsSemaphore_h_ - -#include - -/* ---- - rtemsSemaphore -*/ - -class rtemsSemaphore - : public rtemsStatusCode -{ -public: - // attribute a semaphore can have - enum WaitMode { wait_by_fifo = RTEMS_FIFO, - wait_by_priority = RTEMS_PRIORITY }; - enum Type { binary = RTEMS_BINARY_SEMAPHORE, - counting = RTEMS_COUNTING_SEMAPHORE }; - enum Priority { no_priority_inherit = RTEMS_NO_INHERIT_PRIORITY, - inherit_priority = RTEMS_INHERIT_PRIORITY }; - enum Ceiling { no_priority_ceiling = RTEMS_NO_PRIORITY_CEILING, - priority_ceiling = RTEMS_PRIORITY_CEILING }; - enum Scope { local = RTEMS_LOCAL, - global = RTEMS_GLOBAL }; - - // only the first 4 characters of the name are taken, - // the counter must be set to 1 for binary semaphores - - // create a semaphore object - rtemsSemaphore(const char* name, - const Scope scope = local, - const uint32_t counter = 1, - const WaitMode wait_mode = wait_by_fifo, - const Type type = binary, - const Priority priority = no_priority_inherit, - const Ceiling ceiling = no_priority_ceiling, - const rtems_task_priority priority_ceiling = 0); - - // connect to an existing semaphore object by name - rtemsSemaphore(const char *name, const uint32_t node); - - // attach this object to an other objects semaphore - rtemsSemaphore(const rtemsSemaphore& semaphore); - rtemsSemaphore(); - - // only the creator's destructor will delete the actual object - virtual ~rtemsSemaphore(); - - // create or destroy (delete) a semaphore - virtual const rtems_status_code create(const char* name, - const Scope scope = local, - const uint32_t counter = 1, - const WaitMode wait_mode = wait_by_fifo, - const Type type = binary, - const Priority priority = no_priority_inherit, - const Ceiling ceiling = no_priority_ceiling, - const rtems_task_priority priority_ceiling = 0); - virtual const rtems_status_code destroy(); - - // connect to an existing semaphore object, will not be the owner - const rtemsSemaphore& operator=(const rtemsSemaphore& semaphore); - virtual const rtems_status_code connect(const char *name, uint32_t node); - - // obtain the semaphore, timeout is in micro-seconds - inline const rtems_status_code obtain(bool wait = true, - const uint32_t micro_secs = RTEMS_NO_TIMEOUT); - - // release the semaphore, blocks threads eligble - inline const rtems_status_code release(); - - // object id, and name - const rtems_id id_is() const { return id; } - const rtems_name name_is() const { return name; } - const char *name_string() const { return name_str; } - -private: - - // make the object reference no valid RTEMS object - void make_invalid(); - - // semaphore name - rtems_name name; - char name_str[5]; - - // owner, true if this object owns the semaphore - // will delete the semaphore when it destructs - bool owner; - - // the rtems id, object handle - rtems_id id; -}; - -const rtems_status_code rtemsSemaphore::obtain(const bool wait, - const uint32_t micro_secs) -{ - rtems_interval usecs = micro_secs && - (micro_secs < rtems_configuration_get_microseconds_per_tick()) ? - rtems_configuration_get_microseconds_per_tick() : micro_secs; - - return - set_status_code(rtems_semaphore_obtain(id, - wait ? RTEMS_WAIT : RTEMS_NO_WAIT, - RTEMS_MICROSECONDS_TO_TICKS(usecs))); -} - -const rtems_status_code rtemsSemaphore::release(void) -{ - return set_status_code(rtems_semaphore_release(id)); -} - -#endif // _rtemsSemaphore_h_ diff --git a/c/src/librtems++/include/rtems++/rtemsStatusCode.h b/c/src/librtems++/include/rtems++/rtemsStatusCode.h deleted file mode 100644 index 8bc0609f4a..0000000000 --- a/c/src/librtems++/include/rtems++/rtemsStatusCode.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - rtemsStatusCode controls and manages status codes from the RTEMS kernel. - - ------------------------------------------------------------------------ -*/ - -#if !defined(_rtemsStatusCode_h_) -#define _rtemsStatusCode_h_ - -#include - -/* ---- - rtemsStatusCode -*/ - -class rtemsStatusCode -{ -public: - - rtemsStatusCode() { last_status = RTEMS_NOT_CONFIGURED; } - - const bool successful() { return last_status == RTEMS_SUCCESSFUL; } - const bool unsuccessful() { return last_status != RTEMS_SUCCESSFUL; } - - // return the last status code - const rtems_status_code last_status_code() { return last_status; } - - // return the last status as a string - const char *last_status_string(); - - const char *status_string(rtems_status_code status_code); - -protected: - const rtems_status_code set_status_code(const rtems_status_code status) - { return (last_status = status); } - -private: - - // public at the moment, this might change - rtems_status_code last_status; -}; - -#endif // _rtemsStatusCode_h_ diff --git a/c/src/librtems++/include/rtems++/rtemsTask.h b/c/src/librtems++/include/rtems++/rtemsTask.h deleted file mode 100644 index 7d151c2f50..0000000000 --- a/c/src/librtems++/include/rtems++/rtemsTask.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - rtemsTask class. - - This class allows the user to create a RTEMS task, or to access and - manage an already existing task. - - The first constructor with the task parameters creates a RTEMS task - object. The destructor of this object also deletes the task - object. The last status code should be checked after construction to - see if the create completed successfully. - - The second constructor connects to an existing task object. The last - status code should be checked after construction to see if the - task existed. - - The third constructor is a copy constructor. Connects to an existing - object which is in scope. - - The RTEMS id is set to self in the default construction. - - The creation of the task object can be defered until after - construction. This allows for static task objects to be created. - - RTEMS should be initialised before static constructors run, how-ever - threads will will not. You need to watch the start-order. - - A task object can change state from an owner of a task to being - connected to a task. - - Task objects connected to another task do not receive notification - when the task connected to changes state. - - The sleep methods operate on the current thread not the task - reference by this object. - - Mode control is through the rtemsTaskMode class. - - ------------------------------------------------------------------------ */ - -#if !defined(_rtemsTask_h_) -#define _rtemsTask_h_ - -#include - -/* ---- - rtemsTask -*/ - -class rtemsTask - : public rtemsStatusCode -{ -public: - enum FloatingPoint { fpoff = RTEMS_NO_FLOATING_POINT, - fpon = RTEMS_FLOATING_POINT }; - enum Scope { local = RTEMS_LOCAL, - global = RTEMS_GLOBAL }; - - // only the first 4 characters of the name are taken - - // creates a task - rtemsTask(const char* name, - const rtems_task_priority initial_priority, - const uint32_t stack_size, - const rtems_mode preemption = RTEMS_NO_PREEMPT, - const rtems_mode timeslice = RTEMS_NO_TIMESLICE, - const rtems_mode asr = RTEMS_NO_ASR, - const rtems_interrupt_level interrupt_level = 0, - const FloatingPoint floating_point = fpoff, - const Scope scope = local); - - // connects to a task - rtemsTask(const char *name, const uint32_t node = RTEMS_SEARCH_ALL_NODES); - - // copy and default constructors - rtemsTask(const rtemsTask& task); - rtemsTask(); - - // only the creator's destructor will delete the actual object - virtual ~rtemsTask(); - - // create or destroy (delete) the task - virtual const rtems_status_code create(const char* name, - const rtems_task_priority initial_priority, - const uint32_t stack_size, - const rtems_mode preemption = RTEMS_NO_PREEMPT, - const rtems_mode timeslice = RTEMS_NO_TIMESLICE, - const rtems_mode asr = RTEMS_NO_ASR, - const rtems_interrupt_level interrupt_level = 0, - const FloatingPoint floating_point = fpoff, - const Scope scope = local); - virtual const rtems_status_code destroy(); - - // connect to an existing task object, will not be the owner - const rtemsTask& operator=(const rtemsTask& task); - virtual const rtems_status_code connect(const char *name, - const uint32_t node = RTEMS_SEARCH_ALL_NODES); - - // run control - virtual const rtems_status_code start(const rtems_task_argument argument); - virtual const rtems_status_code restart(const rtems_task_argument argument); - virtual const rtems_status_code suspend(); - virtual const rtems_status_code resume(); - - // sleep control, the timeout is in micro-seconds - virtual const rtems_status_code wake_after(const rtems_interval micro_secs); - virtual const rtems_status_code wake_when(const rtems_time_of_day& tod); - - // priority control - const rtems_status_code get_priority(rtems_task_priority& priority); - const rtems_status_code set_priority(const rtems_task_priority priority); - const rtems_status_code set_priority(const rtems_task_priority priority, - rtems_task_priority& old_priority); - - // object id, and name - const rtems_id id_is() const { return id; } - const rtems_name name_is() const { return name; } - const char *name_string() const { return name_str; } - -protected: - - // task entry point - virtual void body(rtems_task_argument argument); - -private: - - // make the object to point to RTEMS_SELF - void make_self(); - - // task name - rtems_name name; - char name_str[5]; - - // owner, true if this object owns the task - // will delete the task when it destructs - bool owner; - - // the rtems id, object handle - rtems_id id; - - // the argument for the task, this class uses the actual argument - // passed to RTEMS - rtems_task_argument argument; - - // common entry point to the task - static rtems_task origin(rtems_task_argument argument); -}; - -#endif // _rtemsTask_h_ diff --git a/c/src/librtems++/include/rtems++/rtemsTaskMode.h b/c/src/librtems++/include/rtems++/rtemsTaskMode.h deleted file mode 100644 index a62c588dd3..0000000000 --- a/c/src/librtems++/include/rtems++/rtemsTaskMode.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - rtemsTaskMode class. - - This class allows the user to query or change the mode of an RTEMS - task. - - This object only operates on the currently executing task. - - The standard flags defined in RTEMS are used. - - Methods are provided to operate on a group of modes which are - required to be changed in a single operation. The mode and mask is - specified by ORing the required flags. - - Methods are provided for accessing and controlling a specific - mode. The returned value will only contain the requested mode's flags, - and only the that mode will be changed when setting a mode. - - ------------------------------------------------------------------------ */ - -#if !defined(_rtemsTaskMode_h_) -#define _rtemsTaskMode_h_ - -#include - -/* ---- - rtemsTaskMode -*/ - -class rtemsTaskMode - : public rtemsStatusCode -{ -public: - - rtemsTaskMode() {}; - - // group mode control, OR the values together - inline const rtems_status_code get_mode(rtems_mode& mode); - inline const rtems_status_code set_mode(const rtems_mode mode, - const rtems_mode mask); - inline const rtems_status_code set_mode(const rtems_mode mode, - const rtems_mode mask, - rtems_mode& old_mode); - - // preemption control - inline const rtems_status_code get_preemption_state(rtems_mode& preemption); - inline const rtems_status_code set_preemption_state(const rtems_mode preemption); - inline const rtems_status_code set_preemption_state(const rtems_mode preemption, - rtems_mode& old_preemption); - inline const bool preemption_set(const rtems_mode preemption); - - // timeslice control - inline const rtems_status_code get_timeslice_state(rtems_mode& timeslice); - inline const rtems_status_code set_timeslice_state(const rtems_mode timeslice); - inline const rtems_status_code set_timeslice_state(const rtems_mode timeslice, - rtems_mode& old_timeslice); - inline const bool timeslice_set(const rtems_mode preemption); - - // async-sub-routine control - inline const rtems_status_code get_asr_state(rtems_mode& asr); - inline const rtems_status_code set_asr_state(const rtems_mode asr); - inline const rtems_status_code set_asr_state(const rtems_mode asr, - rtems_mode& old_asr); - inline const bool asr_set(const rtems_mode preemption); - - // interrupt mask control - inline const rtems_status_code get_interrupt_level(rtems_interrupt_level& level); - inline const rtems_status_code set_interrupt_level(const rtems_interrupt_level level); - inline const rtems_status_code set_interrupt_level(const rtems_interrupt_level level, - rtems_interrupt_level& old_level); -}; - -const rtems_status_code rtemsTaskMode::get_mode(rtems_mode& mode) -{ - return set_status_code(rtems_task_mode(0, RTEMS_CURRENT_MODE, &mode)); -} - -const rtems_status_code rtemsTaskMode::set_mode(const rtems_mode mode, - const rtems_mode mask) -{ - rtems_mode old_mode; - return set_status_code(rtems_task_mode(mode, mask, &old_mode)); -} - -const rtems_status_code rtemsTaskMode::set_mode(const rtems_mode mode, - const rtems_mode mask, - rtems_mode& old_mode) -{ - return set_status_code(rtems_task_mode(mode, mask, &old_mode)); -} - -const rtems_status_code rtemsTaskMode::get_preemption_state(rtems_mode& preemption) -{ - set_status_code(rtems_task_mode(0, RTEMS_CURRENT_MODE, &preemption)); - preemption &= RTEMS_PREEMPT_MASK; - return last_status_code(); -} - -const rtems_status_code rtemsTaskMode::set_preemption_state(const rtems_mode preemption) -{ - rtems_mode old_mode; - return set_status_code(rtems_task_mode(preemption, RTEMS_PREEMPT_MASK, &old_mode)); -} - -const rtems_status_code rtemsTaskMode::set_preemption_state(const rtems_mode preemption, - rtems_mode& old_preemption) -{ - set_status_code(rtems_task_mode(preemption, RTEMS_PREEMPT_MASK, &old_preemption)); - old_preemption &= RTEMS_PREEMPT_MASK; - return last_status_code(); -} - -const bool rtemsTaskMode::preemption_set(const rtems_mode preemption) -{ - return (preemption & RTEMS_PREEMPT_MASK) ? false : true; -} - -const rtems_status_code rtemsTaskMode::get_timeslice_state(rtems_mode& timeslice) -{ - set_status_code(rtems_task_mode(0, RTEMS_CURRENT_MODE, ×lice)); - timeslice &= RTEMS_TIMESLICE_MASK; - return last_status_code(); -} - -const rtems_status_code rtemsTaskMode::set_timeslice_state(const rtems_mode timeslice) -{ - rtems_mode old_mode; - return set_status_code(rtems_task_mode(timeslice, RTEMS_TIMESLICE_MASK, &old_mode)); -} - -const rtems_status_code rtemsTaskMode::set_timeslice_state(const rtems_mode timeslice, - rtems_mode& old_timeslice) -{ - set_status_code(rtems_task_mode(timeslice, RTEMS_TIMESLICE_MASK, &old_timeslice)); - old_timeslice &= RTEMS_TIMESLICE_MASK; - return last_status_code(); -} - -const bool rtemsTaskMode::timeslice_set(const rtems_mode timeslice) -{ - return (timeslice & RTEMS_TIMESLICE_MASK) ? true : false; -} - -const rtems_status_code rtemsTaskMode::get_asr_state(rtems_mode& asr) -{ - set_status_code(rtems_task_mode(0, RTEMS_CURRENT_MODE, &asr)); - asr &= RTEMS_ASR_MASK; - return last_status_code(); -} - -const rtems_status_code rtemsTaskMode::set_asr_state(const rtems_mode asr) -{ - rtems_mode old_mode; - return set_status_code(rtems_task_mode(asr, RTEMS_ASR_MASK, &old_mode)); -} - -const rtems_status_code rtemsTaskMode::set_asr_state(const rtems_mode asr, - rtems_mode& old_asr) -{ - set_status_code(rtems_task_mode(asr, RTEMS_ASR_MASK, &old_asr)); - old_asr &= RTEMS_ASR_MASK; - return last_status_code(); -} - -const bool rtemsTaskMode::asr_set(const rtems_mode asr) -{ - return (asr & RTEMS_ASR_MASK) ? true : false; -} - -const rtems_status_code rtemsTaskMode::get_interrupt_level(rtems_interrupt_level& level) -{ - rtems_mode mode; - set_status_code(rtems_task_mode(0, RTEMS_CURRENT_MODE, &mode)); - level = mode & RTEMS_INTERRUPT_MASK; - return last_status_code(); -} - -const rtems_status_code rtemsTaskMode::set_interrupt_level(const rtems_interrupt_level level) -{ - rtems_mode old_mode; - return set_status_code(rtems_task_mode(level, RTEMS_INTERRUPT_MASK, &old_mode)); -} - -const rtems_status_code rtemsTaskMode::set_interrupt_level(rtems_interrupt_level level, - rtems_interrupt_level& old_level) -{ - set_status_code(rtems_task_mode(level, RTEMS_INTERRUPT_MASK, &old_level)); - old_level = old_level & RTEMS_INTERRUPT_MASK; - return last_status_code(); -} - -#endif // _rtemsTaskMode_h_ diff --git a/c/src/librtems++/include/rtems++/rtemsTimer.h b/c/src/librtems++/include/rtems++/rtemsTimer.h deleted file mode 100644 index c7d451b06b..0000000000 --- a/c/src/librtems++/include/rtems++/rtemsTimer.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - rtemsTimer class. - - This class allows the user to create a RTEMS timer. - - The trigger method is called when the timer expires. The method is - called using the thread which calls the RTEMS 'rtems_clock_tick' - method. - - Timers are always local to a node. - - ------------------------------------------------------------------------ */ - -#if !defined(_rtemsTimer_h_) -#define _rtemsTimer_h_ - -#include - -/* ---- - rtemsTimer -*/ - -class rtemsTimer - : public rtemsStatusCode -{ -public: - // only the first 4 characters of the name are taken, - - // create a timer object - rtemsTimer(const char* name); - rtemsTimer(); - - // destroies the actual object - virtual ~rtemsTimer(); - - // create or destroy (delete) the timer - virtual const rtems_status_code create(const char* name); - virtual const rtems_status_code destroy(); - - // timer control - inline const rtems_status_code fire_after(const rtems_interval micro_secs); - inline const rtems_status_code repeat_fire_at(const rtems_interval micro_secs); - inline const rtems_status_code fire_when(const rtems_time_of_day& when); - - inline const rtems_status_code cancel(); - inline const rtems_status_code reset(); - - // object id, and name - const rtems_id id_is() const { return id; } - const rtems_name name_is() const { return name; } - const char *name_string() const { return name_str; } - -protected: - - // triggered method is called when the timer fires - virtual void triggered() = 0; - -private: - // not permitted - rtemsTimer(const rtemsTimer& timer); - rtemsTimer& operator=(const rtemsTimer& timer); - - // make this object reference an invalid RTEMS object - void make_invalid(); - - // semaphore name - rtems_name name; - char name_str[5]; - - // repeat true restart the timer when it fires - bool repeat; - - // the rtems id, object handle - rtems_id id; - - // common timer handler - static void common_handler(rtems_id id, void *user_data); -}; - -const rtems_status_code rtemsTimer::fire_after(const rtems_interval micro_secs) -{ - repeat = false; - rtems_interval usecs = micro_secs && - (micro_secs < rtems_configuration_get_microseconds_per_tick()) ? - rtems_configuration_get_microseconds_per_tick() : micro_secs; - return set_status_code(rtems_timer_fire_after(id, - RTEMS_MICROSECONDS_TO_TICKS(usecs), - common_handler, - this)); -} - -const rtems_status_code rtemsTimer::repeat_fire_at(const rtems_interval micro_secs) -{ - repeat = true; - rtems_interval usecs = micro_secs && - (micro_secs < rtems_configuration_get_microseconds_per_tick()) ? - rtems_configuration_get_microseconds_per_tick() : micro_secs; - return set_status_code(rtems_timer_fire_after(id, - RTEMS_MICROSECONDS_TO_TICKS(usecs), - common_handler, - this)); -} - -const rtems_status_code rtemsTimer::fire_when(const rtems_time_of_day& when) -{ - return set_status_code(rtems_timer_fire_when(id, - (rtems_time_of_day*) &when, - common_handler, - this)); -} - -const rtems_status_code rtemsTimer::cancel() -{ - repeat = false; - return set_status_code(rtems_timer_cancel(id)); -} - -const rtems_status_code rtemsTimer::reset() -{ - return set_status_code(rtems_timer_reset(id)); -} - -#endif // _rtemsTimer_h_ diff --git a/c/src/librtems++/preinstall.am b/c/src/librtems++/preinstall.am deleted file mode 100644 index 211168926d..0000000000 --- a/c/src/librtems++/preinstall.am +++ /dev/null @@ -1,67 +0,0 @@ -## Automatically generated by ampolish3 - Do not edit - -if AMPOLISH3 -$(srcdir)/preinstall.am: Makefile.am - $(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am -endif - -PREINSTALL_DIRS = -DISTCLEANFILES = $(PREINSTALL_DIRS) - -all-am: $(PREINSTALL_FILES) - -PREINSTALL_FILES = -CLEANFILES = $(PREINSTALL_FILES) - -all-local: $(TMPINSTALL_FILES) - -TMPINSTALL_FILES = -CLEANFILES += $(TMPINSTALL_FILES) - -$(PROJECT_LIB)/$(dirstamp): - @$(MKDIR_P) $(PROJECT_LIB) - @: > $(PROJECT_LIB)/$(dirstamp) -PREINSTALL_DIRS += $(PROJECT_LIB)/$(dirstamp) - -if HAS_CXX -$(PROJECT_INCLUDE)/rtems++/$(dirstamp): - @$(MKDIR_P) $(PROJECT_INCLUDE)/rtems++ - @: > $(PROJECT_INCLUDE)/rtems++/$(dirstamp) -PREINSTALL_DIRS += $(PROJECT_INCLUDE)/rtems++/$(dirstamp) - -$(PROJECT_INCLUDE)/rtems++/rtemsEvent.h: include/rtems++/rtemsEvent.h $(PROJECT_INCLUDE)/rtems++/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems++/rtemsEvent.h -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems++/rtemsEvent.h - -$(PROJECT_INCLUDE)/rtems++/rtemsInterrupt.h: include/rtems++/rtemsInterrupt.h $(PROJECT_INCLUDE)/rtems++/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems++/rtemsInterrupt.h -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems++/rtemsInterrupt.h - -$(PROJECT_INCLUDE)/rtems++/rtemsMessageQueue.h: include/rtems++/rtemsMessageQueue.h $(PROJECT_INCLUDE)/rtems++/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems++/rtemsMessageQueue.h -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems++/rtemsMessageQueue.h - -$(PROJECT_INCLUDE)/rtems++/rtemsSemaphore.h: include/rtems++/rtemsSemaphore.h $(PROJECT_INCLUDE)/rtems++/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems++/rtemsSemaphore.h -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems++/rtemsSemaphore.h - -$(PROJECT_INCLUDE)/rtems++/rtemsStatusCode.h: include/rtems++/rtemsStatusCode.h $(PROJECT_INCLUDE)/rtems++/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems++/rtemsStatusCode.h -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems++/rtemsStatusCode.h - -$(PROJECT_INCLUDE)/rtems++/rtemsTask.h: include/rtems++/rtemsTask.h $(PROJECT_INCLUDE)/rtems++/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems++/rtemsTask.h -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems++/rtemsTask.h - -$(PROJECT_INCLUDE)/rtems++/rtemsTaskMode.h: include/rtems++/rtemsTaskMode.h $(PROJECT_INCLUDE)/rtems++/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems++/rtemsTaskMode.h -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems++/rtemsTaskMode.h - -$(PROJECT_INCLUDE)/rtems++/rtemsTimer.h: include/rtems++/rtemsTimer.h $(PROJECT_INCLUDE)/rtems++/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems++/rtemsTimer.h -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems++/rtemsTimer.h - -$(PROJECT_LIB)/librtems++.a: librtems++.a $(PROJECT_LIB)/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_LIB)/librtems++.a -TMPINSTALL_FILES += $(PROJECT_LIB)/librtems++.a -endif diff --git a/c/src/librtems++/src/rtemsEvent.cc b/c/src/librtems++/src/rtemsEvent.cc deleted file mode 100644 index c121e167ea..0000000000 --- a/c/src/librtems++/src/rtemsEvent.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include - -/* ---- - rtemsEvent -*/ - -rtemsEvent::rtemsEvent(const char *name_str, uint32_t node) - : name(rtems_build_name('S', 'E', 'L', 'F')), - id(RTEMS_SELF) -{ - connect(name_str, node); -} - -rtemsEvent::rtemsEvent(const rtemsEvent& event) -{ - name = event.name; - id = event.id; -} - -rtemsEvent::rtemsEvent() - : name(rtems_build_name('S', 'E', 'L', 'F')), - id(RTEMS_SELF) -{ -} - -rtemsEvent::~rtemsEvent() -{ -} - -const rtemsEvent& rtemsEvent::operator=(const rtemsEvent& event) -{ - name = event.name; - id = event.id; - - return *this; -} - -const rtems_status_code rtemsEvent::connect(const char *name_str, - const uint32_t node) -{ - name = rtems_build_name(name_str[0], - name_str[1], - name_str[2], - name_str[3]); - - set_status_code(rtems_task_ident(name, node, &id)); - - if (unsuccessful()) - { - name = rtems_build_name('S', 'E', 'L', 'F'); - id = RTEMS_SELF; - } - - return last_status_code(); -} diff --git a/c/src/librtems++/src/rtemsInterrupt.cc b/c/src/librtems++/src/rtemsInterrupt.cc deleted file mode 100644 index fee91bdac9..0000000000 --- a/c/src/librtems++/src/rtemsInterrupt.cc +++ /dev/null @@ -1,126 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include - -#if (CPU_SIMPLE_VECTORED_INTERRUPTS == TRUE) - -/* ---- - Interrupt Table - - This table is used to re-direct the call from RTEMS to a user - object -*/ - -static rtemsInterrupt **interrupt_table; - -// has the table been initialised -static bool initialised = false; - -/* ---- - rtemsInterrupt -*/ - -#include - -rtemsInterrupt::rtemsInterrupt() - : vector(0), - caught(false), - old_handler(0), - old_interrupt(0) -{ - if (!initialised) - { - interrupt_table = (rtemsInterrupt **) - malloc(sizeof(rtemsInterrupt *) * CPU_INTERRUPT_NUMBER_OF_VECTORS); - for (rtems_vector_number vec = 0; - vec < CPU_INTERRUPT_NUMBER_OF_VECTORS; - vec++) - { - interrupt_table[vec] = 0; - } - initialised = true; - } -} - -rtemsInterrupt::~rtemsInterrupt() -{ - release(); -} - -const rtems_status_code rtemsInterrupt::isr_catch(const rtems_vector_number vec) -{ - if (vec >= CPU_INTERRUPT_NUMBER_OF_VECTORS) - return set_status_code(RTEMS_INVALID_NUMBER); - - if (caught) - return set_status_code(RTEMS_RESOURCE_IN_USE); - - old_interrupt = interrupt_table[vec]; - interrupt_table[vec] = this; - vector = vec; - -#if (CPU_SIMPLE_VECTORED_INTERRUPTS == TRUE) - set_status_code(rtems_interrupt_catch(redirector, - vector, - &old_handler)); -#else - set_status_code(RTEMS_NOT_DEFINED); -#endif - if (successful()) - caught = true; - else - { - interrupt_table[vector] = old_interrupt; - old_interrupt = 0; - old_handler = 0; - vector = 0; - } - - return last_status_code(); -} - -const rtems_status_code rtemsInterrupt::release(void) -{ - if (caught) - { -#if (CPU_SIMPLE_VECTORED_INTERRUPTS == TRUE) - set_status_code(rtems_interrupt_catch(old_handler, - vector, - &old_handler)); -#else - set_status_code(RTEMS_NOT_DEFINED); -#endif - interrupt_table[vector] = old_interrupt; - old_interrupt = 0; - old_handler = 0; - vector = 0; - caught = false; - } - else - set_status_code(RTEMS_SUCCESSFUL); - - return last_status_code(); -} - -void rtemsInterrupt::redirector(rtems_vector_number vector) -{ - if (interrupt_table[vector]) - interrupt_table[vector]->handler(); -} -#endif diff --git a/c/src/librtems++/src/rtemsMessageQueue.cc b/c/src/librtems++/src/rtemsMessageQueue.cc deleted file mode 100644 index 0fe8aa53f7..0000000000 --- a/c/src/librtems++/src/rtemsMessageQueue.cc +++ /dev/null @@ -1,163 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include -#include - -/* ---- - rtemsMessageQueue -*/ - -rtemsMessageQueue::rtemsMessageQueue(const char* mqname, - const uint32_t count, - const size_t max_message_size, - const WaitMode wait_mode, - const Scope scope) - : name(0), - owner(true), - id(0) -{ - strcpy(name_str, "NOID"); - create(mqname, count, max_message_size, wait_mode, scope); -} - -rtemsMessageQueue::rtemsMessageQueue(const char *mqname, - const uint32_t node) - : name(0), - owner(false), - id(0) -{ - strcpy(name_str, "NOID"); - connect(mqname, node); -} - -rtemsMessageQueue::rtemsMessageQueue(const rtemsMessageQueue& message_queue) - : name(0), - owner(false), - id(0) -{ - name = message_queue.name; - strcpy(name_str, message_queue.name_str); - id = message_queue.id; -} - -rtemsMessageQueue::rtemsMessageQueue() - : name(0), - owner(false), - id(0) -{ - strcpy(name_str, "NOID"); -} - -rtemsMessageQueue::~rtemsMessageQueue() -{ - destroy(); -} - -void rtemsMessageQueue::make_invalid() -{ - strcpy(name_str, "NOID"); - name = 0; - id = 0; - owner = false; -} - -const rtems_status_code rtemsMessageQueue::create(const char* mqname, - const uint32_t count, - const size_t max_message_size, - const WaitMode wait_mode, - const Scope scope) -{ - if (id) - return set_status_code(RTEMS_ILLEGAL_ON_SELF); - - owner = true; - - strcpy(name_str, " "); - for (int c = 0; (c < 4) && (mqname[c] != '\0'); c++) - name_str[c] = mqname[c]; - name = rtems_build_name(name_str[0], - name_str[1], - name_str[2], - name_str[3]); - - set_status_code(rtems_message_queue_create(name, - count, - max_message_size, - scope | wait_mode, - &id)); - - if (unsuccessful()) - { - make_invalid(); - } - - return last_status_code(); -} - -const rtems_status_code rtemsMessageQueue::destroy() -{ - if (id && owner) - { - set_status_code(rtems_message_queue_delete(id)); - make_invalid(); - } - else - set_status_code(RTEMS_NOT_OWNER_OF_RESOURCE); - - return last_status_code(); -} - -const rtemsMessageQueue& rtemsMessageQueue::operator=(const rtemsMessageQueue& message_queue) -{ - if (!owner) - { - name = message_queue.name; - strcpy(name_str, message_queue.name_str); - id = message_queue.id; - } - - return *this; -} - -const rtems_status_code rtemsMessageQueue::connect(const char *mqname, - const uint32_t node) -{ - if (id && owner) - return set_status_code(RTEMS_UNSATISFIED); - - // change state to not owner - owner = false; - - strcpy(name_str, " "); - for (int c = 0; (c < 4) && (mqname[c] != '\0'); c++) - name_str[c] = mqname[c]; - name = rtems_build_name(name_str[0], - name_str[1], - name_str[2], - name_str[3]); - - set_status_code(rtems_message_queue_ident(name, node, &id)); - - if (unsuccessful()) - { - make_invalid(); - } - - return last_status_code(); -} diff --git a/c/src/librtems++/src/rtemsSemaphore.cc b/c/src/librtems++/src/rtemsSemaphore.cc deleted file mode 100644 index 04827b38cd..0000000000 --- a/c/src/librtems++/src/rtemsSemaphore.cc +++ /dev/null @@ -1,173 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include -#include - -/* ---- - rtemsSemaphore -*/ - -rtemsSemaphore::rtemsSemaphore(const char* sname, - const Scope scope, - const uint32_t counter, - const WaitMode wait_mode, - const Type type, - const Priority priority, - const Ceiling ceiling, - const rtems_task_priority priority_ceiling) - : name(0), - owner(true), - id(0) -{ - strcpy(name_str, "NOID"); - create(sname, - scope, - counter, - wait_mode, - type, - priority, - ceiling, - priority_ceiling); -} - -rtemsSemaphore::rtemsSemaphore(const char *sname, const uint32_t node) - : name(0), - owner(false), - id(0) -{ - strcpy(name_str, "NOID"); - connect(sname, node); -} - -rtemsSemaphore::rtemsSemaphore(const rtemsSemaphore& semaphore) - : name(0), - owner(false), - id(0) -{ - name = semaphore.name; - strcpy(name_str, semaphore.name_str); - id = semaphore.id; -} - -rtemsSemaphore::rtemsSemaphore() - : name(0), - owner(false), - id(0) -{ - strcpy(name_str, "NOID"); -} - -rtemsSemaphore::~rtemsSemaphore() -{ - destroy(); -} - -void rtemsSemaphore::make_invalid() -{ - strcpy(name_str, "NOID"); - name = 0; - id = 0; - owner = false; -} - -const rtems_status_code rtemsSemaphore::create(const char* sname, - const Scope scope, - const uint32_t counter, - const WaitMode wait_mode, - const Type type, - const Priority priority, - const Ceiling ceiling, - const rtems_task_priority priority_ceiling) -{ - if (id) - return set_status_code(RTEMS_ILLEGAL_ON_SELF); - - owner = true; - - strcpy(name_str, " "); - for (int c = 0; (c < 4) && (sname[c] != '\0'); c++) - name_str[c] = sname[c]; - name = rtems_build_name(name_str[0], - name_str[1], - name_str[2], - name_str[3]); - - set_status_code(rtems_semaphore_create(name, - counter, - scope | wait_mode | type | priority | ceiling, - priority_ceiling, - &id)); - - if (unsuccessful()) - { - make_invalid(); - } - - return last_status_code(); -} - -const rtems_status_code rtemsSemaphore::destroy() -{ - if (id && owner) - { - set_status_code(rtems_semaphore_delete(id)); - make_invalid(); - } - else - set_status_code(RTEMS_NOT_OWNER_OF_RESOURCE); - - return last_status_code(); -} - -const rtemsSemaphore& rtemsSemaphore::operator=(const rtemsSemaphore& semaphore) -{ - if (!owner) - { - name = semaphore.name; - id = semaphore.id; - } - return *this; -} - -const rtems_status_code rtemsSemaphore::connect(const char *sname, - const uint32_t node) -{ - if (id && owner) - return set_status_code(RTEMS_UNSATISFIED); - - // change state to not owner - owner = false; - - strcpy(name_str, " "); - for (int c = 0; (c < 4) && (sname[c] != '\0'); c++) - name_str[c] = sname[c]; - name = rtems_build_name(name_str[0], - name_str[1], - name_str[2], - name_str[3]); - - set_status_code(rtems_semaphore_ident(name, node, &id)); - - if (unsuccessful()) - { - make_invalid(); - } - - return last_status_code(); -} diff --git a/c/src/librtems++/src/rtemsStatusCode.cc b/c/src/librtems++/src/rtemsStatusCode.cc deleted file mode 100644 index 476110bc84..0000000000 --- a/c/src/librtems++/src/rtemsStatusCode.cc +++ /dev/null @@ -1,75 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include - -/* ---- - Status Code string table -*/ - -static const char *status_strings[RTEMS_STATUS_CODES_LAST + 1] = -{ - "RTEMS[00] successful completion", - "RTEMS[01] task exitted, returned from a thread", - "RTEMS[02] multiprocessing not configured", - "RTEMS[03] invalid object name", - "RTEMS[04] invalid object id", - "RTEMS[05] too many", - "RTEMS[06] timed out waiting", - "RTEMS[07] object deleted while waiting", - "RTEMS[08] specified size was invalid", - "RTEMS[09] address specified is invalid", - "RTEMS[10] number was invalid", - "RTEMS[11] item has not been initialized", - "RTEMS[12] resources still outstanding", - "RTEMS[13] request not satisfied", - "RTEMS[14] thread is in wrong state", - "RTEMS[15] thread already in state", - "RTEMS[16] illegal on calling thread", - "RTEMS[17] illegal for remote object", - "RTEMS[18] called from wrong environment", - "RTEMS[19] invalid thread priority", - "RTEMS[20] invalid date/time", - "RTEMS[21] invalid node id", - "RTEMS[22] directive not configured", - "RTEMS[23] not owner of resource", - "RTEMS[24] directive not implemented", - "RTEMS[25] RTEMS inconsistency detected", - "RTEMS[26] could not get enough memory" -}; - -/* ---- - StatusCode -*/ - -const char *rtemsStatusCode::last_status_string() -{ - return status_string(last_status); -} - -const char *rtemsStatusCode::status_string(rtems_status_code status_code) -{ - // mapped from "rtems/rtems/status.h" - if (status_code <= RTEMS_STATUS_CODES_LAST) - { - return status_strings[status_code]; - } - - return "unknown status code"; -} - diff --git a/c/src/librtems++/src/rtemsTask.cc b/c/src/librtems++/src/rtemsTask.cc deleted file mode 100644 index c8607d2fd9..0000000000 --- a/c/src/librtems++/src/rtemsTask.cc +++ /dev/null @@ -1,274 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include -#include -// include to allow it to be compiled -#include - -/* ---- - rtemsTask -*/ - -rtemsTask::rtemsTask(const char* tname, - const rtems_task_priority initial_priority, - const uint32_t stack_size, - const rtems_mode preemption, - const rtems_mode timeslice, - const rtems_mode asr, - const rtems_interrupt_level interrupt_level, - const FloatingPoint floating_point, - const Scope scope) - : name(rtems_build_name('S', 'E', 'L', 'F')), - owner(true), - id(RTEMS_SELF), - argument(0) -{ - strcpy(name_str, "SELF"); - create(tname, - initial_priority, - stack_size, - preemption, - timeslice, - asr, - interrupt_level, - floating_point, - scope); -} - -rtemsTask::rtemsTask(const char *tname, uint32_t node) - : name(rtems_build_name('S', 'E', 'L', 'F')), - owner(false), - id(RTEMS_SELF), - argument(0) -{ - strcpy(name_str, "SELF"); - connect(tname, node); -} - -rtemsTask::rtemsTask(const rtemsTask& task) - : name(rtems_build_name('S', 'E', 'L', 'F')), - owner(false), - id(RTEMS_SELF), - argument(0) -{ - name = task.name; - strcpy(name_str, task.name_str); - argument = task.argument; - id = task.id; -} - -rtemsTask::rtemsTask() - : name(rtems_build_name('S', 'E', 'L', 'F')), - owner(false), - id(RTEMS_SELF), - argument(0) -{ - strcpy(name_str, "SELF"); -} - -rtemsTask::~rtemsTask() -{ - destroy(); -} - -void rtemsTask::make_self() -{ - strcpy(name_str, "SELF"); - name = rtems_build_name('S', 'E', 'L', 'F'); - id = RTEMS_SELF; - owner = false; -} - -const rtems_status_code rtemsTask::create(const char* tname, - const rtems_task_priority initial_priority, - const uint32_t stack_size, - const rtems_mode preemption, - const rtems_mode timeslice, - const rtems_mode asr, - const rtems_interrupt_level interrupt_level, - const FloatingPoint floating_point, - const Scope scope) -{ - if (id) - return set_status_code(RTEMS_ILLEGAL_ON_SELF); - - owner = true; - - strcpy(name_str, " "); - for (int c = 0; (c < 4) && (tname[c] != '\0'); c++) - name_str[c] = tname[c]; - name = rtems_build_name(name_str[0], - name_str[1], - name_str[2], - name_str[3]); - - // protect the values that be set as the parameters are not enums - set_status_code(rtems_task_create(name, - initial_priority, - stack_size, - (preemption & RTEMS_PREEMPT_MASK) | - (timeslice & RTEMS_TIMESLICE_MASK) | - (asr & RTEMS_ASR_MASK) | - (interrupt_level & RTEMS_INTERRUPT_MASK), - floating_point | scope, - &id)); - - if (unsuccessful()) - { - make_self(); - } - - return last_status_code(); -} - -const rtems_status_code rtemsTask::destroy() -{ - if (id && owner) - { - set_status_code(rtems_task_delete(id)); - make_self(); - } - else - set_status_code(RTEMS_NOT_OWNER_OF_RESOURCE); - - return last_status_code(); -} - -const rtemsTask& rtemsTask::operator=(const rtemsTask& task) -{ - if (!owner) - { - name = task.name; - strcpy(name_str, task.name_str); - argument = task.argument; - id = task.id; - } - return *this; -} - -const rtems_status_code rtemsTask::connect(const char *sname, - const uint32_t node) -{ - if (id && owner) - return set_status_code(RTEMS_UNSATISFIED); - - // change state to not owner - owner = false; - - strcpy(name_str, " "); - for (int c = 0; (c < 4) && (sname[c] != '\0'); c++) - name_str[c] = sname[c]; - name = rtems_build_name(name_str[0], - name_str[1], - name_str[2], - name_str[3]); - - set_status_code(rtems_task_ident(name, node, &id)); - - if (unsuccessful()) - { - make_self(); - } - - return last_status_code(); -} - -const rtems_status_code rtemsTask::start(const rtems_task_argument arg) -{ - if (owner) - { - argument = arg; - // pass the this pointer as the argument - set_status_code(rtems_task_start(id, - origin, - (rtems_task_argument) this)); - } - else - set_status_code(RTEMS_NOT_OWNER_OF_RESOURCE); - return last_status_code(); -} - -const rtems_status_code rtemsTask::restart(const rtems_task_argument arg) -{ - if (owner) - { - argument = arg; - set_status_code(rtems_task_restart(id, (rtems_task_argument) this)); - } - else - set_status_code(RTEMS_NOT_OWNER_OF_RESOURCE); - - return last_status_code(); -} - -const rtems_status_code rtemsTask::suspend() -{ - return set_status_code(rtems_task_suspend(id)); -} - -const rtems_status_code rtemsTask::resume() -{ - return set_status_code(rtems_task_resume(id)); -} - -const rtems_status_code rtemsTask::wake_after(const rtems_interval micro_secs) -{ - rtems_interval usecs = - (micro_secs < rtems_configuration_get_microseconds_per_tick()) ? - rtems_configuration_get_microseconds_per_tick() : micro_secs; - return set_status_code(rtems_task_wake_after(RTEMS_MICROSECONDS_TO_TICKS(usecs))); -} - -const rtems_status_code rtemsTask::wake_when(const rtems_time_of_day& tod) -{ - return set_status_code(rtems_task_wake_when((rtems_time_of_day*) &tod)); -} - -const rtems_status_code rtemsTask::get_priority(rtems_task_priority& priority) -{ - return set_status_code(rtems_task_set_priority(id, - RTEMS_CURRENT_PRIORITY, - &priority)); -} - -const rtems_status_code rtemsTask::set_priority(const rtems_task_priority priority) -{ - rtems_task_priority old_priority; - return set_status_code(rtems_task_set_priority(id, - priority, - &old_priority)); -} - -const rtems_status_code rtemsTask::set_priority(const rtems_task_priority priority, - rtems_task_priority& old_priority) -{ - return set_status_code(rtems_task_set_priority(id, - priority, - &old_priority)); -} - -void rtemsTask::body(rtems_task_argument ) -{ -} - -rtems_task rtemsTask::origin(rtems_task_argument argument) -{ - rtemsTask *task = (rtemsTask*) argument; - task->body(task->argument); -} diff --git a/c/src/librtems++/src/rtemsTimer.cc b/c/src/librtems++/src/rtemsTimer.cc deleted file mode 100644 index 899c3f611c..0000000000 --- a/c/src/librtems++/src/rtemsTimer.cc +++ /dev/null @@ -1,99 +0,0 @@ -/* - ------------------------------------------------------------------------ - - 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.rtems.org/license/LICENSE. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include -#include - -/* ---- - rtemsTimer -*/ - -rtemsTimer::rtemsTimer(const char* tname) - : name(0), - repeat(false), - id(0) -{ - strcpy(name_str, " "); - create(tname); -} - -rtemsTimer::rtemsTimer() - : name(0), - repeat(false), - id(0) -{ - strcpy(name_str, " "); -} - -rtemsTimer::~rtemsTimer() -{ - destroy(); -} - -void rtemsTimer::make_invalid() -{ - strcpy(name_str, " "); - name = 0; - id = 0; - repeat = false; -} -const rtems_status_code rtemsTimer::create(const char* tname) -{ - if (id) - return set_status_code(RTEMS_ILLEGAL_ON_SELF); - - strcpy(name_str, " "); - for (int c = 0; (c < 4) && (tname[c] != '\0'); c++) - name_str[c] = tname[c]; - name = rtems_build_name(name_str[0], - name_str[1], - name_str[2], - name_str[3]); - - set_status_code(rtems_timer_create(name, &id)); - - if (unsuccessful()) - { - make_invalid(); - } - - return last_status_code(); -} - -const rtems_status_code rtemsTimer::destroy() -{ - if (id) - { - set_status_code(rtems_timer_delete(id)); - make_invalid(); - } - else - set_status_code(RTEMS_NOT_OWNER_OF_RESOURCE); - - return last_status_code(); -} - -void rtemsTimer::common_handler(rtems_id , void *user_data) -{ - rtemsTimer *timer = (rtemsTimer*) user_data; - - if (timer->repeat) - timer->reset(); - - timer->triggered(); -} diff --git a/testsuites/libtests/Makefile.am b/testsuites/libtests/Makefile.am index 4eae14e1a9..ed5eb07918 100644 --- a/testsuites/libtests/Makefile.am +++ b/testsuites/libtests/Makefile.am @@ -30,7 +30,7 @@ _SUBDIRS += bspcmdline01 cpuuse devfs01 devfs02 devfs03 devfs04 \ putenvtest monitor monitor02 rtmonuse stackchk stackchk01 \ termios termios01 termios02 termios03 termios04 termios05 \ termios06 termios07 termios08 \ - rtems++ tztest block01 block02 block03 block04 block05 block06 block07 \ + tztest block01 block02 block03 block04 block05 block06 block07 \ block08 block09 block10 block11 block12 stringto01 \ tar01 tar02 tar03 \ math mathf mathl complex \ diff --git a/testsuites/libtests/configure.ac b/testsuites/libtests/configure.ac index 82f2d80a5b..88dd58f2e1 100644 --- a/testsuites/libtests/configure.ac +++ b/testsuites/libtests/configure.ac @@ -139,7 +139,6 @@ monitor02/Makefile mouse01/Makefile uid01/Makefile putenvtest/Makefile -rtems++/Makefile rtmonuse/Makefile stackchk/Makefile stackchk01/Makefile diff --git a/testsuites/libtests/rtems++/Init.cc b/testsuites/libtests/rtems++/Init.cc deleted file mode 100644 index 88bb3bb844..0000000000 --- a/testsuites/libtests/rtems++/Init.cc +++ /dev/null @@ -1,66 +0,0 @@ -/* 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-1999. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#define CONFIGURE_INIT -#include "System.h" - -const char rtems_test_name[] = "RTEMS++"; - -// make global so it lasts past the Init task's stack's life time -Task1 task_1; - -rtems_task Init(rtems_task_argument ) -{ - TEST_BEGIN(); - - 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()); - - printf("INIT - Destroy it's self\n"); - - // 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++/Makefile.am b/testsuites/libtests/rtems++/Makefile.am deleted file mode 100644 index f1a230a78b..0000000000 --- a/testsuites/libtests/rtems++/Makefile.am +++ /dev/null @@ -1,27 +0,0 @@ - -if HAS_CXX -rtems_tests_PROGRAMS = rtems++ -rtems___SOURCES = Init.cc Task1.cc Task2.cc Task3.cc System.h -endif - -dist_rtems_tests_DATA = rtems++.scn -dist_rtems_tests_DATA += rtems++.doc - -include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg -include $(top_srcdir)/../automake/compile.am -include $(top_srcdir)/../automake/leaf.am - -if HAS_CXX -rtems___LDLIBS = -lrtems++ -AM_CPPFLAGS += -I$(top_srcdir)/../support/include - - -LINK_OBJS = $(rtems___OBJECTS) -LINK_LIBS = $(rtems___LDLIBS) - -rtems++$(EXEEXT): $(rtems___OBJECTS) $(rtems___DEPENDENCIES) - @rm -f rtems++$(EXEEXT) - $(make-cxx-exe) -endif - -include $(top_srcdir)/../automake/local.am diff --git a/testsuites/libtests/rtems++/System.h b/testsuites/libtests/rtems++/System.h deleted file mode 100644 index e787fe21be..0000000000 --- a/testsuites/libtests/rtems++/System.h +++ /dev/null @@ -1,135 +0,0 @@ -/* system.h - * - * This include file contains information that is included in every - * function in the test set. - * - * COPYRIGHT (c) 1989-2008. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#include -#include -#include -#include -#include - -/* 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 -{ - 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: -}; - -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 uint32_t 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 uint32_t stack_size); -}; - -class EndTask - : public rtemsTask -{ -protected: - virtual void body(rtems_task_argument argument); - -public: - EndTask(const char* name, - const rtems_task_priority initial_priority, - const uint32_t stack_size); -}; - -#if 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_APPLICATION_NEEDS_CONSOLE_DRIVER -#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER - -#define CONFIGURE_MAXIMUM_TASKS 8 -#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_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION - -#define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (4 * RTEMS_MINIMUM_STACK_SIZE) - -#define CONFIGURE_EXTRA_TASK_STACKS (13 * RTEMS_MINIMUM_STACK_SIZE) - -#include - -/* end of include file */ diff --git a/testsuites/libtests/rtems++/Task1.cc b/testsuites/libtests/rtems++/Task1.cc deleted file mode 100644 index 02c1746e0c..0000000000 --- a/testsuites/libtests/rtems++/Task1.cc +++ /dev/null @@ -1,631 +0,0 @@ -/* 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-2007. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include "System.h" - -/* c.f. cpukit/score/include/rtems/score/priority.h */ -#define PRIiPriority_Control PRIi32 -/* rtems_task_priority is a typedef to Priority_Control */ -#define PRIirtems_task_priority PRIiPriority_Control - -/* c.f. cpukit/rtems/include/rtems/rtems/modes.h */ -#define PRIXModes_Control PRIX32 -#define PRIiModes_Control PRIi32 -/* rtems_mode is a typedef to Modes_Control */ -#define PRIXrtems_mode PRIXModes_Control -#define PRIirtems_mode PRIiModes_Control - -/* c.f. cpukit/score/include/rtems/score/isr.h */ -#define PRIiISR_Level PRIi32 -/* rtems_interrupt_level is a typedef to ISR_Level */ -#define PRIirtems_interrupt_level PRIiISR_Level - -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(); - - // do not call exit(0) from this thread as this object is static - // the static destructor call delete the task which is calling exit - // so exit never completes - - EndTask end_task("ENDT", (rtems_task_priority) 1, RTEMS_MINIMUM_STACK_SIZE * 6); - end_task.start(0); - - rtemsEvent block_me; - rtems_event_set out; - - block_me.receive(RTEMS_SIGNAL_0, out); - - printf("**** TASK 1 did not block ????\n"); -} - -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 %" PRIirtems_task_priority "\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 %" PRIirtems_task_priority "\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 %" PRIirtems_task_priority "\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 %" PRIirtems_task_priority "\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 %" PRIirtems_task_priority "\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 %" PRIirtems_task_priority "\n", task_2.last_status_string(), priority); - - 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%08" PRIXrtems_mode ", ", 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%08" PRIXrtems_mode ", ", 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%08" PRIXrtems_mode ", ", 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%08" PRIXrtems_mode ", ", 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%08" PRIXrtems_mode ", ", 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%08" PRIXrtems_mode ", ", 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%08" PRIXrtems_mode ", ", 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%08" PRIXrtems_mode ", ", 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%08" PRIXrtems_mode ", ", 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%08" PRIXrtems_mode ", ", 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 %" PRIirtems_interrupt_level "\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 %" PRIirtems_interrupt_level "\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%08" PRIXrtems_mode ", ", 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()); - - const char *u1 = "normal send"; - const char *u2 = "urgent send"; - char in[100]; - size_t size; - uint32_t count; - - 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=%zu\n", - name_string(), in, size); - } - } - else - printf("%s - message u2 size incorrect, size=%zu\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=%zu\n", - name_string(), in, size); - } - } - else - printf("%s - message u1 size incorrect, size=%zu\n", name_string(), size); - - wake_after(3000000); - - const char *b1 = "broadcast message"; - - printf("%s - broadcast send b1 ...\n", name_string()); - mq_2.broadcast(b1, strlen(b1) + 1, count); - printf("%s - mq_2 broadcast send - %s, count=%" PRIi32 "\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=%zu\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=%zu\n", - name_string(), in, size); - } - } - else - printf("%s - message b1 size incorrect, size=%zu\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); - - const 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(count); - printf("%s, flushed=%" PRIi32 "\n", mq_2.last_status_string(), count); - - 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=%" PRIirtems_mode, - mode & RTEMS_INTERRUPT_MASK); -} - -EndTask::EndTask(const char* name, - const rtems_task_priority initial_priority, - const uint32_t stack_size) - : rtemsTask(name, initial_priority, stack_size, RTEMS_NO_PREEMPT) -{ -} - -void EndTask::body(rtems_task_argument) -{ - TEST_END(); - exit(0); -} - diff --git a/testsuites/libtests/rtems++/Task2.cc b/testsuites/libtests/rtems++/Task2.cc deleted file mode 100644 index a08a57d8dc..0000000000 --- a/testsuites/libtests/rtems++/Task2.cc +++ /dev/null @@ -1,82 +0,0 @@ -/* 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-1999. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "System.h" - -Task2::Task2(const char* name, - const rtems_task_priority initial_priority, - const uint32_t stack_size) - : rtemsTask(name, initial_priority, stack_size, RTEMS_NO_PREEMPT) -{ -} - -void Task2::body(rtems_task_argument ) -{ - screen4(); - - printf("%s - destroy 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%08" PRIX32 "\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%08" PRIX32 "\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%08" PRIX32 "\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%08" PRIX32 "\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%08" PRIX32 "\n", event.last_status_string(), out); -} - - diff --git a/testsuites/libtests/rtems++/Task3.cc b/testsuites/libtests/rtems++/Task3.cc deleted file mode 100644 index ec453df55e..0000000000 --- a/testsuites/libtests/rtems++/Task3.cc +++ /dev/null @@ -1,82 +0,0 @@ -/* 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-2007. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "System.h" - -Task3::Task3(const char* name, - const rtems_task_priority initial_priority, - const uint32_t stack_size) - : rtemsTask(name, initial_priority, stack_size, RTEMS_NO_PREEMPT) -{ -} - -void Task3::body(rtems_task_argument ) -{ - screen6(); - - printf("%s - destroy 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]; - size_t 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=%zu, message string size=%zu\n", - name_string(), mq_2.last_status_string(), size, 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 deleted file mode 100644 index c90cfbb79a..0000000000 --- a/testsuites/libtests/rtems++/rtems++.doc +++ /dev/null @@ -1,26 +0,0 @@ -# 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.rtems.org/license/LICENSE. -# - -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 deleted file mode 100644 index 0ac7c9c172..0000000000 --- a/testsuites/libtests/rtems++/rtems++.scn +++ /dev/null @@ -1,149 +0,0 @@ - - -*** 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 -INIT - Destroy it's self - - 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[03] invalid object name -TA1 - restart from a non-owner - RTEMS[23] not owner of resource - -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 - END Task Class test - - START TaskMode Class test -SELF - get mode - RTEMS[00] successful completion, - mode is 0x00000500, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_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 0x00000400, RTEMS_PREEMPT RTEMS_TIMESLICE RTEMS_ASR INTMASK=0 -SELF - set preemption state to RTEMS_NO_PREEMPT - RTEMS[00] successful completion, - mode is 0x00000500, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_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 0x00000700, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_ASR INTMASK=0 -SELF - set timeslice state to RTEMS_NO_TIMESLICE - RTEMS[00] successful completion, - mode is 0x00000500, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_ASR INTMASK=0 -SELF - get asr state - RTEMS[00] successful completion, - mode is 0x00000400, RTEMS_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 6 -SELF - set mode to original mode - RTEMS[00] successful completion, - mode is 0x00000500, RTEMS_NO_PREEMPT RTEMS_NO_TIMESLICE RTEMS_ASR INTMASK=0 - END TaskMode Class test - - 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 - destroy itself - END Event Class test - - START Interrupt Class test - do not know a portable BSP type interrupt test - END Interrupt Class test - - START MessageQueue Class test -TA1 - construct message queue 1 with no memory error - RTEMS[13] request not satisfied -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 - destroy 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 - destroy 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 -*** END OF RTEMS++ TEST *** -- cgit v1.2.3