diff --git a/src/app/widgets/NavbarConnection/FirmwareSelector.jsx b/src/app/widgets/NavbarConnection/FirmwareSelector.jsx
index 4a42c03bb..b3b70e61d 100644
--- a/src/app/widgets/NavbarConnection/FirmwareSelector.jsx
+++ b/src/app/widgets/NavbarConnection/FirmwareSelector.jsx
@@ -24,9 +24,11 @@
import React from 'react';
import cx from 'classnames';
import { uniqueId } from 'lodash';
+import { GRBL } from 'app/constants';
import styles from './Index.styl';
const FirmwareSelector = ({ options = [], selectedFirmware, handleSelect }) => {
+ selectedFirmware = selectedFirmware || GRBL; // null check
return (
diff --git a/src/server/controllers/Grblhal/GrblHalController.js b/src/server/controllers/Grblhal/GrblHalController.js
index 76f5bab71..1869b5f04 100644
--- a/src/server/controllers/Grblhal/GrblHalController.js
+++ b/src/server/controllers/Grblhal/GrblHalController.js
@@ -679,7 +679,7 @@ class GrblHalController {
this.sender.unhold();
}
this.sender.ack();
- this.sender.next();
+ this.sender.next({ isOk: true });
return;
}
@@ -692,7 +692,7 @@ class GrblHalController {
log.debug(`Stop sending G-code: hold=${hold}, sent=${sent}, received=${received + 1}`);
}
this.sender.ack();
- this.sender.next();
+ this.sender.next({ isOk: true });
return;
}
@@ -1633,7 +1633,7 @@ class GrblHalController {
} else {
this.workflow.pause();
await delay(100);
- this.write('!');
+ this.write(GRBLHAL_REALTIME_COMMANDS.FEED_HOLD);
}
},
'resume': () => {
@@ -1642,24 +1642,15 @@ class GrblHalController {
},
'gcode:resume': async () => {
log.debug('gcode:resume called - program to continue sending');
- const [type] = args;
if (this.event.hasEnabledEvent(PROGRAM_RESUME)) {
this.feederCB = () => {
- if (type === GRBLHAL) {
- this.write(GRBLHAL_REALTIME_COMMANDS.CYCLE_START);
- } else {
- this.write('~');
- }
+ this.write(GRBLHAL_REALTIME_COMMANDS.CYCLE_START);
this.workflow.resume();
this.feederCB = null;
};
this.event.trigger(PROGRAM_RESUME);
} else {
- if (type === GRBLHAL) {
- this.write(GRBLHAL_REALTIME_COMMANDS.CYCLE_START);
- } else {
- this.write('~');
- }
+ this.write(GRBLHAL_REALTIME_COMMANDS.CYCLE_START);
await delay(1000);
this.workflow.resume();
}
diff --git a/src/server/lib/Sender.js b/src/server/lib/Sender.js
index 994d3b76a..21bbdeadd 100644
--- a/src/server/lib/Sender.js
+++ b/src/server/lib/Sender.js
@@ -85,8 +85,8 @@ class SPCharCounting {
}
}
- process() {
- this.callback && this.callback(this);
+ process(isOk) {
+ this.callback && this.callback(this, isOk);
}
reset() {
@@ -195,8 +195,8 @@ class Sender extends events.EventEmitter {
// character-counting
if (type === SP_TYPE_CHAR_COUNTING) {
- this.sp = new SPCharCounting(options, (sp) => {
- if (sp.queue.length > 0) {
+ this.sp = new SPCharCounting(options, (sp, isOk) => {
+ if (sp.queue.length > 0 && isOk) { // only remove line length from buffer if ok was sent
const lineLength = sp.queue.shift();
sp.dataLength -= lineLength;
}
@@ -410,7 +410,7 @@ class Sender extends events.EventEmitter {
// Tells the sender to send more data.
// @return {boolean} Returns true on success, false otherwise.
next(options = {}) {
- const { startFromLine, timePaused, forceEnd } = options;
+ const { startFromLine, timePaused, forceEnd, isOk } = options;
if (!this.state.gcode) {
return false;
@@ -451,7 +451,7 @@ class Sender extends events.EventEmitter {
}
if (this.sp) {
- this.sp.process();
+ this.sp.process(isOk);
}
// Elapsed Time