updates
[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];
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 read16(fd, c, sdss[cs].id);
27 //Read value
28 read16(fd, c, sdss[cs].value);
29
30 debug("\nReceived sds %d: %d\n", sdss[cs].id, sdss[cs].value);
31 sdss[cs].used = true;
32 }
33
34 bool sds_update(int fd)
35 {
36 uint8_t cs, id;
37 //Read identifier
38 read(fd, &id, 1);
39
40 for(cs = 0; cs<MAXSDSS; cs++){
41 if(!sdss[cs].used)
42 continue;
43 if(sdss[cs].id == id){
44 //Read value
45 read16(fd, c, sdss[cs].value);
46 return true;
47 }
48 }
49 return false;
50 }
51
52 void sds_publish(int id, int fd)
53 {
54 uint8_t cs;
55 char msg[6];
56 for(cs = 0; cs<MAXSDSS; cs++){
57 if(sdss[cs].used && sdss[cs].id == id){
58 debug("Publish %d=%d\n", sdss[cs].id, sdss[cs].value);
59 sprintf(msg, "u%c%c%c%c\n",
60 0,
61 sdss[cs].id,
62 sdss[cs].value/265,
63 sdss[cs].value%265);
64 write(fd, msg, 6);
65 return;
66 }
67 }
68 debug("SDS identifier unknown: %d\n", id);
69 }
70
71 int sds_fetch(int id)
72 {
73 uint8_t cs;
74 for(cs = 0; cs<MAXSDSS; cs++)
75 if(sdss[cs].used && sdss[cs].id == id)
76 return sdss[cs].value;
77 debug("SDS identifier unknown: %d\n", id);
78 return 0;
79 }
80
81 void sds_store(int id, int val)
82 {
83 uint8_t cs;
84 for(cs = 0; cs<MAXSDSS; cs++) {
85 if(sdss[cs].used && sdss[cs].id == id){
86 sdss[cs].value = val;
87 return;
88 }
89 }
90 debug("SDS identifier unknown: %d\n", id);
91 }