F´ Flight Software - C/C++ Documentation  NASA-v1.6.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 #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 = static_cast<NATIVE_INT_TYPE>(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();
47  static TaskId getOsIdentifier(); //Gets the Os Task ID. Useful for passive components.
48 
49  static TaskStatus delay(NATIVE_UINT_TYPE msecs);
51 
52  TaskStatus join(void **value_ptr);
53  void suspend(bool onPurpose = false);
54  void resume();
55  bool wasSuspended();
56  bool isSuspended();
57  bool isStarted();
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::wasSuspended
bool wasSuspended()
returns whether or not task was suspended on purpose
Definition: TaskCommon.cpp:30
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:59
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::isStarted
bool isStarted()
check to see if task is started
Definition: TaskCommon.cpp:22
Serializable.hpp
Fw::StringBase
Definition: StringType.hpp:23
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=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
Os::Task::TASK_ERROR_RESOURCES
@ TASK_ERROR_RESOURCES
unable to allocate more tasks
Definition: Task.hpp:27
Os::Task::resume
void resume()
resume execution of task
Definition: Task.cpp:64
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::getOsIdentifier
static TaskId getOsIdentifier()
Definition: Task.cpp:290
Os::Task::Task
Task()
constructor
Definition: Task.cpp:10
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::TaskRegistry::~TaskRegistry
virtual ~TaskRegistry()
destructor for task registry
Definition: TaskCommon.cpp:51
TaskString.hpp
Os::Task::getIdentifier
I32 getIdentifier()
get the identifier for the task
Definition: TaskCommon.cpp:18
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:18
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:43
Os::Task::~Task
virtual ~Task()
destructor
Definition: Task.cpp:49
Os::Task::getNumTasks
static NATIVE_INT_TYPE getNumTasks()
Definition: TaskCommon.cpp:13
Os::TaskId
Definition: TaskId.hpp:18
Os::Task::isSuspended
bool isSuspended()
check with OS to see if it is suspended already
Definition: Task.cpp:69
BasicTypes.hpp
Declares ISF basic types.
Os::Task::TaskRoutineWrapper::arg
void * arg
contains the task entrypoint pointer
Definition: Task.hpp:35
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:74