From 1331955ecbf52cd198e564b0637ab42e114bcdcb Mon Sep 17 00:00:00 2001 From: Amanda Ghassaei <amandaghassaei@gmail.com> Date: Thu, 10 Sep 2015 23:26:42 -0400 Subject: [PATCH] serial monitor features --- js/SerialMonitor/SerialMonitor.js | 28 +++++++++++++++++++++++++++ js/SerialMonitor/SerialMonitorView.js | 22 +++++++++++++++++++-- js/menus/CommParentMenu.js | 1 - js/menus/templates/SendMenuView.html | 2 +- js/models/SerialComm.js | 5 +++++ node/nodeServer.js | 1 + 6 files changed, 55 insertions(+), 4 deletions(-) diff --git a/js/SerialMonitor/SerialMonitor.js b/js/SerialMonitor/SerialMonitor.js index e2f623c0..936e9610 100644 --- a/js/SerialMonitor/SerialMonitor.js +++ b/js/SerialMonitor/SerialMonitor.js @@ -9,6 +9,34 @@ define(['backbone'], function(Backbone){ defaults: { autoscroll: true + }, + + history: [], + historyIndex: -1, + + appendOutput: function(message){ + this.history.unshift(message); + this.historyIndex = -1; + if (this.history.length>50) this.history.pop(); + }, + + getPrevHistElem: function(){ + this.historyIndex++; + if (this.historyIndex < 0) this.historyIndex = 0; + if (this.history.length == 0) return ""; + if (this.history.length <= this.historyIndex) this.historyIndex = this.history.length-1; + return this.history[this.historyIndex]; + }, + + getNewerHistElem: function(){ + if (this.history.length == 0) return ""; + this.historyIndex --; + if (this.historyIndex < 0) { + this.historyIndex = -1; + return ""; + } + if (this.history.length <= this.historyIndex) this.historyIndex = this.history.length-1; + return this.history[this.historyIndex]; } }); diff --git a/js/SerialMonitor/SerialMonitorView.js b/js/SerialMonitor/SerialMonitorView.js index 27e6fcea..09267d4e 100644 --- a/js/SerialMonitor/SerialMonitorView.js +++ b/js/SerialMonitor/SerialMonitorView.js @@ -10,6 +10,9 @@ define(['jquery', 'underscore', 'commParentMenu', 'serialComm', 'text!SerialMoni el: "#serialMonitorView", + parentEvents: { + }, + events: { "click #clearMonitor": "render", "change input:checkbox": "_clickCheckbox" @@ -17,14 +20,27 @@ define(['jquery', 'underscore', 'commParentMenu', 'serialComm', 'text!SerialMoni __initialize: function(){ + _.bindAll(this, "_onKeyUp"); + $(document).bind('keyup', {}, this._onKeyUp); + + this.listenTo(serialComm, "change:lastMessageSent", this._updateOutgoingMessage); this.listenTo(serialComm, "change:baudRate change:portName", this.render); this.listenTo(serialComm, "change:connected", function(){ if (!serialComm.get("connected")) this._close(); - }) + }); this.render(); }, + _onKeyUp: function(e){ + var $output = $("#sendSerialMessage"); + if ($output.is(":focus")){ + if (e.keyCode == 38) $output.val(this.model.getPrevHistElem()); + else if (e.keyCode == 40) $output.val(this.model.getNewerHistElem()); + else if (e.keyCode == 13) this._sendMessage(e); + } + }, + _clickCheckbox: function(e){ e.preventDefault(); var $target = $(e.target); @@ -63,8 +79,10 @@ define(['jquery', 'underscore', 'commParentMenu', 'serialComm', 'text!SerialMoni return this.model.toJSON(); }, - __sendMessage: function(message){ + _updateOutgoingMessage: function(){ + var message = serialComm.get("lastMessageSent"); this._addOutputData("<span class='outgoing'>" + message + "</span><br/>"); + this.model.appendOutput(message); }, _updateIncomingMessage: function(){ diff --git a/js/menus/CommParentMenu.js b/js/menus/CommParentMenu.js index 350e98e5..34c7e90f 100644 --- a/js/menus/CommParentMenu.js +++ b/js/menus/CommParentMenu.js @@ -37,7 +37,6 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm', 'commPlist' $("#sendSerialMessage").val(""); if (message == "") return; serialComm.send(message); - if (this.__sendMessage) this.__sendMessage(message); }, _updateIncomingMessage: function(){ diff --git a/js/menus/templates/SendMenuView.html b/js/menus/templates/SendMenuView.html index 76c22f25..7cbcb7ea 100644 --- a/js/menus/templates/SendMenuView.html +++ b/js/menus/templates/SendMenuView.html @@ -9,7 +9,7 @@ <a href="#" id="streamCommands" class="btn btn-block btn-lg btn-success">Stream</a> <% } %> <br/> - Incoming: <pre id="incomingSerialMessage"></pre><br/><br/> + Incoming: <pre id="incomingSerialMessage"><br/></pre><br/> Out: <input id="sendSerialMessage" value="" placeholder="Send Message" class="seventyFiveWidth form-control unresponsiveInput" type="text"><br/><br/> Next Line: <input id="nextLine" value="" placeholder="##" class="intInput form-control unresponsiveInput" type="text"> <a href="#" id="previousLineButton" class="btn btn-lg btn-default">Prev</a> diff --git a/js/models/SerialComm.js b/js/models/SerialComm.js index 1f9949a8..86691d98 100644 --- a/js/models/SerialComm.js +++ b/js/models/SerialComm.js @@ -77,6 +77,11 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){ serialComm.trigger("change:lastMessageReceived"); }); + socket.on('dataSent', function(data){ + serialComm.set("lastMessageSent", data, {silent:true}); + serialComm.trigger("change:lastMessageSent"); + }); + socket.on('portConnected', function(data){ console.log("connected port " + data.portName + " at " + data.baudRate); serialComm.set("baudRate", data.baudRate); diff --git a/node/nodeServer.js b/node/nodeServer.js index 6f7312a9..2e2f4696 100644 --- a/node/nodeServer.js +++ b/node/nodeServer.js @@ -50,6 +50,7 @@ io.on('connection', function(socket){ }); socket.on('dataOut', function(data){ + io.emit('dataSent', data); data += '\n'; console.log("Sending data: " + data); currentPort.write(new Buffer(data), function(err, res) { -- GitLab