Skip to content

Commit 65a9858

Browse files
committed
Merge branch 'master' of github-1randomdev:1RandomDev/xTool-Connect
2 parents 1ad1944 + 98fe069 commit 65a9858

5 files changed

Lines changed: 64 additions & 15 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
node_modules
1+
node_modules
2+
start.sh

main/app.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ app.whenReady().then(() => {
116116
break;
117117
}
118118
window.webContents.send('websocket:message', data);
119-
});
119+
}, appSettings);
120120
if(result.result == 'ok' && appSettings.grblBridgeEnabled) {
121121
grblBridge.start(async data => {
122122
switch(data.event) {
@@ -132,7 +132,7 @@ app.whenReady().then(() => {
132132
break;
133133
}
134134
window.webContents.send('websocket:message', 'grbl:'+data.event);
135-
});
135+
}, appSettings, deviceController);
136136
}
137137
return result;
138138
});

main/device-controller.js

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const DIRECTION_MAPPINGS = {
1010
'right': 'X'
1111
};
1212

13+
let config;
1314
let deviceAddress;
1415
let connected;
1516
let websocket;
@@ -35,10 +36,11 @@ module.exports.setupWifi = async (credentials) => {
3536
return {result: 'fail'};
3637
};
3738

38-
module.exports.connect = async (address, callback) => {
39+
module.exports.connect = async (address, callback, config_) => {
3940
if(connected) this.disconnect();
4041
deviceAddress = address;
4142
wsCallback = callback;
43+
config = config_;
4244

4345
try {
4446
let res = await axios.get(`http://${deviceAddress}:8080/ping`);
@@ -93,6 +95,11 @@ module.exports.connect = async (address, callback) => {
9395
case 'ok:IDLE':
9496
paused = false;
9597
framing = false;
98+
laserDotActive = false;
99+
break;
100+
case 'ok:WORKING_OFFLINE':
101+
framing = false;
102+
laserDotActive = false;
96103
break;
97104
case 'ok:WORKING_FRAMING':
98105
framing = true;
@@ -257,30 +264,35 @@ module.exports.moveLaser = async (direction, distance, speed) => {
257264
}
258265

259266
try {
267+
let laserDotPower = config.laserSpotIntensity;
268+
if(laserDotPower > 10) laserDotPower = 10;
269+
260270
let gcode;
261271
if(direction == 'home') {
262272
gcode =
263273
`M17 S1
264274
M207 S0
265-
M106 S1
266-
M205 X424 Y400
267275
M28
268276
M18
269277
`;
270278
} else {
271279
gcode =
272280
`M17 S1
273281
M207 S0
274-
M106 S1
275-
M205 X424 Y400
276282
M101
277283
G92 X0 Y0
278284
G90
279-
G1 ${DIRECTION_MAPPINGS[direction]+distance} F${speed*60} S0
285+
G1 ${DIRECTION_MAPPINGS[direction]+distance} F${speed*60} S${laserDotActive ? laserDotPower*10 : 0}
280286
M18
281287
`;
282288
}
283289

290+
if(laserDotActive) {
291+
let power = config.laserSpotIntensity;
292+
if(power > 10) power = 10;
293+
gcode += `M9 S${power*10} N1000000000000\n`;
294+
}
295+
284296
await this.executeGcode(gcode);
285297
} catch(err) {
286298
console.error('Moving laser failed failed:', err);
@@ -333,6 +345,21 @@ module.exports.getCurrentState = async () => {
333345
return state;
334346
};
335347

348+
module.exports.dotModeActive = async () => {
349+
if(!connected) {
350+
console.error('Requesting current dot mode state failed: Not connected');
351+
return;
352+
}
353+
354+
try {
355+
let res = await axios.get(`http://${deviceAddress}:8080/system?action=dotMode`);
356+
return res.data.dotMode == 1;
357+
} catch(err) {
358+
console.error('Requesting current state failed:', err);
359+
}
360+
return false;
361+
}
362+
336363
module.exports.getProgress = async () => {
337364
if(!connected) {
338365
console.error('Requesting current progress failed: Not connected');

main/grbl-bridge.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ const net = require('node:net');
22

33
const GRBL_PORT = 2354;
44
const GRBL_HOST = '127.0.0.1';
5-
let server, clients, callback;
5+
let server, clients, callback, config, deviceController;
66

7-
module.exports.start = (cb) => {
7+
module.exports.start = (cb, config_, deviceController_) => {
8+
config = config_;
9+
deviceController = deviceController_;
810
callback = cb;
911
if(server != null) return;
1012

@@ -109,21 +111,34 @@ module.exports.stop = () => {
109111
server = null;
110112
};
111113

112-
function fireCallback(data) {
114+
async function fireCallback(data) {
113115
if(data.event == 'complete') {
114116
if(data.gcode.length == 0) return;
115117

118+
const dotMode = await deviceController.dotModeActive();
119+
let dotModePower = config.laserSpotIntensity;
120+
if(dotModePower > 10) dotModePower = 10;
121+
116122
if(!data.isProgram) {
123+
if(dotMode) {
124+
data.gcode = data.gcode.replace(/S0/g, '');
125+
}
126+
117127
data.gcode =
118128
`M17 S1
119129
M207 S${data.isProgram ? 1 : 0}
120-
M106 S${data.isProgram ? 0 : 1}
130+
M106 S${(data.isProgram || dotMode) ? 0 : 1}
121131
M205 X430 Y400
122132
M101
123133
G92 X0 Y0
124134
G0 F9600
125-
G1 F1000
126-
${data.gcode}M18`;
135+
G1 F1000${dotMode ? 'S'+(dotModePower*10) : ''}
136+
${data.gcode}M18
137+
`;
138+
}
139+
140+
if(dotMode && deviceController.isLaserDotActive()) {
141+
data.gcode += `M9 S${dotModePower*10} N1000000000000\n`;
127142
}
128143
}
129144
callback(data);

renderer/assets/js/control.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ stopBtn.addEventListener('click', () => {
9999
currentStatus.innerText = 'Framing';
100100
pauseBtn.disabled = true;
101101
break;
102+
case 'ok:WORKING_OFFLINE':
103+
laserSpotActive = false;
104+
updateLaserSpotBtn();
105+
break;
102106
case 'ok:IDLE':
103107
gcodeDropzone.classList.remove('disabled');
104108
disableMoveButtons(false);
@@ -111,6 +115,8 @@ stopBtn.addEventListener('click', () => {
111115
clearInterval(progressUpdateTimer);
112116
progressUpdateTimer = null;
113117
currentProgress.style.width = null;
118+
laserSpotActive = false;
119+
updateLaserSpotBtn();
114120
break;
115121
case 'ok:PAUSING':
116122
currentStatus.innerText = 'Paused';

0 commit comments

Comments
 (0)