3a3c8fec62c762751fcaa19ba02c33532aad15d2
[mTask.git] / int / sds.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <unistd.h>
5
6 #include "mTaskSymbols.h"
7 #include "interpret.h"
8 #include "misc.h"
9 #include "sds.h"
10
11 struct sds sdss[MAXSDSS] = {0};
12 uint8_t c;
13
14 void sds_register(int fd)
15 {
16 uint8_t cs;
17 for(cs = 0; cs<MAXSDSS; cs++)
18 if(!sdss[cs].used)
19 break;
20
21 if(cs == MAXSDSS)
22 die("Trying to add too much tasks...\n");
23
24 memset(&sdss[cs], 0, sizeof(struct sds));
25 //Read identifier
26 read(fd, &c, 1);
27 sdss[cs].id = c;
28
29 //Read value
30 read(fd, &c, 1);
31 sdss[cs].value = 255*c;
32 read(fd, &c, 1);
33 sdss[cs].value += c;
34
35 debug("Received sds %d: %d\n", sdss[cs].id, sdss[cs].value);
36 sdss[cs].used = true;
37 }
38
39 bool sds_update(int fd)
40 {
41 uint8_t cs, id;
42 //Read identifier
43 read(fd, &id, 1);
44
45 for(cs = 0; cs<MAXSDSS; cs++){
46 if(!sdss[cs].used)
47 continue;
48 if(sdss[cs].id == id){
49 //Read value
50 read(fd, &c, 1);
51 sdss[cs].value = 255*c;
52 read(fd, &c, 1);
53 sdss[cs].value += c;
54 return true;
55 }
56 }
57 return false;
58 }