var socket, laststatus;;
var server = ''; //192.168.14.100';
var programBoard = {};
var grblParams = {}
var smoothieParams = {}
var sduploading;
var nostatusyet = true;
var safeToUpdateSliders = false;
var laststatus
var simstopped = false;
var bellstate = false;
var toast = Metro.toast.create;
$(document).ready(function() {
initSocket();
$("#command").keyup(function(event) {
event.preventDefault()
if (event.keyCode === 13) {
$("#sendCommand").click();
}
return false;
});
$("form").submit(function() {
return false;
});
});
function printLog(string) {
if (string.isString) {
// split(/\r\n|\n|\r/);
string = string.replace(/\r\n|\n|\r/, "
");
}
if ($('#console p').length > 100) {
// remove oldest if already at 300 lines
$('#console p').first().remove();
}
var template = '
';
var time = new Date();
template += '[' + (time.getHours() < 10 ? '0' : '') + time.getHours() + ":" + (time.getMinutes() < 10 ? '0' : '') + time.getMinutes() + ":" + (time.getSeconds() < 10 ? '0' : '') + time.getSeconds() + '] ';
template += string;
$('#console').append(template);
$('#console').scrollTop($("#console")[0].scrollHeight - $("#console").height());
}
function printUpdateLog(string) {
if (string.isString) {
// split(/\r\n|\n|\r/);
string = string.replace(/\r\n|\n|\r/, "
");
}
if ($('#console p').length > 100) {
// remove oldest if already at 300 lines
$('#console p').first().remove();
}
var template = '
'; var time = new Date(); template += '[' + (time.getHours() < 10 ? '0' : '') + time.getHours() + ":" + (time.getMinutes() < 10 ? '0' : '') + time.getMinutes() + ":" + (time.getSeconds() < 10 ? '0' : '') + time.getSeconds() + '] '; template += string; $('#updateconsole').append(template); $('#updateconsole').scrollTop($("#updateconsole")[0].scrollHeight - $("#updateconsole").height()); } function initSocket() { socket = io.connect(server); // socket.io init printLog("Bidirectional Websocket Interface Started ") setTimeout(function() { populatePortsMenu(); }, 2000); socket.on('disconnect', function() { console.log("WEBSOCKET DISCONNECTED") printLog("Websocket Disconnected. Driver probably quit or crashed") }); socket.on('gcodeupload', function(data) { printLog("Received new GCODE from API") editor.session.setValue(data); }); socket.on('updatedata', function(data) { // console.log(data.length, data) var toPrint = data.response; printUpdateLog("[ " + data.command + " ] " + toPrint + "") }); socket.on('updateready', function(data) { $('#applyupdatesbtn').prop('disabled', false); }); socket.on('updateprogress', function(data) { $('#checkforupdatesbtn').prop('disabled', true); $('#downloadprogress').show(); $('#downloadprogress').html(data + "%"); }); socket.on('data', function(data) { // console.log(data.length, data) var toPrint = data.response; if (data.response.indexOf("Done saving file.") != -1) { $('#sdupload_modal').modal('hide'); $("#sduploadform").show() $("#sduploadprogress").hide() $("#sduploadbtn").prop('disabled', false); $("#sduploadcancelbtn").prop('disabled', false); $("#sdmodalclosebtn").prop('disabled', false); $('#sdprogressup').css('width', '0%').attr('aria-valuenow', 0); } if (data.response.indexOf("End file list") != -1) { // We just got an M20 sd listing back... lets update UI setTimeout(function() { sdListPopulate(); }, 600); } // Parse Grbl Settings Feedback if (data.response.indexOf('$') === 0) { grblSettings(data.response) var key = data.response.split('=')[0].substr(1); var descr = grblSettingCodes[key]; toPrint = data.response + " ;" + descr }; printLog("[ " + data.command + " ] " + toPrint + "") }); socket.on("grbl", function(data) { showGrbl(true) }); function showGrbl(bool) { if (bool) { sendGcode('$$') $("#grblButtons").show() $("#firmwarename").html('Grbl') } else { $("#grblButtons").hide() $("#firmwarename").html('') } } socket.on("queueCount", function(data) { if (laststatus) { if (laststatus.comms.connectionStatus == 3) { editor.gotoLine(parseInt(data[1]) - parseInt(data[0])) } } $('#gcodesent').html("Queue: " + parseInt(data[0])); // } sduploading = data[2]; if (sduploading) { var percent = 100 - (parseInt(data[0]) / parseInt(data[1]) * 100) $('#sdprogressup').css('width', percent + '%').attr('aria-valuenow', percent); } }) socket.on('toastError', function(data) { // console.log("toast", data) toast(" " + data, null, 2300, "bg-red fg-white"); // }); socket.on('toastSuccess', function(data) { console.log("toast", data) toast(" " + data, null, 2300, "bg-green fg-white"); // }); socket.on('status', function(status) { if (nostatusyet) { $('#windowtitle').html("OpenBuids Machine Driver v" + status.driver.version) } nostatusyet = false; // if (!_.isEqual(status, laststatus)) { if (laststatus !== undefined) { if (!_.isEqual(status.comms.interfaces.ports, laststatus.comms.interfaces.ports)) { var string = "Detected a change in available ports: "; for (i = 0; i < status.comms.interfaces.ports.length; i++) { string += "[" + status.comms.interfaces.ports[i].comName + "]" } printLog(string) laststatus.comms.interfaces.ports = status.comms.interfaces.ports; populatePortsMenu(); } } // Set the Connection Toolbar option setConnectBar(status.comms.connectionStatus, status); setControlBar(status.comms.connectionStatus, status) setJogPanel(status.comms.connectionStatus, status) setConsole(status.comms.connectionStatus, status) if (status.comms.connectionStatus != 5) { bellstate = false }; if (status.comms.connectionStatus == 0) { showGrbl(false) } $('#runStatus').html("Controller: " + status.comms.runStatus); if ($('#xPos').html() != status.machine.position.work.x + " mm") { $('#xPos').html(status.machine.position.work.x + " mm"); } if ($('#yPos').html() != status.machine.position.work.y + " mm") { $('#yPos').html(status.machine.position.work.y + " mm"); } if ($('#zPos').html() != status.machine.position.work.z + " mm") { $('#zPos').html(status.machine.position.work.z + " mm"); } // $('#T0CurTemp').html(status.machine.temperature.actual.t0.toFixed(1) + " / " + status.machine.temperature.setpoint.t0.toFixed(1)); // $('#T1CurTemp').html(status.machine.temperature.actual.t1.toFixed(1) + " / " + status.machine.temperature.setpoint.t1.toFixed(1)); // $('#B0CurTemp').html(status.machine.temperature.actual.b.toFixed(1) + " / " + status.machine.temperature.setpoint.b.toFixed(1)); // setTemp(status.machine.temperature.actual.t0, status.machine.temperature.actual.t1, status.machine.temperature.actual.b) if (safeToUpdateSliders) { $('#fro').data('slider').val(status.machine.overrides.feedOverride) $('#tro').data('slider').val(status.machine.overrides.spindleOverride) } laststatus = status; }); $('#sendCommand').on('click', function() { var commandValue = $('#command').val(); sendGcode(commandValue); $('#command').val(''); }); $('#command').on('keypress', function(e) { if (e.which === 13) { $(this).attr("disabled", "disabled"); var commandValue = $('#command').val(); sendGcode(commandValue); $('#command').val(''); $(this).removeAttr("disabled"); } }); $("#sdtogglemodal").on("click", function() { $('#sdupload_modal').modal('show'); if (sduploading) { $("#sduploadform").hide() $("#sduploadprogress").show() } else { $("#sduploadform").show() $("#sduploadprogress").hide() } }) $("#sdlist").on("click", function() { sendGcode("M20"); }) var bellflash = setInterval(function() { if (!nostatusyet) { if (laststatus) { if (laststatus.comms.connectionStatus == 5) { if (bellstate == false) { $('#navbell').hide(); $('#navbellBtn1').hide(); $('#navbellBtn2').hide(); $('#navbellBtn3').hide(); bellstate = true } else { $('#navbell').show(); $('#navbellBtn1').show(); $('#navbellBtn2').show(); $('#navbellBtn3').show(); bellstate = false } } else { $('#navbell').hide(); $('#navbellBtn1').hide(); $('#navbellBtn2').hide(); $('#navbellBtn3').hide(); } } } }, 200); }; function selectPort() { socket.emit('connectTo', 'usb,' + $("#portUSB").val() + ',' + '115200'); }; function closePort() { socket.emit('closePort', 1); populatePortsMenu(); $('.mdata').val(''); } function populatePortsMenu() { var response = `` var select = $("#portUSB").data("select"); select.data(response); $('#portUSB').parent(".select").removeClass('disabled') $("#connectBtn").attr('disabled', false); } function sendGcode(gcode) { if (gcode) { socket.emit('runCommand', gcode); } } // function ContextLineRun() { //Rightclick Contextmenu in Ace editor: Send single line of gcode // sendGcode(editor.session.getLine(editor.getSelectionRange().start.row)); // $('#editorContextMenu').hide(); // } function sdListPopulate() { $('#sdfilelist').empty(); if (laststatus.machine.sdcard.list.length > 0) { for (i = laststatus.machine.sdcard.list.length - 1; i >= 0; i--) { var name = laststatus.machine.sdcard.list[i] console.log(name); if (name.length > 25) { var newname = "" newname += name.substring(0, 10) newname += "..." newname += name.substring(name.length - 10) name = newname; } if (name.indexOf("config") != -1 || name.indexOf("CONFIG") != -1) { $("#sdfilelist").append(`