From 2d7f2e76934cd8a9c7b12ffdca9d7f7c2d655ead Mon Sep 17 00:00:00 2001 From: Amanda Ghassaei <amandaghassaei@gmail.com> Date: Fri, 19 Jun 2015 18:19:20 -0700 Subject: [PATCH] fixing up serial comm --- js/menus/SetupCommMenuView.js | 10 +++- js/models/SerialComm.js | 91 +++++++++++++++++++++-------------- 2 files changed, 64 insertions(+), 37 deletions(-) diff --git a/js/menus/SetupCommMenuView.js b/js/menus/SetupCommMenuView.js index 99db91db..b02de02a 100644 --- a/js/menus/SetupCommMenuView.js +++ b/js/menus/SetupCommMenuView.js @@ -14,7 +14,8 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($ "click #serialFlushBuffer": "_flushBuffer", "click #nodeSetupInstructions": "_setupInstructions", "click #refreshPorts": "_refreshPorts", - "change #seriallTestMessage": "_sendTestMessage" + "change #seriallTestMessage": "_sendTestMessage", + "click #reconnectToNode": "_reconnectToNode" }, @@ -70,6 +71,10 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($ }) }, + _reconnectToNode: function(){ + serialComm.attemptToConnectToNode(); + }, + _makeTemplateJSON: function(){ return _.extend(this.model.toJSON(), serialComm.toJSON(), {allBaudRates: [300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200]}); }, @@ -99,12 +104,13 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($ </ul>\ </div>\ <a href="#" id="refreshPorts" class="btn btn-lg btn-default btn-icon"><img src="assets/imgs/refreshIcon.png"></a><br/><br/>\ - Incoming: <pre id="incomingSerialMessage"></pre><br/>\ + Incoming: <pre id="incomingSerialMessage"></pre><br/><br/>\ <input id="seriallTestMessage" value="<%= testMessage %>" placeholder="Send 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.<br/><br/>\ <a href="#" id="nodeSetupInstructions" class="btn btn-block btn-lg btn-default">Setup Instructions</a><br/>\ + <a href="#" id="reconnectToNode" class="btn btn-block btn-lg btn-success">Reconnect</a><br/>\ <% } %>\ '), diff --git a/js/models/SerialComm.js b/js/models/SerialComm.js index 41d9a45a..e880a6c0 100644 --- a/js/models/SerialComm.js +++ b/js/models/SerialComm.js @@ -4,8 +4,6 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){ - var socket = io.connect('http://localhost:8080'); - var SerialComm = Backbone.Model.extend({ defaults: { @@ -20,23 +18,37 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){ }, initialize: function(){ + this.attemptToConnectToNode(); + }, + + attemptToConnectToNode: function(){ + if (!this.get("connected")) { + this.socket = io.connect('http://localhost:8080', {'forceNew':true}); + addEventHandlers(this.socket); + } + }, + + connectionFailed: function(){ + this.set("connected", false); + this.socket.disconnect(); + this.socket = null; }, refreshPorts: function(){ - socket.emit('refreshPorts'); + this.socket.emit('refreshPorts'); }, send: function(data){ - socket.emit("dataOut", data); + this.socket.emit("dataOut", data); }, flushBuffer: function(){ - socket.emit("flush"); + this.socket.emit("flush"); }, changeProperty: function(property, value){//portName, baudRate if (property === null || property === undefined || value === null || value === undefined) return; - socket.emit(property, value);//always pass user interaction on + this.socket.emit(property, value);//always pass user interaction on this.set(property, value); } @@ -44,41 +56,50 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){ var serialComm = new SerialComm(); - socket.on('connected', function(data){ - serialComm.set("connected", true, {silent:true}); - _.each(_.keys(data), function(key){ - if (data[key] !== null) serialComm.set(key, data[key], {silent:true}); + function addEventHandlers(socket){ + + socket.on('connected', function(data){ + serialComm.set("connected", true, {silent:true}); + _.each(_.keys(data), function(key){ + if (data[key] !== null) serialComm.set(key, data[key], {silent:true}); + }); + serialComm.trigger("change"); }); - serialComm.trigger("change"); - }); - socket.on('disconnected', function(){//todo this never happens - serialComm.set("connected", false); - }); + socket.on('dataIn', function(data){ + serialComm.set("lastMessageReceived", data, {silent:true}); + serialComm.trigger("change:lastMessageReceived"); + }); - socket.on('dataIn', function(data){ - serialComm.set("lastMessageReceived", data, {silent:true}); - serialComm.trigger("change:lastMessageReceived"); - }); + socket.on('portConnected', function(data){ + console.log("connected port " + data.portName + " at " + data.baudRate); + serialComm.set("baudRate", data.baudRate); + serialComm.set("portName", data.portName) + serialComm.set("portConnected", true); + serialComm.set("error", false); + }); - socket.on('portConnected', function(data){ - console.log("connected port " + data.portName + " at " + data.baudRate); - serialComm.set("baudRate", data.baudRate); - serialComm.set("portName", data.portName) - serialComm.set("portConnected", true); - serialComm.set("error", false); - }); + socket.on('portDisconnected', function(data){ + console.log("disconnected port " + data.portName + " at " + data.baudRate); + if (serialComm.get("baudRate") != data.baudRate) return; + if (serialComm.get("portName") != data.portName) return; + serialComm.set("portConnected", false); + }); + + socket.on("errorMsg", function(error){ + serialComm.set("error", error); + }); + + socket.on("error", function(error){ + console.warn(error); + }); + + socket.on("connect_error", function(){ + serialComm.connectionFailed(); + }); + } - socket.on('portDisconnected', function(data){ - console.log("disconnected port " + data.portName + " at " + data.baudRate); - if (serialComm.get("baudRate") != data.baudRate) return; - if (serialComm.get("portName") != data.portName) return; - serialComm.set("portConnected", false); - }); - socket.on("errorMsg", function(error){ - serialComm.set("error", error); - }); -- GitLab