blob: 3536544b2200a1aaf36b4d6c8572997c1c2170de [file] [log] [blame]
Brian Silverman1a675112016-02-20 20:42:49 -05001/*----------------------------------------------------------------------------*/
2/* Copyright (c) FIRST 2016. All Rights Reserved. */
3/* Open Source Software - may be modified and shared by FRC teams. The code */
4/* must be accompanied by the FIRST BSD license file in the root directory of */
5/* the project. */
6/*----------------------------------------------------------------------------*/
7
Brian Silverman26e4e522015-12-17 01:56:40 -05008#include "HAL/Task.hpp"
9
10#ifndef OK
11#define OK 0
12#endif /* OK */
13#ifndef ERROR
14#define ERROR (-1)
15#endif /* ERROR */
16
17#include <signal.h>
18
Brian Silverman1a675112016-02-20 20:42:49 -050019extern "C" {
20
Brian Silverman26e4e522015-12-17 01:56:40 -050021STATUS verifyTaskID(TASK task) {
22 if (task != nullptr && pthread_kill(*task, 0) == 0) {
23 return OK;
24 } else {
25 return ERROR;
26 }
27}
28
29STATUS setTaskPriority(TASK task, int priority) {
30 int policy = 0;
31 struct sched_param param;
32
33 if (verifyTaskID(task) == OK &&
34 pthread_getschedparam(*task, &policy, &param) == 0) {
35 param.sched_priority = priority;
36 if (pthread_setschedparam(*task, SCHED_FIFO, &param) == 0) {
37 return OK;
38 }
39 else {
40 return ERROR;
41 }
42 }
43 else {
44 return ERROR;
45 }
46}
47
48STATUS getTaskPriority(TASK task, int* priority) {
49 int policy = 0;
50 struct sched_param param;
51
52 if (verifyTaskID(task) == OK &&
53 pthread_getschedparam(*task, &policy, &param) == 0) {
54 *priority = param.sched_priority;
55 return OK;
56 }
57 else {
58 return ERROR;
59 }
60}
Brian Silverman1a675112016-02-20 20:42:49 -050061
62} // extern "C"