a
[mTask.git] / int / sds.c
1 #include <stdlib.h>
2 #include <string.h>
3
4 #ifndef STM
5 #include <unistd.h>
6 #include <stdio.h>
7 #endif
8
9 #include "interface.h"
10 #include "interpret.h"
11 #include "sds.h"
12
13 struct sds sdss[MAXSDSS];
14 uint8_t c;
15
16 void sds_init(void)
17 {
18 memset(&sdss, 0, sizeof(struct sds)*MAXSDSS);
19 }
20
21 void sds_register(void)
22 {
23 uint8_t cs;
24 for(cs = 0; cs<MAXSDSS; cs++)
25 if(!sdss[cs].used)
26 break;
27
28 if(cs == MAXSDSS)
29 die("Trying to add too much sdss...");
30
31 memset(&sdss[cs], 0, sizeof(struct sds));
32 //Read identifier
33 sdss[cs].id = read16();
34 //Read value
35 sdss[cs].value = read16();
36
37 debug("Received sds %d: %d", sdss[cs].id, sdss[cs].value);
38 sdss[cs].used = true;
39 }
40
41 bool sds_update(void)
42 {
43 uint8_t cs, id;
44 //Read identifier
45 id = read16();
46
47 for(cs = 0; cs<MAXSDSS; cs++){
48 if(!sdss[cs].used)
49 continue;
50 if(sdss[cs].id == id){
51 //Read value
52 sdss[cs].value = read16();
53 debug("Received sds update %d: %d",
54 sdss[cs].id, sdss[cs].value);
55 return true;
56 }
57 }
58 return false;
59 }
60
61 void sds_publish(int id)
62 {
63 uint8_t cs;
64 for(cs = 0; cs<MAXSDSS; cs++){
65 if(sdss[cs].used && sdss[cs].id == id){
66 debug("Publish %d=%d", sdss[cs].id, sdss[cs].value);
67 write_byte('u');
68 write16(sdss[cs].id);
69 write16(sdss[cs].value);
70 write_byte('\n');
71 return;
72 }
73 }
74 debug("SDS identifier unknown: %d", id);
75 die("");
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", id);
85 die("");
86 return 0;
87 }
88
89 void sds_store(int id, int val)
90 {
91 uint8_t cs;
92 for(cs = 0; cs<MAXSDSS; cs++) {
93 if(sdss[cs].used && sdss[cs].id == id){
94 sdss[cs].value = val;
95 return;
96 }
97 }
98 debug("SDS identifier unknown: %d", id);
99 die("");
100 }