From bfd0dbb87b61f7a545e0b4c5d9bd2d37d2361c52 Mon Sep 17 00:00:00 2001
From: Amanda Ghassaei <amandaghassaei@gmail.com>
Date: Wed, 17 Jun 2015 17:17:28 -0700
Subject: [PATCH] node server working

---
 css/main.css                  |  4 +++
 js/menus/MenuWrapperView.js   |  3 ++-
 js/menus/SetupCommMenuView.js | 28 +++++++++++++++++----
 js/models/SerialComm.js       | 30 ++++++++++++++--------
 node/nodeServer.js            | 47 ++++++++++++++++++++++++-----------
 5 files changed, 82 insertions(+), 30 deletions(-)

diff --git a/css/main.css b/css/main.css
index cae305c6..1bec8dbe 100644
--- a/css/main.css
+++ b/css/main.css
@@ -408,3 +408,7 @@ label.colorSwatches>span.icons{
 .editComposite {
     margin-left:20px;
 }
+
+.red {
+    color:red;
+}
diff --git a/js/menus/MenuWrapperView.js b/js/menus/MenuWrapperView.js
index 35b7db29..3de9f0de 100644
--- a/js/menus/MenuWrapperView.js
+++ b/js/menus/MenuWrapperView.js
@@ -37,6 +37,7 @@ define(['jquery', 'underscore', 'plist', 'backbone', 'lattice'], function($, _,
         },
 
         _onKeyUp: function(e){
+            if ($(".unresponsiveInput").is(":focus")) return;
             if ($("input").is(":focus") && e.keyCode == 13) {//enter key
                 $(e.target).blur();
                 this._renderTab();
@@ -169,7 +170,7 @@ define(['jquery', 'underscore', 'plist', 'backbone', 'lattice'], function($, _,
             if ($target.hasClass("appState")) return this.model;
             if ($target.hasClass("serialComm")) {
                 require(['serialComm'], function(serialComm){
-                    serialComm._changeProperty(property, value);
+                    serialComm.changeProperty(property, value);
                 });
                 return null;
             }
diff --git a/js/menus/SetupCommMenuView.js b/js/menus/SetupCommMenuView.js
index 41cf52d5..e8e961ef 100644
--- a/js/menus/SetupCommMenuView.js
+++ b/js/menus/SetupCommMenuView.js
@@ -11,6 +11,8 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
     return MenuParentView.extend({
 
         events: {
+            "click #serialFlushBuffer":                         "_flushBuffer",
+            "click #sendTestMessage":                           "_sendTestMessage"
         },
 
 
@@ -19,15 +21,27 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
             this.listenTo(serialComm, "change", this.render);
         },
 
+        _sendTestMessage:function(e){
+            e.preventDefault();
+            var message = $("#seriallTestMessage").val();
+            serialComm.send(message);
+        },
+
+        _flushBuffer: function(e){
+            e.preventDefault();
+            serialComm.flushBuffer();
+        },
+
         _makeTemplateJSON: function(){
             return _.extend(this.model.toJSON(), serialComm.toJSON(), {allBaudRates: [300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200]});
         },
 
         template: _.template('\
         <% if(error){ %> \
-        <div class="postWarning">Error: <%= error%></div>\
+        <div class="postWarning"><%= error%></div>\
         <% } %>\
-        Status: &nbsp;&nbsp;<% if (portConnected){ %> Connected <% } else { %> Disconnected <% } %><br/><br/>\
+        <% if(connected){ %>\
+        Status: &nbsp;&nbsp;<% if (portConnected){ %> Connected <% } else { %> <span class="red">Disconnected</span> <% } %><br/><br/>\
         Baud Rate: &nbsp;&nbsp;\
                 <div class="btn-group">\
                     <button data-toggle="dropdown" class="btn dropdown-toggle" type="button"><%= baudRate %><span class="caret"></span></button>\
@@ -45,9 +59,13 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
                             <li><a class="serialComm dropdownSelector" data-property="portName" data-value="<%= port %>" href="#"><%= port %></a></li>\
                         <% }); %>\
                     </ul>\
-                </div><br/><br/>\
-        Test Message:<br/>\
-        \
+                </div><br/><br/><br/>\
+        <a href="#" id="sendTestMessage" class="btn btn-block btn-lg btn-default">Send Test Message:</a><br/>\
+        <input id="seriallTestMessage" value="<%= testMessage %>" placeholder="Test Message" class="form-control fullWidth unresponsiveInput" type="text"><br/><br/>\
+        <a href="#" id="serialFlushBuffer" class="btn btn-block btn-lg btn-danger">Flush Buffer</a><br/>\
+        <% }else{ %>\
+        No node server found.\
+        <% } %>\
             ')
 
     });
diff --git a/js/models/SerialComm.js b/js/models/SerialComm.js
index c3c4d629..ab96eeec 100644
--- a/js/models/SerialComm.js
+++ b/js/models/SerialComm.js
@@ -12,9 +12,10 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
             connected: false,
             portConnected: false,
             availablePorts: [],
-            portName: null,
+            portName: "Select Port",
             baudRate: 200,
-            error: null
+            error: null,
+            testMessage: ""
         },
 
         initialize: function(){
@@ -22,10 +23,17 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
 
         },
 
-        _changeProperty: function(property, value){
+        send: function(data){
+            socket.emit("dataOut", data);
+        },
+
+        flushBuffer: function(){
+            socket.emit("flush");
+        },
+
+        changeProperty: function(property, value){
             if (property === null || property === undefined || value === null || value === undefined) return;
-            if (this.get(property) == value) return;
-            socket.emit(property, value);
+            socket.emit(property, value);//always pass user interaction on
             this.set(property, value);
         }
 
@@ -37,7 +45,7 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
         console.log(data);
         serialComm.set("connected", true, {silent:true});
         _.each(_.keys(data), function(key){
-            serialComm.set(key, data[key], {silent:true});
+            if (data[key] !== null) serialComm.set(key, data[key], {silent:true});
         });
         serialComm.trigger("change");
     });
@@ -46,13 +54,15 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
         serialComm.set("connected", false);
     });
 
