add publishing of sds's
[mTask.git] / int / sds.c
index 3a3c8fe..3a14c60 100644 (file)
--- a/int/sds.c
+++ b/int/sds.c
@@ -8,7 +8,7 @@
 #include "misc.h"
 #include "sds.h"
 
-struct sds sdss[MAXSDSS] = {0};
+struct sds sdss[MAXSDSS];
 uint8_t c;
 
 void sds_register(int fd)
@@ -23,16 +23,11 @@ void sds_register(int fd)
 
        memset(&sdss[cs], 0, sizeof(struct sds));
        //Read identifier
-       read(fd, &c, 1);
-       sdss[cs].id = c;
-
+       read16(fd, c, sdss[cs].id);
        //Read value
-       read(fd, &c, 1);
-       sdss[cs].value = 255*c;
-       read(fd, &c, 1);
-       sdss[cs].value += c;
+       read16(fd, c, sdss[cs].value);
 
-       debug("Received sds %d: %d\n", sdss[cs].id, sdss[cs].value);
+       debug("\nReceived sds %d: %d\n", sdss[cs].id, sdss[cs].value);
        sdss[cs].used = true;
 }
 
@@ -47,12 +42,50 @@ bool sds_update(int fd)
                        continue;
                if(sdss[cs].id == id){
                        //Read value
-                       read(fd, &c, 1);
-                       sdss[cs].value = 255*c;
-                       read(fd, &c, 1);
-                       sdss[cs].value += c;
+                       read16(fd, c, sdss[cs].value);
                        return true;
                }
        }
        return false;
 }
+
+void sds_publish(int id, int fd)
+{
+       uint8_t cs;
+       char msg[6];
+       for(cs = 0; cs<MAXSDSS; cs++){
+               if(sdss[cs].used && sdss[cs].id == id){
+                       debug("Publish %d=%d\n", sdss[cs].id, sdss[cs].value);
+                       sprintf(msg, "u%c%c%c%c\n",
+                               0,
+                               sdss[cs].id,
+                               sdss[cs].value/265,
+                               sdss[cs].value%265);
+                       write(fd, msg, 6);
+                       return;
+               }
+       }
+       debug("SDS identifier unknown: %d\n", id);
+}
+
+int sds_fetch(int id)
+{
+       uint8_t cs;
+       for(cs = 0; cs<MAXSDSS; cs++)
+               if(sdss[cs].used && sdss[cs].id == id)
+                       return sdss[cs].value;
+       debug("SDS identifier unknown: %d\n", id);
+       return 0;
+}
+
+void sds_store(int id, int val)
+{
+       uint8_t cs;
+       for(cs = 0; cs<MAXSDSS; cs++) {
+               if(sdss[cs].used && sdss[cs].id == id){
+                       sdss[cs].value = val;
+                       return;
+               }
+       }
+       debug("SDS identifier unknown: %d\n", id);
+}