F´ Flight Software - C/C++ Documentation  devel
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>
6 #include <Os/TaskString.hpp>
7 
8 #include <Os/TaskId.hpp>
9 #include <Fw/Deprecate.hpp>
10 #include <limits>
11 
12 namespace Os {
13 
14  class TaskRegistry;
15  class Task {
16  public:
18  typedef enum {
28  } TaskStatus ;
29 
30  typedef void (*taskRoutine)(void* ptr);
31 
34  void* arg;
35  };
36 
37  Task();
38  virtual ~Task();
39 
40  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);
41 
42  // Deprecated: only the name, routine, and argument are **required** parameters. This ordering of parameters is therefore inappropriate and will be removed in the future
43  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 = static_cast<NATIVE_INT_TYPE>(TASK_DEFAULT)),
44  "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)");
45  I32 getIdentifier();
46  static TaskId getOsIdentifier(); //Gets the Os Task ID. Useful for passive components.
47 
48  static TaskStatus delay(NATIVE_UINT_TYPE msecs);
50 
51  TaskStatus join(void **value_ptr);
52  void suspend(bool onPurpose = false);
53  void resume();
54  bool wasSuspended();
55  bool isSuspended();
56  bool isStarted();
57  void setStarted(bool started);
62 
63  static void registerTaskRegistry(TaskRegistry* registry);
64 
65  private:
66 
67  POINTER_CAST m_handle;
68  NATIVE_INT_TYPE m_identifier;
69  TaskString m_name;
70  NATIVE_INT_TYPE m_affinity;
71 
72  void toString(char* buf, NATIVE_INT_TYPE buffSize);
73  bool m_started;
74  bool m_suspendedOnPurpose;
75  TaskRoutineWrapper m_routineWrapper;
76 
77  static TaskRegistry* s_taskRegistry;
78  static NATIVE_INT_TYPE s_numTasks;
79 
80  };
81 
82  class TaskRegistry {
83  public:
84  TaskRegistry();
85  virtual ~TaskRegistry();
86  virtual void addTask(Task* task) = 0;
87  virtual void removeTask(Task* task) = 0;
88 
89  private:
90  };
91 }
92 
93 #endif
PlatformPointerCastType POINTER_CAST
Definition: BasicTypes.h:53
PlatformIntType NATIVE_INT_TYPE
Definition: BasicTypes.h:51
PlatformUIntType NATIVE_UINT_TYPE
Definition: BasicTypes.h:52
C++-compatible configuration header for fprime configuration.
forward declaration
Definition: Task.hpp:15
bool wasSuspended()
returns whether or not task was suspended on purpose
Definition: TaskCommon.cpp:29
static TaskStatus delay(NATIVE_UINT_TYPE msecs)
delay the task
Definition: Task.cpp:43
I32 getIdentifier()
get the identifier for the task
Definition: TaskCommon.cpp:17
Task()
constructor
Definition: Task.cpp:10
virtual ~Task()
destructor
Definition: Task.cpp:49
bool isSuspended()
check with OS to see if it is suspended already
Definition: Task.cpp:69
void suspend(bool onPurpose=false)
suspend task
Definition: Task.cpp:59
static const NATIVE_UINT_TYPE TASK_DEFAULT
Definition: Task.hpp:17
void(* taskRoutine)(void *ptr)
prototype for task routine started in task context
Definition: Task.hpp:30
static TaskId getOsIdentifier()
Definition: Task.cpp:294
TaskStatus join(void **value_ptr)
Wait for task to finish.
Definition: Task.cpp:74
TaskStatus
Definition: Task.hpp:18
@ TASK_ERROR_PERMISSION
permissions error setting-up tasks
Definition: Task.hpp:27
@ TASK_OK
message sent/received okay
Definition: Task.hpp:19
@ TASK_INVALID_STACK
started with invalid stack size
Definition: Task.hpp:21
@ TASK_DELAY_ERROR
error trying to delay the task
Definition: Task.hpp:24
@ TASK_INVALID_PARAMS
started task with invalid parameters
Definition: Task.hpp:20
@ TASK_INVALID_AFFINITY
unable to set the task affinity
Definition: Task.hpp:23
@ TASK_ERROR_RESOURCES
unable to allocate more tasks
Definition: Task.hpp:26
@ TASK_UNKNOWN_ERROR
unexpected error return value
Definition: Task.hpp:22
@ TASK_JOIN_ERROR
error trying to join the task
Definition: Task.hpp:25
void resume()
resume execution of task
Definition: Task.cpp:64
bool isStarted()
check to see if task is started
Definition: TaskCommon.cpp:21
static void registerTaskRegistry(TaskRegistry *registry)
Definition: TaskCommon.cpp:37
void setStarted(bool started)
set task to started when thread is fully up. Avoids a VxWorks race condition.
Definition: TaskCommon.cpp:25
POINTER_CAST getRawHandle()
Definition: TaskCommon.cpp:33
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=static_cast< NATIVE_INT_TYPE >(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
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:18
static NATIVE_INT_TYPE getNumTasks()
Definition: TaskCommon.cpp:12
virtual void addTask(Task *task)=0
Add a task to the registry.
TaskRegistry()
constructor for task registry
Definition: TaskCommon.cpp:42
virtual ~TaskRegistry()
destructor for task registry
Definition: TaskCommon.cpp:50
virtual void removeTask(Task *task)=0
remove a task from the registry
Definition: File.cpp:6
taskRoutine routine
contains the task entrypoint
Definition: Task.hpp:33
void * arg
contains the task entrypoint pointer
Definition: Task.hpp:34