The London Hackspace bandwidth meter

Dependencies:   LPD8806 MODSERIAL mbed picojson

See:

Revision:
5:24172484b8c5
Parent:
4:7087ea3d13c1
Child:
6:7e7b4c5d0ba6
--- a/main.cpp	Mon Aug 27 01:32:52 2012 +0000
+++ b/main.cpp	Sun Oct 21 07:16:07 2012 +0000
@@ -107,14 +107,26 @@
     send_text(s);
 }
 
-void emf_logo(void) {
+void logo(void) {
     const char line0[] = "Welcome to";
-    const char line2[] = "EMFCamp!";
+    const char line2[] = "London Hackspace";
 
     text_centered(line0, 0);
     text_centered(line2, 2);        
 }
 
+int hex_char_to_int(char h) {
+    int ret;
+    if (h >= '0' || h <= '9') {
+        ret = h - 48;
+    } else if (h >= 'A' || h <= 'F') {
+        ret = (h - 'A') + 10;
+    } else if (h >= 'a' || h <= 'f') {
+        ret = (h - 'a') + 10;
+    }
+    return ret;
+}
+
 int main() {
     
     setbuf(stdout, NULL);
@@ -126,7 +138,7 @@
     wait_ms(10);
     vfd_init();
     wait_ms(10);
-    emf_logo();
+    logo();
     wait_ms(10);
 
     strip.begin();
@@ -135,23 +147,23 @@
     strip.show();
     pc.printf("post strip.show\r\n");
 
-    wait_ms(500);
-    emf_blue();
-    strip.show();
+//    wait_ms(500);
+//    emf_blue();
+//    strip.show();
 
-    wait_ms(500);
-    strip_clear();
-    strip.show();
+//    wait_ms(500);
+//    strip_clear();
+//    strip.show();
 
-    wait_ms(500);
-    emf_blue();
-    strip.show();
+//    wait_ms(500);
+//    emf_blue();
+//    strip.show();
 
-    wait_ms(500);
-    strip_clear();
-    strip.show();
+//    wait_ms(500);
+//    strip_clear();
+//    strip.show();
 
-    vfd_init();
+//    vfd_init();
 
     /* print our mac address & ip (when/if we get it). */
 
@@ -209,7 +221,7 @@
     int bufpos = 0;
 
     enum state {Looking, Number, String, Cmd};
-    enum cmd {None, Top, Bottom, VfdWrite, VfdPos, Emf, VfdReset, VfdClear};
+    enum cmd {None, Top, Bottom, VfdWrite, VfdPos, Emf, VfdReset, VfdClear, SetStrip};
     state state;
     cmd cmd;
     state = Looking;
@@ -220,9 +232,11 @@
 
         if (pc.readable()) {
             got = pc.getc();
-            if (isprint(got))
-                pc.putc(got); // remote echo
-//            vfd_data(got);
+            if (isprint(got)) {
+//                pc.putc(got); // remote echo
+            } else {
+                pc.printf("%02x ", got);
+            }
             changed = false;
 
             if (state == Looking) {
@@ -237,7 +251,7 @@
                         num = 0;
                         cmd = Bottom;
                         break;
-                    case 'e':
+                    case 'e': // emf blue...
                         cmd = Emf;
                         state = Cmd;
                         break;
@@ -259,6 +273,11 @@
                         cmd = VfdClear;
                         state = Cmd;
                         break;
+                    case 's':
+                        cmd = SetStrip;
+                        state = String;
+                        bufpos = 0;
+                        break;
                 }
             } else { // not looking for a command
                 // cr or lf terminates a command.
@@ -299,6 +318,28 @@
                         case VfdClear:
                             vfd_init();
                             break;
+                        case SetStrip:
+                            bufpos = 0;
+                            printf("SetStrip: %s\r\n", buf);
+                            // buf[0] == t or b for strip
+                            // next 48 chars == HHH rgb * 16
+                            int p, endp, r, g, b;
+                            if (buf[0] == 't') {
+                                p = 0; endp = p + 16;
+                            } else {
+                                p = 16; endp = p + 16;
+                            }
+
+
+                            for (;p < endp ; p ++) {
+                                r = hex_char_to_int(buf[(p * 3) + 1]);
+                                g = hex_char_to_int(buf[(p * 3) + 2]);
+                                b = hex_char_to_int(buf[(p * 3) + 3]);
+                                strip.setPixelColor(p, strip.Color(r,g,b));
+                            }
+                            changed = true;
+
+                            break;
                         default:
                             printf("no command given\r\n");
                     }
@@ -319,6 +360,7 @@
                         buf[bufpos] = '\0';
                     } else {
                         printf("buffer full\r\n!");
+                        // XXX state == None here?
                     }
                 }
             }