diff options
Diffstat (limited to 'c/src/lib/librtems++')
-rw-r--r-- | c/src/lib/librtems++/Makefile.in | 59 | ||||
-rw-r--r-- | c/src/lib/librtems++/README | 266 | ||||
-rw-r--r-- | c/src/lib/librtems++/rtemsEvent.cc | 75 | ||||
-rw-r--r-- | c/src/lib/librtems++/rtemsInterrupt.cc | 115 | ||||
-rw-r--r-- | c/src/lib/librtems++/rtemsMessageQueue.cc | 165 | ||||
-rw-r--r-- | c/src/lib/librtems++/rtemsSemaphore.cc | 175 | ||||
-rw-r--r-- | c/src/lib/librtems++/rtemsStatusCode.cc | 77 | ||||
-rw-r--r-- | c/src/lib/librtems++/rtemsTask.cc | 288 | ||||
-rw-r--r-- | c/src/lib/librtems++/rtemsTimer.cc | 101 |
9 files changed, 0 insertions, 1321 deletions
diff --git a/c/src/lib/librtems++/Makefile.in b/c/src/lib/librtems++/Makefile.in deleted file mode 100644 index 1bad1b6d50..0000000000 --- a/c/src/lib/librtems++/Makefile.in +++ /dev/null @@ -1,59 +0,0 @@ -# -# $Id$ -# - -@SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -top_builddir = .. -subdir = librtems++ - -RTEMS_ROOT = @RTEMS_ROOT@ -PROJECT_ROOT = @PROJECT_ROOT@ - -VPATH = @srcdir@ - -LIBNAME = librtems++.a -LIB = ${ARCH}/${LIBNAME} - -# C and C++ source names, if any, go here -- minus the .c or .cc -CC_PIECES = rtemsEvent rtemsInterrupt rtemsMessageQueue rtemsSemaphore \ - rtemsStatusCode rtemsTask rtemsTimer -CC_FILES = $(CC_PIECES:%=%.cc) -CC_O_FILES = $(CC_PIECES:%=${ARCH}/%.o) - -SRCS = $(CC_FILES) -OBJS = $(CC_O_FILES) - -include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg -include $(RTEMS_ROOT)/make/lib.cfg - -INSTALL_CHANGE = @INSTALL_CHANGE@ - -# -# Add local stuff here using += -# - -DEFINES += -CPPFLAGS += -CFLAGS += $(LIBC_DEFINES) - -# -# Add your list of files to delete here. The config files -# already know how to delete some stuff, so you may want -# to just run 'make clean' first to see what gets missed. -# 'make clobber' already includes 'make clean' -# - -CLEAN_ADDITIONS += $(LIB) -CLOBBER_ADDITIONS += - -all: ${ARCH} $(LIB) - @$(INSTALL_VARIANT) -m 644 ${LIB} $(PROJECT_RELEASE)/lib - -$(LIB): $(SRCS) ${OBJS} - $(make-library) - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status diff --git a/c/src/lib/librtems++/README b/c/src/lib/librtems++/README deleted file mode 100644 index 65b0eb980e..0000000000 --- a/c/src/lib/librtems++/README +++ /dev/null @@ -1,266 +0,0 @@ -# -# $Id$ -# - -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/lib/librtems++/rtemsEvent.cc b/c/src/lib/librtems++/rtemsEvent.cc deleted file mode 100644 index a917f32836..0000000000 --- a/c/src/lib/librtems++/rtemsEvent.cc +++ /dev/null @@ -1,75 +0,0 @@ -/* - ------------------------------------------------------------------------ - $Id$ - ------------------------------------------------------------------------ - - COPYRIGHT (c) 1997 - Objective Design Systems Ltd Pty (ODS) - All rights reserved (R) Objective Design Systems Ltd Pty - - The license and distribution terms for this file may be found in the - file LICENSE in this distribution or at - http://www.OARcorp.com/rtems/license.html. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include <rtems++/rtemsEvent.h> - -/* ---- - rtemsEvent -*/ - -rtemsEvent::rtemsEvent(const char *name_str, rtems_unsigned32 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 rtems_unsigned32 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/lib/librtems++/rtemsInterrupt.cc b/c/src/lib/librtems++/rtemsInterrupt.cc deleted file mode 100644 index 4cd5d9afa9..0000000000 --- a/c/src/lib/librtems++/rtemsInterrupt.cc +++ /dev/null @@ -1,115 +0,0 @@ -/* - ------------------------------------------------------------------------ - $Id$ - ------------------------------------------------------------------------ - - COPYRIGHT (c) 1997 - Objective Design Systems Ltd Pty (ODS) - All rights reserved (R) Objective Design Systems Ltd Pty - - The license and distribution terms for this file may be found in the - file LICENSE in this distribution or at - http://www.OARcorp.com/rtems/license.html. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include <rtems++/rtemsInterrupt.h> - -/* ---- - Interrupt Table - - This table is used to re-direct the call from RTEMS to a user - object -*/ - -static rtemsInterrupt *interrupt_table[CPU_INTERRUPT_NUMBER_OF_VECTORS]; - -// has the table been initialised -static bool initialised = false; - -/* ---- - rtemsInterrupt -*/ - -rtemsInterrupt::rtemsInterrupt() - : vector(0), - caught(false), - old_handler(0), - old_interrupt(0) -{ - if (!initialised) - { - for (rtems_vector_number vec = 0; - vec < CPU_INTERRUPT_NUMBER_OF_VECTORS; - vec++) - { - interrupt_table[vector] = 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[vector]; - interrupt_table[vector] = this; - vector = vec; - - set_status_code(rtems_interrupt_catch(redirector, - vector, - &old_handler)); - - 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) - { - set_status_code(rtems_interrupt_catch(old_handler, - vector, - &old_handler)); - - 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(); -} diff --git a/c/src/lib/librtems++/rtemsMessageQueue.cc b/c/src/lib/librtems++/rtemsMessageQueue.cc deleted file mode 100644 index c3183dc2b0..0000000000 --- a/c/src/lib/librtems++/rtemsMessageQueue.cc +++ /dev/null @@ -1,165 +0,0 @@ -/* - ------------------------------------------------------------------------ - $Id$ - ------------------------------------------------------------------------ - - COPYRIGHT (c) 1997 - Objective Design Systems Ltd Pty (ODS) - All rights reserved (R) Objective Design Systems Ltd Pty - - The license and distribution terms for this file may be found in the - file LICENSE in this distribution or at - http://www.OARcorp.com/rtems/license.html. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include <string.h> -#include <rtems++/rtemsMessageQueue.h> - -/* ---- - rtemsMessageQueue -*/ - -rtemsMessageQueue::rtemsMessageQueue(const char* mqname, - const rtems_unsigned32 count, - const rtems_unsigned32 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 rtems_unsigned32 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 rtems_unsigned32 count, - const rtems_unsigned32 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 rtems_unsigned32 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/lib/librtems++/rtemsSemaphore.cc b/c/src/lib/librtems++/rtemsSemaphore.cc deleted file mode 100644 index 5821612618..0000000000 --- a/c/src/lib/librtems++/rtemsSemaphore.cc +++ /dev/null @@ -1,175 +0,0 @@ -/* - ------------------------------------------------------------------------ - $Id$ - ------------------------------------------------------------------------ - - COPYRIGHT (c) 1997 - Objective Design Systems Ltd Pty (ODS) - All rights reserved (R) Objective Design Systems Ltd Pty - - The license and distribution terms for this file may be found in the - file LICENSE in this distribution or at - http://www.OARcorp.com/rtems/license.html. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include <string.h> -#include <rtems++/rtemsSemaphore.h> - -/* ---- - rtemsSemaphore -*/ - -rtemsSemaphore::rtemsSemaphore(const char* sname, - const Scope scope, - const rtems_unsigned32 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 rtems_unsigned32 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 rtems_unsigned32 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 rtems_unsigned32 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/lib/librtems++/rtemsStatusCode.cc b/c/src/lib/librtems++/rtemsStatusCode.cc deleted file mode 100644 index e8e3f965ba..0000000000 --- a/c/src/lib/librtems++/rtemsStatusCode.cc +++ /dev/null @@ -1,77 +0,0 @@ -/* - ------------------------------------------------------------------------ - $Id$ - ------------------------------------------------------------------------ - - COPYRIGHT (c) 1997 - Objective Design Systems Ltd Pty (ODS) - All rights reserved (R) Objective Design Systems Ltd Pty - - The license and distribution terms for this file may be found in the - file LICENSE in this distribution or at - http://www.OARcorp.com/rtems/license.html. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include <rtems++/rtemsStatusCode.h> - -/* ---- - Status Code string table -*/ - -static 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/lib/librtems++/rtemsTask.cc b/c/src/lib/librtems++/rtemsTask.cc deleted file mode 100644 index 619f7d4071..0000000000 --- a/c/src/lib/librtems++/rtemsTask.cc +++ /dev/null @@ -1,288 +0,0 @@ -/* - ------------------------------------------------------------------------ - $Id$ - ------------------------------------------------------------------------ - - COPYRIGHT (c) 1997 - Objective Design Systems Ltd Pty (ODS) - All rights reserved (R) Objective Design Systems Ltd Pty - - The license and distribution terms for this file may be found in the - file LICENSE in this distribution or at - http://www.OARcorp.com/rtems/license.html. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include <string.h> -#include <rtems++/rtemsTask.h> -// include to allow it to be compiled -#include <rtems++/rtemsTaskMode.h> - -/* ---- - rtemsTask -*/ - -rtemsTask::rtemsTask(const char* tname, - const rtems_task_priority initial_priority, - const rtems_unsigned32 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, rtems_unsigned32 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 rtems_unsigned32 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 rtems_unsigned32 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 && (micro_secs < _TOD_Microseconds_per_tick) ? - _TOD_Microseconds_per_tick : micro_secs; - return set_status_code(rtems_task_wake_after(TOD_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)); -} - -const rtems_status_code rtemsTask::get_note(const rtems_unsigned32 notepad, - rtems_unsigned32& note) -{ - return set_status_code(rtems_task_get_note(id, notepad, ¬e)); -} - -const rtems_status_code rtemsTask::set_note(const rtems_unsigned32 notepad, - const rtems_unsigned32 note) -{ - return set_status_code(rtems_task_set_note(id, notepad, note)); -} - -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/lib/librtems++/rtemsTimer.cc b/c/src/lib/librtems++/rtemsTimer.cc deleted file mode 100644 index 835bfd74ce..0000000000 --- a/c/src/lib/librtems++/rtemsTimer.cc +++ /dev/null @@ -1,101 +0,0 @@ -/* - ------------------------------------------------------------------------ - $Id$ - ------------------------------------------------------------------------ - - COPYRIGHT (c) 1997 - Objective Design Systems Ltd Pty (ODS) - All rights reserved (R) Objective Design Systems Ltd Pty - - The license and distribution terms for this file may be found in the - file LICENSE in this distribution or at - http://www.OARcorp.com/rtems/license.html. - - ------------------------------------------------------------------------ - - See header file. - - ------------------------------------------------------------------------ -*/ - -#include <string.h> -#include <rtems++/rtemsTimer.h> - -/* ---- - 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(); -} |