dmx: support multi-valued cmd_fill, separate cmd_range
authorTero Marttila <terom@paivola.fi>
Fri, 11 Apr 2014 19:51:02 +0300
changeset 70 72175852afd2
parent 69 ef9fe98ebf72
child 71 24f00b561a4a
dmx: support multi-valued cmd_fill, separate cmd_range
src/hello-dmx.c
--- a/src/hello-dmx.c	Fri Apr 11 19:30:41 2014 +0300
+++ b/src/hello-dmx.c	Fri Apr 11 19:51:02 2014 +0300
@@ -119,10 +119,51 @@
 }
 
 /*
- * Set output range to value.
+ * Fill output range with values.
+ *
+ *  r <start> <stop> <value> ...
  */
 int cmd_fill ()
 {
+    if (console.argc < 3) {
+        return '!';
+    }
+
+    byte start = console.argv[0];
+    byte end = console.argv[1];
+
+    if (!start) {
+        return '!';
+    }
+
+    if (end < start) {
+        return '!';
+    }
+
+    // apply
+    // arg is 1..256
+    byte c = start - 1;
+
+    for ( ; c < end && c < DMX_COUNT - 1; ) {
+        for (byte a = 2; a < console.argc && c < DMX_COUNT - 1; a++) {
+            dmx.out[c++] = console.argv[a];
+        }
+    }
+
+    if (c > dmx.count) {
+        dmx.count = c;
+    }
+
+    return 0;
+}
+
+/*
+ * Set output start-stop/step range to value.
+ *
+ *  r <start> <stop> <step> <value>
+ */
+int cmd_range ()
+{
     if (console.argc != 4) {
         return '!';
     }
@@ -156,7 +197,6 @@
 
     return 0;
 }
-
 /*
  * Set output to max. zeroes
  */
@@ -191,6 +231,7 @@
         case 'c':       return cmd_clear();
         case 'o':       return cmd_out();
         case 'f':       return cmd_fill();
+        case 'r':       return cmd_range();
         case 's':       return cmd_set();
         case 'z':       return cmd_zero();