Skip to content

Commit a6e3761

Browse files
authored
Fix reboot (#3986)
* Fix reboot * Remove runonce and add callback for cli * Couldn't resist * Refactoring * Forgot callback * deviceReady * Prevent callback being called twice
1 parent 0fa76eb commit a6e3761

File tree

5 files changed

+20
-51
lines changed

5 files changed

+20
-51
lines changed

src/js/gui.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ const GUI_MODES = {
1515

1616
class GuiControl {
1717
constructor() {
18-
this.auto_connect = false;
1918
this.connecting_to = false;
2019
this.connected_to = false;
2120
this.connect_lock = false;

src/js/msp/MSPHelper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2801,7 +2801,7 @@ MspHelper.prototype.writeConfiguration = function(reboot, callback) {
28012801
console.log('Configuration saved to EEPROM');
28022802
if (reboot) {
28032803
GUI.tab_switch_cleanup(function() {
2804-
MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false, reinitializeConnection);
2804+
return reinitializeConnection(callback);
28052805
});
28062806
}
28072807
if (callback) {

src/js/port_handler.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,6 @@ PortHandler.setShowManualMode = function (showManualMode) {
5656
PortHandler.reinitialize = function () {
5757
this.initialPorts = false;
5858

59-
60-
if (this.usbCheckLoop) {
61-
clearTimeout(this.usbCheckLoop);
62-
}
63-
6459
this.showAllSerialDevices = getConfig('showAllSerialDevices').showAllSerialDevices;
6560

6661
this.check(); // start listening, check after TIMEOUT_CHECK ms
@@ -92,6 +87,7 @@ PortHandler.check_serial_devices = function () {
9287
self.selectActivePort();
9388
self.initialPorts = {...self.currentPorts};
9489
GUI.updateManualPortVisibility();
90+
self.detectPort();
9591
} else {
9692
self.removePort();
9793
self.detectPort();

src/js/serial_backend.js

Lines changed: 17 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -694,9 +694,11 @@ function onClosed(result) {
694694

695695
MSP.clearListeners();
696696

697-
serial.removeEventListener('receive', read_serial_adapter);
698-
serial.removeEventListener('connect', connectHandler);
699-
serial.removeEventListener('disconnect', disconnectHandler);
697+
if (PortHandler.portPicker.selectedPort !== 'virtual') {
698+
serial.removeEventListener('receive', read_serial_adapter);
699+
serial.removeEventListener('connect', connectHandler);
700+
serial.removeEventListener('disconnect', disconnectHandler);
701+
}
700702

701703
CONFIGURATOR.connectionValid = false;
702704
CONFIGURATOR.cliValid = false;
@@ -782,53 +784,24 @@ function startLiveDataRefreshTimer() {
782784
}
783785

784786
export function reinitializeConnection(callback) {
785-
const isVirtual = CONFIGURATOR.virtualMode && GUI.connected_to == 'virtual' && CONFIGURATOR.connectionValid && serial.connectionId === 'virtual';
786-
787-
gui_log(i18n.getMessage('deviceRebooting'));
788-
789-
// Close connection gracefully if it still exists.
790-
const previousTimeStamp = connectionTimestamp;
791-
792-
if (serial.connectionId) {
793-
if (GUI.connected_to || GUI.connecting_to) {
794-
$('a.connect').trigger('click');
795-
} else {
796-
serial.disconnect();
797-
}
798-
}
799787

800788
// In virtual mode reconnect when autoconnect is enabled
801-
if (isVirtual) {
802-
return setTimeout(() => {
803-
if (PortHandler.portPicker.autoConnect) {
804-
$('a.connect').trigger('click');
805-
}
806-
if (typeof callback === 'function') {
807-
callback();
808-
}
789+
if (PortHandler.portPicker.selectedPort === 'virtual' && PortHandler.portPicker.autoConnect) {
790+
return setTimeout(function() {
791+
$('a.connect').trigger('click');
809792
}, 500);
810793
}
811794

812-
// Wait for serial or tcp connection to be available
813-
let attempts = 0;
814-
const reconnect = setInterval(waitforSerial, 100);
795+
MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false);
815796

816-
function waitforSerial() {
817-
if ((connectionTimestamp !== previousTimeStamp && CONFIGURATOR.connectionValid) || GUI.active_tab === 'firmware_flasher') {
818-
console.log(`Serial connection available after ${attempts / 10} seconds`);
819-
clearInterval(reconnect);
820-
gui_log(i18n.getMessage('deviceReady'));
797+
gui_log(i18n.getMessage('deviceRebooting'));
821798

822-
if (typeof callback === 'function') {
823-
callback();
824-
}
825-
} else {
826-
attempts++;
827-
if (attempts > 100) {
828-
clearInterval(reconnect);
829-
console.log(`failed to get serial connection, gave up after 10 seconds`);
830-
gui_log(i18n.getMessage('serialPortOpenFail'));
831-
}
832-
}
799+
// wait for the device to reboot
800+
setTimeout(function() {
801+
gui_log(i18n.getMessage('deviceReady'));
802+
}, 2000);
803+
804+
if (callback) {
805+
callback();
833806
}
834807
}

src/js/webSerial.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ class WebSerial extends EventTarget {
187187

188188
const doCleanup = async () => {
189189
if (this.reader) {
190+
// this.reader.cancel();
190191
this.reader.releaseLock();
191192
this.reader = null;
192193
}

0 commit comments

Comments
 (0)