From 15d185318697621b3fa05ace8e4432815247f1b7 Mon Sep 17 00:00:00 2001
From: Jake <jake.read@cba.mit.edu>
Date: Sat, 11 Aug 2018 10:51:29 -0400
Subject: [PATCH] mud printer

---
 README.md                         |   2 +
 files.html                        |   9 +-
 js/atkbridge.js                   |   2 +-
 modules/hardware/test             | 104 ++++++++
 modules/index.js                  |   6 +-
 modules/motion/gcodeParser        |   2 +-
 modules/motion/machineController  |  10 +
 modules/motion/moveInstructionQue | 170 +++++++++++++
 modules/motion/planner            |  11 +-
 modules/motion/planner-ye-olden   | 407 ------------------------------
 modules/motion/textBlockIn        |   5 +-
 tinymachine-image.png             | Bin 208405 -> 0 bytes
 tinymachine-planner-02            |   1 -
 tinymachine-planning              |   1 -
 14 files changed, 311 insertions(+), 419 deletions(-)
 create mode 100644 modules/hardware/test
 create mode 100644 modules/motion/moveInstructionQue
 delete mode 100644 modules/motion/planner-ye-olden
 delete mode 100644 tinymachine-image.png
 delete mode 100644 tinymachine-planner-02
 delete mode 100644 tinymachine-planning

diff --git a/README.md b/README.md
index 5bd31cd..fbf44cd 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,8 @@
     - SVG export
 - ...
 
+298
+
 # To install and run mods locally
 
 You need to first install [node.js](https://docs.npmjs.com/getting-started/installing-node).
diff --git a/files.html b/files.html
index 1733a50..ca9bed4 100644
--- a/files.html
+++ b/files.html
@@ -13,7 +13,7 @@
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./files.html'>files.html</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./index.html'>index.html</a><br>
 <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;js</i><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/atkserialserver.js'>atkserialserver.js</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/atkbridge.js'>atkbridge.js</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/deviceserver.js'>deviceserver.js</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/echoserver.js'>echoserver.js</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/files.js'>files.js</a><br>
@@ -106,7 +106,10 @@
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/hardware/motors/stepper'>stepper</a><br>
 <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;network</i><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/hardware/network/atkbridge'>atkbridge</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/hardware/pot'>pot</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/hardware/profile'>profile</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/hardware/reset'>reset</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/hardware/test'>test</a><br>
 <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image</i><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/image/boundingbox'>boundingbox</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/image/color%20separation'>color separation</a><br>
@@ -148,8 +151,9 @@
 <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;motion</i><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/motion/gcodeParser'>gcodeParser</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/motion/machineController'>machineController</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/motion/moveInstructionQue'>moveInstructionQue</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/motion/neilParser'>neilParser</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/motion/planner'>planner</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/motion/planner-ye-olden'>planner-ye-olden</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/motion/segments'>segments</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/motion/textBlockIn'>textBlockIn</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/motion/textLineIn'>textLineIn</a><br>
@@ -1684,7 +1688,6 @@
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./node_modules/xtend/package.json'>package.json</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./node_modules/xtend/README.md'>README.md</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./node_modules/xtend/test.js'>test.js</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./planner-pre'>planner-pre</a><br>
 <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;programs</i><br>
 <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frep</i><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./programs/frep/gears'>gears</a><br>
diff --git a/js/atkbridge.js b/js/atkbridge.js
index ea24c42..a185cae 100644
--- a/js/atkbridge.js
+++ b/js/atkbridge.js
@@ -21,7 +21,7 @@ if (process.argv.length < 4 && process.argv[2] != 'default') {
 } else if (process.argv[2] === 'default' || process.argv.length < 3) {
     client_address = '::ffff:127.0.0.1'
     server_port = '6789'
-    com_port = 'COM8'
+    com_port = 'COM3'
 } else {
     client_address = process.argv[2]
     server_port = process.argv[3]
diff --git a/modules/hardware/test b/modules/hardware/test
new file mode 100644
index 0000000..f84934c
--- /dev/null
+++ b/modules/hardware/test
@@ -0,0 +1,104 @@
+//
+// hardware reset command
+//
+// Neil Gershenfeld and Jake Read
+// (c) Massachusetts Institute of Technology 2018
+// 
+// This work may be reproduced, modified, distributed, performed, and 
+// displayed for any purpose, but must acknowledge the mods
+// project. Copyright is retained and must be preserved. The work is 
+// provided as is; no warranty is provided, and users accept all 
+// liability.
+//
+// closure
+//
+(function() {
+    // globals
+    var mod = {}
+
+    // name
+    var name = 'test'
+
+    var init = function() {
+        // 
+    }
+
+    var inputs = {
+        //
+    }
+
+    var outputs = {
+        test: {
+            type: 'packet',
+            label: 'headless packet out',
+            event: function() {
+                var test = [127]
+                mods.output(mod, 'test', test)
+            }
+        }
+    }
+
+    var interface = function(div) {
+        mod.div = div
+
+        mod.resetButton = make_button_input(div, 'send')
+        mod.resetButton.addEventListener('click', function() {
+            outputs.test.event()
+        })
+    }
+
+
+    /*
+    UI helpers
+    */
+    function make_text_input(div, name, size) {
+        div.appendChild(document.createElement('br'))
+        div.appendChild(document.createTextNode(name + ': '))
+        var input = document.createElement('input')
+        input.type = 'text'
+        input.size = size
+        div.appendChild(input)
+
+        return input
+    }
+
+    function make_button_input(div, text) {
+        div.appendChild(document.createElement('br'))
+        var button = document.createElement('button')
+        button.style.padding = mods.ui.padding
+        button.style.margin = 1
+        button.appendChild(document.createTextNode(text))
+        div.appendChild(button)
+
+        return button
+    }
+
+    function make_checkbox_input(div, prefix) {
+        div.appendChild(document.createElement('br'))
+        div.appendChild(document.createTextNode(prefix + ': '))
+        var checkbox = document.createElement('input')
+        checkbox.type = 'checkbox'
+        div.appendChild(checkbox)
+
+        return checkbox
+    }
+
+    function make_text_display(div, prefix) {
+        div.appendChild(document.createElement('br'))
+        div.appendChild(document.createTextNode(prefix + ': '))
+        var span = document.createElement('span')
+        span.innerHTML = ''
+        div.appendChild(span)
+
+        return span
+    }
+
+    return ({
+        mod: mod,
+        name: name,
+        init: init,
+        inputs: inputs,
+        outputs: outputs,
+        interface: interface
+    })
+}())
\ No newline at end of file
diff --git a/modules/index.js b/modules/index.js
index 2cb8cd9..7ad1ad1 100644
--- a/modules/index.js
+++ b/modules/index.js
@@ -77,7 +77,10 @@ module_label('   motors')
 module_menu('      stepper','modules/hardware/motors/stepper')
 module_label('   network')
 module_menu('      atkbridge','modules/hardware/network/atkbridge')
+module_menu('   pot','modules/hardware/pot')
+module_menu('   profile','modules/hardware/profile')
 module_menu('   reset','modules/hardware/reset')
+module_menu('   test','modules/hardware/test')
 module_label('image')
 module_menu('   boundingbox','modules/image/boundingbox')
 module_menu('   color separation','modules/image/color%20separation')
@@ -118,8 +121,9 @@ module_menu('   move','modules/module/move')
 module_label('motion')
 module_menu('   gcodeParser','modules/motion/gcodeParser')
 module_menu('   machineController','modules/motion/machineController')
+module_menu('   moveInstructionQue','modules/motion/moveInstructionQue')
+module_menu('   neilParser','modules/motion/neilParser')
 module_menu('   planner','modules/motion/planner')
-module_menu('   planner-ye-olden','modules/motion/planner-ye-olden')
 module_menu('   segments','modules/motion/segments')
 module_menu('   textBlockIn','modules/motion/textBlockIn')
 module_menu('   textLineIn','modules/motion/textLineIn')
diff --git a/modules/motion/gcodeParser b/modules/motion/gcodeParser
index f14249c..3af139d 100644
--- a/modules/motion/gcodeParser
+++ b/modules/motion/gcodeParser
@@ -92,7 +92,7 @@ turns lines of text into objects for machine controller
             }
             // loop to find position vals, check for feed update
             for (key in keyvals) {
-                if (key.match('[A-CX-Z]')) {
+                if (key.match('[A-EX-Z]')) {
                     output.position[key] = keyvals[key]
                 } else if (key.match('[F]')){
                     if(mod.codeMode.value == 'G0'){
diff --git a/modules/motion/machineController b/modules/motion/machineController
index 675b09f..3e4ac1f 100644
--- a/modules/motion/machineController
+++ b/modules/motion/machineController
@@ -107,6 +107,16 @@ dishes gcodes -> planner, spindle codes -> spindle
             jog('Y', -parseFloat(mod.jogStepSizeIn.value))
         })
 
+        mod.jogYPButton = make_button_input(div, 'z+')
+        mod.jogYPButton.addEventListener('click', function(evt) {
+            jog('Z', parseFloat(mod.jogStepSizeIn.value))
+        })
+
+        mod.jogYMButton = make_button_input(div, 'z-')
+        mod.jogYMButton.addEventListener('click', function(evt) {
+            jog('Z', -parseFloat(mod.jogStepSizeIn.value))
+        })
+
         // sequence begin, stop 
 
         mod.startSequenceButton = make_button_input(div, 'start sequence')
diff --git a/modules/motion/moveInstructionQue b/modules/motion/moveInstructionQue
new file mode 100644
index 0000000..b0fc3ec
--- /dev/null
+++ b/modules/motion/moveInstructionQue
@@ -0,0 +1,170 @@
+//
+// generic line input
+//
+// Neil Gershenfeld and Jake Read
+// (c) Massachusetts Institute of Technology 2018
+// 
+// This work may be reproduced, modified, distributed, performed, and 
+// displayed for any purpose, but must acknowledge the mods
+// project. Copyright is retained and must be preserved. The work is 
+// provided as is; no warranty is provided, and users accept all 
+// liability.
+//
+// closure
+//
+(function() {
+    //
+    // module globals
+    //
+    var mod = {}
+    //
+    // name
+    //
+    var name = 'move instruction queue'
+    //
+    // initialization
+    //
+    var init = function() {
+
+    }
+    //
+    // inputs
+    //
+    var inputs = {
+        lineRequest: {
+            type: 'number',
+            label: 'line request',
+            event: function(evt) {
+                sendLine()
+            }
+        },
+        instructions: {
+            type: 'objects', 
+            label: 'move instructions',
+            event: function(evt){
+                newInstructions(evt.detail)
+            }
+        }
+    }
+    //
+    // outputs
+    //
+    var outputs = {
+        instruction: {
+            type: 'object',
+            label: 'instruction',
+            event: function(instr) {
+                mods.output(mod, 'instruction', instr)
+            }
+        }
+    }
+    //
+    // interface
+    //
+    var interface = function(div) {
+        mod.div = div
+        //
+        // inputs
+        //
+        mod.lineCountDisplay = make_text_display(div, 'current line')
+        mod.resetCurrentLine = make_button_input(div, 'reset lines')
+        mod.resetCurrentLine.addEventListener('click', function(){
+            mod.lineCountDisplay.innerHTML = '0'
+            currentLine = 0
+        })
+        mod.sendOneLine = make_button_input(div, 'send a line')
+        mod.sendOneLine.addEventListener('click', function(){
+            sendLine()
+        })
+    }
+
+    var currentLine = 0
+    var moveArray = []
+
+    function newInstructions(instructions){
+        moveArray = instructions
+    }
+
+    function sendLine() {
+        var moveOut = moveArray[currentLine]
+        currentLine++
+        if (currentLine > moveArray.length) {
+            currentLine = moveArray.length
+        } else {
+            outputs.instruction.event(moveOut)
+        }
+        mod.lineCountDisplay.innerHTML = currentLine.toString()
+    }
+
+
+    /*
+    UI helpers
+    */
+    function make_text_input(div, name, size) {
+        div.appendChild(document.createElement('br'))
+        div.appendChild(document.createTextNode(name + ': '))
+        var input = document.createElement('input')
+        input.type = 'text'
+        input.size = size
+        div.appendChild(input)
+
+        return input
+    }
+
+    function makeTextArea(div, name, width, height) {
+        div.appendChild(document.createElement('br'))
+        div.appendChild(document.createTextNode(name + ': '))
+        div.appendChild(document.createElement('br'))
+        var textArea = document.createElement('textarea')
+        textArea.setAttribute('cols', width)
+        textArea.setAttribute('rows', height)
+        textArea.type = 'textarea'
+        div.appendChild(textArea)
+
+        return textArea
+    }
+
+    function make_button_input(div, text) {
+        div.appendChild(document.createElement('br'))
+        var button = document.createElement('button')
+        button.style.padding = mods.ui.padding
+        button.style.margin = 1
+        button.appendChild(document.createTextNode(text))
+        div.appendChild(button)
+
+        return button
+    }
+
+    function make_checkbox_input(div, prefix) {
+        div.appendChild(document.createElement('br'))
+        div.appendChild(document.createTextNode(prefix + ': '))
+        var checkbox = document.createElement('input')
+        checkbox.type = 'checkbox'
+        div.appendChild(checkbox)
+
+        return checkbox
+    }
+
+    function make_text_display(div, prefix) {
+        div.appendChild(document.createElement('br'))
+        div.appendChild(document.createTextNode(prefix + ': '))
+        var span = document.createElement('span')
+        span.innerHTML = ''
+        div.appendChild(span)
+
+        return span
+    }
+
+
+    //
+    // return values
+    //
+    return ({
+        mod: mod,
+        name: name,
+        init: init,
+        inputs: inputs,
+        outputs: outputs,
+        interface: interface
+    })
+}())
\ No newline at end of file
diff --git a/modules/motion/planner b/modules/motion/planner
index 891da8d..34a6ef3 100644
--- a/modules/motion/planner
+++ b/modules/motion/planner
@@ -48,9 +48,9 @@ motors
     var init = function() {
         mod.accelIn.value = '500'
         mod.junctionDeviationIn.value = '1'
-        mod.minSpeedIn.value = '4'
+        mod.minSpeedIn.value = '12'
 
-        mod.axisIdentifiers.value = 'X,Y'
+        mod.axisIdentifiers.value = 'X,Y,Z'
         resetNetwork()
 
         mod.netWindowIn.value = '12'
@@ -211,13 +211,18 @@ motors
         */
         if(ok){
             var opening = packetWindowSize - axisNetCounters[0]
+            var newrequest = true
             if(opening > moveQue.length){
                 opening = moveQue.length
+                newrequest = false
+
             }
             for(var i = 0; i < opening; i++){
                 //console.log('sending', i)
                 sendMove()
-                outputs.moveComplete.event()
+                if(newrequest){
+                    outputs.moveComplete.event()
+                }
             }
         }
     }
diff --git a/modules/motion/planner-ye-olden b/modules/motion/planner-ye-olden
deleted file mode 100644
index 506b806..0000000
--- a/modules/motion/planner-ye-olden
+++ /dev/null
@@ -1,407 +0,0 @@
-//
-// converts toolpath objects into segments for accel planning
-//
-// Neil Gershenfeld and Jake Read
-// (c) Massachusetts Institute of Technology 2018
-//
-// This work may be reproduced, modified, distributed, performed, and
-// displayed for any purpose, but must acknowledge the mods
-// project. Copyright is retained and must be preserved. The work is
-// provided as is; no warranty is provided, and users accept all
-// liability.
-
-
-/*
-eats objects like
-var move = {
-  position: {
-    X: float
-    Y: float
-    Z: float
-    A: float
-  }
-  rate: float
-}
-
-
-*/
-
-//
-// closure
-//
-(function() {
-    //
-    // module globals
-    //
-    var mod = {}
-    //
-    // name
-    //
-    var name = 'motion planner'
-    //
-    // initialization
-    //
-    var init = function() {
-        mod.accel_in.value = '25'
-        mod.junction_deviation_in.value = '0.5'
-        mod.current_block_in.value = '0'
-        mod.current_window_size_in.value = '0'
-        mod.window = 0
-        mod.packets_awaiting_reply = 0
-    }
-    //
-    // inputs
-    var twoCount = 0
-    //
-    var inputs = {
-        segments: {
-            type: 'objects',
-            label: 'segments',
-            event: function(evt) {
-                mod.segments = JSON.parse(JSON.stringify(evt.detail)) // dereference pls
-                // console.log('segments to planner: ', mod.segments)
-                runQueue()
-            }
-        },
-        next: {
-            type: 'event',
-            label: 'call for next block',
-            event: function(evt) {
-                twoCount++
-                if (twoCount > 1) {
-                    mod.packets_awaiting_reply--;
-                    if (mod.packets_awaiting_reply < mod.window) {
-                        sendBlock()
-                    }
-                    twoCount = 0
-                }
-            }
-        }
-    }
-    //
-    // outputs
-    //
-    var outputs = {
-        nextblock: {
-            type: 'object',
-            label: 'next block',
-            event: function() {
-                //mods.output(mod, 'segments', null)
-            }
-        }
-    }
-    //
-    // interface
-    //
-    var interface = function(div) {
-        mod.div = div
-        //
-        // inputs
-        //
-        // settings
-        mod.accel_in = make_text_input(div, 'acceleration, mm/s/s', 12)
-        mod.junction_deviation_in = make_text_input(div, 'junction deviation, mm', 12)
-        //
-        // request to do the business
-        //
-        mod.parse_button = make_button_input(div, 'parse')
-        mod.parse_button.addEventListener('click', function() {
-            runQueue()
-        })
-
-        // current block
-        mod.current_block_in = make_text_input(div, 'next block to send', 12)
-
-        mod.current_window_size_in = make_text_input(div, 'current window size', 12)
-
-        //
-        // send a block
-        //
-        mod.send_button = make_button_input(div, 'send next block')
-        mod.send_button.addEventListener('click', function() {
-            sendBlock()
-        })
-        mod.open_window_button = make_button_input(div, 'open transmit window')
-        mod.open_window_button.addEventListener('click', function() {
-            console.log('opening window')
-            if (mod.window < 2) {
-                mod.window = 3
-            } else {
-                mod.window++
-            }
-            mod.current_window_size_in.value = mod.window.toString()
-            mod.packets_awaiting_reply = 0
-            while (mod.packets_awaiting_reply < mod.window) {
-                sendBlock()
-            }
-        })
-        mod.close_window_button = make_button_input(div, 'close transmit window')
-        mod.close_window_button.addEventListener('click', function() {
-            mod.window = 0;
-            mod.current_window_size_in.value = mod.window.toString()
-        })
-    }
-
-    function cartesianDistance(p1, p2) {
-        // takes p1, p2 to be arrays of same length
-        // computes cartesian distance
-        var sum = 0
-        for (var i = 0; i < p1.length; i++) {
-            sum += Math.pow((p1[i] - p2[i]), 2)
-        }
-        return Math.sqrt(sum)
-    }
-
-    function cartesianLength(v) {
-        // length of vector
-        var sum = 0
-        for (var i = 0; i < v.length; i++) {
-            sum += Math.pow(v[i], 2)
-        }
-        return Math.sqrt(sum)
-    }
-
-    function addMatrix(a, b, c) {
-        // c = a + b
-        a.forEach(function(item, index) {
-            c[index] = b[index] + a[index]
-        })
-    }
-
-    function subtractMatrix(a, b, c) {
-        // c = a - b
-        b.forEach(function(item, index) {
-            c[index] = a[index] - b[index]
-        })
-    }
-
-    function multiplyMatrix(a, scalar, b) {
-        // b = a * scalar
-        a.forEach(function(item, index) {
-            b[index] = a[index] * scalar
-        })
-    }
-
-    function multiply2dMatrix(a, scalar, b) {
-        // b = a * scalar
-        for (var i = 0; i < a.length; i++) {
-            for (var j = 0; j < a[i].length; j++) {
-                b[i][j] = a[i][j] * scalar;
-            }
-        }
-    }
-
-    function divideMatrix(a, scalar, b) {
-        // b = a / scalar
-        for (var i = 0; i < a.length; i++) {
-            b[i] = a[i] / scalar
-        }
-    }
-
-    function unitVector(p1, p2) {
-        // returns new array, is unit vector of p2-p1
-        var unit = new Array()
-        subtractMatrix(p2, p1, unit)
-        var length = cartesianLength(unit)
-        divideMatrix(unit, length, unit)
-
-        return unit
-    }
-
-    function dotProduct(a, b) {
-        // returns a dot b
-        var sum = 0;
-        for (var i = 0; i < a.length; i++) {
-            sum += a[i] * b[i]
-        }
-
-        return sum
-    }
-
-    function toFixedMatrix(a, digits) {
-        var rounded = new Array()
-        for (var i = 0; i < a.length; i++) {
-            rounded[i] = a[i].toFixed(digits)
-        }
-
-        return rounded
-    }
-
-    /*
-    now:
-
-    start from segment and find a corner
-    do planner
-
-    */
-
-    //
-    // local functions
-    //
-    function runQueue() {
-        // converting from mm/s or dpi (pixel units) to mm based units
-        // https://github.com/grbl/grbl/blob/master/grbl/planner.c
-        // https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/
-        /*
-        first we walk the queue:
-        going backwards, end at 0 speed exit
-        - find junction speed (junction deviation) between this and previous block
-        - this is entry speed, calculate trapezoid to exit speed
-        next block
-        - exit speed is recently calculated entry speed
-        - do junction deviation, this is entry speed
-        - calculate trapezoid
-        .. why is this simpler? find entry and exit speed of each block,
-         find accel limits per axis, do trapezoid with that accel
-
-        */
-
-        var jdsize = parseFloat(mod.junction_deviation_in.value)
-        var accel = parseFloat(mod.accel_in.value)
-
-        mod.segments[mod.segments.length - 1].exit = 0 // trailing edge always full stop
-
-        for (var i = mod.segments.length - 1; i > 0; i--) {
-            // reverse pass
-            // find junction deviation
-            /*
-             - really, could only do this once per segment when a new one is added
-             - unitize entry and exit vectors
-             - find cos(theta) = Ventry dot Vexit / (|Ventry| * |Vexit|) -> this is (1*1 bc unit)
-             - find sin(theta/2) = sqrt((1-cos(theta))/2)
-             - find r = j(sin(theta/2)/(1-sin(theta/2)))
-             - find Fj = sqrt(Ac*r)
-             - junction speed is min(Fj, min(entry,exit))
-             */
-
-            var v_entry = unitVector(mod.segments[i - 1].p1, mod.segments[i - 1].p2)
-            var v_exit = unitVector(mod.segments[i].p1, mod.segments[i].p2)
-            //console.log('unit entry, unit exit', toFixedMatrix(v_entry, 3), toFixedMatrix(v_exit, 3))
-            var cos_theta = dotProduct(v_entry, v_exit) // dot product / mag * mag where mags are 1 each bc unit
-            // catch corner cases (get it? - actually they are very straight cases, or very turnaround cases)
-            if (cos_theta < -0.9999999999999) {
-                cos_theta = -0.9999999999999
-            } else if (cos_theta > 0.9999999999999) {
-                cos_theta = 0.9999999999999
-            }
-            //console.log('cos_theta', cos_theta, Math.acos(cos_theta) * (180 / Math.PI))
-            var sin_theta_overtwo = Math.sqrt((1 - cos_theta) / 2)
-            //console.log('sin_theta_overtwo', sin_theta_overtwo)
-            var radius = jdsize * ((1 - sin_theta_overtwo) / sin_theta_overtwo)
-            //console.log('radius', radius)
-            var fj = Math.sqrt(accel * radius)
-            //console.log('fj', fj)
-
-            var feed_junction = Math.min(fj, mod.segments[i].cruise, mod.segments[i - 1].cruise)
-            //console.log('feed_junction', feed_junction)
-
-            // ok we have the maximum feed at the preceeding junction
-            // now: find the maximum entry speeds as if we spent the whole block decelerating
-
-            // size of segment
-            var distance = cartesianDistance(mod.segments[i].p1, mod.segments[i].p2)
-            //console.log('distance', distance)
-            var max_entry_speed = Math.sqrt(mod.segments[i].exit * mod.segments[i].exit + 2 * distance * accel)
-            //console.log('max_entry_speed', max_entry_speed)
-            var entry_speed = Math.min(max_entry_speed, feed_junction)
-            //console.log('entry_speed', entry_speed)
-            mod.segments[i].entry = entry_speed
-            mod.segments[i - 1].exit = entry_speed
-            //console.log('segment:', mod.segments[i])
-            mod.segments[i].accel = accel
-            mod.segments[i].distance = distance
-        }
-
-        // bad bad not very good implementation to start:
-        mod.segments[0].entry = 0
-        mod.segments[0].accel = accel
-        mod.segments[0].distance = cartesianDistance(mod.segments[0].p1, mod.segments[0].p2)
-
-        // forward pass to make sure we can accelerate to set exit speed in length
-        for (var i = 0; i < mod.segments.length - 1; i++) {
-            var distance = mod.segments[i].distance
-            var max_exit_speed = Math.sqrt(mod.segments[i].entry * mod.segments[i].entry + 2 * distance * accel)
-
-            if (max_exit_speed < mod.segments[i + 1].entry_speed) {
-                mod.segments[i + 1].entry = max_exit_speed
-                mod.segments[i].exit = max_exit_speed
-            }
-        }
-
-        console.log('segments in planner:', mod.segments)
-
-    }
-
-    function sendBlock() {
-        var index = parseInt(mod.current_block_in.value)
-        if (index < 0) {
-            index = 0
-        } else if (index > mod.segments.length - 1) {
-            index = 0
-        }
-
-        mods.output(mod, 'nextblock', mod.segments[index])
-        mod.packets_awaiting_reply++;
-
-        index++
-        mod.current_block_in.value = index
-    }
-
-
-    /*
-    UI helpers
-    */
-    function make_text_input(div, name, size) {
-        div.appendChild(document.createElement('br'))
-        div.appendChild(document.createTextNode(name + ': '))
-        var input = document.createElement('input')
-        input.type = 'text'
-        input.size = size
-        div.appendChild(input)
-
-        return input
-    }
-
-    function make_button_input(div, text) {
-        div.appendChild(document.createElement('br'))
-        var button = document.createElement('button')
-        button.style.padding = mods.ui.padding
-        button.style.margin = 1
-        button.appendChild(document.createTextNode(text))
-        div.appendChild(button)
-
-        return button
-    }
-
-    function make_checkbox_input(div, prefix) {
-        div.appendChild(document.createElement('br'))
-        div.appendChild(document.createTextNode(prefix + ': '))
-        var checkbox = document.createElement('input')
-        checkbox.type = 'checkbox'
-        div.appendChild(checkbox)
-
-        return checkbox
-    }
-
-    function make_text_display(div, prefix) {
-        div.appendChild(document.createElement('br'))
-        div.appendChild(document.createTextNode(prefix + ': '))
-        var span = document.createElement('span')
-        span.innerHTML = ''
-        div.appendChild(span)
-
-        return span
-    }
-
-    //
-    // return values
-    //
-    return ({
-        mod: mod,
-        name: name,
-        init: init,
-        inputs: inputs,
-        outputs: outputs,
-        interface: interface
-    })
-}())
\ No newline at end of file
diff --git a/modules/motion/textBlockIn b/modules/motion/textBlockIn
index f5f39c1..66b6541 100644
--- a/modules/motion/textBlockIn
+++ b/modules/motion/textBlockIn
@@ -152,7 +152,10 @@ X0 Y0\n\ "
             mod.lineCountDisplay.innerHTML = '0'
             currentLine = 0
         })
-        mod.textAreaIn = makeTextArea(div, 'lines', 24, 48)
+        mod.textAreaIn = makeTextArea(div, 'lines', 48, 48)
+        mod.textAreaIn.addEventListener('change', function(){
+            linesToArray()
+        })
     }
 
     var currentLine = 0
