From fbb8cc4505af721df98c0a8431457d93a3c9d356 Mon Sep 17 00:00:00 2001 From: openbuilds-engineer Date: Tue, 23 Jul 2019 21:04:50 +0200 Subject: [PATCH] Update --- CHANGELOG.txt | 1 + app/img/calibrate/servo/center.png | Bin 0 -> 24493 bytes app/img/calibrate/servo/down.png | Bin 0 -> 32264 bytes app/img/calibrate/servo/up.png | Bin 0 -> 32536 bytes app/index.html | 141 +- app/js/calibrate-servo.js | 0 app/js/grbl-defaults.js | 266 ++- app/js/grblsettings.js | 93 +- app/js/keyboard.js | 4 +- app/js/servo.js | 184 ++ app/js/websocket.js | 75 + grbl-servo-closeddoor.hex | 3507 ++++++++++++++-------------- grbl-servo-nodoor.hex | 3012 ++++++++++++------------ grbl-servo-opendoor.hex | 3507 ++++++++++++++-------------- grbl-servo.hex | 1878 +++++++++++++++ index.js | 229 +- package.json | 2 +- 17 files changed, 7643 insertions(+), 5256 deletions(-) create mode 100644 app/img/calibrate/servo/center.png create mode 100644 app/img/calibrate/servo/down.png create mode 100644 app/img/calibrate/servo/up.png create mode 100644 app/js/calibrate-servo.js create mode 100644 app/js/servo.js create mode 100644 grbl-servo.hex diff --git a/CHANGELOG.txt b/CHANGELOG.txt index d1eebd8..0add525 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,4 @@ +v1.0.181: Fixed bug #88 re Incremental/Continous jog focus, Revamped Grbl Predefined Profiles to use submenus and added Pen options, Integrated Servo Pen Up/Down. v1.0.180: Fixed bug #87: Don't show Update dialog while running job, Updated connection messages when Smoothieware is detected to alert user to replace it with Grbl-LPC, Increased spacing between buttons in Mobile interface (bug #90), Added Framing pass to Surfacing Wizard (Bug #83), updated 2x Dependencies v1.0.179: New 3D Viewer backend: Support G2/G3 Arcs v1.0.178: New 3D Viewer backend with support for Large Gcode Files, massively faster rendering diff --git a/app/img/calibrate/servo/center.png b/app/img/calibrate/servo/center.png new file mode 100644 index 0000000000000000000000000000000000000000..44eb20c97d4910b4592f7cdebe4ec2c6a55d122f GIT binary patch literal 24493 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 JEACi^{yzZRaP0s9 literal 0 HcmV?d00001 diff --git a/app/img/calibrate/servo/up.png b/app/img/calibrate/servo/up.png new file mode 100644 index 0000000000000000000000000000000000000000..716980c7c77574215d38ef85b7dee7c767e75ae5 GIT binary patch literal 32536 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 literal 0 HcmV?d00001 diff --git a/app/index.html b/app/index.html index b692156..6016b29 100644 --- a/app/index.html +++ b/app/index.html @@ -226,6 +226,7 @@
  • Plasma On (M3 S1000)
  • +
  • Coolant On (M8)
  • @@ -276,6 +277,7 @@
  • Calibrate X-Axes Steps/mm
  • Calibrate Y-Axes Steps/mm
  • Calibrate Z-Axes Steps/mm
  • +
  • Calibrate Servo Pen Up/Down
  • Customize Shortcut Key Assignments
  • @@ -548,6 +550,16 @@ + + + @@ -584,9 +596,18 @@ + + + - + - - - - -
    Incremental Jog @@ -634,7 +655,7 @@
    +
    @@ -822,10 +843,6 @@
    Websocket Status NOCOMM
    Installed Firmware VersionNOCOMM
    @@ -834,58 +851,92 @@
    - - +
    @@ -1193,6 +1244,7 @@ + @@ -1204,6 +1256,7 @@ + @@ -1212,4 +1265,4 @@ - \ No newline at end of file + diff --git a/app/js/calibrate-servo.js b/app/js/calibrate-servo.js new file mode 100644 index 0000000..e69de29 diff --git a/app/js/grbl-defaults.js b/app/js/grbl-defaults.js index 77da42b..7e36923 100644 --- a/app/js/grbl-defaults.js +++ b/app/js/grbl-defaults.js @@ -198,8 +198,7 @@ function selectMachine(type) { } } else if (type == "acro55") { // Acro 55 - var customFirmware = true; - var customFirmwareFile = 'acro'; + var customFirmware = 'acro'; var grblParams_def = { $0: "10", //"Step pulse time, microseconds" $1: "255", //Step idle delay, milliseconds @@ -238,8 +237,7 @@ function selectMachine(type) { } } else if (type == "acro510") { // Acro 510 - var customFirmware = true; - var customFirmwareFile = 'acro'; + var customFirmware = 'acro'; var grblParams_def = { $0: "10", //"Step pulse time, microseconds" $1: "255", //Step idle delay, milliseconds @@ -278,8 +276,7 @@ function selectMachine(type) { } } else if (type == "acro1010") { // Acro 1010 - var customFirmware = true; - var customFirmwareFile = 'acro'; + var customFirmware = 'acro'; var grblParams_def = { $0: "10", //"Step pulse time, microseconds" $1: "255", //Step idle delay, milliseconds @@ -318,8 +315,7 @@ function selectMachine(type) { } } else if (type == "acro1510") { // Acro 1510 - var customFirmware = true; - var customFirmwareFile = 'acro'; + var customFirmware = 'acro'; var grblParams_def = { $0: "10", //"Step pulse time, microseconds" $1: "255", //Step idle delay, milliseconds @@ -358,8 +354,7 @@ function selectMachine(type) { } } else if (type == "acro1515") { // Acro 1515 - var customFirmware = true; - var customFirmwareFile = 'acro'; + var customFirmware = 'acro'; var grblParams_def = { $0: "10", //"Step pulse time, microseconds" $1: "255", //Step idle delay, milliseconds @@ -396,6 +391,201 @@ function selectMachine(type) { $131: "1300.000", //Y-axis maximum travel, millimeters $132: "70.000", //Z-axis maximum travel, millimeters } + } else if (type == "acro55pen") { + // Acro 55 + var customFirmware = 'acropen'; + var grblParams_def = { + $0: "10", //"Step pulse time, microseconds" + $1: "255", //Step idle delay, milliseconds + $2: "0", //Step pulse invert, mask + $3: "1", //Step direction invert, mask + $4: "1", //Invert step enable pin, boolean + $5: "0", //Invert limit pins, boolean + $6: "0", //Invert probe pin, boolean + $10: "1", //Status report options, mask + $11: "0.020", //Junction deviation, millimeters + $12: "0.002", //Arc tolerance, millimeters + $13: "0", //Report in inches, boolean + $20: "0", //Soft limits enable, boolean + $21: "1", //Hard limits enable, boolean + $22: "1", //Homing cycle enable, boolean + $23: "7", //Homing direction invert, mask + $24: "100.000", //Homing locate feed rate, mm/min + $25: "1000.000", //Homing search seek rate, mm/min + $26: "250", //Homing switch debounce delay, milliseconds + $27: "5.000", //Homing switch pull-off distance, millimeters + $30: "255", //Maximum spindle speed, RPM + $31: "0", //Minimum spindle speed, RPM + $32: "0", //Laser-mode enable, boolean + $100: "57.143", //X-axis steps per millimeter-1/16 step + $101: "57.143", //Y-axis steps per millimeter-1/16 step + $102: "57.143", //Z-axis steps per millimeter-1/16 step + $110: "5000.000", //X-axis maximum rate, mm/min + $111: "5000.000", //Y-axis maximum rate, mm/min + $112: "5000.000", //Z-axis maximum rate, mm/min + $120: "500.000", //X-axis acceleration, mm/sec^2 + $121: "500.000", //Y-axis acceleration, mm/sec^2 + $122: "500.000", //Z-axis acceleration, mm/sec^2 + $130: "300.000", //X-axis maximum travel, millimeters + $131: "300.000", //Y-axis maximum travel, millimeters + $132: "70.000", //Z-axis maximum travel, millimeters + } + } else if (type == "acro510pen") { + // Acro 510 + var customFirmware = 'acropen'; + var grblParams_def = { + $0: "10", //"Step pulse time, microseconds" + $1: "255", //Step idle delay, milliseconds + $2: "0", //Step pulse invert, mask + $3: "1", //Step direction invert, mask + $4: "1", //Invert step enable pin, boolean + $5: "0", //Invert limit pins, boolean + $6: "0", //Invert probe pin, boolean + $10: "1", //Status report options, mask + $11: "0.020", //Junction deviation, millimeters + $12: "0.002", //Arc tolerance, millimeters + $13: "0", //Report in inches, boolean + $20: "0", //Soft limits enable, boolean + $21: "1", //Hard limits enable, boolean + $22: "1", //Homing cycle enable, boolean + $23: "7", //Homing direction invert, mask + $24: "100.000", //Homing locate feed rate, mm/min + $25: "1000.000", //Homing search seek rate, mm/min + $26: "250", //Homing switch debounce delay, milliseconds + $27: "5.000", //Homing switch pull-off distance, millimeters + $30: "255", //Maximum spindle speed, RPM + $31: "0", //Minimum spindle speed, RPM + $32: "0", //Laser-mode enable, boolean + $100: "57.143", //X-axis steps per millimeter-1/16 step + $101: "57.143", //Y-axis steps per millimeter-1/16 step + $102: "57.143", //Z-axis steps per millimeter-1/16 step + $110: "5000.000", //X-axis maximum rate, mm/min + $111: "5000.000", //Y-axis maximum rate, mm/min + $112: "5000.000", //Z-axis maximum rate, mm/min + $120: "500.000", //X-axis acceleration, mm/sec^2 + $121: "500.000", //Y-axis acceleration, mm/sec^2 + $122: "500.000", //Z-axis acceleration, mm/sec^2 + $130: "800.000", //X-axis maximum travel, millimeters + $131: "300.000", //Y-axis maximum travel, millimeters + $132: "70.000", //Z-axis maximum travel, millimeters + } + } else if (type == "acro1010pen") { + // Acro 1010 + var customFirmware = 'acropen'; + var grblParams_def = { + $0: "10", //"Step pulse time, microseconds" + $1: "255", //Step idle delay, milliseconds + $2: "0", //Step pulse invert, mask + $3: "1", //Step direction invert, mask + $4: "1", //Invert step enable pin, boolean + $5: "0", //Invert limit pins, boolean + $6: "0", //Invert probe pin, boolean + $10: "1", //Status report options, mask + $11: "0.020", //Junction deviation, millimeters + $12: "0.002", //Arc tolerance, millimeters + $13: "0", //Report in inches, boolean + $20: "0", //Soft limits enable, boolean + $21: "1", //Hard limits enable, boolean + $22: "1", //Homing cycle enable, boolean + $23: "7", //Homing direction invert, mask + $24: "100.000", //Homing locate feed rate, mm/min + $25: "1000.000", //Homing search seek rate, mm/min + $26: "250", //Homing switch debounce delay, milliseconds + $27: "5.000", //Homing switch pull-off distance, millimeters + $30: "255", //Maximum spindle speed, RPM + $31: "0", //Minimum spindle speed, RPM + $32: "0", //Laser-mode enable, boolean + $100: "57.143", //X-axis steps per millimeter-1/16 step + $101: "57.143", //Y-axis steps per millimeter-1/16 step + $102: "57.143", //Z-axis steps per millimeter-1/16 step + $110: "5000.000", //X-axis maximum rate, mm/min + $111: "5000.000", //Y-axis maximum rate, mm/min + $112: "5000.000", //Z-axis maximum rate, mm/min + $120: "500.000", //X-axis acceleration, mm/sec^2 + $121: "500.000", //Y-axis acceleration, mm/sec^2 + $122: "500.000", //Z-axis acceleration, mm/sec^2 + $130: "800.000", //X-axis maximum travel, millimeters + $131: "800.000", //Y-axis maximum travel, millimeters + $132: "70.000", //Z-axis maximum travel, millimeters + } + } else if (type == "acro1510pen") { + // Acro 1510 + var customFirmware = 'acropen'; + var grblParams_def = { + $0: "10", //"Step pulse time, microseconds" + $1: "255", //Step idle delay, milliseconds + $2: "0", //Step pulse invert, mask + $3: "1", //Step direction invert, mask + $4: "1", //Invert step enable pin, boolean + $5: "0", //Invert limit pins, boolean + $6: "0", //Invert probe pin, boolean + $10: "1", //Status report options, mask + $11: "0.020", //Junction deviation, millimeters + $12: "0.002", //Arc tolerance, millimeters + $13: "0", //Report in inches, boolean + $20: "0", //Soft limits enable, boolean + $21: "1", //Hard limits enable, boolean + $22: "1", //Homing cycle enable, boolean + $23: "7", //Homing direction invert, mask + $24: "100.000", //Homing locate feed rate, mm/min + $25: "1000.000", //Homing search seek rate, mm/min + $26: "250", //Homing switch debounce delay, milliseconds + $27: "5.000", //Homing switch pull-off distance, millimeters + $30: "255", //Maximum spindle speed, RPM + $31: "0", //Minimum spindle speed, RPM + $32: "0", //Laser-mode enable, boolean + $100: "57.143", //X-axis steps per millimeter-1/16 step + $101: "57.143", //Y-axis steps per millimeter-1/16 step + $102: "57.143", //Z-axis steps per millimeter-1/16 step + $110: "5000.000", //X-axis maximum rate, mm/min + $111: "5000.000", //Y-axis maximum rate, mm/min + $112: "5000.000", //Z-axis maximum rate, mm/min + $120: "500.000", //X-axis acceleration, mm/sec^2 + $121: "500.000", //Y-axis acceleration, mm/sec^2 + $122: "500.000", //Z-axis acceleration, mm/sec^2 + $130: "800.000", //X-axis maximum travel, millimeters + $131: "1300.000", //Y-axis maximum travel, millimeters + $132: "70.000", //Z-axis maximum travel, millimeters + } + } else if (type == "acro1515pen") { + // Acro 1515 + var customFirmware = 'acropen'; + var grblParams_def = { + $0: "10", //"Step pulse time, microseconds" + $1: "255", //Step idle delay, milliseconds + $2: "0", //Step pulse invert, mask + $3: "1", //Step direction invert, mask + $4: "1", //Invert step enable pin, boolean + $5: "0", //Invert limit pins, boolean + $6: "0", //Invert probe pin, boolean + $10: "1", //Status report options, mask + $11: "0.020", //Junction deviation, millimeters + $12: "0.002", //Arc tolerance, millimeters + $13: "0", //Report in inches, boolean + $20: "0", //Soft limits enable, boolean + $21: "1", //Hard limits enable, boolean + $22: "1", //Homing cycle enable, boolean + $23: "7", //Homing direction invert, mask + $24: "100.000", //Homing locate feed rate, mm/min + $25: "1000.000", //Homing search seek rate, mm/min + $26: "250", //Homing switch debounce delay, milliseconds + $27: "5.000", //Homing switch pull-off distance, millimeters + $30: "255", //Maximum spindle speed, RPM + $31: "0", //Minimum spindle speed, RPM + $32: "0", //Laser-mode enable, boolean + $100: "57.143", //X-axis steps per millimeter-1/16 step + $101: "57.143", //Y-axis steps per millimeter-1/16 step + $102: "57.143", //Z-axis steps per millimeter-1/16 step + $110: "5000.000", //X-axis maximum rate, mm/min + $111: "5000.000", //Y-axis maximum rate, mm/min + $112: "5000.000", //Z-axis maximum rate, mm/min + $120: "500.000", //X-axis acceleration, mm/sec^2 + $121: "500.000", //Y-axis acceleration, mm/sec^2 + $122: "500.000", //Z-axis acceleration, mm/sec^2 + $130: "1300.000", //X-axis maximum travel, millimeters + $131: "1300.000", //Y-axis maximum travel, millimeters + $132: "70.000", //Z-axis maximum travel, millimeters + } } else if (type == "minimill") { // minimill var customFirmware = false; @@ -646,19 +836,10 @@ function selectMachine(type) { if (lastSelectedMachine != type) { if (lastSelectedMachine.substr(0, 4) != type.substr(0, 4)) { - if (customFirmware) { - if (customFirmwareFile == 'acro') { + if (customFirmware == "acro") { Metro.dialog.create({ title: "Custom Firmware Required", - content: `
    The OpenBuilds Acro is a 2-axes machine. This requires a custom Grbl installation to allow 2-axes specific homing. - We can flash the new firmware for you right now. Proceeding will wipe the firmware from your controller and replace it with an Acro - specific version of Grbl. Would you like to proceed?

    Select your controller type:
    - `, + content: `
    The machine type you selected, needs a custom firmware. Please use the Firmware Flashing Wizard to upload a custom firmware image to the controller to properly support this machine.
    `, actions: [{ caption: "No Thank you", cls: "js-dialog-close", @@ -667,33 +848,46 @@ function selectMachine(type) { } }, { - caption: "I already flashed it", + caption: "Launch the Flashing Wizard", + cls: "js-dialog-close success", + onclick: function() { + populateGrblBuilderToolForm(); + setTimeout(function(){ + $('#grblAxesCount').data('select').val('2axes') + }, 500) + } + }, + + ] + }); + + console.log('This machine needs a custom firmware') + } + if (customFirmware == "acropen") { + Metro.dialog.create({ + title: "Custom Firmware Required", + content: `
    The machine type you selected, needs a custom firmware. Please use the Firmware Flashing Wizard to upload a custom firmware image to the controller to properly support this machine.
    `, + actions: [{ + caption: "No Thank you", cls: "js-dialog-close", onclick: function() { console.log("Do nothing") } }, { - caption: "Yes!", + caption: "Launch the Flashing Wizard", cls: "js-dialog-close success", onclick: function() { - $('#controlTab').click(); - $('#consoletab').click(); - $('#grblSettings').hide(); - $('.grblCalibrationMenu').addClass("disabled") - - var data = { - port: laststatus.comms.interfaces.activePort, - file: 'grbl1.1f-acro.hex', - board: $("#flashGrblController2").val() - } - socket.emit('flashGrbl', data) + populateGrblBuilderToolForm(); + setTimeout(function(){ + $('#grblAxesCount').data('select').val('servo') + }, 500) } }, ] }); - } + console.log('This machine needs a custom firmware') } } @@ -761,4 +955,4 @@ function setMachineButton(type) { } $('#context_toggle2').html(template); $('#overlayimg').html(``) -}; \ No newline at end of file +}; diff --git a/app/js/grblsettings.js b/app/js/grblsettings.js index 0e6e8f8..6878c20 100644 --- a/app/js/grblsettings.js +++ b/app/js/grblsettings.js @@ -65,6 +65,13 @@ function grblSettings(data) { $('#gotoYzeroMpos').addClass('disabled') $('#gotoZzeroMpos').addClass('disabled') } + + if (grblParams['$32'] == 1) { + console.log('Laser Mode Enabled') + $('#enLaser').removeClass('alert').addClass('success').html('ON') + } else { + $('#enLaser').removeClass('success').addClass('alert').html('OFF') + } } function grblPopulate() { @@ -75,38 +82,70 @@ function grblPopulate() {
    • -
      Load Default Settings
      Populate Grbl parameters from machine-type defaults. You can customize values as needed below
      +
      Load Default Settings
      Populate Grbl parameters from machine-type defaults. You can customize values as needed below. Remember to click Save above to apply

      @@ -594,4 +633,4 @@ var grblConfigDesc = { $130: "This sets the maximum travel from end to end for each axis in mm. This is only useful if you have soft limits (and homing) enabled, as this is only used by Grbl's soft limit feature to check if you have exceeded your machine limits with a motion command.", $131: "This sets the maximum travel from end to end for each axis in mm. This is only useful if you have soft limits (and homing) enabled, as this is only used by Grbl's soft limit feature to check if you have exceeded your machine limits with a motion command.", $132: "This sets the maximum travel from end to end for each axis in mm. This is only useful if you have soft limits (and homing) enabled, as this is only used by Grbl's soft limit feature to check if you have exceeded your machine limits with a motion command." -} \ No newline at end of file +} diff --git a/app/js/keyboard.js b/app/js/keyboard.js index 87d448a..f9ed071 100644 --- a/app/js/keyboard.js +++ b/app/js/keyboard.js @@ -27,6 +27,8 @@ $(document).ready(function() { allowContinuousJog = false; $('.distbtn').show(); } + // console.log(document.activeElement) + document.activeElement.blur(); }); @@ -405,4 +407,4 @@ function keyboardShortcutsEditor() { }); -} \ No newline at end of file +} diff --git a/app/js/servo.js b/app/js/servo.js new file mode 100644 index 0000000..7dc41dc --- /dev/null +++ b/app/js/servo.js @@ -0,0 +1,184 @@ +var servo = false; +var penupval = 128; +var pendownval = 128; + +if (localStorage.getItem("servo-calibration")) { + servo = JSON.parse(localStorage.getItem("servo-calibration")); + penupval = servo.up; + pendownval = servo.down; +} else { + servo = false; + penupval = 128 + pendownval = 128 +} + +$(document).ready(function() { + $('#pP').on('click', function(ev) { + console.log('pen up') + if (servo) { + socket.emit('runCommand', "M3S"+servo.up+"\n"); + } else { + servocalibrate() + } + }) + + $('#pM').on('click', function(ev) { + console.log('pen down') + if (servo) { + socket.emit('runCommand', "M3S"+servo.down+"\n"); + } else { + servocalibrate() + } + }) +}); + + +// Calibration Wizard + + +function penUpSend(data) { + console.log("Move to " + data) + sendGcode("M3 S"+data); +} + +function penDownSend(data) { + console.log("Move to " + data) + sendGcode("M3 S"+data); +} + +var servocaltemplate = ` + +
      + + + + + +
      + + + Step 1: Find the Pen Up Value
      + This wizard, will allow you to find the S-values specific to your servo
      + To get started, use the slider below to find the position where the Pen is lifted all the way up
      +
      + + +
      +
      +
      + Note: Do not push the servo into a hard-stop condition it may damage the servo. Just move it far enough to lift the pen up without straining +
      + +
      +
      +
      + + + +` + + + +function servocalibrate() { + Metro.dialog.create({ + clsDialog: 'dark', + id: "servocalibratedialog", + title: " Servo Calibration: Pen-Up/Pen-Down Positions", + content: servocaltemplate, + width: 750, + actions: false, + defaultAction: false + }); + setTimeout(function() { + $('#penupslider').data('slider').val(penupval) + }, 500); + +} + + +function servocalslide1() { + $('#servocalstep1').show(); + $('#servocalstep2').hide(); + $('#servocalstep3').hide(); +} + +function servocalslide2() { + $('#servocalstep1').hide(); + $('#servocalstep2').show(); + $('#servocalstep3').hide(); + setTimeout(function() { + $('#pendownslider').data('slider').val(pendownval) + }, 500); +} + +function servocalslide3() { + $('#servocalstep1').hide(); + $('#servocalstep2').hide(); + $('#servocalstep3').show(); + $('#penupval2').val($('#penupslider').data('slider').val()); + $('#pendownval2').val($('#pendownslider').data('slider').val()); + $('#penupval3').html($('#penupslider').data('slider').val()); + $('#pendownval3').html($('#pendownslider').data('slider').val()); +} + +function closeServoCal() { + console.log("Saving calibration: up: " + $('#penupslider').data('slider').val() + ", down: " + $('#pendownslider').data('slider').val()) + servo = { + up: $('#penupslider').data('slider').val(), + down: $('#pendownslider').data('slider').val() + } + penupval = $('#penupslider').data('slider').val(); + pendownval = $('#pendownslider').data('slider').val(); + localStorage.setItem("servo-calibration", JSON.stringify(servo)); + Metro.dialog.close($('#servocalstep1').parent().parent()); + console.log(servo) +} diff --git a/app/js/websocket.js b/app/js/websocket.js index d756837..ca9ea35 100644 --- a/app/js/websocket.js +++ b/app/js/websocket.js @@ -437,6 +437,81 @@ function initSocket() { laststatus = status; }); + socket.on('features', function(data) { + console.log('FEATURES', data) + for (i=0; i 4) { + var grblOptLen = data.substr(startOpt).search(/]/); + grblOpts = data.substr(startOpt, grblOptLen).split(/,/); + + status.machine.firmware.blockBufferSize = grblOpts[1]; + status.machine.firmware.rxBufferSize = grblOpts[2]; + + var features = [] + + var i = grblOpts[0].length; + while (i--) { + features.push(grblOpts[0].charAt(i)) + switch(grblOpts[0].charAt(i)) { + case 'Q': + console.log('SPINDLE_IS_SERVO Enabled') + // + break; + case 'V': // Variable spindle enabled + console.log('Variable spindle enabled') + // + break; + case 'N': // Line numbers enabled + console.log('Line numbers enabled') + // + break; + case 'M': // Mist coolant enabled + console.log('Mist coolant enabled') + // + break; + case 'C': // CoreXY enabled + console.log('CoreXY enabled') + // + break; + case 'P': // Parking motion enabled + console.log('Parking motion enabled') + // + break; + case 'Z': // Homing force origin enabled + console.log('Homing force origin enabled') + // + break; + case 'H': // Homing single axis enabled + console.log('Homing single axis enabled') + // + break; + case 'T': // Two limit switches on axis enabled + console.log('Two limit switches on axis enabled') + // + break; + case 'A': // Allow feed rate overrides in probe cycles + console.log('Allow feed rate overrides in probe cycles') + // + break; + case '$': // Restore EEPROM $ settings disabled + console.log('Restore EEPROM $ settings disabled') + // + break; + case '#': // Restore EEPROM parameter data disabled + console.log('Restore EEPROM parameter data disabled') + // + break; + case 'I': // Build info write user string disabled + console.log('Build info write user string disabled') + // + break; + case 'E': // Force sync upon EEPROM write disabled + console.log('Force sync upon EEPROM write disabled') + // + break; + case 'W': // Force sync upon work coordinate offset change disabled + console.log('Force sync upon work coordinate offset change disabled') + // + break; + case 'L': // Homing init lock sets Grbl into an alarm state upon power up + console.log('Homing init lock sets Grbl into an alarm state upon power up') + // + break; + } + } + status.machine.firmware.features = features; + io.sockets.emit("features", features); + } + } + // [PRB:0.000,0.000,0.000:0] if (data.indexOf("[PRB:") === 0) { if (status.machine.probe.request.plate) { @@ -917,7 +874,7 @@ io.on("connection", function(socket) { stopPort(); } // end of machine identification - // Machine Feedback: Temperature and Position + // Machine Feedback: Position if (data.indexOf("<") === 0) { // console.log(' Got statusReport (Grbl & Smoothieware)') // statusfeedback func @@ -2196,6 +2153,7 @@ if (isElectron()) { console.log("path" + openFilePath); readFile(openFilePath); } + status.driver.operatingsystem = 'windows'; } if (process.platform == 'darwin' || uploadedgcode.length > 1) { @@ -2447,6 +2405,7 @@ if (isElectron()) { console.log('Running on Raspberry Pi!'); status.driver.operatingsystem = 'rpi' startChrome(); + status.driver.operatingsystem = 'raspberrypi'; } else { console.log("Running under NodeJS..."); } diff --git a/package.json b/package.json index b5b1e51..3f2909a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "OpenBuildsCONTROL", - "version": "1.0.180", + "version": "1.0.181", "license": "AGPL-3.0", "description": "Machine Interface Driver for OpenBuilds", "author": "github.com/openbuilds ",