9 #include "NetworkCommunication/UsageReporting.h"
10 #include "WPIErrors.h"
16 const uint32_t Task::kDefaultPriority;
17 const int32_t Task::kInvalidTaskID;
26 Task::Task(
const char* name, FUNCPTR
function, int32_t priority, uint32_t stackSize)
28 m_taskID = kInvalidTaskID;
29 m_function =
function;
30 m_priority = priority;
31 m_stackSize = stackSize;
32 m_taskName =
new char[strlen(name) + 5];
33 strcpy(m_taskName,
"FRC_");
34 strcpy(m_taskName+4, name);
36 static int32_t instances = 0;
38 nUsageReporting::report(nUsageReporting::kResourceType_Task, instances, 0, m_taskName);
43 if (m_taskID != kInvalidTaskID)
Stop();
52 bool Task::Start(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4,
53 uint32_t arg5, uint32_t arg6, uint32_t arg7, uint32_t arg8, uint32_t arg9)
55 m_taskID = taskSpawn(m_taskName,
60 arg0, arg1, arg2, arg3, arg4,
61 arg5, arg6, arg7, arg8, arg9);
62 bool ok = HandleError(m_taskID);
63 if (!ok) m_taskID = kInvalidTaskID;
74 return HandleError(taskRestart(m_taskID));
86 ok = HandleError(taskDelete(m_taskID));
88 m_taskID = kInvalidTaskID;
98 return taskIsReady(m_taskID);
107 return taskIsSuspended(m_taskID);
116 return HandleError(taskSuspend(m_taskID));
125 return HandleError(taskResume(m_taskID));
134 return taskIdVerify(m_taskID) == OK;
143 if (HandleError(taskPriorityGet(m_taskID, &m_priority)))
158 m_priority = priority;
159 return HandleError(taskPrioritySet(m_taskID, m_priority));
179 return kInvalidTaskID;
185 bool Task::HandleError(STATUS results)
187 if (results != ERROR)
return true;
190 case S_objLib_OBJ_ID_ERROR:
191 wpi_setWPIErrorWithContext(TaskIDError, m_taskName);
194 case S_objLib_OBJ_DELETED:
195 wpi_setWPIErrorWithContext(TaskDeletedError, m_taskName);
198 case S_taskLib_ILLEGAL_OPTIONS:
199 wpi_setWPIErrorWithContext(TaskOptionsError, m_taskName);
202 case S_memLib_NOT_ENOUGH_MEMORY:
203 wpi_setWPIErrorWithContext(TaskMemoryError, m_taskName);
206 case S_taskLib_ILLEGAL_PRIORITY:
207 wpi_setWPIErrorWithContext(TaskPriorityError, m_taskName);
211 printErrno(errnoGet());
212 wpi_setWPIErrorWithContext(TaskError, m_taskName);
bool Start(uint32_t arg0=0, uint32_t arg1=0, uint32_t arg2=0, uint32_t arg3=0, uint32_t arg4=0, uint32_t arg5=0, uint32_t arg6=0, uint32_t arg7=0, uint32_t arg8=0, uint32_t arg9=0)
bool SetPriority(int32_t priority)
Task(const char *name, FUNCPTR function, int32_t priority=kDefaultPriority, uint32_t stackSize=20000)