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