diff --git a/js/SerialMonitor/SerialMonitor.js b/js/SerialMonitor/SerialMonitor.js index e2f623c0b10fa11128ab1f56c53a5db0bd128c69..936e9610b7b784551e5a94ce11d0617da4249017 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 27e6fceaab08361f25aba05a217a3e8baa1532cc..09267d4e67f879cc8846b8727ba13838f011b077 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 350e98e5db0274a84f4e5fcb0da1b8a8d983cfc6..34c7e90fb3022b16c4c358aceab20fef50685422 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 76c22f251171693d3b86c06393a9aa895b05b8dd..7cbcb7ea52dda4a25504955f49ab3a4df5a724e7 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 1f9949a836874587d52979cbe34ea8d3c9baada4..86691d989951e965eb9459be7639949fc9809ac6 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 6f7312a9415605fd3685dcc6303a36cf6c5d5235..2e2f469652bb9b2ff07b60febdaf8f94c8109aaa 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) {