F´ Flight Software - C/C++ Documentation  NASA-v1.5.0
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Task.hpp
Go to the documentation of this file.
1 #ifndef _Task_hpp_
2 #define _Task_hpp_
3 
4 #include <FpConfig.hpp>
7 #include <Os/TaskString.hpp>
8 
9 #include <Os/TaskId.hpp>
10 
11 namespace Os {
12 
13  class TaskRegistry;
14 
15  class Task {
16  public:
17 
18  typedef enum {
27 
28  typedef void (*taskRoutine)(void* ptr);
29 
30  Task();
31  virtual ~Task();
32  // Priority is based on Posix priorities - 0 lowest, 255 highest
33  TaskStatus start(const Fw::StringBase &name, NATIVE_INT_TYPE identifier, NATIVE_INT_TYPE priority, NATIVE_INT_TYPE stackSize, taskRoutine routine, void* arg, NATIVE_INT_TYPE cpuAffinity = -1);
34  I32 getIdentifier(void);
35  static TaskId getOsIdentifier(void); //Gets the Os Task ID. Useful for passive components.
36 
37  static TaskStatus delay(NATIVE_UINT_TYPE msecs);
38  static NATIVE_INT_TYPE getNumTasks(void);
39 
40  TaskStatus join(void **value_ptr);
41  void suspend(bool onPurpose = false);
42  void resume(void);
43  bool wasSuspended(void);
44  bool isSuspended(void);
45  bool isStarted(void);
46  void setStarted(bool started);
47 
50  POINTER_CAST getRawHandle();
51 
52  static void registerTaskRegistry(TaskRegistry* registry);
53 
54  private:
55 
56  POINTER_CAST m_handle;
57  NATIVE_INT_TYPE m_identifier;
58  TaskString m_name;
59  NATIVE_INT_TYPE m_affinity;
60 
61  void toString(char* buf, NATIVE_INT_TYPE buffSize);
62  bool m_started;
63  bool m_suspendedOnPurpose;
64 
65  static TaskRegistry* s_taskRegistry;
66  static NATIVE_INT_TYPE s_numTasks;
67 
68  };
69 
70  class TaskRegistry {
71  public:
72  TaskRegistry();
73  virtual ~TaskRegistry();
74  virtual void addTask(Task* task) = 0;
75  virtual void removeTask(Task* task) = 0;
76 
77  private:
78  };
79 }
80 
81 #endif
Os::Task::setStarted
void setStarted(bool started)
set task to started when thread is fully up. Avoids a VxWorks race condition.
Definition: TaskCommon.cpp:23
Os::TaskRegistry::removeTask
virtual void removeTask(Task *task)=0
remove a task from the registry
Os
Definition: File.cpp:7
Os::Task::suspend
void suspend(bool onPurpose=false)
suspend task
Definition: Task.cpp:57
Os::Task::TASK_UNKNOWN_ERROR
@ TASK_UNKNOWN_ERROR
unexpected error return value
Definition: Task.hpp:22
Os::Task::getNumTasks
static NATIVE_INT_TYPE getNumTasks(void)
Definition: TaskCommon.cpp:10
Serializable.hpp
Fw::StringBase
Definition: StringType.hpp:23
Os::TaskRegistry::TaskRegistry
TaskRegistry()
constructor for task registry
Definition: TaskCommon.cpp:40
Os::Task::taskRoutine
void(* taskRoutine)(void *ptr)
prototype for task routine started in task context
Definition: Task.hpp:28
Os::Task::registerTaskRegistry
static void registerTaskRegistry(TaskRegistry *registry)
Definition: TaskCommon.cpp:35
Os::Task::Task
Task()
constructor
Definition: Task.cpp:8
Os::Task::wasSuspended
bool wasSuspended(void)
returns whether or not task was suspended on purpose
Definition: TaskCommon.cpp:27
Os::Task::resume
void resume(void)
resume execution of task
Definition: Task.cpp:62
Os::TaskRegistry::addTask
virtual void addTask(Task *task)=0
Add a task to the registry.
Os::Task::TASK_INVALID_AFFINITY
@ TASK_INVALID_AFFINITY
unable to set the task affinity
Definition: Task.hpp:23
Os::Task::TASK_OK
@ TASK_OK
message sent/received okay
Definition: Task.hpp:19
Os::TaskString
Definition: TaskString.hpp:10
Os::Task::TaskStatus
TaskStatus
Definition: Task.hpp:18
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
Os::Task::TASK_INVALID_PARAMS
@ TASK_INVALID_PARAMS
started task with invalid parameters
Definition: Task.hpp:20
Os::Task::TASK_DELAY_ERROR
@ TASK_DELAY_ERROR
error trying to delay the task
Definition: Task.hpp:24
Os::Task::isStarted
bool isStarted(void)
check to see if task is started
Definition: TaskCommon.cpp:19
Os::TaskRegistry::~TaskRegistry
virtual ~TaskRegistry()
destructor for task registry
Definition: TaskCommon.cpp:44
TaskString.hpp
FpConfig.hpp
ISF configuration file.
Os::Task::getRawHandle
POINTER_CAST getRawHandle()
Definition: TaskCommon.cpp:31
Os::Task
forward declaration
Definition: Task.hpp:15
Os::Task::delay
static TaskStatus delay(NATIVE_UINT_TYPE msecs)
delay the task
Definition: Task.cpp:41
Os::Task::start
TaskStatus start(const Fw::StringBase &name, NATIVE_INT_TYPE identifier, NATIVE_INT_TYPE priority, NATIVE_INT_TYPE stackSize, taskRoutine routine, void *arg, NATIVE_INT_TYPE cpuAffinity=-1)
start the task
Definition: Task.cpp:16
Os::Task::isSuspended
bool isSuspended(void)
check with OS to see if it is suspended already
Definition: Task.cpp:67
Os::Task::~Task
virtual ~Task()
destructor
Definition: Task.cpp:47
Os::Task::getIdentifier
I32 getIdentifier(void)
get the identifier for the task
Definition: TaskCommon.cpp:15
Os::TaskId
Definition: TaskId.hpp:18
BasicTypes.hpp
Declares ISF basic types.
Os::Task::getOsIdentifier
static TaskId getOsIdentifier(void)
Definition: Task.cpp:204
NATIVE_INT_TYPE
int NATIVE_INT_TYPE
native integer type declaration
Definition: BasicTypes.hpp:29
Os::Task::TASK_INVALID_STACK
@ TASK_INVALID_STACK
started with invalid stack size
Definition: Task.hpp:21
TaskId.hpp
Os::Task::TASK_JOIN_ERROR
@ TASK_JOIN_ERROR
error trying to join the task
Definition: Task.hpp:25
Os::TaskRegistry
Definition: Task.hpp:70
Os::Task::join
TaskStatus join(void **value_ptr)
Wait for task to finish.
Definition: Task.cpp:72