F´ Flight Software - C/C++ Documentation  NASA-v2.1.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 #include <Fw/Deprecate.hpp>
11 #include <limits>
12 
13 namespace Os {
14 
15  class TaskRegistry;
16  class Task {
17  public:
19  typedef enum {
29  } TaskStatus ;
30 
31  typedef void (*taskRoutine)(void* ptr);
32 
35  void* arg;
36  };
37 
38  Task();
39  virtual ~Task();
40 
41  TaskStatus start(const Fw::StringBase &name, taskRoutine routine, void* arg, NATIVE_UINT_TYPE priority = TASK_DEFAULT, NATIVE_UINT_TYPE stackSize = TASK_DEFAULT, NATIVE_UINT_TYPE cpuAffinity = TASK_DEFAULT, NATIVE_UINT_TYPE identifier = TASK_DEFAULT);
42 
43  // Deprecated: only the name, routine, and argument are **required** parameters. This ordering of parameters is therefore inappropriate and will be removed in the future
44  DEPRECATED(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 = TASK_DEFAULT),
45  "Please switch to start(Fw::StringBase &name, taskRoutine routine, void* arg, NATIVE_UINT_TYPE priority, NATIVE_UINT_TYPE stackSize, NATIVE_UINT_TYPE cpuAffinity, NATIVE_UINT_TYPE identifier)");
46  I32 getIdentifier(void);
47  static TaskId getOsIdentifier(void); //Gets the Os Task ID. Useful for passive components.
48 
49  static TaskStatus delay(NATIVE_UINT_TYPE msecs);
50  static NATIVE_INT_TYPE getNumTasks(void);
51 
52  TaskStatus join(void **value_ptr);
53  void suspend(bool onPurpose = false);
54  void resume(void);
55  bool wasSuspended(void);
56  bool isSuspended(void);
57  bool isStarted(void);
58  void setStarted(bool started);
59 
62  POINTER_CAST getRawHandle();
63 
64  static void registerTaskRegistry(TaskRegistry* registry);
65 
66  private:
67 
68  POINTER_CAST m_handle;
69  NATIVE_INT_TYPE m_identifier;
70  TaskString m_name;
71  NATIVE_INT_TYPE m_affinity;
72 
73  void toString(char* buf, NATIVE_INT_TYPE buffSize);
74  bool m_started;
75  bool m_suspendedOnPurpose;
76  TaskRoutineWrapper m_routineWrapper;
77 
78  static TaskRegistry* s_taskRegistry;
79  static NATIVE_INT_TYPE s_numTasks;
80 
81  };
82 
83  class TaskRegistry {
84  public:
85  TaskRegistry();
86  virtual ~TaskRegistry();
87  virtual void addTask(Task* task) = 0;
88  virtual void removeTask(Task* task) = 0;
89 
90  private:
91  };
92 }
93 
94 #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:26
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:23
Os::Task::TASK_ERROR_PERMISSION
@ TASK_ERROR_PERMISSION
permissions error setting-up tasks
Definition: Task.hpp:28
Os::Task::getNumTasks
static NATIVE_INT_TYPE getNumTasks(void)
Definition: TaskCommon.cpp:13
Serializable.hpp
Fw::StringBase
Definition: StringType.hpp:23
Os::Task::TASK_ERROR_RESOURCES
@ TASK_ERROR_RESOURCES
unable to allocate more tasks
Definition: Task.hpp:27
Os::TaskRegistry::TaskRegistry
TaskRegistry()
constructor for task registry
Definition: TaskCommon.cpp:43
Os::Task::taskRoutine
void(* taskRoutine)(void *ptr)
prototype for task routine started in task context
Definition: Task.hpp:31
Os::Task::registerTaskRegistry
static void registerTaskRegistry(TaskRegistry *registry)
Definition: TaskCommon.cpp:38
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:30
Os::Task::resume
void resume(void)
resume execution of task
Definition: Task.cpp:62
Deprecate.hpp
Os::Task::TaskRoutineWrapper::routine
taskRoutine routine
contains the task entrypoint
Definition: Task.hpp:34
Os::Task::TASK_DEFAULT
static const NATIVE_UINT_TYPE TASK_DEFAULT
Definition: Task.hpp:18
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:24
Os::Task::TASK_OK
@ TASK_OK
message sent/received okay
Definition: Task.hpp:20
Os::TaskString
Definition: TaskString.hpp:10
Os::Task::TaskRoutineWrapper
Definition: Task.hpp:33
Os::Task::TaskStatus
TaskStatus
Definition: Task.hpp:19
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:21
Os::Task::TASK_DELAY_ERROR
@ TASK_DELAY_ERROR
error trying to delay the task
Definition: Task.hpp:25
Os::Task::isStarted
bool isStarted(void)
check to see if task is started
Definition: TaskCommon.cpp:22
Os::TaskRegistry::~TaskRegistry
virtual ~TaskRegistry()
destructor for task registry
Definition: TaskCommon.cpp:51
TaskString.hpp
Os::Task::DEPRECATED
DEPRECATED(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=TASK_DEFAULT), "Please switch to start(Fw::StringBase &name, taskRoutine routine, void* arg, NATIVE_UINT_TYPE priority, NATIVE_UINT_TYPE stackSize, NATIVE_UINT_TYPE cpuAffinity, NATIVE_UINT_TYPE identifier)")
start the task
Os::Task::start
TaskStatus start(const Fw::StringBase &name, taskRoutine routine, void *arg, NATIVE_UINT_TYPE priority=TASK_DEFAULT, NATIVE_UINT_TYPE stackSize=TASK_DEFAULT, NATIVE_UINT_TYPE cpuAffinity=TASK_DEFAULT, NATIVE_UINT_TYPE identifier=TASK_DEFAULT)
start the task
Definition: Task.cpp:16
FpConfig.hpp
ISF configuration file.
Os::Task::getRawHandle
POINTER_CAST getRawHandle()
Definition: TaskCommon.cpp:34
Os::Task
forward declaration
Definition: Task.hpp:16
Os::Task::delay
static TaskStatus delay(NATIVE_UINT_TYPE msecs)
delay the task
Definition: Task.cpp:41
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:18
Os::TaskId
Definition: TaskId.hpp:18
BasicTypes.hpp
Declares ISF basic types.
Os::Task::TaskRoutineWrapper::arg
void * arg
contains the task entrypoint pointer
Definition: Task.hpp:35
Os::Task::getOsIdentifier
static TaskId getOsIdentifier(void)
Definition: Task.cpp:287
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:22
TaskId.hpp
Os::Task::TASK_JOIN_ERROR
@ TASK_JOIN_ERROR
error trying to join the task
Definition: Task.hpp:26
Os::TaskRegistry
Definition: Task.hpp:83
Os::Task::join
TaskStatus join(void **value_ptr)
Wait for task to finish.
Definition: Task.cpp:72