diff --git a/js/SerialMonitor/PositionControlPanelView.js b/js/SerialMonitor/PositionControlPanelView.js index c3859e32c2c9e5d0505d282d0baa9b82b9a1771e..dbe11fb94def94a3751c6d74827f0f34af179a23 100644 --- a/js/SerialMonitor/PositionControlPanelView.js +++ b/js/SerialMonitor/PositionControlPanelView.js @@ -40,6 +40,11 @@ define(['jquery', 'underscore', 'backbone', 'text!PositionControlPanelView.html' this.model.send("!"); }, + _pause: function(e){ + e.preventDefault(); + this.model.pauseStream(); + }, + _makeTemplateJSON: function(){ return {}; }, diff --git a/js/cam/Cam.js b/js/cam/Cam.js index a6563ab656354233e1206d5e65d7f745409df6d8..76e0d76fba2f9996328b2934d035f21610a1dea5 100644 --- a/js/cam/Cam.js +++ b/js/cam/Cam.js @@ -275,41 +275,47 @@ define(['underscore', 'three', 'backbone', 'appState', 'latticeCAM', 'threeModel resetSimulation: function(){ this.set("simLineNumber", 0, {silent:true}); appState.set("stockSimulationPlaying", false); + //todo isStreaming = false; three.stopAnimationLoop(); lattice.showCells("cells"); }, _stockSimulation: function(){ if (appState.get("stockSimulationPlaying")){ - three.startAnimationLoop(); - var currentLine = this.get("simLineNumber"); - if (currentLine == 0) lattice.hideCells("cells"); - var allLines = this.get("dataOut").split("\n"); - if(currentLine 0) return; - callback(); + if (callback) callback(); } var startingPos = this.components.xAxis.getPosition().add(this.components.yAxis.getPosition().add(this.components.zAxis.getPosition()));//this.components.zAxis.getAbsolutePosition();//get position of end effector diff --git a/js/cam/processes/GCodeExporter.js b/js/cam/processes/GCodeExporter.js index fd5ff5bacec7181e6f203b643a47b135831487b0..b7a7869f8bbb67aa10275d0440cebe60f4d14c23 100644 --- a/js/cam/processes/GCodeExporter.js +++ b/js/cam/processes/GCodeExporter.js @@ -123,20 +123,24 @@ define(['underscore', 'cam', 'lattice', 'three'], function(_, cam, lattice, THRE var json = line.substr(1,line.length-2); json = JSON.parse(json); machine.releaseStock(json, settings); - return callback(); + if (callback) callback(); + return; } if (line[0] == "F"){//speed this.animationSpeed = line.split("F")[1] / settings.scale; - return callback(); + if (callback) callback(); + return; } if (line == "" || line[0] == "(" || !this._isMoveCommand(line)){ - return callback(); + if (callback) callback(); + return; } if (this._isMoveCommand(line)){ return this._simulateMove(line, this.animationSpeed, machine, settings, callback); } else { console.warn("problem parsing gcode: " + line); - return callback(); + if (callback) callback(); + return; } }; diff --git a/js/menus/SendMenuView.js b/js/menus/SendMenuView.js index be5a5e9e8beab38967f9beb3b332fd8a6c004d55..ca6fe42b199a999554c8e3539fc22d8ccc4e8715 100644 --- a/js/menus/SendMenuView.js +++ b/js/menus/SendMenuView.js @@ -29,19 +29,16 @@ define(['jquery', 'underscore', 'menuParent', 'serialComm', 'commPlist', 'text!s _startStream: function(e){ e.preventDefault(); - this.model.set("stockSimulationPlaying", true); serialComm.startStream(); }, _pauseStream: function(e){ e.preventDefault(); - this.model.set("stockSimulationPlaying", false); serialComm.pauseStream(); }, _stopMachine: function(e){ e.preventDefault(); - this.model.set("stockSimulationPlaying", false); serialComm.stopStream(); }, diff --git a/js/models/MachineState.js b/js/models/MachineState.js index c1484ae46d20d1a1c66ee28ca2abb4a37d7f6a33..a6923937828276d40866762cd07ff28e8081b92d 100644 --- a/js/models/MachineState.js +++ b/js/models/MachineState.js @@ -25,7 +25,7 @@ define(['underscore', 'backbone'], function(_, Backbone){ }); if (data.stat !== null && data.stat !== undefined) { this.set("status", data.stat); - if (data.stat == 1 || data.stat == 3 || data.stat == 4) this._triggerNextCommand(); + if (this.isReadyStatus(data.stat)) this._triggerNextCommand(); } }, @@ -36,6 +36,11 @@ define(['underscore', 'backbone'], function(_, Backbone){ } else this.set("status", 10); }, + isReadyStatus: function(status){ + if (status == undefined) status = this.get("status"); + return status == 1 || status == 3 || status == 4; + }, + _triggerNextCommand: function(){ this.trigger("readyForNextCommand"); }, diff --git a/js/models/SerialComm.js b/js/models/SerialComm.js index bdf78248613b30c56fe3018d79f294dfdc225f61..ba0ff1f76b7f7c02f31150f85f8b149686ee06e9 100644 --- a/js/models/SerialComm.js +++ b/js/models/SerialComm.js @@ -2,7 +2,8 @@ * Created by aghassaei on 6/17/15. */ -define(['underscore', 'backbone', 'socketio', 'machineState'], function(_, Backbone, io, machineState){ +define(['underscore', 'backbone', 'socketio', 'machineState'], + function(_, Backbone, io, machineState){ var SerialComm = Backbone.Model.extend({ @@ -60,6 +61,33 @@ define(['underscore', 'backbone', 'socketio', 'machineState'], function(_, Backb this.socket.emit("stopStream"); }, + sendGCode: function(){ + var self = this; + var machineState = this.getMachineState(); + require(['cam'], function(cam){ + if (machineState && machineState.isReadyStatus()){ + var lineNum = cam.get("simLineNumber"); + var allLines = cam.get("dataOut").split("\n"); + if (lineNum >= 0 && lineNum < allLines.length) { + var line = allLines[lineNum]; + self.listenToOnce(machineState, "readyForNextCommand", function(){ + lineNum ++; + cam.set("simLineNumber", lineNum); + self.sendGCode(); + }); + self.send('{"gc":"' + line + '"}'); + cam.simulateCurrentLine(); + } else if (lineNum == allLines.length){ + cam.simulateCurrentLine(); + self.pauseStream(); + } else { + console.warn("invalid line number " + lineNum); + } + + } + }); + }, + refreshMachineState: function(){//when updating connection, create a new instance of machine state this.machineState.refresh(); }, @@ -119,6 +147,7 @@ define(['underscore', 'backbone', 'socketio', 'machineState'], function(_, Backb socket.on('isStreaming', function(data){ serialComm.set("isStreaming", data); + if (data == true) serialComm.sendGCode(); }); socket.on('portConnected', function(data){ diff --git a/node/nodeServer.js b/node/nodeServer.js index ef7ce05315d04fe37d8fdb2abae3e9b9f8db10e1..b52be41abf6aabca2e7b07fcd4154acab6c8d1e7 100644 --- a/node/nodeServer.js +++ b/node/nodeServer.js @@ -171,6 +171,7 @@ io.on('connection', function(socket){ function onPortOpen(name, baud){ io.emit("portConnected", {baudRate:baud, portName:name}); + setIsStreaming(false); } function onPortData(data){