c2fdbdea251778bb878b79f4506d5f8bc737c171
[mTask.git] / client / 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 write_byte('s');
41 write16(sdss[cs].id);
42 write_byte('\n');
43 }
44
45 void sds_delete(void)
46 {
47 uint8_t cs;
48 cs = read16();
49 sdss[cs].used = false;
50 write_byte('a');
51 write16(sdss[cs].id);
52 write_byte('\n');
53 }
54
55 bool sds_update(void)
56 {
57 uint8_t cs, id;
58 //Read identifier
59 id = read16();
60
61 for(cs = 0; cs<MAXSDSS; cs++){
62 if(!sdss[cs].used)
63 continue;
64 if(sdss[cs].id == id){
65 //Read value
66 sdss[cs].value = read16();
67 debug("Received sds update %d: %d",
68 sdss[cs].id, sdss[cs].value);
69 write_byte('u');
70 write16(sdss[cs].id);
71 write_byte('\n');
72 return true;
73 }
74 }
75 return false;
76 }
77
78 void sds_publish(int id)
79 {
80 uint8_t cs;
81 for(cs = 0; cs<MAXSDSS; cs++){
82 if(sdss[cs].used && sdss[cs].id == id){
83 debug("Publish %d=%d", sdss[cs].id, sdss[cs].value);
84 write_byte('p');
85 write16(sdss[cs].id);
86 write16(sdss[cs].value);
87 write_byte('\n');
88 return;
89 }
90 }
91 debug("SDS identifier unknown: %d", id);
92 die("");
93 }
94
95 int sds_fetch(int id)
96 {
97 uint8_t cs;
98 for(cs = 0; cs<MAXSDSS; cs++)
99 if(sdss[cs].used && sdss[cs].id == id)
100 return sdss[cs].value;
101 debug("SDS identifier unknown: %d", id);
102 die("");
103 return 0;
104 }
105
106 void sds_store(int id, int val)
107 {
108 uint8_t cs;
109 for(cs = 0; cs<MAXSDSS; cs++) {
110 if(sdss[cs].used && sdss[cs].id == id){
111 sdss[cs].value = val;
112 return;
113 }
114 }
115 debug("SDS identifier unknown: %d", id);
116 die("");
117 }