diff --git a/tinymachine-image.png b/tinymachine-image.png
deleted file mode 100644
index c0bf09d12c14419ce426769adc3a843bf2da95bf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 208405
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
Mp00i_>zopr0MhHDqyPW_

diff --git a/tinymachine-planner-02 b/tinymachine-planner-02
deleted file mode 100644
index 855c3b8..0000000
--- a/tinymachine-planner-02
+++ /dev/null
@@ -1 +0,0 @@
-{"modules":{"0.6719905562745752":{"definition":"//\r\n// converts toolpath objects into segments for accel planning\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n//\r\n// This work may be reproduced, modified, distributed, performed, and\r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is\r\n// provided as is; no warranty is provided, and users accept all\r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'atk network bridge'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.address.value = '127.0.0.1'\r\n        mod.port.value = 6789\r\n        mod.socket = null\r\n        socket_open()\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        packetOne: {\r\n            type: 'packet',\r\n            label: '1 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(0, headlessPacket)\r\n            }\r\n        },\r\n        packetTwo: {\r\n            type: 'packet',\r\n            label: '2 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(1, headlessPacket)\r\n            }\r\n        },\r\n        packetThree: {\r\n            type: 'packet',\r\n            label: '3 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(2, headlessPacket)\r\n            }\r\n        },\r\n        packetFour: {\r\n            type: 'packet',\r\n            label: '4 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(3, headlessPacket)\r\n            }\r\n        },\r\n        packetFive: {\r\n            type: 'packet',\r\n            label: '5 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(4, headlessPacket)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        packetOne: {\r\n            type: 'packet',\r\n            label: '1 packet payload',\r\n            event: function(evt) {\r\n                // fires elswhere with mods.output(mod, 'packetOne', data)\r\n            }\r\n        },\r\n        packetTwo: {\r\n            type: 'packet',\r\n            label: '2 packet payload'\r\n        },\r\n        packetThree: {\r\n            type: 'packet',\r\n            label: '3 packet payload'\r\n        },\r\n        packetFour: {\r\n            type: 'packet',\r\n            label: '4 packet payload'\r\n        },\r\n        packetFive: {\r\n            type: 'packet',\r\n            label: '5 packet payload'\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        mod.netpath_in = new Array() // of UI\r\n        mod.netpath = new Array() // of paths\r\n        // settings\r\n        // the network paths to the thing\r\n        for (var i = 0; i < 5; i++) {\r\n            add_netpath(div)\r\n        }\r\n\r\n        div.appendChild(document.createElement('br'))\r\n\r\n        var a = document.createElement('a')\r\n        a.href = './js/serialserver.js'\r\n        a.innerHTML = 'serialserver:'\r\n        a.target = '_blank'\r\n        div.appendChild(a)\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // open/close\r\n        //\r\n        var btn = document.createElement('button')\r\n        btn.style.margin = 1\r\n        btn.appendChild(document.createTextNode('open'))\r\n        btn.addEventListener('click', function() {\r\n            socket_open()\r\n        })\r\n        div.appendChild(btn)\r\n        var btn = document.createElement('button')\r\n        btn.style.margin = 1\r\n        btn.appendChild(document.createTextNode('close'))\r\n        btn.addEventListener('click', function() {\r\n            socket_close()\r\n        })\r\n        div.appendChild(btn)\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // address\r\n        //\r\n        div.appendChild(document.createTextNode('address: '))\r\n        input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = 10\r\n        div.appendChild(input)\r\n        mod.address = input\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // port\r\n        //\r\n        div.appendChild(document.createTextNode('\\u00a0\\u00a0\\u00a0\\u00a0\\u00a0port: '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = 10\r\n        div.appendChild(input)\r\n        mod.port = input\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // status\r\n        //\r\n        div.appendChild(document.createTextNode('\\u00a0\\u00a0status: '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = 10\r\n        div.appendChild(input)\r\n        mod.status = input\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // serial\r\n        //\r\n        div.appendChild(document.createTextNode('serial device:'))\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // open/close\r\n        //\r\n        var btn = document.createElement('button')\r\n        btn.style.margin = 1\r\n        btn.appendChild(document.createTextNode('open'))\r\n        btn.addEventListener('click', function() {\r\n            serial_open()\r\n        })\r\n        div.appendChild(btn)\r\n        var btn = document.createElement('button')\r\n        btn.style.margin = 1\r\n        btn.appendChild(document.createTextNode('close'))\r\n        btn.addEventListener('click', function() {\r\n            serial_close()\r\n        })\r\n        div.appendChild(btn)\r\n        div.appendChild(document.createElement('br'))\r\n    }\r\n\r\n    function add_netpath(div) {\r\n        var numCurrentPaths = mod.netpath.length;\r\n        mod.netpath_in[numCurrentPaths] = make_text_input(div, (numCurrentPaths + 1).toString() + ' network path', 12)\r\n        mod.netpath_in[numCurrentPaths].addEventListener('change', function() {\r\n            mod.netpath[numCurrentPaths] = mod.netpath_in[numCurrentPaths].value.split(',')\r\n            if (mod.netpath[numCurrentPaths] == '') {\r\n                mod.netpath[0] = []\r\n                console.log('zero length address')\r\n            } else {\r\n                for (var i = 0; i < mod.netpath[numCurrentPaths].length; i++) {\r\n                    mod.netpath[numCurrentPaths][i] = parseInt(mod.netpath[numCurrentPaths][i])\r\n                }\r\n                console.log('new address', mod.netpath)\r\n            }\r\n        })\r\n        mod.netpath_in[numCurrentPaths].value = '0,' + numCurrentPaths.toString()\r\n        mod.netpath[numCurrentPaths] = [0, numCurrentPaths]\r\n    }\r\n\r\n    function packetOutput(index, headlessPacket) {\r\n        // add ptr and delimiter (unshifting, so reverse order)\r\n        headlessPacket.unshift(255) //end addr delimiter\r\n        headlessPacket.unshift(254) //ptr\r\n        // add path descending thru\r\n        for (var i = mod.netpath[index].length - 1; i >= 0; i--) {\r\n            headlessPacket.unshift(mod.netpath[index][i])\r\n        }\r\n        // add length\r\n        headlessPacket.unshift(headlessPacket.length + 1)\r\n        // log it\r\n        // console.log('packet from demux', headlessPacket)\r\n        // put it on the serial\r\n        var wsMessage = {\r\n                        type: 'packet',\r\n                        packet: JSON.parse(JSON.stringify(headlessPacket))\r\n                    }\r\n        socket_send(JSON.stringify(wsMessage))\r\n    }\r\n\r\n    function packetInput(packet) {\r\n        // shift pointer\r\n        shiftPacketPointer(packet)\r\n        // find address in packet, address has been flipped\r\n        // assuming this is a terminal packet, i.e. we are the recipient,\r\n        // cut \r\n        var returnPacketHeader = packet.slice(2, packet.indexOf(255))\r\n        // and then flip the header\r\n        var packetHeader = new Array()\r\n        for (var i = 0; i < returnPacketHeader.length; i++) {\r\n            packetHeader[i] = returnPacketHeader[returnPacketHeader.length - i - 1]\r\n        }\r\n        var indexMatch = null\r\n        // match to addresses mod.netpath[i]\r\n        for (var i = 0; i < mod.netpath.length; i++) {\r\n            if (packetHeader.length === mod.netpath[i].length) {\r\n                if (packetHeader.toString() === mod.netpath[i].toString()) {\r\n                    // just takes 1st match\r\n                    // actually, we are receiving ack'd packets, w/ reversed headers\r\n\r\n                    indexMatch = i\r\n                }\r\n            }\r\n        }\r\n        // is match?\r\n        if (indexMatch != null) {\r\n            // console.log('match on ', indexMatch)\r\n            // dereference header\r\n            var headlessPacket = packet.slice(packetHeader.length + 3, packet.length)\r\n            // console.log('headless',  headlessPacket)\r\n            // send on port\r\n            // big messy nasty no thank you\r\n            switch (indexMatch) {\r\n                case 0:\r\n                    mods.output(mod, 'packetOne', headlessPacket)\r\n                    break\r\n                case 1:\r\n                    mods.output(mod, 'packetTwo', headlessPacket)\r\n                    break\r\n                case 2:\r\n                    mods.output(mod, 'packetThree', headlessPacket)\r\n                    break\r\n                case 3:\r\n                    mods.output(mod, 'packetFour', headlessPacket)\r\n                    break\r\n                case 4:\r\n                    mods.output(mod, 'packetFive', headlessPacket)\r\n                    break\r\n            }\r\n        } else {\r\n            console.log('no match on returned packet')\r\n        }\r\n    }\r\n\r\n    function shiftPacketPointer(array) {\r\n        // find end of packet header\r\n        var end = 0\r\n        var i = 0\r\n        while (end == 0) {\r\n            if (array[i] === 255) {\r\n                end = i\r\n            } else if (i >= array.length) {\r\n                break\r\n            }\r\n            i++\r\n        }\r\n        // we'll assume we're the last drop, put the pointer at the head\r\n        array[1] = 254\r\n        // and then shift the address bytes forward\r\n        for (var j = 2; j < end - 1; j++) {\r\n            array[j] = array[j + 1]\r\n        }\r\n        array[end-1] = 0 // incoming port\r\n    }\r\n\r\n    var thisPacket = new Array() // we sometimes receive incomplete packets, have to track and parse\r\n    //\r\n    function socket_open() {\r\n        var url = \"ws://\" + mod.address.value + ':' + mod.port.value\r\n        mod.socket = new WebSocket(url)\r\n        mod.socket.onopen = function(event) {\r\n            mod.status.value = \"socket opened\"\r\n            serial_open()\r\n        }\r\n        mod.socket.onerror = function(event) {\r\n            mod.status.value = \"can not open\"\r\n            mod.socket = null\r\n        }\r\n        mod.socket.onmessage = function(event) {\r\n            var wsMessage = JSON.parse(event.data)\r\n            if (wsMessage.type === 'message') {\r\n                mod.status.value = wsMessage.message\r\n            } else if (wsMessage.type === 'array') {\r\n                // we are the 0th port, \r\n                thisPacket = thisPacket.concat(wsMessage.array)\r\n\r\n                if (thisPacket[0] <= 0) {\r\n                    thisPacket = []\r\n                    console.log('throwing packet with leading zero')\r\n                }\r\n\r\n                while (thisPacket.length >= thisPacket[0]) {\r\n                    if (thisPacket.length == thisPacket[0]) {\r\n                        //console.log('one packet', thisPacket)\r\n                        packetInput(JSON.parse(JSON.stringify(thisPacket)))\r\n                        thisPacket = []\r\n                    } else {\r\n                        var fullPacket = thisPacket.slice(0, thisPacket[0])\r\n                        packetInput(JSON.parse(JSON.stringify(fullPacket)))\r\n                        //console.log('second packet', fullPacket)\r\n                        thisPacket = thisPacket.slice(thisPacket[0])\r\n                    }\r\n                }\r\n\r\n            } else {\r\n                mod.status.value = 'message not recognized'\r\n            }\r\n        }\r\n    }\r\n\r\n    function socket_close() {\r\n        mod.socket.close()\r\n        mod.status.value = \"socket closed\"\r\n        mod.socket = null\r\n    }\r\n\r\n    function socket_send(msg) {\r\n        if (mod.socket != null) {\r\n            mod.status.value = \"send\"\r\n            mod.socket.send(msg)\r\n        } else {\r\n            mod.status.value = \"can't send, not open\"\r\n        }\r\n    }\r\n\r\n    function serial_open() {\r\n        if (mod.socket == null) {\r\n            mod.status.value = \"socket not open\"\r\n        } else {\r\n            var msg = {}\r\n            msg.type = 'open'\r\n            mod.socket.send(JSON.stringify(msg))\r\n        }\r\n    }\r\n\r\n    function serial_close() {\r\n        if (mod.socket == null) {\r\n            mod.status.value = \"socket not open\"\r\n        } else {\r\n            var msg = {}\r\n            msg.type = 'close'\r\n            msg.device = mod.device.value\r\n            mod.socket.send(JSON.stringify(msg))\r\n        }\r\n    }\r\n\r\n    function serial_send(wsMessage) {\r\n        if (mod.socket == null) {\r\n            mod.status.value = \"socket not open\"\r\n        } else {\r\n            mod.socket.send(JSON.stringify(wsMessage))\r\n            mod.status.value = 'transmit'\r\n        }\r\n    }\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"1237.8217036023414","left":"2236.2670037054045","inputs":{},"outputs":{}},"0.6070416201560498":{"definition":"//\r\n// converts toolpath objects into segments for accel planning\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n//\r\n// This work may be reproduced, modified, distributed, performed, and\r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is\r\n// provided as is; no warranty is provided, and users accept all\r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'stepper'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.stepper_axis_num_in.value = '0'\r\n        mod.axis_num = 0\r\n        mod.steps_per_mm_in.value = '80'\r\n        mod.convert = 80\r\n        mod.block = {\r\n            accel: 50,\r\n            cruise: 120,\r\n            entry: 0,\r\n            exit: 30,\r\n            p1: [0, 0, 0],\r\n            p2: [10, 10, 10]\r\n        }\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        block: {\r\n            type: 'object',\r\n            label: 'block',\r\n            event: function(evt) {\r\n                mod.block = JSON.parse(JSON.stringify(evt.detail)) // dereference pls\r\n                shipIt()\r\n            }\r\n        },\r\n        ack: {\r\n            type: 'packet',\r\n            label: 'headless packet in',\r\n            event: function(evt) {\r\n                onAcknowledgement(evt.detail)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        acknowledgement: {\r\n            type: 'object',\r\n            label: 'acknowledgement',\r\n            event: function(obj) {\r\n                mods.output(mod, 'acknowledgement', obj)\r\n            }\r\n        },\r\n        packet: {\r\n            type: 'packet',\r\n            label: 'headless packet out',\r\n            event: function() {\r\n                //mods.output(mod, 'segments', null)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        // settings\r\n        // the axis to pull out of the block - index of posistions on p1, p2\r\n        mod.stepper_axis_num_in = make_text_input(div, 'axis index', 12)\r\n        mod.stepper_axis_num_in.addEventListener('change', function() {\r\n            mod.axis_num = parseInt(mod.stepper_axis_num_in.value)\r\n        })\r\n        // steps per mm\r\n        mod.steps_per_mm_in = make_text_input(div, 'steps per mm', 12)\r\n        mod.steps_per_mm_in.addEventListener('change', function() {\r\n            mod.covert = parseFloat(mod.steps_per_mm_in.value)\r\n        })\r\n        // reverse?\r\n        mod.reverseCheck = make_checkbox_input(div, 'reversed')\r\n        //\r\n        // request to do the business\r\n        //\r\n        mod.send_button = make_button_input(div, 'send')\r\n        mod.send_button.addEventListener('click', function() {\r\n            shipIt()\r\n        })\r\n    }\r\n\r\n    function cartesianDistance(p1, p2) {\r\n        // takes p1, p2 to be arrays of same length\r\n        // computes cartesian distance\r\n        var sum = 0\r\n        for (var i = 0; i < p1.length; i++) {\r\n            sum += Math.pow((p1[i] - p2[i]), 2)\r\n        }\r\n        return Math.sqrt(sum)\r\n    }\r\n\r\n    function cartesianLength(v) {\r\n        // length of vector\r\n        var sum = 0\r\n        for (var i = 0; i < v.length; i++) {\r\n            sum += Math.pow(v[i], 2)\r\n        }\r\n        return Math.sqrt(sum)\r\n    }\r\n\r\n    function addMatrix(a, b, c) {\r\n        // c = a + b\r\n        a.forEach(function(item, index) {\r\n            c[index] = b[index] + a[index]\r\n        })\r\n    }\r\n\r\n    function subtractMatrix(a, b, c) {\r\n        // c = a - b\r\n        b.forEach(function(item, index) {\r\n            c[index] = a[index] - b[index]\r\n        })\r\n    }\r\n\r\n    function multiplyMatrix(a, scalar, b) {\r\n        // b = a * scalar\r\n        a.forEach(function(item, index) {\r\n            b[index] = a[index] * scalar\r\n        })\r\n    }\r\n\r\n    function multiply2dMatrix(a, scalar, b) {\r\n        // b = a * scalar\r\n        for (var i = 0; i < a.length; i++) {\r\n            for (var j = 0; j < a[i].length; j++) {\r\n                b[i][j] = a[i][j] * scalar;\r\n            }\r\n        }\r\n    }\r\n\r\n    function divideMatrix(a, scalar, b) {\r\n        // b = a / scalar\r\n        for (var i = 0; i < a.length; i++) {\r\n            b[i] = a[i] / scalar\r\n        }\r\n    }\r\n\r\n    function unitVector(p1, p2) {\r\n        // returns new array, is unit vector of p2-p1\r\n        var unit = new Array()\r\n        subtractMatrix(p2, p1, unit)\r\n        var length = cartesianLength(unit)\r\n        divideMatrix(unit, length, unit)\r\n\r\n        return unit\r\n    }\r\n\r\n    function dotProduct(a, b) {\r\n        // returns a dot b\r\n        var sum = 0;\r\n        for (var i = 0; i < a.length; i++) {\r\n            sum += a[i] * b[i]\r\n        }\r\n\r\n        return sum\r\n    }\r\n\r\n    function toFixedMatrix(a, digits) {\r\n        var rounded = new Array()\r\n        for (var i = 0; i < a.length; i++) {\r\n            rounded[i] = a[i].toFixed(digits)\r\n        }\r\n\r\n        return rounded\r\n    }\r\n\r\n    /*\r\n    now:\r\n\r\n    start from segment and find a corner\r\n    do planner\r\n\r\n    */\r\n\r\n    //\r\n    // local functions\r\n    //\r\n\r\n    function onAcknowledgement(packet){\r\n        if(packet[0] == 132){\r\n            // wait move\r\n            var ack = {}\r\n            ack.axis = mod.axis_num\r\n            ack.type = 'wait acknowledgement'\r\n            outputs.acknowledgement.event(ack)\r\n        } else if (packet[0] == 131){\r\n            var ack = {}\r\n            ack.axis = mod.axis_num \r\n            ack.type = 'move acknowledgement'\r\n            var steps = unpack32(packet, 1)\r\n            ack.increment = steps / mod.convert\r\n            outputs.acknowledgement.event(ack)\r\n        } else {\r\n            console.log('nonrecognized ack to stepper')\r\n        }\r\n        // check if was wait / was move, send response accordingly \r\n    }\r\n\r\n    function shipIt() {\r\n        // sends integer values, I think we maintain positioning because we round before subtracting\r\n\r\n        var trapezoid = calculateTrapezoid(mod.axis_num)\r\n        if (trapezoid.length == 0) {\r\n            var ok = 0\r\n            var i = 0\r\n            var waitTrap\r\n            while (!ok && i < mod.block.p1.length) {\r\n                waitTrap = calculateTrapezoid(i)\r\n                if (waitTrap.delta != 0) {\r\n                    ok = 1\r\n                } else {\r\n                    i++\r\n                }\r\n            }\r\n            if (ok) {\r\n                sendWait(waitTrap)\r\n            } else {\r\n                console.log('step zero packet, but no axis of nonzero length found', JSON.parse(JSON.stringify(mod.block)))\r\n            }\r\n        } else {\r\n            sendTrapezoid(trapezoid)\r\n        }\r\n    }\r\n\r\n    function calculateTrapezoid(axis) {\r\n        // packet (per stepper block)\r\n        // steps, entry, accel, accelLength, deccelLength\r\n        // first we fill this with all of the info we'll use to calculated\r\n        // the trapezoid in planner-space units, then we convert to steps last\r\n        var trap = {}\r\n\r\n        // lengths and positions for the move\r\n        trap.x1 = mod.block.p1[axis]\r\n        trap.x2 = mod.block.p2[axis]\r\n        trap.delta = trap.x2 - trap.x1\r\n        trap.length = Math.abs(trap.delta)\r\n\r\n        // rates for the move\r\n        var unit = unitVector(mod.block.p1, mod.block.p2)\r\n        var relativeRate = Math.abs(unit[axis])\r\n        trap.entry = mod.block.entry * relativeRate\r\n        trap.accel = mod.block.accel * relativeRate\r\n        trap.cruise = mod.block.cruise * relativeRate\r\n        trap.exit = mod.block.exit * relativeRate\r\n\r\n        // now accelLength and deccelLength\r\n        // using the maximum deltaV for the move,\r\n        // we'll figure out what type of move we have\r\n        var maxExit = Math.sqrt(trap.entry * trap.entry + 2 * trap.accel * trap.length)\r\n        var maxEntry = Math.sqrt(trap.exit * trap.entry + 2 * trap.accel * trap.length)\r\n\r\n        // there are 7 possible profiles\r\n        if (trap.length <= 0) {\r\n            // console.log('zero length trap')\r\n        } else if (maxExit <= trap.exit) {\r\n            // full ramp-up: have to push iiit to get there\r\n            //console.log('full rampup')\r\n            trap.ramptype = 'rampup'\r\n            trap.accelLength = trap.length\r\n            trap.deccelLength = trap.length + mod.convert // never decel\r\n            // for the wait function\r\n            trap.vAvg = (trap.entry + trap.exit) / 2\r\n        } else if (maxEntry <= trap.entry) {\r\n            // full ramp-down: have to deccel all the way with this rate\r\n            //console.log('full rampdown')\r\n            trap.ramptype = 'rampdown'\r\n            trap.deccelLength = 0 // start immmeeeeediately\r\n            trap.accelLength = 0 // never accel\r\n            // for the wait\r\n            trap.vAvg = (trap.entry + trap.exit) / 2\r\n        } else if (trap.cruise == trap.entry && trap.cruise == trap.exit) {\r\n            // str8 relaxin, no maxin\r\n            //console.log('full cruise')\r\n            trap.ramptype = 'cruise'\r\n            trap.accelLength = 0 // never accel\r\n            trap.deccelLength = trap.length + mod.convert // never decel\r\n            // wait\r\n            trap.vAvg = trap.cruise\r\n        } else if (trap.cruise == trap.entry) {\r\n            // cruise, then deccel\r\n            //console.log('cruise then deccel')\r\n            // for how long do we have to decel? we have to have deltaV for\r\n            trap.ramptype = 'cruiseDeccel'\r\n            var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel)\r\n            trap.deccelLength = trap.length - deccelDistance\r\n            trap.accelLength = 0; // never accel\r\n            // we really want speed by multiple times, and total distance we know, for vAvg\r\n            var tSum = (trap.cruise - trap.exit) / trap.accel + trap.deccelLength / trap.cruise\r\n            trap.vAvg = trap.length / tSum\r\n        } else if (trap.cruise == trap.exit) {\r\n            // accel, cruise? unless entry also cruise?\r\n            //console.log('accel then cruise')\r\n            trap.ramptype = 'cruiseAccel'\r\n            trap.accelLength = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel)\r\n            trap.deccelLength = trap.length + 1; // and never deccel\r\n            // wait \r\n            var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.delta - trap.accellength) / trap.cruise\r\n            trap.vAvg = trap.length / tSum\r\n        } else {\r\n            // it's either a full trap, or a triangle\r\n            var accelDistance = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel)\r\n            var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel)\r\n            if ((accelDistance + deccelDistance) < trap.length) {\r\n                //console.log('full trap')\r\n                trap.ramptype = 'fullTrap'\r\n                trap.accelLength = accelDistance\r\n                trap.deccelLength = trap.length - deccelDistance\r\n                // wait \r\n                var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.deccelLength - trap.accellength) / trap.cruise + (trap.cruise - trap.exit) / trap.accel\r\n                trap.vAvg = trap.length / tSum\r\n            } else {\r\n                //console.log('triangle')\r\n                trap.ramptype = 'triangle'\r\n                // find intersection point\r\n                var vPeak = Math.sqrt((2 * trap.accel * trap.length + Math.pow(trap.entry, 2) + Math.pow(trap.exit, 2)) / 2)\r\n                //console.log('entry, peak, exit', trap.entry, vPeak, trap.exit)\r\n                var midPoint = (vPeak * vPeak - trap.entry * trap.entry) / (2 * trap.accel)\r\n                trap.accelLength = midPoint\r\n                trap.deccelLength = midPoint\r\n                var tSum = (vPeak - trap.entry) / trap.accel + (vPeak - trap.exit) / trap.accel\r\n                trap.vAvg = trap.length / tSum\r\n            }\r\n        }\r\n\r\n        return trap\r\n    }\r\n\r\n    function sendTrapezoid(trap) {\r\n        //console.log('trapezoid', trapezoid)\r\n        var stepwiseTrap = trapezoidToStepwise(trap);\r\n\r\n        var packet = new Array();\r\n        // first, the packet header: the route, ptr and end_addr delimiter\r\n        // #define APA_END_ROUTE_DELIMITER 255\r\n        // #define APA_ROUTE_POINTER 254\r\n        // #define DELIM_KEY_TRAPEZOID 131 // is 32 bit int\r\n        // #define DELIM_KEY_WAIT 132\r\n        packet.push(131)\r\n        // now we pack these values into UART-readable bytes\r\n        // int32_t steps, uint32_t entryspeed, accel, accellength, decellength\r\n        var steps;\r\n        if(mod.reverseCheck.checked){\r\n            steps = -stepwiseTrap.steps\r\n        } else {\r\n            steps = stepwiseTrap.steps\r\n        }\r\n        packet = packet.concat(pack32(steps))\r\n        packet = packet.concat(pack32(stepwiseTrap.entry))\r\n        packet = packet.concat(pack32(stepwiseTrap.accel))\r\n        packet = packet.concat(pack32(stepwiseTrap.accelLength))\r\n        packet = packet.concat(pack32(stepwiseTrap.deccelLength))\r\n        // log this if you wish\r\n        //console.log('packet from stepper', packet)\r\n        // send it along!\r\n        mods.output(mod, 'packet', packet)\r\n    }\r\n\r\n    function sendWait(trap) {\r\n        var stepwiseTrap = trapezoidToStepwise(trap);\r\n        var packet = new Array();\r\n        // #define DELIM_KEY_WAIT 132\r\n        packet.push(132)\r\n        // now we pack these values into C-readable bytes\r\n        // int32_t steps, uint32_t entryspeed, accel, accellength, decellength\r\n        packet = packet.concat(pack32(stepwiseTrap.steps))\r\n        packet = packet.concat(pack32(stepwiseTrap.entry))\r\n        packet = packet.concat(pack32(stepwiseTrap.accel))\r\n        packet = packet.concat(pack32(stepwiseTrap.accelLength))\r\n        packet = packet.concat(pack32(stepwiseTrap.deccelLength))\r\n        // send it along!\r\n        //console.log('wait packet', packet)\r\n        mods.output(mod, 'packet', packet)\r\n    }\r\n\r\n    function trapezoidToStepwise(trap) {\r\n        var stepwise = {}\r\n        // planner units -> steps\r\n        stepwise.steps = Math.round(trap.delta * mod.convert)\r\n        // planner units -> steps/min (for less integer error)\r\n        stepwise.entry = Math.round(trap.entry * mod.convert)\r\n        // planner units -> steps/min/s (a messed up unit, I know)\r\n        stepwise.accel = Math.round(trap.accel * mod.convert)\r\n        // planner units -> steps\r\n        stepwise.accelLength = Math.round(trap.accelLength * mod.convert)\r\n        stepwise.deccelLength = Math.round(trap.deccelLength * mod.convert)\r\n\r\n        return stepwise\r\n    }\r\n\r\n    function trapezoidToStepWait(trap) {\r\n        var stepWait = {}\r\n        // planner units -> steps\r\n        stepWait.steps = Math.round(trap.length * mod.convert)\r\n        //\r\n        stepWait.vAvg = Math.round(trap.vAvg * mod.convert)\r\n        if(isNaN(stepWait.vAvg)){\r\n            console.log('err on vAvg maths in stepper')\r\n            stepWait.vAvg = 1000\r\n        }\r\n\r\n        return stepWait\r\n    }\r\n\r\n    function pack32(val) {\r\n        var pack = new Array();\r\n        pack[0] = (val >> 24) & 255;\r\n        pack[1] = (val >> 16) & 255;\r\n        pack[2] = (val >> 8) & 255;\r\n        pack[3] = val & 255;\r\n\r\n        return pack;\r\n    }\r\n\r\n    function unpack32(array, start){\r\n        var unpack = array[start] << 24 | array[start + 1] << 16 | array[start + 2] << 8 | array[start + 3]\r\n        return unpack\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"969.229246490451","left":"2271.901392094708","inputs":{},"outputs":{}},"0.46397689809504195":{"definition":"//\r\n// converts toolpath objects into segments for accel planning\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n//\r\n// This work may be reproduced, modified, distributed, performed, and\r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is\r\n// provided as is; no warranty is provided, and users accept all\r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'stepper'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.stepper_axis_num_in.value = '0'\r\n        mod.axis_num = 0\r\n        mod.steps_per_mm_in.value = '80'\r\n        mod.convert = 80\r\n        mod.block = {\r\n            accel: 50,\r\n            cruise: 120,\r\n            entry: 0,\r\n            exit: 30,\r\n            p1: [0, 0, 0],\r\n            p2: [10, 10, 10]\r\n        }\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        block: {\r\n            type: 'object',\r\n            label: 'block',\r\n            event: function(evt) {\r\n                mod.block = JSON.parse(JSON.stringify(evt.detail)) // dereference pls\r\n                shipIt()\r\n            }\r\n        },\r\n        ack: {\r\n            type: 'packet',\r\n            label: 'headless packet in',\r\n            event: function(evt) {\r\n                onAcknowledgement(evt.detail)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        acknowledgement: {\r\n            type: 'object',\r\n            label: 'acknowledgement',\r\n            event: function(obj) {\r\n                mods.output(mod, 'acknowledgement', obj)\r\n            }\r\n        },\r\n        packet: {\r\n            type: 'packet',\r\n            label: 'headless packet out',\r\n            event: function() {\r\n                //mods.output(mod, 'segments', null)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        // settings\r\n        // the axis to pull out of the block - index of posistions on p1, p2\r\n        mod.stepper_axis_num_in = make_text_input(div, 'axis index', 12)\r\n        mod.stepper_axis_num_in.addEventListener('change', function() {\r\n            mod.axis_num = parseInt(mod.stepper_axis_num_in.value)\r\n        })\r\n        // steps per mm\r\n        mod.steps_per_mm_in = make_text_input(div, 'steps per mm', 12)\r\n        mod.steps_per_mm_in.addEventListener('change', function() {\r\n            mod.covert = parseFloat(mod.steps_per_mm_in.value)\r\n        })\r\n        // reverse?\r\n        mod.reverseCheck = make_checkbox_input(div, 'reversed')\r\n        //\r\n        // request to do the business\r\n        //\r\n        mod.send_button = make_button_input(div, 'send')\r\n        mod.send_button.addEventListener('click', function() {\r\n            shipIt()\r\n        })\r\n    }\r\n\r\n    function cartesianDistance(p1, p2) {\r\n        // takes p1, p2 to be arrays of same length\r\n        // computes cartesian distance\r\n        var sum = 0\r\n        for (var i = 0; i < p1.length; i++) {\r\n            sum += Math.pow((p1[i] - p2[i]), 2)\r\n        }\r\n        return Math.sqrt(sum)\r\n    }\r\n\r\n    function cartesianLength(v) {\r\n        // length of vector\r\n        var sum = 0\r\n        for (var i = 0; i < v.length; i++) {\r\n            sum += Math.pow(v[i], 2)\r\n        }\r\n        return Math.sqrt(sum)\r\n    }\r\n\r\n    function addMatrix(a, b, c) {\r\n        // c = a + b\r\n        a.forEach(function(item, index) {\r\n            c[index] = b[index] + a[index]\r\n        })\r\n    }\r\n\r\n    function subtractMatrix(a, b, c) {\r\n        // c = a - b\r\n        b.forEach(function(item, index) {\r\n            c[index] = a[index] - b[index]\r\n        })\r\n    }\r\n\r\n    function multiplyMatrix(a, scalar, b) {\r\n        // b = a * scalar\r\n        a.forEach(function(item, index) {\r\n            b[index] = a[index] * scalar\r\n        })\r\n    }\r\n\r\n    function multiply2dMatrix(a, scalar, b) {\r\n        // b = a * scalar\r\n        for (var i = 0; i < a.length; i++) {\r\n            for (var j = 0; j < a[i].length; j++) {\r\n                b[i][j] = a[i][j] * scalar;\r\n            }\r\n        }\r\n    }\r\n\r\n    function divideMatrix(a, scalar, b) {\r\n        // b = a / scalar\r\n        for (var i = 0; i < a.length; i++) {\r\n            b[i] = a[i] / scalar\r\n        }\r\n    }\r\n\r\n    function unitVector(p1, p2) {\r\n        // returns new array, is unit vector of p2-p1\r\n        var unit = new Array()\r\n        subtractMatrix(p2, p1, unit)\r\n        var length = cartesianLength(unit)\r\n        divideMatrix(unit, length, unit)\r\n\r\n        return unit\r\n    }\r\n\r\n    function dotProduct(a, b) {\r\n        // returns a dot b\r\n        var sum = 0;\r\n        for (var i = 0; i < a.length; i++) {\r\n            sum += a[i] * b[i]\r\n        }\r\n\r\n        return sum\r\n    }\r\n\r\n    function toFixedMatrix(a, digits) {\r\n        var rounded = new Array()\r\n        for (var i = 0; i < a.length; i++) {\r\n            rounded[i] = a[i].toFixed(digits)\r\n        }\r\n\r\n        return rounded\r\n    }\r\n\r\n    /*\r\n    now:\r\n\r\n    start from segment and find a corner\r\n    do planner\r\n\r\n    */\r\n\r\n    //\r\n    // local functions\r\n    //\r\n\r\n    function onAcknowledgement(packet){\r\n        if(packet[0] == 132){\r\n            // wait move\r\n            var ack = {}\r\n            ack.axis = mod.axis_num\r\n            ack.type = 'wait acknowledgement'\r\n            outputs.acknowledgement.event(ack)\r\n        } else if (packet[0] == 131){\r\n            var ack = {}\r\n            ack.axis = mod.axis_num \r\n            ack.type = 'move acknowledgement'\r\n            var steps = unpack32(packet, 1)\r\n            ack.increment = steps / mod.convert\r\n            outputs.acknowledgement.event(ack)\r\n        } else {\r\n            console.log('nonrecognized ack to stepper')\r\n        }\r\n        // check if was wait / was move, send response accordingly \r\n    }\r\n\r\n    function shipIt() {\r\n        // sends integer values, I think we maintain positioning because we round before subtracting\r\n\r\n        var trapezoid = calculateTrapezoid(mod.axis_num)\r\n        if (trapezoid.length == 0) {\r\n            var ok = 0\r\n            var i = 0\r\n            var waitTrap\r\n            while (!ok && i < mod.block.p1.length) {\r\n                waitTrap = calculateTrapezoid(i)\r\n                if (waitTrap.delta != 0) {\r\n                    ok = 1\r\n                } else {\r\n                    i++\r\n                }\r\n            }\r\n            if (ok) {\r\n                sendWait(waitTrap)\r\n            } else {\r\n                console.log('step zero packet, but no axis of nonzero length found', JSON.parse(JSON.stringify(mod.block)))\r\n            }\r\n        } else {\r\n            sendTrapezoid(trapezoid)\r\n        }\r\n    }\r\n\r\n    function calculateTrapezoid(axis) {\r\n        // packet (per stepper block)\r\n        // steps, entry, accel, accelLength, deccelLength\r\n        // first we fill this with all of the info we'll use to calculated\r\n        // the trapezoid in planner-space units, then we convert to steps last\r\n        var trap = {}\r\n\r\n        // lengths and positions for the move\r\n        trap.x1 = mod.block.p1[axis]\r\n        trap.x2 = mod.block.p2[axis]\r\n        trap.delta = trap.x2 - trap.x1\r\n        trap.length = Math.abs(trap.delta)\r\n\r\n        // rates for the move\r\n        var unit = unitVector(mod.block.p1, mod.block.p2)\r\n        var relativeRate = Math.abs(unit[axis])\r\n        trap.entry = mod.block.entry * relativeRate\r\n        trap.accel = mod.block.accel * relativeRate\r\n        trap.cruise = mod.block.cruise * relativeRate\r\n        trap.exit = mod.block.exit * relativeRate\r\n\r\n        // now accelLength and deccelLength\r\n        // using the maximum deltaV for the move,\r\n        // we'll figure out what type of move we have\r\n        var maxExit = Math.sqrt(trap.entry * trap.entry + 2 * trap.accel * trap.length)\r\n        var maxEntry = Math.sqrt(trap.exit * trap.entry + 2 * trap.accel * trap.length)\r\n\r\n        // there are 7 possible profiles\r\n        if (trap.length <= 0) {\r\n            // console.log('zero length trap')\r\n        } else if (maxExit <= trap.exit) {\r\n            // full ramp-up: have to push iiit to get there\r\n            //console.log('full rampup')\r\n            trap.ramptype = 'rampup'\r\n            trap.accelLength = trap.length\r\n            trap.deccelLength = trap.length + mod.convert // never decel\r\n            // for the wait function\r\n            trap.vAvg = (trap.entry + trap.exit) / 2\r\n        } else if (maxEntry <= trap.entry) {\r\n            // full ramp-down: have to deccel all the way with this rate\r\n            //console.log('full rampdown')\r\n            trap.ramptype = 'rampdown'\r\n            trap.deccelLength = 0 // start immmeeeeediately\r\n            trap.accelLength = 0 // never accel\r\n            // for the wait\r\n            trap.vAvg = (trap.entry + trap.exit) / 2\r\n        } else if (trap.cruise == trap.entry && trap.cruise == trap.exit) {\r\n            // str8 relaxin, no maxin\r\n            //console.log('full cruise')\r\n            trap.ramptype = 'cruise'\r\n            trap.accelLength = 0 // never accel\r\n            trap.deccelLength = trap.length + mod.convert // never decel\r\n            // wait\r\n            trap.vAvg = trap.cruise\r\n        } else if (trap.cruise == trap.entry) {\r\n            // cruise, then deccel\r\n            //console.log('cruise then deccel')\r\n            // for how long do we have to decel? we have to have deltaV for\r\n            trap.ramptype = 'cruiseDeccel'\r\n            var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel)\r\n            trap.deccelLength = trap.length - deccelDistance\r\n            trap.accelLength = 0; // never accel\r\n            // we really want speed by multiple times, and total distance we know, for vAvg\r\n            var tSum = (trap.cruise - trap.exit) / trap.accel + trap.deccelLength / trap.cruise\r\n            trap.vAvg = trap.length / tSum\r\n        } else if (trap.cruise == trap.exit) {\r\n            // accel, cruise? unless entry also cruise?\r\n            //console.log('accel then cruise')\r\n            trap.ramptype = 'cruiseAccel'\r\n            trap.accelLength = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel)\r\n            trap.deccelLength = trap.length + 1; // and never deccel\r\n            // wait \r\n            var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.delta - trap.accellength) / trap.cruise\r\n            trap.vAvg = trap.length / tSum\r\n        } else {\r\n            // it's either a full trap, or a triangle\r\n            var accelDistance = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel)\r\n            var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel)\r\n            if ((accelDistance + deccelDistance) < trap.length) {\r\n                //console.log('full trap')\r\n                trap.ramptype = 'fullTrap'\r\n                trap.accelLength = accelDistance\r\n                trap.deccelLength = trap.length - deccelDistance\r\n                // wait \r\n                var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.deccelLength - trap.accellength) / trap.cruise + (trap.cruise - trap.exit) / trap.accel\r\n                trap.vAvg = trap.length / tSum\r\n            } else {\r\n                //console.log('triangle')\r\n                trap.ramptype = 'triangle'\r\n                // find intersection point\r\n                var vPeak = Math.sqrt((2 * trap.accel * trap.length + Math.pow(trap.entry, 2) + Math.pow(trap.exit, 2)) / 2)\r\n                //console.log('entry, peak, exit', trap.entry, vPeak, trap.exit)\r\n                var midPoint = (vPeak * vPeak - trap.entry * trap.entry) / (2 * trap.accel)\r\n                trap.accelLength = midPoint\r\n                trap.deccelLength = midPoint\r\n                var tSum = (vPeak - trap.entry) / trap.accel + (vPeak - trap.exit) / trap.accel\r\n                trap.vAvg = trap.length / tSum\r\n            }\r\n        }\r\n\r\n        return trap\r\n    }\r\n\r\n    function sendTrapezoid(trap) {\r\n        //console.log('trapezoid', trapezoid)\r\n        var stepwiseTrap = trapezoidToStepwise(trap);\r\n\r\n        var packet = new Array();\r\n        // first, the packet header: the route, ptr and end_addr delimiter\r\n        // #define APA_END_ROUTE_DELIMITER 255\r\n        // #define APA_ROUTE_POINTER 254\r\n        // #define DELIM_KEY_TRAPEZOID 131 // is 32 bit int\r\n        // #define DELIM_KEY_WAIT 132\r\n        packet.push(131)\r\n        // now we pack these values into UART-readable bytes\r\n        // int32_t steps, uint32_t entryspeed, accel, accellength, decellength\r\n        var steps;\r\n        if(mod.reverseCheck.checked){\r\n            steps = -stepwiseTrap.steps\r\n        } else {\r\n            steps = stepwiseTrap.steps\r\n        }\r\n        packet = packet.concat(pack32(steps))\r\n        packet = packet.concat(pack32(stepwiseTrap.entry))\r\n        packet = packet.concat(pack32(stepwiseTrap.accel))\r\n        packet = packet.concat(pack32(stepwiseTrap.accelLength))\r\n        packet = packet.concat(pack32(stepwiseTrap.deccelLength))\r\n        // log this if you wish\r\n        //console.log('packet from stepper', packet)\r\n        // send it along!\r\n        mods.output(mod, 'packet', packet)\r\n    }\r\n\r\n    function sendWait(trap) {\r\n        var stepwiseTrap = trapezoidToStepwise(trap);\r\n        var packet = new Array();\r\n        // #define DELIM_KEY_WAIT 132\r\n        packet.push(132)\r\n        // now we pack these values into C-readable bytes\r\n        // int32_t steps, uint32_t entryspeed, accel, accellength, decellength\r\n        packet = packet.concat(pack32(stepwiseTrap.steps))\r\n        packet = packet.concat(pack32(stepwiseTrap.entry))\r\n        packet = packet.concat(pack32(stepwiseTrap.accel))\r\n        packet = packet.concat(pack32(stepwiseTrap.accelLength))\r\n        packet = packet.concat(pack32(stepwiseTrap.deccelLength))\r\n        // send it along!\r\n        //console.log('wait packet', packet)\r\n        mods.output(mod, 'packet', packet)\r\n    }\r\n\r\n    function trapezoidToStepwise(trap) {\r\n        var stepwise = {}\r\n        // planner units -> steps\r\n        stepwise.steps = Math.round(trap.delta * mod.convert)\r\n        // planner units -> steps/min (for less integer error)\r\n        stepwise.entry = Math.round(trap.entry * mod.convert)\r\n        // planner units -> steps/min/s (a messed up unit, I know)\r\n        stepwise.accel = Math.round(trap.accel * mod.convert)\r\n        // planner units -> steps\r\n        stepwise.accelLength = Math.round(trap.accelLength * mod.convert)\r\n        stepwise.deccelLength = Math.round(trap.deccelLength * mod.convert)\r\n\r\n        return stepwise\r\n    }\r\n\r\n    function trapezoidToStepWait(trap) {\r\n        var stepWait = {}\r\n        // planner units -> steps\r\n        stepWait.steps = Math.round(trap.length * mod.convert)\r\n        //\r\n        stepWait.vAvg = Math.round(trap.vAvg * mod.convert)\r\n        if(isNaN(stepWait.vAvg)){\r\n            console.log('err on vAvg maths in stepper')\r\n            stepWait.vAvg = 1000\r\n        }\r\n\r\n        return stepWait\r\n    }\r\n\r\n    function pack32(val) {\r\n        var pack = new Array();\r\n        pack[0] = (val >> 24) & 255;\r\n        pack[1] = (val >> 16) & 255;\r\n        pack[2] = (val >> 8) & 255;\r\n        pack[3] = val & 255;\r\n\r\n        return pack;\r\n    }\r\n\r\n    function unpack32(array, start){\r\n        var unpack = array[start] << 24 | array[start + 1] << 16 | array[start + 2] << 8 | array[start + 3]\r\n        return unpack\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"685.457339396226","left":"2277.229269245127","inputs":{},"outputs":{}},"0.8759207754144251":{"definition":"//\r\n// gets lines of gcode, turns into instructions for mods-machines\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n\r\n/*\r\nturns lines of text into objects for machine controller \r\n*/\r\n\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'gcode parser'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.g0SpeedIn.value = '100'\r\n        mod.g1SpeedIn.value = '400'\r\n        mod.codeMode.value = 'G0'\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        gcode: {\r\n            type: 'string',\r\n            label: 'gcode',\r\n            event: function(evt) {\r\n                parseGCode(evt.detail)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        instruction: {\r\n            type: 'object',\r\n            label: 'instruction',\r\n            event: function(obj) {\r\n                mods.output(mod, 'instruction', obj)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        // we're going to convert all of these DPIs to MMs because we live in the real world now\r\n        mod.g0SpeedIn = make_text_input(div, 'G0 speed, gcode units', 12)\r\n        mod.g1SpeedIn = make_text_input(div, 'G1 speed, gcode units', 12)\r\n        mod.codeMode = make_text_input(div, 'Modality', 12)\r\n    }\r\n\r\n    function parseGCode(str) {\r\n        // get letter-value pairs\r\n        var keyvals = getKeyValues(str)\r\n        // do modality\r\n        // check this for no-g moves?\r\n        if (keyvals.G == 0 | keyvals.G == 1) {\r\n            mod.codeMode.value = 'G' + keyvals.G.toString()\r\n        } else if (keyvals.M != null) {\r\n            mod.codeMode.value = 'M' + keyvals.M.toString()\r\n        }\r\n        // do parse and object \r\n        if (mod.codeMode.value == 'G0' | mod.codeMode.value == 'G1') {\r\n\r\n            var output = {\r\n                type: 'move',\r\n                position: {},\r\n                speed: 0\r\n            }\r\n            // loop to find position vals, check for feed update\r\n            for (key in keyvals) {\r\n                if (key.match('[A-CX-Z]')) {\r\n                    output.position[key] = keyvals[key]\r\n                } else if (key.match('[F]')){\r\n                    if(mod.codeMode.value == 'G0'){\r\n                        // assert minimum speed \r\n                        mod.g0SpeedIn.value = Math.max(10, keyvals.F)\r\n                    } else {\r\n                        mod.g1SpeedIn.value = Math.max(10, keyvals.F)\r\n                    }\r\n                }\r\n            }\r\n\r\n            if(mod.codeMode.value == 'G0'){\r\n                output.speed = parseFloat(mod.g0SpeedIn.value)\r\n            } else {\r\n                output.speed = parseFloat(mod.g1SpeedIn.value)\r\n            }\r\n\r\n            outputs.instruction.event(output)\r\n        } else if (mod.codeMode.value == 'M3'){\r\n            var output = {\r\n                type: 'spindle',\r\n                speed: 0\r\n            }\r\n            if(keyvals.S != null){\r\n                output.speed = keyvals.S\r\n                outputs.instruction.event(output)\r\n            } else {\r\n                console.log('need S parameter on spindle instruction')\r\n            }\r\n        } else if (mod.codeMode.value == 'M5'){\r\n            var output = {\r\n                type: 'spindle',\r\n                speed: 0\r\n            }\r\n            output.instruction.event(output)\r\n        } else {\r\n            console.log('gcode instruction not recognized')\r\n        }\r\n    }\r\n\r\n    function getKeyValues(str) {\r\n        var kv = {}\r\n        for (var i = 0; i < str.length; i++) {\r\n            if (str[i].match('[A-Za-z]')) { // regex to match upper case letters\r\n                var lastIndex = str.indexOf(' ', i)\r\n                if (lastIndex < 0) {\r\n                    lastIndex = str.length\r\n                }\r\n                var key = str[i].toUpperCase()\r\n                kv[key] = parseFloat(str.slice(i + 1, lastIndex))\r\n            }\r\n        }\r\n        return kv\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"728.5668576736316","left":"1021.7953606756222","inputs":{},"outputs":{}},"0.8045719666145382":{"definition":"//\r\n// generic line input\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'text lines input'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.textAreaIn.value =\r\n        \" G1 X0 Y0 F1400\\n\\\r\nZ16\\n\\\r\nZ5.5\\n\\\r\nG1 Z0.5\\n\\\r\nX100\\n\\\r\nY100\\n\\\r\nX3.536\\n\\\r\nY30\\n\\\r\nX7.071 Y26.465\\n\\\r\nX0 Y19.393\\n\\\r\nX7.071 Y12.322\\n\\\r\nX0 Y5.251\\n\\\r\nX95\\n\\\r\nY95\\n\\\r\nX8.536\\n\\\r\nY90\\n\\\r\nX90\\n\\\r\nY10.251\\n\\\r\nX13.535\\n\\\r\nY50.251\\n\\\r\nX14.243 Y50.958\\n\\\r\nX12.828 Y52.373\\n\\\r\nX14.243 Y53.787\\n\\\r\nX12.828 Y55.201\\n\\\r\nX14.243 Y56.615\\n\\\r\nX12.828 Y58.029\\n\\\r\nX14.243 Y59.444\\n\\\r\nX12.828 Y60.858\\n\\\r\nX14.243 Y62.272\\n\\\r\nX12.828 Y63.686\\n\\\r\nX14.243 Y65.101\\n\\\r\nX12.828 Y66.515\\n\\\r\nX14.243 Y67.929\\n\\\r\nX12.828 Y69.343\\n\\\r\nX13.889 Y70.404\\n\\\r\nX13.182 Y71.111\\n\\\r\nX13.889 Y71.818\\n\\\r\nX13.182 Y72.525\\n\\\r\nX13.889 Y73.232\\n\\\r\nX13.182 Y73.939\\n\\\r\nX13.889 Y74.646\\n\\\r\nX13.182 Y75.354\\n\\\r\nX13.889 Y76.061\\n\\\r\nX13.182 Y76.768\\n\\\r\nX13.889 Y77.475\\n\\\r\nX13.182 Y78.182\\n\\\r\nX13.889 Y78.889\\n\\\r\nX14.243 Y50.958\\n\\\r\nX12.828 Y52.373\\n\\\r\nX14.243 Y53.787\\n\\\r\nX12.828 Y55.201\\n\\\r\nX14.243 Y56.615\\n\\\r\nX12.828 Y58.029\\n\\\r\nX14.243 Y59.444\\n\\\r\nX12.828 Y60.858\\n\\\r\nX14.243 Y62.272\\n\\\r\nX12.828 Y63.686\\n\\\r\nX14.243 Y65.101\\n\\\r\nX12.828 Y66.515\\n\\\r\nX14.243 Y67.929\\n\\\r\nX12.828 Y69.343\\n\\\r\nX13.889 Y70.404\\n\\\r\nX13.182 Y71.111\\n\\\r\nX13.889 Y71.818\\n\\\r\nX13.182 Y72.525\\n\\\r\nX13.889 Y73.232\\n\\\r\nX13.182 Y73.939\\n\\\r\nX13.889 Y74.646\\n\\\r\nX13.182 Y75.354\\n\\\r\nX13.889 Y76.061\\n\\\r\nX13.182 Y76.768\\n\\\r\nX13.889 Y77.475\\n\\\r\nX13.182 Y78.182\\n\\\r\nX13.889 Y78.889\\n\\\r\nY85\\n\\\r\nX80\\n\\\r\nY84.5\\n\\\r\nX23.889\\n\\\r\nY20.251\\n\\\r\nZ5.5\\n\\\r\nG1 Z16\\n\\\r\nX0 Y0\\n\\ \"\r\n\r\n        linesToArray()\r\n\r\n        mod.lineCountDisplay.innerHTML = '0'\r\n\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        lineRequest: {\r\n            type: 'number',\r\n            label: 'line request',\r\n            event: function(evt) {\r\n                sendLine(evt.detail)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        line: {\r\n            type: 'string',\r\n            label: 'line',\r\n            event: function(str) {\r\n                mods.output(mod, 'line', str)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        mod.lineCountDisplay = make_text_display(div, 'current line')\r\n        mod.resetCurrentLine = make_button_input(div, 'reset lines')\r\n        mod.resetCurrentLine.addEventListener('click', function(){\r\n            mod.lineCountDisplay.innerHTML = '0'\r\n            currentLine = 0\r\n        })\r\n        mod.textAreaIn = makeTextArea(div, 'lines', 24, 48)\r\n    }\r\n\r\n    var currentLine = 0\r\n    var linesArray = []\r\n\r\n    function linesToArray() {\r\n        linesArray = mod.textAreaIn.value.split('\\n')\r\n    }\r\n\r\n    function sendLine() {\r\n        var lineOut = linesArray[currentLine]\r\n        currentLine++\r\n        if (currentLine > linesArray.length) {\r\n            currentLine = linesArray.length\r\n        } else {\r\n            outputs.line.event(lineOut)\r\n        }\r\n\r\n        mod.lineCountDisplay.innerHTML = currentLine.toString()\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function makeTextArea(div, name, width, height) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        div.appendChild(document.createElement('br'))\r\n        var textArea = document.createElement('textarea')\r\n        textArea.setAttribute('cols', width)\r\n        textArea.setAttribute('rows', height)\r\n        textArea.type = 'textarea'\r\n        div.appendChild(textArea)\r\n\r\n        return textArea\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"593.4224085291635","left":"623.1192356994413","inputs":{},"outputs":{}},"0.5272929058286329":{"definition":"//\r\n// gets lines of gcode, turns into instructions for mods-machines\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n\r\n/*\r\nstart / stop machine on given path, \r\nmanually turn spindle on / off etc\r\ndishes gcodes -> planner, spindle codes -> spindle \r\n*/\r\n\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'machine controller'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.jogStepSizeIn.value = '10'\r\n        mod.jogSpeedIn.value = '100'\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        lineComplete: {\r\n            type: 'event',\r\n            label: 'line complete',\r\n            event: function(evt) {\r\n                onLineComplete()\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        singleInstruction: {\r\n            type: 'object',\r\n            label: 'instruction',\r\n            event: function(obj) {\r\n                mods.output(mod, 'singleInstruction', obj)\r\n            }\r\n        },\r\n        lineAdvance: {\r\n            type: 'event',\r\n            label: 'line advance',\r\n            event: function() {\r\n                mods.output(mod, 'lineAdvance', true)\r\n            }\r\n        },\r\n        sequenceControl: {\r\n            type: 'integer',\r\n            label: 'sequence control',\r\n            event: function(int){\r\n                mods.output(mod, 'sequenceControl', int)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n\r\n        // control buttons\r\n\r\n        mod.jogStepSizeIn = make_text_input(div, 'jog increment size', 24)\r\n        mod.jogSpeedIn = make_text_input(div, 'jog speed', 24)\r\n\r\n        mod.jogXPButton = make_button_input(div, 'x+')\r\n        mod.jogXPButton.addEventListener('click', function(evt) {\r\n            jog('X', parseFloat(mod.jogStepSizeIn.value))\r\n        })\r\n\r\n        mod.jogXMButton = make_button_input(div, 'x-')\r\n        mod.jogXMButton.addEventListener('click', function(evt) {\r\n            jog('X', -parseFloat(mod.jogStepSizeIn.value))\r\n        })\r\n\r\n        mod.jogYPButton = make_button_input(div, 'y+')\r\n        mod.jogYPButton.addEventListener('click', function(evt) {\r\n            jog('Y', parseFloat(mod.jogStepSizeIn.value))\r\n        })\r\n\r\n        mod.jogYMButton = make_button_input(div, 'y-')\r\n        mod.jogYMButton.addEventListener('click', function(evt) {\r\n            jog('Y', -parseFloat(mod.jogStepSizeIn.value))\r\n        })\r\n\r\n        // sequence begin, stop \r\n\r\n        mod.startSequenceButton = make_button_input(div, 'start sequence')\r\n        mod.startSequenceButton.addEventListener('click', function(evt) {\r\n            startSequence(32)\r\n        })\r\n\r\n        mod.pauseSequenceButton = make_button_input(div, 'pause sequence')\r\n        mod.pauseSequenceButton.addEventListener('click', function(evt){\r\n            pauseSequence()\r\n        })\r\n    }\r\n\r\n    mod.isPaused = true\r\n\r\n    function startSequence(windowsize) {\r\n        outputs.sequenceControl.event(0)\r\n        for(var i = 0; i < windowsize; i ++){\r\n            outputs.lineAdvance.event()\r\n        }\r\n        mod.isPaused = false\r\n        outputs.sequenceControl.event(1)\r\n    }\r\n\r\n    function pauseSequence(){\r\n        outputs.sequenceControl.event(0)\r\n        mod.isPaused = true\r\n    }\r\n\r\n    function onLineComplete() {\r\n        if(mod.isPaused){\r\n            //\r\n        } else {\r\n            outputs.lineAdvance.event()\r\n        }\r\n    }\r\n\r\n    function jog(key, val) {\r\n        var instruction = {}\r\n        instruction.position = {}\r\n        instruction.position[key] = val\r\n        instruction.speed = mod.jogSpeedIn.value\r\n        instruction.type = 'move'\r\n\r\n        outputs.singleInstruction.event(instruction)\r\n        outputs.sequenceControl.event(1)\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"90.92248708376349","left":"189.16454586981752","inputs":{},"outputs":{}},"0.703922408155101":{"definition":"//\r\n// hardware reset command\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    // globals\r\n    var mod = {}\r\n\r\n    // name\r\n    var name = 'reset'\r\n\r\n    var init = function() {\r\n        // \r\n    }\r\n\r\n    var inputs = {\r\n        //\r\n    }\r\n\r\n    var outputs = {\r\n        reset: {\r\n            type: 'packet',\r\n            label: 'headless packet out',\r\n            event: function() {\r\n                var reset = [128]\r\n                mods.output(mod, 'reset', reset)\r\n            }\r\n        }\r\n    }\r\n\r\n    var interface = function(div) {\r\n        mod.div = div\r\n\r\n        mod.resetButton = make_button_input(div, 'send')\r\n        mod.resetButton.addEventListener('click', function() {\r\n            outputs.reset.event()\r\n        })\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"1287.3513686208905","left":"1522.5146163285583","inputs":{},"outputs":{}},"0.026532783100594037":{"definition":"//\r\n// event sniffer\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    // globals\r\n    var mod = {}\r\n\r\n    // name\r\n    var name = 'event logger'\r\n\r\n    var init = function() {\r\n        mod.identifier.value = 'logger'\r\n    }\r\n\r\n    var inputs = {\r\n        event: {\r\n            type: 'any',\r\n            event: function(evt) {\r\n                console.log(mod.identifier.value, ': ', JSON.parse(JSON.stringify(evt.detail)))\r\n            }\r\n        }\r\n    }\r\n\r\n    var outputs = {}\r\n\r\n    var interface = function(div) {\r\n        mod.div = div\r\n\r\n        mod.identifier = make_text_input(div, 'identifier', 8)\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"403.34188935905445","left":"2297.9325702195742","inputs":{},"outputs":{}},"0.4995702688008472":{"definition":"//\n// converts toolpath objects into segments for accel planning\n//\n// Neil Gershenfeld and Jake Read\n// (c) Massachusetts Institute of Technology 2018\n//\n// This work may be reproduced, modified, distributed, performed, and\n// displayed for any purpose, but must acknowledge the mods\n// project. Copyright is retained and must be preserved. The work is\n// provided as is; no warranty is provided, and users accept all\n// liability.\n\n\n/*\neats objects like\nvar move = {\n  position: {\n    X: float\n    Y: float\n    Z: float\n    A: float\n  }\n  rate: float\n}\n\noutputs:\nmotors\n'planner block consumed' event\n\n\n*/\n\n//\n// closure\n//\n(function() {\n    //\n    // module globals\n    //\n    var mod = {}\n    //\n    // name\n    //\n    var name = 'motion planner'\n    //\n    // initialization\n    //\n    var init = function() {\n        mod.accelIn.value = '500'\n        mod.junctionDeviationIn.value = '1'\n        mod.minSpeedIn.value = '4'\n\n        mod.axisIdentifiers.value = 'X,Y'\n        resetNetwork()\n\n        mod.netWindowIn.value = '12'\n        packetWindowSize = parseInt(mod.netWindowIn.value)\n\n        mod.queueLengthDisplay.innerHTML = moveQue.length.toString()\n\n        mod.netQueueDisplay.innerHTML = axisNetCounters.toString()\n    }\n    //\n    // inputs\n    //\n    var inputs = {\n        newMove: {\n            type: 'object',\n            label: 'move instruction',\n            event: function(evt) {\n                addToQueue(JSON.parse(JSON.stringify(evt.detail)))\n            }\n        },\n        acknowledgement: {\n            type: 'event',\n            label: 'acknowledgement',\n            event: function(evt) {\n                onAcknowledgement(evt.detail)\n            }\n        },\n        sequenceControl: {\n            type: 'integer',\n            label: 'sequence control',\n            event: function(evt) {\n                if (evt.detail == 1) {\n                    checkNetwork()\n                }\n            }\n        }\n    }\n    //\n    // outputs\n    //\n    var outputs = {\n        plannedMove: {\n            type: 'object',\n            label: 'move instruction',\n            event: function(block) {\n                var deref = JSON.parse(JSON.stringify(block))\n                mods.output(mod, 'plannedMove', deref)\n            }\n        },\n        moveComplete: {\n            type: 'event',\n            label: 'move complete',\n            event: function(evt) {\n                mods.output(mod, 'moveComplete', 1)\n            }\n        }\n    }\n    //\n    // interface\n    //\n    var interface = function(div) {\n        mod.div = div\n        //\n        // inputs\n        //\n        // settings\n        make_text_display(div, 'machine config')\n        mod.axisIdentifiers = make_text_input(div, 'axis identifiers', 12)\n        mod.axisIdentifiers.addEventListener('change', function() {\n            resetNetwork()\n        })\n        div.appendChild(document.createElement('br'))\n\n        make_text_display(div, 'planner settings')\n        mod.accelIn = make_text_input(div, 'acceleration, units/s/s', 12)\n        mod.junctionDeviationIn = make_text_input(div, 'junction deviation, units', 12)\n        mod.minSpeedIn = make_text_input(div, 'minimum speed, units/s', 12)\n        div.appendChild(document.createElement('br'))\n\n        make_text_display(div, 'queuing settings')\n        mod.queueLengthDisplay = make_text_display(div, 'instructions in queue')\n        mod.resetQueueButton = make_button_input(div, 'reset queue')\n        mod.resetQueueButton.addEventListener('click', function() {\n            resetQueue()\n        })\n        div.appendChild(document.createElement('br'))\n\n        mod.netWindowIn = make_text_input(div, 'network window size', 12)\n        mod.netWindowIn.addEventListener('change', function() {\n            packetWindowSize = parseInt(mod.netWindowIn.value)\n        })\n        mod.netQueueDisplay = make_text_display(div, 'instructions on network')\n        mod.resetNetButton = make_button_input(div, 'reset network')\n        mod.resetNetButton.addEventListener('click', function() {\n            resetNetwork()\n        })\n\n        div.appendChild(document.createElement('br'))\n        mod.netPositionDisplay = make_text_display(div, 'last position sent to network')\n        mod.finalPositionDisplay = make_text_display(div, 'last position received on network')\n\n    }\n\n    // ---------------------------------------------------- THE BUSINESS\n\n    // network state\n    var packetWindowSize = 0\n    var axisNetCounters = new Array()\n    var lastPosToNet = new Array()\n    var lastPosFromNet = new Array()\n\n\n    function resetNetwork() {\n        axisIds = mod.axisIdentifiers.value.split(',')\n        for (var i = 0; i < axisIds.length; i++) {\n            currentPosition[i] = 0\n            axisNetCounters[i] = 0\n            lastPosToNet[i] = 0\n            lastPosFromNet[i] = 0\n        }\n        mod.netPositionDisplay.innerHTML = lastPosToNet.toString()\n        mod.netQueueDisplay.innerHTML = axisNetCounters.toString()\n        mod.finalPositionDisplay.innerHTML = lastPosFromNet.toString()\n    }\n\n    // IF entry / exit are null, do min speed \n\n    function onAcknowledgement(obj) {\n        axisNetCounters[obj.axis] --\n        mod.netQueueDisplay.innerHTML = axisNetCounters.toString()\n        if(obj.type == 'move acknowledgement'){\n            //console.log('received pos', obj.increment, obj.axis)\n            lastPosFromNet[obj.axis] += obj.increment\n            var netRounded = new Array()\n            for(var i = 0; i < lastPosFromNet.length; i ++){\n                netRounded[i] = Math.round(lastPosFromNet[i] * 100) / 100\n            }\n            mod.finalPositionDisplay.innerHTML = netRounded.toString()\n        }\n        checkNetwork()\n    }\n\n    function checkNetwork() {\n        // see windowed state and push more data out if need be\n        // TODO here\n        var ok = false\n        if(axisNetCounters[0] == axisNetCounters[1]){\n            ok = true\n        }\n        /*\n        for(var i = 0; i < axisNetCounters.length - 2; i ++){\n            if(axisNetCounters[i] == axisNetCounters[i + 1]){\n                ok = true\n            } else {\n                ok = false\n            }\n        }\n        */\n        if(ok){\n            var opening = packetWindowSize - axisNetCounters[0]\n            if(opening > moveQue.length){\n                opening = moveQue.length\n            }\n            for(var i = 0; i < opening; i++){\n                //console.log('sending', i)\n                sendMove()\n                outputs.moveComplete.event()\n            }\n        }\n    }\n\n    function sendMove() {\n        var lastPos = moveQue[0].p2\n        outputs.plannedMove.event(moveQue.shift())\n        mod.queueLengthDisplay.innerHTML = moveQue.length.toString()\n        mod.netPositionDisplay.innerHTML = lastPos.toString()\n        axisNetCounters.forEach(function(element, index){\n            axisNetCounters[index] ++\n        })\n        mod.netQueueDisplay.innerHTML = axisNetCounters.toString()\n    }\n\n\n    // planner state and moves\n    var axisIds = []\n    var moveQue = [] // array of moves \n    var currentPosition = []\n\n    /*\n            var segment = {\n            p1: p1,\n            p2: p2,\n            cruise: cruise,\n            entry: entry,\n            exit: exit,\n        }\n    */\n\n    function resetQueue() {\n        moveQue.length = 0 // apparently this works\n        mod.queueLengthDisplay.innerHTML = moveQue.length.toString()\n    }\n\n    function addToQueue(obj) {\n        // add to the move queue \n        var p1 = []\n        var p2 = []\n        if (moveQue.length == 0) {\n            p1 = currentPosition\n        } else {\n            p1 = moveQue[moveQue.length - 1].p2\n        }\n\n        // TODO: abstract axis? ids -> p1, p2\n        // find all letter-based and match to std array \n        var keyset = new Array(axisIds.length)\n        keyset.fill(0)\n\n        for (key in obj.position) {\n            for (axisId in axisIds) {\n                if (key == axisIds[axisId]) {\n                    p2[axisId] = obj.position[key]\n                    keyset[axisId] = 1\n                } else if (keyset[axisId] != 1) {\n                    p2[axisId] = p1[axisId]\n                } else {\n                    // nothing\n                }\n            }\n        }\n\n        if (cartesianDistance(p1, p2) == 0) {\n            // TODO: check for these when move is z- and have only xy actuators?\n            console.log('planner throwing zero length vector')\n        } else {\n            var cruise = obj.speed\n\n            var newMove = {\n                p1: p1,\n                p2: p2,\n                cruise: cruise,\n                entry: 0,\n                exit: 0\n            }\n\n            // append the move to the queue \n            moveQue.push(newMove)\n            mod.queueLengthDisplay.innerHTML = moveQue.length.toString()\n\n            // and then check to see if we are ready to pass anything to the motors\n            runQue()\n        }\n    }\n\n    //\n    // local functions\n    //\n    function runQue() {\n        // converting from mm/s or dpi (pixel units) to mm based units\n        // https://github.com/grbl/grbl/blob/master/grbl/planner.c\n        // https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/\n        /*\n        first we walk the queue:\n        going backwards, end at 0 speed exit\n        - find junction speed (junction deviation) between this and previous block\n        - this is entry speed, calculate trapezoid to exit speed\n        next block\n        - exit speed is recently calculated entry speed\n        - do junction deviation, this is entry speed\n        - calculate trapezoid\n        .. why is this simpler? find entry and exit speed of each block,\n         find accel limits per axis, do trapezoid with that accel\n        */\n\n        var jdsize = parseFloat(mod.junctionDeviationIn.value)\n        var accel = parseFloat(mod.accelIn.value)\n        // TODO: use these\n        var minmin = parseFloat(mod.minSpeedIn.value)\n\n        moveQue[moveQue.length - 1].exit = minmin // trailing edge always full stop\n\n        for (var i = moveQue.length - 1; i > 0; i--) {\n            // reverse pass\n            // find junction deviation\n            /*\n             - really, could only do this once per segment when a new one is added\n             - unitize entry and exit vectors\n             - find cos(theta) = Ventry dot Vexit / (|Ventry| * |Vexit|) -> this is (1*1 bc unit)\n             - find sin(theta/2) = sqrt((1-cos(theta))/2)\n             - find r = j(sin(theta/2)/(1-sin(theta/2)))\n             - find Fj = sqrt(Ac*r)\n             - junction speed is min(Fj, min(entry,exit))\n             */\n\n            var v_entry = unitVector(moveQue[i - 1].p1, moveQue[i - 1].p2)\n            var v_exit = unitVector(moveQue[i].p1, moveQue[i].p2)\n            //console.log('unit entry, unit exit', toFixedMatrix(v_entry, 3), toFixedMatrix(v_exit, 3))\n            // dot product / mag * mag where mags are 1 each bc unit\n            var cos_theta = dotProduct(v_entry, v_exit) \n            // catch corner cases (get it? - actually they are very straight cases, or very turnaround cases)\n            if (cos_theta < -0.9999999999999) {\n                cos_theta = -0.9999999999999\n            } else if (cos_theta > 0.9999999999999) {\n                cos_theta = 0.9999999999999\n            }\n            //console.log('cos_theta', cos_theta, Math.acos(cos_theta) * (180 / Math.PI))\n            // for calculating the radius, below\n            var sin_theta_overtwo = Math.sqrt((1 - cos_theta) / 2)\n            //console.log('sin_theta_overtwo', sin_theta_overtwo)\n            // size of the junction deviation curve\n            var radius = jdsize * ((1 - sin_theta_overtwo) / sin_theta_overtwo)\n            //console.log('radius', radius)\n            // feed at the junction, according to supposed acceleration through the junction radius\n            var fj = Math.sqrt(accel * radius)\n            //console.log('fj', fj)\n            // but don't go through the junction faster than we're cruising\n            var feed_junction = Math.min(fj, moveQue[i].cruise, moveQue[i - 1].cruise)\n            // and we never travel slower than the min speed \n            //feed_junction = Math.max(feed_junction, minmin)\n            //console.log('feed_junction', feed_junction)\n\n            // ok we have the maximum feed at the preceeding junction\n            // now: find the maximum entry speeds as if we spent the whole block decelerating\n\n            // size of segment\n            var distance = cartesianDistance(moveQue[i].p1, moveQue[i].p2)\n            //console.log('distance', distance)\n            var max_entry_speed = Math.sqrt(moveQue[i].exit * moveQue[i].exit + 2 * distance * accel)\n            //console.log('max_entry_speed', max_entry_speed)\n            var entry_speed = Math.min(max_entry_speed, feed_junction)\n            max_entry_speed = Math.max(max_entry_speed, minmin)\n            //console.log('entry_speed', entry_speed)\n            moveQue[i].entry = entry_speed\n            moveQue[i - 1].exit = entry_speed\n            //console.log('segment:', moveQue[i])\n            moveQue[i].accel = accel\n            moveQue[i].distance = distance\n        }\n\n        // bad bad not very good implementation to start:\n        //moveQue[0].entry = 0\n        moveQue[0].accel = accel\n        moveQue[0].distance = cartesianDistance(moveQue[0].p1, moveQue[0].p2)\n\n        // forward pass to make sure we can accelerate to set exit speed in length\n        for (var i = 0; i < moveQue.length - 1; i++) {\n            var distance = moveQue[i].distance\n            var max_exit_speed = Math.sqrt(moveQue[i].entry * moveQue[i].entry + 2 * distance * accel)\n            max_exit_speed = Math.max(max_exit_speed, minmin)\n            if (max_exit_speed < moveQue[i + 1].entry_speed) {\n                moveQue[i + 1].entry = max_exit_speed\n                moveQue[i].exit = max_exit_speed\n            }\n            if(moveQue[i].entry < minmin){\n                moveQue[i].entry = minmin\n            }\n            if(moveQue[i].exit < minmin){\n                moveQue[i].exit = minmin\n            }\n            if(moveQue[i].entry == null){\n                console.log('null entry', moveQue[i])\n                moveQue[i].entry = minmin\n            }\n            if(moveQue[i].exit == null){\n                console.log('null exit', moveQue[i])\n                moveQue[i].exit = minmin\n            }\n        }\n    }\n\n    // ---------------------------------------------------- UTILITIES\n\n    function cartesianDistance(p1, p2) {\n        // takes p1, p2 to be arrays of same length\n        // computes cartesian distance\n        var sum = 0\n        for (var i = 0; i < p1.length; i++) {\n            sum += Math.pow((p1[i] - p2[i]), 2)\n        }\n        return Math.sqrt(sum)\n    }\n\n    function cartesianLength(v) {\n        // length of vector\n        var sum = 0\n        for (var i = 0; i < v.length; i++) {\n            sum += Math.pow(v[i], 2)\n        }\n        return Math.sqrt(sum)\n    }\n\n    function addMatrix(a, b, c) {\n        // c = a + b\n        a.forEach(function(item, index) {\n            c[index] = b[index] + a[index]\n        })\n    }\n\n    function subtractMatrix(a, b, c) {\n        // c = a - b\n        b.forEach(function(item, index) {\n            c[index] = a[index] - b[index]\n        })\n    }\n\n    function multiplyMatrix(a, scalar, b) {\n        // b = a * scalar\n        a.forEach(function(item, index) {\n            b[index] = a[index] * scalar\n        })\n    }\n\n    function multiply2dMatrix(a, scalar, b) {\n        // b = a * scalar\n        for (var i = 0; i < a.length; i++) {\n            for (var j = 0; j < a[i].length; j++) {\n                b[i][j] = a[i][j] * scalar;\n            }\n        }\n    }\n\n    function divideMatrix(a, scalar, b) {\n        // b = a / scalar\n        for (var i = 0; i < a.length; i++) {\n            b[i] = a[i] / scalar\n        }\n    }\n\n    function unitVector(p1, p2) {\n        // returns new array, is unit vector of p2-p1\n        var unit = new Array()\n        subtractMatrix(p2, p1, unit)\n        var length = cartesianLength(unit)\n        divideMatrix(unit, length, unit)\n\n        return unit\n    }\n\n    function dotProduct(a, b) {\n        // returns a dot b\n        var sum = 0;\n        for (var i = 0; i < a.length; i++) {\n            sum += a[i] * b[i]\n        }\n\n        return sum\n    }\n\n    function toFixedMatrix(a, digits) {\n        var rounded = new Array()\n        for (var i = 0; i < a.length; i++) {\n            rounded[i] = a[i].toFixed(digits)\n        }\n\n        return rounded\n    }\n\n    // ---------------------------------------------------- UI HELP\n\n    function make_text_input(div, name, size) {\n        div.appendChild(document.createElement('br'))\n        div.appendChild(document.createTextNode(name + ': '))\n        var input = document.createElement('input')\n        input.type = 'text'\n        input.size = size\n        div.appendChild(input)\n\n        return input\n    }\n\n    function make_button_input(div, text) {\n        div.appendChild(document.createElement('br'))\n        var button = document.createElement('button')\n        button.style.padding = mods.ui.padding\n        button.style.margin = 1\n        button.appendChild(document.createTextNode(text))\n        div.appendChild(button)\n\n        return button\n    }\n\n    function make_checkbox_input(div, prefix) {\n        div.appendChild(document.createElement('br'))\n        div.appendChild(document.createTextNode(prefix + ': '))\n        var checkbox = document.createElement('input')\n        checkbox.type = 'checkbox'\n        div.appendChild(checkbox)\n\n        return checkbox\n    }\n\n    function make_text_display(div, prefix) {\n        div.appendChild(document.createElement('br'))\n        div.appendChild(document.createTextNode(prefix + ': '))\n        var span = document.createElement('span')\n        span.innerHTML = ''\n        div.appendChild(span)\n\n        return span\n    }\n\n    //\n    // return values\n    //\n    return ({\n        mod: mod,\n        name: name,\n        init: init,\n        inputs: inputs,\n        outputs: outputs,\n        interface: interface\n    })\n}())","top":"448.7851529938143","left":"1572.7986061844774","inputs":{},"outputs":{}}},"links":["{\"source\":\"{\\\"id\\\":\\\"0.46397689809504195\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"packet\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.6719905562745752\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"packetOne\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.6719905562745752\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"packetOne\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.46397689809504195\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"ack\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.8045719666145382\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"line\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.8759207754144251\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"gcode\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.5272929058286329\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"lineAdvance\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.8045719666145382\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"lineRequest\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.703922408155101\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"reset\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.6719905562745752\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"packetOne\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.8759207754144251\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"instruction\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4995702688008472\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"newMove\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.5272929058286329\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"singleInstruction\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4995702688008472\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"newMove\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.46397689809504195\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"acknowledgement\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4995702688008472\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"acknowledgement\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.6070416201560498\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"acknowledgement\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4995702688008472\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"acknowledgement\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.5272929058286329\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"sequenceControl\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4995702688008472\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"sequenceControl\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4995702688008472\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"plannedMove\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.46397689809504195\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"block\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4995702688008472\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"plannedMove\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.6070416201560498\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"block\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4995702688008472\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"moveComplete\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.5272929058286329\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"lineComplete\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.6070416201560498\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"packet\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.6719905562745752\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"packetTwo\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.6719905562745752\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"packetTwo\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.6070416201560498\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"ack\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.703922408155101\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"reset\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.6719905562745752\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"packetTwo\\\"}\"}"]}
\ No newline at end of file
diff --git a/tinymachine-planning b/tinymachine-planning
deleted file mode 100644
index a3e4299..0000000
--- a/tinymachine-planning
+++ /dev/null
@@ -1 +0,0 @@
-{"modules":{"0.8432772280795903":{"definition":"//\r\n// converts toolpath objects into segments for accel planning\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n//\r\n// This work may be reproduced, modified, distributed, performed, and\r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is\r\n// provided as is; no warranty is provided, and users accept all\r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'stepper'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.stepper_axis_num_in.value = '0'\r\n        mod.axis_num = 0\r\n        mod.steps_per_mm_in.value = '80'\r\n        mod.convert = 80\r\n        mod.block = {\r\n            accel: 50,\r\n            cruise: 120,\r\n            entry: 0,\r\n            exit: 30,\r\n            p1: [0, 0, 0],\r\n            p2: [10, 10, 10]\r\n        }\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        block: {\r\n            type: 'object',\r\n            label: 'block',\r\n            event: function(evt) {\r\n                mod.block = JSON.parse(JSON.stringify(evt.detail)) // dereference pls\r\n                shipIt()\r\n            }\r\n        },\r\n        ack: {\r\n            type: 'packet',\r\n            label: 'headless packet in',\r\n            event: function(evt) {\r\n                onAcknowledgement(evt.detail)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        acknowledgement: {\r\n            type: 'object',\r\n            label: 'acknowledgement',\r\n            event: function(obj) {\r\n                mods.output(mod, 'acknowledgement', obj)\r\n            }\r\n        },\r\n        packet: {\r\n            type: 'packet',\r\n            label: 'headless packet out',\r\n            event: function() {\r\n                //mods.output(mod, 'segments', null)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        // settings\r\n        // the axis to pull out of the block - index of posistions on p1, p2\r\n        mod.stepper_axis_num_in = make_text_input(div, 'axis index', 12)\r\n        mod.stepper_axis_num_in.addEventListener('change', function() {\r\n            mod.axis_num = parseInt(mod.stepper_axis_num_in.value)\r\n        })\r\n        // steps per mm\r\n        mod.steps_per_mm_in = make_text_input(div, 'steps per mm', 12)\r\n        mod.steps_per_mm_in.addEventListener('change', function() {\r\n            mod.covert = parseFloat(mod.steps_per_mm_in.value)\r\n        })\r\n        // reverse?\r\n        mod.reverseCheck = make_checkbox_input(div, 'reversed')\r\n        //\r\n        // request to do the business\r\n        //\r\n        mod.send_button = make_button_input(div, 'send')\r\n        mod.send_button.addEventListener('click', function() {\r\n            shipIt()\r\n        })\r\n    }\r\n\r\n    function cartesianDistance(p1, p2) {\r\n        // takes p1, p2 to be arrays of same length\r\n        // computes cartesian distance\r\n        var sum = 0\r\n        for (var i = 0; i < p1.length; i++) {\r\n            sum += Math.pow((p1[i] - p2[i]), 2)\r\n        }\r\n        return Math.sqrt(sum)\r\n    }\r\n\r\n    function cartesianLength(v) {\r\n        // length of vector\r\n        var sum = 0\r\n        for (var i = 0; i < v.length; i++) {\r\n            sum += Math.pow(v[i], 2)\r\n        }\r\n        return Math.sqrt(sum)\r\n    }\r\n\r\n    function addMatrix(a, b, c) {\r\n        // c = a + b\r\n        a.forEach(function(item, index) {\r\n            c[index] = b[index] + a[index]\r\n        })\r\n    }\r\n\r\n    function subtractMatrix(a, b, c) {\r\n        // c = a - b\r\n        b.forEach(function(item, index) {\r\n            c[index] = a[index] - b[index]\r\n        })\r\n    }\r\n\r\n    function multiplyMatrix(a, scalar, b) {\r\n        // b = a * scalar\r\n        a.forEach(function(item, index) {\r\n            b[index] = a[index] * scalar\r\n        })\r\n    }\r\n\r\n    function multiply2dMatrix(a, scalar, b) {\r\n        // b = a * scalar\r\n        for (var i = 0; i < a.length; i++) {\r\n            for (var j = 0; j < a[i].length; j++) {\r\n                b[i][j] = a[i][j] * scalar;\r\n            }\r\n        }\r\n    }\r\n\r\n    function divideMatrix(a, scalar, b) {\r\n        // b = a / scalar\r\n        for (var i = 0; i < a.length; i++) {\r\n            b[i] = a[i] / scalar\r\n        }\r\n    }\r\n\r\n    function unitVector(p1, p2) {\r\n        // returns new array, is unit vector of p2-p1\r\n        var unit = new Array()\r\n        subtractMatrix(p2, p1, unit)\r\n        var length = cartesianLength(unit)\r\n        divideMatrix(unit, length, unit)\r\n\r\n        return unit\r\n    }\r\n\r\n    function dotProduct(a, b) {\r\n        // returns a dot b\r\n        var sum = 0;\r\n        for (var i = 0; i < a.length; i++) {\r\n            sum += a[i] * b[i]\r\n        }\r\n\r\n        return sum\r\n    }\r\n\r\n    function toFixedMatrix(a, digits) {\r\n        var rounded = new Array()\r\n        for (var i = 0; i < a.length; i++) {\r\n            rounded[i] = a[i].toFixed(digits)\r\n        }\r\n\r\n        return rounded\r\n    }\r\n\r\n    /*\r\n    now:\r\n\r\n    start from segment and find a corner\r\n    do planner\r\n\r\n    */\r\n\r\n    //\r\n    // local functions\r\n    //\r\n\r\n    function onAcknowledgement(packet){\r\n        if(packet[0] == 132){\r\n            // wait move\r\n            var ack = {}\r\n            ack.axis = mod.axis_num\r\n            ack.type = 'wait acknowledgement'\r\n            outputs.acknowledgement.event(ack)\r\n        } else if (packet[0] == 131){\r\n            var ack = {}\r\n            ack.axis = mod.axis_num \r\n            ack.type = 'move acknowledgement'\r\n            var steps = unpack32(packet, 1)\r\n            ack.increment = steps / mod.convert\r\n            outputs.acknowledgement.event(ack)\r\n        } else {\r\n            console.log('nonrecognized ack to stepper')\r\n        }\r\n        // check if was wait / was move, send response accordingly \r\n    }\r\n\r\n    function shipIt() {\r\n        // sends integer values, I think we maintain positioning because we round before subtracting\r\n\r\n        var trapezoid = calculateTrapezoid(mod.axis_num)\r\n        if (trapezoid.length == 0) {\r\n            var ok = 0\r\n            var i = 0\r\n            var waitTrap\r\n            while (!ok && i < mod.block.p1.length) {\r\n                waitTrap = calculateTrapezoid(i)\r\n                if (waitTrap.delta != 0) {\r\n                    ok = 1\r\n                } else {\r\n                    i++\r\n                }\r\n            }\r\n            if (ok) {\r\n                sendWait(waitTrap)\r\n            } else {\r\n                console.log('step zero packet, but no axis of nonzero length found', JSON.parse(JSON.stringify(mod.block)))\r\n            }\r\n        } else {\r\n            sendTrapezoid(trapezoid)\r\n        }\r\n    }\r\n\r\n    function calculateTrapezoid(axis) {\r\n        // packet (per stepper block)\r\n        // steps, entry, accel, accelLength, deccelLength\r\n        // first we fill this with all of the info we'll use to calculated\r\n        // the trapezoid in planner-space units, then we convert to steps last\r\n        var trap = {}\r\n\r\n        // lengths and positions for the move\r\n        trap.x1 = mod.block.p1[axis]\r\n        trap.x2 = mod.block.p2[axis]\r\n        trap.delta = trap.x2 - trap.x1\r\n        trap.length = Math.abs(trap.delta)\r\n\r\n        // rates for the move\r\n        var unit = unitVector(mod.block.p1, mod.block.p2)\r\n        var relativeRate = Math.abs(unit[axis])\r\n        trap.entry = mod.block.entry * relativeRate\r\n        trap.accel = mod.block.accel * relativeRate\r\n        trap.cruise = mod.block.cruise * relativeRate\r\n        trap.exit = mod.block.exit * relativeRate\r\n\r\n        // now accelLength and deccelLength\r\n        // using the maximum deltaV for the move,\r\n        // we'll figure out what type of move we have\r\n        var maxExit = Math.sqrt(trap.entry * trap.entry + 2 * trap.accel * trap.length)\r\n        var maxEntry = Math.sqrt(trap.exit * trap.entry + 2 * trap.accel * trap.length)\r\n\r\n        // there are 7 possible profiles\r\n        if (trap.length <= 0) {\r\n            // console.log('zero length trap')\r\n        } else if (maxExit <= trap.exit) {\r\n            // full ramp-up: have to push iiit to get there\r\n            //console.log('full rampup')\r\n            trap.ramptype = 'rampup'\r\n            trap.accelLength = trap.length\r\n            trap.deccelLength = trap.length + mod.convert // never decel\r\n            // for the wait function\r\n            trap.vAvg = (trap.entry + trap.exit) / 2\r\n        } else if (maxEntry <= trap.entry) {\r\n            // full ramp-down: have to deccel all the way with this rate\r\n            //console.log('full rampdown')\r\n            trap.ramptype = 'rampdown'\r\n            trap.deccelLength = 0 // start immmeeeeediately\r\n            trap.accelLength = 0 // never accel\r\n            // for the wait\r\n            trap.vAvg = (trap.entry + trap.exit) / 2\r\n        } else if (trap.cruise == trap.entry && trap.cruise == trap.exit) {\r\n            // str8 relaxin, no maxin\r\n            //console.log('full cruise')\r\n            trap.ramptype = 'cruise'\r\n            trap.accelLength = 0 // never accel\r\n            trap.deccelLength = trap.length + mod.convert // never decel\r\n            // wait\r\n            trap.vAvg = trap.cruise\r\n        } else if (trap.cruise == trap.entry) {\r\n            // cruise, then deccel\r\n            //console.log('cruise then deccel')\r\n            // for how long do we have to decel? we have to have deltaV for\r\n            trap.ramptype = 'cruiseDeccel'\r\n            var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel)\r\n            trap.deccelLength = trap.length - deccelDistance\r\n            trap.accelLength = 0; // never accel\r\n            // we really want speed by multiple times, and total distance we know, for vAvg\r\n            var tSum = (trap.cruise - trap.exit) / trap.accel + trap.deccelLength / trap.cruise\r\n            trap.vAvg = trap.length / tSum\r\n        } else if (trap.cruise == trap.exit) {\r\n            // accel, cruise? unless entry also cruise?\r\n            //console.log('accel then cruise')\r\n            trap.ramptype = 'cruiseAccel'\r\n            trap.accelLength = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel)\r\n            trap.deccelLength = trap.length + 1; // and never deccel\r\n            // wait \r\n            var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.delta - trap.accellength) / trap.cruise\r\n            trap.vAvg = trap.length / tSum\r\n        } else {\r\n            // it's either a full trap, or a triangle\r\n            var accelDistance = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel)\r\n            var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel)\r\n            if ((accelDistance + deccelDistance) < trap.length) {\r\n                //console.log('full trap')\r\n                trap.ramptype = 'fullTrap'\r\n                trap.accelLength = accelDistance\r\n                trap.deccelLength = trap.length - deccelDistance\r\n                // wait \r\n                var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.deccelLength - trap.accellength) / trap.cruise + (trap.cruise - trap.exit) / trap.accel\r\n                trap.vAvg = trap.length / tSum\r\n            } else {\r\n                //console.log('triangle')\r\n                trap.ramptype = 'triangle'\r\n                // find intersection point\r\n                var vPeak = Math.sqrt((2 * trap.accel * trap.length + Math.pow(trap.entry, 2) + Math.pow(trap.exit, 2)) / 2)\r\n                //console.log('entry, peak, exit', trap.entry, vPeak, trap.exit)\r\n                var midPoint = (vPeak * vPeak - trap.entry * trap.entry) / (2 * trap.accel)\r\n                trap.accelLength = midPoint\r\n                trap.deccelLength = midPoint\r\n                var tSum = (vPeak - trap.entry) / trap.accel + (vPeak - trap.exit) / trap.accel\r\n                trap.vAvg = trap.length / tSum\r\n            }\r\n        }\r\n\r\n        return trap\r\n    }\r\n\r\n    function sendTrapezoid(trap) {\r\n        //console.log('trapezoid', trapezoid)\r\n        var stepwiseTrap = trapezoidToStepwise(trap);\r\n\r\n        var packet = new Array();\r\n        // first, the packet header: the route, ptr and end_addr delimiter\r\n        // #define APA_END_ROUTE_DELIMITER 255\r\n        // #define APA_ROUTE_POINTER 254\r\n        // #define DELIM_KEY_TRAPEZOID 131 // is 32 bit int\r\n        // #define DELIM_KEY_WAIT 132\r\n        packet.push(131)\r\n        // now we pack these values into UART-readable bytes\r\n        // int32_t steps, uint32_t entryspeed, accel, accellength, decellength\r\n        var steps;\r\n        if(mod.reverseCheck.checked){\r\n            steps = -stepwiseTrap.steps\r\n        } else {\r\n            steps = stepwiseTrap.steps\r\n        }\r\n        packet = packet.concat(pack32(steps))\r\n        packet = packet.concat(pack32(stepwiseTrap.entry))\r\n        packet = packet.concat(pack32(stepwiseTrap.accel))\r\n        packet = packet.concat(pack32(stepwiseTrap.accelLength))\r\n        packet = packet.concat(pack32(stepwiseTrap.deccelLength))\r\n        // log this if you wish\r\n        //console.log('packet from stepper', packet)\r\n        // send it along!\r\n        mods.output(mod, 'packet', packet)\r\n    }\r\n\r\n    function sendWait(trap) {\r\n        var stepwiseTrap = trapezoidToStepwise(trap);\r\n        var packet = new Array();\r\n        // #define DELIM_KEY_WAIT 132\r\n        packet.push(132)\r\n        // now we pack these values into C-readable bytes\r\n        // int32_t steps, uint32_t entryspeed, accel, accellength, decellength\r\n        packet = packet.concat(pack32(stepwiseTrap.steps))\r\n        packet = packet.concat(pack32(stepwiseTrap.entry))\r\n        packet = packet.concat(pack32(stepwiseTrap.accel))\r\n        packet = packet.concat(pack32(stepwiseTrap.accelLength))\r\n        packet = packet.concat(pack32(stepwiseTrap.deccelLength))\r\n        // send it along!\r\n        //console.log('wait packet', packet)\r\n        mods.output(mod, 'packet', packet)\r\n    }\r\n\r\n    function trapezoidToStepwise(trap) {\r\n        var stepwise = {}\r\n        // planner units -> steps\r\n        stepwise.steps = Math.round(trap.delta * mod.convert)\r\n        // planner units -> steps/min (for less integer error)\r\n        stepwise.entry = Math.round(trap.entry * mod.convert)\r\n        // planner units -> steps/min/s (a messed up unit, I know)\r\n        stepwise.accel = Math.round(trap.accel * mod.convert)\r\n        // planner units -> steps\r\n        stepwise.accelLength = Math.round(trap.accelLength * mod.convert)\r\n        stepwise.deccelLength = Math.round(trap.deccelLength * mod.convert)\r\n\r\n        return stepwise\r\n    }\r\n\r\n    function trapezoidToStepWait(trap) {\r\n        var stepWait = {}\r\n        // planner units -> steps\r\n        stepWait.steps = Math.round(trap.length * mod.convert)\r\n        //\r\n        stepWait.vAvg = Math.round(trap.vAvg * mod.convert)\r\n        if(isNaN(stepWait.vAvg)){\r\n            console.log('err on vAvg maths in stepper')\r\n            stepWait.vAvg = 1000\r\n        }\r\n\r\n        return stepWait\r\n    }\r\n\r\n    function pack32(val) {\r\n        var pack = new Array();\r\n        pack[0] = (val >> 24) & 255;\r\n        pack[1] = (val >> 16) & 255;\r\n        pack[2] = (val >> 8) & 255;\r\n        pack[3] = val & 255;\r\n\r\n        return pack;\r\n    }\r\n\r\n    function unpack32(array, start){\r\n        var unpack = array[start] << 24 | array[start + 1] << 16 | array[start + 2] << 8 | array[start + 3]\r\n        return unpack\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"849.9366130389072","left":"1591.0182750754745","inputs":{},"outputs":{}},"0.550468040422489":{"definition":"//\r\n// converts toolpath objects into segments for accel planning\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n//\r\n// This work may be reproduced, modified, distributed, performed, and\r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is\r\n// provided as is; no warranty is provided, and users accept all\r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'atk network bridge'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.address.value = '127.0.0.1'\r\n        mod.port.value = 6789\r\n        mod.socket = null\r\n        socket_open()\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        packetOne: {\r\n            type: 'packet',\r\n            label: '1 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(0, headlessPacket)\r\n            }\r\n        },\r\n        packetTwo: {\r\n            type: 'packet',\r\n            label: '2 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(1, headlessPacket)\r\n            }\r\n        },\r\n        packetThree: {\r\n            type: 'packet',\r\n            label: '3 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(2, headlessPacket)\r\n            }\r\n        },\r\n        packetFour: {\r\n            type: 'packet',\r\n            label: '4 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(3, headlessPacket)\r\n            }\r\n        },\r\n        packetFive: {\r\n            type: 'packet',\r\n            label: '5 packet payload',\r\n            event: function(evt) {\r\n                var headlessPacket = JSON.parse(JSON.stringify(evt.detail))\r\n                packetOutput(4, headlessPacket)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        packetOne: {\r\n            type: 'packet',\r\n            label: '1 packet payload',\r\n            event: function(evt) {\r\n                // fires elswhere with mods.output(mod, 'packetOne', data)\r\n            }\r\n        },\r\n        packetTwo: {\r\n            type: 'packet',\r\n            label: '2 packet payload'\r\n        },\r\n        packetThree: {\r\n            type: 'packet',\r\n            label: '3 packet payload'\r\n        },\r\n        packetFour: {\r\n            type: 'packet',\r\n            label: '4 packet payload'\r\n        },\r\n        packetFive: {\r\n            type: 'packet',\r\n            label: '5 packet payload'\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        mod.netpath_in = new Array() // of UI\r\n        mod.netpath = new Array() // of paths\r\n        // settings\r\n        // the network paths to the thing\r\n        for (var i = 0; i < 5; i++) {\r\n            add_netpath(div)\r\n        }\r\n\r\n        div.appendChild(document.createElement('br'))\r\n\r\n        var a = document.createElement('a')\r\n        a.href = './js/serialserver.js'\r\n        a.innerHTML = 'serialserver:'\r\n        a.target = '_blank'\r\n        div.appendChild(a)\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // open/close\r\n        //\r\n        var btn = document.createElement('button')\r\n        btn.style.margin = 1\r\n        btn.appendChild(document.createTextNode('open'))\r\n        btn.addEventListener('click', function() {\r\n            socket_open()\r\n        })\r\n        div.appendChild(btn)\r\n        var btn = document.createElement('button')\r\n        btn.style.margin = 1\r\n        btn.appendChild(document.createTextNode('close'))\r\n        btn.addEventListener('click', function() {\r\n            socket_close()\r\n        })\r\n        div.appendChild(btn)\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // address\r\n        //\r\n        div.appendChild(document.createTextNode('address: '))\r\n        input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = 10\r\n        div.appendChild(input)\r\n        mod.address = input\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // port\r\n        //\r\n        div.appendChild(document.createTextNode('\\u00a0\\u00a0\\u00a0\\u00a0\\u00a0port: '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = 10\r\n        div.appendChild(input)\r\n        mod.port = input\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // status\r\n        //\r\n        div.appendChild(document.createTextNode('\\u00a0\\u00a0status: '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = 10\r\n        div.appendChild(input)\r\n        mod.status = input\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // serial\r\n        //\r\n        div.appendChild(document.createTextNode('serial device:'))\r\n        div.appendChild(document.createElement('br'))\r\n        //\r\n        // open/close\r\n        //\r\n        var btn = document.createElement('button')\r\n        btn.style.margin = 1\r\n        btn.appendChild(document.createTextNode('open'))\r\n        btn.addEventListener('click', function() {\r\n            serial_open()\r\n        })\r\n        div.appendChild(btn)\r\n        var btn = document.createElement('button')\r\n        btn.style.margin = 1\r\n        btn.appendChild(document.createTextNode('close'))\r\n        btn.addEventListener('click', function() {\r\n            serial_close()\r\n        })\r\n        div.appendChild(btn)\r\n        div.appendChild(document.createElement('br'))\r\n    }\r\n\r\n    function add_netpath(div) {\r\n        var numCurrentPaths = mod.netpath.length;\r\n        mod.netpath_in[numCurrentPaths] = make_text_input(div, (numCurrentPaths + 1).toString() + ' network path', 12)\r\n        mod.netpath_in[numCurrentPaths].addEventListener('change', function() {\r\n            mod.netpath[numCurrentPaths] = mod.netpath_in[numCurrentPaths].value.split(',')\r\n            if (mod.netpath[numCurrentPaths] == '') {\r\n                mod.netpath[0] = []\r\n                console.log('zero length address')\r\n            } else {\r\n                for (var i = 0; i < mod.netpath[numCurrentPaths].length; i++) {\r\n                    mod.netpath[numCurrentPaths][i] = parseInt(mod.netpath[numCurrentPaths][i])\r\n                }\r\n                console.log('new address', mod.netpath)\r\n            }\r\n        })\r\n        mod.netpath_in[numCurrentPaths].value = '0,' + numCurrentPaths.toString()\r\n        mod.netpath[numCurrentPaths] = [0, numCurrentPaths]\r\n    }\r\n\r\n    function packetOutput(index, headlessPacket) {\r\n        // add ptr and delimiter (unshifting, so reverse order)\r\n        headlessPacket.unshift(255) //end addr delimiter\r\n        headlessPacket.unshift(254) //ptr\r\n        // add path descending thru\r\n        for (var i = mod.netpath[index].length - 1; i >= 0; i--) {\r\n            headlessPacket.unshift(mod.netpath[index][i])\r\n        }\r\n        // add length\r\n        headlessPacket.unshift(headlessPacket.length + 1)\r\n        // log it\r\n        // console.log('packet from demux', headlessPacket)\r\n        // put it on the serial\r\n        var wsMessage = {\r\n                        type: 'packet',\r\n                        packet: JSON.parse(JSON.stringify(headlessPacket))\r\n                    }\r\n        socket_send(JSON.stringify(wsMessage))\r\n    }\r\n\r\n    function packetInput(packet) {\r\n        // shift pointer\r\n        shiftPacketPointer(packet)\r\n        // find address in packet, address has been flipped\r\n        // assuming this is a terminal packet, i.e. we are the recipient,\r\n        // cut \r\n        var returnPacketHeader = packet.slice(2, packet.indexOf(255))\r\n        // and then flip the header\r\n        var packetHeader = new Array()\r\n        for (var i = 0; i < returnPacketHeader.length; i++) {\r\n            packetHeader[i] = returnPacketHeader[returnPacketHeader.length - i - 1]\r\n        }\r\n        var indexMatch = null\r\n        // match to addresses mod.netpath[i]\r\n        for (var i = 0; i < mod.netpath.length; i++) {\r\n            if (packetHeader.length === mod.netpath[i].length) {\r\n                if (packetHeader.toString() === mod.netpath[i].toString()) {\r\n                    // just takes 1st match\r\n                    // actually, we are receiving ack'd packets, w/ reversed headers\r\n\r\n                    indexMatch = i\r\n                }\r\n            }\r\n        }\r\n        // is match?\r\n        if (indexMatch != null) {\r\n            // console.log('match on ', indexMatch)\r\n            // dereference header\r\n            var headlessPacket = packet.slice(packetHeader.length + 3, packet.length)\r\n            // console.log('headless',  headlessPacket)\r\n            // send on port\r\n            // big messy nasty no thank you\r\n            switch (indexMatch) {\r\n                case 0:\r\n                    mods.output(mod, 'packetOne', headlessPacket)\r\n                    break\r\n                case 1:\r\n                    mods.output(mod, 'packetTwo', headlessPacket)\r\n                    break\r\n                case 2:\r\n                    mods.output(mod, 'packetThree', headlessPacket)\r\n                    break\r\n                case 3:\r\n                    mods.output(mod, 'packetFour', headlessPacket)\r\n                    break\r\n                case 4:\r\n                    mods.output(mod, 'packetFive', headlessPacket)\r\n                    break\r\n            }\r\n        } else {\r\n            console.log('no match on returned packet')\r\n        }\r\n    }\r\n\r\n    function shiftPacketPointer(array) {\r\n        // find end of packet header\r\n        var end = 0\r\n        var i = 0\r\n        while (end == 0) {\r\n            if (array[i] === 255) {\r\n                end = i\r\n            } else if (i >= array.length) {\r\n                break\r\n            }\r\n            i++\r\n        }\r\n        // we'll assume we're the last drop, put the pointer at the head\r\n        array[1] = 254\r\n        // and then shift the address bytes forward\r\n        for (var j = 2; j < end - 1; j++) {\r\n            array[j] = array[j + 1]\r\n        }\r\n        array[end-1] = 0 // incoming port\r\n    }\r\n\r\n    var thisPacket = new Array() // we sometimes receive incomplete packets, have to track and parse\r\n    //\r\n    function socket_open() {\r\n        var url = \"ws://\" + mod.address.value + ':' + mod.port.value\r\n        mod.socket = new WebSocket(url)\r\n        mod.socket.onopen = function(event) {\r\n            mod.status.value = \"socket opened\"\r\n            serial_open()\r\n        }\r\n        mod.socket.onerror = function(event) {\r\n            mod.status.value = \"can not open\"\r\n            mod.socket = null\r\n        }\r\n        mod.socket.onmessage = function(event) {\r\n            var wsMessage = JSON.parse(event.data)\r\n            if (wsMessage.type === 'message') {\r\n                mod.status.value = wsMessage.message\r\n            } else if (wsMessage.type === 'array') {\r\n                // we are the 0th port, \r\n                thisPacket = thisPacket.concat(wsMessage.array)\r\n\r\n                if (thisPacket[0] <= 0) {\r\n                    thisPacket = []\r\n                    console.log('throwing packet with leading zero')\r\n                }\r\n\r\n                while (thisPacket.length >= thisPacket[0]) {\r\n                    if (thisPacket.length == thisPacket[0]) {\r\n                        //console.log('one packet', thisPacket)\r\n                        packetInput(JSON.parse(JSON.stringify(thisPacket)))\r\n                        thisPacket = []\r\n                    } else {\r\n                        var fullPacket = thisPacket.slice(0, thisPacket[0])\r\n                        packetInput(JSON.parse(JSON.stringify(fullPacket)))\r\n                        //console.log('second packet', fullPacket)\r\n                        thisPacket = thisPacket.slice(thisPacket[0])\r\n                    }\r\n                }\r\n\r\n            } else {\r\n                mod.status.value = 'message not recognized'\r\n            }\r\n        }\r\n    }\r\n\r\n    function socket_close() {\r\n        mod.socket.close()\r\n        mod.status.value = \"socket closed\"\r\n        mod.socket = null\r\n    }\r\n\r\n    function socket_send(msg) {\r\n        if (mod.socket != null) {\r\n            mod.status.value = \"send\"\r\n            mod.socket.send(msg)\r\n        } else {\r\n            mod.status.value = \"can't send, not open\"\r\n        }\r\n    }\r\n\r\n    function serial_open() {\r\n        if (mod.socket == null) {\r\n            mod.status.value = \"socket not open\"\r\n        } else {\r\n            var msg = {}\r\n            msg.type = 'open'\r\n            mod.socket.send(JSON.stringify(msg))\r\n        }\r\n    }\r\n\r\n    function serial_close() {\r\n        if (mod.socket == null) {\r\n            mod.status.value = \"socket not open\"\r\n        } else {\r\n            var msg = {}\r\n            msg.type = 'close'\r\n            msg.device = mod.device.value\r\n            mod.socket.send(JSON.stringify(msg))\r\n        }\r\n    }\r\n\r\n    function serial_send(wsMessage) {\r\n        if (mod.socket == null) {\r\n            mod.status.value = \"socket not open\"\r\n        } else {\r\n            mod.socket.send(JSON.stringify(wsMessage))\r\n            mod.status.value = 'transmit'\r\n        }\r\n    }\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"1412.758938011284","left":"1588.9731579134627","inputs":{},"outputs":{}},"0.6064355364731827":{"definition":"//\r\n// generic line input\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'text lines input'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.textAreaIn.value =\r\n        \" G1 X0 Y0 F1400\\n\\\r\nZ16\\n\\\r\nZ5.5\\n\\\r\nG1 Z0.5\\n\\\r\nX100\\n\\\r\nY100\\n\\\r\nX3.536\\n\\\r\nY30\\n\\\r\nX7.071 Y26.465\\n\\\r\nX0 Y19.393\\n\\\r\nX7.071 Y12.322\\n\\\r\nX0 Y5.251\\n\\\r\nX95\\n\\\r\nY95\\n\\\r\nX8.536\\n\\\r\nY90\\n\\\r\nX90\\n\\\r\nY10.251\\n\\\r\nX13.535\\n\\\r\nY50.251\\n\\\r\nX14.243 Y50.958\\n\\\r\nX12.828 Y52.373\\n\\\r\nX14.243 Y53.787\\n\\\r\nX12.828 Y55.201\\n\\\r\nX14.243 Y56.615\\n\\\r\nX12.828 Y58.029\\n\\\r\nX14.243 Y59.444\\n\\\r\nX12.828 Y60.858\\n\\\r\nX14.243 Y62.272\\n\\\r\nX12.828 Y63.686\\n\\\r\nX14.243 Y65.101\\n\\\r\nX12.828 Y66.515\\n\\\r\nX14.243 Y67.929\\n\\\r\nX12.828 Y69.343\\n\\\r\nX13.889 Y70.404\\n\\\r\nX13.182 Y71.111\\n\\\r\nX13.889 Y71.818\\n\\\r\nX13.182 Y72.525\\n\\\r\nX13.889 Y73.232\\n\\\r\nX13.182 Y73.939\\n\\\r\nX13.889 Y74.646\\n\\\r\nX13.182 Y75.354\\n\\\r\nX13.889 Y76.061\\n\\\r\nX13.182 Y76.768\\n\\\r\nX13.889 Y77.475\\n\\\r\nX13.182 Y78.182\\n\\\r\nX13.889 Y78.889\\n\\\r\nX14.243 Y50.958\\n\\\r\nX12.828 Y52.373\\n\\\r\nX14.243 Y53.787\\n\\\r\nX12.828 Y55.201\\n\\\r\nX14.243 Y56.615\\n\\\r\nX12.828 Y58.029\\n\\\r\nX14.243 Y59.444\\n\\\r\nX12.828 Y60.858\\n\\\r\nX14.243 Y62.272\\n\\\r\nX12.828 Y63.686\\n\\\r\nX14.243 Y65.101\\n\\\r\nX12.828 Y66.515\\n\\\r\nX14.243 Y67.929\\n\\\r\nX12.828 Y69.343\\n\\\r\nX13.889 Y70.404\\n\\\r\nX13.182 Y71.111\\n\\\r\nX13.889 Y71.818\\n\\\r\nX13.182 Y72.525\\n\\\r\nX13.889 Y73.232\\n\\\r\nX13.182 Y73.939\\n\\\r\nX13.889 Y74.646\\n\\\r\nX13.182 Y75.354\\n\\\r\nX13.889 Y76.061\\n\\\r\nX13.182 Y76.768\\n\\\r\nX13.889 Y77.475\\n\\\r\nX13.182 Y78.182\\n\\\r\nX13.889 Y78.889\\n\\\r\nY85\\n\\\r\nX80\\n\\\r\nY84.5\\n\\\r\nX23.889\\n\\\r\nY20.251\\n\\\r\nZ5.5\\n\\\r\nG1 Z16\\n\\\r\nX0 Y0\\n\\ \"\r\n\r\n        linesToArray()\r\n\r\n        mod.lineCountDisplay.innerHTML = '0'\r\n\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        lineRequest: {\r\n            type: 'number',\r\n            label: 'line request',\r\n            event: function(evt) {\r\n                sendLine(evt.detail)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        line: {\r\n            type: 'string',\r\n            label: 'line',\r\n            event: function(str) {\r\n                mods.output(mod, 'line', str)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        mod.lineCountDisplay = make_text_display(div, 'current line')\r\n        mod.resetCurrentLine = make_button_input(div, 'reset lines')\r\n        mod.resetCurrentLine.addEventListener('click', function(){\r\n            mod.lineCountDisplay.innerHTML = '0'\r\n            currentLine = 0\r\n        })\r\n        mod.textAreaIn = makeTextArea(div, 'lines', 24, 48)\r\n    }\r\n\r\n    var currentLine = 0\r\n    var linesArray = []\r\n\r\n    function linesToArray() {\r\n        linesArray = mod.textAreaIn.value.split('\\n')\r\n    }\r\n\r\n    function sendLine() {\r\n        var lineOut = linesArray[currentLine]\r\n        currentLine++\r\n        if (currentLine > linesArray.length) {\r\n            currentLine = linesArray.length\r\n        } else {\r\n            outputs.line.event(lineOut)\r\n        }\r\n\r\n        mod.lineCountDisplay.innerHTML = currentLine.toString()\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function makeTextArea(div, name, width, height) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        div.appendChild(document.createElement('br'))\r\n        var textArea = document.createElement('textarea')\r\n        textArea.setAttribute('cols', width)\r\n        textArea.setAttribute('rows', height)\r\n        textArea.type = 'textarea'\r\n        div.appendChild(textArea)\r\n\r\n        return textArea\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"669.4030968760659","left":"803.1033266421398","inputs":{},"outputs":{}},"0.6459714071906415":{"definition":"//\r\n// gets lines of gcode, turns into instructions for mods-machines\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n\r\n/*\r\nturns lines of text into objects for machine controller \r\n*/\r\n\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'gcode parser'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.g0SpeedIn.value = '100'\r\n        mod.g1SpeedIn.value = '400'\r\n        mod.codeMode.value = 'G0'\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        gcode: {\r\n            type: 'string',\r\n            label: 'gcode',\r\n            event: function(evt) {\r\n                parseGCode(evt.detail)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        instruction: {\r\n            type: 'object',\r\n            label: 'instruction',\r\n            event: function(obj) {\r\n                mods.output(mod, 'instruction', obj)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        // we're going to convert all of these DPIs to MMs because we live in the real world now\r\n        mod.g0SpeedIn = make_text_input(div, 'G0 speed, gcode units', 12)\r\n        mod.g1SpeedIn = make_text_input(div, 'G1 speed, gcode units', 12)\r\n        mod.codeMode = make_text_input(div, 'Modality', 12)\r\n    }\r\n\r\n    function parseGCode(str) {\r\n        // get letter-value pairs\r\n        var keyvals = getKeyValues(str)\r\n        // do modality\r\n        // check this for no-g moves?\r\n        if (keyvals.G == 0 | keyvals.G == 1) {\r\n            mod.codeMode.value = 'G' + keyvals.G.toString()\r\n        } else if (keyvals.M != null) {\r\n            mod.codeMode.value = 'M' + keyvals.M.toString()\r\n        }\r\n        // do parse and object \r\n        if (mod.codeMode.value == 'G0' | mod.codeMode.value == 'G1') {\r\n\r\n            var output = {\r\n                type: 'move',\r\n                position: {},\r\n                speed: 0\r\n            }\r\n            // loop to find position vals, check for feed update\r\n            for (key in keyvals) {\r\n                if (key.match('[A-CX-Z]')) {\r\n                    output.position[key] = keyvals[key]\r\n                } else if (key.match('[F]')){\r\n                    if(mod.codeMode.value == 'G0'){\r\n                        // assert minimum speed \r\n                        mod.g0SpeedIn.value = Math.max(10, keyvals.F)\r\n                    } else {\r\n                        mod.g1SpeedIn.value = Math.max(10, keyvals.F)\r\n                    }\r\n                }\r\n            }\r\n\r\n            if(mod.codeMode.value == 'G0'){\r\n                output.speed = parseFloat(mod.g0SpeedIn.value)\r\n            } else {\r\n                output.speed = parseFloat(mod.g1SpeedIn.value)\r\n            }\r\n\r\n            outputs.instruction.event(output)\r\n        } else if (mod.codeMode.value == 'M3'){\r\n            var output = {\r\n                type: 'spindle',\r\n                speed: 0\r\n            }\r\n            if(keyvals.S != null){\r\n                output.speed = keyvals.S\r\n                outputs.instruction.event(output)\r\n            } else {\r\n                console.log('need S parameter on spindle instruction')\r\n            }\r\n        } else if (mod.codeMode.value == 'M5'){\r\n            var output = {\r\n                type: 'spindle',\r\n                speed: 0\r\n            }\r\n            output.instruction.event(output)\r\n        } else {\r\n            console.log('gcode instruction not recognized')\r\n        }\r\n    }\r\n\r\n    function getKeyValues(str) {\r\n        var kv = {}\r\n        for (var i = 0; i < str.length; i++) {\r\n            if (str[i].match('[A-Za-z]')) { // regex to match upper case letters\r\n                var lastIndex = str.indexOf(' ', i)\r\n                if (lastIndex < 0) {\r\n                    lastIndex = str.length\r\n                }\r\n                var key = str[i].toUpperCase()\r\n                kv[key] = parseFloat(str.slice(i + 1, lastIndex))\r\n            }\r\n        }\r\n        return kv\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"426.77495194393157","left":"914.2517273462793","inputs":{},"outputs":{}},"0.12892300269908796":{"definition":"//\r\n// hardware reset command\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    // globals\r\n    var mod = {}\r\n\r\n    // name\r\n    var name = 'reset'\r\n\r\n    var init = function() {\r\n        // \r\n    }\r\n\r\n    var inputs = {\r\n        //\r\n    }\r\n\r\n    var outputs = {\r\n        reset: {\r\n            type: 'packet',\r\n            label: 'headless packet out',\r\n            event: function() {\r\n                var reset = [128]\r\n                mods.output(mod, 'reset', reset)\r\n            }\r\n        }\r\n    }\r\n\r\n    var interface = function(div) {\r\n        mod.div = div\r\n\r\n        mod.resetButton = make_button_input(div, 'send')\r\n        mod.resetButton.addEventListener('click', function() {\r\n            outputs.reset.event()\r\n        })\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"1675.4042290346147","left":"1129.7813578310218","inputs":{},"outputs":{}},"0.8760539425525505":{"definition":"//\n// gets lines of gcode, turns into instructions for mods-machines\n//\n// Neil Gershenfeld and Jake Read\n// (c) Massachusetts Institute of Technology 2018\n// \n// This work may be reproduced, modified, distributed, performed, and \n// displayed for any purpose, but must acknowledge the mods\n// project. Copyright is retained and must be preserved. The work is \n// provided as is; no warranty is provided, and users accept all \n// liability.\n\n/*\nstart / stop machine on given path, \nmanually turn spindle on / off etc\ndishes gcodes -> planner, spindle codes -> spindle \n*/\n\n//\n// closure\n//\n(function() {\n    //\n    // module globals\n    //\n    var mod = {}\n    //\n    // name\n    //\n    var name = 'machine controller'\n    //\n    // initialization\n    //\n    var init = function() {\n        mod.jogStepSizeIn.value = '10'\n        mod.jogSpeedIn.value = '100'\n    }\n    //\n    // inputs\n    //\n    var inputs = {\n        lineComplete: {\n            type: 'event',\n            label: 'line complete',\n            event: function(evt) {\n                onLineComplete()\n            }\n        }\n    }\n    //\n    // outputs\n    //\n    var outputs = {\n        singleInstruction: {\n            type: 'object',\n            label: 'instruction',\n            event: function(obj) {\n                mods.output(mod, 'singleInstruction', obj)\n            }\n        },\n        lineAdvance: {\n            type: 'event',\n            label: 'line advance',\n            event: function() {\n                mods.output(mod, 'lineAdvance', true)\n            }\n        },\n        sequenceControl: {\n            type: 'integer',\n            label: 'sequence control',\n            event: function(int){\n                mods.output(mod, 'sequenceControl', int)\n            }\n        }\n    }\n    //\n    // interface\n    //\n    var interface = function(div) {\n        mod.div = div\n        //\n        // inputs\n        //\n\n        // control buttons\n\n        mod.jogStepSizeIn = make_text_input(div, 'jog increment size', 24)\n        mod.jogSpeedIn = make_text_input(div, 'jog speed', 24)\n\n        mod.jogXPButton = make_button_input(div, 'x+')\n        mod.jogXPButton.addEventListener('click', function(evt) {\n            jog('X', parseFloat(mod.jogStepSizeIn.value))\n        })\n\n        mod.jogXMButton = make_button_input(div, 'x-')\n        mod.jogXMButton.addEventListener('click', function(evt) {\n            jog('X', -parseFloat(mod.jogStepSizeIn.value))\n        })\n\n        mod.jogYPButton = make_button_input(div, 'y+')\n        mod.jogYPButton.addEventListener('click', function(evt) {\n            jog('Y', parseFloat(mod.jogStepSizeIn.value))\n        })\n\n        mod.jogYMButton = make_button_input(div, 'y-')\n        mod.jogYMButton.addEventListener('click', function(evt) {\n            jog('Y', -parseFloat(mod.jogStepSizeIn.value))\n        })\n\n        // sequence begin, stop \n\n        mod.startSequenceButton = make_button_input(div, 'start sequence')\n        mod.startSequenceButton.addEventListener('click', function(evt) {\n            startSequence(32)\n        })\n\n        mod.pauseSequenceButton = make_button_input(div, 'pause sequence')\n        mod.pauseSequenceButton.addEventListener('click', function(evt){\n            pauseSequence()\n        })\n    }\n\n    mod.isPaused = true\n\n    function startSequence(windowsize) {\n        outputs.sequenceControl.event(0)\n        for(var i = 0; i < windowsize; i ++){\n            outputs.lineAdvance.event()\n        }\n        mod.isPaused = false\n        outputs.sequenceControl.event(1)\n    }\n\n    function pauseSequence(){\n        outputs.sequenceControl.event(0)\n        mod.isPaused = true\n    }\n\n    function onLineComplete() {\n        if(mod.isPaused){\n            //\n        } else {\n            outputs.lineAdvance.event()\n        }\n    }\n\n    function jog(key, val) {\n        var instruction = {}\n        instruction.position = {}\n        instruction.position[key] = val\n        instruction.speed = mod.jogSpeedIn.value\n        instruction.type = 'move'\n\n        outputs.singleInstruction.event(instruction)\n        outputs.sequenceControl.event(1)\n    }\n\n\n    /*\n    UI helpers\n    */\n    function make_text_input(div, name, size) {\n        div.appendChild(document.createElement('br'))\n        div.appendChild(document.createTextNode(name + ': '))\n        var input = document.createElement('input')\n        input.type = 'text'\n        input.size = size\n        div.appendChild(input)\n\n        return input\n    }\n\n    function make_button_input(div, text) {\n        div.appendChild(document.createElement('br'))\n        var button = document.createElement('button')\n        button.style.padding = mods.ui.padding\n        button.style.margin = 1\n        button.appendChild(document.createTextNode(text))\n        div.appendChild(button)\n\n        return button\n    }\n\n    function make_checkbox_input(div, prefix) {\n        div.appendChild(document.createElement('br'))\n        div.appendChild(document.createTextNode(prefix + ': '))\n        var checkbox = document.createElement('input')\n        checkbox.type = 'checkbox'\n        div.appendChild(checkbox)\n\n        return checkbox\n    }\n\n    function make_text_display(div, prefix) {\n        div.appendChild(document.createElement('br'))\n        div.appendChild(document.createTextNode(prefix + ': '))\n        var span = document.createElement('span')\n        span.innerHTML = ''\n        div.appendChild(span)\n\n        return span\n    }\n\n\n    //\n    // return values\n    //\n    return ({\n        mod: mod,\n        name: name,\n        init: init,\n        inputs: inputs,\n        outputs: outputs,\n        interface: interface\n    })\n}())","top":"165.13595417545747","left":"356.0631935815046","inputs":{},"outputs":{}},"0.014676456915753922":{"definition":"//\r\n// converts toolpath objects into segments for accel planning\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n//\r\n// This work may be reproduced, modified, distributed, performed, and\r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is\r\n// provided as is; no warranty is provided, and users accept all\r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    //\r\n    // module globals\r\n    //\r\n    var mod = {}\r\n    //\r\n    // name\r\n    //\r\n    var name = 'stepper'\r\n    //\r\n    // initialization\r\n    //\r\n    var init = function() {\r\n        mod.stepper_axis_num_in.value = '0'\r\n        mod.axis_num = 0\r\n        mod.steps_per_mm_in.value = '80'\r\n        mod.convert = 80\r\n        mod.block = {\r\n            accel: 50,\r\n            cruise: 120,\r\n            entry: 0,\r\n            exit: 30,\r\n            p1: [0, 0, 0],\r\n            p2: [10, 10, 10]\r\n        }\r\n    }\r\n    //\r\n    // inputs\r\n    //\r\n    var inputs = {\r\n        block: {\r\n            type: 'object',\r\n            label: 'block',\r\n            event: function(evt) {\r\n                mod.block = JSON.parse(JSON.stringify(evt.detail)) // dereference pls\r\n                shipIt()\r\n            }\r\n        },\r\n        ack: {\r\n            type: 'packet',\r\n            label: 'headless packet in',\r\n            event: function(evt) {\r\n                onAcknowledgement(evt.detail)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // outputs\r\n    //\r\n    var outputs = {\r\n        acknowledgement: {\r\n            type: 'object',\r\n            label: 'acknowledgement',\r\n            event: function(obj) {\r\n                mods.output(mod, 'acknowledgement', obj)\r\n            }\r\n        },\r\n        packet: {\r\n            type: 'packet',\r\n            label: 'headless packet out',\r\n            event: function() {\r\n                //mods.output(mod, 'segments', null)\r\n            }\r\n        }\r\n    }\r\n    //\r\n    // interface\r\n    //\r\n    var interface = function(div) {\r\n        mod.div = div\r\n        //\r\n        // inputs\r\n        //\r\n        // settings\r\n        // the axis to pull out of the block - index of posistions on p1, p2\r\n        mod.stepper_axis_num_in = make_text_input(div, 'axis index', 12)\r\n        mod.stepper_axis_num_in.addEventListener('change', function() {\r\n            mod.axis_num = parseInt(mod.stepper_axis_num_in.value)\r\n        })\r\n        // steps per mm\r\n        mod.steps_per_mm_in = make_text_input(div, 'steps per mm', 12)\r\n        mod.steps_per_mm_in.addEventListener('change', function() {\r\n            mod.covert = parseFloat(mod.steps_per_mm_in.value)\r\n        })\r\n        // reverse?\r\n        mod.reverseCheck = make_checkbox_input(div, 'reversed')\r\n        //\r\n        // request to do the business\r\n        //\r\n        mod.send_button = make_button_input(div, 'send')\r\n        mod.send_button.addEventListener('click', function() {\r\n            shipIt()\r\n        })\r\n    }\r\n\r\n    function cartesianDistance(p1, p2) {\r\n        // takes p1, p2 to be arrays of same length\r\n        // computes cartesian distance\r\n        var sum = 0\r\n        for (var i = 0; i < p1.length; i++) {\r\n            sum += Math.pow((p1[i] - p2[i]), 2)\r\n        }\r\n        return Math.sqrt(sum)\r\n    }\r\n\r\n    function cartesianLength(v) {\r\n        // length of vector\r\n        var sum = 0\r\n        for (var i = 0; i < v.length; i++) {\r\n            sum += Math.pow(v[i], 2)\r\n        }\r\n        return Math.sqrt(sum)\r\n    }\r\n\r\n    function addMatrix(a, b, c) {\r\n        // c = a + b\r\n        a.forEach(function(item, index) {\r\n            c[index] = b[index] + a[index]\r\n        })\r\n    }\r\n\r\n    function subtractMatrix(a, b, c) {\r\n        // c = a - b\r\n        b.forEach(function(item, index) {\r\n            c[index] = a[index] - b[index]\r\n        })\r\n    }\r\n\r\n    function multiplyMatrix(a, scalar, b) {\r\n        // b = a * scalar\r\n        a.forEach(function(item, index) {\r\n            b[index] = a[index] * scalar\r\n        })\r\n    }\r\n\r\n    function multiply2dMatrix(a, scalar, b) {\r\n        // b = a * scalar\r\n        for (var i = 0; i < a.length; i++) {\r\n            for (var j = 0; j < a[i].length; j++) {\r\n                b[i][j] = a[i][j] * scalar;\r\n            }\r\n        }\r\n    }\r\n\r\n    function divideMatrix(a, scalar, b) {\r\n        // b = a / scalar\r\n        for (var i = 0; i < a.length; i++) {\r\n            b[i] = a[i] / scalar\r\n        }\r\n    }\r\n\r\n    function unitVector(p1, p2) {\r\n        // returns new array, is unit vector of p2-p1\r\n        var unit = new Array()\r\n        subtractMatrix(p2, p1, unit)\r\n        var length = cartesianLength(unit)\r\n        divideMatrix(unit, length, unit)\r\n\r\n        return unit\r\n    }\r\n\r\n    function dotProduct(a, b) {\r\n        // returns a dot b\r\n        var sum = 0;\r\n        for (var i = 0; i < a.length; i++) {\r\n            sum += a[i] * b[i]\r\n        }\r\n\r\n        return sum\r\n    }\r\n\r\n    function toFixedMatrix(a, digits) {\r\n        var rounded = new Array()\r\n        for (var i = 0; i < a.length; i++) {\r\n            rounded[i] = a[i].toFixed(digits)\r\n        }\r\n\r\n        return rounded\r\n    }\r\n\r\n    /*\r\n    now:\r\n\r\n    start from segment and find a corner\r\n    do planner\r\n\r\n    */\r\n\r\n    //\r\n    // local functions\r\n    //\r\n\r\n    function onAcknowledgement(packet){\r\n        if(packet[0] == 132){\r\n            // wait move\r\n            var ack = {}\r\n            ack.axis = mod.axis_num\r\n            ack.type = 'wait acknowledgement'\r\n            outputs.acknowledgement.event(ack)\r\n        } else if (packet[0] == 131){\r\n            var ack = {}\r\n            ack.axis = mod.axis_num \r\n            ack.type = 'move acknowledgement'\r\n            var steps = unpack32(packet, 1)\r\n            ack.increment = steps / mod.convert\r\n            outputs.acknowledgement.event(ack)\r\n        } else {\r\n            console.log('nonrecognized ack to stepper')\r\n        }\r\n        // check if was wait / was move, send response accordingly \r\n    }\r\n\r\n    function shipIt() {\r\n        // sends integer values, I think we maintain positioning because we round before subtracting\r\n\r\n        var trapezoid = calculateTrapezoid(mod.axis_num)\r\n        if (trapezoid.length == 0) {\r\n            var ok = 0\r\n            var i = 0\r\n            var waitTrap\r\n            while (!ok && i < mod.block.p1.length) {\r\n                waitTrap = calculateTrapezoid(i)\r\n                if (waitTrap.delta != 0) {\r\n                    ok = 1\r\n                } else {\r\n                    i++\r\n                }\r\n            }\r\n            if (ok) {\r\n                sendWait(waitTrap)\r\n            } else {\r\n                console.log('step zero packet, but no axis of nonzero length found', JSON.parse(JSON.stringify(mod.block)))\r\n            }\r\n        } else {\r\n            sendTrapezoid(trapezoid)\r\n        }\r\n    }\r\n\r\n    function calculateTrapezoid(axis) {\r\n        // packet (per stepper block)\r\n        // steps, entry, accel, accelLength, deccelLength\r\n        // first we fill this with all of the info we'll use to calculated\r\n        // the trapezoid in planner-space units, then we convert to steps last\r\n        var trap = {}\r\n\r\n        // lengths and positions for the move\r\n        trap.x1 = mod.block.p1[axis]\r\n        trap.x2 = mod.block.p2[axis]\r\n        trap.delta = trap.x2 - trap.x1\r\n        trap.length = Math.abs(trap.delta)\r\n\r\n        // rates for the move\r\n        var unit = unitVector(mod.block.p1, mod.block.p2)\r\n        var relativeRate = Math.abs(unit[axis])\r\n        trap.entry = mod.block.entry * relativeRate\r\n        trap.accel = mod.block.accel * relativeRate\r\n        trap.cruise = mod.block.cruise * relativeRate\r\n        trap.exit = mod.block.exit * relativeRate\r\n\r\n        // now accelLength and deccelLength\r\n        // using the maximum deltaV for the move,\r\n        // we'll figure out what type of move we have\r\n        var maxExit = Math.sqrt(trap.entry * trap.entry + 2 * trap.accel * trap.length)\r\n        var maxEntry = Math.sqrt(trap.exit * trap.entry + 2 * trap.accel * trap.length)\r\n\r\n        // there are 7 possible profiles\r\n        if (trap.length <= 0) {\r\n            // console.log('zero length trap')\r\n        } else if (maxExit <= trap.exit) {\r\n            // full ramp-up: have to push iiit to get there\r\n            //console.log('full rampup')\r\n            trap.ramptype = 'rampup'\r\n            trap.accelLength = trap.length\r\n            trap.deccelLength = trap.length + mod.convert // never decel\r\n            // for the wait function\r\n            trap.vAvg = (trap.entry + trap.exit) / 2\r\n        } else if (maxEntry <= trap.entry) {\r\n            // full ramp-down: have to deccel all the way with this rate\r\n            //console.log('full rampdown')\r\n            trap.ramptype = 'rampdown'\r\n            trap.deccelLength = 0 // start immmeeeeediately\r\n            trap.accelLength = 0 // never accel\r\n            // for the wait\r\n            trap.vAvg = (trap.entry + trap.exit) / 2\r\n        } else if (trap.cruise == trap.entry && trap.cruise == trap.exit) {\r\n            // str8 relaxin, no maxin\r\n            //console.log('full cruise')\r\n            trap.ramptype = 'cruise'\r\n            trap.accelLength = 0 // never accel\r\n            trap.deccelLength = trap.length + mod.convert // never decel\r\n            // wait\r\n            trap.vAvg = trap.cruise\r\n        } else if (trap.cruise == trap.entry) {\r\n            // cruise, then deccel\r\n            //console.log('cruise then deccel')\r\n            // for how long do we have to decel? we have to have deltaV for\r\n            trap.ramptype = 'cruiseDeccel'\r\n            var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel)\r\n            trap.deccelLength = trap.length - deccelDistance\r\n            trap.accelLength = 0; // never accel\r\n            // we really want speed by multiple times, and total distance we know, for vAvg\r\n            var tSum = (trap.cruise - trap.exit) / trap.accel + trap.deccelLength / trap.cruise\r\n            trap.vAvg = trap.length / tSum\r\n        } else if (trap.cruise == trap.exit) {\r\n            // accel, cruise? unless entry also cruise?\r\n            //console.log('accel then cruise')\r\n            trap.ramptype = 'cruiseAccel'\r\n            trap.accelLength = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel)\r\n            trap.deccelLength = trap.length + 1; // and never deccel\r\n            // wait \r\n            var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.delta - trap.accellength) / trap.cruise\r\n            trap.vAvg = trap.length / tSum\r\n        } else {\r\n            // it's either a full trap, or a triangle\r\n            var accelDistance = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel)\r\n            var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel)\r\n            if ((accelDistance + deccelDistance) < trap.length) {\r\n                //console.log('full trap')\r\n                trap.ramptype = 'fullTrap'\r\n                trap.accelLength = accelDistance\r\n                trap.deccelLength = trap.length - deccelDistance\r\n                // wait \r\n                var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.deccelLength - trap.accellength) / trap.cruise + (trap.cruise - trap.exit) / trap.accel\r\n                trap.vAvg = trap.length / tSum\r\n            } else {\r\n                //console.log('triangle')\r\n                trap.ramptype = 'triangle'\r\n                // find intersection point\r\n                var vPeak = Math.sqrt((2 * trap.accel * trap.length + Math.pow(trap.entry, 2) + Math.pow(trap.exit, 2)) / 2)\r\n                //console.log('entry, peak, exit', trap.entry, vPeak, trap.exit)\r\n                var midPoint = (vPeak * vPeak - trap.entry * trap.entry) / (2 * trap.accel)\r\n                trap.accelLength = midPoint\r\n                trap.deccelLength = midPoint\r\n                var tSum = (vPeak - trap.entry) / trap.accel + (vPeak - trap.exit) / trap.accel\r\n                trap.vAvg = trap.length / tSum\r\n            }\r\n        }\r\n\r\n        return trap\r\n    }\r\n\r\n    function sendTrapezoid(trap) {\r\n        //console.log('trapezoid', trapezoid)\r\n        var stepwiseTrap = trapezoidToStepwise(trap);\r\n\r\n        var packet = new Array();\r\n        // first, the packet header: the route, ptr and end_addr delimiter\r\n        // #define APA_END_ROUTE_DELIMITER 255\r\n        // #define APA_ROUTE_POINTER 254\r\n        // #define DELIM_KEY_TRAPEZOID 131 // is 32 bit int\r\n        // #define DELIM_KEY_WAIT 132\r\n        packet.push(131)\r\n        // now we pack these values into UART-readable bytes\r\n        // int32_t steps, uint32_t entryspeed, accel, accellength, decellength\r\n        var steps;\r\n        if(mod.reverseCheck.checked){\r\n            steps = -stepwiseTrap.steps\r\n        } else {\r\n            steps = stepwiseTrap.steps\r\n        }\r\n        packet = packet.concat(pack32(steps))\r\n        packet = packet.concat(pack32(stepwiseTrap.entry))\r\n        packet = packet.concat(pack32(stepwiseTrap.accel))\r\n        packet = packet.concat(pack32(stepwiseTrap.accelLength))\r\n        packet = packet.concat(pack32(stepwiseTrap.deccelLength))\r\n        // log this if you wish\r\n        //console.log('packet from stepper', packet)\r\n        // send it along!\r\n        mods.output(mod, 'packet', packet)\r\n    }\r\n\r\n    function sendWait(trap) {\r\n        var stepwiseTrap = trapezoidToStepwise(trap);\r\n        var packet = new Array();\r\n        // #define DELIM_KEY_WAIT 132\r\n        packet.push(132)\r\n        // now we pack these values into C-readable bytes\r\n        // int32_t steps, uint32_t entryspeed, accel, accellength, decellength\r\n        packet = packet.concat(pack32(stepwiseTrap.steps))\r\n        packet = packet.concat(pack32(stepwiseTrap.entry))\r\n        packet = packet.concat(pack32(stepwiseTrap.accel))\r\n        packet = packet.concat(pack32(stepwiseTrap.accelLength))\r\n        packet = packet.concat(pack32(stepwiseTrap.deccelLength))\r\n        // send it along!\r\n        //console.log('wait packet', packet)\r\n        mods.output(mod, 'packet', packet)\r\n    }\r\n\r\n    function trapezoidToStepwise(trap) {\r\n        var stepwise = {}\r\n        // planner units -> steps\r\n        stepwise.steps = Math.round(trap.delta * mod.convert)\r\n        // planner units -> steps/min (for less integer error)\r\n        stepwise.entry = Math.round(trap.entry * mod.convert)\r\n        // planner units -> steps/min/s (a messed up unit, I know)\r\n        stepwise.accel = Math.round(trap.accel * mod.convert)\r\n        // planner units -> steps\r\n        stepwise.accelLength = Math.round(trap.accelLength * mod.convert)\r\n        stepwise.deccelLength = Math.round(trap.deccelLength * mod.convert)\r\n\r\n        return stepwise\r\n    }\r\n\r\n    function trapezoidToStepWait(trap) {\r\n        var stepWait = {}\r\n        // planner units -> steps\r\n        stepWait.steps = Math.round(trap.length * mod.convert)\r\n        //\r\n        stepWait.vAvg = Math.round(trap.vAvg * mod.convert)\r\n        if(isNaN(stepWait.vAvg)){\r\n            console.log('err on vAvg maths in stepper')\r\n            stepWait.vAvg = 1000\r\n        }\r\n\r\n        return stepWait\r\n    }\r\n\r\n    function pack32(val) {\r\n        var pack = new Array();\r\n        pack[0] = (val >> 24) & 255;\r\n        pack[1] = (val >> 16) & 255;\r\n        pack[2] = (val >> 8) & 255;\r\n        pack[3] = val & 255;\r\n\r\n        return pack;\r\n    }\r\n\r\n    function unpack32(array, start){\r\n        var unpack = array[start] << 24 | array[start + 1] << 16 | array[start + 2] << 8 | array[start + 3]\r\n        return unpack\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n\r\n    //\r\n    // return values\r\n    //\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"1128.344212761479","left":"1597.0739725325982","inputs":{},"outputs":{}},"0.14166905728661427":{"definition":"//\r\n// event sniffer\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n    // globals\r\n    var mod = {}\r\n\r\n    // name\r\n    var name = 'event logger'\r\n\r\n    var init = function() {\r\n        mod.identifier.value = 'logger'\r\n    }\r\n\r\n    var inputs = {\r\n        event: {\r\n            type: 'any',\r\n            event: function(evt) {\r\n                console.log(mod.identifier.value, ': ', JSON.parse(JSON.stringify(evt.detail)))\r\n            }\r\n        }\r\n    }\r\n\r\n    var outputs = {}\r\n\r\n    var interface = function(div) {\r\n        mod.div = div\r\n\r\n        mod.identifier = make_text_input(div, 'identifier', 8)\r\n    }\r\n\r\n\r\n    /*\r\n    UI helpers\r\n    */\r\n    function make_text_input(div, name, size) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(name + ': '))\r\n        var input = document.createElement('input')\r\n        input.type = 'text'\r\n        input.size = size\r\n        div.appendChild(input)\r\n\r\n        return input\r\n    }\r\n\r\n    function make_button_input(div, text) {\r\n        div.appendChild(document.createElement('br'))\r\n        var button = document.createElement('button')\r\n        button.style.padding = mods.ui.padding\r\n        button.style.margin = 1\r\n        button.appendChild(document.createTextNode(text))\r\n        div.appendChild(button)\r\n\r\n        return button\r\n    }\r\n\r\n    function make_checkbox_input(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var checkbox = document.createElement('input')\r\n        checkbox.type = 'checkbox'\r\n        div.appendChild(checkbox)\r\n\r\n        return checkbox\r\n    }\r\n\r\n    function make_text_display(div, prefix) {\r\n        div.appendChild(document.createElement('br'))\r\n        div.appendChild(document.createTextNode(prefix + ': '))\r\n        var span = document.createElement('span')\r\n        span.innerHTML = ''\r\n        div.appendChild(span)\r\n\r\n        return span\r\n    }\r\n\r\n    return ({\r\n        mod: mod,\r\n        name: name,\r\n        init: init,\r\n        inputs: inputs,\r\n        outputs: outputs,\r\n        interface: interface\r\n    })\r\n}())","top":"507.5803043494294","left":"2055.6189647324964","inputs":{},"outputs":{}},"0.4370306155232835":{"definition":"//\n// converts toolpath objects into segments for accel planning\n//\n// Neil Gershenfeld and Jake Read\n// (c) Massachusetts Institute of Technology 2018\n//\n// This work may be reproduced, modified, distributed, performed, and\n// displayed for any purpose, but must acknowledge the mods\n// project. Copyright is retained and must be preserved. The work is\n// provided as is; no warranty is provided, and users accept all\n// liability.\n\n\n/*\neats objects like\nvar move = {\n  position: {\n    X: float\n    Y: float\n    Z: float\n    A: float\n  }\n  rate: float\n}\n\noutputs:\nmotors\n'planner block consumed' event\n\n\n*/\n\n//\n// closure\n//\n(function() {\n    //\n    // module globals\n    //\n    var mod = {}\n    //\n    // name\n    //\n    var name = 'motion planner'\n    //\n    // initialization\n    //\n    var init = function() {\n        mod.accelIn.value = '500'\n        mod.junctionDeviationIn.value = '1'\n        mod.minSpeedIn.value = '4'\n\n        mod.axisIdentifiers.value = 'X,Y,Z'\n        resetNetwork()\n\n        mod.netWindowIn.value = '12'\n        packetWindowSize = parseInt(mod.netWindowIn.value)\n\n        mod.queueLengthDisplay.innerHTML = moveQue.length.toString()\n\n        mod.netQueueDisplay.innerHTML = axisNetCounters.toString()\n    }\n    //\n    // inputs\n    //\n    var inputs = {\n        newMove: {\n            type: 'object',\n            label: 'move instruction',\n            event: function(evt) {\n                addToQueue(JSON.parse(JSON.stringify(evt.detail)))\n            }\n        },\n        acknowledgement: {\n            type: 'event',\n            label: 'acknowledgement',\n            event: function(evt) {\n                onAcknowledgement(evt.detail)\n            }\n        },\n        sequenceControl: {\n            type: 'integer',\n            label: 'sequence control',\n            event: function(evt) {\n                if (evt.detail == 1) {\n                    checkNetwork()\n                }\n            }\n        }\n    }\n    //\n    // outputs\n    //\n    var outputs = {\n        plannedMove: {\n            type: 'object',\n            label: 'move instruction',\n            event: function(block) {\n                var deref = JSON.parse(JSON.stringify(block))\n                mods.output(mod, 'plannedMove', deref)\n            }\n        },\n        moveComplete: {\n            type: 'event',\n            label: 'move complete',\n            event: function(evt) {\n                mods.output(mod, 'moveComplete', 1)\n            }\n        }\n    }\n    //\n    // interface\n    //\n    var interface = function(div) {\n        mod.div = div\n        //\n        // inputs\n        //\n        // settings\n        make_text_display(div, 'machine config')\n        mod.axisIdentifiers = make_text_input(div, 'axis identifiers', 12)\n        mod.axisIdentifiers.addEventListener('change', function() {\n            resetNetwork()\n        })\n        div.appendChild(document.createElement('br'))\n\n        make_text_display(div, 'planner settings')\n        mod.accelIn = make_text_input(div, 'acceleration, units/s/s', 12)\n        mod.junctionDeviationIn = make_text_input(div, 'junction deviation, units', 12)\n        mod.minSpeedIn = make_text_input(div, 'minimum speed, units/s', 12)\n        div.appendChild(document.createElement('br'))\n\n        make_text_display(div, 'queuing settings')\n        mod.queueLengthDisplay = make_text_display(div, 'instructions in queue')\n        mod.resetQueueButton = make_button_input(div, 'reset queue')\n        mod.resetQueueButton.addEventListener('click', function() {\n            resetQueue()\n        })\n        div.appendChild(document.createElement('br'))\n\n        mod.netWindowIn = make_text_input(div, 'network window size', 12)\n        mod.netWindowIn.addEventListener('change', function() {\n            packetWindowSize = parseInt(mod.netWindowIn.value)\n        })\n        mod.netQueueDisplay = make_text_display(div, 'instructions on network')\n        mod.resetNetButton = make_button_input(div, 'reset network')\n        mod.resetNetButton.addEventListener('click', function() {\n            resetNetwork()\n        })\n\n        div.appendChild(document.createElement('br'))\n        mod.netPositionDisplay = make_text_display(div, 'last position sent to network')\n        mod.finalPositionDisplay = make_text_display(div, 'last position received on network')\n\n    }\n\n    // ---------------------------------------------------- THE BUSINESS\n\n    // network state\n    var packetWindowSize = 0\n    var axisNetCounters = new Array()\n    var lastPosToNet = new Array()\n    var lastPosFromNet = new Array()\n\n\n    function resetNetwork() {\n        axisIds = mod.axisIdentifiers.value.split(',')\n        for (var i = 0; i < axisIds.length; i++) {\n            currentPosition[i] = 0\n            axisNetCounters[i] = 0\n            lastPosToNet[i] = 0\n            lastPosFromNet[i] = 0\n        }\n        mod.netPositionDisplay.innerHTML = lastPosToNet.toString()\n        mod.netQueueDisplay.innerHTML = axisNetCounters.toString()\n        mod.finalPositionDisplay.innerHTML = lastPosFromNet.toString()\n    }\n\n    // IF entry / exit are null, do min speed \n\n    function onAcknowledgement(obj) {\n        axisNetCounters[obj.axis] --\n        mod.netQueueDisplay.innerHTML = axisNetCounters.toString()\n        if(obj.type == 'move acknowledgement'){\n            //console.log('received pos', obj.increment, obj.axis)\n            lastPosFromNet[obj.axis] += obj.increment\n            var netRounded = new Array()\n            for(var i = 0; i < lastPosFromNet.length; i ++){\n                netRounded[i] = Math.round(lastPosFromNet[i] * 100) / 100\n            }\n            mod.finalPositionDisplay.innerHTML = netRounded.toString()\n        }\n        checkNetwork()\n    }\n\n    function checkNetwork() {\n        // see windowed state and push more data out if need be\n        // TODO here\n        var ok = false\n        for(var i = 0; i < axisNetCounters.length - 2; i ++){\n            if(axisNetCounters[i] == axisNetCounters[i + 1]){\n                ok = true\n            } else {\n                ok = false\n            }\n        }\n        if(ok){\n            var opening = packetWindowSize - axisNetCounters[0]\n            if(opening > moveQue.length){\n                opening = moveQue.length\n            }\n            for(var i = 0; i < opening; i++){\n                //console.log('sending', i)\n                sendMove()\n                outputs.moveComplete.event()\n            }\n        }\n    }\n\n    function sendMove() {\n        var lastPos = moveQue[0].p2\n        outputs.plannedMove.event(moveQue.shift())\n        mod.queueLengthDisplay.innerHTML = moveQue.length.toString()\n        mod.netPositionDisplay.innerHTML = lastPos.toString()\n        axisNetCounters.forEach(function(element, index){\n            axisNetCounters[index] ++\n        })\n        mod.netQueueDisplay.innerHTML = axisNetCounters.toString()\n    }\n\n\n    // planner state and moves\n    var axisIds = []\n    var moveQue = [] // array of moves \n    var currentPosition = []\n\n    /*\n            var segment = {\n            p1: p1,\n            p2: p2,\n            cruise: cruise,\n            entry: entry,\n            exit: exit,\n        }\n    */\n\n    function resetQueue() {\n        moveQue.length = 0 // apparently this works\n        mod.queueLengthDisplay.innerHTML = moveQue.length.toString()\n    }\n\n    function addToQueue(obj) {\n        // add to the move queue \n        var p1 = []\n        var p2 = []\n        if (moveQue.length == 0) {\n            p1 = currentPosition\n        } else {\n            p1 = moveQue[moveQue.length - 1].p2\n        }\n\n        // TODO: abstract axis? ids -> p1, p2\n        // find all letter-based and match to std array \n        var keyset = new Array(axisIds.length)\n        keyset.fill(0)\n\n        for (key in obj.position) {\n            for (axisId in axisIds) {\n                if (key == axisIds[axisId]) {\n                    p2[axisId] = obj.position[key]\n                    keyset[axisId] = 1\n                } else if (keyset[axisId] != 1) {\n                    p2[axisId] = p1[axisId]\n                } else {\n                    // nothing\n                }\n            }\n        }\n\n        if (cartesianDistance(p1, p2) == 0) {\n            // TODO: check for these when move is z- and have only xy actuators?\n            console.log('planner throwing zero length vector')\n        } else {\n            var cruise = obj.speed\n\n            var newMove = {\n                p1: p1,\n                p2: p2,\n                cruise: cruise,\n                entry: 0,\n                exit: 0\n            }\n\n            // append the move to the queue \n            moveQue.push(newMove)\n            mod.queueLengthDisplay.innerHTML = moveQue.length.toString()\n\n            // and then check to see if we are ready to pass anything to the motors\n            runQue()\n        }\n    }\n\n    //\n    // local functions\n    //\n    function runQue() {\n        // converting from mm/s or dpi (pixel units) to mm based units\n        // https://github.com/grbl/grbl/blob/master/grbl/planner.c\n        // https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/\n        /*\n        first we walk the queue:\n        going backwards, end at 0 speed exit\n        - find junction speed (junction deviation) between this and previous block\n        - this is entry speed, calculate trapezoid to exit speed\n        next block\n        - exit speed is recently calculated entry speed\n        - do junction deviation, this is entry speed\n        - calculate trapezoid\n        .. why is this simpler? find entry and exit speed of each block,\n         find accel limits per axis, do trapezoid with that accel\n        */\n\n        var jdsize = parseFloat(mod.junctionDeviationIn.value)\n        var accel = parseFloat(mod.accelIn.value)\n        // TODO: use these\n        var minmin = parseFloat(mod.minSpeedIn.value)\n\n        moveQue[moveQue.length - 1].exit = minmin // trailing edge always full stop\n\n        for (var i = moveQue.length - 1; i > 0; i--) {\n            // reverse pass\n            // find junction deviation\n            /*\n             - really, could only do this once per segment when a new one is added\n             - unitize entry and exit vectors\n             - find cos(theta) = Ventry dot Vexit / (|Ventry| * |Vexit|) -> this is (1*1 bc unit)\n             - find sin(theta/2) = sqrt((1-cos(theta))/2)\n             - find r = j(sin(theta/2)/(1-sin(theta/2)))\n             - find Fj = sqrt(Ac*r)\n             - junction speed is min(Fj, min(entry,exit))\n             */\n\n            var v_entry = unitVector(moveQue[i - 1].p1, moveQue[i - 1].p2)\n            var v_exit = unitVector(moveQue[i].p1, moveQue[i].p2)\n            //console.log('unit entry, unit exit', toFixedMatrix(v_entry, 3), toFixedMatrix(v_exit, 3))\n            // dot product / mag * mag where mags are 1 each bc unit\n            var cos_theta = dotProduct(v_entry, v_exit) \n            // catch corner cases (get it? - actually they are very straight cases, or very turnaround cases)\n            if (cos_theta < -0.9999999999999) {\n                cos_theta = -0.9999999999999\n            } else if (cos_theta > 0.9999999999999) {\n                cos_theta = 0.9999999999999\n            }\n            //console.log('cos_theta', cos_theta, Math.acos(cos_theta) * (180 / Math.PI))\n            // for calculating the radius, below\n            var sin_theta_overtwo = Math.sqrt((1 - cos_theta) / 2)\n            //console.log('sin_theta_overtwo', sin_theta_overtwo)\n            // size of the junction deviation curve\n            var radius = jdsize * ((1 - sin_theta_overtwo) / sin_theta_overtwo)\n            //console.log('radius', radius)\n            // feed at the junction, according to supposed acceleration through the junction radius\n            var fj = Math.sqrt(accel * radius)\n            //console.log('fj', fj)\n            // but don't go through the junction faster than we're cruising\n            var feed_junction = Math.min(fj, moveQue[i].cruise, moveQue[i - 1].cruise)\n            // and we never travel slower than the min speed \n            //feed_junction = Math.max(feed_junction, minmin)\n            //console.log('feed_junction', feed_junction)\n\n            // ok we have the maximum feed at the preceeding junction\n            // now: find the maximum entry speeds as if we spent the whole block decelerating\n\n            // size of segment\n            var distance = cartesianDistance(moveQue[i].p1, moveQue[i].p2)\n            //console.log('distance', distance)\n            var max_entry_speed = Math.sqrt(moveQue[i].exit * moveQue[i].exit + 2 * distance * accel)\n            //console.log('max_entry_speed', max_entry_speed)\n            var entry_speed = Math.min(max_entry_speed, feed_junction)\n            max_entry_speed = Math.max(max_entry_speed, minmin)\n            //console.log('entry_speed', entry_speed)\n            moveQue[i].entry = entry_speed\n            moveQue[i - 1].exit = entry_speed\n            //console.log('segment:', moveQue[i])\n            moveQue[i].accel = accel\n            moveQue[i].distance = distance\n        }\n\n        // bad bad not very good implementation to start:\n        //moveQue[0].entry = 0\n        moveQue[0].accel = accel\n        moveQue[0].distance = cartesianDistance(moveQue[0].p1, moveQue[0].p2)\n\n        // forward pass to make sure we can accelerate to set exit speed in length\n        for (var i = 0; i < moveQue.length - 1; i++) {\n            var distance = moveQue[i].distance\n            var max_exit_speed = Math.sqrt(moveQue[i].entry * moveQue[i].entry + 2 * distance * accel)\n            max_exit_speed = Math.max(max_exit_speed, minmin)\n            if (max_exit_speed < moveQue[i + 1].entry_speed) {\n                moveQue[i + 1].entry = max_exit_speed\n                moveQue[i].exit = max_exit_speed\n            }\n            if(moveQue[i].entry < minmin){\n                moveQue[i].entry = minmin\n            }\n            if(moveQue[i].exit < minmin){\n                moveQue[i].exit = minmin\n            }\n            if(moveQue[i].entry == null){\n                console.log('null entry', moveQue[i])\n                moveQue[i].entry = minmin\n            }\n            if(moveQue[i].exit == null){\n                console.log('null exit', moveQue[i])\n                moveQue[i].exit = minmin\n            }\n        }\n    }\n\n    // ---------------------------------------------------- UTILITIES\n\n    function cartesianDistance(p1, p2) {\n        // takes p1, p2 to be arrays of same length\n        // computes cartesian distance\n        var sum = 0\n        for (var i = 0; i < p1.length; i++) {\n            sum += Math.pow((p1[i] - p2[i]), 2)\n        }\n        return Math.sqrt(sum)\n    }\n\n    function cartesianLength(v) {\n        // length of vector\n        var sum = 0\n        for (var i = 0; i < v.length; i++) {\n            sum += Math.pow(v[i], 2)\n        }\n        return Math.sqrt(sum)\n    }\n\n    function addMatrix(a, b, c) {\n        // c = a + b\n        a.forEach(function(item, index) {\n            c[index] = b[index] + a[index]\n        })\n    }\n\n    function subtractMatrix(a, b, c) {\n        // c = a - b\n        b.forEach(function(item, index) {\n            c[index] = a[index] - b[index]\n        })\n    }\n\n    function multiplyMatrix(a, scalar, b) {\n        // b = a * scalar\n        a.forEach(function(item, index) {\n            b[index] = a[index] * scalar\n        })\n    }\n\n    function multiply2dMatrix(a, scalar, b) {\n        // b = a * scalar\n        for (var i = 0; i < a.length; i++) {\n            for (var j = 0; j < a[i].length; j++) {\n                b[i][j] = a[i][j] * scalar;\n            }\n        }\n    }\n\n    function divideMatrix(a, scalar, b) {\n        // b = a / scalar\n        for (var i = 0; i < a.length; i++) {\n            b[i] = a[i] / scalar\n        }\n    }\n\n    function unitVector(p1, p2) {\n        // returns new array, is unit vector of p2-p1\n        var unit = new Array()\n        subtractMatrix(p2, p1, unit)\n        var length = cartesianLength(unit)\n        divideMatrix(unit, length, unit)\n\n        return unit\n    }\n\n    function dotProduct(a, b) {\n        // returns a dot b\n        var sum = 0;\n        for (var i = 0; i < a.length; i++) {\n            sum += a[i] * b[i]\n        }\n\n        return sum\n    }\n\n    function toFixedMatrix(a, digits) {\n        var rounded = new Array()\n        for (var i = 0; i < a.length; i++) {\n            rounded[i] = a[i].toFixed(digits)\n        }\n\n        return rounded\n    }\n\n    // ---------------------------------------------------- UI HELP\n\n    function make_text_input(div, name, size) {\n        div.appendChild(document.createElement('br'))\n        div.appendChild(document.createTextNode(name + ': '))\n        var input = document.createElement('input')\n        input.type = 'text'\n        input.size = size\n        div.appendChild(input)\n\n        return input\n    }\n\n    function make_button_input(div, text) {\n        div.appendChild(document.createElement('br'))\n        var button = document.createElement('button')\n        button.style.padding = mods.ui.padding\n        button.style.margin = 1\n        button.appendChild(document.createTextNode(text))\n        div.appendChild(button)\n\n        return button\n    }\n\n    function make_checkbox_input(div, prefix) {\n        div.appendChild(document.createElement('br'))\n        div.appendChild(document.createTextNode(prefix + ': '))\n        var checkbox = document.createElement('input')\n        checkbox.type = 'checkbox'\n        div.appendChild(checkbox)\n\n        return checkbox\n    }\n\n    function make_text_display(div, prefix) {\n        div.appendChild(document.createElement('br'))\n        div.appendChild(document.createTextNode(prefix + ': '))\n        var span = document.createElement('span')\n        span.innerHTML = ''\n        div.appendChild(span)\n\n        return span\n    }\n\n    //\n    // return values\n    //\n    return ({\n        mod: mod,\n        name: name,\n        init: init,\n        inputs: inputs,\n        outputs: outputs,\n        interface: interface\n    })\n}())","top":"272.65519173158043","left":"1544.9825922895632","inputs":{},"outputs":{}}},"links":["{\"source\":\"{\\\"id\\\":\\\"0.6064355364731827\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"line\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.6459714071906415\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"gcode\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.8432772280795903\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"packet\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.550468040422489\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"packetOne\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.550468040422489\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"packetOne\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.8432772280795903\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"ack\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.12892300269908796\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"reset\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.550468040422489\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"packetOne\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.8760539425525505\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"lineAdvance\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.6064355364731827\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"lineRequest\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.014676456915753922\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"packet\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.550468040422489\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"packetThree\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.550468040422489\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"packetThree\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.014676456915753922\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"ack\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.6459714071906415\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"instruction\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4370306155232835\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"newMove\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.8760539425525505\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"singleInstruction\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4370306155232835\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"newMove\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.8432772280795903\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"acknowledgement\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4370306155232835\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"acknowledgement\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.014676456915753922\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"acknowledgement\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4370306155232835\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"acknowledgement\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.8760539425525505\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"sequenceControl\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4370306155232835\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"sequenceControl\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4370306155232835\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"plannedMove\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.8432772280795903\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"block\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4370306155232835\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"plannedMove\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.014676456915753922\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"block\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4370306155232835\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"moveComplete\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.8760539425525505\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"lineComplete\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.12892300269908796\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"reset\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.550468040422489\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"packetThree\\\"}\"}"]}
\ No newline at end of file
-- 
GitLab