Skip to content

Commit b0a0300

Browse files
committed
Add manual firmware update button
1 parent 8d683e1 commit b0a0300

5 files changed

Lines changed: 42 additions & 4 deletions

File tree

main/app.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ app.whenReady().then(() => {
7272
appSettings = {...appSettings, ...settings};
7373
saveSettings();
7474
});
75+
ipcMain.handle('settings:updateFirmware', (event, updatePath) => {
76+
return deviceController.updateFirmware(updatePath);
77+
});
7578

7679
ipcMain.handle('wifiSetup:connect', (event, credentials) => {
7780
return deviceController.setupWifi(credentials);

main/device-controller.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ module.exports.getInfo = async () => {
124124
return {};
125125
}
126126

127-
const settings = {};
127+
const settings = { ipAddress: deviceAddress };
128128

129129
try {
130130
let res = await axios.get(`http://${deviceAddress}:8080/getmachinetype`);
@@ -350,15 +350,34 @@ module.exports.getProgress = async () => {
350350

351351
module.exports.control = async (action) => {
352352
if(!connected) {
353-
console.error('Sending control message faild: Not connected');
353+
console.error('Sending control message failed: Not connected');
354354
return;
355355
}
356356

357357
try {
358358
await axios.get(`http://${deviceAddress}:8080/cnc/data?action=${action}`);
359359
if(action == 'stop') await this.executeGcode('M108\nM112 N0\nM9 S0 N0\n');
360360
} catch(err) {
361-
console.error('Sending control message faild:', err);
361+
console.error('Sending control message failed:', err);
362362
}
363363
return;
364364
};
365+
366+
module.exports.updateFirmware = async (updatePath) => {
367+
if(!connected) {
368+
console.error('Firmware update failed: Not connected');
369+
return false;
370+
}
371+
372+
try {
373+
const form = new FormData();
374+
form.append('file', fs.createReadStream(updatePath), 'update.bin');
375+
376+
const res = await axios.post(`http://${deviceAddress}:8080/upgrade`, form);
377+
console.log(res.data);
378+
return res.data == 'OK';
379+
} catch(err) {
380+
console.error('Firmware update failed:', err);
381+
return false;
382+
}
383+
}

main/preload.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ contextBridge.exposeInMainWorld('electronAPI', {
1111
scanDevices: () => ipcRenderer.invoke('deviceMenu:discover'),
1212
getSettings: () => ipcRenderer.invoke('settings:get'),
1313
saveSettings: (settings) => ipcRenderer.invoke('settings:save', settings),
14+
updateFirmware: (updatePath) => ipcRenderer.invoke('settings:updateFirmware', updatePath),
1415
uploadGcode: (path, type) => ipcRenderer.invoke('control:uploadGcode', path, type),
1516
moveLaser: (direction) => ipcRenderer.invoke('control:moveLaser', direction),
1617
setLaserDot: (active) => ipcRenderer.invoke('control:setLaserDot', active),

renderer/assets/js/settings.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@ settingsContainer.addEventListener('change', event => {
1414
settingsContainer.querySelector('[name="crossOffsetY"]').disabled = value == '1';
1515
}
1616
});
17+
document.getElementById('updateButton').addEventListener('click', async event => {
18+
let input = document.createElement('input');
19+
input.type = 'file';
20+
input.accept = '.bin';
21+
input.onchange = () => {
22+
toastr.success('The device will restart after the update has been completed.', 'Started firmware update');
23+
event.target.innerText = 'Uploading...';
24+
event.target.disabled = true;
25+
window.electronAPI.updateFirmware(input.files[0].path);
26+
};
27+
input.click();
28+
});
1729

1830
(async () => {
1931
const deviceInfo = await window.electronAPI.getDeviceInfo();

renderer/settings.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,16 @@ <h3>Device info</h3>
7373
<label for="firmwareVersion">Firmware version</label>
7474
<span class="info" name="firmwareVersion"></span>
7575
</div>
76-
<button id="updateButton" class="defaultButton">Check for updates</button>
76+
<button id="updateButton" class="defaultButton">Manual Update</button>
7777

7878
<label for="serialNumber">Serial number</label>
7979
<span class="info" name="serialNumber"></span>
8080

8181
<label for="macAddress">MAC address</label>
8282
<span class="info" name="macAddress"></span>
83+
84+
<label for="ipAddress">IP address</label>
85+
<span class="info" name="ipAddress"></span>
8386
</div>
8487

8588
<script src="assets/js/jquery.min.js"></script>

0 commit comments

Comments
 (0)