9 #include "NetworkCommunication/UsageReporting.h"
10 #include "WPIErrors.h"
16 const UINT32 NTTask::kDefaultPriority;
17 const INT32 NTTask::kInvalidTaskID;
26 NTTask::NTTask(
const char* name, FUNCPTR
function, INT32 priority, UINT32 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 instances = 0;
43 if (m_taskID != kInvalidTaskID) Stop();
52 bool NTTask::Start(UINT32 arg0, UINT32 arg1, UINT32 arg2, UINT32 arg3, UINT32 arg4,
53 UINT32 arg5, UINT32 arg6, UINT32 arg7, UINT32 arg8, UINT32 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;
72 bool NTTask::Restart()
74 return HandleError(taskRestart(m_taskID));
86 ok = HandleError(taskDelete(m_taskID));
88 m_taskID = kInvalidTaskID;
96 bool NTTask::IsReady()
98 return taskIsReady(m_taskID);
105 bool NTTask::IsSuspended()
107 return taskIsSuspended(m_taskID);
114 bool NTTask::Suspend()
116 return HandleError(taskSuspend(m_taskID));
123 bool NTTask::Resume()
125 return HandleError(taskResume(m_taskID));
132 bool NTTask::Verify()
134 return taskIdVerify(m_taskID) == OK;
141 INT32 NTTask::GetPriority()
143 if (HandleError(taskPriorityGet(m_taskID, &m_priority)))
156 bool NTTask::SetPriority(INT32 priority)
158 m_priority = priority;
159 return HandleError(taskPrioritySet(m_taskID, m_priority));
166 const char* NTTask::GetName()
175 INT32 NTTask::GetID()
179 return kInvalidTaskID;
185 bool NTTask::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);