F´ Flight Software - C/C++ Documentation  NASA-v2.0.0
A framework for building embedded system applications to NASA flight quality standards.
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 {
26  } TaskStatus ;
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