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: <% if (portConnected){ %> Connected <% } else { %> Disconnected <% } %><br/><br/>\ + <% if(connected){ %>\ + Status: <% if (portConnected){ %> Connected <% } else { %> <span class="red">Disconnected</span> <% } %><br/><br/>\ Baud Rate: \ <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