-    socket.on('portConnected', function(baudRate){
-        serialComm.set("baudRate", baudRate);
+    socket.on('portConnected', function(data){
+        serialComm.set("baudRate", data.baudRate);
+        serialComm.set("portName", data.portName)
         serialComm.set("portConnected", true);
     });
 
-    socket.on('portDisconnected', function(baudRate){
-        if (serialComm.get("baudRate") != baudRate) return;
+    socket.on('portDisconnected', function(data){
+        if (serialComm.get("baudRate") != data.baudRate) return;
+        if (serialComm.get("portName") != data.portName) return;
         serialComm.set("portConnected", false);
     });
 
diff --git a/node/nodeServer.js b/node/nodeServer.js
index 37815fd3..71ebe42b 100644
--- a/node/nodeServer.js
+++ b/node/nodeServer.js
@@ -15,8 +15,9 @@ var io = require('socket.io').listen(8080);
 // list serial ports:
 
 
-//defualts
-var portName = '/dev/cu.usbserial-DA01L12I';
+//defaults
+var portName = null;
+var currentPort = null;
 var baudRate = 9600;
 
 //io.sockets.on('connection', function (socket) {
@@ -32,6 +33,9 @@ io.on('connection', function(socket){
             allPorts.push(port.comName);
         });
 
+        if (!portName && allPorts.length>0) portName = allPorts[0];
+        if (portName) currentPort = changePort(portName, baudRate);
+
         socket.emit('connected', {
             baudRate: baudRate,
             portName: portName,
@@ -39,11 +43,9 @@ io.on('connection', function(socket){
         });
     });
 
-
     socket.on('baudRate', function(value){
         baudRate = value;
-        changePort();
-        console.log(value);
+        currentPort = changePort(portName, baudRate);
     });
 
     socket.on('portName', function(value){
@@ -52,13 +54,19 @@ io.on('connection', function(socket){
             return;
         }
         portName = value;
-        changePort();
-        console.log(value);
+        currentPort = changePort(portName, baudRate);
+    });
+
+    socket.on('dataOut', function(data){
+        console.log(data);
+    });
+
+    socket.on('flush', function(){
+        console.log("flush");
     });
 
 
 
-    var currentPort = initPort(portName, baudRate);
 
     function initPort(_portName, _baudRate){
         var port = new SerialPort(_portName, {
@@ -68,7 +76,11 @@ io.on('connection', function(socket){
         }, false);
 
         port.open(function(error){
-            if (error) onPortError(error);
+            if (error) {
+                onPortError(error);
+                currentPort = null;
+                return;
+            }
             onPortOpen();
             port.on('data', onPortData);
             port.on('close', onPortClose);
@@ -78,14 +90,22 @@ io.on('connection', function(socket){
     }
 
     function changePort(_portName, _baudRate){
+        if (!portName) {
+            onPortError("no port name specified");
+            return null;
+        }
         if (currentPort) currentPort.close(function(error){
-            if (error) onPortError(error);
+            if (error) {
+                onPortError(error);
+                return null;
+            }
+            return initPort(_portName, _baudRate);
         });
-        currentPort = initPort(_portName, _baudRate);
+        else return initPort(_portName, _baudRate);
     }
 
     function onPortOpen(){
-        socket.emit("portConnected", baudRate);
+        socket.emit("portConnected", {baudRate: baudRate, portName:portName});
     }
 
     function onPortData(data){
@@ -93,8 +113,7 @@ io.on('connection', function(socket){
     }
 
     function onPortClose(){
-        console.log("portclosed");
-        socket.emit("portDisconnected", baudRate);
+        socket.emit("portDisconnected", {baudRate: baudRate, portName:portName});
     }
 
     function onPortError(error){
-- 
GitLab