fix if statements and sds publishing
[mTask.git] / int / task.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <unistd.h>
5
6 #include "misc.h"
7 #include "task.h"
8
9 struct task tasks[MAXTASKS];// = {0};
10 uint8_t c;
11
12 int task_register(int fd)
13 {
14 uint8_t ct;
15
16 for(ct = 0; ct<MAXTASKS; ct++)
17 if(!tasks[ct].used)
18 break;
19 if(ct == MAXTASKS)
20 die("Trying to add too much tasks...\n");
21
22 memset(&tasks[ct], 0, sizeof(struct task));
23 //Read interval
24 read16(fd, c, tasks[ct].interval);
25 //Read tasklength
26 read16(fd, c, tasks[ct].tlen);
27
28 if(tasks[ct].tlen > MAXTASKSIZE)
29 die("Task is too long: %d\n", tasks[ct].tlen);
30 //Read task bytecode
31 for(int i = 0; i<tasks[ct].tlen; i++){
32 read(fd, tasks[ct].bc+i, 1);
33 debug("t[][%i]: 0x%02x %d\n", i,
34 tasks[ct].bc[i], tasks[ct].bc[i]);
35 }
36 //Return the task number for later removal
37 debug("Received a task of length %d\n", tasks[ct].tlen);
38 tasks[ct].used = true;
39 return ct;
40 }
41
42 void task_delete(int fd)
43 {
44 read(fd, &c, 1);
45 tasks[c].used = false;
46 }
47
48 struct task *task_get(int num)
49 {
50 return tasks[num].used ? &tasks[num] : NULL;
51 }