mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-05 03:21:42 +00:00
artf4149: Removed references to VxWorks
Implemented setTaskPriority() and getTaskPriority() in Task HAL API Removed all other unimplemented functions in HAL and removed spawnTask() Replaced instances of pthread_t* with TASK typedef Removed unused HAL error constants and removed commented-out classes and functions in wpilibj's HALLibrary Changed Task class API to match the construction semantics of a std::thread Change-Id: I3bc951a3da90d24c5589fae4d1ca2bb60225c873
This commit is contained in:
committed by
James Kuszmaul
parent
5712565068
commit
fd4c169658
@@ -1,4 +1,3 @@
|
||||
|
||||
#include "HAL/Task.hpp"
|
||||
|
||||
#ifndef OK
|
||||
@@ -8,86 +7,10 @@
|
||||
#define ERROR (-1)
|
||||
#endif /* ERROR */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
|
||||
|
||||
struct TaskArgs {
|
||||
FUNCPTR fun;
|
||||
char* name;
|
||||
pthread_t** task;
|
||||
uint32_t arg0, arg1, arg2, arg3, arg4,
|
||||
arg5, arg6, arg7, arg8, arg9;
|
||||
};
|
||||
|
||||
void* startRoutine(void* data) {
|
||||
TaskArgs* args = (TaskArgs*) data;
|
||||
printf("[HAL] Starting task %s...\n", args->name);
|
||||
int val = args->fun(args->arg0, args->arg1, args->arg2, args->arg3, args->arg4,
|
||||
args->arg5, args->arg6, args->arg7, args->arg8, args->arg9);
|
||||
printf("[HAL] Exited task %s with code %i\n", args->name, val);
|
||||
*args->task = NULL;
|
||||
int* ret = new int(); *ret = val;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param priority Not implemented.
|
||||
* @param options Not implemented.
|
||||
* @param stackSize Not implemented.
|
||||
*/
|
||||
TASK spawnTask(char * name, int priority, int options, int stackSize,
|
||||
FUNCPTR entryPt, uint32_t arg0, uint32_t arg1, uint32_t arg2,
|
||||
uint32_t arg3, uint32_t arg4, uint32_t arg5, uint32_t arg6,
|
||||
uint32_t arg7, uint32_t arg8, uint32_t arg9) {
|
||||
printf("[HAL] Spawning task %s...\n", name);
|
||||
pthread_t* task = new pthread_t;
|
||||
pthread_attr_t* attr = new pthread_attr_t;
|
||||
pthread_attr_init(attr);
|
||||
TaskArgs* args = new TaskArgs();
|
||||
args->fun = entryPt;
|
||||
args->name = name;
|
||||
args->task = new pthread_t*;
|
||||
*args->task = task;
|
||||
args->arg0 = arg0; args->arg1 = arg1; args->arg2 = arg2; args->arg3 = arg3; args->arg4 = arg4;
|
||||
args->arg5 = arg5; args->arg6 = arg6; args->arg7 = arg7; args->arg8 = arg8; args->arg9 = arg9;
|
||||
if (pthread_create(task, attr, startRoutine, args) == 0) {
|
||||
printf("[HAL] Success\n");
|
||||
pthread_detach(*task);
|
||||
} else {
|
||||
printf("[HAL] Failure\n");
|
||||
task = NULL;
|
||||
}
|
||||
pthread_attr_destroy(attr);
|
||||
return task;
|
||||
}
|
||||
|
||||
STATUS restartTask(TASK task) {
|
||||
return ERROR; // TODO: implement;
|
||||
}
|
||||
|
||||
STATUS deleteTask(TASK task) {
|
||||
return ERROR; // TODO: implement
|
||||
}
|
||||
|
||||
STATUS isTaskReady(TASK task) {
|
||||
return ERROR; // TODO: implement
|
||||
}
|
||||
|
||||
STATUS isTaskSuspended(TASK task) {
|
||||
return ERROR; // TODO: implement
|
||||
}
|
||||
|
||||
STATUS suspendTask(TASK task) {
|
||||
return ERROR; // TODO: implement
|
||||
}
|
||||
|
||||
STATUS resumeTask(TASK task) {
|
||||
return ERROR; // TODO: implement
|
||||
}
|
||||
|
||||
STATUS verifyTaskID(TASK task) {
|
||||
if (task != NULL && pthread_kill(*task, 0) == 0) {
|
||||
if (task != nullptr && pthread_kill(*task, 0) == 0) {
|
||||
return OK;
|
||||
} else {
|
||||
return ERROR;
|
||||
@@ -95,9 +18,34 @@ STATUS verifyTaskID(TASK task) {
|
||||
}
|
||||
|
||||
STATUS setTaskPriority(TASK task, int priority) {
|
||||
return ERROR; // TODO: implement
|
||||
int policy = 0;
|
||||
struct sched_param param;
|
||||
|
||||
if (verifyTaskID(task) == OK &&
|
||||
pthread_getschedparam(*task, &policy, ¶m) == 0) {
|
||||
param.sched_priority = priority;
|
||||
if (pthread_setschedparam(*task, SCHED_FIFO, ¶m) == 0) {
|
||||
return OK;
|
||||
}
|
||||
else {
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
STATUS getTaskPriority(TASK task, int* priority) {
|
||||
return ERROR; // TODO: implement
|
||||
int policy = 0;
|
||||
struct sched_param param;
|
||||
|
||||
if (verifyTaskID(task) == OK &&
|
||||
pthread_getschedparam(*task, &policy, ¶m) == 0) {
|
||||
*priority = param.sched_priority;
|
||||
return OK;
|
||||
}
|
||||
else {
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user