revert back to old itasks, add sds support in bytecode
[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 }
59
60 void sds_publish(int id, int fd)
61 {
62 uint8_t cs;
63 for(cs = 0; cs<MAXSDSS; cs++){
64 if(sdss[cs].used && sdss[cs].id == id){
65 debug("Publish %d=%d\n", sdss[cs].id, sdss[cs].value);
66 char msg[6];
67 sprintf(msg, "s%c%c%c\n",
68 sdss[cs].id,
69 sdss[cs].value/265,
70 sdss[cs].value%265);
71 write(fd, msg, 6);
72 return;
73 }
74 }
75 debug("SDS identifier unknown: %d\n", id);
76 }
77
78 int sds_fetch(int id)
79 {
80 uint8_t cs;
81 for(cs = 0; cs<MAXSDSS; cs++)
82 if(sdss[cs].used && sdss[cs].id == id)
83 return sdss[cs].value;
84 debug("SDS identifier unknown: %d\n", id);
85 return 0;
86 }
87
88 void sds_store(int id, int val)
89 {
90 uint8_t cs;
91 for(cs = 0; cs<MAXSDSS; cs++) {
92 if(sdss[cs].used && sdss[cs].id == id){
93 sdss[cs].value = val;
94 return;
95 }
96 }
97 debug("SDS identifier unknown: %d\n", id);
98
99 }